{"version":3,"file":"index.mjs","names":["MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","debug","debug","re","t","MAX_LENGTH","parseOptions","compareIdentifiers","debug","re","parseOptions","SemVer","version","MAX_LENGTH","t","i","prerelease","SemVer","parse","version","parse","valid","version","parse","clean","version","SemVer","inc","version","parse","diff","SemVer","major","SemVer","minor","SemVer","patch","parse","prerelease","version","SemVer","compare","compare","rcompare","compare","compareLoose","SemVer","compareBuild","compareBuild","sort","list","compareBuild","rsort","list","compare","gt","compare","lt","compare","eq","compare","neq","compare","gte","compare","lte","eq","neq","gt","gte","lt","lte","cmp","SemVer","parse","re","coerce","version","t","major","Range","parseOptions","Comparator","r","i","cache","re","t","version","SemVer","debug","p","z","ANY","Comparator","r","SemVer","version","cmp","Range","debug","Range","satisfies","version","Range","toComparators","SemVer","Range","maxSatisfying","SemVer","Range","minSatisfying","SemVer","Range","gt","minVersion","i","Range","validRange","SemVer","Comparator","Range","satisfies","gt","lt","lte","gte","outside","version","i","ANY","outside","gtr","version","outside","ltr","version","Range","intersects","satisfies","compare","version","Range","Comparator","satisfies","compare","subset","gt","lt","eq","constants","parse","coerce","satisfies","stream","i","resolve","target","__require","all","p","r","t","env","format","i","parse","sep","onError","p","diff","target","#hasDate","#hasTime","#offset","numeric","depth","comma","t","hasOwn","stringify","#status","#reportable","errors","data","readFileSync$1","readFileSync","buffer","findWranglerConfig","callback","timeout","UndiciError","instance","ConnectTimeoutError","HeadersTimeoutError","HeadersOverflowError","BodyTimeoutError","InvalidArgumentError","InvalidReturnValueError","AbortError","RequestAbortedError","InformationalError","RequestContentLengthMismatchError","ResponseContentLengthMismatchError","ClientDestroyedError","ClientClosedError","SocketError","NotSupportedError","BalancedPoolMissingUpstreamError","HTTPParserError","data","ResponseExceededMaxSizeError","RequestRetryError","ResponseError","SecureProxyConnectionError","MaxOriginsReachedError","Socks5ProxyError","MessageSizeExceededError","wellknownHeaderNames","headerNameLowerCasedRecord","buffer","i","tree","i","headerNameLowerCasedRecord","assert","stream","net","EE","timers","BodyAsyncIterable","kBody","kBodyUsed","noop","wrapRequestBody","isStream","isFormDataLike","isIterable","isBlobLike","pathHasQueryOrFragment","serializePathWithQuery","stringify","InvalidArgumentError","path","idx","getServerName","hasSafeIterator","isBuffer","kDestroyed","destroy","headerNameLowerCasedRecord","bufferToLowerCasedHeaderName","parseHeaders","i","n","buffer","assertRequestHandler","upgrade","isDisturbed","ReadableStreamFrom","addAbortListener","isValidHTTPToken","isValidHeaderValue","parseRangeHeader","removeAllListeners","request","err","getProtocolFromUrlString","kEnumerableProperty","normalizedMethodRecordsBase","normalizedMethodRecords","ClientStats","kConnected","kPending","kRunning","kSize","PoolStats","kFree","kQueued","diagnosticsChannel","util","channels","version","path","assert","Request","path","InvalidArgumentError","normalizedMethodRecords","isValidHTTPToken","upgrade","isValidHeaderValue","serializePathWithQuery","i","hasSafeIterator","channels","abort","resume","request","NotSupportedError","WrapHandler","#handler","abort","resume","data","InvalidArgumentError","EventEmitter","WrapHandler","Dispatcher","target","kResume","#abort","abort","#paused","#aborted","#reason","UnwrapHandler","#handler","#controller","parseHeaders","resume","data","InvalidArgumentError","Dispatcher","DispatcherBase","kDestroyed","kClosed","callback","resolve","data","InvalidArgumentError","ClientDestroyedError","i","kClose","err","kDestroy","kDispatch","net","assert","util","tls","ref","buildConnector","InvalidArgumentError","timeout","connect","session","callback","i","wasmBase64","wasmBuffer","Buffer","Buffer","corsSafeListedMethodsSet","nullBodyStatus","redirectStatusSet","badPortsSet","referrerPolicyTokens","referrerPolicy","requestRedirect","safeMethodsSet","requestMode","requestCredentials","requestCache","requestBodyHeader","requestDuplex","forbiddenMethodsSet","subresourceSet","getGlobalOrigin","setGlobalOrigin","utf8DecodeBytes","buffer","assert","collectASequenceOfCodePoints","collectASequenceOfCodePointsFast","forgivingBase64","data","buffer","isomorphicDecode","i","isomorphicEncode","parseJSONFromBytes","utf8DecodeBytes","removeASCIIWhitespace","removeChars","serializeJavascriptValueToJSONString","assert","HTTP_TOKEN_CODEPOINTS","dataURLProcessor","URLSerializer","collectASequenceOfCodePointsFast","isomorphicDecode","parseMIMEType","i","removeHTTPWhitespace","collectASequenceOfCodePoints","collectAnHTTPQuotedString","extractValue","serializeAMimeType","removeChars","minimizeSupportedMimeType","#map","#detectRuntimeFeature","assert","webidl","runtimeFeatures","r","n","inspect","types","keys","zlib","assert","responseLocationURL","redirectStatusSet","isValidHeaderValue","i","requestCurrentURL","request","requestBadPort","urlIsHttpHttpsScheme","isErrorLike","isValidReasonPhrase","isValidHeaderName","isValidHTTPToken","setRequestReferrerPolicyOnRedirect","crossOriginResourcePolicyCheck","corsCheck","TAOCheck","appendFetchMetadata","appendRequestOriginHeader","urlHasHttpsScheme","sameOrigin","clampAndCoarsenConnectionTimingInfo","coarsenedSharedCurrentTime","performance","createOpaqueTimingInfo","makePolicyContainer","clonePolicyContainer","determineRequestsReferrer","globalOrigin","getGlobalOrigin","webidl","urlIsLocal","tryUpgradeRequestToAPotentiallyTrustworthyURL","isAborted","isCancelled","normalizedMethodRecordsBase","#target","target","#kind","#index","iteratorMixin","fullyReadBody","readableStreamClose","readAllBytes","isUint8Array","simpleRangeHeaderValue","data","buildContentRange","isomorphicEncode","Transform","#zlibOptions","callback","createInflate","extractMimeType","getDecodeSplit","parseMIMEType","removeChars","list","hasAuthenticationEntry","includesCredentials","isTraversableNavigable","environmentSettingsObject","nodeUtil","FormData","webidl","makeEntry","#state","entry","depth","kEnumerableProperty","assert","i","chars","multipartFormDataParser","webidl","bufferToLowerCasedHeaderName","buffer","createDeferredPromise","resolve","util","assert","runtimeFeatures","textEncoder","noop","streamRegistry","stream","isDisturbed","isErrored","extractBody","webidl","chunk","ReadableStreamFrom","readableStreamClose","safelyExtractBody","cloneBody","serializeAMimeType","instance","utf8DecodeBytes","FormData","value","mixinBody","bodyUnusable","promise","createDeferredPromise","data","extractMimeType","assert","util","constants","extractBody","p","upgrade","Parser","exports","kMaxHeadersSize","kMaxResponseSize","data","request","kQueue","kRunningIdx","kSocket","kClient","kError","kHTTPContext","kUrl","InformationalError","kResume","SocketError","kReset","kBodyTimeout","kRunning","kPipelining","timeout","kKeepAliveTimeoutThreshold","kKeepAliveMaxTimeout","kKeepAliveTimeoutValue","kKeepAliveDefaultTimeout","connectH1","kClosed","onSocketClose","callback","kOnError","kPending","i","kPendingIdx","kSize","kHeadersTimeout","shouldSendContentLength","bodyLength","kStrictContentLength","RequestContentLengthMismatchError","abort","RequestAbortedError","kMaxRequests","kCounter","path","kHostHeader","n","channels","writeStream","finished","writeBuffer","writeBlob","buffer","writeIterable","resolve","assert","util","extractBody","connectH2","kHTTP2InitialWindowSize","kHTTP2ConnectionWindowSize","kUrl","kMaxConcurrentStreams","kClient","kPingInterval","kClosed","request","callback","kRunning","kSize","InformationalError","kError","kOnError","kResume","SocketError","kHTTPContext","kRunningIdx","kQueue","kPendingIdx","kPending","i","kBodyTimeout","upgrade","InvalidArgumentError","n","stream","abort","RequestAbortedError","path","kHTTP2Stream","headers","kStrictContentLength","channels","pipeline","buffer","resolve","assert","net","util","Request","DispatcherBase","buildConnector","kClosedResolve","InvalidArgumentError","noop","Client","connect","tls","callback","kUrl","kConnector","kNeedDrain","kQueue","kResume","sync","kPending","kRunning","kSize","kConnected","kBusy","kDispatch","request","kClose","resolve","kDestroy","i","channels","err","kClient","InformationalError","kSize","data","FixedQueue","tail","DispatcherBase","FixedQueue","kClients","kNeedDrain","kOnDrain","kOnConnect","kOnDisconnect","kOnConnectionError","kGetDispatcher","kAddClient","kRemoveClient","PoolBase","i","client","kConnected","kRunning","kClose","resolve","kDestroy","kDispatch","kUrl","Client","util","buildConnector","kOptions","kConnections","kFactory","defaultFactory","Pool","PoolBase","InvalidArgumentError","factory","connect","tls","kUrl","target","kClients","kGetDispatcher","kRemoveClient","kNeedDrain","kAddClient","Pool","util","kFactory","kOptions","kIndex","t","defaultFactory","BalancedPool","PoolBase","factory","InvalidArgumentError","kClients","pool","kUrl","kAddClient","i","kRemoveClient","p","kGetDispatcher","kNeedDrain","Client","util","buildConnector","kOptions","kFactory","defaultFactory","RoundRobinPool","InvalidArgumentError","factory","connect","tls","kUrl","target","kClients","DispatcherBase","Pool","Client","util","kFactory","kOptions","defaultFactory","Agent","factory","InvalidArgumentError","connect","kClients","kDispatch","result","kClose","kDestroy","net","parseAddress","Buffer","InvalidArgumentError","buffer","p","i","debug","debuglog","Socks5Client","EventEmitter","InvalidArgumentError","Buffer","data","request","i","version","net","DispatcherBase","Pool","buildConnector","debuglog","kProxyHeaders","Socks5ProxyAgent","InvalidArgumentError","URL","onError","socket","timeout","kDispatch","resolve","kClose","kDestroy","Agent","Pool","DispatcherBase","buildConnector","Client","Socks5ProxyAgent","kAgent","noop","InvalidArgumentError","factory","#client","kDispatch","data","resume","path","kClose","kDestroy","ProxyAgent","#getUrl","connect","origin","protocol","opts","RequestAbortedError","channels","callback","promises","i","ProxyAgent","Agent","EnvHttpProxyAgent","#opts","#parseNoProxy","#getProxyAgentForUrl","kClose","#shouldProxy","#noProxyChanged","#noProxyEntries","#noProxyValue","i","#noProxyEnv","assert","WrapHandler","RetryHandler","isDisturbed","Dispatcher","RetryHandler","RetryAgent","#agent","#options","Client","H2CClient","InvalidArgumentError","assert","util","kBody","kContentLength","noop","Readable","resume","abort","RequestAbortedError","callback","InvalidArgumentError","AbortError","resolve","stream","consume","n","buffer","i","assert","util","noop","AsyncResource","InvalidArgumentError","callback","RequestAbortedError","abort","Readable","request","resolve","data","RequestAbortedError","addSignal","removeSignal","assert","util","noop","AsyncResource","InvalidArgumentError","callback","factory","abort","InvalidReturnValueError","res","resume","resolve","data","assert","util","noop","Readable","resume","RequestAbortedError","AsyncResource","InvalidArgumentError","callback","abort","body","pipeline","assert","util","AsyncResource","InvalidArgumentError","callback","abort","SocketError","resolve","data","assert","util","InvalidArgumentError","callback","abort","resolve","data","MockNotMatchedError","UndiciError","instance","matchValue","i","mockDispatch","normalizeSearchParams","path","getResponseData","data","serializePathWithQuery","addMockDispatch","buildKey","STATUS_CODES","kDispatches","abort","resume","buildMockDispatch","kMockAgent","kOrigin","kOriginalDispatch","kGetNetConnect","normalizeOrigin","buildAndValidateMockOptions","InvalidArgumentError","mockDispatch","InvalidArgumentError","MockInterceptor","serializePathWithQuery","kDispatches","kIgnoreTrailingSlash","data","replyParameters","Client","Symbols","MockClient","InvalidArgumentError","kMockAgent","kOrigin","kIgnoreTrailingSlash","kDispatches","kConnected","kOriginalDispatch","kOriginalClose","buildMockDispatch","kClose","MockInterceptor","promisify","InvalidArgumentError","log","MockCallHistoryLog","MockCallHistory","kMockCallHistoryAddLog","Pool","MockPool","InvalidArgumentError","kIgnoreTrailingSlash","kDispatches","promisify","PendingInterceptorsFormatter","Transform","path","Agent","MockClient","MockPool","Dispatcher","MockAgent","InvalidArgumentError","path","MockCallHistory","result","UndiciError","createHeaderFilters","matchHeaders","crypto","runtimeFeatures","hashId","isUrlExcludedFactory","normalizeHeaders","i","validateSnapshotMode","InvalidArgumentError","normalizeHeaders","ignore","SnapshotRecorder","#snapshotPath","#maxSnapshots","#autoFlush","#headerFilters","#isUrlExcluded","#startAutoFlush","request","#snapshots","#scheduleFlush","path","InvalidArgumentError","data","resolve","UndiciError","dirname","#flushTimeout","setTimeout","#stopAutoFlush","Agent","MockAgent","WrapHandler","warningEmitted","SnapshotAgent","InvalidArgumentError","#asyncDispatch","#replaySnapshot","#recordAndReplay","#setupMockInterceptors","request","Agent","getGlobalDispatcher","setGlobalDispatcher","InvalidArgumentError","assert","DecoratorHandler","#handler","#onCompleteCalled","#onErrorCalled","#onResponseStartCalled","util","assert","EE","noop","RedirectHandler","InvalidArgumentError","path","i","RedirectHandler","DecoratorHandler","#contentType","#statusCode","#decoder","#headers","#body","#checkContentType","RetryHandler","DecoratorHandler","InvalidArgumentError","#maxSize","#abort","#controller","RequestAbortedError","#dumped","#size","DecoratorHandler","hasSafeIterator","normalizeHeaders","i","#maxItems","#records","#maxTTL","#defaultLookup","#defaultPick","#origin","#newOrigin","#opts","#state","#dispatch","#firstTry","InvalidArgumentError","instance","makeCacheKey","normalizeHeaders","assertCacheKey","assertCacheValue","parseCacheControlHeader","i","parseVaryHeader","isEtagUsable","assertCacheStore","assertCacheMethods","makeDeduplicationKey","parseHttpDate","util","CacheHandler","#store","#cacheType","#cacheByDefault","#cacheKey","#handler","#writeStream","parseCacheControlHeader","MemoryCacheStore","#maxCount","#maxSize","#maxEntrySize","#size","#count","#entries","Writable","#hasEmittedMaxSizeEvent","key","entries","entry","assert","CacheRevalidationHandler","callback","#callback","#handler","#allowErrorStatusCodes","#successful","#context","assert","util","i","stream","Readable","isStale","handleResult","headers","opts","normalizeHeaders","makeCacheKey","result","DecoratorHandler","createInflate","runtimeFeatures","warningEmitted","#skipStatusCodes","#skipErrorResponses","i","#decompressors","#setupDecompressorEvents","#shouldSkipDecompression","#createDecompressionChain","#cleanupDecompressors","#setupSingleDecompressor","#setupMultipleDecompressors","DeduplicationHandler","#primaryHandler","#onComplete","#maxBufferSize","#completed","#responseDataStarted","#createWaitingHandler","#responseStarted","#statusCode","#headers","#statusMessage","#waitingHandlers","#controller","#pruneDoneWaitingHandlers","#aborted","#bufferWaitingChunk","#flushWaitingHandler","#errorWaitingHandler","util","opts","SqliteCacheStore","#maxEntrySize","#maxCount","#db","#getValuesQuery","#updateValueQuery","#insertValueQuery","#deleteByUrlQuery","#countEntriesQuery","#deleteExpiredValuesQuery","#deleteOldValuesQuery","#findValue","#makeValueUrl","#prune","Writable","i","assert","util","i","fill","webidl","isValidHeaderName","getHeadersGuard","getHeadersList","target","HeadersList","Headers","kConstruct","#headersList","#guard","list","depth","kEnumerableProperty","util","nodeUtil","assert","Response","fromInnerResponse","makeNetworkError","webidl","extractBody","data","makeResponse","redirectStatusSet","#state","isomorphicEncode","URLSerializer","kConstruct","#headers","Headers","bodyUnusable","cloneResponse","getHeadersGuard","getResponseState","kEnumerableProperty","filterResponse","cloneBody","HeadersList","isErrorLike","isNetworkError","p","target","makeAppropriateNetworkError","isCancelled","isAborted","nullBodyStatus","util","assert","abort","ref","Request","kConstruct","webidl","request","environmentSettingsObject","#dispatcher","makeRequest","#state","#signal","sameOrigin","#headers","Headers","getHeadersList","HeadersList","extractBody","URLSerializer","cloneRequest","list","fromInnerRequest","getRequestState","kEnumerableProperty","assert","crypto","runtimeFeatures","bytesMatch","metadata","i","assert","runtimeFeatures","fetch","p","createDeferredPromise","Request","request","getRequestState","fromInnerResponse","fetching","urlIsHttpHttpsScheme","getResponseState","getGlobalDispatcher","webidl","serializeAMimeType","abort","stream","isAborted","buffer","path","i","resume","onError","pipeline","assert","urlEquals","URLSerializer","getFieldValues","assert","Cache","kConstruct","#relevantRequestResponseList","webidl","request","p","#internalMatchAll","r","Request","createDeferredPromise","fetching","#batchCacheOperations","promise","#queryCache","cache","#requestMatchesCachedItem","kEnumerableProperty","CacheStorage","kConstruct","webidl","request","#caches","cache","kEnumerableProperty","maxAttributeValueSize","maxNameValuePairSize","isCTLExcludingHtab","i","path","stringify","assert","parseSetCookie","collectASequenceOfCodePointsFast","webidl","Headers","getCookies","deleteCookie","getSetCookies","parseCookie","setCookie","MessageEvent","kConstruct","webidl","#eventInit","CloseEvent","ErrorEvent","kEnumerableProperty","uid","staticPropertyDescriptors","states","sentCloseFrameState","opcodes","maxUnsigned16Bit","parserStates","emptyBuffer","sendHints","isConnecting","states","isEstablished","isClosing","isClosed","fireEvent","websocketMessageReceived","data","toArrayBuffer","buffer","isValidSubprotocol","i","isValidStatusCode","isControlFrame","opcodes","isContinuationFrame","isTextBinaryFrame","isValidOpcode","parseExtensions","isValidClientWindowBits","getURLRecord","validateCloseCodeAndReason","utf8Decode","runtimeFeatures","randomFillSync","i","buffer","WebsocketFrameSend","data","bodyLength","opcodes","assert","establishWebSocketConnection","request","makeRequest","Headers","fetching","closeWebSocketConnection","isClosed","isClosing","isEstablished","states","sentCloseFrameState","WebsocketFrameSend","emptyBuffer","opcodes","failWebsocketConnection","isConnecting","PerMessageDeflate","#options","#aborted","MessageSizeExceededError","#inflate","data","#currentCallback","callback","assert","ByteParser","#handler","#extensions","#buffers","#byteOffset","#loop","callback","#state","buffer","opcodes","#fragments","#info","data","n","#fragmentsBytes","i","utf8Decode","sentCloseFrameState","body","WebsocketFrameSend","states","SendQueue","#socket","sendHints","#running","WebsocketFrameSend","node","#queue","#run","data","opcodes","WebSocket","#onConnectionEstablished","#onMessage","data","failWebsocketConnection","#handler","#onParserDrain","#parser","states","channels","#onSocketClose","webidl","environmentSettingsObject","getURLRecord","p","isValidSubprotocol","#url","establishWebSocketConnection","#binaryType","isEstablished","buffer","#bufferedAmount","#sendQueue","#extensions","#protocol","#events","ByteParser","opcodes","utf8Decode","createFastMessageEvent","sentCloseFrameState","ErrorEvent","CloseEvent","WebsocketFrameSend","kEnumerableProperty","getGlobalDispatcher","instance","target","WebSocketError","webidl","kConstruct","#closeCode","#reason","kEnumerableProperty","#onConnectionEstablished","#onMessage","data","#handler","#parser","#onSocketClose","webidl","environmentSettingsObject","p","#url","#openedPromise","#closedPromise","#handshakeAborted","promise","#readableStreamController","#cancel","#write","#closeUsingReason","#readableStream","#writableStream","kEnumerableProperty","isValidLastEventId","isASCIINumber","i","SPACE","EventSourceStream","EventSource","#dispatcher","#state","#url","#withCredentials","#request","#connect","#readyState","#reconnect","parseMIMEType","#controller","#events","util","path","fetch","isObject","cache","data","exports","i","env","normalizePath","posix","__require","callback","basename","util","objectUtil","ZodParsedType","getParsedType","ZodIssueCode","ZodError","errorMap","overrideErrorMap","getErrorMap","makeIssue","addIssueToContext","ParseStatus","INVALID","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","handleResult","processCreateParams","ZodType","ZodEffects","ZodFirstPartyTypeKind","ZodOptional","ZodNullable","ZodArray","ZodPromise","ZodUnion","ZodIntersection","ZodDefault","ZodBranded","ZodCatch","ZodPipeline","target","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","emailRegex","emojiRegex","ipv4Regex","ipv6Regex","datetimeRegex","isValidIP","version","ZodString","floatSafeRemainder","ZodNumber","ZodBigInt","ZodBoolean","ZodDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","deepPartialify","ZodObject","ZodTuple","createZodEnum","types","getDiscriminator","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","mergeValues","ZodRecord","ZodMap","ZodSet","ZodFunction","ZodNaN","p","late","stringType","numberType","nanType","bigIntType","booleanType","dateType","symbolType","undefinedType","nullType","anyType","unknownType","neverType","voidType","arrayType","objectType","strictObjectType","unionType","discriminatedUnionType","intersectionType","tupleType","recordType","mapType","setType","functionType","lazyType","literalType","enumType","nativeEnumType","promiseType","effectsType","optionalType","nullableType","preprocessType","pipelineType","path3","getDockerPath","isString","errors","list","build","valid","buffer","parse","from","to","open","colors","#logger","#origin","#tunnel","#waitForPublicUrl","#publicUrl","#hasWarnedAboutSse","tunnelManager: TunnelManager","resolve","resolvedPort: number","getPort","util","path","request: Request | undefined","request","MiniflareResponse","viteVersion","minVersion","MiniflareRequest","exportTypes: ExportTypes","#sharedContext","sharedContext","#resolvedPluginConfig","#resolvedViteConfig","#getWorker","invalid: string[]","p","path","fs","deployConfig: DeployConfig","entryWorkerConfigPath: string | undefined","prerenderWorkerConfigPath: string | undefined","auxiliaryWorkers: DeployConfig[\"auxiliaryWorkers\"]","i","TokenType","types$1","hasOwnProperty","toString","Position","n","SourceLocation","p","Parser","parse","ref","DestructuringErrors","exports","list","isAsync","empty$1","ecmaVersion","i$1","list$1","TokContext","types","empty","Scope","Node","BranchID","RegExpValidationState","Token","version","withTrailingSlash","path","isAbsolute","p","path","types","request","target","fileURLToPath$1","extname","format","tries","i","pathToFileURL$1","exports","packageJsonUrl","packageConfig","fileURLToPath","pathToFileURL","isAbsolute","#env","env","#getEntries","#getInjects","#injectsByModule","#virtualModulePathToSpecifier","module","environmentName: string","resolvedViteConfig: vite.ResolvedConfig","path","nonApplicable: NonApplicableConfigMap","config: Optional<RawWorkerConfig, \"build\" | \"define\">","lines","path","lines: string[]","env","fs","workerConfig: WorkerConfig","raw: Unstable_Config","nonApplicable: NonApplicableConfigMap","path","prerenderWorkerEnvironmentName: string | undefined","staticRouting: StaticRouting | undefined","auxiliaryWorkersResolvedConfigs: WorkerResolvedConfig[]","i","relative","buffer","n","btoa","i","isObject","segment","re","replacement","magicString: MagicString | undefined","source: Buffer","path","moduleRules: ModuleRules","staticRedirects: MetadataStaticRedirects","dynamicRedirects: MetadataRedirects","rules: MetadataHeaders","configuredRule: MetadataHeaders[string]","path","rules: HeadersRule[]","invalid: InvalidHeadersRule[]","rule: (HeadersRule & { line: string }) | undefined","i","path","rules: RedirectRule[]","invalid: InvalidRedirectRule[]","i","isString","splitPattern","path","p","cache","types","path","Mime","standardTypes","otherTypes","e: unknown","assertNever","util","data","i","defaultErrorMap","path","defaultErrorMap","path","errorMap","data","target","version","base64","ctx","i","result","issues","types","elements","defaultErrorMap","processed","z.object","z.number","z.boolean","z.array","z.string","z.union","z.null","z.record","z\n\t.object","z.literal","z\n\t\t.enum","logger: Logger","path","path","fs","movedAssetPaths: string[]","src","colors","client: vite.HotChannelClient","webSocketContainer: WebSocketContainer","#webSocketContainer","rollupOptions: vite.Rollup.RollupOptions","define","hasNodeJsCompat","module","path","disallowedEnvironmentOptions: DisallowedEnvironmentOptions","resolve","env","path","colors","getPort","request","#cancelHandlers","#promise","#isResolved","#isRejected","#isCancelled","#resolve","resolve","#reject","OpenAPI: OpenAPIConfig","qs: string[]","process","encoder","path","resolve","headers","result: any","request: RequestInit","request","__request","platform","resolve: () => void","reject: (err: unknown) => void","resolve: (args: { aborted: boolean }) => void","reject: (err: unknown) => void","build","request","path","normalizePath","normalizePath$1","resolve","relative","fs","dirname","depth","nativeFs","i","POSIX_REGEX_SOURCE","chars","platform","path","utils","scan","finished","n","i","constants","utils","parse","START_ANCHOR","opts","DOTS_SLASH","DOT_LITERAL","QMARK","n","consume","value","ONE_CHAR","chars","posix","open","i","t","SLASH_LITERAL","PLUS_LITERAL","source","utils","constants","picomatch","state","posix","format","p","picomatch","i","p","absolute","picomatch","path$1","scan","path","n","ignore","relative","fileURLToPath","format","isDirectory","fdir","path","assetWorkers: Array<WorkerOptions>","fs","request","MiniflareResponse","containerTagToOptionsMap: ContainerTagToOptionsMap","containerBuildId: string | undefined","contents: Buffer","workers: Array<WorkerOptions>","request","exitCallback","colors","staticRouting: StaticRouting | undefined","request","exitCallback","outputConfig: Unstable_RawConfig | undefined","path","colors","request","process","execFile","powerShellPath","process","Buffer","execFile","fs","fsConstants","isWsl","windowsPowerShellPath","path","define","execFileAsync","process","execFileAsync","process","execFileAsync","defaultBrowser","process","windows","process","process","apps","errors","isWsl","isInSsh","fs","fsConstants","target","arch","colors","open","request","sharedContext: SharedContext","env"],"sources":["../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js","../src/assert-wrangler-version.ts","../src/build-constants.ts","../../../node_modules/.pnpm/@remix-run+node-fetch-server@0.8.0/node_modules/@remix-run/node-fetch-server/dist/node-fetch-server.js","../src/constants.ts","../../workers-utils/dist/chunk-OZQVB3L3.mjs","../../workers-utils/dist/chunk-DCOBXSFB.mjs","../../workers-utils/dist/chunk-BLWXWFJK.mjs","../../workers-utils/dist/chunk-O4YGOZSW.mjs","../../workers-utils/dist/chunk-XXCQEG76.mjs","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/symbols.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/timers.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/errors.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/constants.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/tree.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/stats.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/diagnostics.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/request.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/wrap-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/dispatcher.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/unwrap-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/dispatcher-base.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/connect.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/llhttp/utils.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/llhttp/constants.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/llhttp/llhttp-wasm.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/constants.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/global.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/encoding/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/infra/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/data-url.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/runtime-features.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/webidl/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/formdata.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/formdata-parser.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/promise.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/body.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/client-h1.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/client-h2.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/client.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/fixed-queue.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/pool-base.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/pool.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/balanced-pool.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/round-robin-pool.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/socks5-utils.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/core/socks5-client.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/proxy-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/retry-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/retry-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/dispatcher/h2c-client.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/readable.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/api-request.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/abort-signal.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/api-stream.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/api-pipeline.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/api-upgrade.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/api-connect.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/api/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-errors.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-symbols.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-utils.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-interceptor.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-client.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-call-history.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-pool.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/pending-interceptors-formatter.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/mock-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/snapshot-utils.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/snapshot-recorder.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/mock/snapshot-agent.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/global.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/decorator-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/redirect-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/redirect.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/response-error.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/retry.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/dump.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/dns.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/cache.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/util/date.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/cache-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/cache/memory-cache-store.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/cache-revalidation-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/cache.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/decompress.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/handler/deduplication-handler.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/interceptor/deduplicate.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/cache/sqlite-cache-store.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/headers.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/response.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/request.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/fetch/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cache/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cache/cache.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cache/cachestorage.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cookies/constants.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cookies/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cookies/parse.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/cookies/index.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/events.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/constants.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/frame.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/connection.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/permessage-deflate.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/receiver.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/sender.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/websocket.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/stream/websocketerror.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/websocket/stream/websocketstream.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/eventsource/util.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/eventsource/eventsource-stream.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/lib/web/eventsource/eventsource.js","../../../node_modules/.pnpm/undici@7.24.8/node_modules/undici/index.js","../../workers-utils/dist/index.mjs","../../../node_modules/.pnpm/get-port@7.1.0/node_modules/get-port/index.js","../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/plugins/tunnel.ts","../src/utils.ts","../src/export-types.ts","../src/context.ts","../../workers-shared/utils/configuration/constants.ts","../../workers-shared/utils/configuration/parseStaticRouting.ts","../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../src/deploy-config.ts","../../../node_modules/.pnpm/acorn@8.14.0/node_modules/acorn/dist/acorn.mjs","../../../node_modules/.pnpm/ufo@1.5.4/node_modules/ufo/dist/index.mjs","../../../node_modules/.pnpm/pathe@2.0.1/node_modules/pathe/dist/shared/pathe.BLwDEnA5.mjs","../../../node_modules/.pnpm/mlly@1.7.4/node_modules/mlly/dist/index.mjs","../src/shared.ts","../src/plugins/virtual-modules.ts","../src/nodejs-compat.ts","../src/workers-configs.ts","../src/plugin-config.ts","../../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.0/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs","../../../node_modules/.pnpm/magic-string@0.30.17/node_modules/magic-string/dist/magic-string.es.mjs","../src/plugins/additional-modules.ts","../../workers-shared/utils/configuration/constructConfiguration.ts","../../workers-shared/utils/configuration/validateURL.ts","../../workers-shared/utils/configuration/parseHeaders.ts","../../workers-shared/utils/configuration/parseRedirects.ts","../../workers-shared/utils/constants.ts","../../../node_modules/.pnpm/ignore@5.3.1/node_modules/ignore/index.js","../../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/types/other.js","../../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/types/standard.js","../../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/src/Mime.js","../../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/src/index.js","../../workers-shared/utils/helpers.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../workers-shared/utils/types.ts","../src/asset-config.ts","../src/build.ts","../src/cloudflare-environment.ts","../src/dev-vars.ts","../src/vite-config.ts","../src/plugins/config.ts","../src/debug.ts","../src/plugins/debug.ts","../../containers-shared/src/client/core/ApiError.ts","../../containers-shared/src/client/core/CancelablePromise.ts","../../containers-shared/src/client/core/OpenAPI.ts","../../containers-shared/src/client/core/request.ts","../../containers-shared/src/client/models/ApplicationRollout.ts","../../containers-shared/src/client/models/BadRequestWithCodeError.ts","../../containers-shared/src/client/models/CreateApplicationRolloutRequest.ts","../../containers-shared/src/client/models/DeploymentNotFoundError.ts","../../containers-shared/src/client/models/ImageRegistryAlreadyExistsError.ts","../../containers-shared/src/client/models/ImageRegistryIsPublic.ts","../../containers-shared/src/client/models/ImageRegistryNotAllowedError.ts","../../containers-shared/src/client/models/ImageRegistryNotFoundError.ts","../../containers-shared/src/client/models/ImageRegistryPermissions.ts","../../containers-shared/src/client/models/ImageRegistryProtocolAlreadyExists.ts","../../containers-shared/src/client/models/ImageRegistryProtocolIsReferencedError.ts","../../containers-shared/src/client/models/ImageRegistryProtocolNotFound.ts","../../containers-shared/src/client/models/ProvisionerConfiguration.ts","../../containers-shared/src/client/models/RolloutStep.ts","../../containers-shared/src/client/models/SecretNameAlreadyExists.ts","../../containers-shared/src/client/models/SecretNotFound.ts","../../containers-shared/src/client/models/SSHPublicKeyNotFoundError.ts","../../containers-shared/src/client/models/UpdateApplicationRolloutRequest.ts","../../containers-shared/src/client/services/ImageRegistriesService.ts","../../containers-shared/src/build.ts","../../containers-shared/src/login.ts","../../containers-shared/src/registry.ts","../../containers-shared/src/knobs.ts","../../containers-shared/src/inspect.ts","../../containers-shared/src/utils.ts","../../containers-shared/src/images.ts","../../workers-shared/asset-worker/src/utils/rules-engine.ts","../src/containers.ts","../../../node_modules/.pnpm/fdir@6.5.0_picomatch@4.0.3/node_modules/fdir/dist/index.mjs","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/constants.js","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/utils.js","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/scan.js","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/parse.js","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/lib/picomatch.js","../../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/index.js","../../../node_modules/.pnpm/tinyglobby@0.2.15/node_modules/tinyglobby/dist/index.mjs","../src/miniflare-options.ts","../src/websockets.ts","../src/plugins/dev.ts","../src/plugins/nodejs-compat.ts","../src/plugins/output-config.ts","../src/plugins/preview.ts","../src/plugins/rsc.ts","../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/utilities.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../src/plugins/shortcuts.ts","../src/plugins/trigger-handlers.ts","../src/plugins/wasm.ts","../src/index.ts"],"sourcesContent":["'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","import { satisfies } from \"semver\";\n\n/**\n * Asserts that the installed version of Wrangler that gets pulled in at runtime by the `@cloudflare/vite-plugin`\n * matches the version that `@cloudflare/vite-plugin` actually depends upon.\n *\n * This can sometime be broken by package managers that deduplicate dependencies, such as `pnpm`.\n */\nexport async function assertWranglerVersion() {\n\tconst installedVersion = (\n\t\tawait import(\"wrangler/package.json\", {\n\t\t\twith: { type: \"json\" },\n\t\t})\n\t).default.version;\n\n\tconst ourPackageJson = (\n\t\tawait import(\"../package.json\", {\n\t\t\twith: { type: \"json\" },\n\t\t})\n\t).default;\n\n\tconst peerDependency = ourPackageJson.peerDependencies.wrangler;\n\n\tif (peerDependency.startsWith(\"workspace:\")) {\n\t\t// We are running in the monorepo, so these deps are not yet computed to specific semver strings.\n\t\t// We don't need to worry in this case and can skip the check.\n\t\treturn;\n\t}\n\n\tif (!satisfies(installedVersion, peerDependency)) {\n\t\tthrow new Error(\n\t\t\t`The installed version of Wrangler (${installedVersion}) does not satisfy the peer dependency required by @cloudflare/vite-plugin (${peerDependency}).\\n` +\n\t\t\t\t`Please install wrangler@${peerDependency}.`\n\t\t);\n\t}\n}\n","import type { CompatDate } from \"@cloudflare/workers-utils\";\n\ndeclare const __VITE_PLUGIN_DEFAULT_COMPAT_DATE__: CompatDate;\n\n/**\n * The default compatibility date to use when the user omits one.\n * This value is injected at build time and remains fixed for each release.\n */\nexport const DEFAULT_COMPAT_DATE = __VITE_PLUGIN_DEFAULT_COMPAT_DATE__;\n","// src/lib/read-stream.ts\nasync function* readStream(stream) {\n  let reader = stream.getReader();\n  try {\n    while (true) {\n      let result = await reader.read();\n      if (result.done)\n        break;\n      yield result.value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\n// src/lib/request-listener.ts\nfunction createRequestListener(handler, options) {\n  let onError = options?.onError ?? defaultErrorHandler;\n  return async (req, res) => {\n    let request = createRequest(req, res, options);\n    let client = {\n      address: req.socket.remoteAddress,\n      family: req.socket.remoteFamily,\n      port: req.socket.remotePort\n    };\n    let response;\n    try {\n      response = await handler(request, client);\n    } catch (error) {\n      try {\n        response = await onError(error) ?? internalServerError();\n      } catch (error2) {\n        console.error(`There was an error in the error handler: ${error2}`);\n        response = internalServerError();\n      }\n    }\n    await sendResponse(res, response);\n  };\n}\nfunction defaultErrorHandler(error) {\n  console.error(error);\n  return internalServerError();\n}\nfunction internalServerError() {\n  return new Response(\n    // \"Internal Server Error\"\n    new Uint8Array([\n      73,\n      110,\n      116,\n      101,\n      114,\n      110,\n      97,\n      108,\n      32,\n      83,\n      101,\n      114,\n      118,\n      101,\n      114,\n      32,\n      69,\n      114,\n      114,\n      111,\n      114\n    ]),\n    {\n      status: 500,\n      headers: {\n        \"Content-Type\": \"text/plain\"\n      }\n    }\n  );\n}\nfunction createRequest(req, res, options) {\n  let controller = new AbortController();\n  res.on(\"close\", () => {\n    controller.abort();\n  });\n  let method = req.method ?? \"GET\";\n  let headers = createHeaders(req);\n  let protocol = options?.protocol ?? (\"encrypted\" in req.socket && req.socket.encrypted ? \"https:\" : \"http:\");\n  let host = options?.host ?? headers.get(\"Host\") ?? \"localhost\";\n  let url = new URL(req.url, `${protocol}//${host}`);\n  let init = { method, headers, signal: controller.signal };\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    init.body = new ReadableStream({\n      start(controller2) {\n        req.on(\"data\", (chunk) => {\n          controller2.enqueue(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));\n        });\n        req.on(\"end\", () => {\n          controller2.close();\n        });\n      }\n    });\n    init.duplex = \"half\";\n  }\n  return new Request(url, init);\n}\nfunction createHeaders(req) {\n  let headers = new Headers();\n  let rawHeaders = req.rawHeaders;\n  for (let i = 0; i < rawHeaders.length; i += 2) {\n    if (rawHeaders[i].startsWith(\":\"))\n      continue;\n    headers.append(rawHeaders[i], rawHeaders[i + 1]);\n  }\n  return headers;\n}\nasync function sendResponse(res, response) {\n  let headers = {};\n  for (let [key, value] of response.headers) {\n    if (key in headers) {\n      if (Array.isArray(headers[key])) {\n        headers[key].push(value);\n      } else {\n        headers[key] = [headers[key], value];\n      }\n    } else {\n      headers[key] = value;\n    }\n  }\n  res.writeHead(response.status, headers);\n  if (response.body != null && res.req.method !== \"HEAD\") {\n    for await (let chunk of readStream(response.body)) {\n      if (res.write(chunk) === false) {\n        await new Promise((resolve) => {\n          res.once(\"drain\", resolve);\n        });\n      }\n    }\n  }\n  res.end();\n}\nexport {\n  createHeaders,\n  createRequest,\n  createRequestListener,\n  sendResponse\n};\n//# sourceMappingURL=node-fetch-server.js.map\n","import { randomUUID } from \"node:crypto\";\n\n// Worker names\nexport const ROUTER_WORKER_NAME = \"__router-worker__\";\nexport const ASSET_WORKER_NAME = \"__asset-worker__\";\nexport const VITE_PROXY_WORKER_NAME = \"__vite_proxy_worker__\";\n\nexport const PROXY_SHARED_SECRET = randomUUID();\n\nexport const kRequestType = Symbol(\"kRequestType\");\n\ndeclare module \"http\" {\n\tinterface IncomingMessage {\n\t\t[kRequestType]?: \"asset\";\n\t}\n}\n","// src/constants.ts\nvar INHERIT_SYMBOL = Symbol.for(\"inherit_binding\");\nvar SERVICE_TAG_PREFIX = \"cf:service=\";\nvar ENVIRONMENT_TAG_PREFIX = \"cf:environment=\";\nvar PATH_TO_DEPLOY_CONFIG = \".wrangler/deploy/config.json\";\nvar JSON_CONFIG_FORMATS = [\"json\", \"jsonc\"];\n\nexport { ENVIRONMENT_TAG_PREFIX, INHERIT_SYMBOL, JSON_CONFIG_FORMATS, PATH_TO_DEPLOY_CONFIG, SERVICE_TAG_PREFIX };\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n  get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n  if (typeof require !== \"undefined\") return require.apply(this, arguments);\n  throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, \"default\"), secondTarget && __copyProps(secondTarget, mod, \"default\"));\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\nexport { __commonJS, __export, __name, __reExport, __require, __toESM };\n","import { ENVIRONMENT_TAG_PREFIX, SERVICE_TAG_PREFIX } from './chunk-OZQVB3L3.mjs';\nimport { __name } from './chunk-DCOBXSFB.mjs';\nimport assert from 'node:assert';\n\nfunction isCompatDate(str) {\n  return /^\\d{4}-\\d{2}-\\d{2}$/.test(str);\n}\n__name(isCompatDate, \"isCompatDate\");\nfunction formatCompatibilityDate(date) {\n  const compatDate = date.toISOString().slice(0, 10);\n  assert(isCompatDate(compatDate));\n  return compatDate;\n}\n__name(formatCompatibilityDate, \"formatCompatibilityDate\");\nfunction getTodaysCompatDate() {\n  return formatCompatibilityDate(/* @__PURE__ */ new Date());\n}\n__name(getTodaysCompatDate, \"getTodaysCompatDate\");\n\n// src/assert-never.ts\nfunction assertNever(_value) {\n}\n__name(assertNever, \"assertNever\");\n\n// src/map-worker-metadata-bindings.ts\nfunction mapWorkerMetadataBindings(bindings) {\n  return bindings.filter((binding) => binding.type !== \"secret_text\").reduce((configObj, binding) => {\n    switch (binding.type) {\n      case \"plain_text\":\n        {\n          configObj.vars = {\n            ...configObj.vars ?? {},\n            [binding.name]: binding.text\n          };\n        }\n        break;\n      case \"json\":\n        {\n          configObj.vars = {\n            ...configObj.vars ?? {},\n            name: binding.name,\n            json: binding.json\n          };\n        }\n        break;\n      case \"kv_namespace\":\n        {\n          configObj.kv_namespaces = [\n            ...configObj.kv_namespaces ?? [],\n            { id: binding.namespace_id, binding: binding.name }\n          ];\n        }\n        break;\n      case \"durable_object_namespace\":\n        {\n          configObj.durable_objects = {\n            bindings: [\n              ...configObj.durable_objects?.bindings ?? [],\n              {\n                name: binding.name,\n                class_name: binding.class_name,\n                script_name: binding.script_name,\n                environment: binding.environment\n              }\n            ]\n          };\n        }\n        break;\n      case \"d1\":\n        {\n          configObj.d1_databases = [\n            ...configObj.d1_databases ?? [],\n            {\n              binding: binding.name,\n              database_id: binding.id\n            }\n          ];\n        }\n        break;\n      case \"browser\":\n        {\n          configObj.browser = {\n            binding: binding.name\n          };\n        }\n        break;\n      case \"ai\":\n        {\n          configObj.ai = {\n            binding: binding.name\n          };\n        }\n        break;\n      case \"images\":\n        {\n          configObj.images = {\n            binding: binding.name\n          };\n        }\n        break;\n      case \"stream\":\n        {\n          configObj.stream = {\n            binding: binding.name\n          };\n        }\n        break;\n      case \"media\":\n        {\n          configObj.media = {\n            binding: binding.name\n          };\n        }\n        break;\n      case \"r2_bucket\":\n        {\n          configObj.r2_buckets = [\n            ...configObj.r2_buckets ?? [],\n            {\n              binding: binding.name,\n              bucket_name: binding.bucket_name,\n              jurisdiction: binding.jurisdiction\n            }\n          ];\n        }\n        break;\n      case \"secrets_store_secret\":\n        {\n          configObj.secrets_store_secrets = [\n            ...configObj.secrets_store_secrets ?? [],\n            {\n              binding: binding.name,\n              store_id: binding.store_id,\n              secret_name: binding.secret_name\n            }\n          ];\n        }\n        break;\n      case \"artifacts\":\n        {\n          configObj.artifacts = [\n            ...configObj.artifacts ?? [],\n            {\n              binding: binding.name,\n              namespace: binding.namespace\n            }\n          ];\n        }\n        break;\n      case \"unsafe_hello_world\": {\n        configObj.unsafe_hello_world = [\n          ...configObj.unsafe_hello_world ?? [],\n          {\n            binding: binding.name,\n            enable_timer: binding.enable_timer\n          }\n        ];\n        break;\n      }\n      case \"flagship\": {\n        configObj.flagship = [\n          ...configObj.flagship ?? [],\n          {\n            binding: binding.name,\n            app_id: binding.app_id\n          }\n        ];\n        break;\n      }\n      case \"service\":\n        {\n          configObj.services = [\n            ...configObj.services ?? [],\n            {\n              binding: binding.name,\n              service: binding.service,\n              environment: binding.environment,\n              entrypoint: binding.entrypoint\n            }\n          ];\n        }\n        break;\n      case \"analytics_engine\":\n        {\n          configObj.analytics_engine_datasets = [\n            ...configObj.analytics_engine_datasets ?? [],\n            { binding: binding.name, dataset: binding.dataset }\n          ];\n        }\n        break;\n      case \"dispatch_namespace\":\n        {\n          configObj.dispatch_namespaces = [\n            ...configObj.dispatch_namespaces ?? [],\n            {\n              binding: binding.name,\n              namespace: binding.namespace,\n              ...binding.outbound && {\n                outbound: {\n                  service: binding.outbound.worker.service,\n                  environment: binding.outbound.worker.environment,\n                  parameters: binding.outbound.params?.map((p) => p.name) ?? []\n                }\n              }\n            }\n          ];\n        }\n        break;\n      case \"logfwdr\":\n        {\n          configObj.logfwdr = {\n            bindings: [\n              ...configObj.logfwdr?.bindings ?? [],\n              { name: binding.name, destination: binding.destination }\n            ]\n          };\n        }\n        break;\n      case \"wasm_module\":\n        {\n          configObj.wasm_modules = {\n            ...configObj.wasm_modules ?? {},\n            [binding.name]: binding.part\n          };\n        }\n        break;\n      case \"text_blob\":\n        {\n          configObj.text_blobs = {\n            ...configObj.text_blobs ?? {},\n            [binding.name]: binding.part\n          };\n        }\n        break;\n      case \"data_blob\":\n        {\n          configObj.data_blobs = {\n            ...configObj.data_blobs ?? {},\n            [binding.name]: binding.part\n          };\n        }\n        break;\n      case \"secret_text\":\n        break;\n      case \"version_metadata\": {\n        {\n          configObj.version_metadata = {\n            binding: binding.name\n          };\n        }\n        break;\n      }\n      case \"send_email\": {\n        configObj.send_email = [\n          ...configObj.send_email ?? [],\n          {\n            name: binding.name,\n            destination_address: binding.destination_address,\n            allowed_destination_addresses: binding.allowed_destination_addresses,\n            allowed_sender_addresses: binding.allowed_sender_addresses\n          }\n        ];\n        break;\n      }\n      case \"queue\":\n        configObj.queues ??= { producers: [] };\n        configObj.queues.producers = [\n          ...configObj.queues.producers ?? [],\n          {\n            binding: binding.name,\n            queue: binding.queue_name,\n            delivery_delay: binding.delivery_delay\n          }\n        ];\n        break;\n      case \"vectorize\":\n        configObj.vectorize = [\n          ...configObj.vectorize ?? [],\n          {\n            binding: binding.name,\n            index_name: binding.index_name\n          }\n        ];\n        break;\n      case \"ai_search_namespace\":\n        configObj.ai_search_namespaces = [\n          ...configObj.ai_search_namespaces ?? [],\n          {\n            binding: binding.name,\n            namespace: binding.namespace\n          }\n        ];\n        break;\n      case \"ai_search\":\n        configObj.ai_search = [\n          ...configObj.ai_search ?? [],\n          {\n            binding: binding.name,\n            instance_name: binding.instance_name\n          }\n        ];\n        break;\n      case \"hyperdrive\":\n        configObj.hyperdrive = [\n          ...configObj.hyperdrive ?? [],\n          {\n            binding: binding.name,\n            id: binding.id\n          }\n        ];\n        break;\n      case \"mtls_certificate\":\n        configObj.mtls_certificates = [\n          ...configObj.mtls_certificates ?? [],\n          {\n            binding: binding.name,\n            certificate_id: binding.certificate_id\n          }\n        ];\n        break;\n      case \"pipelines\":\n        configObj.pipelines = [\n          ...configObj.pipelines ?? [],\n          {\n            binding: binding.name,\n            pipeline: binding.pipeline\n          }\n        ];\n        break;\n      case \"assets\":\n        configObj.assets = {\n          binding: binding.name\n          // Note: we currently don't get all the assets information from the\n          //      API, so here we are only able to set the name of the binding\n          //      hopefully in the future we can properly fully support the binding\n        };\n        break;\n      case \"inherit\":\n        configObj.unsafe = {\n          bindings: [...configObj.unsafe?.bindings ?? [], binding],\n          metadata: configObj.unsafe?.metadata ?? void 0\n        };\n        break;\n      case \"workflow\":\n        {\n          configObj.workflows = [\n            ...configObj.workflows ?? [],\n            {\n              binding: binding.name,\n              name: binding.workflow_name,\n              class_name: binding.class_name,\n              script_name: binding.script_name\n            }\n          ];\n        }\n        break;\n      case \"worker_loader\":\n        {\n          configObj.worker_loaders = [\n            ...configObj.worker_loaders ?? [],\n            {\n              binding: binding.name\n            }\n          ];\n        }\n        break;\n      case \"ratelimit\":\n        {\n          configObj.ratelimits = [\n            ...configObj.ratelimits ?? [],\n            {\n              name: binding.name,\n              namespace_id: binding.namespace_id,\n              simple: {\n                limit: binding.simple.limit,\n                period: binding.simple.period\n              }\n            }\n          ];\n        }\n        break;\n      case \"vpc_service\":\n        {\n          configObj.vpc_services = [\n            ...configObj.vpc_services ?? [],\n            {\n              binding: binding.name,\n              service_id: binding.service_id\n            }\n          ];\n        }\n        break;\n      case \"vpc_network\":\n        {\n          if (binding.tunnel_id !== void 0) {\n            configObj.vpc_networks = [\n              ...configObj.vpc_networks ?? [],\n              { binding: binding.name, tunnel_id: binding.tunnel_id }\n            ];\n          } else if (binding.network_id !== void 0) {\n            configObj.vpc_networks = [\n              ...configObj.vpc_networks ?? [],\n              { binding: binding.name, network_id: binding.network_id }\n            ];\n          }\n        }\n        break;\n      default: {\n        configObj.unsafe = {\n          bindings: [...configObj.unsafe?.bindings ?? [], binding],\n          metadata: configObj.unsafe?.metadata ?? void 0\n        };\n      }\n    }\n    return configObj;\n  }, {});\n}\n__name(mapWorkerMetadataBindings, \"mapWorkerMetadataBindings\");\n\n// src/construct-wrangler-config.ts\nfunction convertWorkerToWranglerConfig(config) {\n  const mappedBindings = mapWorkerMetadataBindings(config.bindings);\n  const durableObjectClassNames = config.bindings.filter(\n    (binding) => binding.type === \"durable_object_namespace\" && binding.script_name === config.name\n  ).map(\n    (durableObject) => durableObject.class_name\n  );\n  const allRoutes = [\n    ...config.routes.map((r) => ({\n      pattern: r.pattern,\n      zone_name: r.zone_name\n    })),\n    ...config.domains.map((c) => ({\n      pattern: c.hostname,\n      zone_name: c.zone_name,\n      custom_domain: true,\n      enabled: c.enabled,\n      previews_enabled: c.previews_enabled\n    }))\n  ];\n  return {\n    name: config.name,\n    main: config.entrypoint,\n    workers_dev: config.subdomain.enabled,\n    preview_urls: config.subdomain.previews_enabled,\n    compatibility_date: config.compatibility_date ?? getTodaysCompatDate(),\n    compatibility_flags: config.compatibility_flags,\n    ...allRoutes.length ? { routes: allRoutes } : {},\n    placement: config.placement?.mode === \"smart\" ? { mode: \"smart\" } : void 0,\n    limits: config.limits,\n    ...durableObjectClassNames.length && config.migration_tag ? {\n      migrations: [\n        {\n          tag: config.migration_tag,\n          new_classes: durableObjectClassNames\n        }\n      ]\n    } : {},\n    ...config.schedules.length ? {\n      triggers: {\n        crons: config.schedules.map((scheduled) => scheduled.cron)\n      }\n    } : {},\n    tail_consumers: config.tail_consumers ?? void 0,\n    observability: config.observability,\n    ...mappedBindings\n  };\n}\n__name(convertWorkerToWranglerConfig, \"convertWorkerToWranglerConfig\");\nfunction constructWranglerConfig(workerOrWorkers) {\n  let workers;\n  if (Array.isArray(workerOrWorkers)) {\n    workers = workerOrWorkers;\n  } else {\n    workers = [workerOrWorkers];\n  }\n  const topLevelEnv = workers.find(\n    (w) => !w.tags?.some((t) => t.startsWith(ENVIRONMENT_TAG_PREFIX))\n  );\n  const workerName = topLevelEnv?.name ?? workers[0].name;\n  const entrypoint = topLevelEnv?.entrypoint ?? workers[0].entrypoint;\n  let combinedConfig;\n  if (topLevelEnv) {\n    combinedConfig = convertWorkerToWranglerConfig(topLevelEnv);\n  } else {\n    combinedConfig = {\n      name: workerName,\n      main: entrypoint\n    };\n  }\n  for (const env of workers) {\n    const serviceTag = env.tags?.find(\n      (t) => t === `${SERVICE_TAG_PREFIX}${workerName}`\n    );\n    const envTag = env.tags?.find((t) => t.startsWith(ENVIRONMENT_TAG_PREFIX));\n    if (serviceTag !== `${SERVICE_TAG_PREFIX}${workerName}` || envTag === void 0) {\n      continue;\n    }\n    const [_, envName] = envTag.split(\"=\");\n    combinedConfig.env ??= {};\n    combinedConfig.env[envName] = convertWorkerToWranglerConfig(env);\n  }\n  return combinedConfig;\n}\n__name(constructWranglerConfig, \"constructWranglerConfig\");\n\nexport { assertNever, constructWranglerConfig, getTodaysCompatDate, isCompatDate, mapWorkerMetadataBindings };\n","import { __name } from './chunk-DCOBXSFB.mjs';\n\n// src/prometheus-metrics.ts\nvar MetricsRegistry = class {\n  static {\n    __name(this, \"MetricsRegistry\");\n  }\n  counters = [];\n  /**\n   * Create and register a new counter metric.\n   *\n   * @param name - The metric name (e.g. \"service_request_total\")\n   * @param help - A human-readable description of the metric\n   * @returns A Counter that can be incremented\n   */\n  createCounter(name, help) {\n    const entry = { name, help, value: 0 };\n    this.counters.push(entry);\n    return {\n      inc: /* @__PURE__ */ __name(() => {\n        entry.value++;\n      }, \"inc\"),\n      add: /* @__PURE__ */ __name((amount) => {\n        if (amount < 0) {\n          throw new Error(\"Counter value cannot decrease\");\n        }\n        entry.value += amount;\n      }, \"add\")\n    };\n  }\n  /**\n   * Serialize all registered metrics in Prometheus text exposition format.\n   *\n   * @see https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format\n   */\n  metrics() {\n    return this.counters.map((c) => {\n      let result = \"\";\n      if (c.help.length > 0) {\n        result += `# HELP ${c.name} ${c.help}\n`;\n      }\n      result += `# TYPE ${c.name} counter\n`;\n      result += `${c.name} ${c.value}\n`;\n      return result;\n    }).join(\"\");\n  }\n};\n\nexport { MetricsRegistry };\n","import { PATH_TO_DEPLOY_CONFIG } from './chunk-OZQVB3L3.mjs';\nimport { __name } from './chunk-DCOBXSFB.mjs';\nimport fs, { readFileSync as readFileSync$1, statSync, existsSync } from 'node:fs';\nimport path, { resolve, isAbsolute, dirname, join } from 'node:path';\n\n// src/errors.ts\nvar UserError = class extends Error {\n  static {\n    __name(this, \"UserError\");\n  }\n  telemetryMessage;\n  constructor(message, options) {\n    super(message, options);\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.telemetryMessage = typeof options?.telemetryMessage === \"string\" ? options.telemetryMessage : options?.telemetryMessage ? message : void 0;\n  }\n};\nvar DeprecationError = class extends UserError {\n  static {\n    __name(this, \"DeprecationError\");\n  }\n  constructor(message, options) {\n    super(`Deprecation:\n${message}`, options);\n  }\n};\nvar FatalError = class extends UserError {\n  static {\n    __name(this, \"FatalError\");\n  }\n  code;\n  constructor(message, options) {\n    super(message, options);\n    this.code = options.code;\n  }\n};\nvar CommandLineArgsError = class extends UserError {\n  static {\n    __name(this, \"CommandLineArgsError\");\n  }\n};\nvar JsonFriendlyFatalError = class extends FatalError {\n  static {\n    __name(this, \"JsonFriendlyFatalError\");\n  }\n};\nvar MissingConfigError = class extends Error {\n  static {\n    __name(this, \"MissingConfigError\");\n  }\n  telemetryMessage;\n  constructor(key) {\n    super(`Missing config value for ${key}`);\n    this.telemetryMessage = `Missing config value for ${key}`;\n  }\n};\nfunction createFatalError(message, isJson, options) {\n  if (isJson) {\n    return new JsonFriendlyFatalError(JSON.stringify(message), options);\n  }\n  return new FatalError(`${message}`, options);\n}\n__name(createFatalError, \"createFatalError\");\n\n// ../../node_modules/.pnpm/jsonc-parser@3.2.0/node_modules/jsonc-parser/lib/esm/impl/scanner.js\nfunction createScanner(text, ignoreTrivia = false) {\n  const len = text.length;\n  let pos = 0, value = \"\", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;\n  function scanHexDigits(count, exact) {\n    let digits = 0;\n    let value2 = 0;\n    while (digits < count || !exact) {\n      let ch = text.charCodeAt(pos);\n      if (ch >= 48 && ch <= 57) {\n        value2 = value2 * 16 + ch - 48;\n      } else if (ch >= 65 && ch <= 70) {\n        value2 = value2 * 16 + ch - 65 + 10;\n      } else if (ch >= 97 && ch <= 102) {\n        value2 = value2 * 16 + ch - 97 + 10;\n      } else {\n        break;\n      }\n      pos++;\n      digits++;\n    }\n    if (digits < count) {\n      value2 = -1;\n    }\n    return value2;\n  }\n  __name(scanHexDigits, \"scanHexDigits\");\n  function setPosition(newPosition) {\n    pos = newPosition;\n    value = \"\";\n    tokenOffset = 0;\n    token = 16;\n    scanError = 0;\n  }\n  __name(setPosition, \"setPosition\");\n  function scanNumber() {\n    let start = pos;\n    if (text.charCodeAt(pos) === 48) {\n      pos++;\n    } else {\n      pos++;\n      while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n        pos++;\n      }\n    }\n    if (pos < text.length && text.charCodeAt(pos) === 46) {\n      pos++;\n      if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n        pos++;\n        while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n          pos++;\n        }\n      } else {\n        scanError = 3;\n        return text.substring(start, pos);\n      }\n    }\n    let end = pos;\n    if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {\n      pos++;\n      if (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) {\n        pos++;\n      }\n      if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n        pos++;\n        while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n          pos++;\n        }\n        end = pos;\n      } else {\n        scanError = 3;\n      }\n    }\n    return text.substring(start, end);\n  }\n  __name(scanNumber, \"scanNumber\");\n  function scanString() {\n    let result = \"\", start = pos;\n    while (true) {\n      if (pos >= len) {\n        result += text.substring(start, pos);\n        scanError = 2;\n        break;\n      }\n      const ch = text.charCodeAt(pos);\n      if (ch === 34) {\n        result += text.substring(start, pos);\n        pos++;\n        break;\n      }\n      if (ch === 92) {\n        result += text.substring(start, pos);\n        pos++;\n        if (pos >= len) {\n          scanError = 2;\n          break;\n        }\n        const ch2 = text.charCodeAt(pos++);\n        switch (ch2) {\n          case 34:\n            result += '\"';\n            break;\n          case 92:\n            result += \"\\\\\";\n            break;\n          case 47:\n            result += \"/\";\n            break;\n          case 98:\n            result += \"\\b\";\n            break;\n          case 102:\n            result += \"\\f\";\n            break;\n          case 110:\n            result += \"\\n\";\n            break;\n          case 114:\n            result += \"\\r\";\n            break;\n          case 116:\n            result += \"\t\";\n            break;\n          case 117:\n            const ch3 = scanHexDigits(4, true);\n            if (ch3 >= 0) {\n              result += String.fromCharCode(ch3);\n            } else {\n              scanError = 4;\n            }\n            break;\n          default:\n            scanError = 5;\n        }\n        start = pos;\n        continue;\n      }\n      if (ch >= 0 && ch <= 31) {\n        if (isLineBreak(ch)) {\n          result += text.substring(start, pos);\n          scanError = 2;\n          break;\n        } else {\n          scanError = 6;\n        }\n      }\n      pos++;\n    }\n    return result;\n  }\n  __name(scanString, \"scanString\");\n  function scanNext() {\n    value = \"\";\n    scanError = 0;\n    tokenOffset = pos;\n    lineStartOffset = lineNumber;\n    prevTokenLineStartOffset = tokenLineStartOffset;\n    if (pos >= len) {\n      tokenOffset = len;\n      return token = 17;\n    }\n    let code = text.charCodeAt(pos);\n    if (isWhiteSpace(code)) {\n      do {\n        pos++;\n        value += String.fromCharCode(code);\n        code = text.charCodeAt(pos);\n      } while (isWhiteSpace(code));\n      return token = 15;\n    }\n    if (isLineBreak(code)) {\n      pos++;\n      value += String.fromCharCode(code);\n      if (code === 13 && text.charCodeAt(pos) === 10) {\n        pos++;\n        value += \"\\n\";\n      }\n      lineNumber++;\n      tokenLineStartOffset = pos;\n      return token = 14;\n    }\n    switch (code) {\n      // tokens: []{}:,\n      case 123:\n        pos++;\n        return token = 1;\n      case 125:\n        pos++;\n        return token = 2;\n      case 91:\n        pos++;\n        return token = 3;\n      case 93:\n        pos++;\n        return token = 4;\n      case 58:\n        pos++;\n        return token = 6;\n      case 44:\n        pos++;\n        return token = 5;\n      // strings\n      case 34:\n        pos++;\n        value = scanString();\n        return token = 10;\n      // comments\n      case 47:\n        const start = pos - 1;\n        if (text.charCodeAt(pos + 1) === 47) {\n          pos += 2;\n          while (pos < len) {\n            if (isLineBreak(text.charCodeAt(pos))) {\n              break;\n            }\n            pos++;\n          }\n          value = text.substring(start, pos);\n          return token = 12;\n        }\n        if (text.charCodeAt(pos + 1) === 42) {\n          pos += 2;\n          const safeLength = len - 1;\n          let commentClosed = false;\n          while (pos < safeLength) {\n            const ch = text.charCodeAt(pos);\n            if (ch === 42 && text.charCodeAt(pos + 1) === 47) {\n              pos += 2;\n              commentClosed = true;\n              break;\n            }\n            pos++;\n            if (isLineBreak(ch)) {\n              if (ch === 13 && text.charCodeAt(pos) === 10) {\n                pos++;\n              }\n              lineNumber++;\n              tokenLineStartOffset = pos;\n            }\n          }\n          if (!commentClosed) {\n            pos++;\n            scanError = 1;\n          }\n          value = text.substring(start, pos);\n          return token = 13;\n        }\n        value += String.fromCharCode(code);\n        pos++;\n        return token = 16;\n      // numbers\n      case 45:\n        value += String.fromCharCode(code);\n        pos++;\n        if (pos === len || !isDigit(text.charCodeAt(pos))) {\n          return token = 16;\n        }\n      // found a minus, followed by a number so\n      // we fall through to proceed with scanning\n      // numbers\n      case 48:\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        value += scanNumber();\n        return token = 11;\n      // literals and unknown symbols\n      default:\n        while (pos < len && isUnknownContentCharacter(code)) {\n          pos++;\n          code = text.charCodeAt(pos);\n        }\n        if (tokenOffset !== pos) {\n          value = text.substring(tokenOffset, pos);\n          switch (value) {\n            case \"true\":\n              return token = 8;\n            case \"false\":\n              return token = 9;\n            case \"null\":\n              return token = 7;\n          }\n          return token = 16;\n        }\n        value += String.fromCharCode(code);\n        pos++;\n        return token = 16;\n    }\n  }\n  __name(scanNext, \"scanNext\");\n  function isUnknownContentCharacter(code) {\n    if (isWhiteSpace(code) || isLineBreak(code)) {\n      return false;\n    }\n    switch (code) {\n      case 125:\n      case 93:\n      case 123:\n      case 91:\n      case 34:\n      case 58:\n      case 44:\n      case 47:\n        return false;\n    }\n    return true;\n  }\n  __name(isUnknownContentCharacter, \"isUnknownContentCharacter\");\n  function scanNextNonTrivia() {\n    let result;\n    do {\n      result = scanNext();\n    } while (result >= 12 && result <= 15);\n    return result;\n  }\n  __name(scanNextNonTrivia, \"scanNextNonTrivia\");\n  return {\n    setPosition,\n    getPosition: /* @__PURE__ */ __name(() => pos, \"getPosition\"),\n    scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n    getToken: /* @__PURE__ */ __name(() => token, \"getToken\"),\n    getTokenValue: /* @__PURE__ */ __name(() => value, \"getTokenValue\"),\n    getTokenOffset: /* @__PURE__ */ __name(() => tokenOffset, \"getTokenOffset\"),\n    getTokenLength: /* @__PURE__ */ __name(() => pos - tokenOffset, \"getTokenLength\"),\n    getTokenStartLine: /* @__PURE__ */ __name(() => lineStartOffset, \"getTokenStartLine\"),\n    getTokenStartCharacter: /* @__PURE__ */ __name(() => tokenOffset - prevTokenLineStartOffset, \"getTokenStartCharacter\"),\n    getTokenError: /* @__PURE__ */ __name(() => scanError, \"getTokenError\")\n  };\n}\n__name(createScanner, \"createScanner\");\nfunction isWhiteSpace(ch) {\n  return ch === 32 || ch === 9;\n}\n__name(isWhiteSpace, \"isWhiteSpace\");\nfunction isLineBreak(ch) {\n  return ch === 10 || ch === 13;\n}\n__name(isLineBreak, \"isLineBreak\");\nfunction isDigit(ch) {\n  return ch >= 48 && ch <= 57;\n}\n__name(isDigit, \"isDigit\");\nvar CharacterCodes;\n(function(CharacterCodes2) {\n  CharacterCodes2[CharacterCodes2[\"lineFeed\"] = 10] = \"lineFeed\";\n  CharacterCodes2[CharacterCodes2[\"carriageReturn\"] = 13] = \"carriageReturn\";\n  CharacterCodes2[CharacterCodes2[\"space\"] = 32] = \"space\";\n  CharacterCodes2[CharacterCodes2[\"_0\"] = 48] = \"_0\";\n  CharacterCodes2[CharacterCodes2[\"_1\"] = 49] = \"_1\";\n  CharacterCodes2[CharacterCodes2[\"_2\"] = 50] = \"_2\";\n  CharacterCodes2[CharacterCodes2[\"_3\"] = 51] = \"_3\";\n  CharacterCodes2[CharacterCodes2[\"_4\"] = 52] = \"_4\";\n  CharacterCodes2[CharacterCodes2[\"_5\"] = 53] = \"_5\";\n  CharacterCodes2[CharacterCodes2[\"_6\"] = 54] = \"_6\";\n  CharacterCodes2[CharacterCodes2[\"_7\"] = 55] = \"_7\";\n  CharacterCodes2[CharacterCodes2[\"_8\"] = 56] = \"_8\";\n  CharacterCodes2[CharacterCodes2[\"_9\"] = 57] = \"_9\";\n  CharacterCodes2[CharacterCodes2[\"a\"] = 97] = \"a\";\n  CharacterCodes2[CharacterCodes2[\"b\"] = 98] = \"b\";\n  CharacterCodes2[CharacterCodes2[\"c\"] = 99] = \"c\";\n  CharacterCodes2[CharacterCodes2[\"d\"] = 100] = \"d\";\n  CharacterCodes2[CharacterCodes2[\"e\"] = 101] = \"e\";\n  CharacterCodes2[CharacterCodes2[\"f\"] = 102] = \"f\";\n  CharacterCodes2[CharacterCodes2[\"g\"] = 103] = \"g\";\n  CharacterCodes2[CharacterCodes2[\"h\"] = 104] = \"h\";\n  CharacterCodes2[CharacterCodes2[\"i\"] = 105] = \"i\";\n  CharacterCodes2[CharacterCodes2[\"j\"] = 106] = \"j\";\n  CharacterCodes2[CharacterCodes2[\"k\"] = 107] = \"k\";\n  CharacterCodes2[CharacterCodes2[\"l\"] = 108] = \"l\";\n  CharacterCodes2[CharacterCodes2[\"m\"] = 109] = \"m\";\n  CharacterCodes2[CharacterCodes2[\"n\"] = 110] = \"n\";\n  CharacterCodes2[CharacterCodes2[\"o\"] = 111] = \"o\";\n  CharacterCodes2[CharacterCodes2[\"p\"] = 112] = \"p\";\n  CharacterCodes2[CharacterCodes2[\"q\"] = 113] = \"q\";\n  CharacterCodes2[CharacterCodes2[\"r\"] = 114] = \"r\";\n  CharacterCodes2[CharacterCodes2[\"s\"] = 115] = \"s\";\n  CharacterCodes2[CharacterCodes2[\"t\"] = 116] = \"t\";\n  CharacterCodes2[CharacterCodes2[\"u\"] = 117] = \"u\";\n  CharacterCodes2[CharacterCodes2[\"v\"] = 118] = \"v\";\n  CharacterCodes2[CharacterCodes2[\"w\"] = 119] = \"w\";\n  CharacterCodes2[CharacterCodes2[\"x\"] = 120] = \"x\";\n  CharacterCodes2[CharacterCodes2[\"y\"] = 121] = \"y\";\n  CharacterCodes2[CharacterCodes2[\"z\"] = 122] = \"z\";\n  CharacterCodes2[CharacterCodes2[\"A\"] = 65] = \"A\";\n  CharacterCodes2[CharacterCodes2[\"B\"] = 66] = \"B\";\n  CharacterCodes2[CharacterCodes2[\"C\"] = 67] = \"C\";\n  CharacterCodes2[CharacterCodes2[\"D\"] = 68] = \"D\";\n  CharacterCodes2[CharacterCodes2[\"E\"] = 69] = \"E\";\n  CharacterCodes2[CharacterCodes2[\"F\"] = 70] = \"F\";\n  CharacterCodes2[CharacterCodes2[\"G\"] = 71] = \"G\";\n  CharacterCodes2[CharacterCodes2[\"H\"] = 72] = \"H\";\n  CharacterCodes2[CharacterCodes2[\"I\"] = 73] = \"I\";\n  CharacterCodes2[CharacterCodes2[\"J\"] = 74] = \"J\";\n  CharacterCodes2[CharacterCodes2[\"K\"] = 75] = \"K\";\n  CharacterCodes2[CharacterCodes2[\"L\"] = 76] = \"L\";\n  CharacterCodes2[CharacterCodes2[\"M\"] = 77] = \"M\";\n  CharacterCodes2[CharacterCodes2[\"N\"] = 78] = \"N\";\n  CharacterCodes2[CharacterCodes2[\"O\"] = 79] = \"O\";\n  CharacterCodes2[CharacterCodes2[\"P\"] = 80] = \"P\";\n  CharacterCodes2[CharacterCodes2[\"Q\"] = 81] = \"Q\";\n  CharacterCodes2[CharacterCodes2[\"R\"] = 82] = \"R\";\n  CharacterCodes2[CharacterCodes2[\"S\"] = 83] = \"S\";\n  CharacterCodes2[CharacterCodes2[\"T\"] = 84] = \"T\";\n  CharacterCodes2[CharacterCodes2[\"U\"] = 85] = \"U\";\n  CharacterCodes2[CharacterCodes2[\"V\"] = 86] = \"V\";\n  CharacterCodes2[CharacterCodes2[\"W\"] = 87] = \"W\";\n  CharacterCodes2[CharacterCodes2[\"X\"] = 88] = \"X\";\n  CharacterCodes2[CharacterCodes2[\"Y\"] = 89] = \"Y\";\n  CharacterCodes2[CharacterCodes2[\"Z\"] = 90] = \"Z\";\n  CharacterCodes2[CharacterCodes2[\"asterisk\"] = 42] = \"asterisk\";\n  CharacterCodes2[CharacterCodes2[\"backslash\"] = 92] = \"backslash\";\n  CharacterCodes2[CharacterCodes2[\"closeBrace\"] = 125] = \"closeBrace\";\n  CharacterCodes2[CharacterCodes2[\"closeBracket\"] = 93] = \"closeBracket\";\n  CharacterCodes2[CharacterCodes2[\"colon\"] = 58] = \"colon\";\n  CharacterCodes2[CharacterCodes2[\"comma\"] = 44] = \"comma\";\n  CharacterCodes2[CharacterCodes2[\"dot\"] = 46] = \"dot\";\n  CharacterCodes2[CharacterCodes2[\"doubleQuote\"] = 34] = \"doubleQuote\";\n  CharacterCodes2[CharacterCodes2[\"minus\"] = 45] = \"minus\";\n  CharacterCodes2[CharacterCodes2[\"openBrace\"] = 123] = \"openBrace\";\n  CharacterCodes2[CharacterCodes2[\"openBracket\"] = 91] = \"openBracket\";\n  CharacterCodes2[CharacterCodes2[\"plus\"] = 43] = \"plus\";\n  CharacterCodes2[CharacterCodes2[\"slash\"] = 47] = \"slash\";\n  CharacterCodes2[CharacterCodes2[\"formFeed\"] = 12] = \"formFeed\";\n  CharacterCodes2[CharacterCodes2[\"tab\"] = 9] = \"tab\";\n})(CharacterCodes || (CharacterCodes = {}));\n\n// ../../node_modules/.pnpm/jsonc-parser@3.2.0/node_modules/jsonc-parser/lib/esm/impl/format.js\nfunction format(documentText, range, options) {\n  let initialIndentLevel;\n  let formatText;\n  let formatTextStart;\n  let rangeStart;\n  let rangeEnd;\n  if (range) {\n    rangeStart = range.offset;\n    rangeEnd = rangeStart + range.length;\n    formatTextStart = rangeStart;\n    while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n      formatTextStart--;\n    }\n    let endOffset = rangeEnd;\n    while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n      endOffset++;\n    }\n    formatText = documentText.substring(formatTextStart, endOffset);\n    initialIndentLevel = computeIndentLevel(formatText, options);\n  } else {\n    formatText = documentText;\n    initialIndentLevel = 0;\n    formatTextStart = 0;\n    rangeStart = 0;\n    rangeEnd = documentText.length;\n  }\n  const eol = getEOL(options, documentText);\n  let numberLineBreaks = 0;\n  let indentLevel = 0;\n  let indentValue;\n  if (options.insertSpaces) {\n    indentValue = repeat(\" \", options.tabSize || 4);\n  } else {\n    indentValue = \"\t\";\n  }\n  let scanner = createScanner(formatText, false);\n  let hasError = false;\n  function newLinesAndIndent() {\n    if (numberLineBreaks > 1) {\n      return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);\n    } else {\n      return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n    }\n  }\n  __name(newLinesAndIndent, \"newLinesAndIndent\");\n  function scanNext() {\n    let token = scanner.scan();\n    numberLineBreaks = 0;\n    while (token === 15 || token === 14) {\n      if (token === 14 && options.keepLines) {\n        numberLineBreaks += 1;\n      } else if (token === 14) {\n        numberLineBreaks = 1;\n      }\n      token = scanner.scan();\n    }\n    hasError = token === 16 || scanner.getTokenError() !== 0;\n    return token;\n  }\n  __name(scanNext, \"scanNext\");\n  const editOperations = [];\n  function addEdit(text, startOffset, endOffset) {\n    if (!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text) {\n      editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n    }\n  }\n  __name(addEdit, \"addEdit\");\n  let firstToken = scanNext();\n  if (options.keepLines && numberLineBreaks > 0) {\n    addEdit(repeat(eol, numberLineBreaks), 0, 0);\n  }\n  if (firstToken !== 17) {\n    let firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n    let initialIndent = repeat(indentValue, initialIndentLevel);\n    addEdit(initialIndent, formatTextStart, firstTokenStart);\n  }\n  while (firstToken !== 17) {\n    let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n    let secondToken = scanNext();\n    let replaceContent = \"\";\n    let needsLineBreak = false;\n    while (numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13)) {\n      let commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n      addEdit(\" \", firstTokenEnd, commentTokenStart);\n      firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n      needsLineBreak = secondToken === 12;\n      replaceContent = needsLineBreak ? newLinesAndIndent() : \"\";\n      secondToken = scanNext();\n    }\n    if (secondToken === 2) {\n      if (firstToken !== 1) {\n        indentLevel--;\n      }\n      if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) {\n        replaceContent = newLinesAndIndent();\n      } else if (options.keepLines) {\n        replaceContent = \" \";\n      }\n    } else if (secondToken === 4) {\n      if (firstToken !== 3) {\n        indentLevel--;\n      }\n      if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) {\n        replaceContent = newLinesAndIndent();\n      } else if (options.keepLines) {\n        replaceContent = \" \";\n      }\n    } else {\n      switch (firstToken) {\n        case 3:\n        case 1:\n          indentLevel++;\n          if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            replaceContent = \" \";\n          }\n          break;\n        case 5:\n          if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            replaceContent = \" \";\n          }\n          break;\n        case 12:\n          replaceContent = newLinesAndIndent();\n          break;\n        case 13:\n          if (numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (!needsLineBreak) {\n            replaceContent = \" \";\n          }\n          break;\n        case 6:\n          if (options.keepLines && numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (!needsLineBreak) {\n            replaceContent = \" \";\n          }\n          break;\n        case 10:\n          if (options.keepLines && numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (secondToken === 6 && !needsLineBreak) {\n            replaceContent = \"\";\n          }\n          break;\n        case 7:\n        case 8:\n        case 9:\n        case 11:\n        case 2:\n        case 4:\n          if (options.keepLines && numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) {\n              replaceContent = \" \";\n            } else if (secondToken !== 5 && secondToken !== 17) {\n              hasError = true;\n            }\n          }\n          break;\n        case 16:\n          hasError = true;\n          break;\n      }\n      if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) {\n        replaceContent = newLinesAndIndent();\n      }\n    }\n    if (secondToken === 17) {\n      if (options.keepLines && numberLineBreaks > 0) {\n        replaceContent = newLinesAndIndent();\n      } else {\n        replaceContent = options.insertFinalNewline ? eol : \"\";\n      }\n    }\n    const secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n    addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n    firstToken = secondToken;\n  }\n  return editOperations;\n}\n__name(format, \"format\");\nfunction repeat(s, count) {\n  let result = \"\";\n  for (let i = 0; i < count; i++) {\n    result += s;\n  }\n  return result;\n}\n__name(repeat, \"repeat\");\nfunction computeIndentLevel(content, options) {\n  let i = 0;\n  let nChars = 0;\n  const tabSize = options.tabSize || 4;\n  while (i < content.length) {\n    let ch = content.charAt(i);\n    if (ch === \" \") {\n      nChars++;\n    } else if (ch === \"\t\") {\n      nChars += tabSize;\n    } else {\n      break;\n    }\n    i++;\n  }\n  return Math.floor(nChars / tabSize);\n}\n__name(computeIndentLevel, \"computeIndentLevel\");\nfunction getEOL(options, text) {\n  for (let i = 0; i < text.length; i++) {\n    const ch = text.charAt(i);\n    if (ch === \"\\r\") {\n      if (i + 1 < text.length && text.charAt(i + 1) === \"\\n\") {\n        return \"\\r\\n\";\n      }\n      return \"\\r\";\n    } else if (ch === \"\\n\") {\n      return \"\\n\";\n    }\n  }\n  return options && options.eol || \"\\n\";\n}\n__name(getEOL, \"getEOL\");\nfunction isEOL(text, offset) {\n  return \"\\r\\n\".indexOf(text.charAt(offset)) !== -1;\n}\n__name(isEOL, \"isEOL\");\n\n// ../../node_modules/.pnpm/jsonc-parser@3.2.0/node_modules/jsonc-parser/lib/esm/impl/parser.js\nvar ParseOptions;\n(function(ParseOptions2) {\n  ParseOptions2.DEFAULT = {\n    allowTrailingComma: false\n  };\n})(ParseOptions || (ParseOptions = {}));\nfunction parse(text, errors = [], options = ParseOptions.DEFAULT) {\n  let currentProperty = null;\n  let currentParent = [];\n  const previousParents = [];\n  function onValue(value) {\n    if (Array.isArray(currentParent)) {\n      currentParent.push(value);\n    } else if (currentProperty !== null) {\n      currentParent[currentProperty] = value;\n    }\n  }\n  __name(onValue, \"onValue\");\n  const visitor = {\n    onObjectBegin: /* @__PURE__ */ __name(() => {\n      const object = {};\n      onValue(object);\n      previousParents.push(currentParent);\n      currentParent = object;\n      currentProperty = null;\n    }, \"onObjectBegin\"),\n    onObjectProperty: /* @__PURE__ */ __name((name) => {\n      currentProperty = name;\n    }, \"onObjectProperty\"),\n    onObjectEnd: /* @__PURE__ */ __name(() => {\n      currentParent = previousParents.pop();\n    }, \"onObjectEnd\"),\n    onArrayBegin: /* @__PURE__ */ __name(() => {\n      const array = [];\n      onValue(array);\n      previousParents.push(currentParent);\n      currentParent = array;\n      currentProperty = null;\n    }, \"onArrayBegin\"),\n    onArrayEnd: /* @__PURE__ */ __name(() => {\n      currentParent = previousParents.pop();\n    }, \"onArrayEnd\"),\n    onLiteralValue: onValue,\n    onError: /* @__PURE__ */ __name((error, offset, length) => {\n      errors.push({ error, offset, length });\n    }, \"onError\")\n  };\n  visit(text, visitor, options);\n  return currentParent[0];\n}\n__name(parse, \"parse\");\nfunction parseTree(text, errors = [], options = ParseOptions.DEFAULT) {\n  let currentParent = { type: \"array\", offset: -1, length: -1, children: [], parent: void 0 };\n  function ensurePropertyComplete(endOffset) {\n    if (currentParent.type === \"property\") {\n      currentParent.length = endOffset - currentParent.offset;\n      currentParent = currentParent.parent;\n    }\n  }\n  __name(ensurePropertyComplete, \"ensurePropertyComplete\");\n  function onValue(valueNode) {\n    currentParent.children.push(valueNode);\n    return valueNode;\n  }\n  __name(onValue, \"onValue\");\n  const visitor = {\n    onObjectBegin: /* @__PURE__ */ __name((offset) => {\n      currentParent = onValue({ type: \"object\", offset, length: -1, parent: currentParent, children: [] });\n    }, \"onObjectBegin\"),\n    onObjectProperty: /* @__PURE__ */ __name((name, offset, length) => {\n      currentParent = onValue({ type: \"property\", offset, length: -1, parent: currentParent, children: [] });\n      currentParent.children.push({ type: \"string\", value: name, offset, length, parent: currentParent });\n    }, \"onObjectProperty\"),\n    onObjectEnd: /* @__PURE__ */ __name((offset, length) => {\n      ensurePropertyComplete(offset + length);\n      currentParent.length = offset + length - currentParent.offset;\n      currentParent = currentParent.parent;\n      ensurePropertyComplete(offset + length);\n    }, \"onObjectEnd\"),\n    onArrayBegin: /* @__PURE__ */ __name((offset, length) => {\n      currentParent = onValue({ type: \"array\", offset, length: -1, parent: currentParent, children: [] });\n    }, \"onArrayBegin\"),\n    onArrayEnd: /* @__PURE__ */ __name((offset, length) => {\n      currentParent.length = offset + length - currentParent.offset;\n      currentParent = currentParent.parent;\n      ensurePropertyComplete(offset + length);\n    }, \"onArrayEnd\"),\n    onLiteralValue: /* @__PURE__ */ __name((value, offset, length) => {\n      onValue({ type: getNodeType(value), offset, length, parent: currentParent, value });\n      ensurePropertyComplete(offset + length);\n    }, \"onLiteralValue\"),\n    onSeparator: /* @__PURE__ */ __name((sep, offset, length) => {\n      if (currentParent.type === \"property\") {\n        if (sep === \":\") {\n          currentParent.colonOffset = offset;\n        } else if (sep === \",\") {\n          ensurePropertyComplete(offset);\n        }\n      }\n    }, \"onSeparator\"),\n    onError: /* @__PURE__ */ __name((error, offset, length) => {\n      errors.push({ error, offset, length });\n    }, \"onError\")\n  };\n  visit(text, visitor, options);\n  const result = currentParent.children[0];\n  if (result) {\n    delete result.parent;\n  }\n  return result;\n}\n__name(parseTree, \"parseTree\");\nfunction findNodeAtLocation(root, path2) {\n  if (!root) {\n    return void 0;\n  }\n  let node = root;\n  for (let segment of path2) {\n    if (typeof segment === \"string\") {\n      if (node.type !== \"object\" || !Array.isArray(node.children)) {\n        return void 0;\n      }\n      let found = false;\n      for (const propertyNode of node.children) {\n        if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {\n          node = propertyNode.children[1];\n          found = true;\n          break;\n        }\n      }\n      if (!found) {\n        return void 0;\n      }\n    } else {\n      const index = segment;\n      if (node.type !== \"array\" || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n        return void 0;\n      }\n      node = node.children[index];\n    }\n  }\n  return node;\n}\n__name(findNodeAtLocation, \"findNodeAtLocation\");\nfunction visit(text, visitor, options = ParseOptions.DEFAULT) {\n  const _scanner = createScanner(text, false);\n  const _jsonPath = [];\n  function toNoArgVisit(visitFunction) {\n    return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n  }\n  __name(toNoArgVisit, \"toNoArgVisit\");\n  function toNoArgVisitWithPath(visitFunction) {\n    return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n  }\n  __name(toNoArgVisitWithPath, \"toNoArgVisitWithPath\");\n  function toOneArgVisit(visitFunction) {\n    return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n  }\n  __name(toOneArgVisit, \"toOneArgVisit\");\n  function toOneArgVisitWithPath(visitFunction) {\n    return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n  }\n  __name(toOneArgVisitWithPath, \"toOneArgVisitWithPath\");\n  const onObjectBegin = toNoArgVisitWithPath(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisitWithPath(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n  const disallowComments = options && options.disallowComments;\n  const allowTrailingComma = options && options.allowTrailingComma;\n  function scanNext() {\n    while (true) {\n      const token = _scanner.scan();\n      switch (_scanner.getTokenError()) {\n        case 4:\n          handleError(\n            14\n            /* ParseErrorCode.InvalidUnicode */\n          );\n          break;\n        case 5:\n          handleError(\n            15\n            /* ParseErrorCode.InvalidEscapeCharacter */\n          );\n          break;\n        case 3:\n          handleError(\n            13\n            /* ParseErrorCode.UnexpectedEndOfNumber */\n          );\n          break;\n        case 1:\n          if (!disallowComments) {\n            handleError(\n              11\n              /* ParseErrorCode.UnexpectedEndOfComment */\n            );\n          }\n          break;\n        case 2:\n          handleError(\n            12\n            /* ParseErrorCode.UnexpectedEndOfString */\n          );\n          break;\n        case 6:\n          handleError(\n            16\n            /* ParseErrorCode.InvalidCharacter */\n          );\n          break;\n      }\n      switch (token) {\n        case 12:\n        case 13:\n          if (disallowComments) {\n            handleError(\n              10\n              /* ParseErrorCode.InvalidCommentToken */\n            );\n          } else {\n            onComment();\n          }\n          break;\n        case 16:\n          handleError(\n            1\n            /* ParseErrorCode.InvalidSymbol */\n          );\n          break;\n        case 15:\n        case 14:\n          break;\n        default:\n          return token;\n      }\n    }\n  }\n  __name(scanNext, \"scanNext\");\n  function handleError(error, skipUntilAfter = [], skipUntil2 = []) {\n    onError(error);\n    if (skipUntilAfter.length + skipUntil2.length > 0) {\n      let token = _scanner.getToken();\n      while (token !== 17) {\n        if (skipUntilAfter.indexOf(token) !== -1) {\n          scanNext();\n          break;\n        } else if (skipUntil2.indexOf(token) !== -1) {\n          break;\n        }\n        token = scanNext();\n      }\n    }\n  }\n  __name(handleError, \"handleError\");\n  function parseString2(isValue) {\n    const value = _scanner.getTokenValue();\n    if (isValue) {\n      onLiteralValue(value);\n    } else {\n      onObjectProperty(value);\n      _jsonPath.push(value);\n    }\n    scanNext();\n    return true;\n  }\n  __name(parseString2, \"parseString\");\n  function parseLiteral() {\n    switch (_scanner.getToken()) {\n      case 11:\n        const tokenValue = _scanner.getTokenValue();\n        let value = Number(tokenValue);\n        if (isNaN(value)) {\n          handleError(\n            2\n            /* ParseErrorCode.InvalidNumberFormat */\n          );\n          value = 0;\n        }\n        onLiteralValue(value);\n        break;\n      case 7:\n        onLiteralValue(null);\n        break;\n      case 8:\n        onLiteralValue(true);\n        break;\n      case 9:\n        onLiteralValue(false);\n        break;\n      default:\n        return false;\n    }\n    scanNext();\n    return true;\n  }\n  __name(parseLiteral, \"parseLiteral\");\n  function parseProperty() {\n    if (_scanner.getToken() !== 10) {\n      handleError(3, [], [\n        2,\n        5\n        /* SyntaxKind.CommaToken */\n      ]);\n      return false;\n    }\n    parseString2(false);\n    if (_scanner.getToken() === 6) {\n      onSeparator(\":\");\n      scanNext();\n      if (!parseValue2()) {\n        handleError(4, [], [\n          2,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n    } else {\n      handleError(5, [], [\n        2,\n        5\n        /* SyntaxKind.CommaToken */\n      ]);\n    }\n    _jsonPath.pop();\n    return true;\n  }\n  __name(parseProperty, \"parseProperty\");\n  function parseObject() {\n    onObjectBegin();\n    scanNext();\n    let needsComma = false;\n    while (_scanner.getToken() !== 2 && _scanner.getToken() !== 17) {\n      if (_scanner.getToken() === 5) {\n        if (!needsComma) {\n          handleError(4, [], []);\n        }\n        onSeparator(\",\");\n        scanNext();\n        if (_scanner.getToken() === 2 && allowTrailingComma) {\n          break;\n        }\n      } else if (needsComma) {\n        handleError(6, [], []);\n      }\n      if (!parseProperty()) {\n        handleError(4, [], [\n          2,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n      needsComma = true;\n    }\n    onObjectEnd();\n    if (_scanner.getToken() !== 2) {\n      handleError(7, [\n        2\n        /* SyntaxKind.CloseBraceToken */\n      ], []);\n    } else {\n      scanNext();\n    }\n    return true;\n  }\n  __name(parseObject, \"parseObject\");\n  function parseArray2() {\n    onArrayBegin();\n    scanNext();\n    let isFirstElement = true;\n    let needsComma = false;\n    while (_scanner.getToken() !== 4 && _scanner.getToken() !== 17) {\n      if (_scanner.getToken() === 5) {\n        if (!needsComma) {\n          handleError(4, [], []);\n        }\n        onSeparator(\",\");\n        scanNext();\n        if (_scanner.getToken() === 4 && allowTrailingComma) {\n          break;\n        }\n      } else if (needsComma) {\n        handleError(6, [], []);\n      }\n      if (isFirstElement) {\n        _jsonPath.push(0);\n        isFirstElement = false;\n      } else {\n        _jsonPath[_jsonPath.length - 1]++;\n      }\n      if (!parseValue2()) {\n        handleError(4, [], [\n          4,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n      needsComma = true;\n    }\n    onArrayEnd();\n    if (!isFirstElement) {\n      _jsonPath.pop();\n    }\n    if (_scanner.getToken() !== 4) {\n      handleError(8, [\n        4\n        /* SyntaxKind.CloseBracketToken */\n      ], []);\n    } else {\n      scanNext();\n    }\n    return true;\n  }\n  __name(parseArray2, \"parseArray\");\n  function parseValue2() {\n    switch (_scanner.getToken()) {\n      case 3:\n        return parseArray2();\n      case 1:\n        return parseObject();\n      case 10:\n        return parseString2(true);\n      default:\n        return parseLiteral();\n    }\n  }\n  __name(parseValue2, \"parseValue\");\n  scanNext();\n  if (_scanner.getToken() === 17) {\n    if (options.allowEmptyContent) {\n      return true;\n    }\n    handleError(4, [], []);\n    return false;\n  }\n  if (!parseValue2()) {\n    handleError(4, [], []);\n    return false;\n  }\n  if (_scanner.getToken() !== 17) {\n    handleError(9, [], []);\n  }\n  return true;\n}\n__name(visit, \"visit\");\nfunction getNodeType(value) {\n  switch (typeof value) {\n    case \"boolean\":\n      return \"boolean\";\n    case \"number\":\n      return \"number\";\n    case \"string\":\n      return \"string\";\n    case \"object\": {\n      if (!value) {\n        return \"null\";\n      } else if (Array.isArray(value)) {\n        return \"array\";\n      }\n      return \"object\";\n    }\n    default:\n      return \"null\";\n  }\n}\n__name(getNodeType, \"getNodeType\");\n\n// ../../node_modules/.pnpm/jsonc-parser@3.2.0/node_modules/jsonc-parser/lib/esm/impl/edit.js\nfunction setProperty(text, originalPath, value, options) {\n  const path2 = originalPath.slice();\n  const errors = [];\n  const root = parseTree(text, errors);\n  let parent = void 0;\n  let lastSegment = void 0;\n  while (path2.length > 0) {\n    lastSegment = path2.pop();\n    parent = findNodeAtLocation(root, path2);\n    if (parent === void 0 && value !== void 0) {\n      if (typeof lastSegment === \"string\") {\n        value = { [lastSegment]: value };\n      } else {\n        value = [value];\n      }\n    } else {\n      break;\n    }\n  }\n  if (!parent) {\n    if (value === void 0) {\n      throw new Error(\"Can not delete in empty document\");\n    }\n    return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);\n  } else if (parent.type === \"object\" && typeof lastSegment === \"string\" && Array.isArray(parent.children)) {\n    const existing = findNodeAtLocation(parent, [lastSegment]);\n    if (existing !== void 0) {\n      if (value === void 0) {\n        if (!existing.parent) {\n          throw new Error(\"Malformed AST\");\n        }\n        const propertyIndex = parent.children.indexOf(existing.parent);\n        let removeBegin;\n        let removeEnd = existing.parent.offset + existing.parent.length;\n        if (propertyIndex > 0) {\n          let previous = parent.children[propertyIndex - 1];\n          removeBegin = previous.offset + previous.length;\n        } else {\n          removeBegin = parent.offset + 1;\n          if (parent.children.length > 1) {\n            let next = parent.children[1];\n            removeEnd = next.offset;\n          }\n        }\n        return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: \"\" }, options);\n      } else {\n        return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);\n      }\n    } else {\n      if (value === void 0) {\n        return [];\n      }\n      const newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;\n      const index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map((p) => p.children[0].value)) : parent.children.length;\n      let edit;\n      if (index > 0) {\n        let previous = parent.children[index - 1];\n        edit = { offset: previous.offset + previous.length, length: 0, content: \",\" + newProperty };\n      } else if (parent.children.length === 0) {\n        edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n      } else {\n        edit = { offset: parent.offset + 1, length: 0, content: newProperty + \",\" };\n      }\n      return withFormatting(text, edit, options);\n    }\n  } else if (parent.type === \"array\" && typeof lastSegment === \"number\" && Array.isArray(parent.children)) {\n    const insertIndex = lastSegment;\n    if (insertIndex === -1) {\n      const newProperty = `${JSON.stringify(value)}`;\n      let edit;\n      if (parent.children.length === 0) {\n        edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n      } else {\n        const previous = parent.children[parent.children.length - 1];\n        edit = { offset: previous.offset + previous.length, length: 0, content: \",\" + newProperty };\n      }\n      return withFormatting(text, edit, options);\n    } else if (value === void 0 && parent.children.length >= 0) {\n      const removalIndex = lastSegment;\n      const toRemove = parent.children[removalIndex];\n      let edit;\n      if (parent.children.length === 1) {\n        edit = { offset: parent.offset + 1, length: parent.length - 2, content: \"\" };\n      } else if (parent.children.length - 1 === removalIndex) {\n        let previous = parent.children[removalIndex - 1];\n        let offset = previous.offset + previous.length;\n        let parentEndOffset = parent.offset + parent.length;\n        edit = { offset, length: parentEndOffset - 2 - offset, content: \"\" };\n      } else {\n        edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: \"\" };\n      }\n      return withFormatting(text, edit, options);\n    } else if (value !== void 0) {\n      let edit;\n      const newProperty = `${JSON.stringify(value)}`;\n      if (!options.isArrayInsertion && parent.children.length > lastSegment) {\n        const toModify = parent.children[lastSegment];\n        edit = { offset: toModify.offset, length: toModify.length, content: newProperty };\n      } else if (parent.children.length === 0 || lastSegment === 0) {\n        edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + \",\" };\n      } else {\n        const index = lastSegment > parent.children.length ? parent.children.length : lastSegment;\n        const previous = parent.children[index - 1];\n        edit = { offset: previous.offset + previous.length, length: 0, content: \",\" + newProperty };\n      }\n      return withFormatting(text, edit, options);\n    } else {\n      throw new Error(`Can not ${value === void 0 ? \"remove\" : options.isArrayInsertion ? \"insert\" : \"modify\"} Array index ${insertIndex} as length is not sufficient`);\n    }\n  } else {\n    throw new Error(`Can not add ${typeof lastSegment !== \"number\" ? \"index\" : \"property\"} to parent of type ${parent.type}`);\n  }\n}\n__name(setProperty, \"setProperty\");\nfunction withFormatting(text, edit, options) {\n  if (!options.formattingOptions) {\n    return [edit];\n  }\n  let newText = applyEdit(text, edit);\n  let begin = edit.offset;\n  let end = edit.offset + edit.content.length;\n  if (edit.length === 0 || edit.content.length === 0) {\n    while (begin > 0 && !isEOL(newText, begin - 1)) {\n      begin--;\n    }\n    while (end < newText.length && !isEOL(newText, end)) {\n      end++;\n    }\n  }\n  const edits = format(newText, { offset: begin, length: end - begin }, { ...options.formattingOptions, keepLines: false });\n  for (let i = edits.length - 1; i >= 0; i--) {\n    const edit2 = edits[i];\n    newText = applyEdit(newText, edit2);\n    begin = Math.min(begin, edit2.offset);\n    end = Math.max(end, edit2.offset + edit2.length);\n    end += edit2.content.length - edit2.length;\n  }\n  const editLength = text.length - (newText.length - end) - begin;\n  return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];\n}\n__name(withFormatting, \"withFormatting\");\nfunction applyEdit(text, edit) {\n  return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);\n}\n__name(applyEdit, \"applyEdit\");\n\n// ../../node_modules/.pnpm/jsonc-parser@3.2.0/node_modules/jsonc-parser/lib/esm/main.js\nvar ScanError;\n(function(ScanError2) {\n  ScanError2[ScanError2[\"None\"] = 0] = \"None\";\n  ScanError2[ScanError2[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n  ScanError2[ScanError2[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n  ScanError2[ScanError2[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n  ScanError2[ScanError2[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n  ScanError2[ScanError2[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n  ScanError2[ScanError2[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n})(ScanError || (ScanError = {}));\nvar SyntaxKind;\n(function(SyntaxKind2) {\n  SyntaxKind2[SyntaxKind2[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n  SyntaxKind2[SyntaxKind2[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n  SyntaxKind2[SyntaxKind2[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n  SyntaxKind2[SyntaxKind2[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n  SyntaxKind2[SyntaxKind2[\"CommaToken\"] = 5] = \"CommaToken\";\n  SyntaxKind2[SyntaxKind2[\"ColonToken\"] = 6] = \"ColonToken\";\n  SyntaxKind2[SyntaxKind2[\"NullKeyword\"] = 7] = \"NullKeyword\";\n  SyntaxKind2[SyntaxKind2[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n  SyntaxKind2[SyntaxKind2[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n  SyntaxKind2[SyntaxKind2[\"StringLiteral\"] = 10] = \"StringLiteral\";\n  SyntaxKind2[SyntaxKind2[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n  SyntaxKind2[SyntaxKind2[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n  SyntaxKind2[SyntaxKind2[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n  SyntaxKind2[SyntaxKind2[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n  SyntaxKind2[SyntaxKind2[\"Trivia\"] = 15] = \"Trivia\";\n  SyntaxKind2[SyntaxKind2[\"Unknown\"] = 16] = \"Unknown\";\n  SyntaxKind2[SyntaxKind2[\"EOF\"] = 17] = \"EOF\";\n})(SyntaxKind || (SyntaxKind = {}));\nvar parse2 = parse;\nvar ParseErrorCode;\n(function(ParseErrorCode2) {\n  ParseErrorCode2[ParseErrorCode2[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n  ParseErrorCode2[ParseErrorCode2[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"ValueExpected\"] = 4] = \"ValueExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"ColonExpected\"] = 5] = \"ColonExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CommaExpected\"] = 6] = \"CommaExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n})(ParseErrorCode || (ParseErrorCode = {}));\nfunction printParseErrorCode(code) {\n  switch (code) {\n    case 1:\n      return \"InvalidSymbol\";\n    case 2:\n      return \"InvalidNumberFormat\";\n    case 3:\n      return \"PropertyNameExpected\";\n    case 4:\n      return \"ValueExpected\";\n    case 5:\n      return \"ColonExpected\";\n    case 6:\n      return \"CommaExpected\";\n    case 7:\n      return \"CloseBraceExpected\";\n    case 8:\n      return \"CloseBracketExpected\";\n    case 9:\n      return \"EndOfFileExpected\";\n    case 10:\n      return \"InvalidCommentToken\";\n    case 11:\n      return \"UnexpectedEndOfComment\";\n    case 12:\n      return \"UnexpectedEndOfString\";\n    case 13:\n      return \"UnexpectedEndOfNumber\";\n    case 14:\n      return \"InvalidUnicode\";\n    case 15:\n      return \"InvalidEscapeCharacter\";\n    case 16:\n      return \"InvalidCharacter\";\n  }\n  return \"<unknown ParseErrorCode>\";\n}\n__name(printParseErrorCode, \"printParseErrorCode\");\nfunction format2(documentText, range, options) {\n  return format(documentText, range, options);\n}\n__name(format2, \"format\");\nfunction modify(text, path2, value, options) {\n  return setProperty(text, path2, value, options);\n}\n__name(modify, \"modify\");\nfunction applyEdits(text, edits) {\n  let sortedEdits = edits.slice(0).sort((a, b) => {\n    const diff = a.offset - b.offset;\n    if (diff === 0) {\n      return a.length - b.length;\n    }\n    return diff;\n  });\n  let lastModifiedOffset = text.length;\n  for (let i = sortedEdits.length - 1; i >= 0; i--) {\n    let e = sortedEdits[i];\n    if (e.offset + e.length <= lastModifiedOffset) {\n      text = applyEdit(text, e);\n    } else {\n      throw new Error(\"Overlapping edit\");\n    }\n    lastModifiedOffset = e.offset;\n  }\n  return text;\n}\n__name(applyEdits, \"applyEdits\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/error.js\nfunction getLineColFromPtr(string, ptr) {\n  let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n  return [lines.length, lines.pop().length + 1];\n}\n__name(getLineColFromPtr, \"getLineColFromPtr\");\nfunction makeCodeBlock(string, line, column) {\n  let lines = string.split(/\\r\\n|\\n|\\r/g);\n  let codeblock = \"\";\n  let numberLen = (Math.log10(line + 1) | 0) + 1;\n  for (let i = line - 1; i <= line + 1; i++) {\n    let l = lines[i - 1];\n    if (!l)\n      continue;\n    codeblock += i.toString().padEnd(numberLen, \" \");\n    codeblock += \":  \";\n    codeblock += l;\n    codeblock += \"\\n\";\n    if (i === line) {\n      codeblock += \" \".repeat(numberLen + column + 2);\n      codeblock += \"^\\n\";\n    }\n  }\n  return codeblock;\n}\n__name(makeCodeBlock, \"makeCodeBlock\");\nvar TomlError = class extends Error {\n  static {\n    __name(this, \"TomlError\");\n  }\n  line;\n  column;\n  codeblock;\n  constructor(message, options) {\n    const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n    const codeblock = makeCodeBlock(options.toml, line, column);\n    super(`Invalid TOML document: ${message}\n\n${codeblock}`, options);\n    this.line = line;\n    this.column = column;\n    this.codeblock = codeblock;\n  }\n};\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/util.js\nfunction isEscaped(str, ptr) {\n  let i = 0;\n  while (str[ptr - ++i] === \"\\\\\")\n    ;\n  return --i && i % 2;\n}\n__name(isEscaped, \"isEscaped\");\nfunction indexOfNewline(str, start = 0, end = str.length) {\n  let idx = str.indexOf(\"\\n\", start);\n  if (str[idx - 1] === \"\\r\")\n    idx--;\n  return idx <= end ? idx : -1;\n}\n__name(indexOfNewline, \"indexOfNewline\");\nfunction skipComment(str, ptr) {\n  for (let i = ptr; i < str.length; i++) {\n    let c = str[i];\n    if (c === \"\\n\")\n      return i;\n    if (c === \"\\r\" && str[i + 1] === \"\\n\")\n      return i + 1;\n    if (c < \" \" && c !== \"\t\" || c === \"\\x7F\") {\n      throw new TomlError(\"control characters are not allowed in comments\", {\n        toml: str,\n        ptr\n      });\n    }\n  }\n  return str.length;\n}\n__name(skipComment, \"skipComment\");\nfunction skipVoid(str, ptr, banNewLines, banComments) {\n  let c;\n  while ((c = str[ptr]) === \" \" || c === \"\t\" || !banNewLines && (c === \"\\n\" || c === \"\\r\" && str[ptr + 1] === \"\\n\"))\n    ptr++;\n  return banComments || c !== \"#\" ? ptr : skipVoid(str, skipComment(str, ptr), banNewLines);\n}\n__name(skipVoid, \"skipVoid\");\nfunction skipUntil(str, ptr, sep, end, banNewLines = false) {\n  if (!end) {\n    ptr = indexOfNewline(str, ptr);\n    return ptr < 0 ? str.length : ptr;\n  }\n  for (let i = ptr; i < str.length; i++) {\n    let c = str[i];\n    if (c === \"#\") {\n      i = indexOfNewline(str, i);\n    } else if (c === sep) {\n      return i + 1;\n    } else if (c === end || banNewLines && (c === \"\\n\" || c === \"\\r\" && str[i + 1] === \"\\n\")) {\n      return i;\n    }\n  }\n  throw new TomlError(\"cannot find end of structure\", {\n    toml: str,\n    ptr\n  });\n}\n__name(skipUntil, \"skipUntil\");\nfunction getStringEnd(str, seek) {\n  let first = str[seek];\n  let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2] ? str.slice(seek, seek + 3) : first;\n  seek += target.length - 1;\n  do\n    seek = str.indexOf(target, ++seek);\n  while (seek > -1 && first !== \"'\" && isEscaped(str, seek));\n  if (seek > -1) {\n    seek += target.length;\n    if (target.length > 1) {\n      if (str[seek] === first)\n        seek++;\n      if (str[seek] === first)\n        seek++;\n    }\n  }\n  return seek;\n}\n__name(getStringEnd, \"getStringEnd\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/date.js\nvar DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}:\\d{2}(?:\\.\\d+)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nvar TomlDate = class _TomlDate extends Date {\n  static {\n    __name(this, \"TomlDate\");\n  }\n  #hasDate = false;\n  #hasTime = false;\n  #offset = null;\n  constructor(date) {\n    let hasDate = true;\n    let hasTime = true;\n    let offset = \"Z\";\n    if (typeof date === \"string\") {\n      let match = date.match(DATE_TIME_RE);\n      if (match) {\n        if (!match[1]) {\n          hasDate = false;\n          date = `0000-01-01T${date}`;\n        }\n        hasTime = !!match[2];\n        hasTime && date[10] === \" \" && (date = date.replace(\" \", \"T\"));\n        if (match[2] && +match[2] > 23) {\n          date = \"\";\n        } else {\n          offset = match[3] || null;\n          date = date.toUpperCase();\n          if (!offset && hasTime)\n            date += \"Z\";\n        }\n      } else {\n        date = \"\";\n      }\n    }\n    super(date);\n    if (!isNaN(this.getTime())) {\n      this.#hasDate = hasDate;\n      this.#hasTime = hasTime;\n      this.#offset = offset;\n    }\n  }\n  isDateTime() {\n    return this.#hasDate && this.#hasTime;\n  }\n  isLocal() {\n    return !this.#hasDate || !this.#hasTime || !this.#offset;\n  }\n  isDate() {\n    return this.#hasDate && !this.#hasTime;\n  }\n  isTime() {\n    return this.#hasTime && !this.#hasDate;\n  }\n  isValid() {\n    return this.#hasDate || this.#hasTime;\n  }\n  toISOString() {\n    let iso = super.toISOString();\n    if (this.isDate())\n      return iso.slice(0, 10);\n    if (this.isTime())\n      return iso.slice(11, 23);\n    if (this.#offset === null)\n      return iso.slice(0, -1);\n    if (this.#offset === \"Z\")\n      return iso;\n    let offset = +this.#offset.slice(1, 3) * 60 + +this.#offset.slice(4, 6);\n    offset = this.#offset[0] === \"-\" ? offset : -offset;\n    let offsetDate = new Date(this.getTime() - offset * 6e4);\n    return offsetDate.toISOString().slice(0, -1) + this.#offset;\n  }\n  static wrapAsOffsetDateTime(jsDate, offset = \"Z\") {\n    let date = new _TomlDate(jsDate);\n    date.#offset = offset;\n    return date;\n  }\n  static wrapAsLocalDateTime(jsDate) {\n    let date = new _TomlDate(jsDate);\n    date.#offset = null;\n    return date;\n  }\n  static wrapAsLocalDate(jsDate) {\n    let date = new _TomlDate(jsDate);\n    date.#hasTime = false;\n    date.#offset = null;\n    return date;\n  }\n  static wrapAsLocalTime(jsDate) {\n    let date = new _TomlDate(jsDate);\n    date.#hasDate = false;\n    date.#offset = null;\n    return date;\n  }\n};\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/primitive.js\nvar INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nvar FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nvar LEADING_ZERO = /^[+-]?0[0-9_]/;\nvar ESCAPE_REGEX = /^[0-9a-f]{4,8}$/i;\nvar ESC_MAP = {\n  b: \"\\b\",\n  t: \"\t\",\n  n: \"\\n\",\n  f: \"\\f\",\n  r: \"\\r\",\n  '\"': '\"',\n  \"\\\\\": \"\\\\\"\n};\nfunction parseString(str, ptr = 0, endPtr = str.length) {\n  let isLiteral = str[ptr] === \"'\";\n  let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n  if (isMultiline) {\n    endPtr -= 2;\n    if (str[ptr += 2] === \"\\r\")\n      ptr++;\n    if (str[ptr] === \"\\n\")\n      ptr++;\n  }\n  let tmp = 0;\n  let isEscape;\n  let parsed = \"\";\n  let sliceStart = ptr;\n  while (ptr < endPtr - 1) {\n    let c = str[ptr++];\n    if (c === \"\\n\" || c === \"\\r\" && str[ptr] === \"\\n\") {\n      if (!isMultiline) {\n        throw new TomlError(\"newlines are not allowed in strings\", {\n          toml: str,\n          ptr: ptr - 1\n        });\n      }\n    } else if (c < \" \" && c !== \"\t\" || c === \"\\x7F\") {\n      throw new TomlError(\"control characters are not allowed in strings\", {\n        toml: str,\n        ptr: ptr - 1\n      });\n    }\n    if (isEscape) {\n      isEscape = false;\n      if (c === \"u\" || c === \"U\") {\n        let code = str.slice(ptr, ptr += c === \"u\" ? 4 : 8);\n        if (!ESCAPE_REGEX.test(code)) {\n          throw new TomlError(\"invalid unicode escape\", {\n            toml: str,\n            ptr: tmp\n          });\n        }\n        try {\n          parsed += String.fromCodePoint(parseInt(code, 16));\n        } catch {\n          throw new TomlError(\"invalid unicode escape\", {\n            toml: str,\n            ptr: tmp\n          });\n        }\n      } else if (isMultiline && (c === \"\\n\" || c === \" \" || c === \"\t\" || c === \"\\r\")) {\n        ptr = skipVoid(str, ptr - 1, true);\n        if (str[ptr] !== \"\\n\" && str[ptr] !== \"\\r\") {\n          throw new TomlError(\"invalid escape: only line-ending whitespace may be escaped\", {\n            toml: str,\n            ptr: tmp\n          });\n        }\n        ptr = skipVoid(str, ptr);\n      } else if (c in ESC_MAP) {\n        parsed += ESC_MAP[c];\n      } else {\n        throw new TomlError(\"unrecognized escape sequence\", {\n          toml: str,\n          ptr: tmp\n        });\n      }\n      sliceStart = ptr;\n    } else if (!isLiteral && c === \"\\\\\") {\n      tmp = ptr - 1;\n      isEscape = true;\n      parsed += str.slice(sliceStart, tmp);\n    }\n  }\n  return parsed + str.slice(sliceStart, endPtr - 1);\n}\n__name(parseString, \"parseString\");\nfunction parseValue(value, toml, ptr, integersAsBigInt) {\n  if (value === \"true\")\n    return true;\n  if (value === \"false\")\n    return false;\n  if (value === \"-inf\")\n    return -Infinity;\n  if (value === \"inf\" || value === \"+inf\")\n    return Infinity;\n  if (value === \"nan\" || value === \"+nan\" || value === \"-nan\")\n    return NaN;\n  if (value === \"-0\")\n    return integersAsBigInt ? 0n : 0;\n  let isInt = INT_REGEX.test(value);\n  if (isInt || FLOAT_REGEX.test(value)) {\n    if (LEADING_ZERO.test(value)) {\n      throw new TomlError(\"leading zeroes are not allowed\", {\n        toml,\n        ptr\n      });\n    }\n    value = value.replace(/_/g, \"\");\n    let numeric = +value;\n    if (isNaN(numeric)) {\n      throw new TomlError(\"invalid number\", {\n        toml,\n        ptr\n      });\n    }\n    if (isInt) {\n      if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n        throw new TomlError(\"integer value cannot be represented losslessly\", {\n          toml,\n          ptr\n        });\n      }\n      if (isInt || integersAsBigInt === true)\n        numeric = BigInt(value);\n    }\n    return numeric;\n  }\n  const date = new TomlDate(value);\n  if (!date.isValid()) {\n    throw new TomlError(\"invalid value\", {\n      toml,\n      ptr\n    });\n  }\n  return date;\n}\n__name(parseValue, \"parseValue\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/extract.js\nfunction sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {\n  let value = str.slice(startPtr, endPtr);\n  let commentIdx = value.indexOf(\"#\");\n  if (commentIdx > -1) {\n    skipComment(str, commentIdx);\n    value = value.slice(0, commentIdx);\n  }\n  let trimmed = value.trimEnd();\n  if (!allowNewLines) {\n    let newlineIdx = value.indexOf(\"\\n\", trimmed.length);\n    if (newlineIdx > -1) {\n      throw new TomlError(\"newlines are not allowed in inline tables\", {\n        toml: str,\n        ptr: startPtr + newlineIdx\n      });\n    }\n  }\n  return [trimmed, commentIdx];\n}\n__name(sliceAndTrimEndOf, \"sliceAndTrimEndOf\");\nfunction extractValue(str, ptr, end, depth, integersAsBigInt) {\n  if (depth === 0) {\n    throw new TomlError(\"document contains excessively nested structures. aborting.\", {\n      toml: str,\n      ptr\n    });\n  }\n  let c = str[ptr];\n  if (c === \"[\" || c === \"{\") {\n    let [value, endPtr2] = c === \"[\" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt);\n    let newPtr = end ? skipUntil(str, endPtr2, \",\", end) : endPtr2;\n    if (endPtr2 - newPtr && end === \"}\") {\n      let nextNewLine = indexOfNewline(str, endPtr2, newPtr);\n      if (nextNewLine > -1) {\n        throw new TomlError(\"newlines are not allowed in inline tables\", {\n          toml: str,\n          ptr: nextNewLine\n        });\n      }\n    }\n    return [value, newPtr];\n  }\n  let endPtr;\n  if (c === '\"' || c === \"'\") {\n    endPtr = getStringEnd(str, ptr);\n    let parsed = parseString(str, ptr, endPtr);\n    if (end) {\n      endPtr = skipVoid(str, endPtr, end !== \"]\");\n      if (str[endPtr] && str[endPtr] !== \",\" && str[endPtr] !== end && str[endPtr] !== \"\\n\" && str[endPtr] !== \"\\r\") {\n        throw new TomlError(\"unexpected character encountered\", {\n          toml: str,\n          ptr: endPtr\n        });\n      }\n      endPtr += +(str[endPtr] === \",\");\n    }\n    return [parsed, endPtr];\n  }\n  endPtr = skipUntil(str, ptr, \",\", end);\n  let slice = sliceAndTrimEndOf(str, ptr, endPtr - +(str[endPtr - 1] === \",\"), end === \"]\");\n  if (!slice[0]) {\n    throw new TomlError(\"incomplete key-value declaration: no value specified\", {\n      toml: str,\n      ptr\n    });\n  }\n  if (end && slice[1] > -1) {\n    endPtr = skipVoid(str, ptr + slice[1]);\n    endPtr += +(str[endPtr] === \",\");\n  }\n  return [\n    parseValue(slice[0], str, ptr, integersAsBigInt),\n    endPtr\n  ];\n}\n__name(extractValue, \"extractValue\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/struct.js\nvar KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nfunction parseKey(str, ptr, end = \"=\") {\n  let dot = ptr - 1;\n  let parsed = [];\n  let endPtr = str.indexOf(end, ptr);\n  if (endPtr < 0) {\n    throw new TomlError(\"incomplete key-value: cannot find end of key\", {\n      toml: str,\n      ptr\n    });\n  }\n  do {\n    let c = str[ptr = ++dot];\n    if (c !== \" \" && c !== \"\t\") {\n      if (c === '\"' || c === \"'\") {\n        if (c === str[ptr + 1] && c === str[ptr + 2]) {\n          throw new TomlError(\"multiline strings are not allowed in keys\", {\n            toml: str,\n            ptr\n          });\n        }\n        let eos = getStringEnd(str, ptr);\n        if (eos < 0) {\n          throw new TomlError(\"unfinished string encountered\", {\n            toml: str,\n            ptr\n          });\n        }\n        dot = str.indexOf(\".\", eos);\n        let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n        let newLine = indexOfNewline(strEnd);\n        if (newLine > -1) {\n          throw new TomlError(\"newlines are not allowed in keys\", {\n            toml: str,\n            ptr: ptr + dot + newLine\n          });\n        }\n        if (strEnd.trimStart()) {\n          throw new TomlError(\"found extra tokens after the string part\", {\n            toml: str,\n            ptr: eos\n          });\n        }\n        if (endPtr < eos) {\n          endPtr = str.indexOf(end, eos);\n          if (endPtr < 0) {\n            throw new TomlError(\"incomplete key-value: cannot find end of key\", {\n              toml: str,\n              ptr\n            });\n          }\n        }\n        parsed.push(parseString(str, ptr, eos));\n      } else {\n        dot = str.indexOf(\".\", ptr);\n        let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n        if (!KEY_PART_RE.test(part)) {\n          throw new TomlError(\"only letter, numbers, dashes and underscores are allowed in keys\", {\n            toml: str,\n            ptr\n          });\n        }\n        parsed.push(part.trimEnd());\n      }\n    }\n  } while (dot + 1 && dot < endPtr);\n  return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\n__name(parseKey, \"parseKey\");\nfunction parseInlineTable(str, ptr, depth, integersAsBigInt) {\n  let res = {};\n  let seen = /* @__PURE__ */ new Set();\n  let c;\n  let comma = 0;\n  ptr++;\n  while ((c = str[ptr++]) !== \"}\" && c) {\n    let err = { toml: str, ptr: ptr - 1 };\n    if (c === \"\\n\") {\n      throw new TomlError(\"newlines are not allowed in inline tables\", err);\n    } else if (c === \"#\") {\n      throw new TomlError(\"inline tables cannot contain comments\", err);\n    } else if (c === \",\") {\n      throw new TomlError(\"expected key-value, found comma\", err);\n    } else if (c !== \" \" && c !== \"\t\") {\n      let k;\n      let t = res;\n      let hasOwn = false;\n      let [key, keyEndPtr] = parseKey(str, ptr - 1);\n      for (let i = 0; i < key.length; i++) {\n        if (i)\n          t = hasOwn ? t[k] : t[k] = {};\n        k = key[i];\n        if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== \"object\" || seen.has(t[k]))) {\n          throw new TomlError(\"trying to redefine an already defined value\", {\n            toml: str,\n            ptr\n          });\n        }\n        if (!hasOwn && k === \"__proto__\") {\n          Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n        }\n      }\n      if (hasOwn) {\n        throw new TomlError(\"trying to redefine an already defined value\", {\n          toml: str,\n          ptr\n        });\n      }\n      let [value, valueEndPtr] = extractValue(str, keyEndPtr, \"}\", depth - 1, integersAsBigInt);\n      seen.add(value);\n      t[k] = value;\n      ptr = valueEndPtr;\n      comma = str[ptr - 1] === \",\" ? ptr - 1 : 0;\n    }\n  }\n  if (comma) {\n    throw new TomlError(\"trailing commas are not allowed in inline tables\", {\n      toml: str,\n      ptr: comma\n    });\n  }\n  if (!c) {\n    throw new TomlError(\"unfinished table encountered\", {\n      toml: str,\n      ptr\n    });\n  }\n  return [res, ptr];\n}\n__name(parseInlineTable, \"parseInlineTable\");\nfunction parseArray(str, ptr, depth, integersAsBigInt) {\n  let res = [];\n  let c;\n  ptr++;\n  while ((c = str[ptr++]) !== \"]\" && c) {\n    if (c === \",\") {\n      throw new TomlError(\"expected value, found comma\", {\n        toml: str,\n        ptr: ptr - 1\n      });\n    } else if (c === \"#\")\n      ptr = skipComment(str, ptr);\n    else if (c !== \" \" && c !== \"\t\" && c !== \"\\n\" && c !== \"\\r\") {\n      let e = extractValue(str, ptr - 1, \"]\", depth - 1, integersAsBigInt);\n      res.push(e[0]);\n      ptr = e[1];\n    }\n  }\n  if (!c) {\n    throw new TomlError(\"unfinished array encountered\", {\n      toml: str,\n      ptr\n    });\n  }\n  return [res, ptr];\n}\n__name(parseArray, \"parseArray\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/parse.js\nfunction peekTable(key, table, meta, type) {\n  let t = table;\n  let m = meta;\n  let k;\n  let hasOwn = false;\n  let state;\n  for (let i = 0; i < key.length; i++) {\n    if (i) {\n      t = hasOwn ? t[k] : t[k] = {};\n      m = (state = m[k]).c;\n      if (type === 0 && (state.t === 1 || state.t === 2)) {\n        return null;\n      }\n      if (state.t === 2) {\n        let l = t.length - 1;\n        t = t[l];\n        m = m[l].c;\n      }\n    }\n    k = key[i];\n    if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 && m[k]?.d) {\n      return null;\n    }\n    if (!hasOwn) {\n      if (k === \"__proto__\") {\n        Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n        Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n      }\n      m[k] = {\n        t: i < key.length - 1 && type === 2 ? 3 : type,\n        d: false,\n        i: 0,\n        c: {}\n      };\n    }\n  }\n  state = m[k];\n  if (state.t !== type && !(type === 1 && state.t === 3)) {\n    return null;\n  }\n  if (type === 2) {\n    if (!state.d) {\n      state.d = true;\n      t[k] = [];\n    }\n    t[k].push(t = {});\n    state.c[state.i++] = state = { t: 1, d: false, i: 0, c: {} };\n  }\n  if (state.d) {\n    return null;\n  }\n  state.d = true;\n  if (type === 1) {\n    t = hasOwn ? t[k] : t[k] = {};\n  } else if (type === 0 && hasOwn) {\n    return null;\n  }\n  return [k, t, state.c];\n}\n__name(peekTable, \"peekTable\");\nfunction parse3(toml, { maxDepth = 1e3, integersAsBigInt } = {}) {\n  let res = {};\n  let meta = {};\n  let tbl = res;\n  let m = meta;\n  for (let ptr = skipVoid(toml, 0); ptr < toml.length; ) {\n    if (toml[ptr] === \"[\") {\n      let isTableArray = toml[++ptr] === \"[\";\n      let k = parseKey(toml, ptr += +isTableArray, \"]\");\n      if (isTableArray) {\n        if (toml[k[1] - 1] !== \"]\") {\n          throw new TomlError(\"expected end of table declaration\", {\n            toml,\n            ptr: k[1] - 1\n          });\n        }\n        k[1]++;\n      }\n      let p = peekTable(\n        k[0],\n        res,\n        meta,\n        isTableArray ? 2 : 1\n        /* Type.EXPLICIT */\n      );\n      if (!p) {\n        throw new TomlError(\"trying to redefine an already defined table or value\", {\n          toml,\n          ptr\n        });\n      }\n      m = p[2];\n      tbl = p[1];\n      ptr = k[1];\n    } else {\n      let k = parseKey(toml, ptr);\n      let p = peekTable(\n        k[0],\n        tbl,\n        m,\n        0\n        /* Type.DOTTED */\n      );\n      if (!p) {\n        throw new TomlError(\"trying to redefine an already defined table or value\", {\n          toml,\n          ptr\n        });\n      }\n      let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n      p[1][p[0]] = v[0];\n      ptr = v[1];\n    }\n    ptr = skipVoid(toml, ptr, true);\n    if (toml[ptr] && toml[ptr] !== \"\\n\" && toml[ptr] !== \"\\r\") {\n      throw new TomlError(\"each key-value declaration must be followed by an end-of-line\", {\n        toml,\n        ptr\n      });\n    }\n    ptr = skipVoid(toml, ptr);\n  }\n  return res;\n}\n__name(parse3, \"parse\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/stringify.js\nvar BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n  let type = typeof obj;\n  if (type === \"object\") {\n    if (Array.isArray(obj))\n      return \"array\";\n    if (obj instanceof Date)\n      return \"date\";\n  }\n  return type;\n}\n__name(extendedTypeOf, \"extendedTypeOf\");\nfunction isArrayOfTables(obj) {\n  for (let i = 0; i < obj.length; i++) {\n    if (extendedTypeOf(obj[i]) !== \"object\")\n      return false;\n  }\n  return obj.length != 0;\n}\n__name(isArrayOfTables, \"isArrayOfTables\");\nfunction formatString(s) {\n  return JSON.stringify(s).replace(/\\x7f/g, \"\\\\u007f\");\n}\n__name(formatString, \"formatString\");\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n  if (depth === 0) {\n    throw new Error(\"Could not stringify the object: maximum object depth exceeded\");\n  }\n  if (type === \"number\") {\n    if (isNaN(val))\n      return \"nan\";\n    if (val === Infinity)\n      return \"inf\";\n    if (val === -Infinity)\n      return \"-inf\";\n    if (numberAsFloat && Number.isInteger(val))\n      return val.toFixed(1);\n    return val.toString();\n  }\n  if (type === \"bigint\" || type === \"boolean\") {\n    return val.toString();\n  }\n  if (type === \"string\") {\n    return formatString(val);\n  }\n  if (type === \"date\") {\n    if (isNaN(val.getTime())) {\n      throw new TypeError(\"cannot serialize invalid date\");\n    }\n    return val.toISOString();\n  }\n  if (type === \"object\") {\n    return stringifyInlineTable(val, depth, numberAsFloat);\n  }\n  if (type === \"array\") {\n    return stringifyArray(val, depth, numberAsFloat);\n  }\n}\n__name(stringifyValue, \"stringifyValue\");\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n  let keys = Object.keys(obj);\n  if (keys.length === 0)\n    return \"{}\";\n  let res = \"{ \";\n  for (let i = 0; i < keys.length; i++) {\n    let k = keys[i];\n    if (i)\n      res += \", \";\n    res += BARE_KEY.test(k) ? k : formatString(k);\n    res += \" = \";\n    res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n  }\n  return res + \" }\";\n}\n__name(stringifyInlineTable, \"stringifyInlineTable\");\nfunction stringifyArray(array, depth, numberAsFloat) {\n  if (array.length === 0)\n    return \"[]\";\n  let res = \"[ \";\n  for (let i = 0; i < array.length; i++) {\n    if (i)\n      res += \", \";\n    if (array[i] === null || array[i] === void 0) {\n      throw new TypeError(\"arrays cannot contain null or undefined values\");\n    }\n    res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n  }\n  return res + \" ]\";\n}\n__name(stringifyArray, \"stringifyArray\");\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n  if (depth === 0) {\n    throw new Error(\"Could not stringify the object: maximum object depth exceeded\");\n  }\n  let res = \"\";\n  for (let i = 0; i < array.length; i++) {\n    res += `${res && \"\\n\"}[[${key}]]\n`;\n    res += stringifyTable(0, array[i], key, depth, numberAsFloat);\n  }\n  return res;\n}\n__name(stringifyArrayTable, \"stringifyArrayTable\");\nfunction stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) {\n  if (depth === 0) {\n    throw new Error(\"Could not stringify the object: maximum object depth exceeded\");\n  }\n  let preamble = \"\";\n  let tables = \"\";\n  let keys = Object.keys(obj);\n  for (let i = 0; i < keys.length; i++) {\n    let k = keys[i];\n    if (obj[k] !== null && obj[k] !== void 0) {\n      let type = extendedTypeOf(obj[k]);\n      if (type === \"symbol\" || type === \"function\") {\n        throw new TypeError(`cannot serialize values of type '${type}'`);\n      }\n      let key = BARE_KEY.test(k) ? k : formatString(k);\n      if (type === \"array\" && isArrayOfTables(obj[k])) {\n        tables += (tables && \"\\n\") + stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);\n      } else if (type === \"object\") {\n        let tblKey = prefix ? `${prefix}.${key}` : key;\n        tables += (tables && \"\\n\") + stringifyTable(tblKey, obj[k], tblKey, depth - 1, numberAsFloat);\n      } else {\n        preamble += key;\n        preamble += \" = \";\n        preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n        preamble += \"\\n\";\n      }\n    }\n  }\n  if (tableKey && (preamble || !tables))\n    preamble = preamble ? `[${tableKey}]\n${preamble}` : `[${tableKey}]`;\n  return preamble && tables ? `${preamble}\n${tables}` : preamble || tables;\n}\n__name(stringifyTable, \"stringifyTable\");\nfunction stringify(obj, { maxDepth = 1e3, numbersAsFloat = false } = {}) {\n  if (extendedTypeOf(obj) !== \"object\") {\n    throw new TypeError(\"stringify can only be called with an object\");\n  }\n  let str = stringifyTable(0, obj, \"\", maxDepth, numbersAsFloat);\n  if (str[str.length - 1] !== \"\\n\")\n    return str + \"\\n\";\n  return str;\n}\n__name(stringify, \"stringify\");\n\n// ../../node_modules/.pnpm/smol-toml@1.5.2/node_modules/smol-toml/dist/index.js\nvar dist_default = { parse: parse3, stringify, TomlDate, TomlError };\n\n// src/parse.ts\nvar ParseError = class extends UserError {\n  static {\n    __name(this, \"ParseError\");\n  }\n  text;\n  notes;\n  location;\n  kind;\n  constructor({ text, notes, location, kind, telemetryMessage }) {\n    super(text, { telemetryMessage });\n    this.name = this.constructor.name;\n    this.text = text;\n    this.notes = notes ?? [];\n    this.location = location;\n    this.kind = kind ?? \"error\";\n  }\n};\nvar APIError = class extends ParseError {\n  static {\n    __name(this, \"APIError\");\n  }\n  #status;\n  code;\n  accountTag;\n  constructor({ status, ...rest }) {\n    super(rest);\n    this.name = this.constructor.name;\n    this.#status = status;\n  }\n  get status() {\n    return this.#status;\n  }\n  isGatewayError() {\n    if (this.#status !== void 0) {\n      return [524].includes(this.#status);\n    }\n    return false;\n  }\n  isRetryable() {\n    return String(this.#status).startsWith(\"5\");\n  }\n  // Allow `APIError`s to be marked as handled.\n  #reportable = true;\n  get reportable() {\n    return this.#reportable;\n  }\n  preventReport() {\n    this.#reportable = false;\n  }\n};\nfunction parseTOML(tomlContent, filePath) {\n  try {\n    return dist_default.parse(tomlContent);\n  } catch (err) {\n    if (!(err instanceof TomlError)) {\n      throw err;\n    }\n    const location = {\n      lineText: tomlContent.split(\"\\n\")[err.line - 1],\n      line: err.line,\n      column: err.column - 1,\n      file: filePath,\n      fileText: tomlContent\n    };\n    throw new ParseError({\n      text: err.message.substring(0, err.message.indexOf(\"\\n\")),\n      location,\n      telemetryMessage: \"TOML parse error\"\n    });\n  }\n}\n__name(parseTOML, \"parseTOML\");\nfunction parsePackageJSON(input, file2) {\n  return parseJSON(input, file2);\n}\n__name(parsePackageJSON, \"parsePackageJSON\");\nfunction parseJSON(input, file2) {\n  return parseJSONC(input, file2, {\n    allowEmptyContent: false,\n    allowTrailingComma: false,\n    disallowComments: true\n  });\n}\n__name(parseJSON, \"parseJSON\");\nfunction parseJSONC(input, file2, options = { allowTrailingComma: true }) {\n  const errors = [];\n  const data = parse2(input, errors, options);\n  if (errors.length) {\n    throw new ParseError({\n      text: printParseErrorCode(errors[0].error),\n      location: {\n        ...indexLocation({ file: file2, fileText: input }, errors[0].offset + 1),\n        length: errors[0].length\n      },\n      telemetryMessage: \"JSON(C) parse error\"\n    });\n  }\n  return data;\n}\n__name(parseJSONC, \"parseJSONC\");\nfunction readFileSyncToBuffer(file2) {\n  try {\n    return readFileSync$1(file2);\n  } catch (err) {\n    const { message } = err;\n    throw new ParseError({\n      text: `Could not read file: ${file2}`,\n      notes: [\n        {\n          text: message.replace(file2, resolve(file2))\n        }\n      ],\n      telemetryMessage: false\n    });\n  }\n}\n__name(readFileSyncToBuffer, \"readFileSyncToBuffer\");\nfunction readFileSync(file2) {\n  try {\n    const buffer = readFileSync$1(file2);\n    return removeBOMAndValidate(buffer, file2);\n  } catch (err) {\n    if (err instanceof ParseError) {\n      throw err;\n    }\n    const { message } = err;\n    throw new ParseError({\n      text: `Could not read file: ${file2}`,\n      notes: [\n        {\n          text: message.replace(file2, resolve(file2))\n        }\n      ],\n      telemetryMessage: \"Could not read file\"\n    });\n  }\n}\n__name(readFileSync, \"readFileSync\");\nfunction indexLocation(file2, index) {\n  let lineText, line = 0, column = 0, cursor = 0;\n  const { fileText = \"\" } = file2;\n  for (const row of fileText.split(\"\\n\")) {\n    line++;\n    cursor += row.length + 1;\n    if (cursor >= index) {\n      lineText = row;\n      column = row.length - (cursor - index);\n      break;\n    }\n  }\n  return { lineText, line, column, ...file2 };\n}\n__name(indexLocation, \"indexLocation\");\nfunction searchLocation(file2, query) {\n  let lineText, length, line = 0, column = 0;\n  const queryText = String(query);\n  const { fileText = \"\" } = file2;\n  for (const content of fileText.split(\"\\n\")) {\n    line++;\n    const index = content.indexOf(queryText);\n    if (index >= 0) {\n      lineText = content;\n      column = index;\n      length = queryText.length;\n      break;\n    }\n  }\n  return { lineText, line, column, length, ...file2 };\n}\n__name(searchLocation, \"searchLocation\");\nvar units = {\n  nanoseconds: 1e-9,\n  nanosecond: 1e-9,\n  microseconds: 1e-6,\n  microsecond: 1e-6,\n  milliseconds: 1e-3,\n  millisecond: 1e-3,\n  seconds: 1,\n  second: 1,\n  minutes: 60,\n  minute: 60,\n  hours: 3600,\n  hour: 3600,\n  days: 86400,\n  day: 86400,\n  weeks: 604800,\n  week: 604800,\n  month: 18144e3,\n  year: 220752e3,\n  nsecs: 1e-9,\n  nsec: 1e-9,\n  usecs: 1e-6,\n  usec: 1e-6,\n  msecs: 1e-3,\n  msec: 1e-3,\n  secs: 1,\n  sec: 1,\n  mins: 60,\n  min: 60,\n  ns: 1e-9,\n  us: 1e-6,\n  ms: 1e-3,\n  mo: 18144e3,\n  yr: 220752e3,\n  s: 1,\n  m: 60,\n  h: 3600,\n  d: 86400,\n  w: 604800,\n  y: 220752e3\n};\nfunction parseHumanDuration(s) {\n  const unitsMap = new Map(Object.entries(units));\n  s = s.trim().toLowerCase();\n  let base = 1;\n  for (const [name, _] of unitsMap) {\n    if (s.endsWith(name)) {\n      s = s.substring(0, s.length - name.length);\n      base = unitsMap.get(name) || 1;\n      break;\n    }\n  }\n  return Number(s) * base;\n}\n__name(parseHumanDuration, \"parseHumanDuration\");\nfunction parseNonHyphenedUuid(uuid) {\n  if (uuid == null || uuid.includes(\"-\")) {\n    return uuid;\n  }\n  if (uuid.length != 32) {\n    return null;\n  }\n  const uuid_parts = [];\n  uuid_parts.push(uuid.slice(0, 8));\n  uuid_parts.push(uuid.slice(8, 12));\n  uuid_parts.push(uuid.slice(12, 16));\n  uuid_parts.push(uuid.slice(16, 20));\n  uuid_parts.push(uuid.slice(20));\n  let hyphenated = \"\";\n  uuid_parts.forEach((part) => hyphenated += part + \"-\");\n  return hyphenated.slice(0, 36);\n}\n__name(parseNonHyphenedUuid, \"parseNonHyphenedUuid\");\nfunction parseByteSize(s, base = void 0) {\n  const match = s.match(\n    /^(\\d*\\.*\\d*)\\s*([kKmMgGtTpP]{0,1})([i]{0,1}[bB]{0,1})$/\n  );\n  if (!match) {\n    return NaN;\n  }\n  const size = match[1];\n  if (size.length === 0 || isNaN(Number(size))) {\n    return NaN;\n  }\n  const unit = match[2].toLowerCase();\n  const sizeUnits = {\n    k: 1,\n    m: 2,\n    g: 3,\n    t: 4,\n    p: 5\n  };\n  if (unit.length !== 0 && !(unit in sizeUnits)) {\n    return NaN;\n  }\n  const binary = match[3].toLowerCase() == \"ib\";\n  if (binary && unit.length === 0) {\n    return NaN;\n  }\n  const pow = sizeUnits[unit] || 0;\n  return Math.floor(\n    Number(size) * Math.pow(base ?? (binary ? 1024 : 1e3), pow)\n  );\n}\n__name(parseByteSize, \"parseByteSize\");\nvar UNSUPPORTED_BOMS = [\n  {\n    buffer: Buffer.from([0, 0, 254, 255]),\n    encoding: \"UTF-32 BE\"\n  },\n  {\n    buffer: Buffer.from([255, 254, 0, 0]),\n    encoding: \"UTF-32 LE\"\n  },\n  {\n    buffer: Buffer.from([254, 255]),\n    encoding: \"UTF-16 BE\"\n  },\n  {\n    buffer: Buffer.from([255, 254]),\n    encoding: \"UTF-16 LE\"\n  }\n];\nfunction removeBOMAndValidate(buffer, file2) {\n  for (const bom of UNSUPPORTED_BOMS) {\n    if (buffer.length >= bom.buffer.length && buffer.subarray(0, bom.buffer.length).equals(bom.buffer)) {\n      throw new ParseError({\n        text: `Configuration file contains ${bom.encoding} byte order marker`,\n        notes: [\n          {\n            text: `The file \"${file2}\" appears to be encoded as ${bom.encoding}. Please save the file as UTF-8 without BOM.`\n          }\n        ],\n        location: { file: file2, line: 1, column: 0 },\n        telemetryMessage: `${bom.encoding} BOM detected`\n      });\n    }\n  }\n  const content = buffer.toString(\"utf-8\");\n  if (content.charCodeAt(0) === 65279) {\n    return content.slice(1);\n  }\n  return content;\n}\n__name(removeBOMAndValidate, \"removeBOMAndValidate\");\nfunction absolute(input, root) {\n  return isAbsolute(input) ? input : resolve(root || \".\", input);\n}\n__name(absolute, \"absolute\");\n\n// ../../node_modules/.pnpm/empathic@2.0.0/node_modules/empathic/walk.mjs\nfunction up(base, options) {\n  let { last, cwd } = options || {};\n  let tmp = absolute(base, cwd);\n  let root = absolute(last || \"/\", cwd);\n  let prev, arr = [];\n  while (prev !== root) {\n    arr.push(tmp);\n    tmp = dirname(prev = tmp);\n    if (tmp === prev) break;\n  }\n  return arr;\n}\n__name(up, \"up\");\n\n// ../../node_modules/.pnpm/empathic@2.0.0/node_modules/empathic/find.mjs\nfunction file(name, options) {\n  let dir, tmp;\n  let start = options && options.cwd || \"\";\n  for (dir of up(start, options)) {\n    try {\n      tmp = join(dir, name);\n      if (statSync(tmp).isFile()) return tmp;\n    } catch {\n    }\n  }\n}\n__name(file, \"file\");\n\n// ../../node_modules/.pnpm/ts-dedent@2.2.0/node_modules/ts-dedent/esm/index.js\nfunction dedent(templ) {\n  var values = [];\n  for (var _i = 1; _i < arguments.length; _i++) {\n    values[_i - 1] = arguments[_i];\n  }\n  var strings = Array.from(typeof templ === \"string\" ? [templ] : templ);\n  strings[strings.length - 1] = strings[strings.length - 1].replace(/\\r?\\n([\\t ]*)$/, \"\");\n  var indentLengths = strings.reduce(function(arr, str) {\n    var matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n    if (matches) {\n      return arr.concat(matches.map(function(match) {\n        var _a, _b;\n        return (_b = (_a = match.match(/[\\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n      }));\n    }\n    return arr;\n  }, []);\n  if (indentLengths.length) {\n    var pattern_1 = new RegExp(\"\\n[\t ]{\" + Math.min.apply(Math, indentLengths) + \"}\", \"g\");\n    strings = strings.map(function(str) {\n      return str.replace(pattern_1, \"\\n\");\n    });\n  }\n  strings[0] = strings[0].replace(/^\\r?\\n/, \"\");\n  var string = strings[0];\n  values.forEach(function(value, i) {\n    var endentations = string.match(/(?:^|\\n)( *)$/);\n    var endentation = endentations ? endentations[1] : \"\";\n    var indentedValue = value;\n    if (typeof value === \"string\" && value.includes(\"\\n\")) {\n      indentedValue = String(value).split(\"\\n\").map(function(str, i2) {\n        return i2 === 0 ? str : \"\" + endentation + str;\n      }).join(\"\\n\");\n    }\n    string += indentedValue + strings[i + 1];\n  });\n  return string;\n}\n__name(dedent, \"dedent\");\nvar esm_default = dedent;\n\n// src/config/config-helpers.ts\nfunction resolveWranglerConfigPath({\n  config,\n  script\n}, options) {\n  if (config !== void 0) {\n    return {\n      userConfigPath: config,\n      configPath: config,\n      deployConfigPath: void 0,\n      redirected: false\n    };\n  }\n  const leafPath = script !== void 0 ? path.dirname(script) : process.cwd();\n  return findWranglerConfig(leafPath, options);\n}\n__name(resolveWranglerConfigPath, \"resolveWranglerConfigPath\");\nfunction findWranglerConfig(referencePath = process.cwd(), { useRedirectIfAvailable = false } = {}) {\n  const userConfigPath = file(`wrangler.json`, { cwd: referencePath }) ?? file(`wrangler.jsonc`, { cwd: referencePath }) ?? file(`wrangler.toml`, { cwd: referencePath });\n  if (!useRedirectIfAvailable) {\n    return {\n      userConfigPath,\n      configPath: userConfigPath,\n      deployConfigPath: void 0,\n      redirected: false\n    };\n  }\n  const { configPath, deployConfigPath, redirected } = findRedirectedWranglerConfig(referencePath, userConfigPath);\n  return {\n    userConfigPath,\n    configPath,\n    deployConfigPath,\n    redirected\n  };\n}\n__name(findWranglerConfig, \"findWranglerConfig\");\nfunction findRedirectedWranglerConfig(cwd, userConfigPath) {\n  const deployConfigPath = file(PATH_TO_DEPLOY_CONFIG, { cwd });\n  if (deployConfigPath === void 0) {\n    return { configPath: userConfigPath, deployConfigPath, redirected: false };\n  }\n  let redirectedConfigPath;\n  const deployConfigFile = readFileSync(deployConfigPath);\n  try {\n    const deployConfig = parseJSONC(deployConfigFile, deployConfigPath);\n    redirectedConfigPath = deployConfig.configPath && path.resolve(path.dirname(deployConfigPath), deployConfig.configPath);\n  } catch (e) {\n    throw new UserError(\n      `Failed to parse the deploy configuration file at ${path.relative(\".\", deployConfigPath)}`,\n      { cause: e, telemetryMessage: false }\n    );\n  }\n  if (!redirectedConfigPath) {\n    throw new UserError(\n      esm_default`\n\t\t\tA deploy configuration file was found at \"${path.relative(\".\", deployConfigPath)}\".\n\t\t\tBut this is not valid - the required \"configPath\" property was not found.\n\t\t\tInstead this file contains:\n\t\t\t\\`\\`\\`\n\t\t\t${deployConfigFile}\n\t\t\t\\`\\`\\`\n\t\t`,\n      { telemetryMessage: false }\n    );\n  }\n  if (!existsSync(redirectedConfigPath)) {\n    throw new UserError(\n      esm_default`\n\t\t\t\tThere is a deploy configuration at \"${path.relative(\".\", deployConfigPath)}\".\n\t\t\t\tBut the redirected configuration path it points to, \"${path.relative(\".\", redirectedConfigPath)}\", does not exist.\n\t\t\t`,\n      { telemetryMessage: false }\n    );\n  }\n  if (userConfigPath) {\n    if (path.join(path.dirname(userConfigPath), PATH_TO_DEPLOY_CONFIG) !== deployConfigPath) {\n      throw new UserError(\n        esm_default`\n\t\t\t\t\tFound both a user configuration file at \"${path.relative(\".\", userConfigPath)}\"\n\t\t\t\t\tand a deploy configuration file at \"${path.relative(\".\", deployConfigPath)}\".\n\t\t\t\t\tBut these do not share the same base path so it is not clear which should be used.\n\t\t\t\t`,\n        { telemetryMessage: false }\n      );\n    }\n  }\n  return {\n    configPath: redirectedConfigPath,\n    deployConfigPath,\n    redirected: true\n  };\n}\n__name(findRedirectedWranglerConfig, \"findRedirectedWranglerConfig\");\nfunction isRedirectedRawConfig(rawConfig, configPath, userConfigPath) {\n  return configPath !== void 0 && configPath !== userConfigPath;\n}\n__name(isRedirectedRawConfig, \"isRedirectedRawConfig\");\n\n// src/config/index.ts\nfunction configFormat(configPath) {\n  if (configPath?.endsWith(\"toml\")) {\n    return \"toml\";\n  }\n  if (configPath?.endsWith(\"jsonc\")) {\n    return \"jsonc\";\n  }\n  if (configPath?.endsWith(\"json\")) {\n    return \"json\";\n  }\n  return \"none\";\n}\n__name(configFormat, \"configFormat\");\nfunction configFileName(configPath) {\n  const format3 = configFormat(configPath);\n  switch (format3) {\n    case \"toml\":\n      return \"wrangler.toml\";\n    case \"json\":\n      return \"wrangler.json\";\n    case \"jsonc\":\n      return \"wrangler.jsonc\";\n    default:\n      return \"Wrangler configuration\";\n  }\n}\n__name(configFileName, \"configFileName\");\nfunction formatConfigSnippet(snippet, configPath, formatted = true) {\n  const format3 = configFormat(configPath);\n  if (format3 === \"toml\") {\n    return dist_default.stringify(snippet);\n  } else {\n    return formatted ? JSON.stringify(snippet, null, 2) : JSON.stringify(snippet);\n  }\n}\n__name(formatConfigSnippet, \"formatConfigSnippet\");\nvar parseRawConfigFile = /* @__PURE__ */ __name((configPath) => {\n  if (configPath.endsWith(\".toml\")) {\n    return parseTOML(readFileSync(configPath), configPath);\n  }\n  if (configPath.endsWith(\".json\") || configPath.endsWith(\".jsonc\")) {\n    return parseJSONC(readFileSync(configPath), configPath);\n  }\n  return {};\n}, \"parseRawConfigFile\");\nvar experimental_readRawConfig = /* @__PURE__ */ __name((args, options = {}) => {\n  const { configPath, userConfigPath, deployConfigPath, redirected } = resolveWranglerConfigPath(args, options);\n  const rawConfig = parseRawConfigFile(configPath ?? \"\");\n  return {\n    rawConfig,\n    configPath,\n    userConfigPath,\n    deployConfigPath,\n    redirected\n  };\n}, \"experimental_readRawConfig\");\nfunction isDirectory(path2) {\n  return fs.statSync(path2, { throwIfNoEntry: false })?.isDirectory() ?? false;\n}\n__name(isDirectory, \"isDirectory\");\nfunction removeDir(dirPath, { fireAndForget = false } = {}) {\n  const result = fs.promises.rm(dirPath, {\n    recursive: true,\n    force: true,\n    maxRetries: 5,\n    retryDelay: 100\n  });\n  if (fireAndForget) {\n    void result.catch(() => {\n    });\n  } else {\n    return result;\n  }\n}\n__name(removeDir, \"removeDir\");\nfunction removeDirSync(dirPath) {\n  fs.rmSync(dirPath, {\n    recursive: true,\n    force: true,\n    maxRetries: 5,\n    retryDelay: 100\n  });\n}\n__name(removeDirSync, \"removeDirSync\");\n/*! Bundled license information:\n\nsmol-toml/dist/error.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/util.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/date.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/primitive.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/extract.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/struct.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/parse.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/stringify.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n\nsmol-toml/dist/index.js:\n  (*!\n   * Copyright (c) Squirrel Chat et al., All rights reserved.\n   * SPDX-License-Identifier: BSD-3-Clause\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions are met:\n   *\n   * 1. Redistributions of source code must retain the above copyright notice, this\n   *    list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright notice,\n   *    this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   * 3. Neither the name of the copyright holder nor the names of its contributors\n   *    may be used to endorse or promote products derived from this software without\n   *    specific prior written permission.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *)\n*/\n\nexport { APIError, CommandLineArgsError, DeprecationError, FatalError, JsonFriendlyFatalError, MissingConfigError, ParseError, UserError, applyEdits, configFileName, configFormat, createFatalError, dedent, dist_default, experimental_readRawConfig, findWranglerConfig, format2 as format, formatConfigSnippet, indexLocation, isDirectory, isRedirectedRawConfig, modify, parseByteSize, parseHumanDuration, parseJSON, parseJSONC, parseNonHyphenedUuid, parsePackageJSON, parseTOML, readFileSync, readFileSyncToBuffer, removeDir, removeDirSync, resolveWranglerConfigPath, searchLocation };\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 — 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 !== undefined) {\n      if (!Object.hasOwn(obj, key)) {\n        const headersValue = typeof headers[i + 1] === 'string'\n          ? headers[i + 1]\n          : Array.isArray(headers[i + 1])\n            ? headers[i + 1].map(x => x.toString('latin1'))\n            : headers[i + 1].toString('latin1')\n\n        if (key === '__proto__') {\n          Object.defineProperty(obj, key, {\n            value: headersValue,\n            enumerable: true,\n            configurable: true,\n            writable: true\n          })\n        } else {\n          obj[key] = headersValue\n        }\n      } else {\n        if (typeof val === 'string') {\n          val = [val]\n          obj[key] = val\n        }\n        val.push(headers[i + 1].toString('latin1'))\n      }\n    } else {\n      const headersValue = typeof headers[i + 1] === 'string'\n        ? headers[i + 1]\n        : Array.isArray(headers[i + 1])\n          ? headers[i + 1].map(x => x.toString('latin1'))\n          : headers[i + 1].toString('latin1')\n\n      obj[key] = headersValue\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      if (evt.address != null) {\n        const { address, port } = evt.address\n        debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n      } else {\n        debugLog('connection opened')\n      }\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    // Per RFC 7230 Section 6.1, Connection header can contain\n    // a comma-separated list of connection option tokens (header names)\n    const value = typeof val === 'string' ? val : null\n    if (value === null) {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    for (const token of value.toLowerCase().split(',')) {\n      const trimmed = token.trim()\n      if (!isValidHTTPToken(trimmed)) {\n        throw new InvalidArgumentError('invalid connection header')\n      }\n      if (trimmed === 'close') {\n        request.reset = true\n      }\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/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+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’s\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’t 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’s 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’s 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’s length and whose code points have the same values\n  //    as the values of input’s 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’s code\n  //    point length and whose bytes have the same values as the\n  //    values of input’s 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, « value »).\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’s 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’s parameters[parameterName] does not exist\n    // then set mimeType’s 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’s\n  //    type, U+002F (/), and mimeType’s subtype.\n  let serialization = essence\n\n  // 2. For each name → value of mimeType’s 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’s 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’s 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 − 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 −2^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 − 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^bitLength − 1.\n    lowerBound = Math.pow(-2, bitLength) - 1\n\n    // 2. Let upperBound be 2^bitLength − 1 − 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 −0, 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, +∞, or −∞, 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 −0.\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, +∞, or −∞, 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 ≥ 2^bitLength − 1,\n  //    then return x − 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 × 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 − 1, inclusive,\n  //    set bytes[i − 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’s 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’s URL list and null if response’s 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’s 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’s 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’s 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’s\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’s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url’s scheme is an HTTP(S) scheme and url’s 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’s 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’s 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 § 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’s 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’s 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’s value to r’s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r’s 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’s response tainting is \"cors\" or request’s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request’s header list.\n  // 3. Otherwise, if request’s 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’s 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’s origin is a tuple origin, its scheme is \"https\", and\n        // request’s current URL’s 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’s origin is not same origin with request’s current URL’s\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’s 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’s 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’s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request’s 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’s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request’s 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’s\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’s 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’s\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’s 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’s 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’s\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’s 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’s 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’s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url’s username to the empty string.\n  url.username = ''\n\n  // 4. Set url’s password to the empty string.\n  url.password = ''\n\n  // 5. Set url’s 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’s path to « the empty string ».\n    url.pathname = ''\n\n    // 2. Set url’s 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’s 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’s 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’s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin’s 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’s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin’s 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’s 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 § 3.1 Is origin potentially trustworthy?\n  // on url’s 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’s index.\n      // 7. Let kind be object’s kind.\n      // 8. Let values be object’s 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’s 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’s 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’s 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’s key.\n          // 2. Let idlValue be pair’s 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’s 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’s 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’s parameters[\"charset\"] exists, then set charset to\n      //        mimeType’s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType’s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType’s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType’s 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  // Returns true only if we have an actual traversable navigable object\n  // that can prompt the user for credentials. In Node.js, this will always\n  // be false since there's no Window object or navigable.\n  return navigable != null && navigable !== 'client' && navigable !== 'no-traversable'\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’s 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’s 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’s 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’s 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’s 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’s 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’s 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’s 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’s 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')\n\nconst dd = Buffer.from('--')\nconst decoder = new TextDecoder()\nconst decoderIgnoreBOM = new TextDecoder('utf-8', { ignoreBOM: true })\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’s 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’s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType’s\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 = decoderIgnoreBOM.decode(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’s 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’s 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ärting <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’s 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’s size.\n    length = object.size\n\n    // If object’s 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’s 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 « out1, out2 » be the result of teeing body’s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body’s 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’s\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’s 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’s 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’s 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’s body given successSteps,\n  //    errorSteps, and object’s 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’s 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’s request’s header list.\n  // 3. Otherwise, set headers to requestOrResponse’s response’s 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    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\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  try {\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  } catch (err) {\n    handleConnectError(client, err, { host, hostname, protocol, port })\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 util = 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] = { ...util.deepClone(opts) }\n    this[kOptions].interceptors = opts.interceptors\n      ? { ...opts.interceptors }\n      : undefined\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 = util.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, 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 = util.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 = util.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  kTotalDispatchCount: Symbol('total dispatch count')\n}\n","'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect,\n  kTotalDispatchCount\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  // Track total number of intercepts ever registered for better error messages\n  mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1\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          const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length\n          const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length\n          const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`\n          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)\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)${interceptsMessage}`)\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 ? '✅' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '❌' : 'N '\n\n/**\n * Gets the output of `console.table(…)` 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, this.#cacheKey.headers)) {\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 * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {\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 (reqHeaders?.authorization) {\n    if (\n      !cacheControlDirectives.public &&\n      !cacheControlDirectives['s-maxage'] &&\n      !cacheControlDirectives['must-revalidate']\n    ) {\n      return false\n    }\n\n    if (typeof reqHeaders.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 (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = now + 31536000000\n  }\n\n  // When no stale directives or immutable flag, add a revalidation buffer\n  // equal to the freshness lifetime so the entry survives past staleAt long\n  // enough to be revalidated instead of silently disappearing.\n  if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {\n    const freshnessLifetime = staleAt - now\n    return staleAt + freshnessLifetime\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’s first item, header’s 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 → 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’s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers’s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers’s 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’s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers’s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers’s 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’s 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’s 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’s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this’s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this’s 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’s 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’s 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’s header list.\n    // 8. If this’s 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’s 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’s 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’s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this’s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this’s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this’s 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’s header list.\n    // 8. If this’s 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’s header list does not contain `Set-Cookie`, then return « ».\n    // 2. Return the values of all headers in this’s 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’s\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’s 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’s 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’s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject’s response’s 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’s response’s 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’s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this’s headers to a new Headers object with this’s relevant\n    // Realm, whose header list is this’s response’s 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’s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this’s response’s type.\n    return this.#state.type\n  }\n\n  // Returns response’s 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’s\n    // response’s URL is null; otherwise this’s response’s 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’s response’s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response’s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this’s response’s status.\n    return this.#state.status\n  }\n\n  // Returns whether response’s 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’s response’s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response’s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this’s response’s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response’s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this’s 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’s 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’s headers’s guard, and this’s 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’s\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’s body is non-null, then set newResponse’s body to the\n  // result of cloning response’s 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’s 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’s 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’s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response’s 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’s response’s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response’s response’s 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’s 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’s relevant settings object’s 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’s request.\n      request = input.#state\n\n      // 9. Set signal to input’s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this’s relevant settings object’s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request’s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request’s 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’s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request’s method.\n      method: request.method,\n      // header list A copy of request’s 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’s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request’s priority.\n      priority: request.priority,\n      // origin request’s 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’s referrer.\n      referrer: request.referrer,\n      // referrer policy request’s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request’s mode.\n      mode: request.mode,\n      // credentials mode request’s credentials mode.\n      credentials: request.credentials,\n      // cache mode request’s cache mode.\n      cache: request.cache,\n      // redirect mode request’s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request’s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request’s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request’s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request’s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request’s 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’s 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’s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request’s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request’s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request’s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request’s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request’s URL to request’s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request’s URL list to « request’s URL ».\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’s 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’s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer’s origin is not same origin with origin\n        // then set request’s 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’s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request’s 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’s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request’s 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’s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request’s cache mode is \"only-if-cached\" and request’s 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’s 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’s 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’s 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’s 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’s request to request.\n    this.#state = request\n\n    // 28. Set this’s signal to a new AbortSignal object with this’s 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’s 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’s headers to a new Headers object with this’s relevant\n    // Realm, whose header list is request’s 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’s request’s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this’s request’s 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’s headers’s 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’s 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’s headers’s 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’s name/header’s value to this’s 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’s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input’s request’s 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’s 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’s 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’s headers’s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this’s 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’s 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’s request’s 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’s request’s 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’s request’s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request’s 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’s request’s 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’s request’s 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’s 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’s request’s 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’s 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’s request’s 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’s request’s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this’s request’s 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’s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this’s request’s 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’s request’s 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’s request’s 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’s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this’s request’s 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’s request’s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request’s 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’s request’s 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’s request’s 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’s\n    // request’s 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’s request’s\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’s 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’s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this’s headers’s guard, and this’s relevant Realm.\n    // 4. Make clonedRequestObject’s signal follow this’s 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’s body is non-null, set newRequest’s body to the\n  // result of cloning request’s 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 « \"sha256\",\n * \"sha384\", \"sha512\" » (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 « item ».\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    // «[\"alg\" → algorithm, \"val\" → base64-value]».\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’s 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’s 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’s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject’s signal’s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject’s signal’s 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’s client’s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request’s 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’s 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’s 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’s signal’s 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’s signal’s 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’s 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’s 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’s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response’s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response’s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response’s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL’s 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’s 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’s end time to the coarsened shared current time\n  // given global’s relevant settings object’s cross-origin isolated\n  // capability.\n  // TODO: given global’s relevant settings object’s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response’s 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’s body is not null and is readable, then cancel request’s\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’s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response’s body is not null and is readable, then error response’s\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’s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request’s client’s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request’s client’s 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’s body is a byte sequence, then set request’s body to\n  //    request’s 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’s window is \"client\", then set request’s window to request’s\n  // client, if request’s client’s 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’s origin is \"client\", then set request’s origin to request’s\n  // client’s 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’s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request’s client is non-null, then set request’s policy\n    // container to a clone of request’s client’s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request’s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request’s 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’s 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’s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request’s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request’s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request’s priority is null, then use request’s initiator and\n  // destination appropriately in setting request’s 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’s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request’s local-URLs-only flag is set and request’s 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’s referrer policy is the empty string, then set request’s\n    // referrer policy to request’s policy container’s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request’s referrer is not \"no-referrer\", then set request’s\n    // referrer to the result of invoking determine request’s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request’s current URL’s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request’s current URL’s scheme is \"http\"\n    // - request’s current URL’s host is a domain\n    // - Matching request’s current URL’s 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’s current URL’s origin is same origin with request’s origin,\n        //   and request’s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request’s current URL’s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request’s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request’s 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’s 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’s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request’s 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’s 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’s current URL’s 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’s use-CORS-preflight flag is set\n        // - request’s unsafe-request flag is set and either request’s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request’s header list is not empty\n        //    1. Set request’s 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’s 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’s 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’s header list.\n        // TODO\n        // 2. If request’s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response’s CORS-exposed header-name list to\n        // all unique header names in response’s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response’s 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’s 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’s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse’s URL list is empty, then set it to a clone of\n    // request’s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request’s timing allow failed flag is unset, then set\n    // internalResponse’s 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’s type is \"opaque\", internalResponse’s status is 206,\n    // internalResponse’s range-requested flag is set, and request’s 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’s method is\n    // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status,\n    // set internalResponse’s 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’s 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’s response tainting is \"opaque\", or response’s 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’s 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’s 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’s 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’s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request’s current URL’s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request’s current URL’s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) »,\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’s current URL’s 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’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s\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’s 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’s 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’s type.\n      const type = blob.type\n\n      // 8. If request’s 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’s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response’s body to bodyWithType’s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response’s header list to « (`Content-Length`, serializedFullLength), (`Content-Type`, type) ».\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response’s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request’s 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 − rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd − 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 − 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’s body to slicedBodyWithType’s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob’s 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’s status to 206.\n        response.status = 206\n\n        // 14. Set response’s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response’s header list to « (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) ».\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’s 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’s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is « (`Content-Type`, mimeType) »,\n      //    and body is dataURLStruct’s 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’s request’s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams’s process response done is not null, then queue a fetch\n  // task to run fetchParams’s process response done given response, with\n  // fetchParams’s 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’s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams’s request’s client is a secure context,\n  //    then set timingInfo’s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response’s internal response’s 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’s request’s destination is \"document\", then set fetchParams’s controller’s\n    //    full timing info to fetchParams’s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams’s controller’s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams’s request’s URL’s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo’s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response’s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response’s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response’s 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’s request’s mode is not \"navigate\" or response’s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response’s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response’s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo’s 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’s request’s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams’s request’s URL, fetchParams’s request’s 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’s request’s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams’s process response end-of-body is non-null, then run fetchParams’s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams’s request’s initiator type is non-null and fetchParams’s request’s client’s\n      //    global object is fetchParams’s task destination, then run fetchParams’s controller’s report\n      //    timing steps given fetchParams’s request’s client’s 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’s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams’s process response is non-null, then queue a fetch task to run fetchParams’s\n  //    process response given response, with fetchParams’s 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’s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse’s 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’s body’s stream to the result of internalResponse’s body’s 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’s 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’s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request’s 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’s redirect mode is \"follow\", then set request’s\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’s 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’s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request’s response tainting or response’s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request’s origin, request’s client, request’s 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’s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse’s status is not 303, request’s 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’s 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’s 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’s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response’s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse’s location URL given request’s current\n  // URL’s 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’s 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’s 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’s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request’s mode is \"cors\", locationURL includes credentials, and\n  // request’s origin is not same origin with locationURL’s 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’s 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’s status is not 303, request’s body is non-null,\n  // and request’s body’s 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’s status is 301 or 302 and request’s method is `POST`\n  // - actualResponse’s status is 303 and request’s 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’s method to `GET` and request’s 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’s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request’s current URL’s origin is not same origin with locationURL’s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request’s 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’s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo’s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams’s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s\n  //  redirect start time to timingInfo’s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request’s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request’s 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’s 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’s window is \"no-window\" and request’s 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’s 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’s body’s length, if httpRequest’s\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’s body is null and httpRequest’s 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’s 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’s header list.\n\n  //    10. If contentLength is non-null and httpRequest’s 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’s referrer is a URL, then append\n  //    `Referer`/httpRequest’s referrer, serialized and isomorphic encoded,\n  //     to httpRequest’s 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’s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest’s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest’s cache mode is \"default\" and httpRequest’s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest’s 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’s cache mode is \"no-cache\", httpRequest’s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest’s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest’s 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’s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest’s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest’s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest’s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest’s 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’s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest’s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest’s header list per HTTP. Do not append a given\n  //    header if httpRequest’s header list contains that header’s 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’s 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’s an authentication entry for httpRequest and either\n      //    httpRequest’s use-URL-credentials flag is unset or httpRequest’s\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’s current URL does include credentials\n        //    and isAuthenticationFetch is true, set authorizationValue to\n        //    httpRequest’s 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’s header list.\n      if (authorizationValue !== null) {\n        httpRequest.headersList.append('Authorization', authorizationValue, false)\n      }\n    }\n  }\n\n  //    21. If there’s 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’s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest’s 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’s 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’s method is unsafe and forwardResponse’s 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’s 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’s URL list to a clone of httpRequest’s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest’s header list contains `Range`, then set response’s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response’s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response’s status is 401, httpRequest’s response tainting is not \"cors\",\n  //     includeCredentials is true, and request’s traversable for user prompts is\n  //     a traversable navigable:\n  //\n  //     In Node.js there is no traversable navigable to prompt the user, but we\n  //     still need to handle URL-embedded credentials so authentication retries\n  //     for WebSocket handshakes continue to work.\n  if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && (\n    request.useURLCredentials !== undefined ||\n    isTraversableNavigable(request.traversableForUserPrompts)\n  )) {\n    // 2. If request’s body is non-null, then:\n    if (request.body != null) {\n      // 1. If request’s body’s source is null, then return a network error.\n      if (request.body.source == null) {\n        // Note: In Node.js, this code path should not be reached because\n        // isTraversableNavigable() returns false for non-navigable contexts.\n        // However, we handle it gracefully by returning the response instead of\n        // a network error, as we won't actually retry the request.\n        // This aligns with the Fetch spec discussion in whatwg/fetch#1132,\n        // which allows implementations flexibility when credentials can't be obtained.\n        return response\n      }\n\n      // 2. Set request’s body to the body of the result of safely extracting\n      //    request’s body’s source.\n      request.body = safelyExtractBody(request.body.source)[0]\n    }\n\n    // 3. If request’s 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’s traversable for user prompts.\n      // TODO\n\n      // 3. Set the username given request’s current URL and username.\n      // requestCurrentURL(request).username = TODO\n\n      // 4. Set the password given request’s 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’s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request’s 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’s 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’s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request’s body is null, or request’s body is non-null and request’s body’s 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’s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams’s 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’s 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’s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request’s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request’s current URL’s 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’s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection’s\n  //    timing info, timingInfo’s post-redirect start time, and fetchParams’s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request’s body is non-null,\n  //    and request’s body’s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request’s header list.\n\n  //    4. Set timingInfo’s final network-request start time to the coarsened\n  //    shared current time given fetchParams’s 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’s body is non-null, and request’s body’s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request’s body in that buffer. If the user agent reads from\n  //        request’s body beyond that buffer’s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo’s final network-response start time to the coarsened\n  //        shared current time given fetchParams’s cross-origin isolated capability,\n  //        immediately after the user agent’s 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’s final network-response start time above.\n\n  //    - If request’s 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’s window is an environment settings object, make the\n  //        dialog available in request’s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request’s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams’s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams’s process request\n  // end-of-body and fetchParams’s 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’s process request body is non-null, then run\n      // fetchParams’s process request body given bytes’s 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’s process request end-of-body is non-null,\n      // then run fetchParams’s 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’s 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’s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams’s 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’s\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’s 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’s 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’s header list, if any, and request’s 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’s 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’s decoded body size by bytes’s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams’s 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’t 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’s 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’s\n      //    controller’s 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    const path = url.pathname + url.search\n    const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?'\n\n    return new Promise((resolve, reject) => agent.dispatch(\n      {\n        path: hasTrailingQuestionMark ? `${path}?` : path,\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’s final connection timing info to the result of calling clamp and coarsen\n          // connection timing info with connection’s timing info, timingInfo’s post-redirect start\n          // time, and fetchParams’s 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’s final network-request start time to the coarsened shared current time given\n          // fetchParams’s cross-origin isolated capability.\n          timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onResponseStarted () {\n          // Set timingInfo’s final network-response start time to the coarsened shared current\n          // time given fetchParams’s cross-origin isolated capability, immediately after the\n          // user agent’s 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            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), true)\n            }\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’s\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’s header list.\n          //  See pullAlgorithm.\n\n          //  3. Increase timingInfo’s encoded body size by bytes’s 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            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), 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    ))\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’s 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 ’s scheme is \" http \", then set urlRecord ’s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord ’s scheme is \" https \", set urlRecord ’s 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 ’s 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 ’s 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’s\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’s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request’s 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’s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s\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’s 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’s 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’s\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’s 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’s 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’s 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 {boolean} */\n  #aborted = false\n\n  /** @type {Function|null} */\n  #currentCallback = null\n\n  /**\n   * @param {Map<string, string>} extensions\n   */\n  constructor (extensions) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\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] > kDefaultMaxDecompressedSize) {\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  /**\n   * @param {import('./websocket').Handler} handler\n   * @param {Map<string, string>|null} extensions\n   */\n  constructor (handler, extensions) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions))\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\nfunction getSocketAddress (socket) {\n  if (typeof socket?.address === 'function') {\n    return socket.address()\n  }\n\n  if (typeof socket?.session?.socket?.address === 'function') {\n    return socket.session.socket.address()\n  }\n\n  return null\n}\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\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    // 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’s 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’s 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)\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’s 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’s 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: getSocketAddress(response.socket),\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’s 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\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 ’s 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 ’s 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 ’s 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 ’s 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 ’s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream ’s 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 ’s readable stream to readable .\n    this.#readableStream = readable\n\n    // Set stream ’s writable stream to writable .\n    this.#writableStream = writable\n\n    // Resolve stream ’s opened promise with WebSocketOpenInfo «[ \" extensions \" → extensions , \" protocol \" → protocol , \" readable \" → readable , \" writable \" → writable ]».\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’s 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’s 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 ’s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream ’s was ever connected is false, then reject stream ’s 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 ’s readable stream .\n      this.#readableStreamController.close()\n\n      // 6.2. Error stream ’s 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 ’s closed promise with WebSocketCloseInfo «[ \" closeCode \" → code , \" reason \" → reason ]».\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 ’s readable stream with error .\n      this.#readableStreamController?.error(error)\n\n      // 7.3. Error stream ’s writable stream with error .\n      this.#writableStream?.abort(error)\n\n      // 7.4. Reject stream ’s 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 ’s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason ’s 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","export { assertNever, constructWranglerConfig, getTodaysCompatDate, isCompatDate, mapWorkerMetadataBindings } from './chunk-BLWXWFJK.mjs';\nexport { MetricsRegistry } from './chunk-O4YGOZSW.mjs';\nimport { isDirectory, UserError, isRedirectedRawConfig, dedent, configFileName, formatConfigSnippet, FatalError, removeDirSync, readFileSync, parseTOML, modify, applyEdits, format, dist_default, parseJSONC } from './chunk-XXCQEG76.mjs';\nexport { APIError, CommandLineArgsError, DeprecationError, FatalError, JsonFriendlyFatalError, MissingConfigError, ParseError, UserError, configFileName, configFormat, createFatalError, experimental_readRawConfig, findWranglerConfig, formatConfigSnippet, indexLocation, isDirectory, parseByteSize, parseHumanDuration, parseJSON, parseJSONC, parseNonHyphenedUuid, parsePackageJSON, parseTOML, readFileSync, readFileSyncToBuffer, removeDir, removeDirSync, resolveWranglerConfigPath, searchLocation } from './chunk-XXCQEG76.mjs';\nexport { ENVIRONMENT_TAG_PREFIX, INHERIT_SYMBOL, JSON_CONFIG_FORMATS, PATH_TO_DEPLOY_CONFIG, SERVICE_TAG_PREFIX } from './chunk-OZQVB3L3.mjs';\nimport { __commonJS, __name, __require, __export, __toESM, __reExport } from './chunk-DCOBXSFB.mjs';\nimport fs, { accessSync, constants, writeFileSync, renameSync, existsSync, unlinkSync, mkdirSync, chmodSync } from 'node:fs';\nimport assert from 'node:assert';\nimport path3, { join, dirname } from 'node:path';\nimport os, { arch } from 'node:os';\nimport { execFileSync, spawn } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport { fetch } from 'undici';\n\n// ../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/lib/XDGAppPaths.js\nvar require_XDGAppPaths = __commonJS({\n  \"../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/lib/XDGAppPaths.js\"(exports) {\n    exports.__esModule = true;\n    exports.Adapt = void 0;\n    function isBoolean2(t2) {\n      return typeOf(t2) === \"boolean\";\n    }\n    __name(isBoolean2, \"isBoolean\");\n    function isObject(t2) {\n      return typeOf(t2) === \"object\";\n    }\n    __name(isObject, \"isObject\");\n    function isString2(t2) {\n      return typeOf(t2) === \"string\";\n    }\n    __name(isString2, \"isString\");\n    function typeOf(t2) {\n      return typeof t2;\n    }\n    __name(typeOf, \"typeOf\");\n    function Adapt(adapter_) {\n      var meta = adapter_.meta, path4 = adapter_.path, xdg = adapter_.xdg;\n      var XDGAppPaths_ = /* @__PURE__ */ function() {\n        function XDGAppPaths_2(options_) {\n          if (options_ === void 0) {\n            options_ = {};\n          }\n          var _a, _b, _c;\n          function XDGAppPaths(options2) {\n            if (options2 === void 0) {\n              options2 = {};\n            }\n            return new XDGAppPaths_2(options2);\n          }\n          __name(XDGAppPaths, \"XDGAppPaths\");\n          var options = isObject(options_) ? options_ : { name: options_ };\n          var suffix = (_a = options.suffix) !== null && _a !== void 0 ? _a : \"\";\n          var isolated_ = (_b = options.isolated) !== null && _b !== void 0 ? _b : true;\n          var namePriorityList = [\n            options.name,\n            meta.pkgMainFilename(),\n            meta.mainFilename()\n          ];\n          var nameFallback = \"$eval\";\n          var name = path4.parse(((_c = namePriorityList.find(function(e2) {\n            return isString2(e2);\n          })) !== null && _c !== void 0 ? _c : nameFallback) + suffix).name;\n          XDGAppPaths.$name = /* @__PURE__ */ __name(function $name() {\n            return name;\n          }, \"$name\");\n          XDGAppPaths.$isolated = /* @__PURE__ */ __name(function $isolated() {\n            return isolated_;\n          }, \"$isolated\");\n          function isIsolated(dirOptions) {\n            var _a2;\n            dirOptions = dirOptions !== null && dirOptions !== void 0 ? dirOptions : { isolated: isolated_ };\n            var isolated = isBoolean2(dirOptions) ? dirOptions : (_a2 = dirOptions.isolated) !== null && _a2 !== void 0 ? _a2 : isolated_;\n            return isolated;\n          }\n          __name(isIsolated, \"isIsolated\");\n          function finalPathSegment(dirOptions) {\n            return isIsolated(dirOptions) ? name : \"\";\n          }\n          __name(finalPathSegment, \"finalPathSegment\");\n          XDGAppPaths.cache = /* @__PURE__ */ __name(function cache(dirOptions) {\n            return path4.join(xdg.cache(), finalPathSegment(dirOptions));\n          }, \"cache\");\n          XDGAppPaths.config = /* @__PURE__ */ __name(function config(dirOptions) {\n            return path4.join(xdg.config(), finalPathSegment(dirOptions));\n          }, \"config\");\n          XDGAppPaths.data = /* @__PURE__ */ __name(function data(dirOptions) {\n            return path4.join(xdg.data(), finalPathSegment(dirOptions));\n          }, \"data\");\n          XDGAppPaths.runtime = /* @__PURE__ */ __name(function runtime(dirOptions) {\n            return xdg.runtime() ? path4.join(xdg.runtime(), finalPathSegment(dirOptions)) : void 0;\n          }, \"runtime\");\n          XDGAppPaths.state = /* @__PURE__ */ __name(function state(dirOptions) {\n            return path4.join(xdg.state(), finalPathSegment(dirOptions));\n          }, \"state\");\n          XDGAppPaths.configDirs = /* @__PURE__ */ __name(function configDirs(dirOptions) {\n            return xdg.configDirs().map(function(s) {\n              return path4.join(s, finalPathSegment(dirOptions));\n            });\n          }, \"configDirs\");\n          XDGAppPaths.dataDirs = /* @__PURE__ */ __name(function dataDirs(dirOptions) {\n            return xdg.dataDirs().map(function(s) {\n              return path4.join(s, finalPathSegment(dirOptions));\n            });\n          }, \"dataDirs\");\n          return XDGAppPaths;\n        }\n        __name(XDGAppPaths_2, \"XDGAppPaths_\");\n        return XDGAppPaths_2;\n      }();\n      return { XDGAppPaths: new XDGAppPaths_() };\n    }\n    __name(Adapt, \"Adapt\");\n    exports.Adapt = Adapt;\n  }\n});\n\n// ../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/lib/XDG.js\nvar require_XDG = __commonJS({\n  \"../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/lib/XDG.js\"(exports) {\n    var __spreadArray = exports && exports.__spreadArray || function(to, from) {\n      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n      return to;\n    };\n    exports.__esModule = true;\n    exports.Adapt = void 0;\n    function Adapt(adapter_) {\n      var env = adapter_.env, osPaths = adapter_.osPaths, path4 = adapter_.path;\n      var isMacOS = /^darwin$/i.test(adapter_.process.platform);\n      var isWinOS = /^win/i.test(adapter_.process.platform);\n      function baseDir() {\n        return osPaths.home() || osPaths.temp();\n      }\n      __name(baseDir, \"baseDir\");\n      function valOrPath(val, pathSegments) {\n        return val || path4.join.apply(path4, pathSegments);\n      }\n      __name(valOrPath, \"valOrPath\");\n      var linux = /* @__PURE__ */ __name(function() {\n        var cache = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CACHE_HOME\"), [baseDir(), \".cache\"]);\n        }, \"cache\");\n        var config = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CONFIG_HOME\"), [baseDir(), \".config\"]);\n        }, \"config\");\n        var data = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_DATA_HOME\"), [baseDir(), \".local\", \"share\"]);\n        }, \"data\");\n        var runtime = /* @__PURE__ */ __name(function() {\n          return env.get(\"XDG_RUNTIME_DIR\") || void 0;\n        }, \"runtime\");\n        var state = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_STATE_HOME\"), [baseDir(), \".local\", \"state\"]);\n        }, \"state\");\n        return { cache, config, data, runtime, state };\n      }, \"linux\");\n      var macos = /* @__PURE__ */ __name(function() {\n        var cache = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CACHE_HOME\"), [baseDir(), \"Library\", \"Caches\"]);\n        }, \"cache\");\n        var config = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CONFIG_HOME\"), [baseDir(), \"Library\", \"Preferences\"]);\n        }, \"config\");\n        var data = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_DATA_HOME\"), [baseDir(), \"Library\", \"Application Support\"]);\n        }, \"data\");\n        var runtime = /* @__PURE__ */ __name(function() {\n          return env.get(\"XDG_RUNTIME_DIR\") || void 0;\n        }, \"runtime\");\n        var state = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_STATE_HOME\"), [baseDir(), \"Library\", \"State\"]);\n        }, \"state\");\n        return { cache, config, data, runtime, state };\n      }, \"macos\");\n      var windows = /* @__PURE__ */ __name(function() {\n        function appData() {\n          return valOrPath(env.get(\"APPDATA\"), [baseDir(), \"AppData\", \"Roaming\"]);\n        }\n        __name(appData, \"appData\");\n        function localAppData() {\n          return valOrPath(env.get(\"LOCALAPPDATA\"), [baseDir(), \"AppData\", \"Local\"]);\n        }\n        __name(localAppData, \"localAppData\");\n        var cache = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CACHE_HOME\"), [localAppData(), \"xdg.cache\"]);\n        }, \"cache\");\n        var config = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_CONFIG_HOME\"), [appData(), \"xdg.config\"]);\n        }, \"config\");\n        var data = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_DATA_HOME\"), [appData(), \"xdg.data\"]);\n        }, \"data\");\n        var runtime = /* @__PURE__ */ __name(function() {\n          return env.get(\"XDG_RUNTIME_DIR\") || void 0;\n        }, \"runtime\");\n        var state = /* @__PURE__ */ __name(function() {\n          return valOrPath(env.get(\"XDG_STATE_HOME\"), [localAppData(), \"xdg.state\"]);\n        }, \"state\");\n        return { cache, config, data, runtime, state };\n      }, \"windows\");\n      var XDG_ = /* @__PURE__ */ function() {\n        function XDG_2() {\n          function XDG() {\n            return new XDG_2();\n          }\n          __name(XDG, \"XDG\");\n          var extension = isMacOS ? macos() : isWinOS ? windows() : linux();\n          XDG.cache = extension.cache;\n          XDG.config = extension.config;\n          XDG.data = extension.data;\n          XDG.runtime = extension.runtime;\n          XDG.state = extension.state;\n          XDG.configDirs = /* @__PURE__ */ __name(function configDirs() {\n            var pathList = env.get(\"XDG_CONFIG_DIRS\");\n            return __spreadArray([extension.config()], pathList ? pathList.split(path4.delimiter) : []);\n          }, \"configDirs\");\n          XDG.dataDirs = /* @__PURE__ */ __name(function dataDirs() {\n            var pathList = env.get(\"XDG_DATA_DIRS\");\n            return __spreadArray([extension.data()], pathList ? pathList.split(path4.delimiter) : []);\n          }, \"dataDirs\");\n          return XDG;\n        }\n        __name(XDG_2, \"XDG_\");\n        return XDG_2;\n      }();\n      return { XDG: new XDG_() };\n    }\n    __name(Adapt, \"Adapt\");\n    exports.Adapt = Adapt;\n  }\n});\n\n// ../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/lib/OSPaths.js\nvar require_OSPaths = __commonJS({\n  \"../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/lib/OSPaths.js\"(exports) {\n    var __spreadArray = exports && exports.__spreadArray || function(to, from) {\n      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n      return to;\n    };\n    exports.__esModule = true;\n    exports.Adapt = void 0;\n    function isEmpty(s) {\n      return !s;\n    }\n    __name(isEmpty, \"isEmpty\");\n    function Adapt(adapter_) {\n      var env = adapter_.env, os2 = adapter_.os, path4 = adapter_.path;\n      var isWinOS = /^win/i.test(adapter_.process.platform);\n      function normalizePath(path_) {\n        return path_ ? adapter_.path.normalize(adapter_.path.join(path_, \".\")) : void 0;\n      }\n      __name(normalizePath, \"normalizePath\");\n      function home() {\n        var posix = /* @__PURE__ */ __name(function() {\n          return normalizePath((typeof os2.homedir === \"function\" ? os2.homedir() : void 0) || env.get(\"HOME\"));\n        }, \"posix\");\n        var windows = /* @__PURE__ */ __name(function() {\n          var priorityList = [\n            typeof os2.homedir === \"function\" ? os2.homedir() : void 0,\n            env.get(\"USERPROFILE\"),\n            env.get(\"HOME\"),\n            env.get(\"HOMEDRIVE\") || env.get(\"HOMEPATH\") ? path4.join(env.get(\"HOMEDRIVE\") || \"\", env.get(\"HOMEPATH\") || \"\") : void 0\n          ];\n          return normalizePath(priorityList.find(function(v) {\n            return !isEmpty(v);\n          }));\n        }, \"windows\");\n        return isWinOS ? windows() : posix();\n      }\n      __name(home, \"home\");\n      function temp() {\n        function joinPathToBase(base, segments) {\n          return base ? path4.join.apply(path4, __spreadArray([base], segments)) : void 0;\n        }\n        __name(joinPathToBase, \"joinPathToBase\");\n        function posix() {\n          var fallback = \"/tmp\";\n          var priorityList = [\n            typeof os2.tmpdir === \"function\" ? os2.tmpdir() : void 0,\n            env.get(\"TMPDIR\"),\n            env.get(\"TEMP\"),\n            env.get(\"TMP\")\n          ];\n          return normalizePath(priorityList.find(function(v) {\n            return !isEmpty(v);\n          })) || fallback;\n        }\n        __name(posix, \"posix\");\n        function windows() {\n          var fallback = \"C:\\\\Temp\";\n          var priorityListLazy = [\n            typeof os2.tmpdir === \"function\" ? os2.tmpdir : function() {\n              return void 0;\n            },\n            function() {\n              return env.get(\"TEMP\");\n            },\n            function() {\n              return env.get(\"TMP\");\n            },\n            function() {\n              return joinPathToBase(env.get(\"LOCALAPPDATA\"), [\"Temp\"]);\n            },\n            function() {\n              return joinPathToBase(home(), [\"AppData\", \"Local\", \"Temp\"]);\n            },\n            function() {\n              return joinPathToBase(env.get(\"ALLUSERSPROFILE\"), [\"Temp\"]);\n            },\n            function() {\n              return joinPathToBase(env.get(\"SystemRoot\"), [\"Temp\"]);\n            },\n            function() {\n              return joinPathToBase(env.get(\"windir\"), [\"Temp\"]);\n            },\n            function() {\n              return joinPathToBase(env.get(\"SystemDrive\"), [\"\\\\\", \"Temp\"]);\n            }\n          ];\n          var v = priorityListLazy.find(function(v2) {\n            return v2 && !isEmpty(v2());\n          });\n          return v && normalizePath(v()) || fallback;\n        }\n        __name(windows, \"windows\");\n        return isWinOS ? windows() : posix();\n      }\n      __name(temp, \"temp\");\n      var OSPaths_ = /* @__PURE__ */ function() {\n        function OSPaths_2() {\n          function OSPaths() {\n            return new OSPaths_2();\n          }\n          __name(OSPaths, \"OSPaths\");\n          OSPaths.home = home;\n          OSPaths.temp = temp;\n          return OSPaths;\n        }\n        __name(OSPaths_2, \"OSPaths_\");\n        return OSPaths_2;\n      }();\n      return { OSPaths: new OSPaths_() };\n    }\n    __name(Adapt, \"Adapt\");\n    exports.Adapt = Adapt;\n  }\n});\n\n// ../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/platform-adapters/node.js\nvar require_node = __commonJS({\n  \"../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/platform-adapters/node.js\"(exports) {\n    var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      Object.defineProperty(o, k2, { enumerable: true, get: /* @__PURE__ */ __name(function() {\n        return m[k];\n      }, \"get\") });\n    } : function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      o[k2] = m[k];\n    });\n    var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {\n      Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n    } : function(o, v) {\n      o[\"default\"] = v;\n    });\n    var __importStar = exports && exports.__importStar || function(mod) {\n      if (mod && mod.__esModule) return mod;\n      var result = {};\n      if (mod != null) {\n        for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n      }\n      __setModuleDefault(result, mod);\n      return result;\n    };\n    exports.__esModule = true;\n    exports.adapter = void 0;\n    var os2 = __importStar(__require(\"os\"));\n    var path4 = __importStar(__require(\"path\"));\n    exports.adapter = {\n      atImportPermissions: { env: true },\n      env: {\n        get: /* @__PURE__ */ __name(function(s) {\n          return process.env[s];\n        }, \"get\")\n      },\n      os: os2,\n      path: path4,\n      process\n    };\n  }\n});\n\n// ../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/mod.cjs.js\nvar require_mod_cjs = __commonJS({\n  \"../../node_modules/.pnpm/os-paths@7.4.0/node_modules/os-paths/dist/cjs/mod.cjs.js\"(exports, module) {\n    var OSPaths_js_1 = require_OSPaths();\n    var node_js_1 = require_node();\n    module.exports = OSPaths_js_1.Adapt(node_js_1.adapter).OSPaths;\n  }\n});\n\n// ../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/platform-adapters/node.js\nvar require_node2 = __commonJS({\n  \"../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/platform-adapters/node.js\"(exports) {\n    var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      Object.defineProperty(o, k2, { enumerable: true, get: /* @__PURE__ */ __name(function() {\n        return m[k];\n      }, \"get\") });\n    } : function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      o[k2] = m[k];\n    });\n    var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {\n      Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n    } : function(o, v) {\n      o[\"default\"] = v;\n    });\n    var __importStar = exports && exports.__importStar || function(mod) {\n      if (mod && mod.__esModule) return mod;\n      var result = {};\n      if (mod != null) {\n        for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n      }\n      __setModuleDefault(result, mod);\n      return result;\n    };\n    var __importDefault = exports && exports.__importDefault || function(mod) {\n      return mod && mod.__esModule ? mod : { \"default\": mod };\n    };\n    exports.__esModule = true;\n    exports.adapter = void 0;\n    var path4 = __importStar(__require(\"path\"));\n    var os_paths_1 = __importDefault(require_mod_cjs());\n    exports.adapter = {\n      atImportPermissions: { env: true },\n      env: {\n        get: /* @__PURE__ */ __name(function(s) {\n          return process.env[s];\n        }, \"get\")\n      },\n      osPaths: os_paths_1[\"default\"],\n      path: path4,\n      process\n    };\n  }\n});\n\n// ../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/mod.cjs.js\nvar require_mod_cjs2 = __commonJS({\n  \"../../node_modules/.pnpm/xdg-portable@10.6.0/node_modules/xdg-portable/dist/cjs/mod.cjs.js\"(exports, module) {\n    var XDG_js_1 = require_XDG();\n    var node_js_1 = require_node2();\n    module.exports = XDG_js_1.Adapt(node_js_1.adapter).XDG;\n  }\n});\n\n// ../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/platform-adapters/node.js\nvar require_node3 = __commonJS({\n  \"../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/platform-adapters/node.js\"(exports) {\n    var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      Object.defineProperty(o, k2, { enumerable: true, get: /* @__PURE__ */ __name(function() {\n        return m[k];\n      }, \"get\") });\n    } : function(o, m, k, k2) {\n      if (k2 === void 0) k2 = k;\n      o[k2] = m[k];\n    });\n    var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {\n      Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n    } : function(o, v) {\n      o[\"default\"] = v;\n    });\n    var __importStar = exports && exports.__importStar || function(mod) {\n      if (mod && mod.__esModule) return mod;\n      var result = {};\n      if (mod != null) {\n        for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n      }\n      __setModuleDefault(result, mod);\n      return result;\n    };\n    var __importDefault = exports && exports.__importDefault || function(mod) {\n      return mod && mod.__esModule ? mod : { \"default\": mod };\n    };\n    exports.__esModule = true;\n    exports.adapter = void 0;\n    var path4 = __importStar(__require(\"path\"));\n    var xdg_portable_1 = __importDefault(require_mod_cjs2());\n    exports.adapter = {\n      atImportPermissions: { env: true, read: true },\n      meta: {\n        mainFilename: /* @__PURE__ */ __name(function() {\n          var requireMain = typeof __require !== \"undefined\" && __require !== null && __require.main ? __require.main : { filename: void 0 };\n          var requireMainFilename = requireMain.filename;\n          var filename = (requireMainFilename !== process.execArgv[0] ? requireMainFilename : void 0) || (typeof process._eval === \"undefined\" ? process.argv[1] : void 0);\n          return filename;\n        }, \"mainFilename\"),\n        pkgMainFilename: /* @__PURE__ */ __name(function() {\n          return process.pkg ? process.execPath : void 0;\n        }, \"pkgMainFilename\")\n      },\n      path: path4,\n      process,\n      xdg: xdg_portable_1[\"default\"]\n    };\n  }\n});\n\n// ../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/mod.cjs.js\nvar require_mod_cjs3 = __commonJS({\n  \"../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/mod.cjs.js\"(exports, module) {\n    var XDGAppPaths_js_1 = require_XDGAppPaths();\n    var node_js_1 = require_node3();\n    module.exports = XDGAppPaths_js_1.Adapt(node_js_1.adapter).XDGAppPaths;\n  }\n});\n\n// ../../node_modules/.pnpm/command-exists@1.2.9/node_modules/command-exists/lib/command-exists.js\nvar require_command_exists = __commonJS({\n  \"../../node_modules/.pnpm/command-exists@1.2.9/node_modules/command-exists/lib/command-exists.js\"(exports, module) {\n    var exec = __require(\"child_process\").exec;\n    var execSync = __require(\"child_process\").execSync;\n    var fs2 = __require(\"fs\");\n    var path4 = __require(\"path\");\n    var access = fs2.access;\n    var accessSync2 = fs2.accessSync;\n    var constants2 = fs2.constants || fs2;\n    var isUsingWindows = process.platform == \"win32\";\n    var fileNotExists = /* @__PURE__ */ __name(function(commandName, callback) {\n      access(\n        commandName,\n        constants2.F_OK,\n        function(err) {\n          callback(!err);\n        }\n      );\n    }, \"fileNotExists\");\n    var fileNotExistsSync = /* @__PURE__ */ __name(function(commandName) {\n      try {\n        accessSync2(commandName, constants2.F_OK);\n        return false;\n      } catch (e2) {\n        return true;\n      }\n    }, \"fileNotExistsSync\");\n    var localExecutable = /* @__PURE__ */ __name(function(commandName, callback) {\n      access(\n        commandName,\n        constants2.F_OK | constants2.X_OK,\n        function(err) {\n          callback(null, !err);\n        }\n      );\n    }, \"localExecutable\");\n    var localExecutableSync = /* @__PURE__ */ __name(function(commandName) {\n      try {\n        accessSync2(commandName, constants2.F_OK | constants2.X_OK);\n        return true;\n      } catch (e2) {\n        return false;\n      }\n    }, \"localExecutableSync\");\n    var commandExistsUnix = /* @__PURE__ */ __name(function(commandName, cleanedCommandName, callback) {\n      fileNotExists(commandName, function(isFile) {\n        if (!isFile) {\n          exec(\n            \"command -v \" + cleanedCommandName + \" 2>/dev/null && { echo >&1 \" + cleanedCommandName + \"; exit 0; }\",\n            function(error, stdout, stderr) {\n              callback(null, !!stdout);\n            }\n          );\n          return;\n        }\n        localExecutable(commandName, callback);\n      });\n    }, \"commandExistsUnix\");\n    var commandExistsWindows = /* @__PURE__ */ __name(function(commandName, cleanedCommandName, callback) {\n      if (!/^(?!(?:.*\\s|.*\\.|\\W+)$)(?:[a-zA-Z]:)?(?:(?:[^<>:\"\\|\\?\\*\\n])+(?:\\/\\/|\\/|\\\\\\\\|\\\\)?)+$/m.test(commandName)) {\n        callback(null, false);\n        return;\n      }\n      exec(\n        \"where \" + cleanedCommandName,\n        function(error) {\n          if (error !== null) {\n            callback(null, false);\n          } else {\n            callback(null, true);\n          }\n        }\n      );\n    }, \"commandExistsWindows\");\n    var commandExistsUnixSync = /* @__PURE__ */ __name(function(commandName, cleanedCommandName) {\n      if (fileNotExistsSync(commandName)) {\n        try {\n          var stdout = execSync(\n            \"command -v \" + cleanedCommandName + \" 2>/dev/null && { echo >&1 \" + cleanedCommandName + \"; exit 0; }\"\n          );\n          return !!stdout;\n        } catch (error) {\n          return false;\n        }\n      }\n      return localExecutableSync(commandName);\n    }, \"commandExistsUnixSync\");\n    var commandExistsWindowsSync = /* @__PURE__ */ __name(function(commandName, cleanedCommandName, callback) {\n      if (!/^(?!(?:.*\\s|.*\\.|\\W+)$)(?:[a-zA-Z]:)?(?:(?:[^<>:\"\\|\\?\\*\\n])+(?:\\/\\/|\\/|\\\\\\\\|\\\\)?)+$/m.test(commandName)) {\n        return false;\n      }\n      try {\n        var stdout = execSync(\"where \" + cleanedCommandName, { stdio: [] });\n        return !!stdout;\n      } catch (error) {\n        return false;\n      }\n    }, \"commandExistsWindowsSync\");\n    var cleanInput = /* @__PURE__ */ __name(function(s) {\n      if (/[^A-Za-z0-9_\\/:=-]/.test(s)) {\n        s = \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n        s = s.replace(/^(?:'')+/g, \"\").replace(/\\\\'''/g, \"\\\\'\");\n      }\n      return s;\n    }, \"cleanInput\");\n    if (isUsingWindows) {\n      cleanInput = /* @__PURE__ */ __name(function(s) {\n        var isPathName = /[\\\\]/.test(s);\n        if (isPathName) {\n          var dirname2 = '\"' + path4.dirname(s) + '\"';\n          var basename = '\"' + path4.basename(s) + '\"';\n          return dirname2 + \":\" + basename;\n        }\n        return '\"' + s + '\"';\n      }, \"cleanInput\");\n    }\n    module.exports = /* @__PURE__ */ __name(function commandExists(commandName, callback) {\n      var cleanedCommandName = cleanInput(commandName);\n      if (!callback && typeof Promise !== \"undefined\") {\n        return new Promise(function(resolve, reject) {\n          commandExists(commandName, function(error, output) {\n            if (output) {\n              resolve(commandName);\n            } else {\n              reject(error);\n            }\n          });\n        });\n      }\n      if (isUsingWindows) {\n        commandExistsWindows(commandName, cleanedCommandName, callback);\n      } else {\n        commandExistsUnix(commandName, cleanedCommandName, callback);\n      }\n    }, \"commandExists\");\n    module.exports.sync = function(commandName) {\n      var cleanedCommandName = cleanInput(commandName);\n      if (isUsingWindows) {\n        return commandExistsWindowsSync(commandName, cleanedCommandName);\n      } else {\n        return commandExistsUnixSync(commandName, cleanedCommandName);\n      }\n    };\n  }\n});\n\n// ../../node_modules/.pnpm/command-exists@1.2.9/node_modules/command-exists/index.js\nvar require_command_exists2 = __commonJS({\n  \"../../node_modules/.pnpm/command-exists@1.2.9/node_modules/command-exists/index.js\"(exports, module) {\n    module.exports = require_command_exists();\n  }\n});\n\n// src/config/config.ts\nvar defaultWranglerConfig = {\n  /* COMPUTED_FIELDS */\n  configPath: void 0,\n  userConfigPath: void 0,\n  topLevelName: void 0,\n  definedEnvironments: void 0,\n  targetEnvironment: void 0,\n  /*====================================================*/\n  /*      Fields supported by both Workers & Pages      */\n  /*====================================================*/\n  /* TOP-LEVEL ONLY FIELDS */\n  pages_build_output_dir: void 0,\n  send_metrics: void 0,\n  dev: {\n    ip: process.platform === \"win32\" ? \"127.0.0.1\" : \"localhost\",\n    port: void 0,\n    // the default of 8787 is set at runtime\n    inspector_port: void 0,\n    // the default of 9229 is set at runtime\n    inspector_ip: void 0,\n    // the default of 127.0.0.1 is set at runtime\n    local_protocol: \"http\",\n    upstream_protocol: \"http\",\n    host: void 0,\n    // Note this one is also workers only\n    enable_containers: true,\n    container_engine: void 0,\n    generate_types: false\n  },\n  /** INHERITABLE ENVIRONMENT FIELDS **/\n  name: void 0,\n  compatibility_date: void 0,\n  compatibility_flags: [],\n  limits: void 0,\n  placement: void 0,\n  /** NON-INHERITABLE ENVIRONMENT FIELDS **/\n  vars: {},\n  durable_objects: { bindings: [] },\n  kv_namespaces: [],\n  queues: {\n    producers: [],\n    consumers: []\n    // WORKERS SUPPORT ONLY!!\n  },\n  r2_buckets: [],\n  d1_databases: [],\n  vectorize: [],\n  ai_search_namespaces: [],\n  ai_search: [],\n  hyperdrive: [],\n  workflows: [],\n  secrets_store_secrets: [],\n  artifacts: [],\n  services: [],\n  analytics_engine_datasets: [],\n  ai: void 0,\n  images: void 0,\n  stream: void 0,\n  media: void 0,\n  version_metadata: void 0,\n  unsafe_hello_world: [],\n  flagship: [],\n  ratelimits: [],\n  worker_loaders: [],\n  /*====================================================*/\n  /*           Fields supported by Workers only         */\n  /*====================================================*/\n  /* TOP-LEVEL ONLY FIELDS */\n  legacy_env: true,\n  site: void 0,\n  wasm_modules: void 0,\n  text_blobs: void 0,\n  data_blobs: void 0,\n  keep_vars: void 0,\n  alias: void 0,\n  /** INHERITABLE ENVIRONMENT FIELDS **/\n  account_id: void 0,\n  main: void 0,\n  find_additional_modules: void 0,\n  preserve_file_names: void 0,\n  base_dir: void 0,\n  workers_dev: void 0,\n  preview_urls: void 0,\n  route: void 0,\n  routes: void 0,\n  tsconfig: void 0,\n  jsx_factory: \"React.createElement\",\n  jsx_fragment: \"React.Fragment\",\n  migrations: [],\n  triggers: {\n    crons: void 0\n  },\n  rules: [],\n  build: { command: void 0, watch_dir: \"./src\", cwd: void 0 },\n  no_bundle: void 0,\n  minify: void 0,\n  keep_names: void 0,\n  dispatch_namespaces: [],\n  first_party_worker: void 0,\n  logfwdr: { bindings: [] },\n  logpush: void 0,\n  upload_source_maps: void 0,\n  assets: void 0,\n  observability: { enabled: true },\n  cache: void 0,\n  /** The default here is undefined so that we can delegate to the CLOUDFLARE_COMPLIANCE_REGION environment variable. */\n  compliance_region: void 0,\n  python_modules: { exclude: [\"**/*.pyc\"] },\n  previews: void 0,\n  /** NON-INHERITABLE ENVIRONMENT FIELDS **/\n  define: {},\n  cloudchamber: {},\n  containers: void 0,\n  send_email: [],\n  browser: void 0,\n  unsafe: {},\n  mtls_certificates: [],\n  tail_consumers: void 0,\n  streaming_tail_consumers: void 0,\n  pipelines: [],\n  vpc_services: [],\n  vpc_networks: []\n};\nvar experimental_patchConfig = /* @__PURE__ */ __name((configPath, patch, isArrayInsertion = true) => {\n  let configString = readFileSync(configPath);\n  if (configPath.endsWith(\"toml\")) {\n    if (configString.includes(\"#\")) {\n      throw new PatchConfigError(\n        \"cannot patch .toml config if comments are present\"\n      );\n    } else {\n      configString = JSON.stringify(parseTOML(configString));\n    }\n  }\n  const patchPaths = [];\n  getJSONPath(patch, patchPaths, isArrayInsertion);\n  for (const patchPath of patchPaths) {\n    const value = patchPath.pop();\n    const edit = modify(configString, patchPath, value, {\n      isArrayInsertion\n    });\n    configString = applyEdits(configString, edit);\n  }\n  const formatEdit = format(configString, void 0, {});\n  configString = applyEdits(configString, formatEdit);\n  if (configPath.endsWith(\".toml\")) {\n    configString = dist_default.stringify(parseJSONC(configString));\n  }\n  writeFileSync(configPath, configString);\n  return configString;\n}, \"experimental_patchConfig\");\nvar getJSONPath = /* @__PURE__ */ __name((obj, allPaths, isArrayInsertion, prevPath = []) => {\n  for (const [k, v] of Object.entries(obj)) {\n    const currentPath = [...prevPath, k];\n    if (Array.isArray(v)) {\n      v.forEach((x, i) => {\n        if (isArrayInsertion) {\n          allPaths.push([...currentPath, -1, x]);\n        } else if (typeof x === \"object\" && x !== null) {\n          getJSONPath(x, allPaths, isArrayInsertion, [...currentPath, i]);\n        } else {\n          allPaths.push([...currentPath, i, x]);\n        }\n      });\n    } else if (typeof v === \"object\" && v !== null) {\n      getJSONPath(v, allPaths, isArrayInsertion, currentPath);\n    } else {\n      allPaths.push([...currentPath, v]);\n    }\n  }\n}, \"getJSONPath\");\nvar PatchConfigError = class extends Error {\n  static {\n    __name(this, \"PatchConfigError\");\n  }\n};\n\n// ../../node_modules/.pnpm/zod@3.22.3/node_modules/zod/lib/index.mjs\nvar util;\n(function(util2) {\n  util2.assertEqual = (val) => val;\n  function assertIs(_arg) {\n  }\n  __name(assertIs, \"assertIs\");\n  util2.assertIs = assertIs;\n  function assertNever2(_x) {\n    throw new Error();\n  }\n  __name(assertNever2, \"assertNever\");\n  util2.assertNever = assertNever2;\n  util2.arrayToEnum = (items) => {\n    const obj = {};\n    for (const item of items) {\n      obj[item] = item;\n    }\n    return obj;\n  };\n  util2.getValidEnumValues = (obj) => {\n    const validKeys = util2.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 util2.objectValues(filtered);\n  };\n  util2.objectValues = (obj) => {\n    return util2.objectKeys(obj).map(function(e2) {\n      return obj[e2];\n    });\n  };\n  util2.objectKeys = typeof Object.keys === \"function\" ? (obj) => Object.keys(obj) : (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  util2.find = (arr, checker) => {\n    for (const item of arr) {\n      if (checker(item))\n        return item;\n    }\n    return void 0;\n  };\n  util2.isInteger = typeof Number.isInteger === \"function\" ? (val) => Number.isInteger(val) : (val) => typeof val === \"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  __name(joinValues, \"joinValues\");\n  util2.joinValues = joinValues;\n  util2.jsonStringifyReplacer = (_2, value) => {\n    if (typeof value === \"bigint\") {\n      return value.toString();\n    }\n    return value;\n  };\n})(util || (util = {}));\nvar objectUtil;\n(function(objectUtil2) {\n  objectUtil2.mergeShapes = (first, second) => {\n    return {\n      ...first,\n      ...second\n      // second overwrites first\n    };\n  };\n})(objectUtil || (objectUtil = {}));\nvar 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]);\nvar getParsedType = /* @__PURE__ */ __name((data) => {\n  const t2 = typeof data;\n  switch (t2) {\n    case \"undefined\":\n      return ZodParsedType.undefined;\n    case \"string\":\n      return ZodParsedType.string;\n    case \"number\":\n      return 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}, \"getParsedType\");\nvar 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]);\nvar quotelessJson = /* @__PURE__ */ __name((obj) => {\n  const json = JSON.stringify(obj, null, 2);\n  return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n}, \"quotelessJson\");\nvar ZodError = class extends Error {\n  static {\n    __name(this, \"ZodError\");\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      Object.setPrototypeOf(this, actualProto);\n    } else {\n      this.__proto__ = actualProto;\n    }\n    this.name = \"ZodError\";\n    this.issues = issues;\n  }\n  get errors() {\n    return this.issues;\n  }\n  format(_mapper) {\n    const mapper = _mapper || function(issue) {\n      return issue.message;\n    };\n    const fieldErrors = { _errors: [] };\n    const processError = /* @__PURE__ */ __name((error) => {\n      for (const issue of error.issues) {\n        if (issue.code === \"invalid_union\") {\n          issue.unionErrors.map(processError);\n        } else if (issue.code === \"invalid_return_type\") {\n          processError(issue.returnTypeError);\n        } else if (issue.code === \"invalid_arguments\") {\n          processError(issue.argumentsError);\n        } else if (issue.path.length === 0) {\n          fieldErrors._errors.push(mapper(issue));\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            } 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    }, \"processError\");\n    processError(this);\n    return fieldErrors;\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        fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n        fieldErrors[sub.path[0]].push(mapper(sub));\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};\nvar errorMap = /* @__PURE__ */ __name((issue, _ctx) => {\n  let message;\n  switch (issue.code) {\n    case ZodIssueCode.invalid_type:\n      if (issue.received === ZodParsedType.undefined) {\n        message = \"Required\";\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        } else if (\"startsWith\" in issue.validation) {\n          message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n        } else if (\"endsWith\" in issue.validation) {\n          message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n        } else {\n          util.assertNever(issue.validation);\n        }\n      } else if (issue.validation !== \"regex\") {\n        message = `Invalid ${issue.validation}`;\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 === \"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}, \"errorMap\");\nvar overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n  overrideErrorMap = map;\n}\n__name(setErrorMap, \"setErrorMap\");\nfunction getErrorMap() {\n  return overrideErrorMap;\n}\n__name(getErrorMap, \"getErrorMap\");\nvar makeIssue = /* @__PURE__ */ __name((params) => {\n  const { data, path: path4, errorMaps, issueData } = params;\n  const fullPath = [...path4, ...issueData.path || []];\n  const fullIssue = {\n    ...issueData,\n    path: fullPath\n  };\n  let errorMessage = \"\";\n  const maps = errorMaps.filter((m) => !!m).slice().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: issueData.message || errorMessage\n  };\n}, \"makeIssue\");\nvar EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n  const issue = makeIssue({\n    issueData,\n    data: ctx.data,\n    path: ctx.path,\n    errorMaps: [\n      ctx.common.contextualErrorMap,\n      ctx.schemaErrorMap,\n      getErrorMap(),\n      errorMap\n      // then global default map\n    ].filter((x) => !!x)\n  });\n  ctx.common.issues.push(issue);\n}\n__name(addIssueToContext, \"addIssueToContext\");\nvar ParseStatus = class _ParseStatus {\n  static {\n    __name(this, \"ParseStatus\");\n  }\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      syncPairs.push({\n        key: await pair.key,\n        value: await pair.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};\nvar INVALID = Object.freeze({\n  status: \"aborted\"\n});\nvar DIRTY = /* @__PURE__ */ __name((value) => ({ status: \"dirty\", value }), \"DIRTY\");\nvar OK = /* @__PURE__ */ __name((value) => ({ status: \"valid\", value }), \"OK\");\nvar isAborted = /* @__PURE__ */ __name((x) => x.status === \"aborted\", \"isAborted\");\nvar isDirty = /* @__PURE__ */ __name((x) => x.status === \"dirty\", \"isDirty\");\nvar isValid = /* @__PURE__ */ __name((x) => x.status === \"valid\", \"isValid\");\nvar isAsync = /* @__PURE__ */ __name((x) => typeof Promise !== \"undefined\" && x instanceof Promise, \"isAsync\");\nvar errorUtil;\n(function(errorUtil2) {\n  errorUtil2.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n  errorUtil2.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\nvar ParseInputLazyPath = class {\n  static {\n    __name(this, \"ParseInputLazyPath\");\n  }\n  constructor(parent, value, path4, key) {\n    this._cachedPath = [];\n    this.parent = parent;\n    this.data = value;\n    this._path = path4;\n    this._key = key;\n  }\n  get path() {\n    if (!this._cachedPath.length) {\n      if (this._key instanceof Array) {\n        this._cachedPath.push(...this._path, ...this._key);\n      } else {\n        this._cachedPath.push(...this._path, this._key);\n      }\n    }\n    return this._cachedPath;\n  }\n};\nvar handleResult = /* @__PURE__ */ __name((ctx, result) => {\n  if (isValid(result)) {\n    return { success: true, data: result.value };\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}, \"handleResult\");\nfunction processCreateParams(params) {\n  if (!params)\n    return {};\n  const { errorMap: errorMap2, invalid_type_error, required_error, description } = params;\n  if (errorMap2 && (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 (errorMap2)\n    return { errorMap: errorMap2, description };\n  const customMap = /* @__PURE__ */ __name((iss, ctx) => {\n    if (iss.code !== \"invalid_type\")\n      return { message: ctx.defaultError };\n    if (typeof ctx.data === \"undefined\") {\n      return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n    }\n    return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n  }, \"customMap\");\n  return { errorMap: customMap, description };\n}\n__name(processCreateParams, \"processCreateParams\");\nvar ZodType = class {\n  static {\n    __name(this, \"ZodType\");\n  }\n  constructor(def) {\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  }\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    var _a;\n    const ctx = {\n      common: {\n        issues: [],\n        async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n        contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap\n      },\n      path: (params === null || params === void 0 ? void 0 : 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  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 === null || params === void 0 ? void 0 : params.errorMap,\n        async: true\n      },\n      path: (params === null || params === void 0 ? void 0 : 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 = /* @__PURE__ */ __name((val) => {\n      if (typeof message === \"string\" || typeof message === \"undefined\") {\n        return { message };\n      } else if (typeof message === \"function\") {\n        return message(val);\n      } else {\n        return message;\n      }\n    }, \"getIssueProperties\");\n    return this._refinement((val, ctx) => {\n      const result = check(val);\n      const setError = /* @__PURE__ */ __name(() => ctx.addIssue({\n        code: ZodIssueCode.custom,\n        ...getIssueProperties(val)\n      }), \"setError\");\n      if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n        return result.then((data) => {\n          if (!data) {\n            setError();\n            return false;\n          } else {\n            return true;\n          }\n        });\n      }\n      if (!result) {\n        setError();\n        return false;\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      } 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  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, this._def);\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(void 0).success;\n  }\n  isNullable() {\n    return this.safeParse(null).success;\n  }\n};\nvar cuidRegex = /^c[^\\s-]{8,}$/i;\nvar cuid2Regex = /^[a-z][a-z0-9]*$/;\nvar ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;\nvar 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;\nvar emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\nvar emojiRegex = /^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u;\nvar ipv4Regex = /^(((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}))$/;\nvar ipv6Regex = /^(([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})))$/;\nvar datetimeRegex = /* @__PURE__ */ __name((args) => {\n  if (args.precision) {\n    if (args.offset) {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n    } else {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n    }\n  } else if (args.precision === 0) {\n    if (args.offset) {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n    } else {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n    }\n  } else {\n    if (args.offset) {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n    } else {\n      return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n    }\n  }\n}, \"datetimeRegex\");\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}\n__name(isValidIP, \"isValidIP\");\nvar ZodString = class _ZodString extends ZodType {\n  static {\n    __name(this, \"ZodString\");\n  }\n  constructor() {\n    super(...arguments);\n    this._regex = (regex, validation, message) => this.refinement((data) => regex.test(data), {\n      validation,\n      code: ZodIssueCode.invalid_string,\n      ...errorUtil.errToObj(message)\n    });\n    this.nonempty = (message) => this.min(1, errorUtil.errToObj(message));\n    this.trim = () => new _ZodString({\n      ...this._def,\n      checks: [...this._def.checks, { kind: \"trim\" }]\n    });\n    this.toLowerCase = () => new _ZodString({\n      ...this._def,\n      checks: [...this._def.checks, { kind: \"toLowerCase\" }]\n    });\n    this.toUpperCase = () => new _ZodString({\n      ...this._def,\n      checks: [...this._def.checks, { kind: \"toUpperCase\" }]\n    });\n  }\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 ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(\n        ctx2,\n        {\n          code: ZodIssueCode.invalid_type,\n          expected: ZodParsedType.string,\n          received: ctx2.parsedType\n        }\n        //\n      );\n      return INVALID;\n    }\n    const status = new ParseStatus();\n    let ctx = void 0;\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      } 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      } 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          } 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      } 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      } else if (check.kind === \"emoji\") {\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      } 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      } 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      } 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      } 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      } else if (check.kind === \"url\") {\n        try {\n          new URL(input.data);\n        } catch (_a) {\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      } 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      } else if (check.kind === \"trim\") {\n        input.data = input.data.trim();\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      } else if (check.kind === \"toLowerCase\") {\n        input.data = input.data.toLowerCase();\n      } else if (check.kind === \"toUpperCase\") {\n        input.data = input.data.toUpperCase();\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      } 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      } 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      } 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      } else {\n        util.assertNever(check);\n      }\n    }\n    return { status: status.value, value: input.data };\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  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  ip(options) {\n    return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n  }\n  datetime(options) {\n    var _a;\n    if (typeof options === \"string\") {\n      return this._addCheck({\n        kind: \"datetime\",\n        precision: null,\n        offset: false,\n        message: options\n      });\n    }\n    return this._addCheck({\n      kind: \"datetime\",\n      precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n      offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n      ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)\n    });\n  }\n  regex(regex, message) {\n    return this._addCheck({\n      kind: \"regex\",\n      regex,\n      ...errorUtil.errToObj(message)\n    });\n  }\n  includes(value, options) {\n    return this._addCheck({\n      kind: \"includes\",\n      value,\n      position: options === null || options === void 0 ? void 0 : options.position,\n      ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)\n    });\n  }\n  startsWith(value, message) {\n    return this._addCheck({\n      kind: \"startsWith\",\n      value,\n      ...errorUtil.errToObj(message)\n    });\n  }\n  endsWith(value, message) {\n    return this._addCheck({\n      kind: \"endsWith\",\n      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  get isDatetime() {\n    return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\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 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 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  var _a;\n  return new ZodString({\n    checks: [],\n    typeName: ZodFirstPartyTypeKind.ZodString,\n    coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n    ...processCreateParams(params)\n  });\n};\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 = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n  const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n  return valInt % stepInt / Math.pow(10, decCount);\n}\n__name(floatSafeRemainder, \"floatSafeRemainder\");\nvar ZodNumber = class _ZodNumber extends ZodType {\n  static {\n    __name(this, \"ZodNumber\");\n  }\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 ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(ctx2, {\n        code: ZodIssueCode.invalid_type,\n        expected: ZodParsedType.number,\n        received: ctx2.parsedType\n      });\n      return INVALID;\n    }\n    let ctx = void 0;\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      } 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      } 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      } 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      } 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      } 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,\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, 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      } else if (ch.kind === \"min\") {\n        if (min === null || ch.value > min)\n          min = ch.value;\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 === null || params === void 0 ? void 0 : params.coerce) || false,\n    ...processCreateParams(params)\n  });\n};\nvar ZodBigInt = class _ZodBigInt extends ZodType {\n  static {\n    __name(this, \"ZodBigInt\");\n  }\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      input.data = BigInt(input.data);\n    }\n    const parsedType = this._getType(input);\n    if (parsedType !== ZodParsedType.bigint) {\n      const ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(ctx2, {\n        code: ZodIssueCode.invalid_type,\n        expected: ZodParsedType.bigint,\n        received: ctx2.parsedType\n      });\n      return INVALID;\n    }\n    let ctx = void 0;\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      } 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      } 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      } 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 _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  var _a;\n  return new ZodBigInt({\n    checks: [],\n    typeName: ZodFirstPartyTypeKind.ZodBigInt,\n    coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n    ...processCreateParams(params)\n  });\n};\nvar ZodBoolean = class extends ZodType {\n  static {\n    __name(this, \"ZodBoolean\");\n  }\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 === null || params === void 0 ? void 0 : params.coerce) || false,\n    ...processCreateParams(params)\n  });\n};\nvar ZodDate = class _ZodDate extends ZodType {\n  static {\n    __name(this, \"ZodDate\");\n  }\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 ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(ctx2, {\n        code: ZodIssueCode.invalid_type,\n        expected: ZodParsedType.date,\n        received: ctx2.parsedType\n      });\n      return INVALID;\n    }\n    if (isNaN(input.data.getTime())) {\n      const ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(ctx2, {\n        code: ZodIssueCode.invalid_date\n      });\n      return INVALID;\n    }\n    const status = new ParseStatus();\n    let ctx = void 0;\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      } 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      } 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 === null || params === void 0 ? void 0 : params.coerce) || false,\n    typeName: ZodFirstPartyTypeKind.ZodDate,\n    ...processCreateParams(params)\n  });\n};\nvar ZodSymbol = class extends ZodType {\n  static {\n    __name(this, \"ZodSymbol\");\n  }\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};\nvar ZodUndefined = class extends ZodType {\n  static {\n    __name(this, \"ZodUndefined\");\n  }\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};\nvar ZodNull = class extends ZodType {\n  static {\n    __name(this, \"ZodNull\");\n  }\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};\nvar ZodAny = class extends ZodType {\n  static {\n    __name(this, \"ZodAny\");\n  }\n  constructor() {\n    super(...arguments);\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};\nvar ZodUnknown = class extends ZodType {\n  static {\n    __name(this, \"ZodUnknown\");\n  }\n  constructor() {\n    super(...arguments);\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};\nvar ZodNever = class extends ZodType {\n  static {\n    __name(this, \"ZodNever\");\n  }\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};\nvar ZodVoid = class extends ZodType {\n  static {\n    __name(this, \"ZodVoid\");\n  }\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};\nvar ZodArray = class _ZodArray extends ZodType {\n  static {\n    __name(this, \"ZodArray\");\n  }\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 : void 0,\n          maximum: tooBig ? def.exactLength.value : void 0,\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((result2) => {\n        return ParseStatus.mergeArray(status, result2);\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: /* @__PURE__ */ __name(() => newShape, \"shape\")\n    });\n  } else if (schema instanceof ZodArray) {\n    return new ZodArray({\n      ...schema._def,\n      type: deepPartialify(schema.element)\n    });\n  } else if (schema instanceof ZodOptional) {\n    return ZodOptional.create(deepPartialify(schema.unwrap()));\n  } else if (schema instanceof ZodNullable) {\n    return ZodNullable.create(deepPartialify(schema.unwrap()));\n  } else if (schema instanceof ZodTuple) {\n    return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n  } else {\n    return schema;\n  }\n}\n__name(deepPartialify, \"deepPartialify\");\nvar ZodObject = class _ZodObject extends ZodType {\n  static {\n    __name(this, \"ZodObject\");\n  }\n  constructor() {\n    super(...arguments);\n    this._cached = null;\n    this.nonstrict = this.passthrough;\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    return this._cached = { shape, keys };\n  }\n  _parse(input) {\n    const parsedType = this._getType(input);\n    if (parsedType !== ZodParsedType.object) {\n      const ctx2 = this._getOrReturnCtx(input);\n      addIssueToContext(ctx2, {\n        code: ZodIssueCode.invalid_type,\n        expected: ZodParsedType.object,\n        received: ctx2.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      } 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      } else if (unknownKeys === \"strip\") ;\n      else {\n        throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n      }\n    } else {\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(\n            new ParseInputLazyPath(ctx, value, ctx.path, key)\n            //, 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().then(async () => {\n        const syncPairs = [];\n        for (const pair of pairs) {\n          const key = await pair.key;\n          syncPairs.push({\n            key,\n            value: await pair.value,\n            alwaysSet: pair.alwaysSet\n          });\n        }\n        return syncPairs;\n      }).then((syncPairs) => {\n        return ParseStatus.mergeObjectSync(status, syncPairs);\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 !== void 0 ? {\n        errorMap: /* @__PURE__ */ __name((issue, ctx) => {\n          var _a, _b, _c, _d;\n          const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n          if (issue.code === \"unrecognized_keys\")\n            return {\n              message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError\n            };\n          return {\n            message: defaultError\n          };\n        }, \"errorMap\")\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: /* @__PURE__ */ __name(() => ({\n        ...this._def.shape(),\n        ...augmentation\n      }), \"shape\")\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: /* @__PURE__ */ __name(() => ({\n        ...this._def.shape(),\n        ...merging._def.shape()\n      }), \"shape\"),\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    util.objectKeys(mask).forEach((key) => {\n      if (mask[key] && this.shape[key]) {\n        shape[key] = this.shape[key];\n      }\n    });\n    return new _ZodObject({\n      ...this._def,\n      shape: /* @__PURE__ */ __name(() => shape, \"shape\")\n    });\n  }\n  omit(mask) {\n    const shape = {};\n    util.objectKeys(this.shape).forEach((key) => {\n      if (!mask[key]) {\n        shape[key] = this.shape[key];\n      }\n    });\n    return new _ZodObject({\n      ...this._def,\n      shape: /* @__PURE__ */ __name(() => shape, \"shape\")\n    });\n  }\n  /**\n   * @deprecated\n   */\n  deepPartial() {\n    return deepPartialify(this);\n  }\n  partial(mask) {\n    const newShape = {};\n    util.objectKeys(this.shape).forEach((key) => {\n      const fieldSchema = this.shape[key];\n      if (mask && !mask[key]) {\n        newShape[key] = fieldSchema;\n      } else {\n        newShape[key] = fieldSchema.optional();\n      }\n    });\n    return new _ZodObject({\n      ...this._def,\n      shape: /* @__PURE__ */ __name(() => newShape, \"shape\")\n    });\n  }\n  required(mask) {\n    const newShape = {};\n    util.objectKeys(this.shape).forEach((key) => {\n      if (mask && !mask[key]) {\n        newShape[key] = this.shape[key];\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: /* @__PURE__ */ __name(() => newShape, \"shape\")\n    });\n  }\n  keyof() {\n    return createZodEnum(util.objectKeys(this.shape));\n  }\n};\nZodObject.create = (shape, params) => {\n  return new ZodObject({\n    shape: /* @__PURE__ */ __name(() => 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: /* @__PURE__ */ __name(() => 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};\nvar ZodUnion = class extends ZodType {\n  static {\n    __name(this, \"ZodUnion\");\n  }\n  _parse(input) {\n    const { ctx } = this._processInputParams(input);\n    const options = this._def.options;\n    function handleResults(results) {\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          ctx.common.issues.push(...result.ctx.common.issues);\n          return result.result;\n        }\n      }\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    __name(handleResults, \"handleResults\");\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    } else {\n      let dirty = void 0;\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        } 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((issues2) => new ZodError(issues2));\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};\nvar getDiscriminator = /* @__PURE__ */ __name((type) => {\n  if (type instanceof ZodLazy) {\n    return getDiscriminator(type.schema);\n  } else if (type instanceof ZodEffects) {\n    return getDiscriminator(type.innerType());\n  } else if (type instanceof ZodLiteral) {\n    return [type.value];\n  } else if (type instanceof ZodEnum) {\n    return type.options;\n  } else if (type instanceof ZodNativeEnum) {\n    return Object.keys(type.enum);\n  } else if (type instanceof ZodDefault) {\n    return getDiscriminator(type._def.innerType);\n  } else if (type instanceof ZodUndefined) {\n    return [void 0];\n  } else if (type instanceof ZodNull) {\n    return [null];\n  } else {\n    return null;\n  }\n}, \"getDiscriminator\");\nvar ZodDiscriminatedUnion = class _ZodDiscriminatedUnion extends ZodType {\n  static {\n    __name(this, \"ZodDiscriminatedUnion\");\n  }\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    } 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    const optionsMap = /* @__PURE__ */ new Map();\n    for (const type of options) {\n      const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n      if (!discriminatorValues) {\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  } 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  } 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  } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n    return { valid: true, data: a };\n  } else {\n    return { valid: false };\n  }\n}\n__name(mergeValues, \"mergeValues\");\nvar ZodIntersection = class extends ZodType {\n  static {\n    __name(this, \"ZodIntersection\");\n  }\n  _parse(input) {\n    const { status, ctx } = this._processInputParams(input);\n    const handleParsed = /* @__PURE__ */ __name((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    }, \"handleParsed\");\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    } 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,\n    right,\n    typeName: ZodFirstPartyTypeKind.ZodIntersection,\n    ...processCreateParams(params)\n  });\n};\nvar ZodTuple = class _ZodTuple extends ZodType {\n  static {\n    __name(this, \"ZodTuple\");\n  }\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].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    }).filter((x) => !!x);\n    if (ctx.common.async) {\n      return Promise.all(items).then((results) => {\n        return ParseStatus.mergeArray(status, results);\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};\nvar ZodRecord = class _ZodRecord extends ZodType {\n  static {\n    __name(this, \"ZodRecord\");\n  }\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      });\n    }\n    if (ctx.common.async) {\n      return ParseStatus.mergeObjectAsync(status, pairs);\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};\nvar ZodMap = class extends ZodType {\n  static {\n    __name(this, \"ZodMap\");\n  }\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 = /* @__PURE__ */ 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    } else {\n      const finalMap = /* @__PURE__ */ 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};\nvar ZodSet = class _ZodSet extends ZodType {\n  static {\n    __name(this, \"ZodSet\");\n  }\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(elements2) {\n      const parsedSet = /* @__PURE__ */ new Set();\n      for (const element of elements2) {\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    __name(finalizeSet, \"finalizeSet\");\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((elements2) => finalizeSet(elements2));\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};\nvar ZodFunction = class _ZodFunction extends ZodType {\n  static {\n    __name(this, \"ZodFunction\");\n  }\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: [\n          ctx.common.contextualErrorMap,\n          ctx.schemaErrorMap,\n          getErrorMap(),\n          errorMap\n        ].filter((x) => !!x),\n        issueData: {\n          code: ZodIssueCode.invalid_arguments,\n          argumentsError: error\n        }\n      });\n    }\n    __name(makeArgsIssue, \"makeArgsIssue\");\n    function makeReturnsIssue(returns, error) {\n      return makeIssue({\n        data: returns,\n        path: ctx.path,\n        errorMaps: [\n          ctx.common.contextualErrorMap,\n          ctx.schemaErrorMap,\n          getErrorMap(),\n          errorMap\n        ].filter((x) => !!x),\n        issueData: {\n          code: ZodIssueCode.invalid_return_type,\n          returnTypeError: error\n        }\n      });\n    }\n    __name(makeReturnsIssue, \"makeReturnsIssue\");\n    const params = { errorMap: ctx.common.contextualErrorMap };\n    const fn = ctx.data;\n    if (this._def.returns instanceof ZodPromise) {\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((e2) => {\n          error.addIssue(makeArgsIssue(args, e2));\n          throw error;\n        });\n        const result = await Reflect.apply(fn, this, parsedArgs);\n        const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e2) => {\n          error.addIssue(makeReturnsIssue(result, e2));\n          throw error;\n        });\n        return parsedReturns;\n      });\n    } else {\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};\nvar ZodLazy = class extends ZodType {\n  static {\n    __name(this, \"ZodLazy\");\n  }\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,\n    typeName: ZodFirstPartyTypeKind.ZodLazy,\n    ...processCreateParams(params)\n  });\n};\nvar ZodLiteral = class extends ZodType {\n  static {\n    __name(this, \"ZodLiteral\");\n  }\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,\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}\n__name(createZodEnum, \"createZodEnum\");\nvar ZodEnum = class _ZodEnum extends ZodType {\n  static {\n    __name(this, \"ZodEnum\");\n  }\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._def.values.indexOf(input.data) === -1) {\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) {\n    return _ZodEnum.create(values);\n  }\n  exclude(values) {\n    return _ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n  }\n};\nZodEnum.create = createZodEnum;\nvar ZodNativeEnum = class extends ZodType {\n  static {\n    __name(this, \"ZodNativeEnum\");\n  }\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 (nativeEnumValues.indexOf(input.data) === -1) {\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,\n    typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n    ...processCreateParams(params)\n  });\n};\nvar ZodPromise = class extends ZodType {\n  static {\n    __name(this, \"ZodPromise\");\n  }\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};\nvar ZodEffects = class extends ZodType {\n  static {\n    __name(this, \"ZodEffects\");\n  }\n  innerType() {\n    return this._def.schema;\n  }\n  sourceType() {\n    return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : 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: /* @__PURE__ */ __name((arg) => {\n        addIssueToContext(ctx, arg);\n        if (arg.fatal) {\n          status.abort();\n        } else {\n          status.dirty();\n        }\n      }, \"addIssue\"),\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.issues.length) {\n        return {\n          status: \"dirty\",\n          value: ctx.data\n        };\n      }\n      if (ctx.common.async) {\n        return Promise.resolve(processed).then((processed2) => {\n          return this._def.schema._parseAsync({\n            data: processed2,\n            path: ctx.path,\n            parent: ctx\n          });\n        });\n      } else {\n        return this._def.schema._parseSync({\n          data: processed,\n          path: ctx.path,\n          parent: ctx\n        });\n      }\n    }\n    if (effect.type === \"refinement\") {\n      const executeRefinement = /* @__PURE__ */ __name((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      }, \"executeRefinement\");\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        executeRefinement(inner.value);\n        return { status: status.value, value: inner.value };\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 base;\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      } else {\n        return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n          if (!isValid(base))\n            return base;\n          return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\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};\nvar ZodOptional = class extends ZodType {\n  static {\n    __name(this, \"ZodOptional\");\n  }\n  _parse(input) {\n    const parsedType = this._getType(input);\n    if (parsedType === ZodParsedType.undefined) {\n      return OK(void 0);\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};\nvar ZodNullable = class extends ZodType {\n  static {\n    __name(this, \"ZodNullable\");\n  }\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};\nvar ZodDefault = class extends ZodType {\n  static {\n    __name(this, \"ZodDefault\");\n  }\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};\nvar ZodCatch = class extends ZodType {\n  static {\n    __name(this, \"ZodCatch\");\n  }\n  _parse(input) {\n    const { ctx } = this._processInputParams(input);\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((result2) => {\n        return {\n          status: \"valid\",\n          value: result2.status === \"valid\" ? result2.value : this._def.catchValue({\n            get error() {\n              return new ZodError(newCtx.common.issues);\n            },\n            input: newCtx.data\n          })\n        };\n      });\n    } else {\n      return {\n        status: \"valid\",\n        value: result.status === \"valid\" ? result.value : 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};\nvar ZodNaN = class extends ZodType {\n  static {\n    __name(this, \"ZodNaN\");\n  }\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};\nvar BRAND = Symbol(\"zod_brand\");\nvar ZodBranded = class extends ZodType {\n  static {\n    __name(this, \"ZodBranded\");\n  }\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};\nvar ZodPipeline = class _ZodPipeline extends ZodType {\n  static {\n    __name(this, \"ZodPipeline\");\n  }\n  _parse(input) {\n    const { status, ctx } = this._processInputParams(input);\n    if (ctx.common.async) {\n      const handleAsync = /* @__PURE__ */ __name(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        } else {\n          return this._def.out._parseAsync({\n            data: inResult.value,\n            path: ctx.path,\n            parent: ctx\n          });\n        }\n      }, \"handleAsync\");\n      return handleAsync();\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      } 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};\nvar ZodReadonly = class extends ZodType {\n  static {\n    __name(this, \"ZodReadonly\");\n  }\n  _parse(input) {\n    const result = this._def.innerType._parse(input);\n    if (isValid(result)) {\n      result.value = Object.freeze(result.value);\n    }\n    return result;\n  }\n};\nZodReadonly.create = (type, params) => {\n  return new ZodReadonly({\n    innerType: type,\n    typeName: ZodFirstPartyTypeKind.ZodReadonly,\n    ...processCreateParams(params)\n  });\n};\nvar custom = /* @__PURE__ */ __name((check, params = {}, fatal) => {\n  if (check)\n    return ZodAny.create().superRefine((data, ctx) => {\n      var _a, _b;\n      if (!check(data)) {\n        const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n        const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n        const p2 = typeof p === \"string\" ? { message: p } : p;\n        ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n      }\n    });\n  return ZodAny.create();\n}, \"custom\");\nvar late = {\n  object: ZodObject.lazycreate\n};\nvar ZodFirstPartyTypeKind;\n(function(ZodFirstPartyTypeKind2) {\n  ZodFirstPartyTypeKind2[\"ZodString\"] = \"ZodString\";\n  ZodFirstPartyTypeKind2[\"ZodNumber\"] = \"ZodNumber\";\n  ZodFirstPartyTypeKind2[\"ZodNaN\"] = \"ZodNaN\";\n  ZodFirstPartyTypeKind2[\"ZodBigInt\"] = \"ZodBigInt\";\n  ZodFirstPartyTypeKind2[\"ZodBoolean\"] = \"ZodBoolean\";\n  ZodFirstPartyTypeKind2[\"ZodDate\"] = \"ZodDate\";\n  ZodFirstPartyTypeKind2[\"ZodSymbol\"] = \"ZodSymbol\";\n  ZodFirstPartyTypeKind2[\"ZodUndefined\"] = \"ZodUndefined\";\n  ZodFirstPartyTypeKind2[\"ZodNull\"] = \"ZodNull\";\n  ZodFirstPartyTypeKind2[\"ZodAny\"] = \"ZodAny\";\n  ZodFirstPartyTypeKind2[\"ZodUnknown\"] = \"ZodUnknown\";\n  ZodFirstPartyTypeKind2[\"ZodNever\"] = \"ZodNever\";\n  ZodFirstPartyTypeKind2[\"ZodVoid\"] = \"ZodVoid\";\n  ZodFirstPartyTypeKind2[\"ZodArray\"] = \"ZodArray\";\n  ZodFirstPartyTypeKind2[\"ZodObject\"] = \"ZodObject\";\n  ZodFirstPartyTypeKind2[\"ZodUnion\"] = \"ZodUnion\";\n  ZodFirstPartyTypeKind2[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n  ZodFirstPartyTypeKind2[\"ZodIntersection\"] = \"ZodIntersection\";\n  ZodFirstPartyTypeKind2[\"ZodTuple\"] = \"ZodTuple\";\n  ZodFirstPartyTypeKind2[\"ZodRecord\"] = \"ZodRecord\";\n  ZodFirstPartyTypeKind2[\"ZodMap\"] = \"ZodMap\";\n  ZodFirstPartyTypeKind2[\"ZodSet\"] = \"ZodSet\";\n  ZodFirstPartyTypeKind2[\"ZodFunction\"] = \"ZodFunction\";\n  ZodFirstPartyTypeKind2[\"ZodLazy\"] = \"ZodLazy\";\n  ZodFirstPartyTypeKind2[\"ZodLiteral\"] = \"ZodLiteral\";\n  ZodFirstPartyTypeKind2[\"ZodEnum\"] = \"ZodEnum\";\n  ZodFirstPartyTypeKind2[\"ZodEffects\"] = \"ZodEffects\";\n  ZodFirstPartyTypeKind2[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n  ZodFirstPartyTypeKind2[\"ZodOptional\"] = \"ZodOptional\";\n  ZodFirstPartyTypeKind2[\"ZodNullable\"] = \"ZodNullable\";\n  ZodFirstPartyTypeKind2[\"ZodDefault\"] = \"ZodDefault\";\n  ZodFirstPartyTypeKind2[\"ZodCatch\"] = \"ZodCatch\";\n  ZodFirstPartyTypeKind2[\"ZodPromise\"] = \"ZodPromise\";\n  ZodFirstPartyTypeKind2[\"ZodBranded\"] = \"ZodBranded\";\n  ZodFirstPartyTypeKind2[\"ZodPipeline\"] = \"ZodPipeline\";\n  ZodFirstPartyTypeKind2[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nvar instanceOfType = /* @__PURE__ */ __name((cls, params = {\n  message: `Input not instance of ${cls.name}`\n}) => custom((data) => data instanceof cls, params), \"instanceOfType\");\nvar stringType = ZodString.create;\nvar numberType = ZodNumber.create;\nvar nanType = ZodNaN.create;\nvar bigIntType = ZodBigInt.create;\nvar booleanType = ZodBoolean.create;\nvar dateType = ZodDate.create;\nvar symbolType = ZodSymbol.create;\nvar undefinedType = ZodUndefined.create;\nvar nullType = ZodNull.create;\nvar anyType = ZodAny.create;\nvar unknownType = ZodUnknown.create;\nvar neverType = ZodNever.create;\nvar voidType = ZodVoid.create;\nvar arrayType = ZodArray.create;\nvar objectType = ZodObject.create;\nvar strictObjectType = ZodObject.strictCreate;\nvar unionType = ZodUnion.create;\nvar discriminatedUnionType = ZodDiscriminatedUnion.create;\nvar intersectionType = ZodIntersection.create;\nvar tupleType = ZodTuple.create;\nvar recordType = ZodRecord.create;\nvar mapType = ZodMap.create;\nvar setType = ZodSet.create;\nvar functionType = ZodFunction.create;\nvar lazyType = ZodLazy.create;\nvar literalType = ZodLiteral.create;\nvar enumType = ZodEnum.create;\nvar nativeEnumType = ZodNativeEnum.create;\nvar promiseType = ZodPromise.create;\nvar effectsType = ZodEffects.create;\nvar optionalType = ZodOptional.create;\nvar nullableType = ZodNullable.create;\nvar preprocessType = ZodEffects.createWithPreprocess;\nvar pipelineType = ZodPipeline.create;\nvar ostring = /* @__PURE__ */ __name(() => stringType().optional(), \"ostring\");\nvar onumber = /* @__PURE__ */ __name(() => numberType().optional(), \"onumber\");\nvar oboolean = /* @__PURE__ */ __name(() => booleanType().optional(), \"oboolean\");\nvar coerce = {\n  string: /* @__PURE__ */ __name((arg) => ZodString.create({ ...arg, coerce: true }), \"string\"),\n  number: /* @__PURE__ */ __name((arg) => ZodNumber.create({ ...arg, coerce: true }), \"number\"),\n  boolean: /* @__PURE__ */ __name((arg) => ZodBoolean.create({\n    ...arg,\n    coerce: true\n  }), \"boolean\"),\n  bigint: /* @__PURE__ */ __name((arg) => ZodBigInt.create({ ...arg, coerce: true }), \"bigint\"),\n  date: /* @__PURE__ */ __name((arg) => ZodDate.create({ ...arg, coerce: true }), \"date\")\n};\nvar NEVER = INVALID;\nvar z = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  defaultErrorMap: errorMap,\n  setErrorMap,\n  getErrorMap,\n  makeIssue,\n  EMPTY_PATH,\n  addIssueToContext,\n  ParseStatus,\n  INVALID,\n  DIRTY,\n  OK,\n  isAborted,\n  isDirty,\n  isValid,\n  isAsync,\n  get util() {\n    return util;\n  },\n  get objectUtil() {\n    return objectUtil;\n  },\n  ZodParsedType,\n  getParsedType,\n  ZodType,\n  ZodString,\n  ZodNumber,\n  ZodBigInt,\n  ZodBoolean,\n  ZodDate,\n  ZodSymbol,\n  ZodUndefined,\n  ZodNull,\n  ZodAny,\n  ZodUnknown,\n  ZodNever,\n  ZodVoid,\n  ZodArray,\n  ZodObject,\n  ZodUnion,\n  ZodDiscriminatedUnion,\n  ZodIntersection,\n  ZodTuple,\n  ZodRecord,\n  ZodMap,\n  ZodSet,\n  ZodFunction,\n  ZodLazy,\n  ZodLiteral,\n  ZodEnum,\n  ZodNativeEnum,\n  ZodPromise,\n  ZodEffects,\n  ZodTransformer: ZodEffects,\n  ZodOptional,\n  ZodNullable,\n  ZodDefault,\n  ZodCatch,\n  ZodNaN,\n  BRAND,\n  ZodBranded,\n  ZodPipeline,\n  ZodReadonly,\n  custom,\n  Schema: ZodType,\n  ZodSchema: ZodType,\n  late,\n  get ZodFirstPartyTypeKind() {\n    return ZodFirstPartyTypeKind;\n  },\n  coerce,\n  any: anyType,\n  array: arrayType,\n  bigint: bigIntType,\n  boolean: booleanType,\n  date: dateType,\n  discriminatedUnion: discriminatedUnionType,\n  effect: effectsType,\n  \"enum\": enumType,\n  \"function\": functionType,\n  \"instanceof\": instanceOfType,\n  intersection: intersectionType,\n  lazy: lazyType,\n  literal: literalType,\n  map: mapType,\n  nan: nanType,\n  nativeEnum: nativeEnumType,\n  never: neverType,\n  \"null\": nullType,\n  nullable: nullableType,\n  number: numberType,\n  object: objectType,\n  oboolean,\n  onumber,\n  optional: optionalType,\n  ostring,\n  pipeline: pipelineType,\n  preprocess: preprocessType,\n  promise: promiseType,\n  record: recordType,\n  set: setType,\n  strictObject: strictObjectType,\n  string: stringType,\n  symbol: symbolType,\n  transformer: effectsType,\n  tuple: tupleType,\n  \"undefined\": undefinedType,\n  union: unionType,\n  unknown: unknownType,\n  \"void\": voidType,\n  NEVER,\n  ZodIssueCode,\n  quotelessJson,\n  ZodError\n});\n\n// ../workflows-shared/src/lib/validators.ts\nvar MAX_WORKFLOW_NAME_LENGTH = 64;\nvar ALLOWED_STRING_ID_PATTERN = \"^[a-zA-Z0-9_][a-zA-Z0-9-_]*$\";\nvar ALLOWED_WORKFLOW_INSTANCE_ID_REGEX = new RegExp(\n  ALLOWED_STRING_ID_PATTERN\n);\nvar ALLOWED_WORKFLOW_NAME_REGEX = ALLOWED_WORKFLOW_INSTANCE_ID_REGEX;\nfunction isValidWorkflowName(name) {\n  if (typeof name !== \"string\") {\n    return false;\n  }\n  if (name.length > MAX_WORKFLOW_NAME_LENGTH) {\n    return false;\n  }\n  return ALLOWED_WORKFLOW_NAME_REGEX.test(name);\n}\n__name(isValidWorkflowName, \"isValidWorkflowName\");\nz.object({\n  retries: z.object({\n    delay: z.number().gte(0).or(z.string()),\n    limit: z.number().gte(0),\n    backoff: z.enum([\"constant\", \"linear\", \"exponential\"]).optional()\n  }).strict().optional(),\n  timeout: z.number().gte(0).or(z.string()).optional()\n}).strict();\n\n// ../../node_modules/.pnpm/xdg-app-paths@8.3.0/node_modules/xdg-app-paths/dist/cjs/esm-wrapper/mod.esm.js\nvar mod_esm_exports = {};\n__export(mod_esm_exports, {\n  default: () => mod_esm_default\n});\nvar import_mod_cjs = __toESM(require_mod_cjs3(), 1);\n__reExport(mod_esm_exports, __toESM(require_mod_cjs3(), 1));\nvar mod_esm_default = import_mod_cjs.default;\n\n// src/global-wrangler-config-path.ts\nfunction getGlobalWranglerConfigPath() {\n  const configDir = mod_esm_default(\".wrangler\").config();\n  const legacyConfigDir = path3.join(os.homedir(), \".wrangler\");\n  if (isDirectory(legacyConfigDir)) {\n    return legacyConfigDir;\n  } else {\n    return configDir;\n  }\n}\n__name(getGlobalWranglerConfigPath, \"getGlobalWranglerConfigPath\");\n\n// src/environment-variables/factory.ts\nfunction getBooleanEnvironmentVariableFactory(options) {\n  return () => {\n    if (!(options.variableName in process.env) || process.env[options.variableName] === void 0) {\n      return typeof options.defaultValue === \"function\" ? options.defaultValue() : options.defaultValue;\n    }\n    switch (process.env[options.variableName]?.toLowerCase()) {\n      case \"true\":\n        return true;\n      case \"false\":\n        return false;\n      default:\n        throw new UserError(\n          `Expected ${options.variableName} to be \"true\" or \"false\", but got ${JSON.stringify(\n            process.env[options.variableName]\n          )}`,\n          { telemetryMessage: false }\n        );\n    }\n  };\n}\n__name(getBooleanEnvironmentVariableFactory, \"getBooleanEnvironmentVariableFactory\");\nfunction getEnvironmentVariableFactory({\n  variableName,\n  deprecatedName,\n  choices,\n  defaultValue\n}) {\n  let hasWarned = false;\n  return () => {\n    if (variableName in process.env) {\n      return getProcessEnv(variableName, choices);\n    }\n    if (deprecatedName && deprecatedName in process.env) {\n      if (!hasWarned) {\n        hasWarned = true;\n        console.warn(\n          `Using \"${deprecatedName}\" environment variable. This is deprecated. Please use \"${variableName}\", instead.`\n        );\n      }\n      return getProcessEnv(deprecatedName, choices);\n    }\n    return defaultValue?.();\n  };\n}\n__name(getEnvironmentVariableFactory, \"getEnvironmentVariableFactory\");\nfunction getProcessEnv(variableName, choices) {\n  assertOneOf(choices, process.env[variableName]);\n  return process.env[variableName];\n}\n__name(getProcessEnv, \"getProcessEnv\");\nfunction assertOneOf(choices, value) {\n  if (Array.isArray(choices) && !choices.includes(value)) {\n    throw new UserError(\n      `Expected ${JSON.stringify(value)} to be one of ${JSON.stringify(choices)}`,\n      { telemetryMessage: false }\n    );\n  }\n}\n__name(assertOneOf, \"assertOneOf\");\n\n// src/environment-variables/misc-variables.ts\nvar getC3CommandFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_C3_COMMAND\",\n  defaultValue: /* @__PURE__ */ __name(() => \"create cloudflare\", \"defaultValue\")\n});\nvar getWranglerSendMetricsFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_SEND_METRICS\"\n});\nvar getWranglerSendErrorReportsFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_SEND_ERROR_REPORTS\"\n});\nvar getCloudflareApiEnvironmentFromEnv = getEnvironmentVariableFactory(\n  {\n    variableName: \"WRANGLER_API_ENVIRONMENT\",\n    defaultValue: /* @__PURE__ */ __name(() => \"production\", \"defaultValue\"),\n    choices: [\"production\", \"staging\"]\n  }\n);\nvar COMPLIANCE_REGION_CONFIG_PUBLIC = {\n  compliance_region: \"public\"\n};\nvar COMPLIANCE_REGION_CONFIG_UNKNOWN = {\n  compliance_region: void 0\n};\nvar getCloudflareComplianceRegionFromEnv = getEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_COMPLIANCE_REGION\",\n  choices: [\"public\", \"fedramp_high\"]\n});\nvar getCloudflareComplianceRegion = /* @__PURE__ */ __name((complianceConfig) => {\n  const complianceRegionFromEnv = getCloudflareComplianceRegionFromEnv();\n  if (complianceRegionFromEnv !== void 0 && complianceConfig?.compliance_region !== void 0 && complianceRegionFromEnv !== complianceConfig.compliance_region) {\n    throw new UserError(\n      dedent`\n\t\t\tThe compliance region has been set to different values in two places:\n\t\t\t - \\`CLOUDFLARE_COMPLIANCE_REGION\\` environment variable: \\`${complianceRegionFromEnv}\\`\n\t\t\t - \\`compliance_region\\` configuration property: \\`${complianceConfig.compliance_region}\\`\n\t\t\t`,\n      { telemetryMessage: false }\n    );\n  }\n  return complianceRegionFromEnv || complianceConfig?.compliance_region || \"public\";\n}, \"getCloudflareComplianceRegion\");\nvar getCloudflareApiBaseUrlFromEnv = getEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_API_BASE_URL\",\n  deprecatedName: \"CF_API_BASE_URL\"\n});\nvar getCloudflareApiBaseUrl = /* @__PURE__ */ __name((complianceConfig) => getCloudflareApiBaseUrlFromEnv() ?? `https://api${getComplianceRegionSubdomain(complianceConfig)}${getStagingSubdomain()}.cloudflare.com/client/v4`, \"getCloudflareApiBaseUrl\");\nfunction getComplianceRegionSubdomain(complianceConfig) {\n  return getCloudflareComplianceRegion(complianceConfig) === \"fedramp_high\" ? \".fed\" : \"\";\n}\n__name(getComplianceRegionSubdomain, \"getComplianceRegionSubdomain\");\nfunction getStagingSubdomain() {\n  return getCloudflareApiEnvironmentFromEnv() === \"staging\" ? \".staging\" : \"\";\n}\n__name(getStagingSubdomain, \"getStagingSubdomain\");\nvar getSanitizeLogs = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_LOG_SANITIZE\",\n  defaultValue: true\n});\nvar getOutputFileDirectoryFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_OUTPUT_FILE_DIRECTORY\"\n});\nvar getOutputFilePathFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_OUTPUT_FILE_PATH\"\n});\nvar getCIMatchTag = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CI_MATCH_TAG\"\n});\nvar getCIOverrideName = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CI_OVERRIDE_NAME\"\n});\nvar getCIOverrideNetworkModeHost = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CI_OVERRIDE_NETWORK_MODE_HOST\"\n});\nvar getCIGeneratePreviewAlias = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CI_GENERATE_PREVIEW_ALIAS\",\n  defaultValue: /* @__PURE__ */ __name(() => \"false\", \"defaultValue\"),\n  choices: [\"true\", \"false\"]\n});\nvar getWorkersCIBranchName = getEnvironmentVariableFactory({\n  variableName: \"WORKERS_CI_BRANCH\"\n});\nvar getBuildConditionsFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_BUILD_CONDITIONS\"\n});\nvar getBuildPlatformFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_BUILD_PLATFORM\"\n});\nvar getRegistryPath = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_REGISTRY_PATH\",\n  defaultValue() {\n    return path3.join(getGlobalWranglerConfigPath(), \"registry\");\n  }\n});\nvar getD1ExtraLocationChoices = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_D1_EXTRA_LOCATION_CHOICES\"\n});\nvar getDockerPath = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_DOCKER_BIN\",\n  defaultValue() {\n    return \"docker\";\n  }\n});\nvar getSubdomainMixedStateCheckDisabled = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_DISABLE_SUBDOMAIN_MIXED_STATE_CHECK\",\n  defaultValue: false\n});\nvar getCloudflareLoadDevVarsFromDotEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_LOAD_DEV_VARS_FROM_DOT_ENV\",\n  defaultValue: true\n});\nvar getCloudflareIncludeProcessEnvFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_INCLUDE_PROCESS_ENV\",\n  defaultValue: false\n});\nvar getTraceHeader = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_TRACE_ID\"\n});\nvar getDisableConfigWatching = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CI_DISABLE_CONFIG_WATCHING\",\n  defaultValue: false\n});\nvar getWranglerHideBanner = getBooleanEnvironmentVariableFactory({\n  variableName: \"WRANGLER_HIDE_BANNER\",\n  defaultValue: false\n});\nvar getCloudflareEnv = getEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_ENV\"\n});\nvar getOpenNextDeployFromEnv = getEnvironmentVariableFactory({\n  variableName: \"OPEN_NEXT_DEPLOY\"\n});\nvar getLocalExplorerEnabledFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"X_LOCAL_EXPLORER\",\n  defaultValue: true\n});\nvar getBrowserRenderingHeadfulFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"X_BROWSER_HEADFUL\",\n  defaultValue: false\n});\nvar getCfFetchEnabledFromEnv = getBooleanEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_CF_FETCH_ENABLED\",\n  defaultValue: true\n});\nvar getCfFetchPathFromEnv = getEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARE_CF_FETCH_PATH\"\n});\nvar getWranglerCacheDirFromEnv = getEnvironmentVariableFactory({\n  variableName: \"WRANGLER_CACHE_DIR\"\n});\nvar getCloudflaredPathFromEnv = getEnvironmentVariableFactory({\n  variableName: \"CLOUDFLARED_PATH\"\n});\n\n// src/config/diagnostics.ts\nvar Diagnostics = class {\n  /**\n   * Create a new Diagnostics object.\n   * @param description A general description of this collection of messages.\n   */\n  constructor(description) {\n    this.description = description;\n  }\n  static {\n    __name(this, \"Diagnostics\");\n  }\n  errors = [];\n  warnings = [];\n  children = [];\n  /** Set to true when an unexpected/unknown field is encountered during validation. */\n  hasUnexpectedFields = false;\n  /**\n   * Merge the given `diagnostics` into this as a child.\n   */\n  addChild(diagnostics) {\n    if (diagnostics.hasErrors() || diagnostics.hasWarnings()) {\n      this.children.push(diagnostics);\n    }\n  }\n  /** Does this or any of its children have errors. */\n  hasErrors() {\n    if (this.errors.length > 0) {\n      return true;\n    } else {\n      return this.children.some((child) => child.hasErrors());\n    }\n  }\n  /** Does this or any of its children have unexpected fields. */\n  hasUnexpectedFieldsInTree() {\n    if (this.hasUnexpectedFields) {\n      return true;\n    } else {\n      return this.children.some((child) => child.hasUnexpectedFieldsInTree());\n    }\n  }\n  /** Render the errors of this and all its children. */\n  renderErrors() {\n    return this.render(\"errors\");\n  }\n  /** Does this or any of its children have warnings. */\n  hasWarnings() {\n    if (this.warnings.length > 0) {\n      return true;\n    } else {\n      return this.children.some((child) => child.hasWarnings());\n    }\n  }\n  /** Render the warnings of this and all its children. */\n  renderWarnings() {\n    return this.render(\"warnings\");\n  }\n  render(field) {\n    const hasMethod = field === \"errors\" ? \"hasErrors\" : \"hasWarnings\";\n    return indentText(\n      `${this.description}\n` + // Output all the fields (errors or warnings) at this level\n      this[field].map((message) => `- ${indentText(message)}`).join(\"\\n\") + // Output all the child diagnostics at the next level\n      this.children.map(\n        (child) => child[hasMethod]() ? \"\\n- \" + child.render(field) : \"\"\n      ).filter((output) => output !== \"\").join(\"\\n\")\n    );\n  }\n};\nfunction indentText(str) {\n  return str.split(\"\\n\").map(\n    (line, index) => (index === 0 ? line : `  ${line}`).replace(/^\\s*$/, \"\")\n  ).join(\"\\n\");\n}\n__name(indentText, \"indentText\");\n\n// src/config/validation-helpers.ts\nfunction deprecated(diagnostics, config, fieldPath, message, remove, title = \"Deprecation\", type = \"warning\") {\n  const BOLD = \"\\x1B[1m\";\n  const NORMAL = \"\\x1B[0m\";\n  const diagnosticMessage = `${BOLD}${title}${NORMAL}: \"${fieldPath}\":\n${message}`;\n  const result = unwindPropertyPath(config, fieldPath);\n  if (result !== void 0 && result.field in result.container) {\n    diagnostics[`${type}s`].push(diagnosticMessage);\n    if (remove) {\n      delete result.container[result.field];\n    }\n  }\n}\n__name(deprecated, \"deprecated\");\nfunction experimental(diagnostics, config, fieldPath) {\n  const result = unwindPropertyPath(config, fieldPath);\n  if (result !== void 0 && result.field in result.container && !(\"WRANGLER_DISABLE_EXPERIMENTAL_WARNING\" in process.env)) {\n    diagnostics.warnings.push(\n      `\"${fieldPath}\" fields are experimental and may change or break at any time.`\n    );\n  }\n}\n__name(experimental, \"experimental\");\nfunction inheritable(diagnostics, topLevelEnv, rawEnv, field, validate, defaultValue, transformFn = (v) => v) {\n  validate(diagnostics, field, rawEnv[field], topLevelEnv);\n  return (\n    // `rawEnv === topLevelEnv` is a special case where the user has provided an environment name\n    // but that named environment is not actually defined in the configuration.\n    // In that case we have reused the topLevelEnv as the rawEnv,\n    // and so we need to process the `transformFn()` anyway rather than just using the field in the `rawEnv`.\n    (rawEnv !== topLevelEnv ? rawEnv[field] : void 0) ?? transformFn(topLevelEnv?.[field]) ?? defaultValue\n  );\n}\n__name(inheritable, \"inheritable\");\nfunction inheritableInWranglerEnvironments(diagnostics, useServiceEnvironments, topLevelEnv, rawEnv, field, validate, transformFn = (v) => v, defaultValue) {\n  const usingServiceEnvironments = useServiceEnvironments && topLevelEnv !== void 0;\n  return usingServiceEnvironments ? notAllowedInNamedServiceEnvironment(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    field\n  ) : inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    field,\n    validate,\n    defaultValue,\n    transformFn\n  );\n}\n__name(inheritableInWranglerEnvironments, \"inheritableInWranglerEnvironments\");\nvar appendEnvName = /* @__PURE__ */ __name((envName) => (fieldValue) => fieldValue ? `${fieldValue}-${envName}` : void 0, \"appendEnvName\");\nfunction notAllowedInNamedServiceEnvironment(diagnostics, topLevelEnv, rawEnv, field) {\n  if (field in rawEnv) {\n    diagnostics.errors.push(\n      `The \"${field}\" field is not allowed in named service environments.\nPlease remove the field from this environment.`\n    );\n  }\n  return topLevelEnv[field];\n}\n__name(notAllowedInNamedServiceEnvironment, \"notAllowedInNamedServiceEnvironment\");\nfunction notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, field, validate, defaultValue) {\n  if (rawEnv[field] !== void 0) {\n    validate(diagnostics, field, rawEnv[field], topLevelEnv);\n  } else {\n    if (rawConfig?.[field] !== void 0) {\n      diagnostics.warnings.push(\n        `\"${field}\" exists at the top level, but not on \"env.${envName}\".\nThis is not what you probably want, since \"${field}\" is not inherited by environments.\nPlease add \"${field}\" to \"env.${envName}\".`\n      );\n    }\n  }\n  return rawEnv[field] ?? defaultValue;\n}\n__name(notInheritable, \"notInheritable\");\nfunction unwindPropertyPath(root, path4) {\n  let container = root;\n  const parts = path4.split(\".\");\n  for (let i = 0; i < parts.length - 1; i++) {\n    if (!hasProperty(container, parts[i])) {\n      return;\n    }\n    container = container[parts[i]];\n  }\n  return { container, field: parts[parts.length - 1] };\n}\n__name(unwindPropertyPath, \"unwindPropertyPath\");\nvar isString = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value !== void 0 && typeof value !== \"string\") {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be of type string but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  return true;\n}, \"isString\");\nvar isValidName = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value === \"string\" && /^$|^[a-z0-9_][a-z0-9-_]*$/.test(value) || value === void 0) {\n    return true;\n  } else {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be of type string, alphanumeric and lowercase with dashes only but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n}, \"isValidName\");\nvar isValidDateTimeStringFormat = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  let isValid2 = true;\n  if (value.includes(\"\\u2013\") || // en-dash\n  value.includes(\"\\u2014\")) {\n    diagnostics.errors.push(\n      `\"${field}\" field should use ISO-8601 accepted hyphens (-) rather than en-dashes (\\u2013) or em-dashes (\\u2014).`\n    );\n    isValid2 = false;\n  }\n  const data = new Date(value.replaceAll(/–|—/g, \"-\"));\n  if (isNaN(data.getTime())) {\n    diagnostics.errors.push(\n      `\"${field}\" field should be a valid ISO-8601 date (YYYY-MM-DD), but got ${JSON.stringify(value)}.`\n    );\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"isValidDateTimeStringFormat\");\nvar isStringArray = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value !== void 0 && (!Array.isArray(value) || value.some((item) => typeof item !== \"string\"))) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be of type string array but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  return true;\n}, \"isStringArray\");\nvar isOneOf = /* @__PURE__ */ __name((...choices) => (diagnostics, field, value) => {\n  if (value !== void 0 && !choices.some((choice) => value === choice)) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" field to be one of ${JSON.stringify(\n        choices\n      )} but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  return true;\n}, \"isOneOf\");\nvar all = /* @__PURE__ */ __name((...validations) => {\n  return (diagnostics, field, value, config) => {\n    let passedValidations = true;\n    for (const validate of validations) {\n      if (!validate(diagnostics, field, value, config)) {\n        passedValidations = false;\n      }\n    }\n    return passedValidations;\n  };\n}, \"all\");\nvar isMutuallyExclusiveWith = /* @__PURE__ */ __name((container, ...fields) => {\n  return (diagnostics, field, value) => {\n    if (value === void 0) {\n      return true;\n    }\n    for (const exclusiveWith of fields) {\n      if (container[exclusiveWith] !== void 0) {\n        diagnostics.errors.push(\n          `Expected exactly one of the following fields ${JSON.stringify([\n            field,\n            ...fields\n          ])}.`\n        );\n        return false;\n      }\n    }\n    return true;\n  };\n}, \"isMutuallyExclusiveWith\");\nvar isBoolean = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value !== void 0 && typeof value !== \"boolean\") {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be of type boolean but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  return true;\n}, \"isBoolean\");\nvar validateRequiredProperty = /* @__PURE__ */ __name((diagnostics, container, key, value, type, choices) => {\n  if (container) {\n    container += \".\";\n  }\n  if (value === void 0) {\n    diagnostics.errors.push(`\"${container}${key}\" is a required field.`);\n    return false;\n  } else if (typeof value !== type) {\n    diagnostics.errors.push(\n      `Expected \"${container}${key}\" to be of type ${type} but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  } else if (choices) {\n    if (!isOneOf(...choices)(diagnostics, `${container}${key}`, value, void 0)) {\n      return false;\n    }\n  }\n  return true;\n}, \"validateRequiredProperty\");\nvar validateAtLeastOnePropertyRequired = /* @__PURE__ */ __name((diagnostics, container, properties) => {\n  const containerPath = container ? `${container}.` : \"\";\n  if (properties.every((property) => property.value === void 0)) {\n    diagnostics.errors.push(\n      `${properties.map(({ key }) => `\"${containerPath}${key}\"`).join(\" or \")} is required.`\n    );\n    return false;\n  }\n  const errors = [];\n  for (const prop of properties) {\n    if (typeof prop.value === prop.type) {\n      return true;\n    }\n    errors.push(\n      `Expected \"${containerPath}${prop.key}\" to be of type ${prop.type} but got ${JSON.stringify(\n        prop.value\n      )}.`\n    );\n  }\n  diagnostics.errors.push(...errors);\n  return false;\n}, \"validateAtLeastOnePropertyRequired\");\nvar validateOptionalProperty = /* @__PURE__ */ __name((diagnostics, container, key, value, type, choices) => {\n  if (value !== void 0) {\n    return validateRequiredProperty(\n      diagnostics,\n      container,\n      key,\n      value,\n      type,\n      choices\n    );\n  }\n  return true;\n}, \"validateOptionalProperty\");\nvar validateTypedArray = /* @__PURE__ */ __name((diagnostics, container, value, type) => {\n  let isValid2 = true;\n  if (!Array.isArray(value)) {\n    diagnostics.errors.push(\n      `Expected \"${container}\" to be an array of ${type}s but got ${JSON.stringify(\n        value\n      )}`\n    );\n    isValid2 = false;\n  } else {\n    for (let i = 0; i < value.length; i++) {\n      isValid2 = validateRequiredProperty(\n        diagnostics,\n        container,\n        `[${i}]`,\n        value[i],\n        type\n      ) && isValid2;\n    }\n  }\n  return isValid2;\n}, \"validateTypedArray\");\nvar validateOptionalTypedArray = /* @__PURE__ */ __name((diagnostics, container, value, type) => {\n  if (value !== void 0) {\n    return validateTypedArray(diagnostics, container, value, type);\n  }\n  return true;\n}, \"validateOptionalTypedArray\");\nvar isRequiredProperty = /* @__PURE__ */ __name((target, property, type, choices) => hasProperty(target, property) && typeof target[property] === type && (choices === void 0 || choices.includes(target[property])), \"isRequiredProperty\");\nvar isOptionalProperty = /* @__PURE__ */ __name((target, property, type) => !hasProperty(target, property) || typeof target[property] === type, \"isOptionalProperty\");\nvar hasProperty = /* @__PURE__ */ __name((target, property) => property in target, \"hasProperty\");\nvar validateAdditionalProperties = /* @__PURE__ */ __name((diagnostics, fieldPath, restProps, knownProps) => {\n  const restPropSet = new Set(restProps);\n  for (const knownProp of knownProps) {\n    restPropSet.delete(knownProp);\n  }\n  if (restPropSet.size > 0) {\n    const fields = Array.from(restPropSet.keys()).map((field) => `\"${field}\"`);\n    diagnostics.warnings.push(\n      `Unexpected fields found in ${fieldPath} field: ${fields}`\n    );\n    diagnostics.hasUnexpectedFields = true;\n    return false;\n  }\n  return true;\n}, \"validateAdditionalProperties\");\nvar getBindingNames = /* @__PURE__ */ __name((value) => {\n  if (typeof value !== \"object\" || value === null) {\n    return [];\n  }\n  if (isBindingList(value)) {\n    return value.bindings.map(({ name }) => name);\n  } else if (isNamespaceList(value)) {\n    return value.map(({ binding }) => binding);\n  } else if (isRecord(value)) {\n    if (value[\"binding\"] !== void 0) {\n      return [value[\"binding\"]];\n    }\n    return Object.keys(value).filter((k) => value[k] !== void 0);\n  } else {\n    return [];\n  }\n}, \"getBindingNames\");\nvar isBindingList = /* @__PURE__ */ __name((value) => isRecord(value) && \"bindings\" in value && Array.isArray(value.bindings) && value.bindings.every(\n  (binding) => isRecord(binding) && \"name\" in binding && typeof binding.name === \"string\"\n), \"isBindingList\");\nvar isNamespaceList = /* @__PURE__ */ __name((value) => Array.isArray(value) && value.every(\n  (entry) => isRecord(entry) && \"binding\" in entry && typeof entry.binding === \"string\"\n), \"isNamespaceList\");\nvar isRecord = /* @__PURE__ */ __name((value) => typeof value === \"object\" && value !== null && !Array.isArray(value), \"isRecord\");\nvar validateUniqueNameProperty = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (Array.isArray(value)) {\n    const nameCount = /* @__PURE__ */ new Map();\n    Object.entries(value).forEach(([_2, entry]) => {\n      nameCount.set(entry.name, (nameCount.get(entry.name) ?? 0) + 1);\n    });\n    const duplicates = Array.from(nameCount.entries()).filter(([_2, count]) => count > 1).map(([name]) => name);\n    if (duplicates.length > 0) {\n      const list = duplicates.join('\", \"');\n      diagnostics.errors.push(\n        `\"${field}\" bindings must have unique \"name\" values; duplicate(s) found: \"${list}\"`\n      );\n      return false;\n    }\n  }\n  return true;\n}, \"validateUniqueNameProperty\");\n\n// src/config/validation.ts\nfunction isValidR2BucketName(name) {\n  return typeof name === \"string\" && /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/.test(name);\n}\n__name(isValidR2BucketName, \"isValidR2BucketName\");\nvar bucketFormatMessage = `Bucket names must begin and end with an alphanumeric character, only contain lowercase letters, numbers, and hyphens, and be between 3 and 63 characters long.`;\nvar friendlyBindingNames = {\n  data_blobs: \"Data Blob\",\n  durable_objects: \"Durable Object\",\n  kv_namespaces: \"KV Namespace\",\n  send_email: \"Send Email\",\n  queues: \"Queue\",\n  d1_databases: \"D1 Database\",\n  vectorize: \"Vectorize Index\",\n  ai_search_namespaces: \"AI Search Namespace\",\n  ai_search: \"AI Search Instance\",\n  hyperdrive: \"Hyperdrive Config\",\n  r2_buckets: \"R2 Bucket\",\n  logfwdr: \"logfwdr\",\n  services: \"Worker\",\n  analytics_engine_datasets: \"Analytics Engine Dataset\",\n  text_blobs: \"Text Blob\",\n  browser: \"Browser Run\",\n  ai: \"AI\",\n  images: \"Images\",\n  stream: \"Stream\",\n  media: \"Media\",\n  version_metadata: \"Worker Version Metadata\",\n  unsafe: \"Unsafe Metadata\",\n  vars: \"Environment Variable\",\n  wasm_modules: \"Wasm Module\",\n  dispatch_namespaces: \"Dispatch Namespace\",\n  mtls_certificates: \"mTLS Certificate\",\n  workflows: \"Workflow\",\n  pipelines: \"Pipeline\",\n  secrets_store_secrets: \"Secrets Store Secret\",\n  artifacts: \"Artifacts\",\n  ratelimits: \"Rate Limit\",\n  assets: \"Assets\",\n  unsafe_hello_world: \"Hello World\",\n  flagship: \"Flagship\",\n  worker_loaders: \"Worker Loader\",\n  vpc_services: \"VPC Service\",\n  vpc_networks: \"VPC Network\"\n};\nvar bindingTypeFriendlyNames = {\n  // The 3 binding types below are all rendered as \"Environment Variable\" to preserve existing behaviour (friendlyBindingNames.vars)\n  plain_text: \"Environment Variable\",\n  secret_text: \"Environment Variable\",\n  json: \"Environment Variable\",\n  kv_namespace: \"KV Namespace\",\n  send_email: \"Send Email\",\n  wasm_module: \"Wasm Module\",\n  text_blob: \"Text Blob\",\n  browser: \"Browser Run\",\n  ai: \"AI\",\n  images: \"Images\",\n  stream: \"Stream\",\n  version_metadata: \"Worker Version Metadata\",\n  data_blob: \"Data Blob\",\n  durable_object_namespace: \"Durable Object\",\n  workflow: \"Workflow\",\n  queue: \"Queue\",\n  r2_bucket: \"R2 Bucket\",\n  d1: \"D1 Database\",\n  vectorize: \"Vectorize Index\",\n  ai_search_namespace: \"AI Search Namespace\",\n  ai_search: \"AI Search Instance\",\n  hyperdrive: \"Hyperdrive Config\",\n  service: \"Worker\",\n  fetcher: \"Service Binding\",\n  analytics_engine: \"Analytics Engine Dataset\",\n  dispatch_namespace: \"Dispatch Namespace\",\n  mtls_certificate: \"mTLS Certificate\",\n  pipeline: \"Pipeline\",\n  secrets_store_secret: \"Secrets Store Secret\",\n  artifacts: \"Artifacts\",\n  logfwdr: \"logfwdr\",\n  unsafe_hello_world: \"Hello World\",\n  flagship: \"Flagship\",\n  ratelimit: \"Rate Limit\",\n  worker_loader: \"Worker Loader\",\n  vpc_service: \"VPC Service\",\n  vpc_network: \"VPC Network\",\n  media: \"Media\",\n  assets: \"Assets\",\n  inherit: \"Inherited\"\n};\nfunction getBindingTypeFriendlyName(bindingType) {\n  if (bindingType in bindingTypeFriendlyNames) {\n    return bindingTypeFriendlyNames[bindingType];\n  }\n  if (bindingType.startsWith(\"unsafe_\")) {\n    return \"Unsafe Metadata\";\n  }\n  return bindingType;\n}\n__name(getBindingTypeFriendlyName, \"getBindingTypeFriendlyName\");\nvar ENGLISH = new Intl.ListFormat(\"en-US\");\nvar ALLOWED_INSTANCE_TYPES = [\n  \"lite\",\n  \"basic\",\n  \"standard-1\",\n  \"standard-2\",\n  \"standard-3\",\n  \"standard-4\",\n  \"dev\",\n  // legacy\n  \"standard\"\n  // legacy\n];\nfunction isPagesConfig(rawConfig) {\n  return rawConfig.pages_build_output_dir !== void 0;\n}\n__name(isPagesConfig, \"isPagesConfig\");\nfunction normalizeAndValidateConfig(rawConfig, configPath, userConfigPath, args, preserveOriginalMain = false) {\n  const diagnostics = new Diagnostics(\n    `Processing ${configPath ? path3.relative(process.cwd(), configPath) : \"wrangler\"} configuration:`\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"\",\n    \"legacy_env\",\n    rawConfig.legacy_env,\n    \"boolean\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"\",\n    \"send_metrics\",\n    rawConfig.send_metrics,\n    \"boolean\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"\",\n    \"keep_vars\",\n    rawConfig.keep_vars,\n    \"boolean\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"\",\n    \"pages_build_output_dir\",\n    rawConfig.pages_build_output_dir,\n    \"string\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"\",\n    \"$schema\",\n    rawConfig.$schema,\n    \"string\"\n  );\n  const useServiceEnvironments = !(args[\"legacy-env\"] ?? rawConfig.legacy_env ?? true);\n  if (useServiceEnvironments) {\n    diagnostics.warnings.push(\n      \"Service environments are deprecated, and will be removed in the future. DO NOT USE IN PRODUCTION.\"\n    );\n  }\n  const isDispatchNamespace = typeof args[\"dispatch-namespace\"] === \"string\" && args[\"dispatch-namespace\"].trim() !== \"\";\n  const topLevelEnv = normalizeAndValidateEnvironment(\n    diagnostics,\n    configPath,\n    rawConfig,\n    isDispatchNamespace,\n    preserveOriginalMain\n  );\n  const isRedirectedConfig = isRedirectedRawConfig(\n    rawConfig,\n    configPath,\n    userConfigPath\n  );\n  const definedEnvironments = Object.keys(rawConfig.env ?? {});\n  if (isRedirectedConfig && definedEnvironments.length > 0) {\n    diagnostics.errors.push(\n      dedent`\n\t\t\t\tRedirected configurations cannot include environments but the following have been found:\\n${definedEnvironments.map((env) => `\t- ${env}`).join(\"\\n\")}\n\n\n\t\t\t\tSuch configurations are generated by tools, meaning that one of the tools\n\t\t\t\tyour application is using is generating the incorrect configuration.\n\t\t\t\tReport this issue to the tool's author so that this can be fixed there.\n\t\t\t\t`\n    );\n  }\n  const envName = args.env ?? getCloudflareEnv();\n  assert(envName === void 0 || typeof envName === \"string\");\n  let activeEnv = topLevelEnv;\n  if (envName) {\n    if (isRedirectedConfig) {\n      if (!isPagesConfig(rawConfig) && rawConfig.targetEnvironment && rawConfig.targetEnvironment !== envName) {\n        const via = args.env !== void 0 ? \"via the `--env/-e` CLI argument\" : \"via the CLOUDFLARE_ENV environment variable\";\n        throw new Error(dedent`\n\t\t\t\t\tYou have specified the environment \"${envName}\" ${via}.\n\t\t\t\t\tThis does not match the target environment \"${rawConfig.targetEnvironment}\" that was used when building the application.\n\t\t\t\t\tPerhaps you need to re-run the custom build of the project with \"${envName}\" as the selected environment?\n\t\t\t\t`);\n      }\n    } else {\n      const envDiagnostics = new Diagnostics(\n        `\"env.${envName}\" environment configuration`\n      );\n      const rawEnv = rawConfig.env?.[envName];\n      if (rawEnv !== void 0) {\n        activeEnv = normalizeAndValidateEnvironment(\n          envDiagnostics,\n          configPath,\n          rawEnv,\n          isDispatchNamespace,\n          preserveOriginalMain,\n          envName,\n          topLevelEnv,\n          useServiceEnvironments,\n          rawConfig\n        );\n        diagnostics.addChild(envDiagnostics);\n      } else if (!isPagesConfig(rawConfig)) {\n        activeEnv = normalizeAndValidateEnvironment(\n          envDiagnostics,\n          configPath,\n          topLevelEnv,\n          // in this case reuse the topLevelEnv to ensure that nonInherited fields are not removed\n          isDispatchNamespace,\n          preserveOriginalMain,\n          envName,\n          topLevelEnv,\n          useServiceEnvironments,\n          rawConfig\n        );\n        const envNames = rawConfig.env ? `The available configured environment names are: ${JSON.stringify(\n          Object.keys(rawConfig.env)\n        )}\n` : \"\";\n        const message = `No environment found in configuration with name \"${envName}\".\nBefore using \\`--env=${envName}\\` there should be an equivalent environment section in the configuration.\n${envNames}\nConsider adding an environment configuration section to the ${configFileName(configPath)} file:\n\\`\\`\\`\n[env.` + envName + \"]\\n```\\n\";\n        if (envNames.length > 0) {\n          diagnostics.errors.push(message);\n        } else {\n          diagnostics.warnings.push(message);\n        }\n      }\n    }\n  }\n  const config = {\n    configPath,\n    userConfigPath,\n    topLevelName: isRedirectedConfig ? rawConfig.topLevelName : rawConfig.name,\n    definedEnvironments: isRedirectedConfig ? rawConfig.definedEnvironments : definedEnvironments,\n    targetEnvironment: isRedirectedConfig ? rawConfig.targetEnvironment : envName,\n    pages_build_output_dir: normalizeAndValidatePagesBuildOutputDir(\n      configPath,\n      rawConfig.pages_build_output_dir\n    ),\n    /** Legacy_env is wrangler environments, as opposed to service environments. Wrangler environments is not legacy.  */\n    legacy_env: !useServiceEnvironments,\n    send_metrics: rawConfig.send_metrics,\n    keep_vars: rawConfig.keep_vars,\n    ...activeEnv,\n    dev: normalizeAndValidateDev(diagnostics, rawConfig.dev ?? {}, args),\n    site: normalizeAndValidateSite(\n      diagnostics,\n      configPath,\n      rawConfig,\n      activeEnv.main\n    ),\n    alias: normalizeAndValidateAliases(diagnostics, configPath, rawConfig),\n    wasm_modules: normalizeAndValidateModulePaths(\n      diagnostics,\n      configPath,\n      \"wasm_modules\",\n      rawConfig.wasm_modules\n    ),\n    text_blobs: normalizeAndValidateModulePaths(\n      diagnostics,\n      configPath,\n      \"text_blobs\",\n      rawConfig.text_blobs\n    ),\n    data_blobs: normalizeAndValidateModulePaths(\n      diagnostics,\n      configPath,\n      \"data_blobs\",\n      rawConfig.data_blobs\n    )\n  };\n  validateBindingsHaveUniqueNames(diagnostics, config);\n  validateAdditionalProperties(\n    diagnostics,\n    \"top-level\",\n    Object.keys(rawConfig),\n    [...Object.keys(config), \"env\", \"$schema\"]\n  );\n  applyPythonConfig(config, args);\n  return { config, diagnostics };\n}\n__name(normalizeAndValidateConfig, \"normalizeAndValidateConfig\");\nfunction applyPythonConfig(config, args) {\n  const mainModule = args.script ?? config.main;\n  if (typeof mainModule === \"string\" && mainModule.endsWith(\".py\")) {\n    config.no_bundle = true;\n    if (!config.rules.some((rule) => rule.type === \"PythonModule\")) {\n      config.rules.push({ type: \"PythonModule\", globs: [\"**/*.py\"] });\n    }\n    if (!config.compatibility_flags.includes(\"python_workers\")) {\n      throw new UserError(\n        \"The `python_workers` compatibility flag is required to use Python.\",\n        { telemetryMessage: false }\n      );\n    }\n  }\n}\n__name(applyPythonConfig, \"applyPythonConfig\");\nfunction normalizeAndValidateBuild(diagnostics, rawEnv, rawBuild, configPath) {\n  const { command, cwd, watch_dir = \"./src\", ...rest } = rawBuild;\n  validateAdditionalProperties(diagnostics, \"build\", Object.keys(rest), []);\n  validateOptionalProperty(diagnostics, \"build\", \"command\", command, \"string\");\n  validateOptionalProperty(diagnostics, \"build\", \"cwd\", cwd, \"string\");\n  if (Array.isArray(watch_dir)) {\n    validateTypedArray(diagnostics, \"build.watch_dir\", watch_dir, \"string\");\n  } else {\n    validateOptionalProperty(\n      diagnostics,\n      \"build\",\n      \"watch_dir\",\n      watch_dir,\n      \"string\"\n    );\n  }\n  return {\n    command,\n    watch_dir: (\n      // - `watch_dir` only matters when `command` is defined, so we apply\n      // a default only when `command` is defined\n      // - `configPath` will always be defined since `build` can only\n      // be configured in the Wrangler configuration file, but who knows, that may\n      // change in the future, so we do a check anyway\n      command && configPath ? Array.isArray(watch_dir) ? watch_dir.map(\n        (dir) => path3.relative(\n          process.cwd(),\n          path3.join(path3.dirname(configPath), `${dir}`)\n        )\n      ) : path3.relative(\n        process.cwd(),\n        path3.join(path3.dirname(configPath), `${watch_dir}`)\n      ) : watch_dir\n    ),\n    cwd\n  };\n}\n__name(normalizeAndValidateBuild, \"normalizeAndValidateBuild\");\nfunction normalizeAndValidateMainField(configPath, rawMain) {\n  const configDir = path3.dirname(configPath ?? \"wrangler.toml\");\n  if (rawMain !== void 0) {\n    if (typeof rawMain === \"string\") {\n      const directory = path3.resolve(configDir);\n      return path3.resolve(directory, rawMain);\n    } else {\n      return rawMain;\n    }\n  } else {\n    return;\n  }\n}\n__name(normalizeAndValidateMainField, \"normalizeAndValidateMainField\");\nfunction normalizeAndValidateBaseDirField(configPath, rawDir) {\n  const configDir = path3.dirname(configPath ?? \"wrangler.toml\");\n  if (rawDir !== void 0) {\n    if (typeof rawDir === \"string\") {\n      const directory = path3.resolve(configDir);\n      return path3.resolve(directory, rawDir);\n    } else {\n      return rawDir;\n    }\n  } else {\n    return;\n  }\n}\n__name(normalizeAndValidateBaseDirField, \"normalizeAndValidateBaseDirField\");\nfunction normalizeAndValidatePagesBuildOutputDir(configPath, rawPagesDir) {\n  const configDir = path3.dirname(configPath ?? \"wrangler.toml\");\n  if (rawPagesDir !== void 0) {\n    if (typeof rawPagesDir === \"string\") {\n      const directory = path3.resolve(configDir);\n      return path3.resolve(directory, rawPagesDir);\n    } else {\n      return rawPagesDir;\n    }\n  } else {\n    return;\n  }\n}\n__name(normalizeAndValidatePagesBuildOutputDir, \"normalizeAndValidatePagesBuildOutputDir\");\nfunction normalizeAndValidateDev(diagnostics, rawDev, args) {\n  assert(typeof args === \"object\" && args !== null && !Array.isArray(args));\n  const {\n    localProtocol: localProtocolArg,\n    upstreamProtocol: upstreamProtocolArg,\n    remote: remoteArg,\n    enableContainers: enableContainersArg,\n    generateTypes: generateTypesArg\n  } = args;\n  assert(\n    localProtocolArg === void 0 || localProtocolArg === \"http\" || localProtocolArg === \"https\"\n  );\n  assert(\n    upstreamProtocolArg === void 0 || upstreamProtocolArg === \"http\" || upstreamProtocolArg === \"https\"\n  );\n  assert(remoteArg === void 0 || typeof remoteArg === \"boolean\");\n  assert(\n    enableContainersArg === void 0 || typeof enableContainersArg === \"boolean\"\n  );\n  assert(\n    generateTypesArg === void 0 || typeof generateTypesArg === \"boolean\"\n  );\n  const {\n    // On Windows, when specifying `localhost` as the socket hostname, `workerd`\n    // will only listen on the IPv4 loopback `127.0.0.1`, not the IPv6 `::1`:\n    // https://github.com/cloudflare/workerd/issues/1408\n    // On Node 17+, `fetch()` will only try to fetch the IPv6 address.\n    // For now, on Windows, we default to listening on IPv4 only and using\n    // `127.0.0.1` when sending control requests to `workerd` (e.g. with the\n    // `ProxyController`).\n    ip = process.platform === \"win32\" ? \"127.0.0.1\" : \"localhost\",\n    port,\n    inspector_port,\n    inspector_ip,\n    local_protocol = localProtocolArg ?? \"http\",\n    // In remote mode upstream_protocol must be https, otherwise it defaults to local_protocol.\n    upstream_protocol = upstreamProtocolArg ?? remoteArg ? \"https\" : local_protocol,\n    host,\n    enable_containers = enableContainersArg ?? true,\n    container_engine,\n    generate_types = generateTypesArg ?? false,\n    ...rest\n  } = rawDev;\n  validateAdditionalProperties(diagnostics, \"dev\", Object.keys(rest), []);\n  validateOptionalProperty(diagnostics, \"dev\", \"ip\", ip, \"string\");\n  validateOptionalProperty(diagnostics, \"dev\", \"port\", port, \"number\");\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"inspector_port\",\n    inspector_port,\n    \"number\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"inspector_ip\",\n    inspector_ip,\n    \"string\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"local_protocol\",\n    local_protocol,\n    \"string\",\n    [\"http\", \"https\"]\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"upstream_protocol\",\n    upstream_protocol,\n    \"string\",\n    [\"http\", \"https\"]\n  );\n  validateOptionalProperty(diagnostics, \"dev\", \"host\", host, \"string\");\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"enable_containers\",\n    enable_containers,\n    \"boolean\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"container_engine\",\n    container_engine,\n    \"string\"\n  );\n  validateOptionalProperty(\n    diagnostics,\n    \"dev\",\n    \"generate_types\",\n    generate_types,\n    \"boolean\"\n  );\n  return {\n    ip,\n    port,\n    inspector_port,\n    inspector_ip,\n    local_protocol,\n    upstream_protocol,\n    host,\n    enable_containers,\n    container_engine,\n    generate_types\n  };\n}\n__name(normalizeAndValidateDev, \"normalizeAndValidateDev\");\nfunction normalizeAndValidateAssets(diagnostics, topLevelEnv, rawEnv) {\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"assets\",\n    validateAssetsConfig,\n    void 0\n  );\n}\n__name(normalizeAndValidateAssets, \"normalizeAndValidateAssets\");\nfunction normalizeAndValidateSite(diagnostics, configPath, rawConfig, mainEntryPoint) {\n  if (rawConfig?.site !== void 0) {\n    const { bucket, include = [], exclude = [], ...rest } = rawConfig.site;\n    validateAdditionalProperties(diagnostics, \"site\", Object.keys(rest), [\n      \"entry-point\"\n    ]);\n    validateRequiredProperty(diagnostics, \"site\", \"bucket\", bucket, \"string\");\n    validateTypedArray(diagnostics, \"sites.include\", include, \"string\");\n    validateTypedArray(diagnostics, \"sites.exclude\", exclude, \"string\");\n    validateOptionalProperty(\n      diagnostics,\n      \"site\",\n      \"entry-point\",\n      rawConfig.site[\"entry-point\"],\n      \"string\"\n    );\n    deprecated(\n      diagnostics,\n      rawConfig,\n      `site.entry-point`,\n      `Delete the \\`site.entry-point\\` field, then add the top level \\`main\\` field to your configuration file:\n\\`\\`\\`\nmain = \"${path3.join(\n        String(rawConfig.site[\"entry-point\"]) || \"workers-site\",\n        path3.extname(String(rawConfig.site[\"entry-point\"]) || \"workers-site\") ? \"\" : \"index.js\"\n      )}\"\n\\`\\`\\``,\n      false,\n      void 0,\n      \"warning\"\n    );\n    let siteEntryPoint = rawConfig.site[\"entry-point\"];\n    if (!mainEntryPoint && !siteEntryPoint) {\n      diagnostics.warnings.push(\n        `Because you've defined a [site] configuration, we're defaulting to \"workers-site\" for the deprecated \\`site.entry-point\\`field.\nAdd the top level \\`main\\` field to your configuration file:\n\\`\\`\\`\nmain = \"workers-site/index.js\"\n\\`\\`\\``\n      );\n      siteEntryPoint = \"workers-site\";\n    } else if (mainEntryPoint && siteEntryPoint) {\n      diagnostics.errors.push(\n        `Don't define both the \\`main\\` and \\`site.entry-point\\` fields in your configuration.\nThey serve the same purpose: to point to the entry-point of your worker.\nDelete the deprecated \\`site.entry-point\\` field from your config.`\n      );\n    }\n    if (configPath && siteEntryPoint) {\n      siteEntryPoint = path3.relative(\n        process.cwd(),\n        path3.join(path3.dirname(configPath), siteEntryPoint)\n      );\n    }\n    return {\n      bucket,\n      \"entry-point\": siteEntryPoint,\n      include,\n      exclude\n    };\n  }\n  return void 0;\n}\n__name(normalizeAndValidateSite, \"normalizeAndValidateSite\");\nfunction normalizeAndValidateAliases(diagnostics, configPath, rawConfig) {\n  if (rawConfig?.alias === void 0) {\n    return void 0;\n  }\n  if ([\"string\", \"boolean\", \"number\"].includes(typeof rawConfig?.alias) || typeof rawConfig?.alias !== \"object\") {\n    diagnostics.errors.push(\n      `Expected alias to be an object, but got ${typeof rawConfig?.alias}`\n    );\n    return void 0;\n  }\n  let isValid2 = true;\n  for (const [key, value] of Object.entries(rawConfig?.alias)) {\n    if (typeof value !== \"string\") {\n      diagnostics.errors.push(\n        `Expected alias[\"${key}\"] to be a string, but got ${typeof value}`\n      );\n      isValid2 = false;\n    }\n  }\n  if (isValid2) {\n    return rawConfig.alias;\n  }\n  return;\n}\n__name(normalizeAndValidateAliases, \"normalizeAndValidateAliases\");\nfunction normalizeAndValidateModulePaths(diagnostics, configPath, field, rawMapping) {\n  if (rawMapping === void 0) {\n    return void 0;\n  }\n  const mapping = {};\n  for (const [name, filePath] of Object.entries(rawMapping)) {\n    if (isString(diagnostics, `${field}['${name}']`, filePath, void 0)) {\n      if (configPath) {\n        mapping[name] = configPath ? path3.relative(\n          process.cwd(),\n          path3.join(path3.dirname(configPath), filePath)\n        ) : filePath;\n      }\n    }\n  }\n  return mapping;\n}\n__name(normalizeAndValidateModulePaths, \"normalizeAndValidateModulePaths\");\nfunction isValidRouteValue(item) {\n  if (!item) {\n    return false;\n  }\n  if (typeof item === \"string\") {\n    return true;\n  }\n  if (typeof item === \"object\") {\n    if (!hasProperty(item, \"pattern\") || typeof item.pattern !== \"string\") {\n      return false;\n    }\n    const hasZoneId = hasProperty(item, \"zone_id\") && typeof item.zone_id === \"string\";\n    const hasZoneName = hasProperty(item, \"zone_name\") && typeof item.zone_name === \"string\";\n    const hasCustomDomainFlag = hasProperty(item, \"custom_domain\") && typeof item.custom_domain === \"boolean\";\n    const hasEnabled = hasProperty(item, \"enabled\") && typeof item.enabled === \"boolean\";\n    const hasPreviewsEnabled = hasProperty(item, \"previews_enabled\") && typeof item.previews_enabled === \"boolean\";\n    const recognizedKeys = [\n      hasZoneId,\n      hasZoneName,\n      hasCustomDomainFlag,\n      hasEnabled,\n      hasPreviewsEnabled\n    ].filter(Boolean).length;\n    const otherKeys = Object.keys(item).length - 1;\n    if (recognizedKeys !== otherKeys) {\n      return false;\n    }\n    if (hasZoneId && hasZoneName) {\n      return false;\n    }\n    if ((hasEnabled || hasPreviewsEnabled) && !hasCustomDomainFlag) {\n      return false;\n    }\n    if (hasZoneId || hasZoneName || hasCustomDomainFlag) {\n      return true;\n    }\n  }\n  return false;\n}\n__name(isValidRouteValue, \"isValidRouteValue\");\nfunction mutateEmptyStringAccountIDValue(diagnostics, rawEnv) {\n  if (rawEnv.account_id === \"\") {\n    diagnostics.warnings.push(\n      `The \"account_id\" field in your configuration is an empty string and will be ignored.\nPlease remove the \"account_id\" field from your configuration.`\n    );\n    rawEnv.account_id = void 0;\n  }\n  return rawEnv;\n}\n__name(mutateEmptyStringAccountIDValue, \"mutateEmptyStringAccountIDValue\");\nfunction mutateEmptyStringRouteValue(diagnostics, rawEnv) {\n  if (rawEnv[\"route\"] === \"\") {\n    diagnostics.warnings.push(\n      `The \"route\" field in your configuration is an empty string and will be ignored.\nPlease remove the \"route\" field from your configuration.`\n    );\n    rawEnv[\"route\"] = void 0;\n  }\n  return rawEnv;\n}\n__name(mutateEmptyStringRouteValue, \"mutateEmptyStringRouteValue\");\nvar isRoute = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value !== void 0 && !isValidRouteValue(value)) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be either a string, or an object with shape { pattern, custom_domain, zone_id | zone_name, enabled, previews_enabled }, but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  return true;\n}, \"isRoute\");\nvar isRouteArray = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (!Array.isArray(value)) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  const invalidRoutes = [];\n  for (const item of value) {\n    if (!isValidRouteValue(item)) {\n      invalidRoutes.push(item);\n    }\n  }\n  if (invalidRoutes.length > 0) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an array of either strings or objects with the shape { pattern, custom_domain, zone_id | zone_name, enabled, previews_enabled }, but these weren't valid: ${JSON.stringify(\n        invalidRoutes,\n        null,\n        2\n      )}.`\n    );\n  }\n  return invalidRoutes.length === 0;\n}, \"isRouteArray\");\nfunction normalizeAndValidateRoute(diagnostics, topLevelEnv, rawEnv) {\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    mutateEmptyStringRouteValue(diagnostics, rawEnv),\n    \"route\",\n    isRoute,\n    void 0\n  );\n}\n__name(normalizeAndValidateRoute, \"normalizeAndValidateRoute\");\nfunction validateRoutes(diagnostics, topLevelEnv, rawEnv) {\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"routes\",\n    all(isRouteArray, isMutuallyExclusiveWith(rawEnv, \"route\")),\n    void 0\n  );\n}\n__name(validateRoutes, \"validateRoutes\");\nfunction normalizeAndValidatePlacement(diagnostics, topLevelEnv, rawEnv) {\n  if (rawEnv.placement) {\n    const placement = rawEnv.placement;\n    const hasHint = \"hint\" in placement;\n    const hasRegion = \"region\" in placement;\n    const hasHost = \"host\" in placement;\n    const hasHostname = \"hostname\" in placement;\n    const hasTargetedFields = hasRegion || hasHost || hasHostname;\n    if (hasHint && hasTargetedFields) {\n      diagnostics.errors.push(\n        `\"placement\" cannot have both \"hint\" (smart format) and \"region\"/\"host\"/\"hostname\" (targeted format) fields`\n      );\n      return inheritable(\n        diagnostics,\n        topLevelEnv,\n        rawEnv,\n        \"placement\",\n        () => true,\n        void 0\n      );\n    }\n    if (hasHint) {\n      validateRequiredProperty(\n        diagnostics,\n        \"placement\",\n        \"mode\",\n        placement.mode,\n        \"string\",\n        [\"off\", \"smart\"]\n      );\n      const mode = placement.mode;\n      const hint = placement.hint;\n      if (hint !== void 0 && typeof hint !== \"string\") {\n        diagnostics.errors.push(\n          `\"placement.hint\" must be a string when \"placement.mode\" is \"${mode}\"`\n        );\n      }\n      if (hint && mode !== \"smart\") {\n        diagnostics.errors.push(\n          `\"placement.hint\" can only be set when \"placement.mode\" is \"smart\"`\n        );\n      }\n    } else if (hasTargetedFields) {\n      validateOptionalProperty(\n        diagnostics,\n        \"placement\",\n        \"mode\",\n        placement.mode,\n        \"string\",\n        [\"off\", \"targeted\"]\n      );\n      if (hasRegion) {\n        validateOptionalProperty(\n          diagnostics,\n          \"placement\",\n          \"region\",\n          placement.region,\n          \"string\"\n        );\n      }\n      if (hasHost) {\n        validateOptionalProperty(\n          diagnostics,\n          \"placement\",\n          \"host\",\n          placement.host,\n          \"string\"\n        );\n      }\n      if (hasHostname) {\n        validateOptionalProperty(\n          diagnostics,\n          \"placement\",\n          \"hostname\",\n          placement.hostname,\n          \"string\"\n        );\n      }\n      const fieldsPresent = [hasRegion, hasHost, hasHostname].filter(Boolean);\n      if (fieldsPresent.length > 1) {\n        const presentFields = [];\n        if (hasRegion) {\n          presentFields.push(\"region\");\n        }\n        if (hasHost) {\n          presentFields.push(\"host\");\n        }\n        if (hasHostname) {\n          presentFields.push(\"hostname\");\n        }\n        diagnostics.errors.push(\n          `\"placement\" fields ${presentFields.map((f) => `\"${f}\"`).join(\", \")} are mutually exclusive. Only one can be specified.`\n        );\n      }\n    } else {\n      validateRequiredProperty(\n        diagnostics,\n        \"placement\",\n        \"mode\",\n        placement.mode,\n        \"string\",\n        [\"off\", \"smart\", \"targeted\"]\n      );\n    }\n  }\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"placement\",\n    () => true,\n    void 0\n  );\n}\n__name(normalizeAndValidatePlacement, \"normalizeAndValidatePlacement\");\nfunction validateTailConsumer(diagnostics, field, value) {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  isValid2 = isValid2 && validateRequiredProperty(\n    diagnostics,\n    field,\n    \"service\",\n    value.service,\n    \"string\"\n  );\n  isValid2 = isValid2 && validateOptionalProperty(\n    diagnostics,\n    field,\n    \"environment\",\n    value.environment,\n    \"string\"\n  );\n  return isValid2;\n}\n__name(validateTailConsumer, \"validateTailConsumer\");\nvar validateTailConsumers = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (!value) {\n    return true;\n  }\n  if (!Array.isArray(value)) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  for (let i = 0; i < value.length; i++) {\n    isValid2 = validateTailConsumer(diagnostics, `${field}[${i}]`, value[i]) && isValid2;\n  }\n  return isValid2;\n}, \"validateTailConsumers\");\nfunction validateStreamingTailConsumer(diagnostics, field, value) {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  return validateRequiredProperty(\n    diagnostics,\n    field,\n    \"service\",\n    value.service,\n    \"string\"\n  );\n}\n__name(validateStreamingTailConsumer, \"validateStreamingTailConsumer\");\nvar validateStreamingTailConsumers = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (!value) {\n    return true;\n  }\n  if (!Array.isArray(value)) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  for (let i = 0; i < value.length; i++) {\n    isValid2 = validateStreamingTailConsumer(diagnostics, `${field}[${i}]`, value[i]) && isValid2;\n  }\n  return isValid2;\n}, \"validateStreamingTailConsumers\");\nfunction normalizeAndValidateEnvironment(diagnostics, configPath, rawEnv, isDispatchNamespace, preserveOriginalMain, envName = \"top level\", topLevelEnv, useServiceEnvironments, rawConfig) {\n  deprecated(\n    diagnostics,\n    rawEnv,\n    // @ts-expect-error Removed from the config type\n    \"node_compat\",\n    `The \"node_compat\" field is no longer supported as of Wrangler v4. Instead, use the \\`nodejs_compat\\` compatibility flag. This includes the functionality from legacy \\`node_compat\\` polyfills and natively implemented Node.js APIs. See https://developers.cloudflare.com/workers/runtime-apis/nodejs for more information.`,\n    true,\n    \"Removed\",\n    \"error\"\n  );\n  experimental(diagnostics, rawEnv, \"unsafe\");\n  const route = normalizeAndValidateRoute(diagnostics, topLevelEnv, rawEnv);\n  const account_id = inheritableInWranglerEnvironments(\n    diagnostics,\n    useServiceEnvironments,\n    topLevelEnv,\n    mutateEmptyStringAccountIDValue(diagnostics, rawEnv),\n    \"account_id\",\n    isString,\n    void 0,\n    void 0\n  );\n  const routes = validateRoutes(diagnostics, topLevelEnv, rawEnv);\n  const workers_dev = inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"workers_dev\",\n    isBoolean,\n    void 0\n  );\n  const preview_urls = inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"preview_urls\",\n    isBoolean,\n    void 0\n  );\n  const build = normalizeAndValidateBuild(\n    diagnostics,\n    rawEnv,\n    rawEnv.build ?? topLevelEnv?.build ?? {},\n    configPath\n  );\n  const environment = {\n    // Inherited fields\n    account_id,\n    compatibility_date: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"compatibility_date\",\n      validateCompatibilityDate,\n      void 0\n    ),\n    compatibility_flags: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"compatibility_flags\",\n      isStringArray,\n      []\n    ),\n    jsx_factory: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"jsx_factory\",\n      isString,\n      \"React.createElement\"\n    ),\n    jsx_fragment: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"jsx_fragment\",\n      isString,\n      \"React.Fragment\"\n    ),\n    tsconfig: validateAndNormalizeTsconfig(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      configPath\n    ),\n    rules: validateAndNormalizeRules(diagnostics, topLevelEnv, rawEnv, envName),\n    name: inheritableInWranglerEnvironments(\n      diagnostics,\n      useServiceEnvironments,\n      topLevelEnv,\n      rawEnv,\n      \"name\",\n      isDispatchNamespace ? isString : isValidName,\n      appendEnvName(envName),\n      void 0\n    ),\n    main: preserveOriginalMain ? inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"main\",\n      isString,\n      void 0\n    ) : normalizeAndValidateMainField(\n      configPath,\n      inheritable(\n        diagnostics,\n        topLevelEnv,\n        rawEnv,\n        \"main\",\n        isString,\n        void 0\n      )\n    ),\n    find_additional_modules: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"find_additional_modules\",\n      isBoolean,\n      void 0\n    ),\n    preserve_file_names: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"preserve_file_names\",\n      isBoolean,\n      void 0\n    ),\n    base_dir: normalizeAndValidateBaseDirField(\n      configPath,\n      inheritable(\n        diagnostics,\n        topLevelEnv,\n        rawEnv,\n        \"base_dir\",\n        isString,\n        void 0\n      )\n    ),\n    route,\n    routes,\n    triggers: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"triggers\",\n      validateTriggers,\n      { crons: void 0 }\n    ),\n    assets: normalizeAndValidateAssets(diagnostics, topLevelEnv, rawEnv),\n    limits: normalizeAndValidateLimits(diagnostics, topLevelEnv, rawEnv),\n    placement: normalizeAndValidatePlacement(diagnostics, topLevelEnv, rawEnv),\n    build,\n    workers_dev,\n    preview_urls,\n    // Not inherited fields\n    vars: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"vars\",\n      validateVars(envName),\n      {}\n    ),\n    secrets: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"secrets\",\n      validateSecrets(envName),\n      void 0\n    ),\n    define: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"define\",\n      validateDefines(envName),\n      {}\n    ),\n    durable_objects: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"durable_objects\",\n      validateBindingsProperty(envName, validateDurableObjectBinding),\n      {\n        bindings: []\n      }\n    ),\n    workflows: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"workflows\",\n      all(\n        validateBindingArray(envName, validateWorkflowBinding),\n        validateUniqueNameProperty\n      ),\n      []\n    ),\n    migrations: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"migrations\",\n      validateMigrations,\n      []\n    ),\n    kv_namespaces: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"kv_namespaces\",\n      validateBindingArray(envName, validateKVBinding),\n      []\n    ),\n    cloudchamber: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"cloudchamber\",\n      validateCloudchamberConfig,\n      {}\n    ),\n    containers: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"containers\",\n      validateContainerApp(envName, rawEnv.name, configPath),\n      void 0\n    ),\n    send_email: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"send_email\",\n      validateBindingArray(envName, validateSendEmailBinding),\n      []\n    ),\n    queues: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"queues\",\n      validateQueues(envName),\n      { producers: [], consumers: [] }\n    ),\n    r2_buckets: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"r2_buckets\",\n      validateBindingArray(envName, validateR2Binding),\n      []\n    ),\n    d1_databases: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"d1_databases\",\n      validateBindingArray(envName, validateD1Binding),\n      []\n    ),\n    vectorize: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"vectorize\",\n      validateBindingArray(envName, validateVectorizeBinding),\n      []\n    ),\n    ai_search_namespaces: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"ai_search_namespaces\",\n      validateBindingArray(envName, validateAISearchNamespaceBinding),\n      []\n    ),\n    ai_search: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"ai_search\",\n      validateBindingArray(envName, validateAISearchBinding),\n      []\n    ),\n    hyperdrive: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"hyperdrive\",\n      validateBindingArray(envName, validateHyperdriveBinding),\n      []\n    ),\n    services: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"services\",\n      validateBindingArray(envName, validateServiceBinding),\n      []\n    ),\n    analytics_engine_datasets: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"analytics_engine_datasets\",\n      validateBindingArray(envName, validateAnalyticsEngineBinding),\n      []\n    ),\n    dispatch_namespaces: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"dispatch_namespaces\",\n      validateBindingArray(envName, validateWorkerNamespaceBinding),\n      []\n    ),\n    mtls_certificates: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"mtls_certificates\",\n      validateBindingArray(envName, validateMTlsCertificateBinding),\n      []\n    ),\n    tail_consumers: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"tail_consumers\",\n      validateTailConsumers,\n      void 0\n    ),\n    streaming_tail_consumers: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"streaming_tail_consumers\",\n      validateStreamingTailConsumers,\n      void 0\n    ),\n    unsafe: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"unsafe\",\n      validateUnsafeSettings(envName),\n      {}\n    ),\n    browser: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"browser\",\n      validateNamedSimpleBinding(envName),\n      void 0\n    ),\n    ai: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"ai\",\n      validateAIBinding(envName),\n      void 0\n    ),\n    images: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"images\",\n      validateNamedSimpleBinding(envName),\n      void 0\n    ),\n    stream: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"stream\",\n      validateNamedSimpleBinding(envName),\n      void 0\n    ),\n    media: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"media\",\n      validateNamedSimpleBinding(envName),\n      void 0\n    ),\n    pipelines: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"pipelines\",\n      validateBindingArray(envName, validatePipelineBinding),\n      []\n    ),\n    secrets_store_secrets: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"secrets_store_secrets\",\n      validateBindingArray(envName, validateSecretsStoreSecretBinding),\n      []\n    ),\n    artifacts: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"artifacts\",\n      validateBindingArray(envName, validateArtifactsBinding),\n      []\n    ),\n    unsafe_hello_world: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"unsafe_hello_world\",\n      validateBindingArray(envName, validateHelloWorldBinding),\n      []\n    ),\n    flagship: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"flagship\",\n      validateBindingArray(envName, validateFlagshipBinding),\n      []\n    ),\n    worker_loaders: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"worker_loaders\",\n      validateBindingArray(envName, validateWorkerLoaderBinding),\n      []\n    ),\n    ratelimits: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"ratelimits\",\n      validateBindingArray(envName, validateRateLimitBinding),\n      []\n    ),\n    vpc_services: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"vpc_services\",\n      validateBindingArray(envName, validateVpcServiceBinding),\n      []\n    ),\n    vpc_networks: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"vpc_networks\",\n      validateBindingArray(envName, validateVpcNetworkBinding),\n      []\n    ),\n    version_metadata: notInheritable(\n      diagnostics,\n      topLevelEnv,\n      rawConfig,\n      rawEnv,\n      envName,\n      \"version_metadata\",\n      validateVersionMetadataBinding(envName),\n      void 0\n    ),\n    logfwdr: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"logfwdr\",\n      validateCflogfwdrObject(envName),\n      {\n        bindings: []\n      }\n    ),\n    no_bundle: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"no_bundle\",\n      isBoolean,\n      void 0\n    ),\n    minify: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"minify\",\n      isBoolean,\n      void 0\n    ),\n    keep_names: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"keep_names\",\n      isBoolean,\n      void 0\n    ),\n    first_party_worker: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"first_party_worker\",\n      isBoolean,\n      void 0\n    ),\n    logpush: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"logpush\",\n      isBoolean,\n      void 0\n    ),\n    upload_source_maps: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"upload_source_maps\",\n      isBoolean,\n      void 0\n    ),\n    observability: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"observability\",\n      validateObservability,\n      void 0\n    ),\n    cache: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"cache\",\n      validateCache,\n      void 0\n    ),\n    compliance_region: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"compliance_region\",\n      isOneOf(\"public\", \"fedramp_high\"),\n      void 0\n    ),\n    python_modules: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"python_modules\",\n      validatePythonModules,\n      { exclude: [\"**/*.pyc\"] }\n    ),\n    previews: inheritable(\n      diagnostics,\n      topLevelEnv,\n      rawEnv,\n      \"previews\",\n      validatePreviewsConfig(envName),\n      void 0\n    )\n  };\n  warnIfDurableObjectsHaveNoMigrations(\n    diagnostics,\n    environment.durable_objects,\n    environment.migrations,\n    configPath\n  );\n  if (envName !== \"top level\") {\n    validateAdditionalProperties(\n      diagnostics,\n      \"env.\" + envName,\n      Object.keys(rawEnv),\n      Object.keys(environment)\n    );\n  }\n  return environment;\n}\n__name(normalizeAndValidateEnvironment, \"normalizeAndValidateEnvironment\");\nfunction validateAndNormalizeTsconfig(diagnostics, topLevelEnv, rawEnv, configPath) {\n  const tsconfig = inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"tsconfig\",\n    isString,\n    void 0\n  );\n  return configPath && tsconfig ? path3.relative(\n    process.cwd(),\n    path3.join(path3.dirname(configPath), tsconfig)\n  ) : tsconfig;\n}\n__name(validateAndNormalizeTsconfig, \"validateAndNormalizeTsconfig\");\nvar validateAndNormalizeRules = /* @__PURE__ */ __name((diagnostics, topLevelEnv, rawEnv, envName) => {\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"rules\",\n    validateRules(envName),\n    []\n  );\n}, \"validateAndNormalizeRules\");\nvar validateTriggers = /* @__PURE__ */ __name((diagnostics, triggersFieldName, triggersValue) => {\n  if (triggersValue === void 0 || triggersValue === null) {\n    return true;\n  }\n  if (typeof triggersValue !== \"object\") {\n    diagnostics.errors.push(\n      `Expected \"${triggersFieldName}\" to be of type object but got ${JSON.stringify(\n        triggersValue\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (\"crons\" in triggersValue && !Array.isArray(triggersValue.crons)) {\n    diagnostics.errors.push(\n      `Expected \"${triggersFieldName}.crons\" to be of type array, but got ${JSON.stringify(triggersValue)}.`\n    );\n    isValid2 = false;\n  }\n  isValid2 = validateAdditionalProperties(\n    diagnostics,\n    triggersFieldName,\n    Object.keys(triggersValue),\n    [\"crons\"]\n  ) && isValid2;\n  return isValid2;\n}, \"validateTriggers\");\nvar validateRules = /* @__PURE__ */ __name((envName) => (diagnostics, field, envValue, config) => {\n  if (!envValue) {\n    return true;\n  }\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (!Array.isArray(envValue)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an array but got ${JSON.stringify(\n        envValue\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  for (let i = 0; i < envValue.length; i++) {\n    isValid2 = validateRule(diagnostics, `${fieldPath}[${i}]`, envValue[i], config) && isValid2;\n  }\n  return isValid2;\n}, \"validateRules\");\nvar validateRule = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  const rule = value;\n  if (!isRequiredProperty(rule, \"type\", \"string\", [\n    \"ESModule\",\n    \"CommonJS\",\n    \"CompiledWasm\",\n    \"Text\",\n    \"Data\"\n  ])) {\n    diagnostics.errors.push(\n      `bindings should have a string \"type\" field, which contains one of \"ESModule\", \"CommonJS\", \"CompiledWasm\", \"Text\", or \"Data\".`\n    );\n    isValid2 = false;\n  }\n  isValid2 = validateTypedArray(diagnostics, `${field}.globs`, rule.globs, \"string\") && isValid2;\n  if (!isOptionalProperty(rule, \"fallthrough\", \"boolean\")) {\n    diagnostics.errors.push(\n      `the field \"fallthrough\", when present, should be a boolean.`\n    );\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateRule\");\nvar validateDefines = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  let isValid2 = true;\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (typeof value === \"object\" && value !== null) {\n    for (const varName in value) {\n      if (typeof value[varName] !== \"string\") {\n        diagnostics.errors.push(\n          `The field \"${fieldPath}.${varName}\" should be a string but got ${JSON.stringify(\n            value[varName]\n          )}.`\n        );\n        isValid2 = false;\n      }\n    }\n  } else {\n    if (value !== void 0) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n          value\n        )}.\n`\n      );\n      isValid2 = false;\n    }\n  }\n  const configDefines = Object.keys(config?.define ?? {});\n  if (configDefines.length > 0) {\n    if (typeof value === \"object\" && value !== null) {\n      const configEnvDefines = config === void 0 ? [] : Object.keys(value);\n      for (const varName of configDefines) {\n        if (!(varName in value)) {\n          diagnostics.warnings.push(\n            `\"define.${varName}\" exists at the top level, but not on \"${fieldPath}\".\nThis is not what you probably want, since \"define\" configuration is not inherited by environments.\nPlease add \"define.${varName}\" to \"env.${envName}\".`\n          );\n        }\n      }\n      for (const varName of configEnvDefines) {\n        if (!configDefines.includes(varName)) {\n          diagnostics.warnings.push(\n            `\"${varName}\" exists on \"env.${envName}\", but not on the top level.\nThis is not what you probably want, since \"define\" configuration within environments can only override existing top level \"define\" configuration\nPlease remove \"${fieldPath}.${varName}\", or add \"define.${varName}\".`\n          );\n        }\n      }\n    }\n  }\n  return isValid2;\n}, \"validateDefines\");\nvar validateVars = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  let isValid2 = true;\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (value !== void 0) {\n    if (typeof value !== \"object\" || value === null) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n          value\n        )}.\n`\n      );\n      isValid2 = false;\n    } else {\n      for (const [varName, varValue] of Object.entries(value)) {\n        if (varValue instanceof Date) {\n          diagnostics.errors.push(\n            `The field \"${fieldPath}.${varName}\" is a TOML date, which is not supported. Please use a string instead, e.g. ${varName} = \"2025-12-19\".`\n          );\n          isValid2 = false;\n        }\n      }\n    }\n  }\n  const configVars = Object.keys(config?.vars ?? {});\n  if (configVars.length > 0) {\n    if (typeof value === \"object\" && value !== null) {\n      for (const varName of configVars) {\n        if (!(varName in value)) {\n          diagnostics.warnings.push(\n            `\"vars.${varName}\" exists at the top level, but not on \"${fieldPath}\".\nThis is not what you probably want, since \"vars\" configuration is not inherited by environments.\nPlease add \"vars.${varName}\" to \"env.${envName}\".`\n          );\n        }\n      }\n    }\n  }\n  return isValid2;\n}, \"validateVars\");\nvar validateSecrets = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  validateAdditionalProperties(diagnostics, fieldPath, Object.keys(value), [\n    \"required\"\n  ]);\n  isValid2 = validateOptionalTypedArray(\n    diagnostics,\n    `${fieldPath}.required`,\n    value.required,\n    \"string\"\n  ) && isValid2;\n  return isValid2;\n}, \"validateSecrets\");\nvar validateBindingsProperty = /* @__PURE__ */ __name((envName, validateBinding) => (diagnostics, field, value, config) => {\n  let isValid2 = true;\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (value !== void 0) {\n    if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n          value\n        )}.`\n      );\n      isValid2 = false;\n    } else if (!hasProperty(value, \"bindings\")) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}\" is missing the required \"bindings\" property.`\n      );\n      isValid2 = false;\n    } else if (!Array.isArray(value.bindings)) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}.bindings\" should be an array but got ${JSON.stringify(\n          value.bindings\n        )}.`\n      );\n      isValid2 = false;\n    } else {\n      for (let i = 0; i < value.bindings.length; i++) {\n        const binding = value.bindings[i];\n        const bindingDiagnostics = new Diagnostics(\n          `\"${fieldPath}.bindings[${i}]\": ${JSON.stringify(binding)}`\n        );\n        isValid2 = validateBinding(\n          bindingDiagnostics,\n          `${fieldPath}.bindings[${i}]`,\n          binding,\n          config\n        ) && isValid2;\n        diagnostics.addChild(bindingDiagnostics);\n      }\n    }\n    const configBindingNames = getBindingNames(\n      config?.[field]\n    );\n    if (isValid2 && configBindingNames.length > 0) {\n      const envBindingNames = new Set(getBindingNames(value));\n      const missingBindings = configBindingNames.filter(\n        (name) => !envBindingNames.has(name)\n      );\n      if (missingBindings.length > 0) {\n        diagnostics.warnings.push(\n          `The following bindings are at the top level, but not on \"env.${envName}\".\nThis is not what you probably want, since \"${field}\" configuration is not inherited by environments.\nPlease add a binding for each to \"${fieldPath}.bindings\":\n` + missingBindings.map((name) => `- ${name}`).join(\"\\n\")\n        );\n      }\n    }\n  }\n  return isValid2;\n}, \"validateBindingsProperty\");\nvar validateUnsafeSettings = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  if (hasProperty(value, \"bindings\") && value.bindings !== void 0) {\n    const validateBindingsFn = validateBindingsProperty(\n      envName,\n      validateUnsafeBinding\n    );\n    const valid = validateBindingsFn(diagnostics, field, value, config);\n    if (!valid) {\n      return false;\n    }\n  }\n  if (hasProperty(value, \"metadata\") && value.metadata !== void 0 && (typeof value.metadata !== \"object\" || value.metadata === null || Array.isArray(value.metadata))) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}.metadata\" should be an object but got ${JSON.stringify(\n        value.metadata\n      )}.`\n    );\n    return false;\n  }\n  if (hasProperty(value, \"capnp\") && value.capnp !== void 0) {\n    if (typeof value.capnp !== \"object\" || value.capnp === null || Array.isArray(value.capnp)) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}.capnp\" should be an object but got ${JSON.stringify(\n          value.capnp\n        )}.`\n      );\n      return false;\n    }\n    if (hasProperty(value.capnp, \"compiled_schema\")) {\n      if (hasProperty(value.capnp, \"base_path\") || hasProperty(value.capnp, \"source_schemas\")) {\n        diagnostics.errors.push(\n          `The field \"${fieldPath}.capnp\" cannot contain both \"compiled_schema\" and one of \"base_path\" or \"source_schemas\".`\n        );\n        return false;\n      }\n      if (typeof value.capnp.compiled_schema !== \"string\") {\n        diagnostics.errors.push(\n          `The field \"${fieldPath}.capnp.compiled_schema\", when present, should be a string but got ${JSON.stringify(\n            value.capnp.compiled_schema\n          )}.`\n        );\n        return false;\n      }\n    } else {\n      if (!isRequiredProperty(value.capnp, \"base_path\", \"string\")) {\n        diagnostics.errors.push(\n          `The field \"${fieldPath}.capnp.base_path\", when present, should be a string but got ${JSON.stringify(\n            value.capnp.base_path\n          )}`\n        );\n      }\n      if (!validateTypedArray(\n        diagnostics,\n        `${fieldPath}.capnp.source_schemas`,\n        value.capnp.source_schemas,\n        \"string\"\n      )) {\n        return false;\n      }\n    }\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"bindings\",\n    \"metadata\",\n    \"capnp\"\n  ]);\n  return true;\n}, \"validateUnsafeSettings\");\nvar validateDurableObjectBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an object but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"name\" field.`);\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"class_name\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"class_name\" field.`);\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"script_name\", \"string\")) {\n    diagnostics.errors.push(\n      `the field \"script_name\", when present, should be a string.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"environment\", \"string\")) {\n    diagnostics.errors.push(\n      `the field \"environment\", when present, should be a string.`\n    );\n    isValid2 = false;\n  }\n  if (\"environment\" in value && !(\"script_name\" in value)) {\n    diagnostics.errors.push(\n      `binding should have a \"script_name\" field if \"environment\" is present.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"class_name\",\n    \"environment\",\n    \"name\",\n    \"script_name\"\n  ]);\n  return isValid2;\n}, \"validateDurableObjectBinding\");\nvar workflowNameFormatMessage = `Workflow names must be 1-64 characters long, start with a letter, number, or underscore, and may only contain letters, numbers, underscores, or hyphens.`;\nvar validateWorkflowBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"workflows\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  } else if (!isValidWorkflowName(value.name)) {\n    diagnostics.errors.push(\n      `\"${field}\" binding \"name\" field is invalid. ${workflowNameFormatMessage}`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"class_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"class_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"script_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"script_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"remote\", \"boolean\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a boolean \"remote\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (hasProperty(value, \"limits\") && value.limits !== void 0) {\n    if (typeof value.limits !== \"object\" || value.limits === null || Array.isArray(value.limits)) {\n      diagnostics.errors.push(\n        `\"${field}\" bindings should, optionally, have an object \"limits\" field but got ${JSON.stringify(\n          value\n        )}.`\n      );\n      isValid2 = false;\n    } else {\n      const limits = value.limits;\n      if (limits.steps !== void 0) {\n        if (typeof limits.steps !== \"number\" || !Number.isInteger(limits.steps) || limits.steps < 1) {\n          diagnostics.errors.push(\n            `\"${field}\" bindings \"limits.steps\" field must be a positive integer but got ${JSON.stringify(\n              limits.steps\n            )}.`\n          );\n          isValid2 = false;\n        } else if (limits.steps > 25e3) {\n          diagnostics.warnings.push(\n            `\"${field}\" has a step limit of ${limits.steps}, which exceeds the production maximum of 25,000. This configuration may not work when deployed.`\n          );\n        }\n      }\n      validateAdditionalProperties(\n        diagnostics,\n        `${field}.limits`,\n        Object.keys(limits),\n        [\"steps\"]\n      );\n    }\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"name\",\n    \"class_name\",\n    \"script_name\",\n    \"remote\",\n    \"limits\"\n  ]);\n  return isValid2;\n}, \"validateWorkflowBinding\");\nvar validateCflogfwdrObject = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, topLevelEnv) => {\n  const bindingsValidation = validateBindingsProperty(\n    envName,\n    validateCflogfwdrBinding\n  );\n  if (!bindingsValidation(diagnostics, field, value, topLevelEnv)) {\n    return false;\n  }\n  const v = value;\n  if (v?.schema !== void 0) {\n    diagnostics.errors.push(\n      `\"${field}\" binding \"schema\" property has been replaced with the \"unsafe.capnp\" object, which expects a \"base_path\" and an array of \"source_schemas\" to compile, or a \"compiled_schema\" property.`\n    );\n    return false;\n  }\n  return true;\n}, \"validateCflogfwdrObject\");\nvar validateCflogfwdrBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be an object but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"name\" field.`);\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"destination\", \"string\")) {\n    diagnostics.errors.push(\n      `binding should have a string \"destination\" field.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"destination\",\n    \"name\"\n  ]);\n  return isValid2;\n}, \"validateCflogfwdrBinding\");\nvar validateAssetsConfig = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object, but got value ${JSON.stringify(\n        field\n      )} of type ${typeof value}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"directory\",\n    value.directory,\n    \"string\"\n  ) && isValid2;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"binding\",\n    value.binding,\n    \"string\"\n  ) && isValid2;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"html_handling\",\n    value.html_handling,\n    \"string\",\n    [\n      \"auto-trailing-slash\",\n      \"force-trailing-slash\",\n      \"drop-trailing-slash\",\n      \"none\"\n    ]\n  ) && isValid2;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"not_found_handling\",\n    value.not_found_handling,\n    \"string\",\n    [\"single-page-application\", \"404-page\", \"none\"]\n  ) && isValid2;\n  if (value.run_worker_first !== void 0) {\n    if (typeof value.run_worker_first === \"boolean\") {\n      isValid2 = validateOptionalProperty(\n        diagnostics,\n        field,\n        \"run_worker_first\",\n        value.run_worker_first,\n        \"boolean\"\n      ) && isValid2;\n    } else if (Array.isArray(value.run_worker_first)) {\n      isValid2 = validateOptionalTypedArray(\n        diagnostics,\n        \"assets.run_worker_first\",\n        value.run_worker_first,\n        \"string\"\n      ) && isValid2;\n    } else {\n      diagnostics.errors.push(\n        `The field \"${field}.run_worker_first\" should be an array of strings or a boolean, but got ${JSON.stringify(\n          value.run_worker_first\n        )}.`\n      );\n      isValid2 = false;\n    }\n  }\n  isValid2 = validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"directory\",\n    \"binding\",\n    \"html_handling\",\n    \"not_found_handling\",\n    \"run_worker_first\"\n  ]) && isValid2;\n  return isValid2;\n}, \"validateAssetsConfig\");\nvar validateNamedSimpleBinding = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"binding\" field.`);\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateNamedSimpleBinding\");\nvar validateAIBinding = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"binding\" field.`);\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateAIBinding\");\nvar validateVersionMetadataBinding = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"binding\" field.`);\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateVersionMetadataBinding\");\nvar validateUnsafeBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `Expected ${field} to be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(`binding should have a string \"name\" field.`);\n    isValid2 = false;\n  }\n  if (isRequiredProperty(value, \"type\", \"string\")) {\n    const safeBindings = [\n      \"plain_text\",\n      \"secret_text\",\n      \"json\",\n      \"wasm_module\",\n      \"data_blob\",\n      \"text_blob\",\n      \"browser\",\n      \"ai\",\n      \"ai_search_namespace\",\n      \"ai_search\",\n      \"kv_namespace\",\n      \"durable_object_namespace\",\n      \"d1_database\",\n      \"r2_bucket\",\n      \"service\",\n      \"logfwdr\",\n      \"mtls_certificate\",\n      \"pipeline\",\n      \"worker_loader\",\n      \"vpc_service\",\n      \"flagship\",\n      \"vpc_network\",\n      \"stream\",\n      \"media\",\n      \"artifacts\"\n    ];\n    if (safeBindings.includes(value.type)) {\n      diagnostics.warnings.push(\n        `The binding type \"${value.type}\" is directly supported by wrangler.\nConsider migrating this unsafe binding to a format for '${value.type}' bindings that is supported by wrangler for optimal support.\nFor more details, see https://developers.cloudflare.com/workers/cli-wrangler/configuration`\n      );\n    }\n    if (value.type === \"metadata\" && isRequiredProperty(value, \"name\", \"string\")) {\n      diagnostics.warnings.push(\n        \"The deployment object in the metadata binding is now deprecated. Please switch using the version_metadata binding for access to version specific fields: https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata\"\n      );\n    }\n  } else {\n    diagnostics.errors.push(`binding should have a string \"type\" field.`);\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateUnsafeBinding\");\nvar validateBindingArray = /* @__PURE__ */ __name((envName, validateBinding) => (diagnostics, field, envValue, config) => {\n  if (envValue === void 0) {\n    return true;\n  }\n  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n  if (!Array.isArray(envValue)) {\n    diagnostics.errors.push(\n      `The field \"${fieldPath}\" should be an array but got ${JSON.stringify(\n        envValue\n      )}.`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  for (let i = 0; i < envValue.length; i++) {\n    isValid2 = validateBinding(\n      diagnostics,\n      `${fieldPath}[${i}]`,\n      envValue[i],\n      config\n    ) && isValid2;\n  }\n  const configValue = config?.[field];\n  if (Array.isArray(configValue)) {\n    const configBindingNames = configValue.map((value) => value.binding);\n    if (configBindingNames.length > 0) {\n      const envBindingNames = new Set(envValue.map((value) => value.binding));\n      for (const configBindingName of configBindingNames) {\n        if (!envBindingNames.has(configBindingName)) {\n          diagnostics.warnings.push(\n            `There is a ${field} binding with name \"${configBindingName}\" at the top level, but not on \"env.${envName}\".\nThis is not what you probably want, since \"${field}\" configuration is not inherited by environments.\nPlease add a binding for \"${configBindingName}\" to \"env.${envName}.${field}.bindings\".`\n          );\n        }\n      }\n    }\n  }\n  return isValid2;\n}, \"validateBindingArray\");\nfunction validateContainerApp(envName, topLevelName, configPath) {\n  return (diagnostics, field, value, config) => {\n    if (!value) {\n      return true;\n    }\n    if (!Array.isArray(value)) {\n      diagnostics.errors.push(\n        `\"containers\" field should be an array, but got ${JSON.stringify(value)}`\n      );\n      return false;\n    }\n    for (const containerAppOptional of value) {\n      if (!isOptionalProperty(value, \"name\", \"string\")) {\n        diagnostics.errors.push(\n          `Field \"name\", when present, should be a string, but got ${JSON.stringify(value)}`\n        );\n      }\n      validateRequiredProperty(\n        diagnostics,\n        field,\n        \"class_name\",\n        containerAppOptional.class_name,\n        \"string\"\n      );\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"name\",\n        containerAppOptional.name,\n        \"string\"\n      );\n      if (!containerAppOptional.name) {\n        if (!topLevelName || !isOptionalProperty(containerAppOptional, \"class_name\", \"string\")) {\n          diagnostics.errors.push(\n            `Must have either a top level \"name\" and \"containers.class_name\" field defined, or have field \"containers.name\" defined.`\n          );\n        }\n        let name = `${topLevelName}-${containerAppOptional.class_name}`;\n        name += config === void 0 ? \"\" : `-${envName}`;\n        containerAppOptional.name = name.toLowerCase().replace(/ /g, \"-\");\n      }\n      if (!containerAppOptional.configuration?.image && !containerAppOptional.image) {\n        diagnostics.errors.push(\n          `\"containers.image\" field must be defined for each container app. This should be the path to your Dockerfile or an image URI pointing to the Cloudflare registry.`\n        );\n      }\n      if (\"configuration\" in containerAppOptional) {\n        diagnostics.warnings.push(\n          `\"containers.configuration\" is deprecated. Use top level \"containers\" fields instead. \"configuration.image\" should be \"image\", limits should be set via \"instance_type\".`\n        );\n        if (typeof containerAppOptional.configuration !== \"object\" || Array.isArray(containerAppOptional.configuration)) {\n          diagnostics.errors.push(\n            `\"containers.configuration\" should be an object`\n          );\n        }\n        if (containerAppOptional.instance_type && (containerAppOptional.configuration.disk !== void 0 || containerAppOptional.configuration.vcpu !== void 0 || containerAppOptional.configuration.memory_mib !== void 0)) {\n          diagnostics.errors.push(\n            `Cannot set custom limits via \"containers.configuration\" and use preset \"instance_type\" limits at the same time.`\n          );\n        }\n      }\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"image_build_context\",\n        containerAppOptional.image_build_context,\n        \"string\"\n      );\n      let resolvedImage = containerAppOptional.image ?? containerAppOptional.configuration?.image;\n      let resolvedBuildContextPath = void 0;\n      try {\n        if (isDockerfile(resolvedImage, configPath)) {\n          const baseDir = configPath ? path3.dirname(configPath) : process.cwd();\n          resolvedImage = path3.resolve(baseDir, resolvedImage);\n          resolvedBuildContextPath = containerAppOptional.image_build_context ? path3.resolve(baseDir, containerAppOptional.image_build_context) : path3.dirname(resolvedImage);\n        }\n      } catch (err) {\n        if (err instanceof Error && err.message) {\n          diagnostics.errors.push(err.message);\n        } else {\n          throw err;\n        }\n      }\n      containerAppOptional.image = resolvedImage;\n      containerAppOptional.image_build_context = resolvedBuildContextPath;\n      if (containerAppOptional.rollout_step_percentage !== void 0) {\n        const rolloutStep = containerAppOptional.rollout_step_percentage;\n        if (typeof rolloutStep === \"number\") {\n          const allowedSingleValues = [5, 10, 20, 25, 50, 100];\n          if (!allowedSingleValues.includes(rolloutStep)) {\n            diagnostics.errors.push(\n              `\"containers.rollout_step_percentage\" must be one of [5, 10, 20, 25, 50, 100], but got ${rolloutStep}`\n            );\n          }\n        } else if (Array.isArray(rolloutStep)) {\n          const nonNumber = [];\n          const outOfRange = [];\n          let index = 0;\n          let ascending = true;\n          for (const step of rolloutStep) {\n            if (typeof step !== \"number\") {\n              nonNumber.push(step);\n            } else {\n              if (step < 10 || step > 100) {\n                outOfRange.push(step);\n              }\n              if (ascending && index > 0 && step < rolloutStep[index - 1]) {\n                diagnostics.errors.push(\n                  `\"containers.rollout_step_percentage\" array elements must be in ascending order, but got \"${rolloutStep}\"`\n                );\n                ascending = false;\n              }\n              if (index === rolloutStep.length - 1 && step !== 100) {\n                diagnostics.errors.push(\n                  `The final step in \"containers.rollout_step_percentage\" must be 100, but got \"${step}\"`\n                );\n              }\n              index++;\n            }\n          }\n          if (nonNumber.length) {\n            diagnostics.errors.push(\n              `\"containers.rollout_step_percentage\" array elements must be numbers, but got \"${nonNumber.join(\", \")}\"`\n            );\n          }\n          if (outOfRange.length) {\n            diagnostics.errors.push(\n              `\"containers.rollout_step_percentage\" array elements must be between 10 and 100, but got \"${outOfRange.join(\", \")}\"`\n            );\n          }\n        } else {\n          diagnostics.errors.push(\n            `\"containers.rollout_step_percentage\" must be a number or array of numbers, but got \"${rolloutStep}\"`\n          );\n        }\n      }\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"rollout_kind\",\n        containerAppOptional.rollout_kind,\n        \"string\",\n        [\"full_auto\", \"full_manual\", \"none\"]\n      );\n      if (!isOptionalProperty(\n        containerAppOptional,\n        \"rollout_active_grace_period\",\n        \"number\"\n      ) || containerAppOptional.rollout_active_grace_period < 0) {\n        diagnostics.errors.push(\n          `\"containers.rollout_active_grace_period\" field should be a positive number but got \"${containerAppOptional.rollout_active_grace_period}\"`\n        );\n      }\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"max_instances\",\n        containerAppOptional.max_instances,\n        \"number\"\n      );\n      if (containerAppOptional.max_instances !== void 0 && containerAppOptional.max_instances < 0) {\n        diagnostics.errors.push(\n          `\"containers.max_instances\" field should be a positive number, but got ${containerAppOptional.max_instances}`\n        );\n      }\n      if (containerAppOptional.rollout_step_percentage !== void 0 && containerAppOptional.max_instances !== void 0 && Array.isArray(containerAppOptional.rollout_step_percentage)) {\n        const rolloutStepsCount = containerAppOptional.rollout_step_percentage.length;\n        if (rolloutStepsCount > containerAppOptional.max_instances) {\n          diagnostics.errors.push(\n            `\"containers.rollout_step_percentage\" cannot have more steps (${rolloutStepsCount}) than \"max_instances\" (${containerAppOptional.max_instances})`\n          );\n        }\n      }\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"image_vars\",\n        containerAppOptional.image_vars,\n        \"object\"\n      );\n      validateOptionalProperty(\n        diagnostics,\n        field,\n        \"scheduling_policy\",\n        containerAppOptional.scheduling_policy,\n        \"string\",\n        [\"regional\", \"moon\", \"default\"]\n      );\n      if (\"instances\" in containerAppOptional) {\n        diagnostics.warnings.push(\n          `\"containers.instances\" is deprecated. Use \"containers.max_instances\" instead.`\n        );\n      }\n      if (\"durable_objects\" in containerAppOptional) {\n        diagnostics.warnings.push(\n          `\"containers.durable_objects\" is deprecated. Use the \"class_name\" field instead.`\n        );\n      }\n      if (\"wrangler_ssh\" in containerAppOptional) {\n        diagnostics.warnings.push(\n          `\"containers.wrangler_ssh\" is deprecated. Use \"containers.ssh\" instead.`\n        );\n      }\n      if (\"unsafe\" in containerAppOptional) {\n        if (containerAppOptional.unsafe && typeof containerAppOptional.unsafe !== \"object\" || Array.isArray(containerAppOptional.unsafe)) {\n          diagnostics.errors.push(\n            `The field \"containers.unsafe\" should be an object but got ${JSON.stringify(\n              typeof containerAppOptional.unsafe\n            )}.`\n          );\n        }\n      }\n      validateAdditionalProperties(\n        diagnostics,\n        field,\n        Object.keys(containerAppOptional),\n        [\n          \"name\",\n          \"instances\",\n          \"max_instances\",\n          \"image\",\n          \"image_build_context\",\n          \"image_vars\",\n          \"class_name\",\n          \"scheduling_policy\",\n          \"instance_type\",\n          \"ssh\",\n          \"wrangler_ssh\",\n          \"authorized_keys\",\n          \"trusted_user_ca_keys\",\n          \"configuration\",\n          \"constraints\",\n          \"affinities\",\n          \"rollout_step_percentage\",\n          \"rollout_kind\",\n          \"durable_objects\",\n          \"rollout_active_grace_period\",\n          \"unsafe\"\n        ]\n      );\n      if (\"configuration\" in containerAppOptional) {\n        validateAdditionalProperties(\n          diagnostics,\n          `${field}.configuration`,\n          Object.keys(containerAppOptional.configuration),\n          [\"image\", \"secrets\", \"labels\", \"disk\", \"vcpu\", \"memory_mib\"]\n        );\n      }\n      let sshField;\n      let sshConfig;\n      if (\"ssh\" in containerAppOptional) {\n        sshField = \"ssh\";\n        sshConfig = containerAppOptional.ssh;\n        containerAppOptional.wrangler_ssh = containerAppOptional.ssh;\n        delete containerAppOptional.ssh;\n      } else if (\"wrangler_ssh\" in containerAppOptional) {\n        sshField = \"wrangler_ssh\";\n        sshConfig = containerAppOptional.wrangler_ssh;\n      }\n      if (sshField !== void 0) {\n        const sshConfigObject = typeof sshConfig === \"object\" && sshConfig !== null ? sshConfig : {};\n        if (!isRequiredProperty(sshConfigObject, \"enabled\", \"boolean\")) {\n          diagnostics.errors.push(\n            `${field}.${sshField}.enabled must be a boolean`\n          );\n        }\n        const sshPort = \"port\" in sshConfigObject ? sshConfigObject.port : void 0;\n        if (!isOptionalProperty(sshConfigObject, \"port\", \"number\") || typeof sshPort === \"number\" && (sshPort < 1 || sshPort > 65535)) {\n          diagnostics.errors.push(\n            `${field}.${sshField}.port must be a number between 1 and 65535 inclusive`\n          );\n        }\n      }\n      if (\"authorized_keys\" in containerAppOptional) {\n        if (!Array.isArray(containerAppOptional.authorized_keys)) {\n          diagnostics.errors.push(`${field}.authorized_keys must be an array`);\n        } else {\n          for (const index in containerAppOptional.authorized_keys) {\n            const fieldPath = `${field}.authorized_keys[${index}]`;\n            const key = containerAppOptional.authorized_keys[index];\n            if (!isRequiredProperty(key, \"name\", \"string\")) {\n              diagnostics.errors.push(`${fieldPath}.name must be a string`);\n            }\n            if (!isRequiredProperty(key, \"public_key\", \"string\")) {\n              diagnostics.errors.push(\n                `${fieldPath}.public_key must be a string`\n              );\n            }\n            if (!key.public_key.toLowerCase().startsWith(\"ssh-ed25519\")) {\n              diagnostics.errors.push(\n                `${fieldPath}.public_key is a unsupported key type. Please provide a ED25519 public key.`\n              );\n            }\n          }\n        }\n      }\n      if (\"trusted_user_ca_keys\" in containerAppOptional) {\n        if (!Array.isArray(containerAppOptional.trusted_user_ca_keys)) {\n          diagnostics.errors.push(\n            `${field}.trusted_user_ca_keys must be an array`\n          );\n        } else {\n          for (const index in containerAppOptional.trusted_user_ca_keys) {\n            const fieldPath = `${field}.trusted_user_ca_keys[${index}]`;\n            const key = containerAppOptional.trusted_user_ca_keys[index];\n            if (!isOptionalProperty(key, \"name\", \"string\")) {\n              diagnostics.errors.push(`${fieldPath}.name must be a string`);\n            }\n            if (!isRequiredProperty(key, \"public_key\", \"string\")) {\n              diagnostics.errors.push(\n                `${fieldPath}.public_key must be a string`\n              );\n            }\n            if (!key.public_key.toLowerCase().startsWith(\"ssh-ed25519\")) {\n              diagnostics.errors.push(\n                `${fieldPath}.public_key is a unsupported key type. Please provide a ED25519 public key.`\n              );\n            }\n          }\n        }\n      }\n      if (validateOptionalProperty(\n        diagnostics,\n        field,\n        \"constraints\",\n        containerAppOptional.constraints,\n        \"object\"\n      ) && containerAppOptional.constraints) {\n        const constraints = containerAppOptional.constraints;\n        if (\"tier\" in constraints) {\n          diagnostics.warnings.push(\n            `\"constraints.tier\" has been deprecated in favor of \"constraints.tiers\". Please update your configuration to use \"constraints.tiers\" instead.`\n          );\n          if (\"tiers\" in constraints) {\n            diagnostics.errors.push(\n              `${field}.constraints.tier and ${field}.constraints.tiers cannot both be set`\n            );\n          }\n        }\n        validateOptionalTypedArray(\n          diagnostics,\n          `${field}.constraints.tiers`,\n          constraints.tiers,\n          \"number\"\n        );\n        validateOptionalProperty(\n          diagnostics,\n          `${field}.constraints`,\n          \"jurisdiction\",\n          constraints.jurisdiction,\n          \"string\"\n        );\n        if (constraints.jurisdiction && ![\"eu\", \"fedramp\"].includes(constraints.jurisdiction)) {\n          diagnostics.errors.push(\n            `${field}.constraints.jurisdiction must be one of: \"eu\", \"fedramp\"`\n          );\n        }\n        if (validateOptionalTypedArray(\n          diagnostics,\n          `${field}.constraints.regions`,\n          constraints.regions,\n          \"string\"\n        ) && constraints.regions && Array.isArray(constraints.regions)) {\n          const validRegions = [\n            \"ENAM\",\n            \"WNAM\",\n            \"EEUR\",\n            \"WEUR\",\n            \"APAC\",\n            \"SAM\",\n            \"ME\",\n            \"OC\",\n            \"AFR\"\n          ];\n          for (const region of constraints.regions) {\n            if (typeof region === \"string\" && !validRegions.includes(region.toUpperCase())) {\n              diagnostics.errors.push(\n                `${field}.constraints.regions contains invalid region \"${region}\". Valid regions are: ${validRegions.join(\", \")}`\n              );\n            }\n          }\n        }\n      }\n      if (typeof containerAppOptional.instance_type === \"string\") {\n        validateOptionalProperty(\n          diagnostics,\n          field,\n          \"instance_type\",\n          containerAppOptional.instance_type,\n          \"string\",\n          ALLOWED_INSTANCE_TYPES\n        );\n        if (containerAppOptional.instance_type === \"dev\") {\n          diagnostics.warnings.push(\n            `The \"dev\" instance_type has been renamed to \"lite\" and will be removed in a subsequent version. Please update your configuration to use \"lite\" instead.`\n          );\n        }\n        if (containerAppOptional.instance_type === \"standard\") {\n          diagnostics.warnings.push(\n            `The \"standard\" instance_type has been renamed to \"standard-1\" and will be removed in a subsequent version. Please update your configuration to use \"standard-1\" instead.`\n          );\n        }\n      } else if (validateOptionalProperty(\n        diagnostics,\n        field,\n        \"instance_type\",\n        containerAppOptional.instance_type,\n        \"object\"\n      ) && containerAppOptional.instance_type) {\n        const instanceTypeProperties = [\"vcpu\", \"memory_mib\", \"disk_mb\"];\n        instanceTypeProperties.forEach((key) => {\n          if (!isOptionalProperty(\n            containerAppOptional.instance_type,\n            key,\n            \"number\"\n          )) {\n            diagnostics.errors.push(\n              `\"containers.instance_type.${key}\", when present, should be a number.`\n            );\n          }\n        });\n        validateAdditionalProperties(\n          diagnostics,\n          `${field}.instance_type`,\n          Object.keys(containerAppOptional.instance_type),\n          instanceTypeProperties\n        );\n      }\n    }\n    if (diagnostics.errors.length > 0) {\n      return false;\n    }\n    return true;\n  };\n}\n__name(validateContainerApp, \"validateContainerApp\");\nvar validateCloudchamberConfig = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `\"cloudchamber\" should be an object, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  const optionalAttrsByType = {\n    string: [\"memory\", \"image\", \"location\"],\n    boolean: [\"ipv4\"],\n    number: [\"vcpu\"]\n  };\n  let isValid2 = true;\n  Object.entries(optionalAttrsByType).forEach(([attrType, attrNames]) => {\n    attrNames.forEach((key) => {\n      if (!isOptionalProperty(value, key, attrType)) {\n        diagnostics.errors.push(\n          `\"${field}\" bindings should, optionally, have a ${attrType} \"${key}\" field but got ${JSON.stringify(\n            value\n          )}.`\n        );\n        isValid2 = false;\n      }\n    });\n  });\n  if (\"instance_type\" in value && value.instance_type !== void 0) {\n    if (typeof value.instance_type !== \"string\" || !ALLOWED_INSTANCE_TYPES.includes(value.instance_type)) {\n      diagnostics.errors.push(\n        `\"instance_type\" should be one of 'lite', 'basic', 'standard-1', 'standard-2', 'standard-3', or 'standard-4', but got ${value.instance_type}`\n      );\n    }\n    if (\"memory\" in value && value.memory !== void 0 || \"vcpu\" in value && value.vcpu !== void 0) {\n      diagnostics.errors.push(\n        `\"${field}\" configuration should not set either \"memory\" or \"vcpu\" with \"instance_type\"`\n      );\n    }\n  }\n  return isValid2;\n}, \"validateCloudchamberConfig\");\nvar validateKVBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"kv_namespaces\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"id\", \"string\") || value.id !== void 0 && value.id.length === 0) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"preview_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"preview_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"id\",\n    \"preview_id\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateKVBinding\");\nvar validateSendEmailBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"send_email\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"destination_address\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"destination_address\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"allowed_destination_addresses\", \"object\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a []string \"allowed_destination_addresses\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"allowed_sender_addresses\", \"object\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a []string \"allowed_sender_addresses\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (\"destination_address\" in value && \"allowed_destination_addresses\" in value) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have either a \"destination_address\" or \"allowed_destination_addresses\" field, but not both.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"allowed_sender_addresses\",\n    \"allowed_destination_addresses\",\n    \"destination_address\",\n    \"name\",\n    \"binding\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateSendEmailBinding\");\nvar validateQueueBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"queue\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  if (!validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"queue\",\n    \"delivery_delay\",\n    \"remote\"\n  ])) {\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"queue\", \"string\") || value.queue.length === 0) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"queue\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  const options = [{ key: \"delivery_delay\", type: \"number\" }];\n  for (const optionalOpt of options) {\n    if (!isOptionalProperty(value, optionalOpt.key, optionalOpt.type)) {\n      diagnostics.errors.push(\n        `\"${field}\" should, optionally, have a ${optionalOpt.type} \"${optionalOpt.key}\" field but got ${JSON.stringify(value)}.`\n      );\n      isValid2 = false;\n    }\n  }\n  if (hasProperty(value, \"delivery_delay\") && value.delivery_delay !== void 0) {\n    diagnostics.warnings.push(\n      `The \"delivery_delay\" field in \"${field}\" is deprecated and has no effect. Queue-level settings should be configured using \"wrangler queues update\" instead. This setting will be removed in a future version.`\n    );\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateQueueBinding\");\nvar validateR2Binding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"r2_buckets\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"bucket_name\", \"string\") || value.bucket_name !== void 0 && value.bucket_name.length === 0) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"bucket_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (isValid2 && hasProperty(value, \"bucket_name\") && !isValidR2BucketName(value.bucket_name)) {\n    diagnostics.errors.push(\n      `${field}.bucket_name=${JSON.stringify(value.bucket_name)} is invalid. ${bucketFormatMessage}`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"preview_bucket_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"preview_bucket_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (isValid2 && hasProperty(value, \"preview_bucket_name\") && !isValidR2BucketName(value.preview_bucket_name)) {\n    diagnostics.errors.push(\n      `${field}.preview_bucket_name= ${JSON.stringify(value.preview_bucket_name)} is invalid. ${bucketFormatMessage}`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"jurisdiction\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"jurisdiction\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"bucket_name\",\n    \"preview_bucket_name\",\n    \"jurisdiction\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateR2Binding\");\nvar validateD1Binding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"d1_databases\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"database_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a \"database_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"preview_database_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"preview_database_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"database_id\",\n    \"database_internal_env\",\n    \"database_name\",\n    \"migrations_dir\",\n    \"migrations_table\",\n    \"preview_database_id\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateD1Binding\");\nvar validateVectorizeBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"vectorize\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"index_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have an \"index_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"index_name\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateVectorizeBinding\");\nvar validateAISearchNamespaceBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"ai_search_namespaces\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(value)}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"namespace\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a \"namespace\" field but got ${JSON.stringify(value)}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"namespace\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateAISearchNamespaceBinding\");\nvar validateAISearchBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"ai_search\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(value)}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"instance_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have an \"instance_name\" field but got ${JSON.stringify(value)}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"instance_name\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateAISearchBinding\");\nvar validateHyperdriveBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"hyperdrive\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a \"id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"id\",\n    \"localConnectionString\"\n  ]);\n  return isValid2;\n}, \"validateHyperdriveBinding\");\nvar validateVpcServiceBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"vpc_services\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"service_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a \"service_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"service_id\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateVpcServiceBinding\");\nvar validateVpcNetworkBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"vpc_networks\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  const hasTunnelId = hasProperty(value, \"tunnel_id\");\n  const hasNetworkId = hasProperty(value, \"network_id\");\n  if (hasTunnelId && hasNetworkId) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have either a \"tunnel_id\" or \"network_id\", but not both.`\n    );\n    isValid2 = false;\n  } else if (!hasTunnelId && !hasNetworkId) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have either a \"tunnel_id\" or \"network_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  } else if (hasTunnelId && typeof value.tunnel_id !== \"string\") {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"tunnel_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  } else if (hasNetworkId && typeof value.network_id !== \"string\") {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"network_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"tunnel_id\",\n    \"network_id\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validateVpcNetworkBinding\");\nvar validateBindingsHaveUniqueNames = /* @__PURE__ */ __name((diagnostics, config) => {\n  let hasDuplicates = false;\n  const bindingNamesArray = Object.entries(friendlyBindingNames);\n  const bindingsGroupedByType = Object.fromEntries(\n    bindingNamesArray.map(([bindingType, binding]) => [\n      binding,\n      getBindingNames(\n        bindingType === \"queues\" ? config[bindingType]?.producers : config[bindingType]\n      )\n    ])\n  );\n  bindingsGroupedByType[\"Secret\"] = config.secrets?.required ?? [];\n  const bindingsGroupedByName = {};\n  for (const bindingType in bindingsGroupedByType) {\n    const bindingNames = bindingsGroupedByType[bindingType];\n    for (const bindingName of bindingNames) {\n      if (!(bindingName in bindingsGroupedByName)) {\n        bindingsGroupedByName[bindingName] = [];\n      }\n      if (bindingName === \"ASSETS\" && isPagesConfig(config)) {\n        diagnostics.errors.push(\n          `The name 'ASSETS' is reserved in Pages projects. Please use a different name for your ${bindingType} binding.`\n        );\n      }\n      bindingsGroupedByName[bindingName].push(bindingType);\n    }\n  }\n  for (const bindingName in bindingsGroupedByName) {\n    const bindingTypes = bindingsGroupedByName[bindingName];\n    if (bindingTypes.length < 2) {\n      continue;\n    }\n    hasDuplicates = true;\n    const sameType = bindingTypes.filter((type, i) => bindingTypes.indexOf(type) !== i).filter(\n      (type, i, duplicateBindingTypes) => duplicateBindingTypes.indexOf(type) === i\n    );\n    const differentTypes = bindingTypes.filter(\n      (type, i) => bindingTypes.indexOf(type) === i\n    );\n    if (differentTypes.length > 1) {\n      diagnostics.errors.push(\n        `${bindingName} assigned to ${ENGLISH.format(differentTypes)} bindings.`\n      );\n    }\n    sameType.forEach((bindingType) => {\n      diagnostics.errors.push(\n        `${bindingName} assigned to multiple ${bindingType} bindings.`\n      );\n    });\n  }\n  if (hasDuplicates) {\n    const problem = \"Bindings must have unique names, so that they can all be referenced in the worker.\";\n    const resolution = \"Please change your bindings to have unique names.\";\n    diagnostics.errors.push(`${problem}\n${resolution}`);\n  }\n  return !hasDuplicates;\n}, \"validateBindingsHaveUniqueNames\");\nvar validateServiceBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"services\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"service\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"service\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"environment\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"environment\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"entrypoint\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"entrypoint\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateServiceBinding\");\nvar validateAnalyticsEngineBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"analytics_engine\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"dataset\", \"string\") || value.dataset?.length === 0) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should, optionally, have a string \"dataset\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"dataset\"\n  ]);\n  return isValid2;\n}, \"validateAnalyticsEngineBinding\");\nvar validateWorkerNamespaceBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" binding should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"namespace\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" should have a string \"namespace\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (hasProperty(value, \"outbound\")) {\n    if (!validateWorkerNamespaceOutbound(\n      diagnostics,\n      `${field}.outbound`,\n      value.outbound ?? {}\n    )) {\n      diagnostics.errors.push(`\"${field}\" has an invalid outbound definition.`);\n      isValid2 = false;\n    }\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateWorkerNamespaceBinding\");\nfunction validateWorkerNamespaceOutbound(diagnostics, field, value) {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  isValid2 = isValid2 && validateRequiredProperty(\n    diagnostics,\n    field,\n    \"service\",\n    value.service,\n    \"string\"\n  );\n  isValid2 = isValid2 && validateOptionalProperty(\n    diagnostics,\n    field,\n    \"environment\",\n    value.environment,\n    \"string\"\n  );\n  isValid2 = isValid2 && validateOptionalTypedArray(\n    diagnostics,\n    `${field}.parameters`,\n    value.parameters,\n    \"string\"\n  );\n  return isValid2;\n}\n__name(validateWorkerNamespaceOutbound, \"validateWorkerNamespaceOutbound\");\nvar validateMTlsCertificateBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"mtls_certificates\" bindings should be objects, but got ${JSON.stringify(\n        value\n      )}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"certificate_id\", \"string\") || value.certificate_id.length === 0) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings should have a string \"certificate_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"certificate_id\",\n    \"remote\"\n  ]);\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateMTlsCertificateBinding\");\nfunction validateQueues(envName) {\n  return (diagnostics, field, value, config) => {\n    if (value === void 0) {\n      return true;\n    }\n    const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;\n    if (typeof value !== \"object\" || Array.isArray(value) || value === null) {\n      diagnostics.errors.push(\n        `The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n          value\n        )}.`\n      );\n      return false;\n    }\n    let isValid2 = true;\n    if (!validateAdditionalProperties(\n      diagnostics,\n      fieldPath,\n      Object.keys(value),\n      [\"consumers\", \"producers\"]\n    )) {\n      isValid2 = false;\n    }\n    if (hasProperty(value, \"consumers\")) {\n      const consumers = value.consumers;\n      if (!Array.isArray(consumers)) {\n        diagnostics.errors.push(\n          `The field \"${fieldPath}.consumers\" should be an array but got ${JSON.stringify(\n            consumers\n          )}.`\n        );\n        isValid2 = false;\n      }\n      for (let i = 0; i < consumers.length; i++) {\n        const consumer = consumers[i];\n        const consumerPath = `${fieldPath}.consumers[${i}]`;\n        if (!validateConsumer(diagnostics, consumerPath, consumer, config)) {\n          isValid2 = false;\n        }\n      }\n    }\n    if (hasProperty(value, \"producers\")) {\n      if (!validateBindingArray(envName, validateQueueBinding)(\n        diagnostics,\n        `${field}.producers`,\n        value.producers,\n        config\n      )) {\n        isValid2 = false;\n      }\n    }\n    return isValid2;\n  };\n}\n__name(validateQueues, \"validateQueues\");\nvar validateConsumer = /* @__PURE__ */ __name((diagnostics, field, value, _config) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be a objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"queue\",\n    \"type\",\n    \"max_batch_size\",\n    \"max_batch_timeout\",\n    \"max_retries\",\n    \"dead_letter_queue\",\n    \"max_concurrency\",\n    \"visibility_timeout_ms\",\n    \"retry_delay\"\n  ])) {\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"queue\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" should have a string \"queue\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n  }\n  if (\"type\" in value && value.type !== void 0 && value.type !== \"worker\") {\n    diagnostics.errors.push(\n      `\"${field}.type\" has an invalid value \"${value.type}\". Only \"worker\" consumers can be configured in your Wrangler configuration.`\n    );\n    isValid2 = false;\n  }\n  const options = [\n    { key: \"type\", type: \"string\" },\n    { key: \"max_batch_size\", type: \"number\" },\n    { key: \"max_batch_timeout\", type: \"number\" },\n    { key: \"max_retries\", type: \"number\" },\n    { key: \"dead_letter_queue\", type: \"string\" },\n    { key: \"max_concurrency\", type: \"number\" },\n    { key: \"visibility_timeout_ms\", type: \"number\" },\n    { key: \"retry_delay\", type: \"number\" }\n  ];\n  for (const optionalOpt of options) {\n    if (!isOptionalProperty(value, optionalOpt.key, optionalOpt.type)) {\n      diagnostics.errors.push(\n        `\"${field}\" should, optionally, have a ${optionalOpt.type} \"${optionalOpt.key}\" field but got ${JSON.stringify(value)}.`\n      );\n      isValid2 = false;\n    }\n  }\n  return isValid2;\n}, \"validateConsumer\");\nvar validateCompatibilityDate = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"string\") {\n    diagnostics.errors.push(\n      `Expected \"${field}\" to be of type string but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  return isValidDateTimeStringFormat(diagnostics, field, value);\n}, \"validateCompatibilityDate\");\nvar validatePipelineBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"pipeline\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"pipeline\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"pipeline\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"pipeline\",\n    \"remote\"\n  ]);\n  return isValid2;\n}, \"validatePipelineBinding\");\nvar validateSecretsStoreSecretBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"secrets_store_secrets\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"store_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"store_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"secret_name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"secret_name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"store_id\",\n    \"secret_name\"\n  ]);\n  return isValid2;\n}, \"validateSecretsStoreSecretBinding\");\nvar validateArtifactsBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"artifacts\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"namespace\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"namespace\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"namespace\",\n    \"remote\"\n  ]);\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateArtifactsBinding\");\nvar validateHelloWorldBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"unsafe_hello_world\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isOptionalProperty(value, \"enable_timer\", \"boolean\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a boolean \"enable_timer\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"enable_timer\"\n  ]);\n  return isValid2;\n}, \"validateHelloWorldBinding\");\nvar validateFlagshipBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"flagship\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"app_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"app_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\",\n    \"app_id\",\n    \"remote\"\n  ]);\n  if (!isRemoteValid(value, field, diagnostics)) {\n    isValid2 = false;\n  }\n  return isValid2;\n}, \"validateFlagshipBinding\");\nvar validateWorkerLoaderBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"worker_loader\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"binding\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"binding\"\n  ]);\n  return isValid2;\n}, \"validateWorkerLoaderBinding\");\nvar validateRateLimitBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"ratelimits\" bindings should be objects, but got ${JSON.stringify(value)}`\n    );\n    return false;\n  }\n  let isValid2 = true;\n  if (!isRequiredProperty(value, \"name\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"name\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!isRequiredProperty(value, \"namespace_id\", \"string\")) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a string \"namespace_id\" field but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  }\n  if (!hasProperty(value, \"simple\") || typeof value.simple !== \"object\" || value.simple === null) {\n    diagnostics.errors.push(\n      `\"${field}\" bindings must have a \"simple\" configuration object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    isValid2 = false;\n  } else {\n    if (!isRequiredProperty(value.simple, \"limit\", \"number\")) {\n      diagnostics.errors.push(\n        `\"${field}\" bindings \"simple.limit\" must be a number but got ${JSON.stringify(\n          value.simple\n        )}.`\n      );\n      isValid2 = false;\n    }\n    if (!isRequiredProperty(value.simple, \"period\", \"number\")) {\n      diagnostics.errors.push(\n        `\"${field}\" bindings \"simple.period\" is required and must be a number but got ${JSON.stringify(\n          value.simple\n        )}.`\n      );\n      isValid2 = false;\n    } else if (![10, 60].includes(value.simple.period)) {\n      diagnostics.errors.push(\n        `\"${field}\" bindings \"simple.period\" must be either 10 or 60 but got ${JSON.stringify(\n          value.simple.period\n        )}.`\n      );\n      isValid2 = false;\n    }\n    validateAdditionalProperties(\n      diagnostics,\n      `${field}.simple`,\n      Object.keys(value.simple),\n      [\"limit\", \"period\"]\n    );\n  }\n  validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n    \"name\",\n    \"namespace_id\",\n    \"simple\"\n  ]);\n  return isValid2;\n}, \"validateRateLimitBinding\");\nfunction normalizeAndValidateLimits(diagnostics, topLevelEnv, rawEnv) {\n  if (rawEnv.limits) {\n    validateOptionalProperty(\n      diagnostics,\n      \"limits\",\n      \"cpu_ms\",\n      rawEnv.limits.cpu_ms,\n      \"number\"\n    );\n    validateOptionalProperty(\n      diagnostics,\n      \"limits\",\n      \"subrequests\",\n      rawEnv.limits.subrequests,\n      \"number\"\n    );\n  }\n  return inheritable(\n    diagnostics,\n    topLevelEnv,\n    rawEnv,\n    \"limits\",\n    () => true,\n    void 0\n  );\n}\n__name(normalizeAndValidateLimits, \"normalizeAndValidateLimits\");\nvar validatePreviewsConfig = /* @__PURE__ */ __name((envName) => (diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `The field \"${field}\" should be an object but got ${JSON.stringify(\n        value\n      )}.`\n    );\n    return false;\n  }\n  const previews = value;\n  let isValid2 = true;\n  isValid2 = validateAdditionalProperties(diagnostics, field, Object.keys(previews), [\n    \"vars\",\n    \"define\",\n    \"durable_objects\",\n    \"workflows\",\n    \"kv_namespaces\",\n    \"send_email\",\n    \"queues\",\n    \"d1_databases\",\n    \"r2_buckets\",\n    \"vectorize\",\n    \"hyperdrive\",\n    \"services\",\n    \"analytics_engine_datasets\",\n    \"dispatch_namespaces\",\n    \"mtls_certificates\",\n    \"tail_consumers\",\n    \"streaming_tail_consumers\",\n    \"unsafe\",\n    \"browser\",\n    \"ai\",\n    \"images\",\n    \"stream\",\n    \"media\",\n    \"pipelines\",\n    \"secrets_store_secrets\",\n    \"artifacts\",\n    \"unsafe_hello_world\",\n    \"flagship\",\n    \"worker_loaders\",\n    \"ratelimits\",\n    \"vpc_services\",\n    \"version_metadata\",\n    \"logpush\",\n    \"observability\",\n    \"limits\",\n    \"cache\"\n  ]) && isValid2;\n  isValid2 = validateVars(envName)(\n    diagnostics,\n    `${field}.vars`,\n    previews.vars,\n    void 0\n  ) && isValid2;\n  isValid2 = validateDefines(envName)(\n    diagnostics,\n    `${field}.define`,\n    previews.define,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingsProperty(envName, validateDurableObjectBinding)(\n    diagnostics,\n    `${field}.durable_objects`,\n    previews.durable_objects,\n    void 0\n  ) && isValid2;\n  isValid2 = all(\n    validateBindingArray(envName, validateWorkflowBinding),\n    validateUniqueNameProperty\n  )(diagnostics, `${field}.workflows`, previews.workflows, void 0) && isValid2;\n  isValid2 = validateBindingArray(envName, validateKVBinding)(\n    diagnostics,\n    `${field}.kv_namespaces`,\n    previews.kv_namespaces,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateSendEmailBinding)(\n    diagnostics,\n    `${field}.send_email`,\n    previews.send_email,\n    void 0\n  ) && isValid2;\n  isValid2 = validateQueues(envName)(\n    diagnostics,\n    `${field}.queues`,\n    previews.queues,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateD1Binding)(\n    diagnostics,\n    `${field}.d1_databases`,\n    previews.d1_databases,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateR2Binding)(\n    diagnostics,\n    `${field}.r2_buckets`,\n    previews.r2_buckets,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateVectorizeBinding)(\n    diagnostics,\n    `${field}.vectorize`,\n    previews.vectorize,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateHyperdriveBinding)(\n    diagnostics,\n    `${field}.hyperdrive`,\n    previews.hyperdrive,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateServiceBinding)(\n    diagnostics,\n    `${field}.services`,\n    previews.services,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateAnalyticsEngineBinding)(\n    diagnostics,\n    `${field}.analytics_engine_datasets`,\n    previews.analytics_engine_datasets,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateWorkerNamespaceBinding)(\n    diagnostics,\n    `${field}.dispatch_namespaces`,\n    previews.dispatch_namespaces,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateMTlsCertificateBinding)(\n    diagnostics,\n    `${field}.mtls_certificates`,\n    previews.mtls_certificates,\n    void 0\n  ) && isValid2;\n  isValid2 = validateTailConsumers(\n    diagnostics,\n    `${field}.tail_consumers`,\n    previews.tail_consumers,\n    void 0\n  ) && isValid2;\n  isValid2 = validateStreamingTailConsumers(\n    diagnostics,\n    `${field}.streaming_tail_consumers`,\n    previews.streaming_tail_consumers,\n    void 0\n  ) && isValid2;\n  if (previews.unsafe !== void 0) {\n    isValid2 = validateUnsafeSettings(envName)(\n      diagnostics,\n      `${field}.unsafe`,\n      previews.unsafe,\n      void 0\n    ) && isValid2;\n  }\n  if (previews.browser !== void 0) {\n    isValid2 = validateNamedSimpleBinding(envName)(\n      diagnostics,\n      `${field}.browser`,\n      previews.browser,\n      void 0\n    ) && isValid2;\n  }\n  if (previews.ai !== void 0) {\n    isValid2 = validateAIBinding(envName)(\n      diagnostics,\n      `${field}.ai`,\n      previews.ai,\n      void 0\n    ) && isValid2;\n  }\n  if (previews.images !== void 0) {\n    isValid2 = validateNamedSimpleBinding(envName)(\n      diagnostics,\n      `${field}.images`,\n      previews.images,\n      void 0\n    ) && isValid2;\n  }\n  if (previews.stream !== void 0) {\n    isValid2 = validateNamedSimpleBinding(envName)(\n      diagnostics,\n      `${field}.stream`,\n      previews.stream,\n      void 0\n    ) && isValid2;\n  }\n  if (previews.media !== void 0) {\n    isValid2 = validateNamedSimpleBinding(envName)(\n      diagnostics,\n      `${field}.media`,\n      previews.media,\n      void 0\n    ) && isValid2;\n  }\n  isValid2 = validateBindingArray(envName, validatePipelineBinding)(\n    diagnostics,\n    `${field}.pipelines`,\n    previews.pipelines,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateSecretsStoreSecretBinding)(\n    diagnostics,\n    `${field}.secrets_store_secrets`,\n    previews.secrets_store_secrets,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateArtifactsBinding)(\n    diagnostics,\n    `${field}.artifacts`,\n    previews.artifacts,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateHelloWorldBinding)(\n    diagnostics,\n    `${field}.unsafe_hello_world`,\n    previews.unsafe_hello_world,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateFlagshipBinding)(\n    diagnostics,\n    `${field}.flagship`,\n    previews.flagship,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateWorkerLoaderBinding)(\n    diagnostics,\n    `${field}.worker_loaders`,\n    previews.worker_loaders,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateRateLimitBinding)(\n    diagnostics,\n    `${field}.ratelimits`,\n    previews.ratelimits,\n    void 0\n  ) && isValid2;\n  isValid2 = validateBindingArray(envName, validateVpcServiceBinding)(\n    diagnostics,\n    `${field}.vpc_services`,\n    previews.vpc_services,\n    void 0\n  ) && isValid2;\n  if (previews.version_metadata !== void 0) {\n    isValid2 = validateVersionMetadataBinding(envName)(\n      diagnostics,\n      `${field}.version_metadata`,\n      previews.version_metadata,\n      void 0\n    ) && isValid2;\n  }\n  isValid2 = isBoolean(diagnostics, `${field}.logpush`, previews.logpush, void 0) && isValid2;\n  isValid2 = validateObservability(\n    diagnostics,\n    `${field}.observability`,\n    previews.observability,\n    void 0\n  ) && isValid2;\n  if (previews.limits) {\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      `${field}.limits`,\n      \"cpu_ms\",\n      previews.limits.cpu_ms,\n      \"number\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      `${field}.limits`,\n      \"subrequests\",\n      previews.limits.subrequests,\n      \"number\"\n    ) && isValid2;\n  }\n  isValid2 = validateCache(diagnostics, `${field}.cache`, previews.cache, void 0) && isValid2;\n  return isValid2;\n}, \"validatePreviewsConfig\");\nvar validateMigrations = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  const rawMigrations = value ?? [];\n  if (!Array.isArray(rawMigrations)) {\n    diagnostics.errors.push(\n      `The optional \"${field}\" field should be an array, but got ${JSON.stringify(\n        rawMigrations\n      )}`\n    );\n    return false;\n  }\n  let valid = true;\n  for (let i = 0; i < rawMigrations.length; i++) {\n    const {\n      tag,\n      new_classes,\n      new_sqlite_classes,\n      renamed_classes,\n      deleted_classes,\n      transferred_classes,\n      ...rest\n    } = rawMigrations[i];\n    valid = validateAdditionalProperties(\n      diagnostics,\n      \"migrations\",\n      Object.keys(rest),\n      []\n    ) && valid;\n    valid = validateRequiredProperty(\n      diagnostics,\n      `migrations[${i}]`,\n      `tag`,\n      tag,\n      \"string\"\n    ) && valid;\n    valid = validateOptionalTypedArray(\n      diagnostics,\n      `migrations[${i}].new_classes`,\n      new_classes,\n      \"string\"\n    ) && valid;\n    valid = validateOptionalTypedArray(\n      diagnostics,\n      `migrations[${i}].new_sqlite_classes`,\n      new_sqlite_classes,\n      \"string\"\n    ) && valid;\n    if (renamed_classes !== void 0) {\n      if (!Array.isArray(renamed_classes)) {\n        diagnostics.errors.push(\n          `Expected \"migrations[${i}].renamed_classes\" to be an array of \"{from: string, to: string}\" objects but got ${JSON.stringify(\n            renamed_classes\n          )}.`\n        );\n        valid = false;\n      } else if (renamed_classes.some(\n        (c) => typeof c !== \"object\" || !isRequiredProperty(c, \"from\", \"string\") || !isRequiredProperty(c, \"to\", \"string\")\n      )) {\n        diagnostics.errors.push(\n          `Expected \"migrations[${i}].renamed_classes\" to be an array of \"{from: string, to: string}\" objects but got ${JSON.stringify(\n            renamed_classes\n          )}.`\n        );\n        valid = false;\n      }\n    }\n    if (transferred_classes !== void 0) {\n      if (!Array.isArray(transferred_classes)) {\n        diagnostics.errors.push(\n          `Expected \"migrations[${i}].transferred_classes\" to be an array of \"{from: string, from_script: string, to: string}\" objects but got ${JSON.stringify(\n            transferred_classes\n          )}.`\n        );\n        valid = false;\n      } else if (transferred_classes.some(\n        (c) => typeof c !== \"object\" || !isRequiredProperty(c, \"from\", \"string\") || !isRequiredProperty(c, \"from_script\", \"string\") || !isRequiredProperty(c, \"to\", \"string\")\n      )) {\n        diagnostics.errors.push(\n          `Expected \"migrations[${i}].transferred_classes\" to be an array of \"{from: string, from_script: string, to: string}\" objects but got ${JSON.stringify(\n            transferred_classes\n          )}.`\n        );\n        valid = false;\n      }\n    }\n    valid = validateOptionalTypedArray(\n      diagnostics,\n      `migrations[${i}].deleted_classes`,\n      deleted_classes,\n      \"string\"\n    ) && valid;\n  }\n  return valid;\n}, \"validateMigrations\");\nvar validateObservability = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\") {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  const val = value;\n  let isValid2 = true;\n  isValid2 = validateAtLeastOnePropertyRequired(diagnostics, field, [\n    {\n      key: \"enabled\",\n      value: val.enabled,\n      type: \"boolean\"\n    },\n    {\n      key: \"logs.enabled\",\n      value: val.logs?.enabled,\n      type: \"boolean\"\n    },\n    {\n      key: \"traces.enabled\",\n      value: val.traces?.enabled,\n      type: \"boolean\"\n    }\n  ]) && isValid2;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"head_sampling_rate\",\n    val.head_sampling_rate,\n    \"number\"\n  ) && isValid2;\n  isValid2 = validateOptionalProperty(diagnostics, field, \"logs\", val.logs, \"object\") && isValid2;\n  isValid2 = validateOptionalProperty(\n    diagnostics,\n    field,\n    \"traces\",\n    val.traces,\n    \"object\"\n  ) && isValid2;\n  isValid2 = validateAdditionalProperties(diagnostics, field, Object.keys(val), [\n    \"enabled\",\n    \"head_sampling_rate\",\n    \"logs\",\n    \"traces\"\n  ]) && isValid2;\n  if (typeof val.logs === \"object\") {\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"logs.enabled\",\n      val.logs.enabled,\n      \"boolean\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"logs.head_sampling_rate\",\n      val.logs.head_sampling_rate,\n      \"number\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"logs.invocation_logs\",\n      val.logs.invocation_logs,\n      \"boolean\"\n    ) && isValid2;\n    isValid2 = validateOptionalTypedArray(\n      diagnostics,\n      \"logs.destinations\",\n      val.logs?.destinations,\n      \"string\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"logs.persist\",\n      val.logs.persist,\n      \"boolean\"\n    ) && isValid2;\n    isValid2 = validateAdditionalProperties(diagnostics, field, Object.keys(val.logs), [\n      \"enabled\",\n      \"head_sampling_rate\",\n      \"invocation_logs\",\n      \"destinations\",\n      \"persist\"\n    ]) && isValid2;\n  }\n  if (typeof val.traces === \"object\") {\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"traces.enabled\",\n      val.traces.enabled,\n      \"boolean\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"traces.head_sampling_rate\",\n      val.traces.head_sampling_rate,\n      \"number\"\n    ) && isValid2;\n    isValid2 = validateOptionalTypedArray(\n      diagnostics,\n      \"traces.destinations\",\n      val.traces?.destinations,\n      \"string\"\n    ) && isValid2;\n    isValid2 = validateOptionalProperty(\n      diagnostics,\n      field,\n      \"traces.persist\",\n      val.traces.persist,\n      \"boolean\"\n    ) && isValid2;\n    isValid2 = validateAdditionalProperties(\n      diagnostics,\n      field,\n      Object.keys(val.traces),\n      [\"enabled\", \"head_sampling_rate\", \"destinations\", \"persist\"]\n    ) && isValid2;\n  }\n  const samplingRate = val?.head_sampling_rate;\n  if (samplingRate && (samplingRate < 0 || samplingRate > 1)) {\n    diagnostics.errors.push(\n      `\"${field}.head_sampling_rate\" must be a value between 0 and 1.`\n    );\n  }\n  return isValid2;\n}, \"validateObservability\");\nvar validateCache = /* @__PURE__ */ __name((diagnostics, field, value) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  const val = value;\n  let isValid2 = true;\n  isValid2 = validateRequiredProperty(\n    diagnostics,\n    field,\n    \"enabled\",\n    val.enabled,\n    \"boolean\"\n  ) && isValid2;\n  isValid2 = validateAdditionalProperties(diagnostics, field, Object.keys(val), [\n    \"enabled\"\n  ]) && isValid2;\n  return isValid2;\n}, \"validateCache\");\nfunction warnIfDurableObjectsHaveNoMigrations(diagnostics, durableObjects, migrations, configPath) {\n  if (Array.isArray(durableObjects.bindings) && durableObjects.bindings.length > 0) {\n    const exportedDurableObjects = (durableObjects.bindings || []).filter(\n      (binding) => !binding.script_name\n    );\n    if (exportedDurableObjects.length > 0 && migrations.length === 0) {\n      if (!exportedDurableObjects.some(\n        (exportedDurableObject) => typeof exportedDurableObject.class_name !== \"string\"\n      )) {\n        const durableObjectClassnames = exportedDurableObjects.map(\n          (durable) => durable.class_name\n        );\n        diagnostics.warnings.push(dedent`\n\t\t\t\tIn your ${configFileName(configPath)} file, you have configured \\`durable_objects\\` exported by this Worker (${durableObjectClassnames.join(\", \")}), but no \\`migrations\\` for them. This may not work as expected until you add a \\`migrations\\` section to your ${configFileName(configPath)} file. Add the following configuration:\n\n\t\t\t\t\\`\\`\\`\n\t\t\t\t${formatConfigSnippet(\n          {\n            migrations: [\n              { tag: \"v1\", new_sqlite_classes: durableObjectClassnames }\n            ]\n          },\n          configPath\n        )}\n\t\t\t\t\\`\\`\\`\n\n\t\t\t\tRefer to https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/ for more details.`);\n      }\n    }\n  }\n}\n__name(warnIfDurableObjectsHaveNoMigrations, \"warnIfDurableObjectsHaveNoMigrations\");\nvar validatePythonModules = /* @__PURE__ */ __name((diagnostics, field, value, topLevelEnv) => {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.errors.push(\n      `\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n    );\n    return false;\n  }\n  const val = value;\n  if (!(\"exclude\" in val)) {\n    return false;\n  }\n  if (!isStringArray(diagnostics, `${field}.exclude`, val.exclude, topLevelEnv)) {\n    return false;\n  }\n  return true;\n}, \"validatePythonModules\");\nfunction isRemoteValid(targetObject, fieldPath, diagnostics) {\n  if (!isOptionalProperty(targetObject, \"remote\", \"boolean\")) {\n    diagnostics.errors.push(\n      `\"${fieldPath}\" should, optionally, have a boolean \"remote\" field but got ${JSON.stringify(\n        targetObject\n      )}.`\n    );\n    return false;\n  }\n  return true;\n}\n__name(isRemoteValid, \"isRemoteValid\");\nfunction isDockerfile(imagePath, configPath) {\n  const baseDir = configPath ? path3.dirname(configPath) : process.cwd();\n  const maybeDockerfile = path3.resolve(baseDir, imagePath);\n  if (fs.existsSync(maybeDockerfile)) {\n    if (isDirectory(maybeDockerfile)) {\n      throw new UserError(\n        `${imagePath} is a directory, you should specify a path to the Dockerfile`,\n        { telemetryMessage: false }\n      );\n    }\n    return true;\n  }\n  const errorPrefix = `The image \"${imagePath}\" does not appear to be a valid path to a Dockerfile, or a valid image registry path:\n`;\n  try {\n    new URL(`https://${imagePath}`);\n  } catch (e2) {\n    if (e2 instanceof Error) {\n      throw new UserError(errorPrefix + e2.message, {\n        telemetryMessage: false\n      });\n    }\n    throw e2;\n  }\n  const imageParts = imagePath.split(\"/\");\n  if (!imageParts[imageParts.length - 1]?.includes(\":\")) {\n    throw new UserError(\n      errorPrefix + `If this is an image registry path, it needs to include at least a tag ':' (e.g: docker.io/httpd:1)`,\n      { telemetryMessage: false }\n    );\n  }\n  if (imagePath.includes(\"://\")) {\n    throw new UserError(\n      errorPrefix + `Image reference should not include the protocol part (e.g: docker.io/httpd:1, not https://docker.io/httpd:1)`,\n      { telemetryMessage: false }\n    );\n  }\n  return false;\n}\n__name(isDockerfile, \"isDockerfile\");\n\n// src/config/validation-pages.ts\nvar supportedPagesConfigFields = [\n  \"pages_build_output_dir\",\n  \"name\",\n  \"compatibility_date\",\n  \"compatibility_flags\",\n  \"send_metrics\",\n  \"no_bundle\",\n  \"limits\",\n  \"placement\",\n  \"vars\",\n  \"durable_objects\",\n  \"kv_namespaces\",\n  \"queues\",\n  // `producers` ONLY\n  \"r2_buckets\",\n  \"d1_databases\",\n  \"vectorize\",\n  \"hyperdrive\",\n  \"services\",\n  \"analytics_engine_datasets\",\n  \"ai\",\n  \"version_metadata\",\n  \"dev\",\n  \"mtls_certificates\",\n  \"browser\",\n  \"upload_source_maps\",\n  // normalizeAndValidateConfig() sets these values\n  \"configPath\",\n  \"userConfigPath\",\n  \"topLevelName\",\n  \"definedEnvironments\",\n  \"targetEnvironment\"\n];\nfunction validatePagesConfig(config, envNames, projectName) {\n  if (!config.pages_build_output_dir) {\n    throw new FatalError(\n      `Attempting to validate Pages configuration file, but \"pages_build_output_dir\" field was not found.\n\t\t\"pages_build_output_dir\" is required for Pages projects.`,\n      { telemetryMessage: false }\n    );\n  }\n  const diagnostics = new Diagnostics(\n    `Running configuration file validation for Pages:`\n  );\n  validateMainField(config, diagnostics);\n  validateProjectName(projectName, diagnostics);\n  validatePagesEnvironmentNames(envNames, diagnostics);\n  validateUnsupportedFields(config, diagnostics);\n  validateDurableObjectBinding2(config, diagnostics);\n  return diagnostics;\n}\n__name(validatePagesConfig, \"validatePagesConfig\");\nfunction validateMainField(config, diagnostics) {\n  if (config.main !== void 0) {\n    diagnostics.errors.push(\n      `Configuration file cannot contain both both \"main\" and \"pages_build_output_dir\" configuration keys.\nPlease use \"main\" if you are deploying a Worker, or \"pages_build_output_dir\" if you are deploying a Pages project.`\n    );\n  }\n}\n__name(validateMainField, \"validateMainField\");\nfunction validateProjectName(name, diagnostics) {\n  if (name === void 0 || name.trim() === \"\") {\n    diagnostics.errors.push(\n      `Missing top-level field \"name\" in configuration file.\nPages requires the name of your project to be configured at the top-level of your Wrangler configuration file. This is because, in Pages, environments target the same project.`\n    );\n  }\n}\n__name(validateProjectName, \"validateProjectName\");\nfunction validatePagesEnvironmentNames(envNames, diagnostics) {\n  if (!envNames?.length) {\n    return;\n  }\n  const unsupportedPagesEnvNames = envNames.filter(\n    (name) => name !== \"preview\" && name !== \"production\"\n  );\n  if (unsupportedPagesEnvNames.length > 0) {\n    diagnostics.errors.push(\n      `Configuration file contains the following environment names that are not supported by Pages projects:\n${unsupportedPagesEnvNames.map((name) => `\"${name}\"`).join()}.\nThe supported named-environments for Pages are \"preview\" and \"production\".`\n    );\n  }\n}\n__name(validatePagesEnvironmentNames, \"validatePagesEnvironmentNames\");\nfunction validateUnsupportedFields(config, diagnostics) {\n  const unsupportedFields = new Set(Object.keys(config));\n  for (const field of supportedPagesConfigFields) {\n    if (field === \"queues\" && config.queues?.consumers?.length) {\n      continue;\n    }\n    unsupportedFields.delete(field);\n  }\n  for (const field of unsupportedFields) {\n    if (config[field] === void 0 || JSON.stringify(config[field]) === JSON.stringify(defaultWranglerConfig[field])) {\n      unsupportedFields.delete(field);\n    }\n  }\n  if (unsupportedFields.size > 0) {\n    const fields = Array.from(unsupportedFields.keys());\n    fields.forEach((field) => {\n      if (field === \"queues\" && config.queues?.consumers?.length) {\n        diagnostics.errors.push(\n          `Configuration file for Pages projects does not support \"queues.consumers\"`\n        );\n      } else {\n        diagnostics.errors.push(\n          `Configuration file for Pages projects does not support \"${field}\"`\n        );\n      }\n    });\n  }\n}\n__name(validateUnsupportedFields, \"validateUnsupportedFields\");\nfunction validateDurableObjectBinding2(config, diagnostics) {\n  if (config.durable_objects.bindings.length > 0) {\n    const invalidBindings = config.durable_objects.bindings.filter(\n      (binding) => !isRequiredProperty(binding, \"script_name\", \"string\")\n    );\n    if (invalidBindings.length > 0) {\n      diagnostics.errors.push(\n        `Durable Objects bindings should specify a \"script_name\".\nPages requires Durable Object bindings to specify the name of the Worker where the Durable Object is defined.`\n      );\n    }\n  }\n}\n__name(validateDurableObjectBinding2, \"validateDurableObjectBinding\");\n\n// src/cloudflared.ts\nvar import_command_exists = __toESM(require_command_exists2());\nvar UPDATE_SERVICE_URL = \"https://update.argotunnel.com\";\nvar CLOUDFLARED_VERSION_PATTERN = /^\\d{4}\\.\\d+\\.\\d+$/;\nfunction sha256Hex(buffer) {\n  return createHash(\"sha256\").update(buffer).digest(\"hex\");\n}\n__name(sha256Hex, \"sha256Hex\");\nfunction getGoArch() {\n  const nodeArch = arch();\n  switch (nodeArch) {\n    case \"x64\":\n      return \"amd64\";\n    case \"arm64\":\n      return \"arm64\";\n    case \"arm\":\n      return \"arm\";\n    default:\n      throw new UserError(\n        `Unsupported architecture for cloudflared: ${nodeArch}\n\ncloudflared supports: x64 (amd64), arm64, arm\n\nYou can manually install cloudflared and set the CLOUDFLARED_PATH environment variable.\nDownload instructions: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n        { telemetryMessage: \"tunnel cloudflared unsupported architecture\" }\n      );\n  }\n}\n__name(getGoArch, \"getGoArch\");\nfunction getGoOS() {\n  switch (process.platform) {\n    case \"darwin\":\n      return \"darwin\";\n    case \"linux\":\n      return \"linux\";\n    case \"win32\":\n      return \"windows\";\n    default:\n      throw new UserError(\n        `Unsupported platform for cloudflared: ${process.platform}\n\ncloudflared supports: darwin (macOS), linux, win32 (Windows)\n\nYou can manually install cloudflared and set the CLOUDFLARED_PATH environment variable.\nDownload instructions: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n        { telemetryMessage: \"tunnel cloudflared unsupported platform\" }\n      );\n  }\n}\n__name(getGoOS, \"getGoOS\");\nvar GITHUB_RELEASE_BASE = \"https://github.com/cloudflare/cloudflared/releases/download\";\nfunction getAssetFilename(goOS, goArch) {\n  if (goOS === \"windows\") {\n    return `cloudflared-${goOS}-${goArch}.exe`;\n  }\n  if (goOS === \"darwin\") {\n    return `cloudflared-${goOS}-${goArch}.tgz`;\n  }\n  return `cloudflared-${goOS}-${goArch}`;\n}\n__name(getAssetFilename, \"getAssetFilename\");\nasync function queryUpdateService(goOS, goArch, options) {\n  const { logger } = options ?? {};\n  const url = new URL(UPDATE_SERVICE_URL);\n  url.searchParams.set(\"os\", goOS);\n  url.searchParams.set(\"arch\", goArch);\n  logger?.debug(`Checking for latest cloudflared: ${url.toString()}`);\n  let response;\n  try {\n    response = await fetch(url.toString(), {\n      headers: { \"User-Agent\": \"wrangler\" }\n    });\n  } catch (e2) {\n    logger?.debug(\n      `Failed to reach update service: ${e2 instanceof Error ? e2.message : String(e2)}`\n    );\n    return null;\n  }\n  if (!response.ok) {\n    logger?.debug(\n      `Update service returned ${response.status} for ${goOS}/${goArch}`\n    );\n    return null;\n  }\n  let data;\n  try {\n    data = await response.json();\n  } catch (e2) {\n    logger?.debug(\n      `Update service returned non-JSON response: ${e2 instanceof Error ? e2.message : String(e2)}`\n    );\n    return null;\n  }\n  if (typeof data.version === \"string\" && !CLOUDFLARED_VERSION_PATTERN.test(data.version)) {\n    throw new Error(\n      `[cloudflared] Invalid cloudflared version returned by update service: ${data.version}`\n    );\n  }\n  if (data.error || !data.url || !data.version) {\n    return data.version ? data : null;\n  }\n  return data;\n}\n__name(queryUpdateService, \"queryUpdateService\");\nasync function getLatestVersionInfo(options) {\n  const { logger } = options ?? {};\n  const goOS = getGoOS();\n  const goArch = getGoArch();\n  const primary = await queryUpdateService(goOS, goArch, { logger });\n  if (primary && primary.url && primary.version) {\n    return primary;\n  }\n  logger?.debug(\n    `Update worker had no result for ${goOS}/${goArch}, falling back to GitHub release URL`\n  );\n  const fallback = await queryUpdateService(\"linux\", \"amd64\", { logger });\n  if (!fallback?.version) {\n    throw new UserError(\n      `[cloudflared] Failed to determine the latest cloudflared version.\n\nThe update service did not return results for ${goOS}/${goArch},\nand the fallback query also failed.\n\nYou can manually install cloudflared from:\nhttps://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n      { telemetryMessage: \"tunnel cloudflared version lookup failed\" }\n    );\n  }\n  const version = fallback.version;\n  const filename = getAssetFilename(goOS, goArch);\n  const url = `${GITHUB_RELEASE_BASE}/${version}/${filename}`;\n  const compressed = filename.endsWith(\".tgz\");\n  return {\n    url,\n    version,\n    checksum: \"\",\n    // no checksum available for fallback URLs\n    compressed,\n    shouldUpdate: true,\n    userMessage: \"\",\n    error: \"\"\n  };\n}\n__name(getLatestVersionInfo, \"getLatestVersionInfo\");\nfunction getCacheDir(version) {\n  return join(getGlobalWranglerConfigPath(), \"cloudflared\", version);\n}\n__name(getCacheDir, \"getCacheDir\");\nfunction getCloudflaredBinPath(version) {\n  const binName = process.platform === \"win32\" ? \"cloudflared.exe\" : \"cloudflared\";\n  return join(getCacheDir(version), binName);\n}\n__name(getCloudflaredBinPath, \"getCloudflaredBinPath\");\nfunction isBinaryExecutable(binPath) {\n  try {\n    accessSync(binPath, constants.X_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n__name(isBinaryExecutable, \"isBinaryExecutable\");\nfunction validateBinary(binPath, options) {\n  const { logger } = options ?? {};\n  try {\n    const output = execFileSync(binPath, [\"--version\"], {\n      stdio: [\"pipe\", \"pipe\", \"pipe\"],\n      timeout: 1e4,\n      encoding: \"utf8\"\n    }).trim();\n    logger?.debug(`cloudflared version: ${output}`);\n  } catch {\n    let errorMessage = `[cloudflared] Failed to validate cloudflared binary at ${binPath}\n\n`;\n    errorMessage += `This usually means:\n`;\n    errorMessage += `  - The binary is corrupted or incomplete\n`;\n    errorMessage += `  - You're missing required system libraries\n`;\n    if (process.platform === \"linux\") {\n      errorMessage += `\nOn Linux, make sure you have the required dependencies:\n`;\n      errorMessage += `  - glibc (GNU C Library)\n`;\n      errorMessage += `  - For Debian/Ubuntu: sudo apt-get install libc6\n`;\n    }\n    const cacheDir = join(getGlobalWranglerConfigPath(), \"cloudflared\");\n    errorMessage += `\nYou can try:\n`;\n    errorMessage += `  1. Deleting the cache directory: rm -rf ${cacheDir}\n`;\n    errorMessage += `  2. Running the command again to re-download\n`;\n    errorMessage += `  3. Manually installing cloudflared: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/\n`;\n    errorMessage += `  4. Setting CLOUDFLARED_PATH to point to your cloudflared binary`;\n    throw new UserError(errorMessage, {\n      telemetryMessage: \"tunnel cloudflared validation failed\"\n    });\n  }\n}\n__name(validateBinary, \"validateBinary\");\nfunction redactCloudflaredArgsForLogging(args) {\n  const redacted = [...args];\n  for (let i = 0; i < redacted.length; i++) {\n    const arg = redacted[i];\n    if (arg === \"--token\" && i + 1 < redacted.length) {\n      redacted[i + 1] = \"[REDACTED]\";\n    }\n    if (arg.startsWith(\"--token=\")) {\n      redacted[i] = \"--token=[REDACTED]\";\n    }\n  }\n  return redacted;\n}\n__name(redactCloudflaredArgsForLogging, \"redactCloudflaredArgsForLogging\");\nfunction tryGetCloudflaredFromPath(options) {\n  const { logger } = options ?? {};\n  if (!(0, import_command_exists.sync)(\"cloudflared\")) {\n    return null;\n  }\n  try {\n    validateBinary(\"cloudflared\", { logger });\n    return \"cloudflared\";\n  } catch (e2) {\n    logger?.debug(\"cloudflared found in PATH but failed validation\", e2);\n    return null;\n  }\n}\n__name(tryGetCloudflaredFromPath, \"tryGetCloudflaredFromPath\");\nfunction getInstalledVersion(binPath) {\n  try {\n    const output = execFileSync(binPath, [\"--version\"], {\n      stdio: [\"pipe\", \"pipe\", \"pipe\"],\n      timeout: 1e4,\n      encoding: \"utf8\"\n    });\n    const match = output.match(/(\\d+\\.\\d+\\.\\d+)/);\n    return match ? match[1] : null;\n  } catch {\n    return null;\n  }\n}\n__name(getInstalledVersion, \"getInstalledVersion\");\nfunction isVersionOutdated(installed, latest) {\n  const parse = /* @__PURE__ */ __name((v) => v.split(\".\").map(Number), \"parse\");\n  const [iYear, iMonth, iPatch] = parse(installed);\n  const [lYear, lMonth, lPatch] = parse(latest);\n  if (iYear !== lYear) {\n    return iYear < lYear;\n  }\n  if (iMonth !== lMonth) {\n    return iMonth < lMonth;\n  }\n  return iPatch < lPatch;\n}\n__name(isVersionOutdated, \"isVersionOutdated\");\nasync function warnIfOutdated(binPath, options) {\n  const { logger } = options ?? {};\n  try {\n    const installed = getInstalledVersion(binPath);\n    if (!installed) {\n      return;\n    }\n    const latest = await queryUpdateService(getGoOS(), getGoArch(), { logger }) ?? await queryUpdateService(\"linux\", \"amd64\", { logger });\n    const latestVersion = latest?.version;\n    if (!latestVersion) {\n      return;\n    }\n    if (isVersionOutdated(installed, latestVersion)) {\n      logger?.warn(\n        `Your cloudflared (${installed}) is outdated. Latest version is ${latestVersion}.\nUpdate: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`\n      );\n    }\n  } catch (e2) {\n    logger?.debug(\"Failed to check cloudflared version\", e2);\n  }\n}\n__name(warnIfOutdated, \"warnIfOutdated\");\nfunction writeFileAtomic(filePath, contents) {\n  const dir = dirname(filePath);\n  const tmpPath = join(\n    dir,\n    `.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`\n  );\n  try {\n    writeFileSync(tmpPath, contents);\n    renameSync(tmpPath, filePath);\n  } finally {\n    try {\n      if (existsSync(tmpPath)) {\n        unlinkSync(tmpPath);\n      }\n    } catch {\n    }\n  }\n}\n__name(writeFileAtomic, \"writeFileAtomic\");\nasync function downloadCloudflared(versionInfo, binPath, options) {\n  const { logger } = options ?? {};\n  const { url, version, checksum, compressed } = versionInfo;\n  logger?.log(`Downloading cloudflared ${version}...`);\n  logger?.debug(`Download URL: ${url}`);\n  const cacheDir = dirname(binPath);\n  mkdirSync(cacheDir, { recursive: true });\n  let response;\n  try {\n    response = await fetch(url, {\n      headers: { \"User-Agent\": \"wrangler\" }\n    });\n  } catch (e2) {\n    throw new UserError(\n      `[cloudflared] Failed to download cloudflared from ${url}\n\nNetwork error: ${e2 instanceof Error ? e2.message : String(e2)}\n\nPlease check your internet connection and try again.\nIf you're behind a proxy, make sure it's configured correctly.`,\n      { telemetryMessage: \"tunnel cloudflared download network failed\" }\n    );\n  }\n  if (!response.ok) {\n    throw new UserError(\n      `[cloudflared] Failed to download cloudflared from ${url}\n\nHTTP ${response.status}: ${response.statusText}\n\nYou can manually download cloudflared from:\nhttps://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n      { telemetryMessage: \"tunnel cloudflared download response failed\" }\n    );\n  }\n  try {\n    if (compressed) {\n      await downloadAndExtractTarball(response, checksum, binPath, cacheDir);\n    } else {\n      await downloadBinary(response, checksum, binPath);\n    }\n  } catch (e2) {\n    try {\n      if (existsSync(binPath)) {\n        unlinkSync(binPath);\n      }\n    } catch {\n    }\n    if (e2 instanceof UserError) {\n      throw e2;\n    }\n    throw new UserError(\n      `[cloudflared] Failed to save cloudflared binary\n\nError: ${e2 instanceof Error ? e2.message : String(e2)}\n\nPlease ensure you have write permissions to: ${cacheDir}`,\n      { telemetryMessage: \"tunnel cloudflared save failed\" }\n    );\n  }\n  if (process.platform !== \"win32\") {\n    chmodSync(binPath, 493);\n  }\n  logger?.log(`cloudflared ${version} installed`);\n  logger?.debug(`Binary location: ${binPath}`);\n}\n__name(downloadCloudflared, \"downloadCloudflared\");\nasync function downloadAndExtractTarball(response, expectedChecksum, binPath, cacheDir) {\n  const tempTarPath = join(cacheDir, \"cloudflared.tgz\");\n  const buffer = Buffer.from(await response.arrayBuffer());\n  if (expectedChecksum) {\n    const actualSha256 = sha256Hex(buffer);\n    if (actualSha256 !== expectedChecksum) {\n      throw new UserError(\n        `[cloudflared] SHA256 mismatch for downloaded cloudflared tarball.\n\nExpected: ${expectedChecksum}\nActual:   ${actualSha256}`,\n        { telemetryMessage: \"tunnel cloudflared tarball checksum mismatch\" }\n      );\n    }\n  }\n  writeFileSync(tempTarPath, buffer);\n  try {\n    execFileSync(\"tar\", [\"-xzf\", tempTarPath, \"-C\", cacheDir], {\n      stdio: \"ignore\"\n    });\n    const extractedPath = join(cacheDir, \"cloudflared\");\n    if (extractedPath !== binPath && existsSync(extractedPath)) {\n      renameSync(extractedPath, binPath);\n    }\n  } finally {\n    try {\n      if (existsSync(tempTarPath)) {\n        unlinkSync(tempTarPath);\n      }\n    } catch {\n    }\n  }\n}\n__name(downloadAndExtractTarball, \"downloadAndExtractTarball\");\nasync function downloadBinary(response, expectedChecksum, binPath) {\n  const buffer = Buffer.from(await response.arrayBuffer());\n  if (expectedChecksum) {\n    const actualSha256 = sha256Hex(buffer);\n    if (actualSha256 !== expectedChecksum) {\n      throw new UserError(\n        `[cloudflared] SHA256 mismatch for downloaded cloudflared binary.\n\nExpected: ${expectedChecksum}\nActual:   ${actualSha256}`,\n        { telemetryMessage: \"tunnel cloudflared binary checksum mismatch\" }\n      );\n    }\n  }\n  writeFileAtomic(binPath, buffer);\n}\n__name(downloadBinary, \"downloadBinary\");\nasync function getCloudflaredPath(options) {\n  const logger = options?.logger;\n  const envPath = getCloudflaredPathFromEnv();\n  if (envPath) {\n    if (!existsSync(envPath)) {\n      throw new UserError(\n        `CLOUDFLARED_PATH is set to \"${envPath}\" but the file does not exist.\n\nPlease ensure the path points to a valid cloudflared binary.`,\n        { telemetryMessage: \"tunnel cloudflared env path missing\" }\n      );\n    }\n    logger?.debug(`Using cloudflared from CLOUDFLARED_PATH: ${envPath}`);\n    return envPath;\n  }\n  const pathBin = tryGetCloudflaredFromPath({ logger });\n  if (pathBin) {\n    logger?.debug(\"Using cloudflared from PATH\");\n    if (!options?.skipVersionCheck) {\n      await warnIfOutdated(pathBin, { logger });\n    }\n    return pathBin;\n  }\n  const versionInfo = await getLatestVersionInfo({ logger });\n  const binPath = getCloudflaredBinPath(versionInfo.version);\n  let needsDownload = !isBinaryExecutable(binPath);\n  if (!needsDownload) {\n    try {\n      validateBinary(binPath, { logger });\n      logger?.debug(\n        `Using cached cloudflared ${versionInfo.version}: ${binPath}`\n      );\n      return binPath;\n    } catch (e2) {\n      logger?.debug(\"Cached cloudflared failed validation; re-downloading\", e2);\n      needsDownload = true;\n    }\n  }\n  const shouldDownload = await options?.confirmDownload?.(\n    `cloudflared (${versionInfo.version}) is needed but not installed. Download to ${binPath}?`\n  ) ?? true;\n  if (!shouldDownload) {\n    throw new UserError(\n      `cloudflared is required to run this command.\n\nYou can install it manually from:\nhttps://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/\n\nThen either add it to your PATH or set CLOUDFLARED_PATH.`,\n      { telemetryMessage: \"tunnel cloudflared download declined\" }\n    );\n  }\n  if (existsSync(binPath)) {\n    const cacheDir = removeCloudflaredCache(versionInfo.version);\n    if (cacheDir) {\n      logger?.log(`Removed cloudflared cache: ${cacheDir}`);\n    }\n  }\n  await downloadCloudflared(versionInfo, binPath, { logger });\n  validateBinary(binPath, { logger });\n  return binPath;\n}\n__name(getCloudflaredPath, \"getCloudflaredPath\");\nasync function spawnCloudflared(args, options) {\n  const logger = options?.logger;\n  const binPath = await getCloudflaredPath({\n    skipVersionCheck: options?.skipVersionCheck,\n    confirmDownload: options?.confirmDownload,\n    logger\n  });\n  logger?.debug(\n    `Spawning cloudflared: ${binPath} ${redactCloudflaredArgsForLogging(args).join(\" \")}`\n  );\n  const cloudflared = spawn(binPath, args, {\n    stdio: options?.stdio ?? \"inherit\",\n    env: options?.env ? { ...process.env, ...options.env } : void 0\n  });\n  return cloudflared;\n}\n__name(spawnCloudflared, \"spawnCloudflared\");\nfunction removeCloudflaredCache(version) {\n  const cacheDir = version ? getCacheDir(version) : join(getGlobalWranglerConfigPath(), \"cloudflared\");\n  if (existsSync(cacheDir)) {\n    removeDirSync(cacheDir);\n    return cacheDir;\n  }\n  return null;\n}\n__name(removeCloudflaredCache, \"removeCloudflaredCache\");\n\n// src/tunnel.ts\nvar TUNNEL_STARTUP_TIMEOUT_MS = 3e4;\nvar TUNNEL_FORCE_KILL_TIMEOUT_MS = 5e3;\nvar DEFAULT_TUNNEL_EXPIRY_MS = 60 * 60 * 1e3;\nvar DEFAULT_TUNNEL_EXTENSION_MS = 60 * 60 * 1e3;\nvar DEFAULT_TUNNEL_MAX_REMAINING_MS = 3 * 60 * 60 * 1e3;\nvar DEFAULT_TUNNEL_REMINDER_INTERVAL_MS = 10 * 60 * 1e3;\nvar QUICK_TUNNEL_URL_REGEX = /https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com/;\nfunction startTunnel(options) {\n  let disposed = false;\n  let reminderInterval;\n  let expiryTimeout;\n  let expiresAt = 0;\n  let cloudflaredProcess;\n  const logger = options.logger;\n  const timeoutMs = options.timeoutMs ?? TUNNEL_STARTUP_TIMEOUT_MS;\n  const reminderIntervalMs = options.reminderIntervalMs ?? DEFAULT_TUNNEL_REMINDER_INTERVAL_MS;\n  const defaultExpiryMs = options.expiryMs ?? DEFAULT_TUNNEL_EXPIRY_MS;\n  const timeFormatter = new Intl.DateTimeFormat(void 0, {\n    timeStyle: \"short\"\n  });\n  const cloudflaredArgs = [\n    \"tunnel\",\n    \"--no-autoupdate\",\n    \"--url\",\n    options.origin.href\n  ];\n  const cloudflaredPromise = spawnCloudflared(cloudflaredArgs, {\n    stdio: \"pipe\",\n    skipVersionCheck: true,\n    logger\n  }).then((process2) => {\n    cloudflaredProcess = process2;\n    if (disposed) {\n      terminateCloudflared(process2);\n    }\n    return process2;\n  });\n  const readyPromise = cloudflaredPromise.then(\n    (process2) => waitForQuickTunnelReady(process2, timeoutMs, {\n      logger,\n      origin: options.origin\n    })\n  ).then((result) => {\n    expiresAt = Date.now() + defaultExpiryMs;\n    scheduleExpiryTimeout();\n    scheduleReminder(result.publicUrl.origin);\n    return result;\n  });\n  function disposeTunnel() {\n    disposed = true;\n    clearTunnelTimers();\n    if (cloudflaredProcess) {\n      terminateCloudflared(cloudflaredProcess);\n    }\n  }\n  __name(disposeTunnel, \"disposeTunnel\");\n  function clearTunnelTimers() {\n    if (expiryTimeout) {\n      clearTimeout(expiryTimeout);\n      expiryTimeout = void 0;\n    }\n    if (reminderInterval) {\n      clearInterval(reminderInterval);\n      reminderInterval = void 0;\n    }\n  }\n  __name(clearTunnelTimers, \"clearTunnelTimers\");\n  function scheduleReminder(publicURL) {\n    if (reminderIntervalMs > 0) {\n      reminderInterval = setInterval(() => {\n        if (disposed) {\n          return;\n        }\n        const remainingMs = expiresAt - Date.now();\n        if (remainingMs <= 0) {\n          return;\n        }\n        logger?.log(\n          `The tunnel is still open at ${publicURL}. It expires in ${formatTunnelDuration(remainingMs)}. ${options.extendHint ?? \"\"}`\n        );\n      }, reminderIntervalMs);\n      reminderInterval.unref?.();\n    }\n  }\n  __name(scheduleReminder, \"scheduleReminder\");\n  function scheduleExpiryTimeout() {\n    if (disposed) {\n      return;\n    }\n    if (expiryTimeout) {\n      clearTimeout(expiryTimeout);\n    }\n    expiryTimeout = setTimeout(\n      () => {\n        if (disposed) {\n          return;\n        }\n        logger?.log(\"Tunnel expired. Closing tunnel.\");\n        disposeTunnel();\n      },\n      Math.max(0, expiresAt - Date.now())\n    );\n    expiryTimeout.unref();\n  }\n  __name(scheduleExpiryTimeout, \"scheduleExpiryTimeout\");\n  function extendExpiry(ms = DEFAULT_TUNNEL_EXTENSION_MS) {\n    if (disposed || !expiryTimeout || ms <= 0) {\n      return;\n    }\n    const now = Date.now();\n    const previousExpiresAt = expiresAt;\n    expiresAt = Math.min(\n      now + DEFAULT_TUNNEL_MAX_REMAINING_MS,\n      Math.max(expiresAt, now) + ms\n    );\n    const extendedByMs = expiresAt - previousExpiresAt;\n    if (extendedByMs < ms) {\n      logger?.log(\n        `Tunnel expiry extended to the ${formatTunnelDuration(DEFAULT_TUNNEL_MAX_REMAINING_MS)} limit. It now expires at ${timeFormatter.format(new Date(expiresAt))}.`\n      );\n      scheduleExpiryTimeout();\n      return;\n    }\n    logger?.log(\n      `Tunnel expiry extended by ${formatTunnelDuration(extendedByMs)}. It now expires at ${timeFormatter.format(new Date(expiresAt))}.`\n    );\n    scheduleExpiryTimeout();\n  }\n  __name(extendExpiry, \"extendExpiry\");\n  return {\n    ready: /* @__PURE__ */ __name(() => readyPromise, \"ready\"),\n    dispose: disposeTunnel,\n    extendExpiry\n  };\n}\n__name(startTunnel, \"startTunnel\");\nfunction formatTunnelDuration(durationMs) {\n  const totalMinutes = Math.max(1, Math.ceil(durationMs / 6e4));\n  const hours = Math.floor(totalMinutes / 60);\n  const minutes = totalMinutes % 60;\n  if (hours === 0) {\n    return `${minutes}m`;\n  }\n  if (minutes === 0) {\n    return `${hours}h`;\n  }\n  return `${hours}h ${minutes}m`;\n}\n__name(formatTunnelDuration, \"formatTunnelDuration\");\nfunction terminateCloudflared(cloudflared) {\n  if (cloudflared.killed) {\n    return;\n  }\n  cloudflared.unref();\n  cloudflared.kill(\"SIGTERM\");\n  const forceKillTimer = setTimeout(() => {\n    if (!cloudflared.killed) {\n      cloudflared.kill(\"SIGKILL\");\n    }\n  }, TUNNEL_FORCE_KILL_TIMEOUT_MS);\n  forceKillTimer.unref();\n}\n__name(terminateCloudflared, \"terminateCloudflared\");\nfunction waitForQuickTunnelReady(cloudflared, timeoutMs, options) {\n  return new Promise((resolve, reject) => {\n    let resolved = false;\n    let stderrOutput = \"\";\n    const logger = options?.logger;\n    const origin = options?.origin;\n    const timeoutId = setTimeout(() => {\n      if (!resolved) {\n        resolved = true;\n        terminateCloudflared(cloudflared);\n        reject(\n          createTunnelStartupError(\n            `Timed out waiting for cloudflared to start (${timeoutMs / 1e3}s).`,\n            stderrOutput,\n            origin\n          )\n        );\n      }\n    }, timeoutMs);\n    timeoutId.unref();\n    if (cloudflared.stderr) {\n      cloudflared.stderr.on(\"data\", (data) => {\n        const chunk = data.toString();\n        stderrOutput += chunk;\n        logger?.debug(\"[cloudflared]\", chunk.trimEnd());\n        const match = QUICK_TUNNEL_URL_REGEX.exec(stderrOutput);\n        if (match && !resolved) {\n          resolved = true;\n          clearTimeout(timeoutId);\n          resolve({ publicUrl: new URL(match[0]) });\n        }\n      });\n    }\n    cloudflared.on(\"error\", (error) => {\n      if (!resolved) {\n        resolved = true;\n        clearTimeout(timeoutId);\n        reject(new Error(`Failed to start cloudflared: ${error.message}`));\n      }\n    });\n    cloudflared.on(\"exit\", (code, signal) => {\n      if (!resolved) {\n        resolved = true;\n        clearTimeout(timeoutId);\n        const reason = signal ? `terminated by signal ${signal}` : `exited with code ${code}`;\n        reject(\n          createTunnelStartupError(\n            `cloudflared ${reason} before the tunnel was ready.`,\n            stderrOutput,\n            origin\n          )\n        );\n      }\n    });\n  });\n}\n__name(waitForQuickTunnelReady, \"waitForQuickTunnelReady\");\nfunction createTunnelStartupError(message, stderrOutput, origin) {\n  const isQuickTunnelRateLimited = stderrOutput.includes(\n    \"429 Too Many Requests\"\n  );\n  const errorMessage = `${message}\ncloudflared output:\n${stderrOutput || \"(no output)\"}\n\nThe local dev server started at ${origin.href}.\n` + (isQuickTunnelRateLimited ? \"Cloudflare Quick Tunnel creation was rate limited. Try again in a few minutes, or use a named tunnel if you need more reliable access.\" : `Check the cloudflared output above for more details, and verify that ${origin.href} is reachable from this machine if this keeps happening.`);\n  if (isQuickTunnelRateLimited) {\n    return new UserError(errorMessage, { telemetryMessage: false });\n  }\n  return new Error(errorMessage);\n}\n__name(createTunnelStartupError, \"createTunnelStartupError\");\n\nexport { COMPLIANCE_REGION_CONFIG_PUBLIC, COMPLIANCE_REGION_CONFIG_UNKNOWN, Diagnostics, PatchConfigError, bucketFormatMessage, defaultWranglerConfig, experimental_patchConfig, friendlyBindingNames, getBindingTypeFriendlyName, getBooleanEnvironmentVariableFactory, getBrowserRenderingHeadfulFromEnv, getBuildConditionsFromEnv, getBuildPlatformFromEnv, getC3CommandFromEnv, getCIGeneratePreviewAlias, getCIMatchTag, getCIOverrideName, getCIOverrideNetworkModeHost, getCfFetchEnabledFromEnv, getCfFetchPathFromEnv, getCloudflareApiBaseUrl, getCloudflareApiEnvironmentFromEnv, getCloudflareComplianceRegion, getCloudflareEnv, getCloudflareIncludeProcessEnvFromEnv, getCloudflareLoadDevVarsFromDotEnv, getCloudflaredPathFromEnv, getComplianceRegionSubdomain, getD1ExtraLocationChoices, getDisableConfigWatching, getDockerPath, getEnvironmentVariableFactory, getGlobalWranglerConfigPath, getLocalExplorerEnabledFromEnv, getOpenNextDeployFromEnv, getOutputFileDirectoryFromEnv, getOutputFilePathFromEnv, getRegistryPath, getSanitizeLogs, getSubdomainMixedStateCheckDisabled, getTraceHeader, getWorkersCIBranchName, getWranglerCacheDirFromEnv, getWranglerHideBanner, getWranglerSendErrorReportsFromEnv, getWranglerSendMetricsFromEnv, hasProperty, isDockerfile, isOptionalProperty, isPagesConfig, isRequiredProperty, isValidR2BucketName, normalizeAndValidateConfig, spawnCloudflared, startTunnel, validatePagesConfig };\n","import net from 'node:net';\nimport os from 'node:os';\n\nclass Locked extends Error {\n\tconstructor(port) {\n\t\tsuper(`${port} is locked`);\n\t}\n}\n\nconst lockedPorts = {\n\told: new Set(),\n\tyoung: new Set(),\n};\n\n// On this interval, the old locked ports are discarded,\n// the young locked ports are moved to old locked ports,\n// and a new young set for locked ports are created.\nconst releaseOldLockedPortsIntervalMs = 1000 * 15;\n\nconst minPort = 1024;\nconst maxPort = 65_535;\n\n// Lazily create timeout on first use\nlet timeout;\n\nconst getLocalHosts = () => {\n\tconst interfaces = os.networkInterfaces();\n\n\t// Add undefined value for createServer function to use default host,\n\t// and default IPv4 host in case createServer defaults to IPv6.\n\tconst results = new Set([undefined, '0.0.0.0']);\n\n\tfor (const _interface of Object.values(interfaces)) {\n\t\tfor (const config of _interface) {\n\t\t\tresults.add(config.address);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nconst checkAvailablePort = options =>\n\tnew Promise((resolve, reject) => {\n\t\tconst server = net.createServer();\n\t\tserver.unref();\n\t\tserver.on('error', reject);\n\n\t\tserver.listen(options, () => {\n\t\t\tconst {port} = server.address();\n\t\t\tserver.close(() => {\n\t\t\t\tresolve(port);\n\t\t\t});\n\t\t});\n\t});\n\nconst getAvailablePort = async (options, hosts) => {\n\tif (options.host || options.port === 0) {\n\t\treturn checkAvailablePort(options);\n\t}\n\n\tfor (const host of hosts) {\n\t\ttry {\n\t\t\tawait checkAvailablePort({port: options.port, host}); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tif (!['EADDRNOTAVAIL', 'EINVAL'].includes(error.code)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options.port;\n};\n\nconst portCheckSequence = function * (ports) {\n\tif (ports) {\n\t\tyield * ports;\n\t}\n\n\tyield 0; // Fall back to 0 if anything else failed\n};\n\nexport default async function getPorts(options) {\n\tlet ports;\n\tlet exclude = new Set();\n\n\tif (options) {\n\t\tif (options.port) {\n\t\t\tports = typeof options.port === 'number' ? [options.port] : options.port;\n\t\t}\n\n\t\tif (options.exclude) {\n\t\t\tconst excludeIterable = options.exclude;\n\n\t\t\tif (typeof excludeIterable[Symbol.iterator] !== 'function') {\n\t\t\t\tthrow new TypeError('The `exclude` option must be an iterable.');\n\t\t\t}\n\n\t\t\tfor (const element of excludeIterable) {\n\t\t\t\tif (typeof element !== 'number') {\n\t\t\t\t\tthrow new TypeError('Each item in the `exclude` option must be a number corresponding to the port you want excluded.');\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isSafeInteger(element)) {\n\t\t\t\t\tthrow new TypeError(`Number ${element} in the exclude option is not a safe integer and can't be used`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texclude = new Set(excludeIterable);\n\t\t}\n\t}\n\n\tif (timeout === undefined) {\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimeout = undefined;\n\n\t\t\tlockedPorts.old = lockedPorts.young;\n\t\t\tlockedPorts.young = new Set();\n\t\t}, releaseOldLockedPortsIntervalMs);\n\n\t\t// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).\n\t\tif (timeout.unref) {\n\t\t\ttimeout.unref();\n\t\t}\n\t}\n\n\tconst hosts = getLocalHosts();\n\n\tfor (const port of portCheckSequence(ports)) {\n\t\ttry {\n\t\t\tif (exclude.has(port)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet availablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\twhile (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {\n\t\t\t\tif (port !== 0) {\n\t\t\t\t\tthrow new Locked(port);\n\t\t\t\t}\n\n\t\t\t\tavailablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\t}\n\n\t\t\tlockedPorts.young.add(availablePort);\n\n\t\t\treturn availablePort;\n\t\t} catch (error) {\n\t\t\tif (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('No available ports found');\n}\n\nexport function portNumbers(from, to) {\n\tif (!Number.isInteger(from) || !Number.isInteger(to)) {\n\t\tthrow new TypeError('`from` and `to` must be integer numbers');\n\t}\n\n\tif (from < minPort || from > maxPort) {\n\t\tthrow new RangeError(`'from' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (to < minPort || to > maxPort) {\n\t\tthrow new RangeError(`'to' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (from > to) {\n\t\tthrow new RangeError('`to` must be greater than or equal to `from`');\n\t}\n\n\tconst generator = function * (from, to) {\n\t\tfor (let port = from; port <= to; port++) {\n\t\t\tyield port;\n\t\t}\n\t};\n\n\treturn generator(from, to);\n}\n\nexport function clearLockedPorts() {\n\tlockedPorts.old.clear();\n\tlockedPorts.young.clear();\n}\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","import { startTunnel } from \"@cloudflare/workers-utils\";\nimport getPort from \"get-port\";\nimport { buildPublicUrl } from \"miniflare\";\nimport colors from \"picocolors\";\nimport { assertIsNotPreview, assertIsPreview } from \"../context\";\nimport { debuglog, createPlugin } from \"../utils\";\nimport type { PluginContext } from \"../context\";\nimport type { Tunnel } from \"@cloudflare/workers-utils\";\nimport type * as vite from \"vite\";\n\nconst COMMON_PUBLIC_EXPOSURE_CONCERNS = [\n\t\"Call ungated endpoints\",\n\t\"Trigger logic that uses remote bindings\",\n\t\"Reach internal services if your Worker proxies requests\",\n];\nconst COMMON_PUBLIC_EXPOSURE_GUIDANCE =\n\t\"Consider using a named tunnel with Cloudflare Access to restrict access.\";\n\nfunction createPublicExposureWarning(concerns: string[], guidance: string) {\n\treturn [\n\t\t\"\",\n\t\t`     ${colors.dim(\"This URL is \")}publicly accessible${colors.dim(\". Anyone with it can:\")}`,\n\t\t...concerns.map((concern) => colors.dim(`     • ${concern}`)),\n\t\t\"\",\n\t\tcolors.dim(`     ${guidance}`),\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nexport const DEV_PUBLIC_EXPOSURE_WARNING = createPublicExposureWarning(\n\t[\n\t\t...COMMON_PUBLIC_EXPOSURE_CONCERNS,\n\t\t\"Request module source and other dev-server assets\",\n\t\t\"Access HMR messages, including absolute file system paths\",\n\t\t\"Observe file-change cadence and parts of the live module graph\",\n\t],\n\t`If you only need to share a running build, use vite preview to avoid HMR and other dev-server exposure. ${COMMON_PUBLIC_EXPOSURE_GUIDANCE}`\n);\n\nexport const PREVIEW_PUBLIC_EXPOSURE_WARNING = createPublicExposureWarning(\n\tCOMMON_PUBLIC_EXPOSURE_CONCERNS,\n\tCOMMON_PUBLIC_EXPOSURE_GUIDANCE\n);\n\nexport const QUICK_TUNNEL_SSE_WARNING =\n\t\"Quick tunnels do not support Server-Sent Events (SSE). Use a named Cloudflare Tunnel if you need SSE over a public URL.\";\n\nexport const QUICK_TUNNEL_ALLOWED_HOST = \".trycloudflare.com\";\n\nexport class TunnelManager {\n\t#logger: vite.Logger;\n\t#origin?: string;\n\t#publicUrl?: string;\n\t#tunnel?: Tunnel;\n\t#hasWarnedAboutSse = false;\n\n\tconstructor(logger: vite.Logger) {\n\t\tthis.#logger = logger;\n\t}\n\n\tisStarted(origin: string): boolean {\n\t\treturn this.#origin === origin && this.#tunnel !== undefined;\n\t}\n\n\tasync startTunnel(origin: string): Promise<string | null> {\n\t\ttry {\n\t\t\tif (this.#origin === origin && this.#tunnel) {\n\t\t\t\treturn await this.#waitForPublicUrl(this.#tunnel);\n\t\t\t}\n\n\t\t\tthis.#logger.info(\n\t\t\t\tcolors.dim(\"\\n  ➜  Starting tunnel (usually takes a few seconds)...\\n\")\n\t\t\t);\n\n\t\t\tconst previousTunnel = this.#tunnel;\n\n\t\t\tif (previousTunnel) {\n\t\t\t\tthis.dispose();\n\t\t\t}\n\n\t\t\tthis.#origin = origin;\n\t\t\tthis.#publicUrl = undefined;\n\n\t\t\tconst tunnel = startTunnel({\n\t\t\t\torigin: new URL(origin),\n\t\t\t\textendHint: \"Press t + enter to extend by 1 hour.\",\n\t\t\t\tlogger: {\n\t\t\t\t\tlog: (message) => this.#logger.info(message),\n\t\t\t\t\twarn: (message) => this.#logger.warn(message),\n\t\t\t\t\tdebug: (message) => debuglog(message),\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.#tunnel = tunnel;\n\n\t\t\treturn await this.#waitForPublicUrl(tunnel);\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to start tunnel: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error }\n\t\t\t);\n\t\t}\n\t}\n\n\tasync #waitForPublicUrl(tunnel: Tunnel): Promise<string | null> {\n\t\ttry {\n\t\t\tconst { publicUrl } = await tunnel.ready();\n\t\t\tif (this.#tunnel !== tunnel) {\n\t\t\t\tdebuglog(\n\t\t\t\t\t\"Tunnel was restarted before it finished starting. Ignoring this tunnel's public URL:\",\n\t\t\t\t\tpublicUrl\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tdebuglog(\"Tunnel is ready with public URL:\", publicUrl);\n\t\t\tthis.#publicUrl = publicUrl.toString();\n\t\t\treturn publicUrl.toString();\n\t\t} catch (error) {\n\t\t\tif (this.#tunnel !== tunnel) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.#publicUrl = undefined;\n\t\t\tthis.#tunnel = undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tget publicUrl(): string | undefined {\n\t\treturn this.#publicUrl;\n\t}\n\n\textendExpiry() {\n\t\tthis.#tunnel?.extendExpiry();\n\t}\n\n\twarnIfQuickTunnelSseResponse(contentType: string | null) {\n\t\tif (\n\t\t\tthis.#hasWarnedAboutSse ||\n\t\t\t!this.#tunnel ||\n\t\t\tcontentType === null ||\n\t\t\t!contentType.toLowerCase().startsWith(\"text/event-stream\")\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#hasWarnedAboutSse = true;\n\t\tthis.#logger.warn(QUICK_TUNNEL_SSE_WARNING);\n\t}\n\n\tdispose() {\n\t\tconst tunnel = this.#tunnel;\n\n\t\tthis.#origin = undefined;\n\t\tthis.#publicUrl = undefined;\n\t\tthis.#tunnel = undefined;\n\t\tthis.#hasWarnedAboutSse = false;\n\n\t\tdebuglog(\"Disposing tunnel...\");\n\n\t\tif (tunnel) {\n\t\t\ttunnel.dispose();\n\t\t}\n\t}\n\n\tdisposeOnExit() {\n\t\ttry {\n\t\t\tthis.dispose();\n\t\t} catch (e) {\n\t\t\tthis.#logger.error(\n\t\t\t\t\"Failed to dispose tunnel on exit:\" +\n\t\t\t\t\t(e instanceof Error ? e.message : `${e}`)\n\t\t\t);\n\t\t}\n\t}\n}\n\nlet tunnelManager: TunnelManager;\n\nprocess.on(\"exit\", () => {\n\ttunnelManager?.disposeOnExit();\n});\n\nexport function warnIfQuickTunnelSseResponse(contentType: string | null) {\n\ttunnelManager?.warnIfQuickTunnelSseResponse(contentType);\n}\n\nexport function extendTunnelExpiry() {\n\ttunnelManager?.extendExpiry();\n}\n\n/**\n * Resolve the dev tunnel origin from the running server.\n *\n * This simply waits for Vite to start listening and then reuses its resolved URL.\n */\nexport async function resolveDevTunnelOrigin(server: vite.ViteDevServer) {\n\tconst httpServer = server.httpServer;\n\n\tif (!httpServer) {\n\t\tthrow new Error(\n\t\t\t\"No HTTP server available for tunnel sharing. Tunnels are not supported in middleware mode.\"\n\t\t);\n\t}\n\n\tif (!httpServer.listening) {\n\t\tawait new Promise<void>((resolve) => {\n\t\t\thttpServer.once(\"listening\", () => resolve());\n\t\t});\n\t}\n\n\tconst url =\n\t\tserver.resolvedUrls?.local?.[0] ?? server.resolvedUrls?.network?.[0];\n\n\tif (!url) {\n\t\tthrow new Error(\n\t\t\t\"Could not determine the local dev server URL for tunnel sharing.\"\n\t\t);\n\t}\n\n\treturn url;\n}\n\n/**\n * Resolve the preview tunnel origin before preview starts listening.\n *\n * Unlike dev, preview does not give us a similar `server.listen()` hook where\n * we can wait for the final bound URL before starting the tunnel. We resolve\n * the port up front using Vite's preview port rules so the tunnel and preview\n * server agree on the same origin:\n *\n * - `port: 0`: use any free port\n * - `strictPort: true`: use the exact port or fail\n * - otherwise: use the first free port at or above `preview.port`\n */\nexport async function resolvePreviewTunnelOrigin(server: vite.PreviewServer) {\n\tconst { preview } = server.config;\n\tconst host = typeof preview.host === \"string\" ? preview.host : undefined;\n\tlet resolvedPort: number;\n\n\tif (preview.port === 0) {\n\t\tresolvedPort = await getPort({ port: 0, host });\n\t} else if (preview.strictPort) {\n\t\tresolvedPort = await getPort({ port: preview.port, host });\n\t\tif (resolvedPort !== preview.port) {\n\t\t\tthrow new Error(`Port ${preview.port} is already in use.`);\n\t\t}\n\t} else {\n\t\tfunction* candidatePorts() {\n\t\t\tfor (let port = preview.port; port <= 65535; port++) {\n\t\t\t\tyield port;\n\t\t\t}\n\t\t}\n\n\t\tresolvedPort = await getPort({\n\t\t\thost,\n\t\t\tport: candidatePorts(),\n\t\t});\n\t}\n\n\treturn new URL(\n\t\tbuildPublicUrl({\n\t\t\thostname: host,\n\t\t\tport: resolvedPort,\n\t\t\tsecure: !!preview.https,\n\t\t})\n\t);\n}\n\nexport async function setupDevTunnel(\n\tserver: vite.ViteDevServer,\n\tctx: PluginContext,\n\tmanager: TunnelManager\n): Promise<void> {\n\tconst origin = await resolveDevTunnelOrigin(server);\n\n\tif (manager.isStarted(origin)) {\n\t\tdebuglog(\"Tunnel is already started on\", origin);\n\t\treturn;\n\t}\n\n\tconst publicUrl = await manager.startTunnel(origin);\n\n\tif (!publicUrl) {\n\t\t// This happens if the tunnel was restarted with a different origin before the first tunnel finished starting.\n\t\t// In this case, we don't want to log anything since the new tunnel will log its own URL once it's ready.\n\t\treturn;\n\t}\n\n\tconst allowedHosts = server.config.server.allowedHosts;\n\tconst tunnelHostnames = [new URL(publicUrl).hostname];\n\n\tctx.replaceTunnelHostnames(tunnelHostnames);\n\n\tif (\n\t\tallowedHosts !== true &&\n\t\ttunnelHostnames.some((hostname) => !allowedHosts.includes(hostname))\n\t) {\n\t\tawait server.restart();\n\t}\n}\n\n/**\n * Start a preview tunnel on the resolved preview origin.\n *\n * We write the resolved port back to preview config so the server binds the\n * same port that the tunnel is sharing.\n */\nexport async function setupPreviewTunnel(\n\tserver: vite.PreviewServer,\n\tmanager: TunnelManager\n): Promise<void> {\n\tconst { preview } = server.config;\n\tconst originalPort = preview.port;\n\tconst resolvedOrigin = await resolvePreviewTunnelOrigin(server);\n\tconst resolvedPort = Number(resolvedOrigin.port);\n\n\t// Update the preview server config with the resolved port so that the tunnel shares the correct URL.\n\tpreview.port = resolvedPort;\n\tpreview.strictPort = true;\n\n\tif (originalPort !== 0 && resolvedPort !== originalPort) {\n\t\tserver.config.logger.info(\n\t\t\tcolors.dim(\n\t\t\t\t`Port ${originalPort} is in use, using ${resolvedPort} instead for preview tunnel sharing.\\n`\n\t\t\t)\n\t\t);\n\t}\n\n\tawait manager.startTunnel(resolvedOrigin.toString());\n}\n\nfunction patchPrintUrls(\n\tserver: vite.ViteDevServer | vite.PreviewServer,\n\twarning: string\n) {\n\tconst serverPrintUrls = server.printUrls.bind(server);\n\tserver.printUrls = () => {\n\t\tserverPrintUrls();\n\n\t\tconst publicUrl = tunnelManager?.publicUrl;\n\t\tif (!publicUrl) {\n\t\t\treturn;\n\t\t}\n\n\t\tserver.config.logger.info(\n\t\t\t`${colors.green(\"  ➜\")}  ${colors.bold(\"Tunnel:\")}  ${colors.cyan(publicUrl)}`\n\t\t);\n\t\tserver.config.logger.warnOnce(warning);\n\t};\n}\n\nexport const tunnelPlugin = createPlugin(\"tunnel\", (ctx) => {\n\tfunction stopTunnel() {\n\t\tctx.clearTunnelHostnames();\n\t\ttunnelManager?.dispose();\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Vite runs `buildEnd` when the dev server restarts or closes.\n\t\t */\n\t\tbuildEnd() {\n\t\t\tif (!ctx.isRestartingDevServer) {\n\t\t\t\tstopTunnel();\n\t\t\t}\n\t\t},\n\t\tconfigureServer(server) {\n\t\t\tassertIsNotPreview(ctx);\n\n\t\t\tif (!ctx.resolvedPluginConfig.tunnel) {\n\t\t\t\tstopTunnel();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttunnelManager ??= new TunnelManager(server.config.logger);\n\t\t\tpatchPrintUrls(server, DEV_PUBLIC_EXPOSURE_WARNING);\n\n\t\t\tconst serverListen = server.listen.bind(server);\n\t\t\tserver.listen = async (...args) => {\n\t\t\t\tconst result = await serverListen(...args);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait setupDevTunnel(server, ctx, tunnelManager);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait Promise.allSettled([\n\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\tstopTunnel();\n\t\t\t\t\t\t})(),\n\t\t\t\t\t\tserver.close(),\n\t\t\t\t\t]);\n\n\t\t\t\t\t// The user explicitly requested tunnel sharing, so tunnel startup failure is fatal.\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tasync configurePreviewServer(server) {\n\t\t\tassertIsPreview(ctx);\n\n\t\t\tif (!ctx.resolvedPluginConfig.tunnel) {\n\t\t\t\tstopTunnel();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttunnelManager ??= new TunnelManager(server.config.logger);\n\t\t\tpatchPrintUrls(server, PREVIEW_PUBLIC_EXPOSURE_WARNING);\n\t\t\tawait setupPreviewTunnel(server, tunnelManager);\n\n\t\t\tconst closePreviewServer = server.close.bind(server);\n\t\t\tserver.close = async () => {\n\t\t\t\tconst closePromise = closePreviewServer();\n\n\t\t\t\ttry {\n\t\t\t\t\tstopTunnel();\n\t\t\t\t} finally {\n\t\t\t\t\tawait closePromise;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t};\n});\n","import * as nodePath from \"node:path\";\nimport * as util from \"node:util\";\nimport { createRequest, sendResponse } from \"@remix-run/node-fetch-server\";\nimport {\n\tCoreHeaders,\n\tRequest as MiniflareRequest,\n\tResponse as MiniflareResponse,\n} from \"miniflare\";\nimport semverGte from \"semver/functions/gte\";\nimport { version as viteVersion } from \"vite\";\nimport * as vite from \"vite\";\nimport { PROXY_SHARED_SECRET } from \"./constants\";\nimport { warnIfQuickTunnelSseResponse } from \"./plugins/tunnel\";\nimport type { PluginContext } from \"./context\";\nimport type * as http from \"node:http\";\n\nexport const debuglog = util.debuglog(\"@cloudflare:vite-plugin\");\n\n/**\n * Creates an internal plugin to be used inside the main `vite-plugin-cloudflare` plugin.\n * The provided `name` will be prefixed with `vite-plugin-cloudflare:`.\n */\nexport function createPlugin(\n\tname: string,\n\tpluginFactory: (ctx: PluginContext) => Omit<vite.Plugin, \"name\">\n): (ctx: PluginContext) => vite.Plugin {\n\treturn (ctx) => {\n\t\treturn {\n\t\t\tname: `vite-plugin-cloudflare:${name}`,\n\t\t\tsharedDuringBuild: true,\n\t\t\t...pluginFactory(ctx),\n\t\t};\n\t};\n}\n\nexport function getOutputDirectory(\n\tuserConfig: vite.UserConfig,\n\tenvironmentName: string\n) {\n\tconst rootOutputDirectory = userConfig.build?.outDir ?? \"dist\";\n\n\treturn (\n\t\tuserConfig.environments?.[environmentName]?.build?.outDir ??\n\t\tnodePath.join(rootOutputDirectory, environmentName)\n\t);\n}\n\nconst postfixRE = /[?#].*$/;\nexport function cleanUrl(url: string): string {\n\treturn url.replace(postfixRE, \"\");\n}\n\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Pick<Partial<T>, K>;\n\nexport type MaybePromise<T> = Promise<T> | T;\n\nexport type Defined<T> = Exclude<T, undefined>;\n\nexport function withTrailingSlash(path: string): string {\n\treturn path.endsWith(\"/\") ? path : `${path}/`;\n}\n\nexport function createRequestHandler(\n\thandler: (\n\t\trequest: MiniflareRequest,\n\t\treq: vite.Connect.IncomingMessage\n\t) => Promise<MiniflareResponse>\n): (\n\treq: vite.Connect.IncomingMessage,\n\tres: http.ServerResponse,\n\tnext: vite.Connect.NextFunction\n) => Promise<void> {\n\treturn async (req, res, next) => {\n\t\tlet request: Request | undefined;\n\n\t\ttry {\n\t\t\t// Built in vite middleware trims out the base path when passing in the request\n\t\t\t// We can restore it by using the `originalUrl` property\n\t\t\t// This makes sure the worker receives the correct url in both dev using vite and production\n\t\t\tif (req.originalUrl) {\n\t\t\t\treq.url = req.originalUrl;\n\t\t\t}\n\t\t\trequest = createRequest(req, res);\n\n\t\t\tlet response = await handler(toMiniflareRequest(request), req);\n\n\t\t\t// Vite uses HTTP/2 when `server.https` or `preview.https` is enabled\n\t\t\tif (req.httpVersionMajor === 2) {\n\t\t\t\tresponse = new MiniflareResponse(response.body, response);\n\t\t\t\t// HTTP/2 disallows use of the `transfer-encoding` header\n\t\t\t\tresponse.headers.delete(\"transfer-encoding\");\n\t\t\t}\n\n\t\t\twarnIfQuickTunnelSseResponse(response.headers.get(\"content-type\"));\n\n\t\t\tawait sendResponse(res, response as unknown as Response);\n\t\t} catch (error) {\n\t\t\tif (request?.signal.aborted) {\n\t\t\t\t// If the request was aborted, ignore the error\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnext(error);\n\t\t}\n\t};\n}\n\nexport function satisfiesMinimumViteVersion(minVersion: string): boolean {\n\treturn semverGte(viteVersion, minVersion);\n}\n\nfunction toMiniflareRequest(request: Request): MiniflareRequest {\n\tconst host = request.headers.get(\"Host\");\n\tconst xForwardedHost = request.headers.get(\"X-Forwarded-Host\");\n\n\tif (host && !xForwardedHost) {\n\t\t// Set the `x-forwarded-host` header to the host of the Vite server if it is not already set\n\t\t// Note that the `host` header inside the Worker will contain the workerd host\n\t\t// TODO: reconsider this when adopting `miniflare.dispatchFetch` as it may be possible to provide the Vite server host in the `host` header\n\t\trequest.headers.set(\"X-Forwarded-Host\", host);\n\t}\n\n\t// Add the proxy shared secret to the request headers\n\t// so the proxy worker can trust it and add host headers back\n\trequest.headers.set(CoreHeaders.PROXY_SHARED_SECRET, PROXY_SHARED_SECRET);\n\n\t// Undici sets the `Sec-Fetch-Mode` header to `cors` so we capture it in a custom header to be converted back later.\n\tconst secFetchMode = request.headers.get(\"Sec-Fetch-Mode\");\n\tif (secFetchMode) {\n\t\trequest.headers.set(CoreHeaders.SEC_FETCH_MODE, secFetchMode);\n\t}\n\treturn new MiniflareRequest(request.url, {\n\t\tmethod: request.method,\n\t\theaders: [[\"accept-encoding\", \"identity\"], ...request.headers],\n\t\tbody: request.body,\n\t\tduplex: \"half\",\n\t\tsignal: request.signal,\n\t});\n}\n\nexport const isRolldown = \"rolldownVersion\" in vite;\n","import assert from \"node:assert\";\nimport * as wrangler from \"wrangler\";\nimport { debuglog } from \"./utils\";\nimport type { CloudflareDevEnvironment } from \"./cloudflare-environment\";\nimport type { Worker, WorkersResolvedConfig } from \"./plugin-config\";\nimport type { Miniflare } from \"miniflare\";\nimport type * as vite from \"vite\";\n\nexport type ExportTypes = Record<\n\tstring,\n\t\"DurableObject\" | \"WorkerEntrypoint\" | \"WorkflowEntrypoint\"\n>;\n\nfunction getWorkerNameToWorkerEntrypointExportsMap(\n\tworkers: Worker[]\n): Map<string, Set<string>> {\n\tconst workerNameToWorkerEntrypointExportsMap = new Map(\n\t\tworkers.map((worker) => [worker.config.name, new Set<string>()])\n\t);\n\n\tfor (const worker of workers) {\n\t\tfor (const value of worker.config.services ?? []) {\n\t\t\tif (value.entrypoint !== undefined && value.entrypoint !== \"default\") {\n\t\t\t\tconst exportNames = workerNameToWorkerEntrypointExportsMap.get(\n\t\t\t\t\tvalue.service\n\t\t\t\t);\n\n\t\t\t\texportNames?.add(value.entrypoint);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn workerNameToWorkerEntrypointExportsMap;\n}\n\nfunction getWorkerNameToDurableObjectExportsMap(\n\tworkers: Worker[]\n): Map<string, Set<string>> {\n\tconst workerNameToDurableObjectExportsMap = new Map(\n\t\tworkers.map((worker) => [\n\t\t\tworker.config.name,\n\t\t\tnew Set(\n\t\t\t\twrangler\n\t\t\t\t\t.unstable_getDurableObjectClassNameToUseSQLiteMap(\n\t\t\t\t\t\tworker.config.migrations\n\t\t\t\t\t)\n\t\t\t\t\t.keys()\n\t\t\t),\n\t\t])\n\t);\n\n\tfor (const worker of workers) {\n\t\tfor (const value of worker.config.durable_objects.bindings) {\n\t\t\tif (value.script_name) {\n\t\t\t\tconst exportNames = workerNameToDurableObjectExportsMap.get(\n\t\t\t\t\tvalue.script_name\n\t\t\t\t);\n\n\t\t\t\texportNames?.add(value.class_name);\n\t\t\t} else {\n\t\t\t\tconst exportNames = workerNameToDurableObjectExportsMap.get(\n\t\t\t\t\tworker.config.name\n\t\t\t\t);\n\n\t\t\t\texportNames?.add(value.class_name);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn workerNameToDurableObjectExportsMap;\n}\n\nfunction getWorkerNameToWorkflowEntrypointExportsMap(\n\tworkers: Worker[]\n): Map<string, Set<string>> {\n\tconst workerNameToWorkflowEntrypointExportsMap = new Map(\n\t\tworkers.map((worker) => [worker.config.name, new Set<string>()])\n\t);\n\n\tfor (const worker of workers) {\n\t\tfor (const value of worker.config.workflows) {\n\t\t\tif (value.script_name) {\n\t\t\t\tconst exportNames = workerNameToWorkflowEntrypointExportsMap.get(\n\t\t\t\t\tvalue.script_name\n\t\t\t\t);\n\n\t\t\t\texportNames?.add(value.class_name);\n\t\t\t} else {\n\t\t\t\tconst exportNames = workerNameToWorkflowEntrypointExportsMap.get(\n\t\t\t\t\tworker.config.name\n\t\t\t\t);\n\n\t\t\t\texportNames?.add(value.class_name);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn workerNameToWorkflowEntrypointExportsMap;\n}\n\n/**\n * Derives initial export types for all Workers from the Worker config files and returns them in a Map\n */\nexport function getInitialWorkerNameToExportTypesMap(\n\tresolvedPluginConfig: WorkersResolvedConfig\n): Map<string, ExportTypes> {\n\tconst workers = [...resolvedPluginConfig.environmentNameToWorkerMap.values()];\n\tconst workerNameToWorkerEntrypointExportsMap =\n\t\tgetWorkerNameToWorkerEntrypointExportsMap(workers);\n\tconst workerNameToDurableObjectExportsMap =\n\t\tgetWorkerNameToDurableObjectExportsMap(workers);\n\tconst workerNameToWorkflowEntrypointExportsMap =\n\t\tgetWorkerNameToWorkflowEntrypointExportsMap(workers);\n\n\treturn new Map(\n\t\tworkers.map((worker) => {\n\t\t\tconst workerEntrypointExports =\n\t\t\t\tworkerNameToWorkerEntrypointExportsMap.get(worker.config.name);\n\t\t\tassert(\n\t\t\t\tworkerEntrypointExports,\n\t\t\t\t`WorkerEntrypoint exports not found for Worker \"${worker.config.name}\"`\n\t\t\t);\n\t\t\tconst durableObjectExports = workerNameToDurableObjectExportsMap.get(\n\t\t\t\tworker.config.name\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tdurableObjectExports,\n\t\t\t\t`DurableObject exports not found for Worker \"${worker.config.name}\"`\n\t\t\t);\n\t\t\tconst workflowEntrypointExports =\n\t\t\t\tworkerNameToWorkflowEntrypointExportsMap.get(worker.config.name);\n\t\t\tassert(\n\t\t\t\tworkflowEntrypointExports,\n\t\t\t\t`WorkflowEntrypoint exports not found for Worker \"${worker.config.name}\"`\n\t\t\t);\n\n\t\t\tconst exportTypes: ExportTypes = {};\n\n\t\t\tfor (const exportName of workerEntrypointExports) {\n\t\t\t\texportTypes[exportName] = \"WorkerEntrypoint\";\n\t\t\t}\n\n\t\t\tfor (const exportName of durableObjectExports) {\n\t\t\t\texportTypes[exportName] = \"DurableObject\";\n\t\t\t}\n\n\t\t\tfor (const exportName of workflowEntrypointExports) {\n\t\t\t\texportTypes[exportName] = \"WorkflowEntrypoint\";\n\t\t\t}\n\n\t\t\treturn [worker.config.name, exportTypes];\n\t\t})\n\t);\n}\n\n/**\n * Fetches the export types for all Workers and returns them in a Map\n */\nexport async function getCurrentWorkerNameToExportTypesMap(\n\tresolvedPluginConfig: WorkersResolvedConfig,\n\tviteDevServer: vite.ViteDevServer,\n\tminiflare: Miniflare\n): Promise<Map<string, ExportTypes>> {\n\t// Vite's internal CSS plugins rely on `buildStart` being called for the client environment before modules are transformed in server environments\n\t// Vite calls this method when initialising the dev server but we need to make requests before that happens\n\tawait viteDevServer.environments.client.pluginContainer.buildStart();\n\n\tconst results = await Promise.all(\n\t\t[...resolvedPluginConfig.environmentNameToWorkerMap].map(\n\t\t\tasync ([environmentName, worker]) => {\n\t\t\t\tdebuglog(`Fetching export types for worker \"${worker.config.name}\"`);\n\t\t\t\tconst exportTypes = await (\n\t\t\t\t\tviteDevServer.environments[\n\t\t\t\t\t\tenvironmentName\n\t\t\t\t\t] as CloudflareDevEnvironment\n\t\t\t\t).fetchWorkerExportTypes(miniflare, worker.config);\n\n\t\t\t\treturn [worker.config.name, exportTypes] as const;\n\t\t\t}\n\t\t)\n\t);\n\n\treturn new Map(results);\n}\n\n/**\n * Compares the export types for all Workers and returns `true` if any have changed\n */\nexport function compareWorkerNameToExportTypesMaps(\n\toldWorkerNameToExportTypesMap: Map<string, ExportTypes>,\n\tnewWorkerNameToExportTypesMap: Map<string, ExportTypes>\n): boolean {\n\tfor (const workerName of newWorkerNameToExportTypesMap.keys()) {\n\t\tconst oldExportTypes = oldWorkerNameToExportTypesMap.get(workerName);\n\t\tassert(oldExportTypes, \"Expected old export types to be defined\");\n\t\tconst newExportTypes = newWorkerNameToExportTypesMap.get(workerName);\n\t\tassert(newExportTypes, \"Expected new export types to be defined\");\n\t\tconst hasChanged = compareExportTypes(oldExportTypes, newExportTypes);\n\n\t\tif (hasChanged) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Compares two `ExportTypes` objects and returns true if they do not match.\n * Checks for added/removed exports and changed export types.\n */\nexport function compareExportTypes(\n\toldExportTypes: ExportTypes,\n\tnewExportTypes: ExportTypes\n): boolean {\n\tconst oldKeys = Object.keys(oldExportTypes);\n\tconst newKeys = Object.keys(newExportTypes);\n\n\t// Check if number of exports has changed\n\tif (oldKeys.length !== newKeys.length) {\n\t\treturn true;\n\t}\n\n\t// Check if any keys were added or removed, or if any values changed\n\tfor (const key of newKeys) {\n\t\tif (\n\t\t\t!(key in oldExportTypes) ||\n\t\t\toldExportTypes[key] !== newExportTypes[key]\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","import assert from \"node:assert\";\nimport { Miniflare } from \"miniflare\";\nimport { getInitialWorkerNameToExportTypesMap } from \"./export-types\";\nimport { debuglog } from \"./utils\";\nimport type { ExportTypes } from \"./export-types\";\nimport type { NodeJsCompat } from \"./nodejs-compat\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tPreviewResolvedConfig,\n\tResolvedPluginConfig,\n\tResolvedWorkerConfig,\n\tWorker,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type { MiniflareOptions } from \"miniflare\";\nimport type * as vite from \"vite\";\nimport type { Unstable_Config } from \"wrangler\";\n\n/**\n * Used to store state that should persist across server restarts.\n * This is then accessed via `PluginContext`.\n */\nexport interface SharedContext {\n\tminiflare?: Miniflare;\n\tworkerNameToExportTypesMap?: Map<string, ExportTypes>;\n\thasShownWorkerConfigWarnings: boolean;\n\t/** Tracks the number of in-flight dev server restarts (0 means no restart in progress) */\n\trestartingDevServerCount: number;\n\t/** Allowed hostnames for tunnel connections */\n\ttunnelHostnames: Set<string>;\n}\n\n/**\n * Used to provide context to internal plugins.\n * It should be reinstantiated each time the main plugin is created.\n */\nexport class PluginContext {\n\t#sharedContext: SharedContext;\n\t#resolvedPluginConfig?: ResolvedPluginConfig;\n\t#resolvedViteConfig?: vite.ResolvedConfig;\n\n\tconstructor(sharedContext: SharedContext) {\n\t\tthis.#sharedContext = sharedContext;\n\t}\n\n\t/** Creates a new Miniflare instance or updates the existing instance */\n\tasync startOrUpdateMiniflare(options: MiniflareOptions): Promise<void> {\n\t\tif (!this.#sharedContext.miniflare) {\n\t\t\tdebuglog(\"Creating new Miniflare instance\");\n\t\t\tthis.#sharedContext.miniflare = new Miniflare(options);\n\t\t} else {\n\t\t\tdebuglog(\"Updating the existing Miniflare instance\");\n\t\t\tawait this.#sharedContext.miniflare.setOptions(options);\n\t\t}\n\t\tdebuglog(\"Miniflare is ready\");\n\t}\n\n\tasync disposeMiniflare(): Promise<void> {\n\t\tawait this.#sharedContext.miniflare?.dispose();\n\t\tthis.#sharedContext.miniflare = undefined;\n\t}\n\n\tget miniflare(): Miniflare {\n\t\tassert(this.#sharedContext.miniflare, \"Expected `miniflare` to be defined\");\n\n\t\treturn this.#sharedContext.miniflare;\n\t}\n\n\t/**\n\t * Gets the resolved inspector port provided by Miniflare\n\t */\n\tasync getResolvedInspectorPort(): Promise<number | null> {\n\t\tif (\n\t\t\tthis.resolvedPluginConfig.inspectorPort === false ||\n\t\t\t!this.#sharedContext.miniflare\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst miniflareInspectorUrl =\n\t\t\tawait this.#sharedContext.miniflare.getInspectorURL();\n\n\t\treturn Number.parseInt(miniflareInspectorUrl.port);\n\t}\n\n\tsetWorkerNameToExportTypesMap(\n\t\tworkerNameToExportTypesMap: Map<string, ExportTypes>\n\t): void {\n\t\tthis.#sharedContext.workerNameToExportTypesMap = workerNameToExportTypesMap;\n\t}\n\n\tget workerNameToExportTypesMap(): Map<string, ExportTypes> {\n\t\tif (!this.#sharedContext.workerNameToExportTypesMap) {\n\t\t\tif (this.resolvedPluginConfig.type !== \"workers\") {\n\t\t\t\treturn new Map();\n\t\t\t}\n\n\t\t\treturn getInitialWorkerNameToExportTypesMap(this.resolvedPluginConfig);\n\t\t}\n\n\t\treturn this.#sharedContext.workerNameToExportTypesMap;\n\t}\n\n\tsetHasShownWorkerConfigWarnings(hasShownWorkerConfigWarnings: boolean): void {\n\t\tthis.#sharedContext.hasShownWorkerConfigWarnings =\n\t\t\thasShownWorkerConfigWarnings;\n\t}\n\n\tget hasShownWorkerConfigWarnings(): boolean {\n\t\treturn this.#sharedContext.hasShownWorkerConfigWarnings;\n\t}\n\n\tbeginRestartingDevServer(): void {\n\t\tthis.#sharedContext.restartingDevServerCount++;\n\t}\n\n\tendRestartingDevServer(): void {\n\t\tthis.#sharedContext.restartingDevServerCount--;\n\t}\n\n\tget isRestartingDevServer(): boolean {\n\t\treturn this.#sharedContext.restartingDevServerCount > 0;\n\t}\n\n\tgetTunnelHostnames(): string[] {\n\t\treturn Array.from(this.#sharedContext.tunnelHostnames);\n\t}\n\n\treplaceTunnelHostnames(tunnelHostnames: string[]): void {\n\t\tthis.#sharedContext.tunnelHostnames.clear();\n\t\tfor (const tunnelHostname of tunnelHostnames) {\n\t\t\tthis.#sharedContext.tunnelHostnames.add(tunnelHostname);\n\t\t}\n\t}\n\n\tclearTunnelHostnames(): void {\n\t\tthis.#sharedContext.tunnelHostnames.clear();\n\t}\n\n\tsetResolvedPluginConfig(resolvedPluginConfig: ResolvedPluginConfig): void {\n\t\tthis.#resolvedPluginConfig = resolvedPluginConfig;\n\t}\n\n\tget resolvedPluginConfig(): ResolvedPluginConfig {\n\t\tassert(\n\t\t\tthis.#resolvedPluginConfig,\n\t\t\t\"Expected `resolvedPluginConfig` to be defined\"\n\t\t);\n\n\t\treturn this.#resolvedPluginConfig;\n\t}\n\n\tsetResolvedViteConfig(resolvedViteConfig: vite.ResolvedConfig): void {\n\t\tthis.#resolvedViteConfig = resolvedViteConfig;\n\t}\n\n\tget resolvedViteConfig(): vite.ResolvedConfig {\n\t\tassert(\n\t\t\tthis.#resolvedViteConfig,\n\t\t\t\"Expected `resolvedViteConfig` to be defined\"\n\t\t);\n\n\t\treturn this.#resolvedViteConfig;\n\t}\n\n\tisChildEnvironment(environmentName: string): boolean {\n\t\tif (this.resolvedPluginConfig.type === \"preview\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const childEnvironmentNames of this.resolvedPluginConfig.environmentNameToChildEnvironmentNamesMap.values()) {\n\t\t\tif (childEnvironmentNames.includes(environmentName)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#getWorker(environmentName: string): Worker | undefined {\n\t\tif (this.resolvedPluginConfig.type === \"preview\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst worker =\n\t\t\tthis.resolvedPluginConfig.environmentNameToWorkerMap.get(environmentName);\n\n\t\tif (worker) {\n\t\t\treturn worker;\n\t\t}\n\n\t\t// Check if this is a child environment and, if so, return the parent's Worker\n\t\tfor (const [parentEnvironmentName, childEnvironmentNames] of this\n\t\t\t.resolvedPluginConfig.environmentNameToChildEnvironmentNamesMap) {\n\t\t\tif (childEnvironmentNames.includes(environmentName)) {\n\t\t\t\treturn this.resolvedPluginConfig.environmentNameToWorkerMap.get(\n\t\t\t\t\tparentEnvironmentName\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tgetWorkerConfig(environmentName: string): ResolvedWorkerConfig | undefined {\n\t\treturn this.#getWorker(environmentName)?.config;\n\t}\n\n\tget allWorkerConfigs(): Unstable_Config[] {\n\t\tif (this.resolvedPluginConfig.type === \"preview\") {\n\t\t\treturn this.resolvedPluginConfig.workers;\n\t\t}\n\n\t\treturn Array.from(\n\t\t\tthis.resolvedPluginConfig.environmentNameToWorkerMap.values()\n\t\t).map((worker) => worker.config);\n\t}\n\n\tget entryWorkerConfig(): ResolvedWorkerConfig | undefined {\n\t\tif (this.resolvedPluginConfig.type !== \"workers\") {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.resolvedPluginConfig.environmentNameToWorkerMap.get(\n\t\t\tthis.resolvedPluginConfig.entryWorkerEnvironmentName\n\t\t)?.config;\n\t}\n\n\tgetNodeJsCompat(environmentName: string): NodeJsCompat | undefined {\n\t\treturn this.#getWorker(environmentName)?.nodeJsCompat;\n\t}\n}\n\ninterface NarrowedPluginContext<\n\tT extends ResolvedPluginConfig,\n> extends PluginContext {\n\treadonly resolvedPluginConfig: T;\n}\n\nexport type AssetsOnlyPluginContext =\n\tNarrowedPluginContext<AssetsOnlyResolvedConfig>;\nexport type WorkersPluginContext = NarrowedPluginContext<WorkersResolvedConfig>;\nexport type PreviewPluginContext = NarrowedPluginContext<PreviewResolvedConfig>;\n\nexport function assertIsNotPreview(\n\tctx: PluginContext\n): asserts ctx is AssetsOnlyPluginContext | WorkersPluginContext {\n\tassert(\n\t\tctx.resolvedPluginConfig.type !== \"preview\",\n\t\t`Expected \"assets-only\" or \"workers\" plugin config`\n\t);\n}\n\nexport function assertIsPreview(\n\tctx: PluginContext\n): asserts ctx is PreviewPluginContext {\n\tassert(\n\t\tctx.resolvedPluginConfig.type === \"preview\",\n\t\t`Expected \"preview\" plugin config`\n\t);\n}\n","export const REDIRECTS_VERSION = 1;\nexport const HEADERS_VERSION = 2;\n\nexport const PERMITTED_STATUS_CODES = new Set([200, 301, 302, 303, 307, 308]);\nexport const HEADER_SEPARATOR = \":\";\nexport const MAX_LINE_LENGTH = 2000;\nexport const MAX_HEADER_RULES = 100;\nexport const MAX_DYNAMIC_REDIRECT_RULES = 100;\nexport const MAX_STATIC_REDIRECT_RULES = 2000;\nexport const UNSET_OPERATOR = \"! \";\n\nexport const SPLAT_REGEX = /\\*/g;\nexport const PLACEHOLDER_REGEX = /:[A-Za-z]\\w*/g;\n\n/** Max number of rules in `run_worker_first` */\nexport const MAX_ROUTES_RULES = 100;\n/** Max char length of each rule in `run_worker_first` */\nexport const MAX_ROUTES_RULE_LENGTH = 100;\n","import { MAX_ROUTES_RULE_LENGTH, MAX_ROUTES_RULES } from \"./constants\";\nimport type { StaticRouting } from \"../types\";\n\n// copy of what EWC does. Wrangler uploads the rules in one array (so the API is consistent with Wrangler config),\n// but router Worker expects the rules to be split into two arrays, which we do here.\n// This logic is translated from assets/staticrouting.go.\n\nexport function parseStaticRouting(input: string[]): StaticRouting {\n\tif (input.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"No `run_worker_first` rules were provided; must provide at least 1 rule.\"\n\t\t);\n\t}\n\tif (input.length > MAX_ROUTES_RULES) {\n\t\tthrow new Error(\n\t\t\t`Too many \\`run_worker_first\\` rules were provided; ${input.length} rules provided exceeds max of ${MAX_ROUTES_RULES}.`\n\t\t);\n\t}\n\n\tconst rawAssetWorkerRules = [];\n\tconst assetWorkerRules = [];\n\tconst userWorkerRules = [];\n\tconst invalidRules = [];\n\n\tfor (const rule of input) {\n\t\tif (rule.startsWith(\"!/\")) {\n\t\t\tassetWorkerRules.push(rule.slice(1)); // Remove leading !\n\t\t\trawAssetWorkerRules.push(rule);\n\t\t} else if (rule.startsWith(\"/\")) {\n\t\t\tuserWorkerRules.push(rule);\n\t\t} else if (rule.startsWith(\"!\")) {\n\t\t\tinvalidRules.push(`'${rule}': negative rules must start with '!/'`);\n\t\t} else {\n\t\t\tinvalidRules.push(`'${rule}': rules must start with '/' or '!/'`);\n\t\t}\n\t}\n\n\tif (assetWorkerRules.length > 0 && userWorkerRules.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"Only negative `run_worker_first` rules were provided; must provide at least 1 non-negative rule\"\n\t\t);\n\t}\n\n\tconst invalidAssetWorkerRules =\n\t\tvalidateStaticRoutingRules(rawAssetWorkerRules);\n\tconst invalidUserWorkerRules = validateStaticRoutingRules(userWorkerRules);\n\tconst errorMessage = formatInvalidRoutes([\n\t\t...invalidRules,\n\t\t...invalidUserWorkerRules,\n\t\t...invalidAssetWorkerRules,\n\t]);\n\n\tif (errorMessage) {\n\t\tthrow new Error(errorMessage);\n\t}\n\n\treturn { asset_worker: assetWorkerRules, user_worker: userWorkerRules };\n}\n\nfunction validateStaticRoutingRules(rules: string[]): string[] {\n\tconst invalid: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const rule of rules) {\n\t\tif (rule.length > MAX_ROUTES_RULE_LENGTH) {\n\t\t\tinvalid.push(\n\t\t\t\t`'${rule}': all rules must be less than ${MAX_ROUTES_RULE_LENGTH} characters in length`\n\t\t\t);\n\t\t}\n\t\tif (seen.has(rule)) {\n\t\t\tinvalid.push(`'${rule}': rule is a duplicate; rules must be unique`);\n\t\t}\n\t\tif (rule.endsWith(\"*\")) {\n\t\t\t// Check for redundant rules due to a glob\n\t\t\tfor (const otherRule of rules) {\n\t\t\t\tif (otherRule !== rule && otherRule.startsWith(rule.slice(0, -1))) {\n\t\t\t\t\tinvalid.push(`'${otherRule}': rule '${rule}' makes it redundant`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tseen.add(rule);\n\t}\n\treturn invalid;\n}\n\nconst formatInvalidRoutes = (invalidRules: string[]) => {\n\tif (invalidRules.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn `Invalid routes in \\`run_worker_first\\`:\\n` + invalidRules.join(\"\\n\");\n};\n","function isPlainObject(value) {\n  if (value === null || typeof value !== \"object\") {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n    return false;\n  }\n  if (Symbol.iterator in value) {\n    return false;\n  }\n  if (Symbol.toStringTag in value) {\n    return Object.prototype.toString.call(value) === \"[object Module]\";\n  }\n  return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n  if (!isPlainObject(defaults)) {\n    return _defu(baseObject, {}, namespace, merger);\n  }\n  const object = Object.assign({}, defaults);\n  for (const key in baseObject) {\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = baseObject[key];\n    if (value === null || value === void 0) {\n      continue;\n    }\n    if (merger && merger(object, key, value, namespace)) {\n      continue;\n    }\n    if (Array.isArray(value) && Array.isArray(object[key])) {\n      object[key] = [...value, ...object[key]];\n    } else if (isPlainObject(value) && isPlainObject(object[key])) {\n      object[key] = _defu(\n        value,\n        object[key],\n        (namespace ? `${namespace}.` : \"\") + key.toString(),\n        merger\n      );\n    } else {\n      object[key] = value;\n    }\n  }\n  return object;\n}\nfunction createDefu(merger) {\n  return (...arguments_) => (\n    // eslint-disable-next-line unicorn/no-array-reduce\n    arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n  );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n  if (object[key] !== void 0 && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n  if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","import assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as wrangler from \"wrangler\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type * as vite from \"vite\";\n\ninterface DeployConfig {\n\tconfigPath: string;\n\tauxiliaryWorkers: Array<{ configPath: string }>;\n\tprerenderWorkerConfigPath?: string;\n}\n\nfunction getDeployConfigPath(root: string) {\n\treturn path.resolve(root, \".wrangler\", \"deploy\", \"config.json\");\n}\n\nexport function getWorkerConfigs(root: string, isPrerender: boolean) {\n\tconst deployConfigPath = getDeployConfigPath(root);\n\tconst deployConfig = JSON.parse(\n\t\tfs.readFileSync(deployConfigPath, \"utf-8\")\n\t) as DeployConfig;\n\n\treturn [\n\t\t...(isPrerender && deployConfig.prerenderWorkerConfigPath\n\t\t\t? [{ configPath: deployConfig.prerenderWorkerConfigPath }]\n\t\t\t: []),\n\t\t{ configPath: deployConfig.configPath },\n\t\t...deployConfig.auxiliaryWorkers,\n\t].map(({ configPath }) => {\n\t\tconst resolvedConfigPath = path.resolve(\n\t\t\tpath.dirname(deployConfigPath),\n\t\t\tconfigPath\n\t\t);\n\t\treturn wrangler.unstable_readConfig({ config: resolvedConfigPath });\n\t});\n}\n\nfunction getRelativePathToWorkerConfig(\n\tdeployConfigDirectory: string,\n\troot: string,\n\toutputDirectory: string\n) {\n\treturn path.relative(\n\t\tdeployConfigDirectory,\n\t\tpath.resolve(root, outputDirectory, \"wrangler.json\")\n\t);\n}\n\nexport function writeDeployConfig(\n\tresolvedPluginConfig: AssetsOnlyResolvedConfig | WorkersResolvedConfig,\n\tresolvedViteConfig: vite.ResolvedConfig\n) {\n\tconst deployConfigPath = getDeployConfigPath(resolvedViteConfig.root);\n\tconst deployConfigDirectory = path.dirname(deployConfigPath);\n\n\tfs.mkdirSync(deployConfigDirectory, { recursive: true });\n\n\tif (resolvedPluginConfig.type === \"assets-only\") {\n\t\tconst clientOutputDirectory =\n\t\t\tresolvedViteConfig.environments.client?.build.outDir;\n\n\t\tassert(\n\t\t\tclientOutputDirectory,\n\t\t\t\"Unexpected error: client environment output directory is undefined\"\n\t\t);\n\n\t\tconst prerenderOutputDirectory =\n\t\t\tresolvedPluginConfig.prerenderWorkerEnvironmentName\n\t\t\t\t? resolvedViteConfig.environments[\n\t\t\t\t\t\tresolvedPluginConfig.prerenderWorkerEnvironmentName\n\t\t\t\t\t]?.build.outDir\n\t\t\t\t: undefined;\n\n\t\tconst deployConfig: DeployConfig = {\n\t\t\tconfigPath: getRelativePathToWorkerConfig(\n\t\t\t\tdeployConfigDirectory,\n\t\t\t\tresolvedViteConfig.root,\n\t\t\t\tclientOutputDirectory\n\t\t\t),\n\t\t\tauxiliaryWorkers: [],\n\t\t\tprerenderWorkerConfigPath: prerenderOutputDirectory\n\t\t\t\t? getRelativePathToWorkerConfig(\n\t\t\t\t\t\tdeployConfigDirectory,\n\t\t\t\t\t\tresolvedViteConfig.root,\n\t\t\t\t\t\tprerenderOutputDirectory\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\tfs.writeFileSync(deployConfigPath, JSON.stringify(deployConfig));\n\t} else {\n\t\tlet entryWorkerConfigPath: string | undefined;\n\t\tlet prerenderWorkerConfigPath: string | undefined;\n\t\tconst auxiliaryWorkers: DeployConfig[\"auxiliaryWorkers\"] = [];\n\n\t\tfor (const environmentName of resolvedPluginConfig.environmentNameToWorkerMap.keys()) {\n\t\t\tconst outputDirectory =\n\t\t\t\tresolvedViteConfig.environments[environmentName]?.build.outDir;\n\n\t\t\tassert(\n\t\t\t\toutputDirectory,\n\t\t\t\t`Unexpected error: ${environmentName} environment output directory is undefined`\n\t\t\t);\n\n\t\t\tconst configPath = getRelativePathToWorkerConfig(\n\t\t\t\tdeployConfigDirectory,\n\t\t\t\tresolvedViteConfig.root,\n\t\t\t\toutputDirectory\n\t\t\t);\n\n\t\t\tif (environmentName === resolvedPluginConfig.entryWorkerEnvironmentName) {\n\t\t\t\tentryWorkerConfigPath = configPath;\n\t\t\t} else if (\n\t\t\t\tenvironmentName === resolvedPluginConfig.prerenderWorkerEnvironmentName\n\t\t\t) {\n\t\t\t\tprerenderWorkerConfigPath = configPath;\n\t\t\t} else {\n\t\t\t\tauxiliaryWorkers.push({ configPath });\n\t\t\t}\n\t\t}\n\n\t\tassert(\n\t\t\tentryWorkerConfigPath,\n\t\t\t`Unexpected error: entryWorkerConfigPath is undefined`\n\t\t);\n\n\t\tconst deployConfig: DeployConfig = {\n\t\t\tconfigPath: entryWorkerConfigPath,\n\t\t\tauxiliaryWorkers,\n\t\t\tprerenderWorkerConfigPath,\n\t\t};\n\n\t\tfs.writeFileSync(deployConfigPath, JSON.stringify(deployConfig));\n\t}\n}\n","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\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.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n  5: ecma5AndLessKeywords,\n  \"5module\": ecma5AndLessKeywords + \" export import\",\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\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, set) {\n  var pos = 0x10000;\n  for (var i = 0; i < set.length; i += 2) {\n    pos += set[i];\n    if (pos > code) { return false }\n    pos += set[i + 1];\n    if (pos >= code) { return true }\n  }\n  return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n  if (code < 65) { return code === 36 }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n  if (code < 48) { return code === 36 }\n  if (code < 58) { return true }\n  if (code < 65) { return false }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\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\nvar TokenType = function TokenType(label, conf) {\n  if ( conf === void 0 ) conf = {};\n\n  this.label = label;\n  this.keyword = conf.keyword;\n  this.beforeExpr = !!conf.beforeExpr;\n  this.startsExpr = !!conf.startsExpr;\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;\n  this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n  if ( options === void 0 ) options = {};\n\n  options.keyword = name;\n  return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  privateId: new TokenType(\"privateId\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n  coalesce: binop(\"??\", 1),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\", startsExpr),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n  return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n  if ( end === void 0 ) end = code.length;\n\n  for (var i = from; i < end; i++) {\n    var next = code.charCodeAt(i);\n    if (isNewLine(next))\n      { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n  }\n  return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n  hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n  toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n  return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) { return String.fromCharCode(code) }\n  code -= 0x10000;\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n  this.line = line;\n  this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n  return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n  this.start = start;\n  this.end = end;\n  if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n  for (var line = 1, cur = 0;;) {\n    var nextBreak = nextLineBreak(input, cur, offset);\n    if (nextBreak < 0) { return new Position(line, offset - cur) }\n    ++line;\n    cur = nextBreak;\n  }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n  // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n  // (the latest version the library supports). This influences\n  // support for strict mode, the set of reserved words, and support\n  // for new syntax features.\n  ecmaVersion: null,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called when\n  // a semicolon is automatically inserted. It will be passed the\n  // position of the inserted semicolon as an offset, and if\n  // `locations` is enabled, it is given the location as a `{line,\n  // column}` object as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program, and an import.meta expression\n  // in a script isn't considered an error.\n  allowImportExportEverywhere: false,\n  // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: null,\n  // When enabled, super identifiers are not constrained to\n  // appearing in methods and do not raise an error when they appear elsewhere.\n  allowSuperOutsideMethod: null,\n  // When enabled, hashbang directive in the beginning of file is\n  // allowed and treated as a line comment. Enabled by default when\n  // `ecmaVersion` >= 2023.\n  allowHashBang: false,\n  // By default, the parser will verify that private properties are\n  // only used in places where they are valid and have been declared.\n  // Set this to false to turn such checks off.\n  checkPrivateFields: true,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  // When this option has an array as value, objects representing the\n  // comments are pushed to it.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n  var options = {};\n\n  for (var opt in defaultOptions)\n    { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n  if (options.ecmaVersion === \"latest\") {\n    options.ecmaVersion = 1e8;\n  } else if (options.ecmaVersion == null) {\n    if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n      warnedAboutEcmaVersion = true;\n      console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n    }\n    options.ecmaVersion = 11;\n  } else if (options.ecmaVersion >= 2015) {\n    options.ecmaVersion -= 2009;\n  }\n\n  if (options.allowReserved == null)\n    { options.allowReserved = options.ecmaVersion < 5; }\n\n  if (!opts || opts.allowHashBang == null)\n    { options.allowHashBang = options.ecmaVersion >= 14; }\n\n  if (isArray(options.onToken)) {\n    var tokens = options.onToken;\n    options.onToken = function (token) { return tokens.push(token); };\n  }\n  if (isArray(options.onComment))\n    { options.onComment = pushComment(options, options.onComment); }\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    var comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    };\n    if (options.locations)\n      { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n    if (options.ranges)\n      { comment.range = [start, end]; }\n    array.push(comment);\n  }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128,\n    SCOPE_CLASS_STATIC_BLOCK = 256,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n  this.options = options = getOptions(options);\n  this.sourceFile = options.sourceFile;\n  this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n  var reserved = \"\";\n  if (options.allowReserved !== true) {\n    reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n    if (options.sourceType === \"module\") { reserved += \" await\"; }\n  }\n  this.reservedWords = wordsRegexp(reserved);\n  var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n  this.reservedWordsStrict = wordsRegexp(reservedStrict);\n  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n  this.input = String(input);\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  this.containsEsc = false;\n\n  // Set up token state\n\n  // The current position of the tokenizer in the input.\n  if (startPos) {\n    this.pos = startPos;\n    this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n  } else {\n    this.pos = this.lineStart = 0;\n    this.curLine = 1;\n  }\n\n  // Properties of the current token:\n  // Its type\n  this.type = types$1.eof;\n  // For tokens that include more information than their type, the value\n  this.value = null;\n  // Its start and end offset\n  this.start = this.end = this.pos;\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  this.startLoc = this.endLoc = this.curPosition();\n\n  // Position information for the previous token\n  this.lastTokEndLoc = this.lastTokStartLoc = null;\n  this.lastTokStart = this.lastTokEnd = this.pos;\n\n  // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n  this.context = this.initialContext();\n  this.exprAllowed = true;\n\n  // Figure out if it's a module code.\n  this.inModule = options.sourceType === \"module\";\n  this.strict = this.inModule || this.strictDirective(this.pos);\n\n  // Used to signify the start of a potential arrow function\n  this.potentialArrowAt = -1;\n  this.potentialArrowInForAwait = false;\n\n  // Positions to delayed-check that yield/await does not exist in default parameters.\n  this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n  // Labels in scope.\n  this.labels = [];\n  // Thus-far undefined exports.\n  this.undefinedExports = Object.create(null);\n\n  // If enabled, skip leading hashbang line.\n  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n    { this.skipLineComment(2); }\n\n  // Scope tracking for duplicate variable names (see scope.js)\n  this.scopeStack = [];\n  this.enterScope(SCOPE_TOP);\n\n  // For RegExp validation\n  this.regexpState = null;\n\n  // The stack of private names.\n  // Each element has two properties: 'declared' and 'used'.\n  // When it exited from the outermost class definition, all used private names must be declared.\n  this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n  var node = this.options.program || this.startNode();\n  this.nextToken();\n  return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n  for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n    if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n  }\n  return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n  return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n    var plugins = [], len = arguments.length;\n    while ( len-- ) plugins[ len ] = arguments[ len ];\n\n  var cls = this;\n  for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n  return cls\n};\n\nParser.parse = function parse (input, options) {\n  return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n  var parser = new this(options, input, pos);\n  parser.nextToken();\n  return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n  return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n  if (this.options.ecmaVersion < 5) { return false }\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    var match = literal.exec(this.input.slice(start));\n    if (!match) { return false }\n    if ((match[1] || match[2]) === \"use strict\") {\n      skipWhiteSpace.lastIndex = start + match[0].length;\n      var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n      var next = this.input.charAt(end);\n      return next === \";\" || next === \"}\" ||\n        (lineBreak.test(spaceAfter[0]) &&\n         !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n    }\n    start += match[0].length;\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    if (this.input[start] === \";\")\n      { start++; }\n  }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n  if (this.type === type) {\n    this.next();\n    return true\n  } else {\n    return false\n  }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n  return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n  if (!this.isContextual(name)) { return false }\n  this.next();\n  return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n  if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n  return this.type === types$1.eof ||\n    this.type === types$1.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n    return true\n  }\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\npp$9.semicolon = function() {\n  if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n    if (!notNext)\n      { this.next(); }\n    return true\n  }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n  this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) { return }\n  if (refDestructuringErrors.trailingComma > -1)\n    { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n  if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) { return false }\n  var shorthandAssign = refDestructuringErrors.shorthandAssign;\n  var doubleProto = refDestructuringErrors.doubleProto;\n  if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n  if (shorthandAssign >= 0)\n    { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n  if (doubleProto >= 0)\n    { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n  if (this.awaitPos)\n    { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    { return this.isSimpleAssignTarget(expr.expression) }\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\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\npp$8.parseTopLevel = function(node) {\n  var exports = Object.create(null);\n  if (!node.body) { node.body = []; }\n  while (this.type !== types$1.eof) {\n    var stmt = this.parseStatement(null, true, exports);\n    node.body.push(stmt);\n  }\n  if (this.inModule)\n    { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n      {\n        var name = list[i];\n\n        this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n      } }\n  this.adaptDirectivePrologue(node.body);\n  this.next();\n  node.sourceType = this.options.sourceType;\n  return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n  if (context) { return false }\n\n  if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n  if (isIdentifierStart(nextCh, true)) {\n    var pos = next + 1;\n    while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n    if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n    var ident = this.input.slice(next, pos);\n    if (!keywordRelationalOperator.test(ident)) { return true }\n  }\n  return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    { return false }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, after;\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length ||\n     !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\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\npp$8.parseStatement = function(context, topLevel, exports) {\n  var starttype = this.type, node = this.startNode(), kind;\n\n  if (this.isLet(context)) {\n    starttype = types$1._var;\n    kind = \"let\";\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case types$1._debugger: return this.parseDebuggerStatement(node)\n  case types$1._do: return this.parseDoStatement(node)\n  case types$1._for: return this.parseForStatement(node)\n  case types$1._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n    return this.parseFunctionStatement(node, false, !context)\n  case types$1._class:\n    if (context) { this.unexpected(); }\n    return this.parseClass(node, true)\n  case types$1._if: return this.parseIfStatement(node)\n  case types$1._return: return this.parseReturnStatement(node)\n  case types$1._switch: return this.parseSwitchStatement(node)\n  case types$1._throw: return this.parseThrowStatement(node)\n  case types$1._try: return this.parseTryStatement(node)\n  case types$1._const: case types$1._var:\n    kind = kind || this.value;\n    if (context && kind !== \"var\") { this.unexpected(); }\n    return this.parseVarStatement(node, kind)\n  case types$1._while: return this.parseWhileStatement(node)\n  case types$1._with: return this.parseWithStatement(node)\n  case types$1.braceL: return this.parseBlock(true, node)\n  case types$1.semi: return this.parseEmptyStatement(node)\n  case types$1._export:\n  case types$1._import:\n    if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n      skipWhiteSpace.lastIndex = this.pos;\n      var skip = skipWhiteSpace.exec(this.input);\n      var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n      if (nextCh === 40 || nextCh === 46) // '(' or '.'\n        { return this.parseExpressionStatement(node, this.parseExpression()) }\n    }\n\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n      if (!this.inModule)\n        { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n    }\n    return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\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  default:\n    if (this.isAsyncFunction()) {\n      if (context) { this.unexpected(); }\n      this.next();\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    var maybeName = this.value, expr = this.parseExpression();\n    if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n      { return this.parseLabeledStatement(node, maybeName, expr, context) }\n    else { return this.parseExpressionStatement(node, expr) }\n  }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n  var isBreak = keyword === \"break\";\n  this.next();\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n  else if (this.type !== types$1.name) { this.unexpected(); }\n  else {\n    node.label = this.parseIdent();\n    this.semicolon();\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  var i = 0;\n  for (; i < this.labels.length; ++i) {\n    var lab = this.labels[i];\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n      if (node.label && isBreak) { break }\n    }\n  }\n  if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n  this.next();\n  this.semicolon();\n  return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n  this.next();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"do\");\n  this.labels.pop();\n  this.expect(types$1._while);\n  node.test = this.parseParenExpression();\n  if (this.options.ecmaVersion >= 6)\n    { this.eat(types$1.semi); }\n  else\n    { this.semicolon(); }\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\npp$8.parseForStatement = function(node) {\n  this.next();\n  var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n  this.labels.push(loopLabel);\n  this.enterScope(0);\n  this.expect(types$1.parenL);\n  if (this.type === types$1.semi) {\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, null)\n  }\n  var isLet = this.isLet();\n  if (this.type === types$1._var || this.type === types$1._const || isLet) {\n    var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n    this.next();\n    this.parseVar(init$1, true, kind);\n    this.finishNode(init$1, \"VariableDeclaration\");\n    if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types$1._in) {\n          if (awaitAt > -1) { this.unexpected(awaitAt); }\n        } else { node.await = awaitAt > -1; }\n      }\n      return this.parseForIn(node, init$1)\n    }\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, init$1)\n  }\n  var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n  var containsEsc = this.containsEsc;\n  var refDestructuringErrors = new DestructuringErrors;\n  var initPos = this.start;\n  var init = awaitAt > -1\n    ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n    : this.parseExpression(true, refDestructuringErrors);\n  if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n      if (this.type === types$1._in) { this.unexpected(awaitAt); }\n      node.await = true;\n    } else if (isForOf && this.options.ecmaVersion >= 8) {\n      if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n      else if (this.options.ecmaVersion >= 9) { node.await = false; }\n    }\n    if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n    this.toAssignable(init, false, refDestructuringErrors);\n    this.checkLValPattern(init);\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true);\n  }\n  if (awaitAt > -1) { this.unexpected(awaitAt); }\n  return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next();\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\");\n  node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n  return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    { this.raise(this.start, \"'return' outside of function\"); }\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.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n  else { node.argument = this.parseExpression(); this.semicolon(); }\n  return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n  this.next();\n  node.discriminant = this.parseParenExpression();\n  node.cases = [];\n  this.expect(types$1.braceL);\n  this.labels.push(switchLabel);\n  this.enterScope(0);\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  var cur;\n  for (var sawDefault = false; this.type !== types$1.braceR;) {\n    if (this.type === types$1._case || this.type === types$1._default) {\n      var isCase = this.type === types$1._case;\n      if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n      node.cases.push(cur = this.startNode());\n      cur.consequent = [];\n      this.next();\n      if (isCase) {\n        cur.test = this.parseExpression();\n      } else {\n        if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n        sawDefault = true;\n        cur.test = null;\n      }\n      this.expect(types$1.colon);\n    } else {\n      if (!cur) { this.unexpected(); }\n      cur.consequent.push(this.parseStatement(null));\n    }\n  }\n  this.exitScope();\n  if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n  this.next(); // Closing brace\n  this.labels.pop();\n  return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n  this.next();\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n  node.argument = this.parseExpression();\n  this.semicolon();\n  return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n  var param = this.parseBindingAtom();\n  var simple = param.type === \"Identifier\";\n  this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n  this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n  this.expect(types$1.parenR);\n\n  return param\n};\n\npp$8.parseTryStatement = function(node) {\n  this.next();\n  node.block = this.parseBlock();\n  node.handler = null;\n  if (this.type === types$1._catch) {\n    var clause = this.startNode();\n    this.next();\n    if (this.eat(types$1.parenL)) {\n      clause.param = this.parseCatchClauseParam();\n    } else {\n      if (this.options.ecmaVersion < 10) { this.unexpected(); }\n      clause.param = null;\n      this.enterScope(0);\n    }\n    clause.body = this.parseBlock(false);\n    this.exitScope();\n    node.handler = this.finishNode(clause, \"CatchClause\");\n  }\n  node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n  if (!node.handler && !node.finalizer)\n    { this.raise(node.start, \"Missing catch or finally clause\"); }\n  return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n  this.next();\n  this.parseVar(node, false, kind, allowMissingInitializer);\n  this.semicolon();\n  return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"while\");\n  this.labels.pop();\n  return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n  if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n  this.next();\n  node.object = this.parseParenExpression();\n  node.body = this.parseStatement(\"with\");\n  return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n  this.next();\n  return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n    {\n    var label = list[i$1];\n\n    if (label.name === maybeName)\n      { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n  } }\n  var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n  for (var i = this.labels.length - 1; i >= 0; i--) {\n    var label$1 = this.labels[i];\n    if (label$1.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label$1.statementStart = this.start;\n      label$1.kind = kind;\n    } else { break }\n  }\n  this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n  this.labels.pop();\n  node.label = expr;\n  return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\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 `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n  if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n  if ( node === void 0 ) node = this.startNode();\n\n  node.body = [];\n  this.expect(types$1.braceL);\n  if (createNewLexicalScope) { this.enterScope(0); }\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  if (exitStrict) { this.strict = false; }\n  this.next();\n  if (createNewLexicalScope) { this.exitScope(); }\n  return this.finishNode(node, \"BlockStatement\")\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\npp$8.parseFor = function(node, init) {\n  node.init = init;\n  this.expect(types$1.semi);\n  node.test = this.type === types$1.semi ? null : this.parseExpression();\n  this.expect(types$1.semi);\n  node.update = this.type === types$1.parenR ? null : this.parseExpression();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\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\npp$8.parseForIn = function(node, init) {\n  var isForIn = this.type === types$1._in;\n  this.next();\n\n  if (\n    init.type === \"VariableDeclaration\" &&\n    init.declarations[0].init != null &&\n    (\n      !isForIn ||\n      this.options.ecmaVersion < 8 ||\n      this.strict ||\n      init.kind !== \"var\" ||\n      init.declarations[0].id.type !== \"Identifier\"\n    )\n  ) {\n    this.raise(\n      init.start,\n      ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n    );\n  }\n  node.left = init;\n  node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n  node.declarations = [];\n  node.kind = kind;\n  for (;;) {\n    var decl = this.startNode();\n    this.parseVarId(decl, kind);\n    if (this.eat(types$1.eq)) {\n      decl.init = this.parseMaybeAssign(isFor);\n    } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected();\n    } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n    } else {\n      decl.init = null;\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n    if (!this.eat(types$1.comma)) { break }\n  }\n  return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n  decl.id = this.parseBindingAtom();\n  this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n      { this.unexpected(); }\n    node.generator = this.eat(types$1.star);\n  }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n  }\n\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(node.async, node.generator));\n\n  if (!(statement & FUNC_STATEMENT))\n    { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n  this.parseFunctionParams(node);\n  this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n  this.next();\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  var oldStrict = this.strict;\n  this.strict = true;\n\n  this.parseClassId(node, isStatement);\n  this.parseClassSuper(node);\n  var privateNameMap = this.enterClassBody();\n  var classBody = this.startNode();\n  var hadConstructor = false;\n  classBody.body = [];\n  this.expect(types$1.braceL);\n  while (this.type !== types$1.braceR) {\n    var element = this.parseClassElement(node.superClass !== null);\n    if (element) {\n      classBody.body.push(element);\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n        hadConstructor = true;\n      } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n        this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n      }\n    }\n  }\n  this.strict = oldStrict;\n  this.next();\n  node.body = this.finishNode(classBody, \"ClassBody\");\n  this.exitClassBody();\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(types$1.semi)) { return null }\n\n  var ecmaVersion = this.options.ecmaVersion;\n  var node = this.startNode();\n  var keyName = \"\";\n  var isGenerator = false;\n  var isAsync = false;\n  var kind = \"method\";\n  var isStatic = false;\n\n  if (this.eatContextual(\"static\")) {\n    // Parse static init block\n    if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n      this.parseClassStaticBlock(node);\n      return node\n    }\n    if (this.isClassElementNameStart() || this.type === types$1.star) {\n      isStatic = true;\n    } else {\n      keyName = \"static\";\n    }\n  }\n  node.static = isStatic;\n  if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n    if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n      isAsync = true;\n    } else {\n      keyName = \"async\";\n    }\n  }\n  if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n    isGenerator = true;\n  }\n  if (!keyName && !isAsync && !isGenerator) {\n    var lastValue = this.value;\n    if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n      if (this.isClassElementNameStart()) {\n        kind = lastValue;\n      } else {\n        keyName = lastValue;\n      }\n    }\n  }\n\n  // Parse element name\n  if (keyName) {\n    // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n    // The last token is any of those. Make it the element name.\n    node.computed = false;\n    node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n    node.key.name = keyName;\n    this.finishNode(node.key, \"Identifier\");\n  } else {\n    this.parseClassElementName(node);\n  }\n\n  // Parse element value\n  if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n    var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n    var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n    // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n    if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n    node.kind = isConstructor ? \"constructor\" : kind;\n    this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n  } else {\n    this.parseClassField(node);\n  }\n\n  return node\n};\n\npp$8.isClassElementNameStart = function() {\n  return (\n    this.type === types$1.name ||\n    this.type === types$1.privateId ||\n    this.type === types$1.num ||\n    this.type === types$1.string ||\n    this.type === types$1.bracketL ||\n    this.type.keyword\n  )\n};\n\npp$8.parseClassElementName = function(element) {\n  if (this.type === types$1.privateId) {\n    if (this.value === \"constructor\") {\n      this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n    }\n    element.computed = false;\n    element.key = this.parsePrivateIdent();\n  } else {\n    this.parsePropertyName(element);\n  }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  // Check key and flags\n  var key = method.key;\n  if (method.kind === \"constructor\") {\n    if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n    if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n  } else if (method.static && checkKeyName(method, \"prototype\")) {\n    this.raise(key.start, \"Classes may not have a static property named prototype\");\n  }\n\n  // Parse value\n  var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n  // Check value\n  if (method.kind === \"get\" && value.params.length !== 0)\n    { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n  if (method.kind === \"set\" && value.params.length !== 1)\n    { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n  if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n    { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n  return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n  if (checkKeyName(field, \"constructor\")) {\n    this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n  } else if (field.static && checkKeyName(field, \"prototype\")) {\n    this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n  }\n\n  if (this.eat(types$1.eq)) {\n    // To raise SyntaxError if 'arguments' exists in the initializer.\n    var scope = this.currentThisScope();\n    var inClassFieldInit = scope.inClassFieldInit;\n    scope.inClassFieldInit = true;\n    field.value = this.parseMaybeAssign();\n    scope.inClassFieldInit = inClassFieldInit;\n  } else {\n    field.value = null;\n  }\n  this.semicolon();\n\n  return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n  node.body = [];\n\n  var oldLabels = this.labels;\n  this.labels = [];\n  this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  this.next();\n  this.exitScope();\n  this.labels = oldLabels;\n\n  return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n  if (this.type === types$1.name) {\n    node.id = this.parseIdent();\n    if (isStatement)\n      { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n  } else {\n    if (isStatement === true)\n      { this.unexpected(); }\n    node.id = null;\n  }\n};\n\npp$8.parseClassSuper = function(node) {\n  node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n  var element = {declared: Object.create(null), used: []};\n  this.privateNameStack.push(element);\n  return element.declared\n};\n\npp$8.exitClassBody = function() {\n  var ref = this.privateNameStack.pop();\n  var declared = ref.declared;\n  var used = ref.used;\n  if (!this.options.checkPrivateFields) { return }\n  var len = this.privateNameStack.length;\n  var parent = len === 0 ? null : this.privateNameStack[len - 1];\n  for (var i = 0; i < used.length; ++i) {\n    var id = used[i];\n    if (!hasOwn(declared, id.name)) {\n      if (parent) {\n        parent.used.push(id);\n      } else {\n        this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n      }\n    }\n  }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n  var name = element.key.name;\n  var curr = privateNameMap[name];\n\n  var next = \"true\";\n  if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n    next = (element.static ? \"s\" : \"i\") + element.kind;\n  }\n\n  // `class { get #a(){}; static set #a(_){} }` is also conflict.\n  if (\n    curr === \"iget\" && next === \"iset\" ||\n    curr === \"iset\" && next === \"iget\" ||\n    curr === \"sget\" && next === \"sset\" ||\n    curr === \"sset\" && next === \"sget\"\n  ) {\n    privateNameMap[name] = \"true\";\n    return false\n  } else if (!curr) {\n    privateNameMap[name] = next;\n    return false\n  } else {\n    return true\n  }\n}\n\nfunction checkKeyName(node, name) {\n  var computed = node.computed;\n  var key = node.key;\n  return !computed && (\n    key.type === \"Identifier\" && key.name === name ||\n    key.type === \"Literal\" && key.value === name\n  )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n  if (this.options.ecmaVersion >= 11) {\n    if (this.eatContextual(\"as\")) {\n      node.exported = this.parseModuleExportName();\n      this.checkExport(exports, node.exported, this.lastTokStart);\n    } else {\n      node.exported = null;\n    }\n  }\n  this.expectContextual(\"from\");\n  if (this.type !== types$1.string) { this.unexpected(); }\n  node.source = this.parseExprAtom();\n  if (this.options.ecmaVersion >= 16)\n    { node.attributes = this.parseWithClause(); }\n  this.semicolon();\n  return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n  this.next();\n  // export * from '...'\n  if (this.eat(types$1.star)) {\n    return this.parseExportAllDeclaration(node, exports)\n  }\n  if (this.eat(types$1._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart);\n    node.declaration = this.parseExportDefaultDeclaration();\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseExportDeclaration(node);\n    if (node.declaration.type === \"VariableDeclaration\")\n      { this.checkVariableExport(exports, node.declaration.declarations); }\n    else\n      { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n    node.specifiers = [];\n    node.source = null;\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null;\n    node.specifiers = this.parseExportSpecifiers(exports);\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== types$1.string) { this.unexpected(); }\n      node.source = this.parseExprAtom();\n      if (this.options.ecmaVersion >= 16)\n        { node.attributes = this.parseWithClause(); }\n    } else {\n      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n        // check for keywords used as local names\n        var spec = list[i];\n\n        this.checkUnreserved(spec.local);\n        // check if export is defined\n        this.checkLocalExport(spec.local);\n\n        if (spec.local.type === \"Literal\") {\n          this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n        }\n      }\n\n      node.source = null;\n    }\n    this.semicolon();\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n  return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n  var isAsync;\n  if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n    var fNode = this.startNode();\n    this.next();\n    if (isAsync) { this.next(); }\n    return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n  } else if (this.type === types$1._class) {\n    var cNode = this.startNode();\n    return this.parseClass(cNode, \"nullableID\")\n  } else {\n    var declaration = this.parseMaybeAssign();\n    this.semicolon();\n    return declaration\n  }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n  if (!exports) { return }\n  if (typeof name !== \"string\")\n    { name = name.type === \"Identifier\" ? name.name : name.value; }\n  if (hasOwn(exports, name))\n    { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n  exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n  var type = pat.type;\n  if (type === \"Identifier\")\n    { this.checkExport(exports, pat, pat.start); }\n  else if (type === \"ObjectPattern\")\n    { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n      {\n        var prop = list[i];\n\n        this.checkPatternExport(exports, prop);\n      } }\n  else if (type === \"ArrayPattern\")\n    { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n      var elt = list$1[i$1];\n\n        if (elt) { this.checkPatternExport(exports, elt); }\n    } }\n  else if (type === \"Property\")\n    { this.checkPatternExport(exports, pat.value); }\n  else if (type === \"AssignmentPattern\")\n    { this.checkPatternExport(exports, pat.left); }\n  else if (type === \"RestElement\")\n    { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n  if (!exports) { return }\n  for (var i = 0, list = decls; i < list.length; i += 1)\n    {\n    var decl = list[i];\n\n    this.checkPatternExport(exports, decl.id);\n  }\n};\n\npp$8.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n  var node = this.startNode();\n  node.local = this.parseModuleExportName();\n\n  node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n  this.checkExport(\n    exports,\n    node.exported,\n    node.exported.start\n  );\n\n  return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n  var nodes = [], first = true;\n  // export { x, y as z } [from '...']\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseExportSpecifier(exports));\n  }\n  return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n  this.next();\n\n  // import '...'\n  if (this.type === types$1.string) {\n    node.specifiers = empty$1;\n    node.source = this.parseExprAtom();\n  } else {\n    node.specifiers = this.parseImportSpecifiers();\n    this.expectContextual(\"from\");\n    node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n  }\n  if (this.options.ecmaVersion >= 16)\n    { node.attributes = this.parseWithClause(); }\n  this.semicolon();\n  return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n  var node = this.startNode();\n  node.imported = this.parseModuleExportName();\n\n  if (this.eatContextual(\"as\")) {\n    node.local = this.parseIdent();\n  } else {\n    this.checkUnreserved(node.imported);\n    node.local = node.imported;\n  }\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n\n  return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n  // import defaultObj, { x, y as z } from '...'\n  var node = this.startNode();\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n  var node = this.startNode();\n  this.next();\n  this.expectContextual(\"as\");\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n  var nodes = [], first = true;\n  if (this.type === types$1.name) {\n    nodes.push(this.parseImportDefaultSpecifier());\n    if (!this.eat(types$1.comma)) { return nodes }\n  }\n  if (this.type === types$1.star) {\n    nodes.push(this.parseImportNamespaceSpecifier());\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseImportSpecifier());\n  }\n  return nodes\n};\n\npp$8.parseWithClause = function() {\n  var nodes = [];\n  if (!this.eat(types$1._with)) {\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  var attributeKeys = {};\n  var first = true;\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var attr = this.parseImportAttribute();\n    var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n    if (hasOwn(attributeKeys, keyName))\n      { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n    attributeKeys[keyName] = true;\n    nodes.push(attr);\n  }\n  return nodes\n};\n\npp$8.parseImportAttribute = function() {\n  var node = this.startNode();\n  node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n  this.expect(types$1.colon);\n  if (this.type !== types$1.string) {\n    this.unexpected();\n  }\n  node.value = this.parseExprAtom();\n  return this.finishNode(node, \"ImportAttribute\")\n};\n\npp$8.parseModuleExportName = function() {\n  if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n    var stringLiteral = this.parseLiteral(this.value);\n    if (loneSurrogate.test(stringLiteral.value)) {\n      this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n    }\n    return stringLiteral\n  }\n  return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1);\n  }\n};\npp$8.isDirectiveCandidate = function(statement) {\n  return (\n    this.options.ecmaVersion >= 5 &&\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"AssignmentPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      for (var i = 0, list = node.properties; i < list.length; i += 1) {\n        var prop = list[i];\n\n      this.toAssignable(prop, isBinding);\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\");\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n      this.toAssignable(node.value, isBinding);\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      this.toAssignableList(node.elements, isBinding);\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\";\n      this.toAssignable(node.argument, isBinding);\n      if (node.argument.type === \"AssignmentPattern\")\n        { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n      node.type = \"AssignmentPattern\";\n      delete node.operator;\n      this.toAssignable(node.left, isBinding);\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n      break\n\n    case \"ChainExpression\":\n      this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) { break }\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\");\n    }\n  } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n  return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n  var end = exprList.length;\n  for (var i = 0; i < end; i++) {\n    var elt = exprList[i];\n    if (elt) { this.toAssignable(elt, isBinding); }\n  }\n  if (end) {\n    var last = exprList[end - 1];\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      { this.unexpected(last.argument.start); }\n  }\n  return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n  return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n  var node = this.startNode();\n  this.next();\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n    { this.unexpected(); }\n\n  node.argument = this.parseBindingAtom();\n\n  return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case types$1.bracketL:\n      var node = this.startNode();\n      this.next();\n      node.elements = this.parseBindingList(types$1.bracketR, true, true);\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case types$1.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (first) { first = false; }\n    else { this.expect(types$1.comma); }\n    if (allowEmpty && this.type === types$1.comma) {\n      elts.push(null);\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === types$1.ellipsis) {\n      var rest = this.parseRestBinding();\n      this.parseBindingListItem(rest);\n      elts.push(rest);\n      if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n      this.expect(close);\n      break\n    } else {\n      elts.push(this.parseAssignableListItem(allowModifiers));\n    }\n  }\n  return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n  var elem = this.parseMaybeDefault(this.start, this.startLoc);\n  this.parseBindingListItem(elem);\n  return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n  return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom();\n  if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.right = this.parseMaybeAssign();\n  return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n//   nothing other than identifiers and member expressions. Parenthesized\n//   expressions are also correctly handled. This is generally appropriate for\n//   constructs for which the spec says\n//\n//   > It is a Syntax Error if AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   It is also appropriate for checking if an identifier is valid and not\n//   defined elsewhere, like import declarations or function/class identifiers.\n//\n//   Examples where this is used include:\n//     a += …;\n//     import a from '…';\n//   where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n//   anything checkLValSimple() supports, as well as object and array\n//   destructuring patterns. This is generally appropriate for constructs for\n//   which the spec says\n//\n//   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n//   > an ArrayLiteral and AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   Examples where this is used include:\n//     (a = …);\n//     const a = …;\n//     try { … } catch (a) { … }\n//   where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n//   anything checkLValPattern() supports, as well as default assignment\n//   patterns, rest elements, and other constructs that may appear within an\n//   object or array destructuring pattern.\n//\n//   As a special case, function parameters also use checkLValInnerPattern(),\n//   as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  var isBind = bindingType !== BIND_NONE;\n\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n    if (isBind) {\n      if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n        { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n      if (checkClashes) {\n        if (hasOwn(checkClashes, expr.name))\n          { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n        checkClashes[expr.name] = true;\n      }\n      if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n    }\n    break\n\n  case \"ChainExpression\":\n    this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n    break\n\n  case \"MemberExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n    break\n\n  case \"ParenthesizedExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n    return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n  default:\n    this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n  }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"ObjectPattern\":\n    for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n      var prop = list[i];\n\n    this.checkLValInnerPattern(prop, bindingType, checkClashes);\n    }\n    break\n\n  case \"ArrayPattern\":\n    for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n      var elem = list$1[i$1];\n\n    if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n    }\n    break\n\n  default:\n    this.checkLValSimple(expr, bindingType, checkClashes);\n  }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLValPattern(expr.left, bindingType, checkClashes);\n    break\n\n  case \"RestElement\":\n    this.checkLValPattern(expr.argument, bindingType, checkClashes);\n    break\n\n  default:\n    this.checkLValPattern(expr, bindingType, checkClashes);\n  }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n  this.token = token;\n  this.isExpr = !!isExpr;\n  this.preserveSpace = !!preserveSpace;\n  this.override = override;\n  this.generator = !!generator;\n};\n\nvar types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n  return [types.b_stat]\n};\n\npp$6.curContext = function() {\n  return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n  var parent = this.curContext();\n  if (parent === types.f_expr || parent === types.f_stat)\n    { return true }\n  if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n    { return !parent.isExpr }\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n    { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n  if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n    { return true }\n  if (prevType === types$1.braceL)\n    { return parent === types.b_stat }\n  if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n    { return false }\n  return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n  for (var i = this.context.length - 1; i >= 1; i--) {\n    var context = this.context[i];\n    if (context.token === \"function\")\n      { return context.generator }\n  }\n  return false\n};\n\npp$6.updateContext = function(prevType) {\n  var update, type = this.type;\n  if (type.keyword && prevType === types$1.dot)\n    { this.exprAllowed = false; }\n  else if (update = type.updateContext)\n    { update.call(this, prevType); }\n  else\n    { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n  if (this.curContext() !== tokenCtx) {\n    this.context[this.context.length - 1] = tokenCtx;\n  }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true;\n    return\n  }\n  var out = this.context.pop();\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop();\n  }\n  this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl);\n  this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n  var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n  this.context.push(statementParens ? types.p_stat : types.p_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== types$1._else &&\n      !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n      !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n    { this.context.push(types.f_expr); }\n  else\n    { this.context.push(types.f_stat); }\n  this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n  if (this.curContext().token === \"function\") { this.context.pop(); }\n  this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    { this.context.pop(); }\n  else\n    { this.context.push(types.q_tmpl); }\n  this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n  if (prevType === types$1._function) {\n    var index = this.context.length - 1;\n    if (this.context[index] === types.f_expr)\n      { this.context[index] = types.f_expr_gen; }\n    else\n      { this.context[index] = types.f_gen; }\n  }\n  this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n  var allowed = false;\n  if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      { allowed = true; }\n  }\n  this.exprAllowed = allowed;\n};\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\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    { return }\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    { return }\n  var key = prop.key;\n  var name;\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  var kind = prop.kind;\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors) {\n          if (refDestructuringErrors.doubleProto < 0) {\n            refDestructuringErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n        }\n      }\n      propHash.proto = true;\n    }\n    return\n  }\n  name = \"$\" + name;\n  var other = propHash[name];\n  if (other) {\n    var redefinition;\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set;\n    } else {\n      redefinition = other.init || other[kind];\n    }\n    if (redefinition)\n      { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    };\n  }\n  other[kind] = true;\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. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide 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\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n  if (this.type === types$1.comma) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.expressions = [expr];\n    while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) { return this.parseYield(forInit) }\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else { this.exprAllowed = false; }\n  }\n\n  var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n    oldTrailingComma = refDestructuringErrors.trailingComma;\n    oldDoubleProto = refDestructuringErrors.doubleProto;\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n  } else {\n    refDestructuringErrors = new DestructuringErrors;\n    ownDestructuringErrors = true;\n  }\n\n  var startPos = this.start, startLoc = this.startLoc;\n  if (this.type === types$1.parenL || this.type === types$1.name) {\n    this.potentialArrowAt = this.start;\n    this.potentialArrowInForAwait = forInit === \"await\";\n  }\n  var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n  if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n  if (this.type.isAssign) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.operator = this.value;\n    if (this.type === types$1.eq)\n      { left = this.toAssignable(left, false, refDestructuringErrors); }\n    if (!ownDestructuringErrors) {\n      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n    }\n    if (refDestructuringErrors.shorthandAssign >= left.start)\n      { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n    if (this.type === types$1.eq)\n      { this.checkLValPattern(left); }\n    else\n      { this.checkLValSimple(left); }\n    node.left = left;\n    this.next();\n    node.right = this.parseMaybeAssign(forInit);\n    if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n  }\n  if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n  if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n  return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprOps(forInit, refDestructuringErrors);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  if (this.eat(types$1.question)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.test = expr;\n    node.consequent = this.parseMaybeAssign();\n    this.expect(types$1.colon);\n    node.alternate = this.parseMaybeAssign(forInit);\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\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\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n  var prec = this.type.binop;\n  if (prec != null && (!forInit || this.type !== types$1._in)) {\n    if (prec > minPrec) {\n      var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n      var coalesce = this.type === types$1.coalesce;\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 = types$1.logicalAND.binop;\n      }\n      var op = this.value;\n      this.next();\n      var startPos = this.start, startLoc = this.startLoc;\n      var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n      if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n        this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n      }\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n    }\n  }\n  return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.operator = op;\n  node.right = right;\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, expr;\n  if (this.isContextual(\"await\") && this.canAwait) {\n    expr = this.parseAwait(forInit);\n    sawUnary = true;\n  } else if (this.type.prefix) {\n    var node = this.startNode(), update = this.type === types$1.incDec;\n    node.operator = this.value;\n    node.prefix = true;\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true, update, forInit);\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    if (update) { this.checkLValSimple(node.argument); }\n    else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n    else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n    else { sawUnary = true; }\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n  } else if (!sawUnary && this.type === types$1.privateId) {\n    if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n    expr = this.parsePrivateIdent();\n    // only could be private fields in 'in', such as #x in obj\n    if (this.type !== types$1._in) { this.unexpected(); }\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      var node$1 = this.startNodeAt(startPos, startLoc);\n      node$1.operator = this.value;\n      node$1.prefix = false;\n      node$1.argument = expr;\n      this.checkLValSimple(expr);\n      this.next();\n      expr = this.finishNode(node$1, \"UpdateExpression\");\n    }\n  }\n\n  if (!incDec && this.eat(types$1.starstar)) {\n    if (sawUnary)\n      { this.unexpected(this.lastTokStart); }\n    else\n      { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n  } else {\n    return expr\n  }\n};\n\nfunction isLocalVariableAccess(node) {\n  return (\n    node.type === \"Identifier\" ||\n    node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n  )\n}\n\nfunction isPrivateFieldAccess(node) {\n  return (\n    node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n    node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n    node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n  )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n  if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n    { return expr }\n  var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n    if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n    if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n  }\n  return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n      this.potentialArrowAt === base.start;\n  var optionalChained = false;\n\n  while (true) {\n    var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n    if (element.optional) { optionalChained = true; }\n    if (element === base || element.type === \"ArrowFunctionExpression\") {\n      if (optionalChained) {\n        var chainNode = this.startNodeAt(startPos, startLoc);\n        chainNode.expression = element;\n        element = this.finishNode(chainNode, \"ChainExpression\");\n      }\n      return element\n    }\n\n    base = element;\n  }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n  return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n  var optionalSupported = this.options.ecmaVersion >= 11;\n  var optional = optionalSupported && this.eat(types$1.questionDot);\n  if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n  var computed = this.eat(types$1.bracketL);\n  if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(types$1.bracketR);\n    } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n      node.property = this.parsePrivateIdent();\n    } else {\n      node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n    }\n    node.computed = !!computed;\n    if (optionalSupported) {\n      node.optional = optional;\n    }\n    base = this.finishNode(node, \"MemberExpression\");\n  } else if (!noCalls && this.eat(types$1.parenL)) {\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n    if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      if (this.awaitIdentPos > 0)\n        { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      this.awaitIdentPos = oldAwaitIdentPos;\n      return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n    var node$1 = this.startNodeAt(startPos, startLoc);\n    node$1.callee = base;\n    node$1.arguments = exprList;\n    if (optionalSupported) {\n      node$1.optional = optional;\n    }\n    base = this.finishNode(node$1, \"CallExpression\");\n  } else if (this.type === types$1.backQuote) {\n    if (optional || optionalChained) {\n      this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n    }\n    var node$2 = this.startNodeAt(startPos, startLoc);\n    node$2.tag = base;\n    node$2.quasi = this.parseTemplate({isTagged: true});\n    base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n  }\n  return base\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\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === types$1.slash) { this.readRegexp(); }\n\n  var node, canBeArrow = this.potentialArrowAt === this.start;\n  switch (this.type) {\n  case types$1._super:\n    if (!this.allowSuper)\n      { this.raise(this.start, \"'super' keyword outside a method\"); }\n    node = this.startNode();\n    this.next();\n    if (this.type === types$1.parenL && !this.allowDirectSuper)\n      { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super ( Arguments )\n    if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n      { this.unexpected(); }\n    return this.finishNode(node, \"Super\")\n\n  case types$1._this:\n    node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"ThisExpression\")\n\n  case types$1.name:\n    var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n    var id = this.parseIdent(false);\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n      this.overrideContext(types.f_expr);\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n    }\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(types$1.arrow))\n        { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n          (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n        id = this.parseIdent(false);\n        if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n          { this.unexpected(); }\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n      }\n    }\n    return id\n\n  case types$1.regexp:\n    var value = this.value;\n    node = this.parseLiteral(value.value);\n    node.regex = {pattern: value.pattern, flags: value.flags};\n    return node\n\n  case types$1.num: case types$1.string:\n    return this.parseLiteral(this.value)\n\n  case types$1._null: case types$1._true: case types$1._false:\n    node = this.startNode();\n    node.value = this.type === types$1._null ? null : this.type === types$1._true;\n    node.raw = this.type.keyword;\n    this.next();\n    return this.finishNode(node, \"Literal\")\n\n  case types$1.parenL:\n    var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        { refDestructuringErrors.parenthesizedAssign = start; }\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        { refDestructuringErrors.parenthesizedBind = start; }\n    }\n    return expr\n\n  case types$1.bracketL:\n    node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case types$1.braceL:\n    this.overrideContext(types.b_expr);\n    return this.parseObj(false, refDestructuringErrors)\n\n  case types$1._function:\n    node = this.startNode();\n    this.next();\n    return this.parseFunction(node, 0)\n\n  case types$1._class:\n    return this.parseClass(this.startNode(), false)\n\n  case types$1._new:\n    return this.parseNew()\n\n  case types$1.backQuote:\n    return this.parseTemplate()\n\n  case types$1._import:\n    if (this.options.ecmaVersion >= 11) {\n      return this.parseExprImport(forNew)\n    } else {\n      return this.unexpected()\n    }\n\n  default:\n    return this.parseExprAtomDefault()\n  }\n};\n\npp$5.parseExprAtomDefault = function() {\n  this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n  var node = this.startNode();\n\n  // Consume `import` as an identifier for `import.meta`.\n  // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n  this.next();\n\n  if (this.type === types$1.parenL && !forNew) {\n    return this.parseDynamicImport(node)\n  } else if (this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"import\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    return this.parseImportMeta(node)\n  } else {\n    this.unexpected();\n  }\n};\n\npp$5.parseDynamicImport = function(node) {\n  this.next(); // skip `(`\n\n  // Parse node.source.\n  node.source = this.parseMaybeAssign();\n\n  if (this.options.ecmaVersion >= 16) {\n    if (!this.eat(types$1.parenR)) {\n      this.expect(types$1.comma);\n      if (!this.afterTrailingComma(types$1.parenR)) {\n        node.options = this.parseMaybeAssign();\n        if (!this.eat(types$1.parenR)) {\n          this.expect(types$1.comma);\n          if (!this.afterTrailingComma(types$1.parenR)) {\n            this.unexpected();\n          }\n        }\n      } else {\n        node.options = null;\n      }\n    } else {\n      node.options = null;\n    }\n  } else {\n    // Verify ending.\n    if (!this.eat(types$1.parenR)) {\n      var errorPos = this.start;\n      if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n        this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n      } else {\n        this.unexpected(errorPos);\n      }\n    }\n  }\n\n  return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n  this.next(); // skip `.`\n\n  var containsEsc = this.containsEsc;\n  node.property = this.parseIdent(true);\n\n  if (node.property.name !== \"meta\")\n    { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n  if (containsEsc)\n    { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n  if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n    { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n  return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n  var node = this.startNode();\n  node.value = value;\n  node.raw = this.input.slice(this.start, this.end);\n  if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n  this.next();\n  return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n  this.expect(types$1.parenL);\n  var val = this.parseExpression();\n  this.expect(types$1.parenR);\n  return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n  return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n  if (this.options.ecmaVersion >= 6) {\n    this.next();\n\n    var innerStartPos = this.start, innerStartLoc = this.startLoc;\n    var exprList = [], first = true, lastIsComma = false;\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== types$1.parenR) {\n      first ? first = false : this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n        lastIsComma = true;\n        break\n      } else if (this.type === types$1.ellipsis) {\n        spreadStart = this.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding()));\n        if (this.type === types$1.comma) {\n          this.raiseRecoverable(\n            this.start,\n            \"Comma is not permitted after the rest element\"\n          );\n        }\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n      }\n    }\n    var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n    this.expect(types$1.parenR);\n\n    if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n    }\n\n    if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n    if (spreadStart) { this.unexpected(spreadStart); }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n  } else {\n    val = this.parseParenExpression();\n  }\n\n  if (this.options.preserveParens) {\n    var par = this.startNodeAt(startPos, startLoc);\n    par.expression = val;\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n};\n\npp$5.parseParenItem = function(item) {\n  return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\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\nvar empty = [];\n\npp$5.parseNew = function() {\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n  var node = this.startNode();\n  this.next();\n  if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"new\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    this.next();\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n    if (node.property.name !== \"target\")\n      { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n    if (containsEsc)\n      { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n    if (!this.allowNewDotTarget)\n      { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  var startPos = this.start, startLoc = this.startLoc;\n  node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n  if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n  else { node.arguments = empty; }\n  return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n  var isTagged = ref.isTagged;\n\n  var elem = this.startNode();\n  if (this.type === types$1.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n    }\n    elem.value = {\n      raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n      cooked: null\n    };\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    };\n  }\n  this.next();\n  elem.tail = this.type === types$1.backQuote;\n  return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n  if ( ref === void 0 ) ref = {};\n  var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n  var node = this.startNode();\n  this.next();\n  node.expressions = [];\n  var curElt = this.parseTemplateElement({isTagged: isTagged});\n  node.quasis = [curElt];\n  while (!curElt.tail) {\n    if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n    this.expect(types$1.dollarBraceL);\n    node.expressions.push(this.parseExpression());\n    this.expect(types$1.braceR);\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n  }\n  this.next();\n  return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n  var node = this.startNode(), first = true, propHash = {};\n  node.properties = [];\n  this.next();\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var prop = this.parseProperty(isPattern, refDestructuringErrors);\n    if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n    node.properties.push(prop);\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n  var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n  if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false);\n      if (this.type === types$1.comma) {\n        this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start;\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false;\n    prop.shorthand = false;\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start;\n      startLoc = this.startLoc;\n    }\n    if (!isPattern)\n      { isGenerator = this.eat(types$1.star); }\n  }\n  var containsEsc = this.containsEsc;\n  this.parsePropertyName(prop);\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true;\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n    this.parsePropertyName(prop);\n  } else {\n    isAsync = false;\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n  return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n  prop.kind = prop.key.name;\n  this.parsePropertyName(prop);\n  prop.value = this.parseMethod(false);\n  var paramCount = prop.kind === \"get\" ? 0 : 1;\n  if (prop.value.params.length !== paramCount) {\n    var start = prop.value.start;\n    if (prop.kind === \"get\")\n      { this.raiseRecoverable(start, \"getter should have no params\"); }\n    else\n      { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n  } else {\n    if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n      { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n  }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === types$1.colon)\n    { this.unexpected(); }\n\n  if (this.eat(types$1.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n    prop.kind = \"init\";\n  } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n    if (isPattern) { this.unexpected(); }\n    prop.kind = \"init\";\n    prop.method = true;\n    prop.value = this.parseMethod(isGenerator, isAsync);\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.parseGetterSetter(prop);\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.checkUnreserved(prop.key);\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = startPos; }\n    prop.kind = \"init\";\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else if (this.type === types$1.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        { refDestructuringErrors.shorthandAssign = this.start; }\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else {\n      prop.value = this.copyNode(prop.key);\n    }\n    prop.shorthand = true;\n  } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(types$1.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssign();\n      this.expect(types$1.bracketR);\n      return prop.key\n    } else {\n      prop.computed = false;\n    }\n  }\n  return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n  node.id = null;\n  if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n  if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 6)\n    { node.generator = isGenerator; }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n  this.parseFunctionBody(node, false, true, false);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n\n  node.params = this.toAssignableList(params, true);\n  this.parseFunctionBody(node, true, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n  var isExpression = isArrowFunction && this.type !== types$1.braceL;\n  var oldStrict = this.strict, useStrict = false;\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign(forInit);\n    node.expression = true;\n    this.checkParams(node, false);\n  } else {\n    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end);\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    var oldLabels = this.labels;\n    this.labels = [];\n    if (useStrict) { this.strict = true; }\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(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n    // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n    if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n    node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n    node.expression = false;\n    this.adaptDirectivePrologue(node.body.body);\n    this.labels = oldLabels;\n  }\n  this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n  for (var i = 0, list = params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    if (param.type !== \"Identifier\") { return false\n  } }\n  return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n  var nameHash = Object.create(null);\n  for (var i = 0, list = node.params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\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\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n    } else { first = false; }\n\n    var elt = (void 0);\n    if (allowEmpty && this.type === types$1.comma)\n      { elt = null; }\n    else if (this.type === types$1.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors);\n      if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n        { refDestructuringErrors.trailingComma = this.start; }\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors);\n    }\n    elts.push(elt);\n  }\n  return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n  var start = ref.start;\n  var end = ref.end;\n  var name = ref.name;\n\n  if (this.inGenerator && name === \"yield\")\n    { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n  if (this.inAsync && name === \"await\")\n    { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n  if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n    { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n  if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n    { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n  if (this.keywords.test(name))\n    { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n    this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n  }\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\npp$5.parseIdent = function(liberal) {\n  var node = this.parseIdentNode();\n  this.next(!!liberal);\n  this.finishNode(node, \"Identifier\");\n  if (!liberal) {\n    this.checkUnreserved(node);\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = node.start; }\n  }\n  return node\n};\n\npp$5.parseIdentNode = function() {\n  var node = this.startNode();\n  if (this.type === types$1.name) {\n    node.name = this.value;\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword;\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n      (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop();\n    }\n    this.type = types$1.name;\n  } else {\n    this.unexpected();\n  }\n  return node\n};\n\npp$5.parsePrivateIdent = function() {\n  var node = this.startNode();\n  if (this.type === types$1.privateId) {\n    node.name = this.value;\n  } else {\n    this.unexpected();\n  }\n  this.next();\n  this.finishNode(node, \"PrivateIdentifier\");\n\n  // For validating existence\n  if (this.options.checkPrivateFields) {\n    if (this.privateNameStack.length === 0) {\n      this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n    } else {\n      this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n    }\n  }\n\n  return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n  if (!this.yieldPos) { this.yieldPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n    node.delegate = false;\n    node.argument = null;\n  } else {\n    node.delegate = this.eat(types$1.star);\n    node.argument = this.parseMaybeAssign(forInit);\n  }\n  return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n  if (!this.awaitPos) { this.awaitPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeUnary(null, true, false, forInit);\n  return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n  var loc = getLineInfo(this.input, pos);\n  message += \" (\" + loc.line + \":\" + loc.column + \")\";\n  var err = new SyntaxError(message);\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n  throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n  this.flags = flags;\n  // A list of var-declared names in the current lexical scope\n  this.var = [];\n  // A list of lexically-declared names in the current lexical scope\n  this.lexical = [];\n  // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n  this.functions = [];\n  // A switch to disallow the identifier reference 'arguments'\n  this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n  this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n  var redeclared = false;\n  if (bindingType === BIND_LEXICAL) {\n    var scope = this.currentScope();\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    scope.lexical.push(name);\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      { delete this.undefinedExports[name]; }\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    var scope$1 = this.currentScope();\n    scope$1.lexical.push(name);\n  } else if (bindingType === BIND_FUNCTION) {\n    var scope$2 = this.currentScope();\n    if (this.treatFunctionsAsVar)\n      { redeclared = scope$2.lexical.indexOf(name) > -1; }\n    else\n      { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n    scope$2.functions.push(name);\n  } else {\n    for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n      var scope$3 = this.scopeStack[i];\n      if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n        redeclared = true;\n        break\n      }\n      scope$3.var.push(name);\n      if (this.inModule && (scope$3.flags & SCOPE_TOP))\n        { delete this.undefinedExports[name]; }\n      if (scope$3.flags & SCOPE_VAR) { break }\n    }\n  }\n  if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id;\n  }\n};\n\npp$3.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR) { return scope }\n  }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n  }\n};\n\nvar Node = function Node(parser, pos, loc) {\n  this.type = \"\";\n  this.start = pos;\n  this.end = 0;\n  if (parser.options.locations)\n    { this.loc = new SourceLocation(parser, loc); }\n  if (parser.options.directSourceFile)\n    { this.sourceFile = parser.options.directSourceFile; }\n  if (parser.options.ranges)\n    { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type;\n  node.end = pos;\n  if (this.options.locations)\n    { node.loc.end = loc; }\n  if (this.options.ranges)\n    { node.range[1] = pos; }\n  return node\n}\n\npp$2.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n  var newNode = new Node(this, node.start, this.startLoc);\n  for (var prop in node) { newNode[prop] = node[prop]; }\n  return newNode\n};\n\n// This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\nvar scriptValuesAddedInUnicode = \"Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sunu Sunuwar Todhri Todr Tulu_Tigalari Tutg Unknown Zzzz\";\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma10BinaryProperties,\n  11: ecma11BinaryProperties,\n  12: ecma12BinaryProperties,\n  13: ecma13BinaryProperties,\n  14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n  9: \"\",\n  10: \"\",\n  11: \"\",\n  12: \"\",\n  13: \"\",\n  14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\nvar unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma10ScriptValues,\n  11: ecma11ScriptValues,\n  12: ecma12ScriptValues,\n  13: ecma13ScriptValues,\n  14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n  var d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  };\n  d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n  d.nonBinary.gc = d.nonBinary.General_Category;\n  d.nonBinary.sc = d.nonBinary.Script;\n  d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n  var ecmaVersion = list[i];\n\n  buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n  // Parent disjunction branch\n  this.parent = parent;\n  // Identifies this set of sibling branches\n  this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n  // A branch is separate from another branch if they or any of\n  // their parents are siblings in a given disjunction\n  for (var self = this; self; self = self.parent) {\n    for (var other = alt; other; other = other.parent) {\n      if (self.base === other.base && self !== other) { return true }\n    }\n  }\n  return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n  return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n  this.parser = parser;\n  this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n  this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n  this.source = \"\";\n  this.flags = \"\";\n  this.start = 0;\n  this.switchU = false;\n  this.switchV = false;\n  this.switchN = false;\n  this.pos = 0;\n  this.lastIntValue = 0;\n  this.lastStringValue = \"\";\n  this.lastAssertionIsQuantifiable = false;\n  this.numCapturingParens = 0;\n  this.maxBackReference = 0;\n  this.groupNames = Object.create(null);\n  this.backReferenceNames = [];\n  this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n  var unicodeSets = flags.indexOf(\"v\") !== -1;\n  var unicode = flags.indexOf(\"u\") !== -1;\n  this.start = start | 0;\n  this.source = pattern + \"\";\n  this.flags = flags;\n  if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n    this.switchU = true;\n    this.switchV = true;\n    this.switchN = true;\n  } else {\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n    this.switchV = false;\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n  }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n  this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return -1\n  }\n  var c = s.charCodeAt(i);\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return c\n  }\n  var next = s.charCodeAt(i + 1);\n  return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return l\n  }\n  var c = s.charCodeAt(i), next;\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n      (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n    return i + 1\n  }\n  return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  if (this.current(forceU) === ch) {\n    this.advance(forceU);\n    return true\n  }\n  return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var pos = this.pos;\n  for (var i = 0, list = chs; i < list.length; i += 1) {\n    var ch = list[i];\n\n      var current = this.at(pos, forceU);\n    if (current === -1 || current !== ch) {\n      return false\n    }\n    pos = this.nextIndex(pos, forceU);\n  }\n  this.pos = pos;\n  return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n  var validFlags = state.validFlags;\n  var flags = state.flags;\n\n  var u = false;\n  var v = false;\n\n  for (var i = 0; i < flags.length; i++) {\n    var flag = flags.charAt(i);\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\");\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\");\n    }\n    if (flag === \"u\") { u = true; }\n    if (flag === \"v\") { v = true; }\n  }\n  if (this.options.ecmaVersion >= 15 && u && v) {\n    this.raise(state.start, \"Invalid regular expression flag\");\n  }\n};\n\nfunction hasProp(obj) {\n  for (var _ in obj) { return true }\n  return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state);\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n    state.switchN = true;\n    this.regexp_pattern(state);\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n  state.pos = 0;\n  state.lastIntValue = 0;\n  state.lastStringValue = \"\";\n  state.lastAssertionIsQuantifiable = false;\n  state.numCapturingParens = 0;\n  state.maxBackReference = 0;\n  state.groupNames = Object.create(null);\n  state.backReferenceNames.length = 0;\n  state.branchID = null;\n\n  this.regexp_disjunction(state);\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\");\n    }\n    if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\");\n  }\n  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n    var name = list[i];\n\n    if (!state.groupNames[name]) {\n      state.raise(\"Invalid named capture referenced\");\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n  var trackDisjunction = this.options.ecmaVersion >= 16;\n  if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n  this.regexp_alternative(state);\n  while (state.eat(0x7C /* | */)) {\n    if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n    this.regexp_alternative(state);\n  }\n  if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\");\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\");\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state);\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n  var start = state.pos;\n  state.lastAssertionIsQuantifiable = false;\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    var lookbehind = false;\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */);\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state);\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\");\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind;\n      return true\n    }\n  }\n\n  state.pos = start;\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n  if ( noError === void 0 ) noError = false;\n\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */);\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n  var start = state.pos;\n  if (state.eat(0x7B /* { */)) {\n    var min = 0, max = -1;\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue;\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue;\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\");\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n  var start = state.pos;\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */)) {\n      if (this.options.ecmaVersion >= 16) {\n        var addModifiers = this.regexp_eatModifiers(state);\n        var hasHyphen = state.eat(0x2D /* - */);\n        if (addModifiers || hasHyphen) {\n          for (var i = 0; i < addModifiers.length; i++) {\n            var modifier = addModifiers.charAt(i);\n            if (addModifiers.indexOf(modifier, i + 1) > -1) {\n              state.raise(\"Duplicate regular expression modifiers\");\n            }\n          }\n          if (hasHyphen) {\n            var removeModifiers = this.regexp_eatModifiers(state);\n            if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n              state.raise(\"Invalid regular expression modifiers\");\n            }\n            for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n              var modifier$1 = removeModifiers.charAt(i$1);\n              if (\n                removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n                addModifiers.indexOf(modifier$1) > -1\n              ) {\n                state.raise(\"Duplicate regular expression modifiers\");\n              }\n            }\n          }\n        }\n      }\n      if (state.eat(0x3A /* : */)) {\n        this.regexp_disjunction(state);\n        if (state.eat(0x29 /* ) */)) {\n          return true\n        }\n        state.raise(\"Unterminated group\");\n      }\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state);\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\");\n    }\n    this.regexp_disjunction(state);\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1;\n      return true\n    }\n    state.raise(\"Unterminated group\");\n  }\n  return false\n};\n// RegularExpressionModifiers ::\n//   [empty]\n//   RegularExpressionModifiers RegularExpressionModifier\npp$1.regexp_eatModifiers = function(state) {\n  var modifiers = \"\";\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n    modifiers += codePointToString(ch);\n    state.advance();\n  }\n  return modifiers\n};\n// RegularExpressionModifier :: one of\n//   `i` `m` `s`\nfunction isRegularExpressionModifier(ch) {\n  return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n  var ch = state.current();\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance();\n  }\n  return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n  var ch = state.current();\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// GroupSpecifier ::\n//   [empty]\n//   `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n    var trackDisjunction = this.options.ecmaVersion >= 16;\n    var known = state.groupNames[state.lastStringValue];\n    if (known) {\n      if (trackDisjunction) {\n        for (var i = 0, list = known; i < list.length; i += 1) {\n          var altID = list[i];\n\n          if (!altID.separatedFrom(state.branchID))\n            { state.raise(\"Duplicate capture group name\"); }\n        }\n      } else {\n        state.raise(\"Duplicate capture group name\");\n      }\n    }\n    if (trackDisjunction) {\n      (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n    } else {\n      state.groupNames[state.lastStringValue] = true;\n    }\n  }\n};\n\n// GroupName ::\n//   `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\";\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\");\n  }\n  return false\n};\n\n// RegExpIdentifierName ::\n//   RegExpIdentifierStart\n//   RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\";\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue);\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue);\n    }\n    return true\n  }\n  return false\n};\n\n// RegExpIdentifierStart ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\n//   <ZWNJ>\n//   <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.raise(\"Invalid escape\");\n  }\n  return false\n};\npp$1.regexp_eatBackReference = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatDecimalEscape(state)) {\n    var n = state.lastIntValue;\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n;\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue);\n      return true\n    }\n    state.raise(\"Invalid named reference\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n  var ch = state.current();\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09; /* \\t */\n    state.advance();\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A; /* \\n */\n    state.advance();\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B; /* \\v */\n    state.advance();\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C; /* \\f */\n    state.advance();\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D; /* \\r */\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n  var ch = state.current();\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n  if ( forceU === void 0 ) forceU = false;\n\n  var start = state.pos;\n  var switchU = forceU || state.switchU;\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      var lead = state.lastIntValue;\n      if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        var leadSurrogateEnd = state.pos;\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          var trail = state.lastIntValue;\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd;\n        state.lastIntValue = lead;\n      }\n      return true\n    }\n    if (\n      switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (switchU) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.pos = start;\n  }\n\n  return false\n};\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F; /* / */\n      return true\n    }\n    return false\n  }\n\n  var ch = state.current();\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0;\n  var ch = state.current();\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n      state.advance();\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n  var ch = state.current();\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1;\n    state.advance();\n    return CharSetOk\n  }\n\n  var negate = false;\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1;\n    state.advance();\n    var result;\n    if (\n      state.eat(0x7B /* { */) &&\n      (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n      state.eat(0x7D /* } */)\n    ) {\n      if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n      return result\n    }\n    state.raise(\"Invalid property name\");\n  }\n\n  return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n  var start = state.pos;\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    var name = state.lastStringValue;\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      var value = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n      return CharSetOk\n    }\n  }\n  state.pos = start;\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    var nameOrValue = state.lastStringValue;\n    return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n  }\n  return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!hasOwn(state.unicodeProperties.nonBinary, name))\n    { state.raise(\"Invalid property name\"); }\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n  if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n  state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (!state.eat(0x5D /* ] */))\n      { state.raise(\"Unterminated character class\"); }\n    if (negate && result === CharSetString)\n      { state.raise(\"Negated character class may contain strings\"); }\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n  if (state.current() === 0x5D /* ] */) { return CharSetOk }\n  if (state.switchV) { return this.regexp_classSetExpression(state) }\n  this.regexp_nonEmptyClassRanges(state);\n  return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      var right = state.lastIntValue;\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\");\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      var ch$1 = state.current();\n      if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n        state.raise(\"Invalid class escape\");\n      }\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n\n  var ch = state.current();\n  if (ch !== 0x5D /* ] */) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08; /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D; /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n  var result = CharSetOk, subResult;\n  if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n    if (subResult === CharSetString) { result = CharSetString; }\n    // https://tc39.es/ecma262/#prod-ClassIntersection\n    var start = state.pos;\n    while (state.eatChars([0x26, 0x26] /* && */)) {\n      if (\n        state.current() !== 0x26 /* & */ &&\n        (subResult = this.regexp_eatClassSetOperand(state))\n      ) {\n        if (subResult !== CharSetString) { result = CharSetOk; }\n        continue\n      }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n    // https://tc39.es/ecma262/#prod-ClassSubtraction\n    while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n      if (this.regexp_eatClassSetOperand(state)) { continue }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n  } else {\n    state.raise(\"Invalid character in character class\");\n  }\n  // https://tc39.es/ecma262/#prod-ClassUnion\n  for (;;) {\n    if (this.regexp_eatClassSetRange(state)) { continue }\n    subResult = this.regexp_eatClassSetOperand(state);\n    if (!subResult) { return result }\n    if (subResult === CharSetString) { result = CharSetString; }\n  }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatClassSetCharacter(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n      var right = state.lastIntValue;\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n  if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n  return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (state.eat(0x5D /* ] */)) {\n      if (negate && result === CharSetString) {\n        state.raise(\"Negated character class may contain strings\");\n      }\n      return result\n    }\n    state.pos = start;\n  }\n  if (state.eat(0x5C /* \\ */)) {\n    var result$1 = this.regexp_eatCharacterClassEscape(state);\n    if (result$1) {\n      return result$1\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n  var start = state.pos;\n  if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n    if (state.eat(0x7B /* { */)) {\n      var result = this.regexp_classStringDisjunctionContents(state);\n      if (state.eat(0x7D /* } */)) {\n        return result\n      }\n    } else {\n      // Make the same message as V8.\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n  var result = this.regexp_classString(state);\n  while (state.eat(0x7C /* | */)) {\n    if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n  }\n  return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n  var count = 0;\n  while (this.regexp_eatClassSetCharacter(state)) { count++; }\n  return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (\n      this.regexp_eatCharacterEscape(state) ||\n      this.regexp_eatClassSetReservedPunctuator(state)\n    ) {\n      return true\n    }\n    if (state.eat(0x62 /* b */)) {\n      state.lastIntValue = 0x08; /* <BS> */\n      return true\n    }\n    state.pos = start;\n    return false\n  }\n  var ch = state.current();\n  if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n  if (isClassSetSyntaxCharacter(ch)) { return false }\n  state.advance();\n  state.lastIntValue = ch;\n  return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n    ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n    ch === 0x2E /* . */ ||\n    ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n    ch === 0x5E /* ^ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n  return (\n    ch === 0x28 /* ( */ ||\n    ch === 0x29 /* ) */ ||\n    ch === 0x2D /* - */ ||\n    ch === 0x2F /* / */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n  var ch = state.current();\n  if (isClassSetReservedPunctuator(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch === 0x23 /* # */ ||\n    ch === 0x25 /* % */ ||\n    ch === 0x26 /* & */ ||\n    ch === 0x2C /* , */ ||\n    ch === 0x2D /* - */ ||\n    ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n    ch === 0x40 /* @ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n  var ch = state.current();\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n  var start = state.pos;\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    var n1 = state.lastIntValue;\n    if (this.regexp_eatOctalDigit(state)) {\n      var n2 = state.lastIntValue;\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n      } else {\n        state.lastIntValue = n1 * 8 + n2;\n      }\n    } else {\n      state.lastIntValue = n1;\n    }\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n  var ch = state.current();\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30; /* 0 */\n    state.advance();\n    return true\n  }\n  state.lastIntValue = 0;\n  return false\n};\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n  var start = state.pos;\n  state.lastIntValue = 0;\n  for (var i = 0; i < length; ++i) {\n    var ch = state.current();\n    if (!isHexDigit(ch)) {\n      state.pos = start;\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return true\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\nvar Token = function Token(p) {\n  this.type = p.type;\n  this.value = p.value;\n  this.start = p.start;\n  this.end = p.end;\n  if (p.options.locations)\n    { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n  if (p.options.ranges)\n    { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n  if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n    { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n  if (this.options.onToken)\n    { this.options.onToken(new Token(this)); }\n\n  this.lastTokEnd = this.end;\n  this.lastTokStart = this.start;\n  this.lastTokEndLoc = this.endLoc;\n  this.lastTokStartLoc = this.startLoc;\n  this.nextToken();\n};\n\npp.getToken = function() {\n  this.next();\n  return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  { pp[Symbol.iterator] = function() {\n    var this$1$1 = this;\n\n    return {\n      next: function () {\n        var token = this$1$1.getToken();\n        return {\n          done: token.type === types$1.eof,\n          value: token\n        }\n      }\n    }\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// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  var curContext = this.curContext();\n  if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n  this.start = this.pos;\n  if (this.options.locations) { this.startLoc = this.curPosition(); }\n  if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n  if (curContext.override) { return curContext.override(this) }\n  else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    { return this.readWord() }\n\n  return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n  var code = this.input.charCodeAt(this.pos);\n  if (code <= 0xd7ff || code >= 0xdc00) { return code }\n  var next = this.input.charCodeAt(this.pos + 1);\n  return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n  var startLoc = this.options.onComment && this.curPosition();\n  var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n  if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n  this.pos = end + 2;\n  if (this.options.locations) {\n    for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n      ++this.curLine;\n      pos = this.lineStart = nextBreak;\n    }\n  }\n  if (this.options.onComment)\n    { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n  var start = this.pos;\n  var startLoc = this.options.onComment && this.curPosition();\n  var ch = this.input.charCodeAt(this.pos += startSkip);\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos);\n  }\n  if (this.options.onComment)\n    { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    var ch = this.input.charCodeAt(this.pos);\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos;\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos;\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos;\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment();\n        break\n      case 47:\n        this.skipLineComment(2);\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos;\n      } else {\n        break loop\n      }\n    }\n  }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos;\n  if (this.options.locations) { this.endLoc = this.curPosition(); }\n  var prevType = this.type;\n  this.type = type;\n  this.value = val;\n\n  this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next >= 48 && next <= 57) { return this.readNumber(true) }\n  var next2 = this.input.charCodeAt(this.pos + 2);\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3;\n    return this.finishToken(types$1.ellipsis)\n  } else {\n    ++this.pos;\n    return this.finishToken(types$1.dot)\n  }\n};\n\npp.readToken_slash = function() { // '/'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size;\n    tokentype = types$1.starstar;\n    next = this.input.charCodeAt(this.pos + 2);\n  }\n\n  if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n  return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (this.options.ecmaVersion >= 12) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n    }\n    return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3);\n      this.skipSpace();\n      return this.nextToken()\n    }\n    return this.finishOp(types$1.incDec, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n    if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n    return this.finishOp(types$1.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4);\n    this.skipSpace();\n    return this.nextToken()\n  }\n  if (next === 61) { size = 2; }\n  return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2;\n    return this.finishToken(types$1.arrow)\n  }\n  return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n  var ecmaVersion = this.options.ecmaVersion;\n  if (ecmaVersion >= 11) {\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 46) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n    }\n    if (next === 63) {\n      if (ecmaVersion >= 12) {\n        var next2$1 = this.input.charCodeAt(this.pos + 2);\n        if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n      }\n      return this.finishOp(types$1.coalesce, 2)\n    }\n  }\n  return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n  var ecmaVersion = this.options.ecmaVersion;\n  var code = 35; // '#'\n  if (ecmaVersion >= 13) {\n    ++this.pos;\n    code = this.fullCharCodeAtPos();\n    if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n      return this.finishToken(types$1.privateId, this.readWord1())\n    }\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(types$1.parenL)\n  case 41: ++this.pos; return this.finishToken(types$1.parenR)\n  case 59: ++this.pos; return this.finishToken(types$1.semi)\n  case 44: ++this.pos; return this.finishToken(types$1.comma)\n  case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n  case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n  case 123: ++this.pos; return this.finishToken(types$1.braceL)\n  case 125: ++this.pos; return this.finishToken(types$1.braceR)\n  case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) { break }\n    ++this.pos;\n    return this.finishToken(types$1.backQuote)\n\n  case 48: // '0'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n      if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) 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  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 63: // '?'\n    return this.readToken_question()\n\n  case 126: // '~'\n    return this.finishOp(types$1.prefix, 1)\n\n  case 35: // '#'\n    return this.readToken_numberSign()\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n  var str = this.input.slice(this.pos, this.pos + size);\n  this.pos += size;\n  return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n  var escaped, inClass, start = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n    var ch = this.input.charAt(this.pos);\n    if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n    if (!escaped) {\n      if (ch === \"[\") { inClass = true; }\n      else if (ch === \"]\" && inClass) { inClass = false; }\n      else if (ch === \"/\" && !inClass) { break }\n      escaped = ch === \"\\\\\";\n    } else { escaped = false; }\n    ++this.pos;\n  }\n  var pattern = this.input.slice(start, this.pos);\n  ++this.pos;\n  var flagsStart = this.pos;\n  var flags = this.readWord1();\n  if (this.containsEsc) { this.unexpected(flagsStart); }\n\n  // Validate pattern\n  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n  state.reset(start, pattern, flags);\n  this.validateRegExpFlags(state);\n  this.validateRegExpPattern(state);\n\n  // Create Literal#value property value.\n  var value = null;\n  try {\n    value = new RegExp(pattern, flags);\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\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\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n  // `len` is used for character escape sequences. In that case, disallow separators.\n  var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n  // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n  // and isn't fraction part nor exponent part. In that case, if the first digit\n  // is zero then disallow separators.\n  var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n  var start = this.pos, total = 0, lastCode = 0;\n  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n    var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n    if (allowSeparators && code === 95) {\n      if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n      if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n      if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n      lastCode = code;\n      continue\n    }\n\n    if (code >= 97) { val = code - 97 + 10; } // a\n    else if (code >= 65) { val = code - 65 + 10; } // A\n    else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n    else { val = Infinity; }\n    if (val >= radix) { break }\n    lastCode = code;\n    total = total * radix + val;\n  }\n\n  if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n  if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n  return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n  if (isLegacyOctalNumericLiteral) {\n    return parseInt(str, 8)\n  }\n\n  // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n  return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n  if (typeof BigInt !== \"function\") {\n    return null\n  }\n\n  // `BigInt(value)` throws syntax error if the string contains numeric separators.\n  return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n  var start = this.pos;\n  this.pos += 2; // 0x\n  var val = this.readInt(radix);\n  if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n  if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n    val = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n  } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n  return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  var start = this.pos;\n  if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n  if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n  var next = this.input.charCodeAt(this.pos);\n  if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n    var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n    return this.finishToken(types$1.num, val$1)\n  }\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n  if (next === 46 && !octal) { // '.'\n    ++this.pos;\n    this.readInt(10);\n    next = this.input.charCodeAt(this.pos);\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos);\n    if (next === 43 || next === 45) { ++this.pos; } // '+-'\n    if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n  var val = stringToNumber(this.input.slice(start, this.pos), octal);\n  return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  var ch = this.input.charCodeAt(this.pos), code;\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) { this.unexpected(); }\n    var codePos = ++this.pos;\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n    ++this.pos;\n    if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n  } else {\n    code = this.readHexChar(4);\n  }\n  return code\n};\n\npp.readString = function(quote) {\n  var out = \"\", chunkStart = ++this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === quote) { break }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(false);\n      chunkStart = this.pos;\n    } else if (ch === 0x2028 || ch === 0x2029) {\n      if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n      if (this.options.locations) {\n        this.curLine++;\n        this.lineStart = this.pos;\n      }\n    } else {\n      if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++);\n  return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true;\n  try {\n    this.readTmplToken();\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken();\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message);\n  }\n};\n\npp.readTmplToken = function() {\n  var out = \"\", chunkStart = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2;\n          return this.finishToken(types$1.dollarBraceL)\n        } else {\n          ++this.pos;\n          return this.finishToken(types$1.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos);\n      return this.finishToken(types$1.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(true);\n      chunkStart = this.pos;\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos);\n      ++this.pos;\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n      case 10:\n        out += \"\\n\";\n        break\n      default:\n        out += String.fromCharCode(ch);\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      chunkStart = this.pos;\n    } else {\n      ++this.pos;\n    }\n  }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos;\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") { break }\n      // fall through\n    case \"`\":\n      return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    case \"\\r\":\n      if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n      // fall through\n    case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n      ++this.curLine;\n      this.lineStart = this.pos + 1;\n      break\n    }\n  }\n  this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  var ch = this.input.charCodeAt(++this.pos);\n  ++this.pos;\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n    return \"\"\n  case 56:\n  case 57:\n    if (this.strict) {\n      this.invalidStringToken(\n        this.pos - 1,\n        \"Invalid escape sequence\"\n      );\n    }\n    if (inTemplate) {\n      var codePos = this.pos - 1;\n\n      this.invalidStringToken(\n        codePos,\n        \"Invalid escape sequence in template string\"\n      );\n    }\n  default:\n    if (ch >= 48 && ch <= 55) {\n      var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n      var octal = parseInt(octalStr, 8);\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1);\n        octal = parseInt(octalStr, 8);\n      }\n      this.pos += octalStr.length - 1;\n      ch = this.input.charCodeAt(this.pos);\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        );\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  var codePos = this.pos;\n  var n = this.readInt(16, len);\n  if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n  return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.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\npp.readWord1 = function() {\n  this.containsEsc = false;\n  var word = \"\", first = true, chunkStart = this.pos;\n  var astral = this.options.ecmaVersion >= 6;\n  while (this.pos < this.input.length) {\n    var ch = this.fullCharCodeAtPos();\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2;\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true;\n      word += this.input.slice(chunkStart, this.pos);\n      var escStart = this.pos;\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n      ++this.pos;\n      var esc = this.readCodePoint();\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n      word += codePointToString(esc);\n      chunkStart = this.pos;\n    } else {\n      break\n    }\n    first = false;\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  var word = this.readWord1();\n  var type = types$1.name;\n  if (this.keywords.test(word)) {\n    type = keywords[word];\n  }\n  return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\n\nvar version = \"8.14.0\";\n\nParser.acorn = {\n  Parser: Parser,\n  version: version,\n  defaultOptions: defaultOptions,\n  Position: Position,\n  SourceLocation: SourceLocation,\n  getLineInfo: getLineInfo,\n  Node: Node,\n  TokenType: TokenType,\n  tokTypes: types$1,\n  keywordTypes: keywords,\n  TokContext: TokContext,\n  tokContexts: types,\n  isIdentifierChar: isIdentifierChar,\n  isIdentifierStart: isIdentifierStart,\n  Token: Token,\n  isNewLine: isNewLine,\n  lineBreak: lineBreak,\n  lineBreakG: lineBreakG,\n  nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n","const n = /[^\\0-\\x7E]/;\nconst t = /[\\x2E\\u3002\\uFF0E\\uFF61]/g;\nconst o = {\n  overflow: \"Overflow Error\",\n  \"not-basic\": \"Illegal Input\",\n  \"invalid-input\": \"Invalid Input\"\n};\nconst e = Math.floor;\nconst r = String.fromCharCode;\nfunction s(n2) {\n  throw new RangeError(o[n2]);\n}\nconst c = function(n2, t2) {\n  return n2 + 22 + 75 * (n2 < 26) - ((t2 != 0) << 5);\n};\nconst u = function(n2, t2, o2) {\n  let r2 = 0;\n  for (n2 = o2 ? e(n2 / 700) : n2 >> 1, n2 += e(n2 / t2); n2 > 455; r2 += 36) {\n    n2 = e(n2 / 35);\n  }\n  return e(r2 + 36 * n2 / (n2 + 38));\n};\nfunction toASCII(o2) {\n  return function(n2, o3) {\n    const e2 = n2.split(\"@\");\n    let r2 = \"\";\n    e2.length > 1 && (r2 = e2[0] + \"@\", n2 = e2[1]);\n    const s2 = function(n3, t2) {\n      const o4 = [];\n      let e3 = n3.length;\n      for (; e3--; ) {\n        o4[e3] = t2(n3[e3]);\n      }\n      return o4;\n    }((n2 = n2.replace(t, \".\")).split(\".\"), o3).join(\".\");\n    return r2 + s2;\n  }(o2, function(t2) {\n    return n.test(t2) ? \"xn--\" + function(n2) {\n      const t3 = [];\n      const o3 = (n2 = function(n3) {\n        const t4 = [];\n        let o4 = 0;\n        const e2 = n3.length;\n        for (; o4 < e2; ) {\n          const r2 = n3.charCodeAt(o4++);\n          if (r2 >= 55296 && r2 <= 56319 && o4 < e2) {\n            const e3 = n3.charCodeAt(o4++);\n            (64512 & e3) == 56320 ? t4.push(((1023 & r2) << 10) + (1023 & e3) + 65536) : (t4.push(r2), o4--);\n          } else {\n            t4.push(r2);\n          }\n        }\n        return t4;\n      }(n2)).length;\n      let f = 128;\n      let i = 0;\n      let l = 72;\n      for (const o4 of n2) {\n        o4 < 128 && t3.push(r(o4));\n      }\n      const h = t3.length;\n      let p = h;\n      for (h && t3.push(\"-\"); p < o3; ) {\n        let o4 = 2147483647;\n        for (const t4 of n2) {\n          t4 >= f && t4 < o4 && (o4 = t4);\n        }\n        const a = p + 1;\n        o4 - f > e((2147483647 - i) / a) && s(\"overflow\"), i += (o4 - f) * a, f = o4;\n        for (const o5 of n2) {\n          if (o5 < f && ++i > 2147483647 && s(\"overflow\"), o5 == f) {\n            let n3 = i;\n            for (let o6 = 36; ; o6 += 36) {\n              const s2 = o6 <= l ? 1 : o6 >= l + 26 ? 26 : o6 - l;\n              if (n3 < s2) {\n                break;\n              }\n              const u2 = n3 - s2;\n              const f2 = 36 - s2;\n              t3.push(r(c(s2 + u2 % f2, 0))), n3 = e(u2 / f2);\n            }\n            t3.push(r(c(n3, 0))), l = u(i, a, p == h), i = 0, ++p;\n          }\n        }\n        ++i, ++f;\n      }\n      return t3.join(\"\");\n    }(t2) : t2;\n  });\n}\n\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\nconst ENC_CARET_RE = /%5e/gi;\nconst ENC_BACKTICK_RE = /%60/gi;\nconst ENC_CURLY_OPEN_RE = /%7b/gi;\nconst ENC_PIPE_RE = /%7c/gi;\nconst ENC_CURLY_CLOSE_RE = /%7d/gi;\nconst ENC_SPACE_RE = /%20/gi;\nconst ENC_SLASH_RE = /%2f/gi;\nconst ENC_ENC_SLASH_RE = /%252f/gi;\nfunction encode(text) {\n  return encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\");\n}\nfunction encodeHash(text) {\n  return encode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\nfunction encodeQueryValue(input) {\n  return encode(typeof input === \"string\" ? input : JSON.stringify(input)).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CARET_RE, \"^\").replace(SLASH_RE, \"%2F\");\n}\nfunction encodeQueryKey(text) {\n  return encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\nfunction encodePath(text) {\n  return encode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\").replace(ENC_ENC_SLASH_RE, \"%2F\").replace(AMPERSAND_RE, \"%26\").replace(PLUS_RE, \"%2B\");\n}\nfunction encodeParam(text) {\n  return encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text = \"\") {\n  try {\n    return decodeURIComponent(\"\" + text);\n  } catch {\n    return \"\" + text;\n  }\n}\nfunction decodePath(text) {\n  return decode(text.replace(ENC_SLASH_RE, \"%252F\"));\n}\nfunction decodeQueryKey(text) {\n  return decode(text.replace(PLUS_RE, \" \"));\n}\nfunction decodeQueryValue(text) {\n  return decode(text.replace(PLUS_RE, \" \"));\n}\nfunction encodeHost(name = \"\") {\n  return toASCII(name);\n}\n\nfunction parseQuery(parametersString = \"\") {\n  const object = {};\n  if (parametersString[0] === \"?\") {\n    parametersString = parametersString.slice(1);\n  }\n  for (const parameter of parametersString.split(\"&\")) {\n    const s = parameter.match(/([^=]+)=?(.*)/) || [];\n    if (s.length < 2) {\n      continue;\n    }\n    const key = decodeQueryKey(s[1]);\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = decodeQueryValue(s[2] || \"\");\n    if (object[key] === void 0) {\n      object[key] = value;\n    } else if (Array.isArray(object[key])) {\n      object[key].push(value);\n    } else {\n      object[key] = [object[key], value];\n    }\n  }\n  return object;\n}\nfunction encodeQueryItem(key, value) {\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    value = String(value);\n  }\n  if (!value) {\n    return encodeQueryKey(key);\n  }\n  if (Array.isArray(value)) {\n    return value.map((_value) => `${encodeQueryKey(key)}=${encodeQueryValue(_value)}`).join(\"&\");\n  }\n  return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;\n}\nfunction stringifyQuery(query) {\n  return Object.keys(query).filter((k) => query[k] !== void 0).map((k) => encodeQueryItem(k, query[k])).filter(Boolean).join(\"&\");\n}\n\nconst PROTOCOL_STRICT_REGEX = /^[\\s\\w\\0+.-]{2,}:([/\\\\]{1,2})/;\nconst PROTOCOL_REGEX = /^[\\s\\w\\0+.-]{2,}:([/\\\\]{2})?/;\nconst PROTOCOL_RELATIVE_REGEX = /^([/\\\\]\\s*){2,}[^/\\\\]/;\nconst PROTOCOL_SCRIPT_RE = /^[\\s\\0]*(blob|data|javascript|vbscript):$/i;\nconst TRAILING_SLASH_RE = /\\/$|\\/\\?|\\/#/;\nconst JOIN_LEADING_SLASH_RE = /^\\.?\\//;\nfunction isRelative(inputString) {\n  return [\"./\", \"../\"].some((string_) => inputString.startsWith(string_));\n}\nfunction hasProtocol(inputString, opts = {}) {\n  if (typeof opts === \"boolean\") {\n    opts = { acceptRelative: opts };\n  }\n  if (opts.strict) {\n    return PROTOCOL_STRICT_REGEX.test(inputString);\n  }\n  return PROTOCOL_REGEX.test(inputString) || (opts.acceptRelative ? PROTOCOL_RELATIVE_REGEX.test(inputString) : false);\n}\nfunction isScriptProtocol(protocol) {\n  return !!protocol && PROTOCOL_SCRIPT_RE.test(protocol);\n}\nfunction hasTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return input.endsWith(\"/\");\n  }\n  return TRAILING_SLASH_RE.test(input);\n}\nfunction withoutTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || \"/\";\n  }\n  if (!hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  let path = input;\n  let fragment = \"\";\n  const fragmentIndex = input.indexOf(\"#\");\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n  }\n  const [s0, ...s] = path.split(\"?\");\n  const cleanPath = s0.endsWith(\"/\") ? s0.slice(0, -1) : s0;\n  return (cleanPath || \"/\") + (s.length > 0 ? `?${s.join(\"?\")}` : \"\") + fragment;\n}\nfunction withTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return input.endsWith(\"/\") ? input : input + \"/\";\n  }\n  if (hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  let path = input;\n  let fragment = \"\";\n  const fragmentIndex = input.indexOf(\"#\");\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n    if (!path) {\n      return fragment;\n    }\n  }\n  const [s0, ...s] = path.split(\"?\");\n  return s0 + \"/\" + (s.length > 0 ? `?${s.join(\"?\")}` : \"\") + fragment;\n}\nfunction hasLeadingSlash(input = \"\") {\n  return input.startsWith(\"/\");\n}\nfunction withoutLeadingSlash(input = \"\") {\n  return (hasLeadingSlash(input) ? input.slice(1) : input) || \"/\";\n}\nfunction withLeadingSlash(input = \"\") {\n  return hasLeadingSlash(input) ? input : \"/\" + input;\n}\nfunction cleanDoubleSlashes(input = \"\") {\n  return input.split(\"://\").map((string_) => string_.replace(/\\/{2,}/g, \"/\")).join(\"://\");\n}\nfunction withBase(input, base) {\n  if (isEmptyURL(base) || hasProtocol(input)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (input.startsWith(_base)) {\n    return input;\n  }\n  return joinURL(_base, input);\n}\nfunction withoutBase(input, base) {\n  if (isEmptyURL(base)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (!input.startsWith(_base)) {\n    return input;\n  }\n  const trimmed = input.slice(_base.length);\n  return trimmed[0] === \"/\" ? trimmed : \"/\" + trimmed;\n}\nfunction withQuery(input, query) {\n  const parsed = parseURL(input);\n  const mergedQuery = { ...parseQuery(parsed.search), ...query };\n  parsed.search = stringifyQuery(mergedQuery);\n  return stringifyParsedURL(parsed);\n}\nfunction getQuery(input) {\n  return parseQuery(parseURL(input).search);\n}\nfunction isEmptyURL(url) {\n  return !url || url === \"/\";\n}\nfunction isNonEmptyURL(url) {\n  return url && url !== \"/\";\n}\nfunction joinURL(base, ...input) {\n  let url = base || \"\";\n  for (const segment of input.filter((url2) => isNonEmptyURL(url2))) {\n    if (url) {\n      const _segment = segment.replace(JOIN_LEADING_SLASH_RE, \"\");\n      url = withTrailingSlash(url) + _segment;\n    } else {\n      url = segment;\n    }\n  }\n  return url;\n}\nfunction joinRelativeURL(..._input) {\n  const JOIN_SEGMENT_SPLIT_RE = /\\/(?!\\/)/;\n  const input = _input.filter(Boolean);\n  const segments = [];\n  let segmentsDepth = 0;\n  for (const i of input) {\n    if (!i || i === \"/\") {\n      continue;\n    }\n    for (const [sindex, s] of i.split(JOIN_SEGMENT_SPLIT_RE).entries()) {\n      if (!s || s === \".\") {\n        continue;\n      }\n      if (s === \"..\") {\n        if (segments.length === 1 && hasProtocol(segments[0])) {\n          continue;\n        }\n        segments.pop();\n        segmentsDepth--;\n        continue;\n      }\n      if (sindex === 1 && segments[segments.length - 1]?.endsWith(\":/\")) {\n        segments[segments.length - 1] += \"/\" + s;\n        continue;\n      }\n      segments.push(s);\n      segmentsDepth++;\n    }\n  }\n  let url = segments.join(\"/\");\n  if (segmentsDepth >= 0) {\n    if (input[0]?.startsWith(\"/\") && !url.startsWith(\"/\")) {\n      url = \"/\" + url;\n    } else if (input[0]?.startsWith(\"./\") && !url.startsWith(\"./\")) {\n      url = \"./\" + url;\n    }\n  } else {\n    url = \"../\".repeat(-1 * segmentsDepth) + url;\n  }\n  if (input[input.length - 1]?.endsWith(\"/\") && !url.endsWith(\"/\")) {\n    url += \"/\";\n  }\n  return url;\n}\nfunction withHttp(input) {\n  return withProtocol(input, \"http://\");\n}\nfunction withHttps(input) {\n  return withProtocol(input, \"https://\");\n}\nfunction withoutProtocol(input) {\n  return withProtocol(input, \"\");\n}\nfunction withProtocol(input, protocol) {\n  let match = input.match(PROTOCOL_REGEX);\n  if (!match) {\n    match = input.match(/^\\/{2,}/);\n  }\n  if (!match) {\n    return protocol + input;\n  }\n  return protocol + input.slice(match[0].length);\n}\nfunction normalizeURL(input) {\n  const parsed = parseURL(input);\n  parsed.pathname = encodePath(decodePath(parsed.pathname));\n  parsed.hash = encodeHash(decode(parsed.hash));\n  parsed.host = encodeHost(decode(parsed.host));\n  parsed.search = stringifyQuery(parseQuery(parsed.search));\n  return stringifyParsedURL(parsed);\n}\nfunction resolveURL(base = \"\", ...inputs) {\n  if (typeof base !== \"string\") {\n    throw new TypeError(\n      `URL input should be string received ${typeof base} (${base})`\n    );\n  }\n  const filteredInputs = inputs.filter((input) => isNonEmptyURL(input));\n  if (filteredInputs.length === 0) {\n    return base;\n  }\n  const url = parseURL(base);\n  for (const inputSegment of filteredInputs) {\n    const urlSegment = parseURL(inputSegment);\n    if (urlSegment.pathname) {\n      url.pathname = withTrailingSlash(url.pathname) + withoutLeadingSlash(urlSegment.pathname);\n    }\n    if (urlSegment.hash && urlSegment.hash !== \"#\") {\n      url.hash = urlSegment.hash;\n    }\n    if (urlSegment.search && urlSegment.search !== \"?\") {\n      if (url.search && url.search !== \"?\") {\n        const queryString = stringifyQuery({\n          ...parseQuery(url.search),\n          ...parseQuery(urlSegment.search)\n        });\n        url.search = queryString.length > 0 ? \"?\" + queryString : \"\";\n      } else {\n        url.search = urlSegment.search;\n      }\n    }\n  }\n  return stringifyParsedURL(url);\n}\nfunction isSamePath(p1, p2) {\n  return decode(withoutTrailingSlash(p1)) === decode(withoutTrailingSlash(p2));\n}\nfunction isEqual(a, b, options = {}) {\n  if (!options.trailingSlash) {\n    a = withTrailingSlash(a);\n    b = withTrailingSlash(b);\n  }\n  if (!options.leadingSlash) {\n    a = withLeadingSlash(a);\n    b = withLeadingSlash(b);\n  }\n  if (!options.encoding) {\n    a = decode(a);\n    b = decode(b);\n  }\n  return a === b;\n}\nfunction withFragment(input, hash) {\n  if (!hash || hash === \"#\") {\n    return input;\n  }\n  const parsed = parseURL(input);\n  parsed.hash = hash === \"\" ? \"\" : \"#\" + encodeHash(hash);\n  return stringifyParsedURL(parsed);\n}\nfunction withoutFragment(input) {\n  return stringifyParsedURL({ ...parseURL(input), hash: \"\" });\n}\nfunction withoutHost(input) {\n  const parsed = parseURL(input);\n  return (parsed.pathname || \"/\") + parsed.search + parsed.hash;\n}\n\nconst protocolRelative = Symbol.for(\"ufo:protocolRelative\");\nfunction parseURL(input = \"\", defaultProto) {\n  const _specialProtoMatch = input.match(\n    /^[\\s\\0]*(blob:|data:|javascript:|vbscript:)(.*)/i\n  );\n  if (_specialProtoMatch) {\n    const [, _proto, _pathname = \"\"] = _specialProtoMatch;\n    return {\n      protocol: _proto.toLowerCase(),\n      pathname: _pathname,\n      href: _proto + _pathname,\n      auth: \"\",\n      host: \"\",\n      search: \"\",\n      hash: \"\"\n    };\n  }\n  if (!hasProtocol(input, { acceptRelative: true })) {\n    return defaultProto ? parseURL(defaultProto + input) : parsePath(input);\n  }\n  const [, protocol = \"\", auth, hostAndPath = \"\"] = input.replace(/\\\\/g, \"/\").match(/^[\\s\\0]*([\\w+.-]{2,}:)?\\/\\/([^/@]+@)?(.*)/) || [];\n  let [, host = \"\", path = \"\"] = hostAndPath.match(/([^#/?]*)(.*)?/) || [];\n  if (protocol === \"file:\") {\n    path = path.replace(/\\/(?=[A-Za-z]:)/, \"\");\n  }\n  const { pathname, search, hash } = parsePath(path);\n  return {\n    protocol: protocol.toLowerCase(),\n    auth: auth ? auth.slice(0, Math.max(0, auth.length - 1)) : \"\",\n    host,\n    pathname,\n    search,\n    hash,\n    [protocolRelative]: !protocol\n  };\n}\nfunction parsePath(input = \"\") {\n  const [pathname = \"\", search = \"\", hash = \"\"] = (input.match(/([^#?]*)(\\?[^#]*)?(#.*)?/) || []).splice(1);\n  return {\n    pathname,\n    search,\n    hash\n  };\n}\nfunction parseAuth(input = \"\") {\n  const [username, password] = input.split(\":\");\n  return {\n    username: decode(username),\n    password: decode(password)\n  };\n}\nfunction parseHost(input = \"\") {\n  const [hostname, port] = (input.match(/([^/:]*):?(\\d+)?/) || []).splice(1);\n  return {\n    hostname: decode(hostname),\n    port\n  };\n}\nfunction stringifyParsedURL(parsed) {\n  const pathname = parsed.pathname || \"\";\n  const search = parsed.search ? (parsed.search.startsWith(\"?\") ? \"\" : \"?\") + parsed.search : \"\";\n  const hash = parsed.hash || \"\";\n  const auth = parsed.auth ? parsed.auth + \"@\" : \"\";\n  const host = parsed.host || \"\";\n  const proto = parsed.protocol || parsed[protocolRelative] ? (parsed.protocol || \"\") + \"//\" : \"\";\n  return proto + auth + host + pathname + search + hash;\n}\nconst FILENAME_STRICT_REGEX = /\\/([^/]+\\.[^/]+)$/;\nconst FILENAME_REGEX = /\\/([^/]+)$/;\nfunction parseFilename(input = \"\", { strict }) {\n  const { pathname } = parseURL(input);\n  const matches = strict ? pathname.match(FILENAME_STRICT_REGEX) : pathname.match(FILENAME_REGEX);\n  return matches ? matches[1] : void 0;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass $URL {\n  constructor(input = \"\") {\n    __publicField(this, \"protocol\");\n    __publicField(this, \"host\");\n    __publicField(this, \"auth\");\n    __publicField(this, \"pathname\");\n    __publicField(this, \"query\", {});\n    __publicField(this, \"hash\");\n    if (typeof input !== \"string\") {\n      throw new TypeError(\n        `URL input should be string received ${typeof input} (${input})`\n      );\n    }\n    const parsed = parseURL(input);\n    this.protocol = decode(parsed.protocol);\n    this.host = decode(parsed.host);\n    this.auth = decode(parsed.auth);\n    this.pathname = decodePath(parsed.pathname);\n    this.query = parseQuery(parsed.search);\n    this.hash = decode(parsed.hash);\n  }\n  get hostname() {\n    return parseHost(this.host).hostname;\n  }\n  get port() {\n    return parseHost(this.host).port || \"\";\n  }\n  get username() {\n    return parseAuth(this.auth).username;\n  }\n  get password() {\n    return parseAuth(this.auth).password || \"\";\n  }\n  get hasProtocol() {\n    return this.protocol.length;\n  }\n  get isAbsolute() {\n    return this.hasProtocol || this.pathname[0] === \"/\";\n  }\n  get search() {\n    const q = stringifyQuery(this.query);\n    return q.length > 0 ? \"?\" + q : \"\";\n  }\n  get searchParams() {\n    const p = new URLSearchParams();\n    for (const name in this.query) {\n      const value = this.query[name];\n      if (Array.isArray(value)) {\n        for (const v of value) {\n          p.append(name, v);\n        }\n      } else {\n        p.append(\n          name,\n          typeof value === \"string\" ? value : JSON.stringify(value)\n        );\n      }\n    }\n    return p;\n  }\n  get origin() {\n    return (this.protocol ? this.protocol + \"//\" : \"\") + encodeHost(this.host);\n  }\n  get fullpath() {\n    return encodePath(this.pathname) + this.search + encodeHash(this.hash);\n  }\n  get encodedAuth() {\n    if (!this.auth) {\n      return \"\";\n    }\n    const { username, password } = parseAuth(this.auth);\n    return encodeURIComponent(username) + (password ? \":\" + encodeURIComponent(password) : \"\");\n  }\n  get href() {\n    const auth = this.encodedAuth;\n    const originWithAuth = (this.protocol ? this.protocol + \"//\" : \"\") + (auth ? auth + \"@\" : \"\") + encodeHost(this.host);\n    return this.hasProtocol && this.isAbsolute ? originWithAuth + this.fullpath : this.fullpath;\n  }\n  append(url) {\n    if (url.hasProtocol) {\n      throw new Error(\"Cannot append a URL with protocol\");\n    }\n    Object.assign(this.query, url.query);\n    if (url.pathname) {\n      this.pathname = withTrailingSlash(this.pathname) + withoutLeadingSlash(url.pathname);\n    }\n    if (url.hash) {\n      this.hash = url.hash;\n    }\n  }\n  toJSON() {\n    return this.href;\n  }\n  toString() {\n    return this.href;\n  }\n}\nfunction createURL(input) {\n  return new $URL(input);\n}\n\nexport { $URL, cleanDoubleSlashes, createURL, decode, decodePath, decodeQueryKey, decodeQueryValue, encode, encodeHash, encodeHost, encodeParam, encodePath, encodeQueryItem, encodeQueryKey, encodeQueryValue, getQuery, hasLeadingSlash, hasProtocol, hasTrailingSlash, isEmptyURL, isEqual, isNonEmptyURL, isRelative, isSamePath, isScriptProtocol, joinRelativeURL, joinURL, normalizeURL, parseAuth, parseFilename, parseHost, parsePath, parseQuery, parseURL, resolveURL, stringifyParsedURL, stringifyQuery, withBase, withFragment, withHttp, withHttps, withLeadingSlash, withProtocol, withQuery, withTrailingSlash, withoutBase, withoutFragment, withoutHost, withoutLeadingSlash, withoutProtocol, withoutTrailingSlash };\n","let _lazyMatch = () => { var __lib__=(()=>{var m=Object.defineProperty,V=Object.getOwnPropertyDescriptor,G=Object.getOwnPropertyNames,T=Object.prototype.hasOwnProperty,q=(r,e)=>{for(var n in e)m(r,n,{get:e[n],enumerable:!0});},H=(r,e,n,t)=>{if(typeof e==\"object\"||typeof e==\"function\")for(let a of G(e))!T.call(r,a)&&a!==n&&m(r,a,{get:()=>e[a],enumerable:!(t=V(e,a))||t.enumerable});return r},J=r=>H(m({},\"__esModule\",{value:!0}),r),w={};q(w,{zeptomatch:()=>re});var A=r=>Array.isArray(r),d=r=>typeof r==\"function\",Q=r=>r.length===0,W=r=>typeof r==\"number\",K=r=>typeof r==\"object\"&&r!==null,X=r=>r instanceof RegExp,b=r=>typeof r==\"string\",h=r=>r===void 0,Y=r=>{const e=new Map;return n=>{const t=e.get(n);if(t)return t;const a=r(n);return e.set(n,a),a}},rr=(r,e,n={})=>{const t={cache:{},input:r,index:0,indexMax:0,options:n,output:[]};if(v(e)(t)&&t.index===r.length)return t.output;throw new Error(`Failed to parse at index ${t.indexMax}`)},i=(r,e)=>A(r)?er(r,e):b(r)?tr(r,e):nr(r,e),er=(r,e)=>{const n={};for(const t of r){if(t.length!==1)throw new Error(`Invalid character: \"${t}\"`);const a=t.charCodeAt(0);n[a]=!0;}return t=>{const a=t.index,o=t.input;for(;t.index<o.length&&o.charCodeAt(t.index)in n;)t.index+=1;const u=t.index;if(u>a){if(!h(e)&&!t.options.silent){const s=t.input.slice(a,u),c=d(e)?e(s,o,String(a)):e;h(c)||t.output.push(c);}t.indexMax=Math.max(t.indexMax,t.index);}return !0}},nr=(r,e)=>{const n=r.source,t=r.flags.replace(/y|$/,\"y\"),a=new RegExp(n,t);return g(o=>{a.lastIndex=o.index;const u=a.exec(o.input);if(u){if(!h(e)&&!o.options.silent){const s=d(e)?e(...u,o.input,String(o.index)):e;h(s)||o.output.push(s);}return o.index+=u[0].length,o.indexMax=Math.max(o.indexMax,o.index),!0}else return !1})},tr=(r,e)=>n=>{if(n.input.startsWith(r,n.index)){if(!h(e)&&!n.options.silent){const a=d(e)?e(r,n.input,String(n.index)):e;h(a)||n.output.push(a);}return n.index+=r.length,n.indexMax=Math.max(n.indexMax,n.index),!0}else return !1},C=(r,e,n,t)=>{const a=v(r);return g(_(M(o=>{let u=0;for(;u<n;){const s=o.index;if(!a(o)||(u+=1,o.index===s))break}return u>=e})))},ar=(r,e)=>C(r,0,1),f=(r,e)=>C(r,0,1/0),x=(r,e)=>{const n=r.map(v);return g(_(M(t=>{for(let a=0,o=n.length;a<o;a++)if(!n[a](t))return !1;return !0})))},l=(r,e)=>{const n=r.map(v);return g(_(t=>{for(let a=0,o=n.length;a<o;a++)if(n[a](t))return !0;return !1}))},M=(r,e=!1)=>{const n=v(r);return t=>{const a=t.index,o=t.output.length,u=n(t);return (!u||e)&&(t.index=a,t.output.length!==o&&(t.output.length=o)),u}},_=(r,e)=>{const n=v(r);return n},g=(()=>{let r=0;return e=>{const n=v(e),t=r+=1;return a=>{var o;if(a.options.memoization===!1)return n(a);const u=a.index,s=(o=a.cache)[t]||(o[t]=new Map),c=s.get(u);if(c===!1)return !1;if(W(c))return a.index=c,!0;if(c)return a.index=c.index,c.output?.length&&a.output.push(...c.output),!0;{const Z=a.output.length;if(n(a)){const D=a.index,U=a.output.length;if(U>Z){const ee=a.output.slice(Z,U);s.set(u,{index:D,output:ee});}else s.set(u,D);return !0}else return s.set(u,!1),!1}}}})(),E=r=>{let e;return n=>(e||(e=v(r())),e(n))},v=Y(r=>{if(d(r))return Q(r)?E(r):r;if(b(r)||X(r))return i(r);if(A(r))return x(r);if(K(r))return l(Object.values(r));throw new Error(\"Invalid rule\")}),P=\"abcdefghijklmnopqrstuvwxyz\",ir=r=>{let e=\"\";for(;r>0;){const n=(r-1)%26;e=P[n]+e,r=Math.floor((r-1)/26);}return e},z=r=>{let e=0;for(let n=0,t=r.length;n<t;n++)e=e*26+P.indexOf(r[n])+1;return e},S=(r,e)=>{if(e<r)return S(e,r);const n=[];for(;r<=e;)n.push(r++);return n},or=(r,e,n)=>S(r,e).map(t=>String(t).padStart(n,\"0\")),O=(r,e)=>S(z(r),z(e)).map(ir),p=r=>r,R=r=>ur(e=>rr(e,r,{memoization:!1}).join(\"\")),ur=r=>{const e={};return n=>e[n]??(e[n]=r(n))},sr=i(/^\\*\\*\\/\\*$/,\".*\"),cr=i(/^\\*\\*\\/(\\*)?([ a-zA-Z0-9._-]+)$/,(r,e,n)=>`.*${e?\"\":\"(?:^|/)\"}${n.replaceAll(\".\",\"\\\\.\")}`),lr=i(/^\\*\\*\\/(\\*)?([ a-zA-Z0-9._-]*)\\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\\}$/,(r,e,n,t)=>`.*${e?\"\":\"(?:^|/)\"}${n.replaceAll(\".\",\"\\\\.\")}(?:${t.replaceAll(\",\",\"|\").replaceAll(\".\",\"\\\\.\")})`),y=i(/\\\\./,p),pr=i(/[$.*+?^(){}[\\]\\|]/,r=>`\\\\${r}`),vr=i(/./,p),hr=i(/^(?:!!)*!(.*)$/,(r,e)=>`(?!^${L(e)}$).*?`),dr=i(/^(!!)+/,\"\"),fr=l([hr,dr]),xr=i(/\\/(\\*\\*\\/)+/,\"(?:/.+/|/)\"),gr=i(/^(\\*\\*\\/)+/,\"(?:^|.*/)\"),mr=i(/\\/(\\*\\*)$/,\"(?:/.*|$)\"),_r=i(/\\*\\*/,\".*\"),j=l([xr,gr,mr,_r]),Sr=i(/\\*\\/(?!\\*\\*\\/)/,\"[^/]*/\"),yr=i(/\\*/,\"[^/]*\"),N=l([Sr,yr]),k=i(\"?\",\"[^/]\"),$r=i(\"[\",p),wr=i(\"]\",p),Ar=i(/[!^]/,\"^/\"),br=i(/[a-z]-[a-z]|[0-9]-[0-9]/i,p),Cr=i(/[$.*+?^(){}[\\|]/,r=>`\\\\${r}`),Mr=i(/[^\\]]/,p),Er=l([y,Cr,br,Mr]),B=x([$r,ar(Ar),f(Er),wr]),Pr=i(\"{\",\"(?:\"),zr=i(\"}\",\")\"),Or=i(/(\\d+)\\.\\.(\\d+)/,(r,e,n)=>or(+e,+n,Math.min(e.length,n.length)).join(\"|\")),Rr=i(/([a-z]+)\\.\\.([a-z]+)/,(r,e,n)=>O(e,n).join(\"|\")),jr=i(/([A-Z]+)\\.\\.([A-Z]+)/,(r,e,n)=>O(e.toLowerCase(),n.toLowerCase()).join(\"|\").toUpperCase()),Nr=l([Or,Rr,jr]),I=x([Pr,Nr,zr]),kr=i(\"{\",\"(?:\"),Br=i(\"}\",\")\"),Ir=i(\",\",\"|\"),Fr=i(/[$.*+?^(){[\\]\\|]/,r=>`\\\\${r}`),Lr=i(/[^}]/,p),Zr=E(()=>F),Dr=l([j,N,k,B,I,Zr,y,Fr,Ir,Lr]),F=x([kr,f(Dr),Br]),Ur=f(l([sr,cr,lr,fr,j,N,k,B,I,F,y,pr,vr])),Vr=Ur,Gr=R(Vr),L=Gr,Tr=i(/\\\\./,p),qr=i(/./,p),Hr=i(/\\*\\*\\*+/,\"*\"),Jr=i(/([^/{[(!])\\*\\*/,(r,e)=>`${e}*`),Qr=i(/(^|.)\\*\\*(?=[^*/)\\]}])/,(r,e)=>`${e}*`),Wr=f(l([Tr,Hr,Jr,Qr,qr])),Kr=Wr,Xr=R(Kr),Yr=Xr,$=(r,e)=>{const n=Array.isArray(r)?r:[r];if(!n.length)return !1;const t=n.map($.compile),a=n.every(s=>/(\\/(?:\\*\\*)?|\\[\\/\\])$/.test(s)),o=e.replace(/[\\\\\\/]+/g,\"/\").replace(/\\/$/,a?\"/\":\"\");return t.some(s=>s.test(o))};$.compile=r=>new RegExp(`^${L(Yr(r))}$`,\"s\");var re=$;return J(w)})();\n return __lib__.default || __lib__; };\nlet _match;\nconst zeptomatch = (path, pattern) => {\n  if (!_match) {\n    _match = _lazyMatch();\n    _lazyMatch = null;\n  }\n  return _match(path, pattern);\n};\n\nconst _DRIVE_LETTER_START_RE = /^[A-Za-z]:\\//;\nfunction normalizeWindowsPath(input = \"\") {\n  if (!input) {\n    return input;\n  }\n  return input.replace(/\\\\/g, \"/\").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());\n}\n\nconst _UNC_REGEX = /^[/\\\\]{2}/;\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/;\nconst _DRIVE_LETTER_RE = /^[A-Za-z]:$/;\nconst _ROOT_FOLDER_RE = /^\\/([A-Za-z]:)?$/;\nconst _EXTNAME_RE = /.(\\.[^./]+)$/;\nconst _PATH_ROOT_RE = /^[/\\\\]|^[a-zA-Z]:[/\\\\]/;\nconst sep = \"/\";\nconst normalize = function(path) {\n  if (path.length === 0) {\n    return \".\";\n  }\n  path = normalizeWindowsPath(path);\n  const isUNCPath = path.match(_UNC_REGEX);\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSeparator = path[path.length - 1] === \"/\";\n  path = normalizeString(path, !isPathAbsolute);\n  if (path.length === 0) {\n    if (isPathAbsolute) {\n      return \"/\";\n    }\n    return trailingSeparator ? \"./\" : \".\";\n  }\n  if (trailingSeparator) {\n    path += \"/\";\n  }\n  if (_DRIVE_LETTER_RE.test(path)) {\n    path += \"/\";\n  }\n  if (isUNCPath) {\n    if (!isPathAbsolute) {\n      return `//./${path}`;\n    }\n    return `//${path}`;\n  }\n  return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;\n};\nconst join = function(...segments) {\n  let path = \"\";\n  for (const seg of segments) {\n    if (!seg) {\n      continue;\n    }\n    if (path.length > 0) {\n      const pathTrailing = path[path.length - 1] === \"/\";\n      const segLeading = seg[0] === \"/\";\n      const both = pathTrailing && segLeading;\n      if (both) {\n        path += seg.slice(1);\n      } else {\n        path += pathTrailing || segLeading ? seg : `/${seg}`;\n      }\n    } else {\n      path += seg;\n    }\n  }\n  return normalize(path);\n};\nfunction cwd() {\n  if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n    return process.cwd().replace(/\\\\/g, \"/\");\n  }\n  return \"/\";\n}\nconst resolve = function(...arguments_) {\n  arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));\n  let resolvedPath = \"\";\n  let resolvedAbsolute = false;\n  for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n    const path = index >= 0 ? arguments_[index] : cwd();\n    if (!path || path.length === 0) {\n      continue;\n    }\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = isAbsolute(path);\n  }\n  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n  if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n    return `/${resolvedPath}`;\n  }\n  return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n  let res = \"\";\n  let lastSegmentLength = 0;\n  let lastSlash = -1;\n  let dots = 0;\n  let char = null;\n  for (let index = 0; index <= path.length; ++index) {\n    if (index < path.length) {\n      char = path[index];\n    } else if (char === \"/\") {\n      break;\n    } else {\n      char = \"/\";\n    }\n    if (char === \"/\") {\n      if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n          if (res.length > 2) {\n            const lastSlashIndex = res.lastIndexOf(\"/\");\n            if (lastSlashIndex === -1) {\n              res = \"\";\n              lastSegmentLength = 0;\n            } else {\n              res = res.slice(0, lastSlashIndex);\n              lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n            }\n            lastSlash = index;\n            dots = 0;\n            continue;\n          } else if (res.length > 0) {\n            res = \"\";\n            lastSegmentLength = 0;\n            lastSlash = index;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          res += res.length > 0 ? \"/..\" : \"..\";\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0) {\n          res += `/${path.slice(lastSlash + 1, index)}`;\n        } else {\n          res = path.slice(lastSlash + 1, index);\n        }\n        lastSegmentLength = index - lastSlash - 1;\n      }\n      lastSlash = index;\n      dots = 0;\n    } else if (char === \".\" && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\nconst isAbsolute = function(p) {\n  return _IS_ABSOLUTE_RE.test(p);\n};\nconst toNamespacedPath = function(p) {\n  return normalizeWindowsPath(p);\n};\nconst extname = function(p) {\n  const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));\n  return match && match[1] || \"\";\n};\nconst relative = function(from, to) {\n  const _from = resolve(from).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  const _to = resolve(to).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  if (_to[0][1] === \":\" && _from[0][1] === \":\" && _from[0] !== _to[0]) {\n    return _to.join(\"/\");\n  }\n  const _fromCopy = [..._from];\n  for (const segment of _fromCopy) {\n    if (_to[0] !== segment) {\n      break;\n    }\n    _from.shift();\n    _to.shift();\n  }\n  return [..._from.map(() => \"..\"), ..._to].join(\"/\");\n};\nconst dirname = function(p) {\n  const segments = normalizeWindowsPath(p).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n  if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {\n    segments[0] += \"/\";\n  }\n  return segments.join(\"/\") || (isAbsolute(p) ? \"/\" : \".\");\n};\nconst format = function(p) {\n  const segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);\n  return normalizeWindowsPath(\n    p.root ? resolve(...segments) : segments.join(\"/\")\n  );\n};\nconst basename = function(p, extension) {\n  const segments = normalizeWindowsPath(p).split(\"/\");\n  let lastSegment = \"\";\n  for (let i = segments.length - 1; i >= 0; i--) {\n    const val = segments[i];\n    if (val) {\n      lastSegment = val;\n      break;\n    }\n  }\n  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;\n};\nconst parse = function(p) {\n  const root = _PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\\\/g, \"/\") || \"\";\n  const base = basename(p);\n  const extension = extname(base);\n  return {\n    root,\n    dir: dirname(p),\n    base,\n    ext: extension,\n    name: base.slice(0, base.length - extension.length)\n  };\n};\nconst matchesGlob = (path, pattern) => {\n  return zeptomatch(pattern, normalize(path));\n};\n\nconst _path = {\n  __proto__: null,\n  basename: basename,\n  dirname: dirname,\n  extname: extname,\n  format: format,\n  isAbsolute: isAbsolute,\n  join: join,\n  matchesGlob: matchesGlob,\n  normalize: normalize,\n  normalizeString: normalizeString,\n  parse: parse,\n  relative: relative,\n  resolve: resolve,\n  sep: sep,\n  toNamespacedPath: toNamespacedPath\n};\n\nexport { _path as _, normalizeString as a, relative as b, basename as c, dirname as d, extname as e, format as f, normalizeWindowsPath as g, isAbsolute as i, join as j, matchesGlob as m, normalize as n, parse as p, resolve as r, sep as s, toNamespacedPath as t };\n","import { tokenizer } from 'acorn';\nimport { builtinModules, createRequire } from 'node:module';\nimport fs, { realpathSync, statSync, promises } from 'node:fs';\nimport { joinURL } from 'ufo';\nimport { normalize, isAbsolute, extname as extname$1 } from 'pathe';\nimport { readPackageJSON } from 'pkg-types';\nimport { fileURLToPath as fileURLToPath$1, URL as URL$1, pathToFileURL as pathToFileURL$1 } from 'node:url';\nimport assert from 'node:assert';\nimport process$1 from 'node:process';\nimport path, { dirname } from 'node:path';\nimport v8 from 'node:v8';\nimport { format, inspect } from 'node:util';\n\nconst BUILTIN_MODULES = new Set(builtinModules);\nfunction normalizeSlash(path) {\n  return path.replace(/\\\\/g, \"/\");\n}\nfunction isObject(value) {\n  return value !== null && typeof value === \"object\";\n}\nfunction matchAll(regex, string, addition) {\n  const matches = [];\n  for (const match of string.matchAll(regex)) {\n    matches.push({\n      ...addition,\n      ...match.groups,\n      code: match[0],\n      start: match.index,\n      end: (match.index || 0) + match[0].length\n    });\n  }\n  return matches;\n}\nfunction clearImports(imports) {\n  return (imports || \"\").replace(/(\\/\\/[^\\n]*\\n|\\/\\*.*\\*\\/)/g, \"\").replace(/\\s+/g, \" \");\n}\nfunction getImportNames(cleanedImports) {\n  const topLevelImports = cleanedImports.replace(/{([^}]*)}/, \"\");\n  const namespacedImport = topLevelImports.match(/\\* as \\s*(\\S*)/)?.[1];\n  const defaultImport = topLevelImports.split(\",\").find((index) => !/[*{}]/.test(index))?.trim() || undefined;\n  return {\n    namespacedImport,\n    defaultImport\n  };\n}\n\n/**\n * @typedef ErrnoExceptionFields\n * @property {number | undefined} [errnode]\n * @property {string | undefined} [code]\n * @property {string | undefined} [path]\n * @property {string | undefined} [syscall]\n * @property {string | undefined} [url]\n *\n * @typedef {Error & ErrnoExceptionFields} ErrnoException\n */\n\n\nconst own$1 = {}.hasOwnProperty;\n\nconst classRegExp = /^([A-Z][a-z\\d]*)+$/;\n// Sorted by a rough estimate on most frequently used entries.\nconst kTypes = new Set([\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]);\n\nconst codes = {};\n\n/**\n * Create a list string in the form like 'A and B' or 'A, B, ..., and Z'.\n * We cannot use Intl.ListFormat because it's not available in\n * --without-intl builds.\n *\n * @param {Array<string>} array\n *   An array of strings.\n * @param {string} [type]\n *   The list type to be inserted before the last element.\n * @returns {string}\n */\nfunction formatList(array, type = 'and') {\n  return array.length < 3\n    ? array.join(` ${type} `)\n    : `${array.slice(0, -1).join(', ')}, ${type} ${array[array.length - 1]}`\n}\n\n/** @type {Map<string, MessageFunction | string>} */\nconst messages = new Map();\nconst nodeInternalPrefix = '__node_internal_';\n/** @type {number} */\nlet userStackTraceLimit;\n\ncodes.ERR_INVALID_ARG_TYPE = createError(\n  'ERR_INVALID_ARG_TYPE',\n  /**\n   * @param {string} name\n   * @param {Array<string> | string} expected\n   * @param {unknown} actual\n   */\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\");\n    if (!Array.isArray(expected)) {\n      expected = [expected];\n    }\n\n    let message = 'The ';\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      message += `${name} `;\n    } else {\n      const type = name.includes('.') ? 'property' : 'argument';\n      message += `\"${name}\" ${type} `;\n    }\n\n    message += 'must be ';\n\n    /** @type {Array<string>} */\n    const types = [];\n    /** @type {Array<string>} */\n    const instances = [];\n    /** @type {Array<string>} */\n    const other = [];\n\n    for (const value of expected) {\n      assert(\n        typeof value === 'string',\n        'All expected entries have to be of type string'\n      );\n\n      if (kTypes.has(value)) {\n        types.push(value.toLowerCase());\n      } else if (classRegExp.exec(value) === null) {\n        assert(\n          value !== 'object',\n          'The value \"object\" should be written as \"Object\"'\n        );\n        other.push(value);\n      } else {\n        instances.push(value);\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object');\n      if (pos !== -1) {\n        types.slice(pos, 1);\n        instances.push('Object');\n      }\n    }\n\n    if (types.length > 0) {\n      message += `${types.length > 1 ? 'one of type' : 'of type'} ${formatList(\n        types,\n        'or'\n      )}`;\n      if (instances.length > 0 || other.length > 0) message += ' or ';\n    }\n\n    if (instances.length > 0) {\n      message += `an instance of ${formatList(instances, 'or')}`;\n      if (other.length > 0) message += ' or ';\n    }\n\n    if (other.length > 0) {\n      if (other.length > 1) {\n        message += `one of ${formatList(other, 'or')}`;\n      } else {\n        if (other[0].toLowerCase() !== other[0]) message += 'an ';\n        message += `${other[0]}`;\n      }\n    }\n\n    message += `. Received ${determineSpecificType(actual)}`;\n\n    return message\n  },\n  TypeError\n);\n\ncodes.ERR_INVALID_MODULE_SPECIFIER = createError(\n  'ERR_INVALID_MODULE_SPECIFIER',\n  /**\n   * @param {string} request\n   * @param {string} reason\n   * @param {string} [base]\n   */\n  (request, reason, base = undefined) => {\n    return `Invalid module \"${request}\" ${reason}${\n      base ? ` imported from ${base}` : ''\n    }`\n  },\n  TypeError\n);\n\ncodes.ERR_INVALID_PACKAGE_CONFIG = createError(\n  'ERR_INVALID_PACKAGE_CONFIG',\n  /**\n   * @param {string} path\n   * @param {string} [base]\n   * @param {string} [message]\n   */\n  (path, base, message) => {\n    return `Invalid package config ${path}${\n      base ? ` while importing ${base}` : ''\n    }${message ? `. ${message}` : ''}`\n  },\n  Error\n);\n\ncodes.ERR_INVALID_PACKAGE_TARGET = createError(\n  'ERR_INVALID_PACKAGE_TARGET',\n  /**\n   * @param {string} packagePath\n   * @param {string} key\n   * @param {unknown} target\n   * @param {boolean} [isImport=false]\n   * @param {string} [base]\n   */\n  (packagePath, key, target, isImport = false, base = undefined) => {\n    const relatedError =\n      typeof target === 'string' &&\n      !isImport &&\n      target.length > 0 &&\n      !target.startsWith('./');\n    if (key === '.') {\n      assert(isImport === false);\n      return (\n        `Invalid \"exports\" main target ${JSON.stringify(target)} defined ` +\n        `in the package config ${packagePath}package.json${\n          base ? ` imported from ${base}` : ''\n        }${relatedError ? '; targets must start with \"./\"' : ''}`\n      )\n    }\n\n    return `Invalid \"${\n      isImport ? 'imports' : 'exports'\n    }\" target ${JSON.stringify(\n      target\n    )} defined for '${key}' in the package config ${packagePath}package.json${\n      base ? ` imported from ${base}` : ''\n    }${relatedError ? '; targets must start with \"./\"' : ''}`\n  },\n  Error\n);\n\ncodes.ERR_MODULE_NOT_FOUND = createError(\n  'ERR_MODULE_NOT_FOUND',\n  /**\n   * @param {string} path\n   * @param {string} base\n   * @param {boolean} [exactUrl]\n   */\n  (path, base, exactUrl = false) => {\n    return `Cannot find ${\n      exactUrl ? 'module' : 'package'\n    } '${path}' imported from ${base}`\n  },\n  Error\n);\n\ncodes.ERR_NETWORK_IMPORT_DISALLOWED = createError(\n  'ERR_NETWORK_IMPORT_DISALLOWED',\n  \"import of '%s' by %s is not supported: %s\",\n  Error\n);\n\ncodes.ERR_PACKAGE_IMPORT_NOT_DEFINED = createError(\n  'ERR_PACKAGE_IMPORT_NOT_DEFINED',\n  /**\n   * @param {string} specifier\n   * @param {string} packagePath\n   * @param {string} base\n   */\n  (specifier, packagePath, base) => {\n    return `Package import specifier \"${specifier}\" is not defined${\n      packagePath ? ` in package ${packagePath}package.json` : ''\n    } imported from ${base}`\n  },\n  TypeError\n);\n\ncodes.ERR_PACKAGE_PATH_NOT_EXPORTED = createError(\n  'ERR_PACKAGE_PATH_NOT_EXPORTED',\n  /**\n   * @param {string} packagePath\n   * @param {string} subpath\n   * @param {string} [base]\n   */\n  (packagePath, subpath, base = undefined) => {\n    if (subpath === '.')\n      return `No \"exports\" main defined in ${packagePath}package.json${\n        base ? ` imported from ${base}` : ''\n      }`\n    return `Package subpath '${subpath}' is not defined by \"exports\" in ${packagePath}package.json${\n      base ? ` imported from ${base}` : ''\n    }`\n  },\n  Error\n);\n\ncodes.ERR_UNSUPPORTED_DIR_IMPORT = createError(\n  'ERR_UNSUPPORTED_DIR_IMPORT',\n  \"Directory import '%s' is not supported \" +\n    'resolving ES modules imported from %s',\n  Error\n);\n\ncodes.ERR_UNSUPPORTED_RESOLVE_REQUEST = createError(\n  'ERR_UNSUPPORTED_RESOLVE_REQUEST',\n  'Failed to resolve module specifier \"%s\" from \"%s\": Invalid relative URL or base scheme is not hierarchical.',\n  TypeError\n);\n\ncodes.ERR_UNKNOWN_FILE_EXTENSION = createError(\n  'ERR_UNKNOWN_FILE_EXTENSION',\n  /**\n   * @param {string} extension\n   * @param {string} path\n   */\n  (extension, path) => {\n    return `Unknown file extension \"${extension}\" for ${path}`\n  },\n  TypeError\n);\n\ncodes.ERR_INVALID_ARG_VALUE = createError(\n  'ERR_INVALID_ARG_VALUE',\n  /**\n   * @param {string} name\n   * @param {unknown} value\n   * @param {string} [reason='is invalid']\n   */\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value);\n\n    if (inspected.length > 128) {\n      inspected = `${inspected.slice(0, 128)}...`;\n    }\n\n    const type = name.includes('.') ? 'property' : 'argument';\n\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n  // Note: extra classes have been shaken out.\n  // , RangeError\n);\n\n/**\n * Utility function for registering the error codes. Only used here. Exported\n * *only* to allow for testing.\n * @param {string} sym\n * @param {MessageFunction | string} value\n * @param {ErrorConstructor} constructor\n * @returns {new (...parameters: Array<any>) => Error}\n */\nfunction createError(sym, value, constructor) {\n  // Special case for SystemError that formats the error message differently\n  // The SystemErrors only have SystemError as their base classes.\n  messages.set(sym, value);\n\n  return makeNodeErrorWithCode(constructor, sym)\n}\n\n/**\n * @param {ErrorConstructor} Base\n * @param {string} key\n * @returns {ErrorConstructor}\n */\nfunction makeNodeErrorWithCode(Base, key) {\n  // @ts-expect-error It’s a Node error.\n  return NodeError\n  /**\n   * @param {Array<unknown>} parameters\n   */\n  function NodeError(...parameters) {\n    const limit = Error.stackTraceLimit;\n    if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0;\n    const error = new Base();\n    // Reset the limit and setting the name property.\n    if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = limit;\n    const message = getMessage(key, parameters, error);\n    Object.defineProperties(error, {\n      // Note: no need to implement `kIsNodeError` symbol, would be hard,\n      // probably.\n      message: {\n        value: message,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      },\n      toString: {\n        /** @this {Error} */\n        value() {\n          return `${this.name} [${key}]: ${this.message}`\n        },\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n\n    captureLargerStackTrace(error);\n    // @ts-expect-error It’s a Node error.\n    error.code = key;\n    return error\n  }\n}\n\n/**\n * @returns {boolean}\n */\nfunction isErrorStackTraceLimitWritable() {\n  // Do no touch Error.stackTraceLimit as V8 would attempt to install\n  // it again during deserialization.\n  try {\n    if (v8.startupSnapshot.isBuildingSnapshot()) {\n      return false\n    }\n  } catch {}\n\n  const desc = Object.getOwnPropertyDescriptor(Error, 'stackTraceLimit');\n  if (desc === undefined) {\n    return Object.isExtensible(Error)\n  }\n\n  return own$1.call(desc, 'writable') && desc.writable !== undefined\n    ? desc.writable\n    : desc.set !== undefined\n}\n\n/**\n * This function removes unnecessary frames from Node.js core errors.\n * @template {(...parameters: unknown[]) => unknown} T\n * @param {T} wrappedFunction\n * @returns {T}\n */\nfunction hideStackFrames(wrappedFunction) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + wrappedFunction.name;\n  Object.defineProperty(wrappedFunction, 'name', {value: hidden});\n  return wrappedFunction\n}\n\nconst captureLargerStackTrace = hideStackFrames(\n  /**\n   * @param {Error} error\n   * @returns {Error}\n   */\n  // @ts-expect-error: fine\n  function (error) {\n    const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable();\n    if (stackTraceLimitIsWritable) {\n      userStackTraceLimit = Error.stackTraceLimit;\n      Error.stackTraceLimit = Number.POSITIVE_INFINITY;\n    }\n\n    Error.captureStackTrace(error);\n\n    // Reset the limit\n    if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit;\n\n    return error\n  }\n);\n\n/**\n * @param {string} key\n * @param {Array<unknown>} parameters\n * @param {Error} self\n * @returns {string}\n */\nfunction getMessage(key, parameters, self) {\n  const message = messages.get(key);\n  assert(message !== undefined, 'expected `message` to be found');\n\n  if (typeof message === 'function') {\n    assert(\n      message.length <= parameters.length, // Default options do not count.\n      `Code: ${key}; The provided arguments length (${parameters.length}) does not ` +\n        `match the required ones (${message.length}).`\n    );\n    return Reflect.apply(message, self, parameters)\n  }\n\n  const regex = /%[dfijoOs]/g;\n  let expectedLength = 0;\n  while (regex.exec(message) !== null) expectedLength++;\n  assert(\n    expectedLength === parameters.length,\n    `Code: ${key}; The provided arguments length (${parameters.length}) does not ` +\n      `match the required ones (${expectedLength}).`\n  );\n  if (parameters.length === 0) return message\n\n  parameters.unshift(message);\n  return Reflect.apply(format, null, parameters)\n}\n\n/**\n * Determine the specific type of a value for type-mismatch errors.\n * @param {unknown} value\n * @returns {string}\n */\nfunction determineSpecificType(value) {\n  if (value === null || value === undefined) {\n    return String(value)\n  }\n\n  if (typeof value === 'function' && value.name) {\n    return `function ${value.name}`\n  }\n\n  if (typeof value === 'object') {\n    if (value.constructor && value.constructor.name) {\n      return `an instance of ${value.constructor.name}`\n    }\n\n    return `${inspect(value, {depth: -1})}`\n  }\n\n  let inspected = inspect(value, {colors: false});\n\n  if (inspected.length > 28) {\n    inspected = `${inspected.slice(0, 25)}...`;\n  }\n\n  return `type ${typeof value} (${inspected})`\n}\n\n// Manually “tree shaken” from:\n// <https://github.com/nodejs/node/blob/7c3dce0/lib/internal/modules/package_json_reader.js>\n// Last checked on: Apr 29, 2023.\n// Removed the native dependency.\n// Also: no need to cache, we do that in resolve already.\n\n\nconst hasOwnProperty$1 = {}.hasOwnProperty;\n\nconst {ERR_INVALID_PACKAGE_CONFIG: ERR_INVALID_PACKAGE_CONFIG$1} = codes;\n\n/** @type {Map<string, PackageConfig>} */\nconst cache = new Map();\n\n/**\n * @param {string} jsonPath\n * @param {{specifier: URL | string, base?: URL}} options\n * @returns {PackageConfig}\n */\nfunction read(jsonPath, {base, specifier}) {\n  const existing = cache.get(jsonPath);\n\n  if (existing) {\n    return existing\n  }\n\n  /** @type {string | undefined} */\n  let string;\n\n  try {\n    string = fs.readFileSync(path.toNamespacedPath(jsonPath), 'utf8');\n  } catch (error) {\n    const exception = /** @type {ErrnoException} */ (error);\n\n    if (exception.code !== 'ENOENT') {\n      throw exception\n    }\n  }\n\n  /** @type {PackageConfig} */\n  const result = {\n    exists: false,\n    pjsonPath: jsonPath,\n    main: undefined,\n    name: undefined,\n    type: 'none', // Ignore unknown types for forwards compatibility\n    exports: undefined,\n    imports: undefined\n  };\n\n  if (string !== undefined) {\n    /** @type {Record<string, unknown>} */\n    let parsed;\n\n    try {\n      parsed = JSON.parse(string);\n    } catch (error_) {\n      const cause = /** @type {ErrnoException} */ (error_);\n      const error = new ERR_INVALID_PACKAGE_CONFIG$1(\n        jsonPath,\n        (base ? `\"${specifier}\" from ` : '') + fileURLToPath$1(base || specifier),\n        cause.message\n      );\n      error.cause = cause;\n      throw error\n    }\n\n    result.exists = true;\n\n    if (\n      hasOwnProperty$1.call(parsed, 'name') &&\n      typeof parsed.name === 'string'\n    ) {\n      result.name = parsed.name;\n    }\n\n    if (\n      hasOwnProperty$1.call(parsed, 'main') &&\n      typeof parsed.main === 'string'\n    ) {\n      result.main = parsed.main;\n    }\n\n    if (hasOwnProperty$1.call(parsed, 'exports')) {\n      // @ts-expect-error: assume valid.\n      result.exports = parsed.exports;\n    }\n\n    if (hasOwnProperty$1.call(parsed, 'imports')) {\n      // @ts-expect-error: assume valid.\n      result.imports = parsed.imports;\n    }\n\n    // Ignore unknown types for forwards compatibility\n    if (\n      hasOwnProperty$1.call(parsed, 'type') &&\n      (parsed.type === 'commonjs' || parsed.type === 'module')\n    ) {\n      result.type = parsed.type;\n    }\n  }\n\n  cache.set(jsonPath, result);\n\n  return result\n}\n\n/**\n * @param {URL | string} resolved\n * @returns {PackageConfig}\n */\nfunction getPackageScopeConfig(resolved) {\n  // Note: in Node, this is now a native module.\n  let packageJSONUrl = new URL('package.json', resolved);\n\n  while (true) {\n    const packageJSONPath = packageJSONUrl.pathname;\n    if (packageJSONPath.endsWith('node_modules/package.json')) {\n      break\n    }\n\n    const packageConfig = read(fileURLToPath$1(packageJSONUrl), {\n      specifier: resolved\n    });\n\n    if (packageConfig.exists) {\n      return packageConfig\n    }\n\n    const lastPackageJSONUrl = packageJSONUrl;\n    packageJSONUrl = new URL('../package.json', packageJSONUrl);\n\n    // Terminates at root where ../package.json equals ../../package.json\n    // (can't just check \"/package.json\" for Windows support).\n    if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {\n      break\n    }\n  }\n\n  const packageJSONPath = fileURLToPath$1(packageJSONUrl);\n  // ^^ Note: in Node, this is now a native module.\n\n  return {\n    pjsonPath: packageJSONPath,\n    exists: false,\n    type: 'none'\n  }\n}\n\n/**\n * Returns the package type for a given URL.\n * @param {URL} url - The URL to get the package type for.\n * @returns {PackageType}\n */\nfunction getPackageType(url) {\n  // To do @anonrig: Write a C++ function that returns only \"type\".\n  return getPackageScopeConfig(url).type\n}\n\n// Manually “tree shaken” from:\n// <https://github.com/nodejs/node/blob/7c3dce0/lib/internal/modules/esm/get_format.js>\n// Last checked on: Apr 29, 2023.\n\n\nconst {ERR_UNKNOWN_FILE_EXTENSION} = codes;\n\nconst hasOwnProperty = {}.hasOwnProperty;\n\n/** @type {Record<string, string>} */\nconst extensionFormatMap = {\n  // @ts-expect-error: hush.\n  __proto__: null,\n  '.cjs': 'commonjs',\n  '.js': 'module',\n  '.json': 'json',\n  '.mjs': 'module'\n};\n\n/**\n * @param {string | null} mime\n * @returns {string | null}\n */\nfunction mimeToFormat(mime) {\n  if (\n    mime &&\n    /\\s*(text|application)\\/javascript\\s*(;\\s*charset=utf-?8\\s*)?/i.test(mime)\n  )\n    return 'module'\n  if (mime === 'application/json') return 'json'\n  return null\n}\n\n/**\n * @callback ProtocolHandler\n * @param {URL} parsed\n * @param {{parentURL: string, source?: Buffer}} context\n * @param {boolean} ignoreErrors\n * @returns {string | null | void}\n */\n\n/**\n * @type {Record<string, ProtocolHandler>}\n */\nconst protocolHandlers = {\n  // @ts-expect-error: hush.\n  __proto__: null,\n  'data:': getDataProtocolModuleFormat,\n  'file:': getFileProtocolModuleFormat,\n  'http:': getHttpProtocolModuleFormat,\n  'https:': getHttpProtocolModuleFormat,\n  'node:'() {\n    return 'builtin'\n  }\n};\n\n/**\n * @param {URL} parsed\n */\nfunction getDataProtocolModuleFormat(parsed) {\n  const {1: mime} = /^([^/]+\\/[^;,]+)[^,]*?(;base64)?,/.exec(\n    parsed.pathname\n  ) || [null, null, null];\n  return mimeToFormat(mime)\n}\n\n/**\n * Returns the file extension from a URL.\n *\n * Should give similar result to\n * `require('node:path').extname(require('node:url').fileURLToPath(url))`\n * when used with a `file:` URL.\n *\n * @param {URL} url\n * @returns {string}\n */\nfunction extname(url) {\n  const pathname = url.pathname;\n  let index = pathname.length;\n\n  while (index--) {\n    const code = pathname.codePointAt(index);\n\n    if (code === 47 /* `/` */) {\n      return ''\n    }\n\n    if (code === 46 /* `.` */) {\n      return pathname.codePointAt(index - 1) === 47 /* `/` */\n        ? ''\n        : pathname.slice(index)\n    }\n  }\n\n  return ''\n}\n\n/**\n * @type {ProtocolHandler}\n */\nfunction getFileProtocolModuleFormat(url, _context, ignoreErrors) {\n  const value = extname(url);\n\n  if (value === '.js') {\n    const packageType = getPackageType(url);\n\n    if (packageType !== 'none') {\n      return packageType\n    }\n\n    return 'commonjs'\n  }\n\n  if (value === '') {\n    const packageType = getPackageType(url);\n\n    // Legacy behavior\n    if (packageType === 'none' || packageType === 'commonjs') {\n      return 'commonjs'\n    }\n\n    // Note: we don’t implement WASM, so we don’t need\n    // `getFormatOfExtensionlessFile` from `formats`.\n    return 'module'\n  }\n\n  const format = extensionFormatMap[value];\n  if (format) return format\n\n  // Explicit undefined return indicates load hook should rerun format check\n  if (ignoreErrors) {\n    return undefined\n  }\n\n  const filepath = fileURLToPath$1(url);\n  throw new ERR_UNKNOWN_FILE_EXTENSION(value, filepath)\n}\n\nfunction getHttpProtocolModuleFormat() {\n  // To do: HTTPS imports.\n}\n\n/**\n * @param {URL} url\n * @param {{parentURL: string}} context\n * @returns {string | null}\n */\nfunction defaultGetFormatWithoutErrors(url, context) {\n  const protocol = url.protocol;\n\n  if (!hasOwnProperty.call(protocolHandlers, protocol)) {\n    return null\n  }\n\n  return protocolHandlers[protocol](url, context, true) || null\n}\n\n// Manually “tree shaken” from:\n// <https://github.com/nodejs/node/blob/81a9a97/lib/internal/modules/esm/resolve.js>\n// Last checked on: Apr 29, 2023.\n\n\nconst RegExpPrototypeSymbolReplace = RegExp.prototype[Symbol.replace];\n\nconst {\n  ERR_NETWORK_IMPORT_DISALLOWED,\n  ERR_INVALID_MODULE_SPECIFIER,\n  ERR_INVALID_PACKAGE_CONFIG,\n  ERR_INVALID_PACKAGE_TARGET,\n  ERR_MODULE_NOT_FOUND,\n  ERR_PACKAGE_IMPORT_NOT_DEFINED,\n  ERR_PACKAGE_PATH_NOT_EXPORTED,\n  ERR_UNSUPPORTED_DIR_IMPORT,\n  ERR_UNSUPPORTED_RESOLVE_REQUEST\n} = codes;\n\nconst own = {}.hasOwnProperty;\n\nconst invalidSegmentRegEx =\n  /(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))?(\\\\|\\/|$)/i;\nconst deprecatedInvalidSegmentRegEx =\n  /(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i;\nconst invalidPackageNameRegEx = /^\\.|%|\\\\/;\nconst patternRegEx = /\\*/g;\nconst encodedSeparatorRegEx = /%2f|%5c/i;\n/** @type {Set<string>} */\nconst emittedPackageWarnings = new Set();\n\nconst doubleSlashRegEx = /[/\\\\]{2}/;\n\n/**\n *\n * @param {string} target\n * @param {string} request\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} base\n * @param {boolean} isTarget\n */\nfunction emitInvalidSegmentDeprecation(\n  target,\n  request,\n  match,\n  packageJsonUrl,\n  internal,\n  base,\n  isTarget\n) {\n  // @ts-expect-error: apparently it does exist, TS.\n  if (process$1.noDeprecation) {\n    return\n  }\n\n  const pjsonPath = fileURLToPath$1(packageJsonUrl);\n  const double = doubleSlashRegEx.exec(isTarget ? target : request) !== null;\n  process$1.emitWarning(\n    `Use of deprecated ${\n      double ? 'double slash' : 'leading or trailing slash matching'\n    } resolving \"${target}\" for module ` +\n      `request \"${request}\" ${\n        request === match ? '' : `matched to \"${match}\" `\n      }in the \"${\n        internal ? 'imports' : 'exports'\n      }\" field module resolution of the package at ${pjsonPath}${\n        base ? ` imported from ${fileURLToPath$1(base)}` : ''\n      }.`,\n    'DeprecationWarning',\n    'DEP0166'\n  );\n}\n\n/**\n * @param {URL} url\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @param {string} [main]\n * @returns {void}\n */\nfunction emitLegacyIndexDeprecation(url, packageJsonUrl, base, main) {\n  // @ts-expect-error: apparently it does exist, TS.\n  if (process$1.noDeprecation) {\n    return\n  }\n\n  const format = defaultGetFormatWithoutErrors(url, {parentURL: base.href});\n  if (format !== 'module') return\n  const urlPath = fileURLToPath$1(url.href);\n  const packagePath = fileURLToPath$1(new URL$1('.', packageJsonUrl));\n  const basePath = fileURLToPath$1(base);\n  if (!main) {\n    process$1.emitWarning(\n      `No \"main\" or \"exports\" field defined in the package.json for ${packagePath} resolving the main entry point \"${urlPath.slice(\n        packagePath.length\n      )}\", imported from ${basePath}.\\nDefault \"index\" lookups for the main are deprecated for ES modules.`,\n      'DeprecationWarning',\n      'DEP0151'\n    );\n  } else if (path.resolve(packagePath, main) !== urlPath) {\n    process$1.emitWarning(\n      `Package ${packagePath} has a \"main\" field set to \"${main}\", ` +\n        `excluding the full filename and extension to the resolved file at \"${urlPath.slice(\n          packagePath.length\n        )}\", imported from ${basePath}.\\n Automatic extension resolution of the \"main\" field is ` +\n        'deprecated for ES modules.',\n      'DeprecationWarning',\n      'DEP0151'\n    );\n  }\n}\n\n/**\n * @param {string} path\n * @returns {Stats | undefined}\n */\nfunction tryStatSync(path) {\n  // Note: from Node 15 onwards we can use `throwIfNoEntry: false` instead.\n  try {\n    return statSync(path)\n  } catch {\n    // Note: in Node code this returns `new Stats`,\n    // but in Node 22 that’s marked as a deprecated internal API.\n    // Which, well, we kinda are, but still to prevent that warning,\n    // just yield `undefined`.\n  }\n}\n\n/**\n * Legacy CommonJS main resolution:\n * 1. let M = pkg_url + (json main field)\n * 2. TRY(M, M.js, M.json, M.node)\n * 3. TRY(M/index.js, M/index.json, M/index.node)\n * 4. TRY(pkg_url/index.js, pkg_url/index.json, pkg_url/index.node)\n * 5. NOT_FOUND\n *\n * @param {URL} url\n * @returns {boolean}\n */\nfunction fileExists(url) {\n  const stats = statSync(url, {throwIfNoEntry: false});\n  const isFile = stats ? stats.isFile() : undefined;\n  return isFile === null || isFile === undefined ? false : isFile\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {PackageConfig} packageConfig\n * @param {URL} base\n * @returns {URL}\n */\nfunction legacyMainResolve(packageJsonUrl, packageConfig, base) {\n  /** @type {URL | undefined} */\n  let guess;\n  if (packageConfig.main !== undefined) {\n    guess = new URL$1(packageConfig.main, packageJsonUrl);\n    // Note: fs check redundances will be handled by Descriptor cache here.\n    if (fileExists(guess)) return guess\n\n    const tries = [\n      `./${packageConfig.main}.js`,\n      `./${packageConfig.main}.json`,\n      `./${packageConfig.main}.node`,\n      `./${packageConfig.main}/index.js`,\n      `./${packageConfig.main}/index.json`,\n      `./${packageConfig.main}/index.node`\n    ];\n    let i = -1;\n\n    while (++i < tries.length) {\n      guess = new URL$1(tries[i], packageJsonUrl);\n      if (fileExists(guess)) break\n      guess = undefined;\n    }\n\n    if (guess) {\n      emitLegacyIndexDeprecation(\n        guess,\n        packageJsonUrl,\n        base,\n        packageConfig.main\n      );\n      return guess\n    }\n    // Fallthrough.\n  }\n\n  const tries = ['./index.js', './index.json', './index.node'];\n  let i = -1;\n\n  while (++i < tries.length) {\n    guess = new URL$1(tries[i], packageJsonUrl);\n    if (fileExists(guess)) break\n    guess = undefined;\n  }\n\n  if (guess) {\n    emitLegacyIndexDeprecation(guess, packageJsonUrl, base, packageConfig.main);\n    return guess\n  }\n\n  // Not found.\n  throw new ERR_MODULE_NOT_FOUND(\n    fileURLToPath$1(new URL$1('.', packageJsonUrl)),\n    fileURLToPath$1(base)\n  )\n}\n\n/**\n * @param {URL} resolved\n * @param {URL} base\n * @param {boolean} [preserveSymlinks]\n * @returns {URL}\n */\nfunction finalizeResolution(resolved, base, preserveSymlinks) {\n  if (encodedSeparatorRegEx.exec(resolved.pathname) !== null) {\n    throw new ERR_INVALID_MODULE_SPECIFIER(\n      resolved.pathname,\n      'must not include encoded \"/\" or \"\\\\\" characters',\n      fileURLToPath$1(base)\n    )\n  }\n\n  /** @type {string} */\n  let filePath;\n\n  try {\n    filePath = fileURLToPath$1(resolved);\n  } catch (error) {\n    const cause = /** @type {ErrnoException} */ (error);\n    Object.defineProperty(cause, 'input', {value: String(resolved)});\n    Object.defineProperty(cause, 'module', {value: String(base)});\n    throw cause\n  }\n\n  const stats = tryStatSync(\n    filePath.endsWith('/') ? filePath.slice(-1) : filePath\n  );\n\n  if (stats && stats.isDirectory()) {\n    const error = new ERR_UNSUPPORTED_DIR_IMPORT(filePath, fileURLToPath$1(base));\n    // @ts-expect-error Add this for `import.meta.resolve`.\n    error.url = String(resolved);\n    throw error\n  }\n\n  if (!stats || !stats.isFile()) {\n    const error = new ERR_MODULE_NOT_FOUND(\n      filePath || resolved.pathname,\n      base && fileURLToPath$1(base),\n      true\n    );\n    // @ts-expect-error Add this for `import.meta.resolve`.\n    error.url = String(resolved);\n    throw error\n  }\n\n  {\n    const real = realpathSync(filePath);\n    const {search, hash} = resolved;\n    resolved = pathToFileURL$1(real + (filePath.endsWith(path.sep) ? '/' : ''));\n    resolved.search = search;\n    resolved.hash = hash;\n  }\n\n  return resolved\n}\n\n/**\n * @param {string} specifier\n * @param {URL | undefined} packageJsonUrl\n * @param {URL} base\n * @returns {Error}\n */\nfunction importNotDefined(specifier, packageJsonUrl, base) {\n  return new ERR_PACKAGE_IMPORT_NOT_DEFINED(\n    specifier,\n    packageJsonUrl && fileURLToPath$1(new URL$1('.', packageJsonUrl)),\n    fileURLToPath$1(base)\n  )\n}\n\n/**\n * @param {string} subpath\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @returns {Error}\n */\nfunction exportsNotFound(subpath, packageJsonUrl, base) {\n  return new ERR_PACKAGE_PATH_NOT_EXPORTED(\n    fileURLToPath$1(new URL$1('.', packageJsonUrl)),\n    subpath,\n    base && fileURLToPath$1(base)\n  )\n}\n\n/**\n * @param {string} request\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} [base]\n * @returns {never}\n */\nfunction throwInvalidSubpath(request, match, packageJsonUrl, internal, base) {\n  const reason = `request is not a valid match in pattern \"${match}\" for the \"${\n    internal ? 'imports' : 'exports'\n  }\" resolution of ${fileURLToPath$1(packageJsonUrl)}`;\n  throw new ERR_INVALID_MODULE_SPECIFIER(\n    request,\n    reason,\n    base && fileURLToPath$1(base)\n  )\n}\n\n/**\n * @param {string} subpath\n * @param {unknown} target\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} [base]\n * @returns {Error}\n */\nfunction invalidPackageTarget(subpath, target, packageJsonUrl, internal, base) {\n  target =\n    typeof target === 'object' && target !== null\n      ? JSON.stringify(target, null, '')\n      : `${target}`;\n\n  return new ERR_INVALID_PACKAGE_TARGET(\n    fileURLToPath$1(new URL$1('.', packageJsonUrl)),\n    subpath,\n    target,\n    internal,\n    base && fileURLToPath$1(base)\n  )\n}\n\n/**\n * @param {string} target\n * @param {string} subpath\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @param {boolean} pattern\n * @param {boolean} internal\n * @param {boolean} isPathMap\n * @param {Set<string> | undefined} conditions\n * @returns {URL}\n */\nfunction resolvePackageTargetString(\n  target,\n  subpath,\n  match,\n  packageJsonUrl,\n  base,\n  pattern,\n  internal,\n  isPathMap,\n  conditions\n) {\n  if (subpath !== '' && !pattern && target[target.length - 1] !== '/')\n    throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n\n  if (!target.startsWith('./')) {\n    if (internal && !target.startsWith('../') && !target.startsWith('/')) {\n      let isURL = false;\n\n      try {\n        new URL$1(target);\n        isURL = true;\n      } catch {\n        // Continue regardless of error.\n      }\n\n      if (!isURL) {\n        const exportTarget = pattern\n          ? RegExpPrototypeSymbolReplace.call(\n              patternRegEx,\n              target,\n              () => subpath\n            )\n          : target + subpath;\n\n        return packageResolve(exportTarget, packageJsonUrl, conditions)\n      }\n    }\n\n    throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n  }\n\n  if (invalidSegmentRegEx.exec(target.slice(2)) !== null) {\n    if (deprecatedInvalidSegmentRegEx.exec(target.slice(2)) === null) {\n      if (!isPathMap) {\n        const request = pattern\n          ? match.replace('*', () => subpath)\n          : match + subpath;\n        const resolvedTarget = pattern\n          ? RegExpPrototypeSymbolReplace.call(\n              patternRegEx,\n              target,\n              () => subpath\n            )\n          : target;\n        emitInvalidSegmentDeprecation(\n          resolvedTarget,\n          request,\n          match,\n          packageJsonUrl,\n          internal,\n          base,\n          true\n        );\n      }\n    } else {\n      throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n    }\n  }\n\n  const resolved = new URL$1(target, packageJsonUrl);\n  const resolvedPath = resolved.pathname;\n  const packagePath = new URL$1('.', packageJsonUrl).pathname;\n\n  if (!resolvedPath.startsWith(packagePath))\n    throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n\n  if (subpath === '') return resolved\n\n  if (invalidSegmentRegEx.exec(subpath) !== null) {\n    const request = pattern\n      ? match.replace('*', () => subpath)\n      : match + subpath;\n    if (deprecatedInvalidSegmentRegEx.exec(subpath) === null) {\n      if (!isPathMap) {\n        const resolvedTarget = pattern\n          ? RegExpPrototypeSymbolReplace.call(\n              patternRegEx,\n              target,\n              () => subpath\n            )\n          : target;\n        emitInvalidSegmentDeprecation(\n          resolvedTarget,\n          request,\n          match,\n          packageJsonUrl,\n          internal,\n          base,\n          false\n        );\n      }\n    } else {\n      throwInvalidSubpath(request, match, packageJsonUrl, internal, base);\n    }\n  }\n\n  if (pattern) {\n    return new URL$1(\n      RegExpPrototypeSymbolReplace.call(\n        patternRegEx,\n        resolved.href,\n        () => subpath\n      )\n    )\n  }\n\n  return new URL$1(subpath, resolved)\n}\n\n/**\n * @param {string} key\n * @returns {boolean}\n */\nfunction isArrayIndex(key) {\n  const keyNumber = Number(key);\n  if (`${keyNumber}` !== key) return false\n  return keyNumber >= 0 && keyNumber < 0xff_ff_ff_ff\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {unknown} target\n * @param {string} subpath\n * @param {string} packageSubpath\n * @param {URL} base\n * @param {boolean} pattern\n * @param {boolean} internal\n * @param {boolean} isPathMap\n * @param {Set<string> | undefined} conditions\n * @returns {URL | null}\n */\nfunction resolvePackageTarget(\n  packageJsonUrl,\n  target,\n  subpath,\n  packageSubpath,\n  base,\n  pattern,\n  internal,\n  isPathMap,\n  conditions\n) {\n  if (typeof target === 'string') {\n    return resolvePackageTargetString(\n      target,\n      subpath,\n      packageSubpath,\n      packageJsonUrl,\n      base,\n      pattern,\n      internal,\n      isPathMap,\n      conditions\n    )\n  }\n\n  if (Array.isArray(target)) {\n    /** @type {Array<unknown>} */\n    const targetList = target;\n    if (targetList.length === 0) return null\n\n    /** @type {ErrnoException | null | undefined} */\n    let lastException;\n    let i = -1;\n\n    while (++i < targetList.length) {\n      const targetItem = targetList[i];\n      /** @type {URL | null} */\n      let resolveResult;\n      try {\n        resolveResult = resolvePackageTarget(\n          packageJsonUrl,\n          targetItem,\n          subpath,\n          packageSubpath,\n          base,\n          pattern,\n          internal,\n          isPathMap,\n          conditions\n        );\n      } catch (error) {\n        const exception = /** @type {ErrnoException} */ (error);\n        lastException = exception;\n        if (exception.code === 'ERR_INVALID_PACKAGE_TARGET') continue\n        throw error\n      }\n\n      if (resolveResult === undefined) continue\n\n      if (resolveResult === null) {\n        lastException = null;\n        continue\n      }\n\n      return resolveResult\n    }\n\n    if (lastException === undefined || lastException === null) {\n      return null\n    }\n\n    throw lastException\n  }\n\n  if (typeof target === 'object' && target !== null) {\n    const keys = Object.getOwnPropertyNames(target);\n    let i = -1;\n\n    while (++i < keys.length) {\n      const key = keys[i];\n      if (isArrayIndex(key)) {\n        throw new ERR_INVALID_PACKAGE_CONFIG(\n          fileURLToPath$1(packageJsonUrl),\n          base,\n          '\"exports\" cannot contain numeric property keys.'\n        )\n      }\n    }\n\n    i = -1;\n\n    while (++i < keys.length) {\n      const key = keys[i];\n      if (key === 'default' || (conditions && conditions.has(key))) {\n        // @ts-expect-error: indexable.\n        const conditionalTarget = /** @type {unknown} */ (target[key]);\n        const resolveResult = resolvePackageTarget(\n          packageJsonUrl,\n          conditionalTarget,\n          subpath,\n          packageSubpath,\n          base,\n          pattern,\n          internal,\n          isPathMap,\n          conditions\n        );\n        if (resolveResult === undefined) continue\n        return resolveResult\n      }\n    }\n\n    return null\n  }\n\n  if (target === null) {\n    return null\n  }\n\n  throw invalidPackageTarget(\n    packageSubpath,\n    target,\n    packageJsonUrl,\n    internal,\n    base\n  )\n}\n\n/**\n * @param {unknown} exports\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @returns {boolean}\n */\nfunction isConditionalExportsMainSugar(exports, packageJsonUrl, base) {\n  if (typeof exports === 'string' || Array.isArray(exports)) return true\n  if (typeof exports !== 'object' || exports === null) return false\n\n  const keys = Object.getOwnPropertyNames(exports);\n  let isConditionalSugar = false;\n  let i = 0;\n  let keyIndex = -1;\n  while (++keyIndex < keys.length) {\n    const key = keys[keyIndex];\n    const currentIsConditionalSugar = key === '' || key[0] !== '.';\n    if (i++ === 0) {\n      isConditionalSugar = currentIsConditionalSugar;\n    } else if (isConditionalSugar !== currentIsConditionalSugar) {\n      throw new ERR_INVALID_PACKAGE_CONFIG(\n        fileURLToPath$1(packageJsonUrl),\n        base,\n        '\"exports\" cannot contain some keys starting with \\'.\\' and some not.' +\n          ' The exports object must either be an object of package subpath keys' +\n          ' or an object of main entry condition name keys only.'\n      )\n    }\n  }\n\n  return isConditionalSugar\n}\n\n/**\n * @param {string} match\n * @param {URL} pjsonUrl\n * @param {URL} base\n */\nfunction emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) {\n  // @ts-expect-error: apparently it does exist, TS.\n  if (process$1.noDeprecation) {\n    return\n  }\n\n  const pjsonPath = fileURLToPath$1(pjsonUrl);\n  if (emittedPackageWarnings.has(pjsonPath + '|' + match)) return\n  emittedPackageWarnings.add(pjsonPath + '|' + match);\n  process$1.emitWarning(\n    `Use of deprecated trailing slash pattern mapping \"${match}\" in the ` +\n      `\"exports\" field module resolution of the package at ${pjsonPath}${\n        base ? ` imported from ${fileURLToPath$1(base)}` : ''\n      }. Mapping specifiers ending in \"/\" is no longer supported.`,\n    'DeprecationWarning',\n    'DEP0155'\n  );\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {string} packageSubpath\n * @param {Record<string, unknown>} packageConfig\n * @param {URL} base\n * @param {Set<string> | undefined} conditions\n * @returns {URL}\n */\nfunction packageExportsResolve(\n  packageJsonUrl,\n  packageSubpath,\n  packageConfig,\n  base,\n  conditions\n) {\n  let exports = packageConfig.exports;\n\n  if (isConditionalExportsMainSugar(exports, packageJsonUrl, base)) {\n    exports = {'.': exports};\n  }\n\n  if (\n    own.call(exports, packageSubpath) &&\n    !packageSubpath.includes('*') &&\n    !packageSubpath.endsWith('/')\n  ) {\n    // @ts-expect-error: indexable.\n    const target = exports[packageSubpath];\n    const resolveResult = resolvePackageTarget(\n      packageJsonUrl,\n      target,\n      '',\n      packageSubpath,\n      base,\n      false,\n      false,\n      false,\n      conditions\n    );\n    if (resolveResult === null || resolveResult === undefined) {\n      throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n    }\n\n    return resolveResult\n  }\n\n  let bestMatch = '';\n  let bestMatchSubpath = '';\n  const keys = Object.getOwnPropertyNames(exports);\n  let i = -1;\n\n  while (++i < keys.length) {\n    const key = keys[i];\n    const patternIndex = key.indexOf('*');\n\n    if (\n      patternIndex !== -1 &&\n      packageSubpath.startsWith(key.slice(0, patternIndex))\n    ) {\n      // When this reaches EOL, this can throw at the top of the whole function:\n      //\n      // if (StringPrototypeEndsWith(packageSubpath, '/'))\n      //   throwInvalidSubpath(packageSubpath)\n      //\n      // To match \"imports\" and the spec.\n      if (packageSubpath.endsWith('/')) {\n        emitTrailingSlashPatternDeprecation(\n          packageSubpath,\n          packageJsonUrl,\n          base\n        );\n      }\n\n      const patternTrailer = key.slice(patternIndex + 1);\n\n      if (\n        packageSubpath.length >= key.length &&\n        packageSubpath.endsWith(patternTrailer) &&\n        patternKeyCompare(bestMatch, key) === 1 &&\n        key.lastIndexOf('*') === patternIndex\n      ) {\n        bestMatch = key;\n        bestMatchSubpath = packageSubpath.slice(\n          patternIndex,\n          packageSubpath.length - patternTrailer.length\n        );\n      }\n    }\n  }\n\n  if (bestMatch) {\n    // @ts-expect-error: indexable.\n    const target = /** @type {unknown} */ (exports[bestMatch]);\n    const resolveResult = resolvePackageTarget(\n      packageJsonUrl,\n      target,\n      bestMatchSubpath,\n      bestMatch,\n      base,\n      true,\n      false,\n      packageSubpath.endsWith('/'),\n      conditions\n    );\n\n    if (resolveResult === null || resolveResult === undefined) {\n      throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n    }\n\n    return resolveResult\n  }\n\n  throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n}\n\n/**\n * @param {string} a\n * @param {string} b\n */\nfunction patternKeyCompare(a, b) {\n  const aPatternIndex = a.indexOf('*');\n  const bPatternIndex = b.indexOf('*');\n  const baseLengthA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;\n  const baseLengthB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;\n  if (baseLengthA > baseLengthB) return -1\n  if (baseLengthB > baseLengthA) return 1\n  if (aPatternIndex === -1) return 1\n  if (bPatternIndex === -1) return -1\n  if (a.length > b.length) return -1\n  if (b.length > a.length) return 1\n  return 0\n}\n\n/**\n * @param {string} name\n * @param {URL} base\n * @param {Set<string>} [conditions]\n * @returns {URL}\n */\nfunction packageImportsResolve(name, base, conditions) {\n  if (name === '#' || name.startsWith('#/') || name.endsWith('/')) {\n    const reason = 'is not a valid internal imports specifier name';\n    throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath$1(base))\n  }\n\n  /** @type {URL | undefined} */\n  let packageJsonUrl;\n\n  const packageConfig = getPackageScopeConfig(base);\n\n  if (packageConfig.exists) {\n    packageJsonUrl = pathToFileURL$1(packageConfig.pjsonPath);\n    const imports = packageConfig.imports;\n    if (imports) {\n      if (own.call(imports, name) && !name.includes('*')) {\n        const resolveResult = resolvePackageTarget(\n          packageJsonUrl,\n          imports[name],\n          '',\n          name,\n          base,\n          false,\n          true,\n          false,\n          conditions\n        );\n        if (resolveResult !== null && resolveResult !== undefined) {\n          return resolveResult\n        }\n      } else {\n        let bestMatch = '';\n        let bestMatchSubpath = '';\n        const keys = Object.getOwnPropertyNames(imports);\n        let i = -1;\n\n        while (++i < keys.length) {\n          const key = keys[i];\n          const patternIndex = key.indexOf('*');\n\n          if (patternIndex !== -1 && name.startsWith(key.slice(0, -1))) {\n            const patternTrailer = key.slice(patternIndex + 1);\n            if (\n              name.length >= key.length &&\n              name.endsWith(patternTrailer) &&\n              patternKeyCompare(bestMatch, key) === 1 &&\n              key.lastIndexOf('*') === patternIndex\n            ) {\n              bestMatch = key;\n              bestMatchSubpath = name.slice(\n                patternIndex,\n                name.length - patternTrailer.length\n              );\n            }\n          }\n        }\n\n        if (bestMatch) {\n          const target = imports[bestMatch];\n          const resolveResult = resolvePackageTarget(\n            packageJsonUrl,\n            target,\n            bestMatchSubpath,\n            bestMatch,\n            base,\n            true,\n            true,\n            false,\n            conditions\n          );\n\n          if (resolveResult !== null && resolveResult !== undefined) {\n            return resolveResult\n          }\n        }\n      }\n    }\n  }\n\n  throw importNotDefined(name, packageJsonUrl, base)\n}\n\n/**\n * @param {string} specifier\n * @param {URL} base\n */\nfunction parsePackageName(specifier, base) {\n  let separatorIndex = specifier.indexOf('/');\n  let validPackageName = true;\n  let isScoped = false;\n  if (specifier[0] === '@') {\n    isScoped = true;\n    if (separatorIndex === -1 || specifier.length === 0) {\n      validPackageName = false;\n    } else {\n      separatorIndex = specifier.indexOf('/', separatorIndex + 1);\n    }\n  }\n\n  const packageName =\n    separatorIndex === -1 ? specifier : specifier.slice(0, separatorIndex);\n\n  // Package name cannot have leading . and cannot have percent-encoding or\n  // \\\\ separators.\n  if (invalidPackageNameRegEx.exec(packageName) !== null) {\n    validPackageName = false;\n  }\n\n  if (!validPackageName) {\n    throw new ERR_INVALID_MODULE_SPECIFIER(\n      specifier,\n      'is not a valid package name',\n      fileURLToPath$1(base)\n    )\n  }\n\n  const packageSubpath =\n    '.' + (separatorIndex === -1 ? '' : specifier.slice(separatorIndex));\n\n  return {packageName, packageSubpath, isScoped}\n}\n\n/**\n * @param {string} specifier\n * @param {URL} base\n * @param {Set<string> | undefined} conditions\n * @returns {URL}\n */\nfunction packageResolve(specifier, base, conditions) {\n  if (builtinModules.includes(specifier)) {\n    return new URL$1('node:' + specifier)\n  }\n\n  const {packageName, packageSubpath, isScoped} = parsePackageName(\n    specifier,\n    base\n  );\n\n  // ResolveSelf\n  const packageConfig = getPackageScopeConfig(base);\n\n  // Can’t test.\n  /* c8 ignore next 16 */\n  if (packageConfig.exists) {\n    const packageJsonUrl = pathToFileURL$1(packageConfig.pjsonPath);\n    if (\n      packageConfig.name === packageName &&\n      packageConfig.exports !== undefined &&\n      packageConfig.exports !== null\n    ) {\n      return packageExportsResolve(\n        packageJsonUrl,\n        packageSubpath,\n        packageConfig,\n        base,\n        conditions\n      )\n    }\n  }\n\n  let packageJsonUrl = new URL$1(\n    './node_modules/' + packageName + '/package.json',\n    base\n  );\n  let packageJsonPath = fileURLToPath$1(packageJsonUrl);\n  /** @type {string} */\n  let lastPath;\n  do {\n    const stat = tryStatSync(packageJsonPath.slice(0, -13));\n    if (!stat || !stat.isDirectory()) {\n      lastPath = packageJsonPath;\n      packageJsonUrl = new URL$1(\n        (isScoped ? '../../../../node_modules/' : '../../../node_modules/') +\n          packageName +\n          '/package.json',\n        packageJsonUrl\n      );\n      packageJsonPath = fileURLToPath$1(packageJsonUrl);\n      continue\n    }\n\n    // Package match.\n    const packageConfig = read(packageJsonPath, {base, specifier});\n    if (packageConfig.exports !== undefined && packageConfig.exports !== null) {\n      return packageExportsResolve(\n        packageJsonUrl,\n        packageSubpath,\n        packageConfig,\n        base,\n        conditions\n      )\n    }\n\n    if (packageSubpath === '.') {\n      return legacyMainResolve(packageJsonUrl, packageConfig, base)\n    }\n\n    return new URL$1(packageSubpath, packageJsonUrl)\n    // Cross-platform root check.\n  } while (packageJsonPath.length !== lastPath.length)\n\n  throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath$1(base), false)\n}\n\n/**\n * @param {string} specifier\n * @returns {boolean}\n */\nfunction isRelativeSpecifier(specifier) {\n  if (specifier[0] === '.') {\n    if (specifier.length === 1 || specifier[1] === '/') return true\n    if (\n      specifier[1] === '.' &&\n      (specifier.length === 2 || specifier[2] === '/')\n    ) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * @param {string} specifier\n * @returns {boolean}\n */\nfunction shouldBeTreatedAsRelativeOrAbsolutePath(specifier) {\n  if (specifier === '') return false\n  if (specifier[0] === '/') return true\n  return isRelativeSpecifier(specifier)\n}\n\n/**\n * The “Resolver Algorithm Specification” as detailed in the Node docs (which is\n * sync and slightly lower-level than `resolve`).\n *\n * @param {string} specifier\n *   `/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`, etc.\n * @param {URL} base\n *   Full URL (to a file) that `specifier` is resolved relative from.\n * @param {Set<string>} [conditions]\n *   Conditions.\n * @param {boolean} [preserveSymlinks]\n *   Keep symlinks instead of resolving them.\n * @returns {URL}\n *   A URL object to the found thing.\n */\nfunction moduleResolve(specifier, base, conditions, preserveSymlinks) {\n  // Note: The Node code supports `base` as a string (in this internal API) too,\n  // we don’t.\n  const protocol = base.protocol;\n  const isData = protocol === 'data:';\n  const isRemote = isData || protocol === 'http:' || protocol === 'https:';\n  // Order swapped from spec for minor perf gain.\n  // Ok since relative URLs cannot parse as URLs.\n  /** @type {URL | undefined} */\n  let resolved;\n\n  if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) {\n    try {\n      resolved = new URL$1(specifier, base);\n    } catch (error_) {\n      const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base);\n      error.cause = error_;\n      throw error\n    }\n  } else if (protocol === 'file:' && specifier[0] === '#') {\n    resolved = packageImportsResolve(specifier, base, conditions);\n  } else {\n    try {\n      resolved = new URL$1(specifier);\n    } catch (error_) {\n      // Note: actual code uses `canBeRequiredWithoutScheme`.\n      if (isRemote && !builtinModules.includes(specifier)) {\n        const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base);\n        error.cause = error_;\n        throw error\n      }\n\n      resolved = packageResolve(specifier, base, conditions);\n    }\n  }\n\n  assert(resolved !== undefined, 'expected to be defined');\n\n  if (resolved.protocol !== 'file:') {\n    return resolved\n  }\n\n  return finalizeResolution(resolved, base)\n}\n\nfunction fileURLToPath(id) {\n  if (typeof id === \"string\" && !id.startsWith(\"file://\")) {\n    return normalizeSlash(id);\n  }\n  return normalizeSlash(fileURLToPath$1(id));\n}\nfunction pathToFileURL(id) {\n  return pathToFileURL$1(fileURLToPath(id)).toString();\n}\nconst INVALID_CHAR_RE = /[\\u0000-\\u001F\"#$&*+,/:;<=>?@[\\]^`{|}\\u007F]+/g;\nfunction sanitizeURIComponent(name = \"\", replacement = \"_\") {\n  return name.replace(INVALID_CHAR_RE, replacement).replace(/%../g, replacement);\n}\nfunction sanitizeFilePath(filePath = \"\") {\n  return filePath.replace(/\\?.*$/, \"\").split(/[/\\\\]/g).map((p) => sanitizeURIComponent(p)).join(\"/\").replace(/^([A-Za-z])_\\//, \"$1:/\");\n}\nfunction normalizeid(id) {\n  if (typeof id !== \"string\") {\n    id = id.toString();\n  }\n  if (/(node|data|http|https|file):/.test(id)) {\n    return id;\n  }\n  if (BUILTIN_MODULES.has(id)) {\n    return \"node:\" + id;\n  }\n  return \"file://\" + encodeURI(normalizeSlash(id));\n}\nasync function loadURL(url) {\n  const code = await promises.readFile(fileURLToPath(url), \"utf8\");\n  return code;\n}\nfunction toDataURL(code) {\n  const base64 = Buffer.from(code).toString(\"base64\");\n  return `data:text/javascript;base64,${base64}`;\n}\nfunction isNodeBuiltin(id = \"\") {\n  id = id.replace(/^node:/, \"\").split(\"/\")[0];\n  return BUILTIN_MODULES.has(id);\n}\nconst ProtocolRegex = /^(?<proto>.{2,}?):.+$/;\nfunction getProtocol(id) {\n  const proto = id.match(ProtocolRegex);\n  return proto ? proto.groups?.proto : undefined;\n}\n\nconst DEFAULT_CONDITIONS_SET = /* @__PURE__ */ new Set([\"node\", \"import\"]);\nconst DEFAULT_EXTENSIONS = [\".mjs\", \".cjs\", \".js\", \".json\"];\nconst NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([\n  \"ERR_MODULE_NOT_FOUND\",\n  \"ERR_UNSUPPORTED_DIR_IMPORT\",\n  \"MODULE_NOT_FOUND\",\n  \"ERR_PACKAGE_PATH_NOT_EXPORTED\"\n]);\nfunction _tryModuleResolve(id, url, conditions) {\n  try {\n    return moduleResolve(id, url, conditions);\n  } catch (error) {\n    if (!NOT_FOUND_ERRORS.has(error?.code)) {\n      throw error;\n    }\n  }\n}\nfunction _resolve(id, options = {}) {\n  if (typeof id !== \"string\") {\n    if (id instanceof URL) {\n      id = fileURLToPath(id);\n    } else {\n      throw new TypeError(\"input must be a `string` or `URL`\");\n    }\n  }\n  if (/(node|data|http|https):/.test(id)) {\n    return id;\n  }\n  if (BUILTIN_MODULES.has(id)) {\n    return \"node:\" + id;\n  }\n  if (id.startsWith(\"file://\")) {\n    id = fileURLToPath(id);\n  }\n  if (isAbsolute(id)) {\n    try {\n      const stat = statSync(id);\n      if (stat.isFile()) {\n        return pathToFileURL(id);\n      }\n    } catch (error) {\n      if (error?.code !== \"ENOENT\") {\n        throw error;\n      }\n    }\n  }\n  const conditionsSet = options.conditions ? new Set(options.conditions) : DEFAULT_CONDITIONS_SET;\n  const _urls = (Array.isArray(options.url) ? options.url : [options.url]).filter(Boolean).map((url) => new URL(normalizeid(url.toString())));\n  if (_urls.length === 0) {\n    _urls.push(new URL(pathToFileURL(process.cwd())));\n  }\n  const urls = [..._urls];\n  for (const url of _urls) {\n    if (url.protocol === \"file:\") {\n      urls.push(\n        new URL(\"./\", url),\n        // If url is directory\n        new URL(joinURL(url.pathname, \"_index.js\"), url),\n        // TODO: Remove in next major version?\n        new URL(\"node_modules\", url)\n      );\n    }\n  }\n  let resolved;\n  for (const url of urls) {\n    resolved = _tryModuleResolve(id, url, conditionsSet);\n    if (resolved) {\n      break;\n    }\n    for (const prefix of [\"\", \"/index\"]) {\n      for (const extension of options.extensions || DEFAULT_EXTENSIONS) {\n        resolved = _tryModuleResolve(\n          joinURL(id, prefix) + extension,\n          url,\n          conditionsSet\n        );\n        if (resolved) {\n          break;\n        }\n      }\n      if (resolved) {\n        break;\n      }\n    }\n    if (resolved) {\n      break;\n    }\n  }\n  if (!resolved) {\n    const error = new Error(\n      `Cannot find module ${id} imported from ${urls.join(\", \")}`\n    );\n    error.code = \"ERR_MODULE_NOT_FOUND\";\n    throw error;\n  }\n  return pathToFileURL(resolved);\n}\nfunction resolveSync(id, options) {\n  return _resolve(id, options);\n}\nfunction resolve(id, options) {\n  try {\n    return Promise.resolve(resolveSync(id, options));\n  } catch (error) {\n    return Promise.reject(error);\n  }\n}\nfunction resolvePathSync(id, options) {\n  return fileURLToPath(resolveSync(id, options));\n}\nfunction resolvePath(id, options) {\n  try {\n    return Promise.resolve(resolvePathSync(id, options));\n  } catch (error) {\n    return Promise.reject(error);\n  }\n}\nfunction createResolve(defaults) {\n  return (id, url) => {\n    return resolve(id, { url, ...defaults });\n  };\n}\nconst NODE_MODULES_RE = /^(.+\\/node_modules\\/)([^/@]+|@[^/]+\\/[^/]+)(\\/?.*?)?$/;\nfunction parseNodeModulePath(path) {\n  if (!path) {\n    return {};\n  }\n  path = normalize(fileURLToPath(path));\n  const match = NODE_MODULES_RE.exec(path);\n  if (!match) {\n    return {};\n  }\n  const [, dir, name, subpath] = match;\n  return {\n    dir,\n    name,\n    subpath: subpath ? `.${subpath}` : undefined\n  };\n}\nasync function lookupNodeModuleSubpath(path) {\n  path = normalize(fileURLToPath(path));\n  const { name, subpath } = parseNodeModulePath(path);\n  if (!name || !subpath) {\n    return subpath;\n  }\n  const { exports } = await readPackageJSON(path).catch(() => {\n  }) || {};\n  if (exports) {\n    const resolvedSubpath = _findSubpath(subpath, exports);\n    if (resolvedSubpath) {\n      return resolvedSubpath;\n    }\n  }\n  return subpath;\n}\nfunction _findSubpath(subpath, exports) {\n  if (typeof exports === \"string\") {\n    exports = { \".\": exports };\n  }\n  if (!subpath.startsWith(\".\")) {\n    subpath = subpath.startsWith(\"/\") ? `.${subpath}` : `./${subpath}`;\n  }\n  if (subpath in (exports || {})) {\n    return subpath;\n  }\n  return _flattenExports(exports).find((p) => p.fsPath === subpath)?.subpath;\n}\nfunction _flattenExports(exports = {}, parentSubpath = \"./\") {\n  return Object.entries(exports).flatMap(([key, value]) => {\n    const [subpath, condition] = key.startsWith(\".\") ? [key.slice(1), undefined] : [\"\", key];\n    const _subPath = joinURL(parentSubpath, subpath);\n    if (typeof value === \"string\") {\n      return [{ subpath: _subPath, fsPath: value, condition }];\n    } else {\n      return _flattenExports(value, _subPath);\n    }\n  });\n}\n\nconst ESM_STATIC_IMPORT_RE = /(?<=\\s|^|;|\\})import\\s*([\\s\"']*(?<imports>[\\p{L}\\p{M}\\w\\t\\n\\r $*,/{}@.]+)from\\s*)?[\"']\\s*(?<specifier>(?<=\"\\s*)[^\"]*[^\\s\"](?=\\s*\")|(?<='\\s*)[^']*[^\\s'](?=\\s*'))\\s*[\"'][\\s;]*/gmu;\nconst DYNAMIC_IMPORT_RE = /import\\s*\\((?<expression>(?:[^()]+|\\((?:[^()]+|\\([^()]*\\))*\\))*)\\)/gm;\nconst IMPORT_NAMED_TYPE_RE = /(?<=\\s|^|;|})import\\s*type\\s+([\\s\"']*(?<imports>[\\w\\t\\n\\r $*,/{}]+)from\\s*)?[\"']\\s*(?<specifier>(?<=\"\\s*)[^\"]*[^\\s\"](?=\\s*\")|(?<='\\s*)[^']*[^\\s'](?=\\s*'))\\s*[\"'][\\s;]*/gm;\nconst EXPORT_DECAL_RE = /\\bexport\\s+(?<declaration>(async function\\s*\\*?|function\\s*\\*?|let|const enum|const|enum|var|class))\\s+\\*?(?<name>[\\w$]+)(?<extraNames>.*,\\s*[\\s\\w:[\\]{}]*[\\w$\\]}]+)*/g;\nconst EXPORT_DECAL_TYPE_RE = /\\bexport\\s+(?<declaration>(interface|type|declare (async function|function|let|const enum|const|enum|var|class)))\\s+(?<name>[\\w$]+)/g;\nconst EXPORT_NAMED_RE = /\\bexport\\s*{(?<exports>[^}]+?)[\\s,]*}(\\s*from\\s*[\"']\\s*(?<specifier>(?<=\"\\s*)[^\"]*[^\\s\"](?=\\s*\")|(?<='\\s*)[^']*[^\\s'](?=\\s*'))\\s*[\"'][^\\n;]*)?/g;\nconst EXPORT_NAMED_TYPE_RE = /\\bexport\\s+type\\s*{(?<exports>[^}]+?)[\\s,]*}(\\s*from\\s*[\"']\\s*(?<specifier>(?<=\"\\s*)[^\"]*[^\\s\"](?=\\s*\")|(?<='\\s*)[^']*[^\\s'](?=\\s*'))\\s*[\"'][^\\n;]*)?/g;\nconst EXPORT_NAMED_DESTRUCT = /\\bexport\\s+(let|var|const)\\s+(?:{(?<exports1>[^}]+?)[\\s,]*}|\\[(?<exports2>[^\\]]+?)[\\s,]*])\\s+=/gm;\nconst EXPORT_STAR_RE = /\\bexport\\s*(\\*)(\\s*as\\s+(?<name>[\\w$]+)\\s+)?\\s*(\\s*from\\s*[\"']\\s*(?<specifier>(?<=\"\\s*)[^\"]*[^\\s\"](?=\\s*\")|(?<='\\s*)[^']*[^\\s'](?=\\s*'))\\s*[\"'][^\\n;]*)?/g;\nconst EXPORT_DEFAULT_RE = /\\bexport\\s+default\\s+(async function|function|class|true|false|\\W|\\d)|\\bexport\\s+default\\s+(?<defaultName>.*)/g;\nconst TYPE_RE = /^\\s*?type\\s/;\nfunction findStaticImports(code) {\n  return _filterStatement(\n    _tryGetLocations(code, \"import\"),\n    matchAll(ESM_STATIC_IMPORT_RE, code, { type: \"static\" })\n  );\n}\nfunction findDynamicImports(code) {\n  return _filterStatement(\n    _tryGetLocations(code, \"import\"),\n    matchAll(DYNAMIC_IMPORT_RE, code, { type: \"dynamic\" })\n  );\n}\nfunction findTypeImports(code) {\n  return [\n    ...matchAll(IMPORT_NAMED_TYPE_RE, code, { type: \"type\" }),\n    ...matchAll(ESM_STATIC_IMPORT_RE, code, { type: \"static\" }).filter(\n      (match) => /[^A-Za-z]type\\s/.test(match.imports)\n    )\n  ];\n}\nfunction parseStaticImport(matched) {\n  const cleanedImports = clearImports(matched.imports);\n  const namedImports = {};\n  const _matches = cleanedImports.match(/{([^}]*)}/)?.[1]?.split(\",\") || [];\n  for (const namedImport of _matches) {\n    const _match = namedImport.match(/^\\s*(\\S*) as (\\S*)\\s*$/);\n    const source = _match?.[1] || namedImport.trim();\n    const importName = _match?.[2] || source;\n    if (source && !TYPE_RE.test(source)) {\n      namedImports[source] = importName;\n    }\n  }\n  const { namespacedImport, defaultImport } = getImportNames(cleanedImports);\n  return {\n    ...matched,\n    defaultImport,\n    namespacedImport,\n    namedImports\n  };\n}\nfunction parseTypeImport(matched) {\n  if (matched.type === \"type\") {\n    return parseStaticImport(matched);\n  }\n  const cleanedImports = clearImports(matched.imports);\n  const namedImports = {};\n  const _matches = cleanedImports.match(/{([^}]*)}/)?.[1]?.split(\",\") || [];\n  for (const namedImport of _matches) {\n    const _match = /\\s+as\\s+/.test(namedImport) ? namedImport.match(/^\\s*type\\s+(\\S*) as (\\S*)\\s*$/) : namedImport.match(/^\\s*type\\s+(\\S*)\\s*$/);\n    const source = _match?.[1] || namedImport.trim();\n    const importName = _match?.[2] || source;\n    if (source && TYPE_RE.test(namedImport)) {\n      namedImports[source] = importName;\n    }\n  }\n  const { namespacedImport, defaultImport } = getImportNames(cleanedImports);\n  return {\n    ...matched,\n    defaultImport,\n    namespacedImport,\n    namedImports\n  };\n}\nfunction findExports(code) {\n  const declaredExports = matchAll(EXPORT_DECAL_RE, code, {\n    type: \"declaration\"\n  });\n  for (const declaredExport of declaredExports) {\n    const extraNamesStr = declaredExport.extraNames;\n    if (extraNamesStr) {\n      const extraNames = matchAll(\n        /({.*?})|(\\[.*?])|(,\\s*(?<name>\\w+))/g,\n        extraNamesStr,\n        {}\n      ).map((m) => m.name).filter(Boolean);\n      declaredExport.names = [declaredExport.name, ...extraNames];\n    }\n    delete declaredExport.extraNames;\n  }\n  const namedExports = normalizeNamedExports(\n    matchAll(EXPORT_NAMED_RE, code, {\n      type: \"named\"\n    })\n  );\n  const destructuredExports = matchAll(\n    EXPORT_NAMED_DESTRUCT,\n    code,\n    { type: \"named\" }\n  );\n  for (const namedExport of destructuredExports) {\n    namedExport.exports = namedExport.exports1 || namedExport.exports2;\n    namedExport.names = namedExport.exports.replace(/^\\r?\\n?/, \"\").split(/\\s*,\\s*/g).filter((name) => !TYPE_RE.test(name)).map(\n      (name) => name.replace(/^.*?\\s*:\\s*/, \"\").replace(/\\s*=\\s*.*$/, \"\").trim()\n    );\n  }\n  const defaultExport = matchAll(EXPORT_DEFAULT_RE, code, {\n    type: \"default\",\n    name: \"default\"\n  });\n  const starExports = matchAll(EXPORT_STAR_RE, code, {\n    type: \"star\"\n  });\n  const exports = normalizeExports([\n    ...declaredExports,\n    ...namedExports,\n    ...destructuredExports,\n    ...defaultExport,\n    ...starExports\n  ]);\n  if (exports.length === 0) {\n    return [];\n  }\n  const exportLocations = _tryGetLocations(code, \"export\");\n  if (exportLocations && exportLocations.length === 0) {\n    return [];\n  }\n  return (\n    // Filter false positive export matches\n    _filterStatement(exportLocations, exports).filter((exp, index, exports2) => {\n      const nextExport = exports2[index + 1];\n      return !nextExport || exp.type !== nextExport.type || !exp.name || exp.name !== nextExport.name;\n    })\n  );\n}\nfunction findTypeExports(code) {\n  const declaredExports = matchAll(\n    EXPORT_DECAL_TYPE_RE,\n    code,\n    { type: \"declaration\" }\n  );\n  const namedExports = normalizeNamedExports(\n    matchAll(EXPORT_NAMED_TYPE_RE, code, {\n      type: \"named\"\n    })\n  );\n  const exports = normalizeExports([\n    ...declaredExports,\n    ...namedExports\n  ]);\n  if (exports.length === 0) {\n    return [];\n  }\n  const exportLocations = _tryGetLocations(code, \"export\");\n  if (exportLocations && exportLocations.length === 0) {\n    return [];\n  }\n  return (\n    // Filter false positive export matches\n    _filterStatement(exportLocations, exports).filter((exp, index, exports2) => {\n      const nextExport = exports2[index + 1];\n      return !nextExport || exp.type !== nextExport.type || !exp.name || exp.name !== nextExport.name;\n    })\n  );\n}\nfunction normalizeExports(exports) {\n  for (const exp of exports) {\n    if (!exp.name && exp.names && exp.names.length === 1) {\n      exp.name = exp.names[0];\n    }\n    if (exp.name === \"default\" && exp.type !== \"default\") {\n      exp._type = exp.type;\n      exp.type = \"default\";\n    }\n    if (!exp.names && exp.name) {\n      exp.names = [exp.name];\n    }\n    if (exp.type === \"declaration\" && exp.declaration) {\n      exp.declarationType = exp.declaration.replace(\n        /^declare\\s*/,\n        \"\"\n      );\n    }\n  }\n  return exports;\n}\nfunction normalizeNamedExports(namedExports) {\n  for (const namedExport of namedExports) {\n    namedExport.names = namedExport.exports.replace(/^\\r?\\n?/, \"\").split(/\\s*,\\s*/g).filter((name) => !TYPE_RE.test(name)).map((name) => name.replace(/^.*?\\sas\\s/, \"\").trim());\n  }\n  return namedExports;\n}\nfunction findExportNames(code) {\n  return findExports(code).flatMap((exp) => exp.names).filter(Boolean);\n}\nasync function resolveModuleExportNames(id, options) {\n  const url = await resolvePath(id, options);\n  const code = await loadURL(url);\n  const exports = findExports(code);\n  const exportNames = new Set(\n    exports.flatMap((exp) => exp.names).filter(Boolean)\n  );\n  for (const exp of exports) {\n    if (exp.type !== \"star\" || !exp.specifier) {\n      continue;\n    }\n    const subExports = await resolveModuleExportNames(exp.specifier, {\n      ...options,\n      url\n    });\n    for (const subExport of subExports) {\n      exportNames.add(subExport);\n    }\n  }\n  return [...exportNames];\n}\nfunction _filterStatement(locations, statements) {\n  return statements.filter((exp) => {\n    return !locations || locations.some((location) => {\n      return exp.start <= location.start && exp.end >= location.end;\n    });\n  });\n}\nfunction _tryGetLocations(code, label) {\n  try {\n    return _getLocations(code, label);\n  } catch {\n  }\n}\nfunction _getLocations(code, label) {\n  const tokens = tokenizer(code, {\n    ecmaVersion: \"latest\",\n    sourceType: \"module\",\n    allowHashBang: true,\n    allowAwaitOutsideFunction: true,\n    allowImportExportEverywhere: true\n  });\n  const locations = [];\n  for (const token of tokens) {\n    if (token.type.label === label) {\n      locations.push({\n        start: token.start,\n        end: token.end\n      });\n    }\n  }\n  return locations;\n}\n\nfunction createCommonJS(url) {\n  const __filename = fileURLToPath(url);\n  const __dirname = dirname(__filename);\n  let _nativeRequire;\n  const getNativeRequire = () => {\n    if (!_nativeRequire) {\n      _nativeRequire = createRequire(url);\n    }\n    return _nativeRequire;\n  };\n  function require(id) {\n    return getNativeRequire()(id);\n  }\n  require.resolve = function requireResolve(id, options) {\n    return getNativeRequire().resolve(id, options);\n  };\n  return {\n    __filename,\n    __dirname,\n    require\n  };\n}\nfunction interopDefault(sourceModule, opts = {}) {\n  if (!isObject(sourceModule) || !(\"default\" in sourceModule)) {\n    return sourceModule;\n  }\n  const defaultValue = sourceModule.default;\n  if (defaultValue === undefined || defaultValue === null) {\n    return sourceModule;\n  }\n  const _defaultType = typeof defaultValue;\n  if (_defaultType !== \"object\" && !(_defaultType === \"function\" && !opts.preferNamespace)) {\n    return opts.preferNamespace ? sourceModule : defaultValue;\n  }\n  for (const key in sourceModule) {\n    try {\n      if (!(key in defaultValue)) {\n        Object.defineProperty(defaultValue, key, {\n          enumerable: key !== \"default\",\n          configurable: key !== \"default\",\n          get() {\n            return sourceModule[key];\n          }\n        });\n      }\n    } catch {\n    }\n  }\n  return defaultValue;\n}\n\nconst EVAL_ESM_IMPORT_RE = /(?<=import .* from [\"'])([^\"']+)(?=[\"'])|(?<=export .* from [\"'])([^\"']+)(?=[\"'])|(?<=import\\s*[\"'])([^\"']+)(?=[\"'])|(?<=import\\s*\\([\"'])([^\"']+)(?=[\"']\\))/g;\nasync function loadModule(id, options = {}) {\n  const url = await resolve(id, options);\n  const code = await loadURL(url);\n  return evalModule(code, { ...options, url });\n}\nasync function evalModule(code, options = {}) {\n  const transformed = await transformModule(code, options);\n  const dataURL = toDataURL(transformed);\n  return import(dataURL).catch((error) => {\n    error.stack = error.stack.replace(\n      new RegExp(dataURL, \"g\"),\n      options.url || \"_mlly_eval_\"\n    );\n    throw error;\n  });\n}\nfunction transformModule(code, options = {}) {\n  if (options.url && options.url.endsWith(\".json\")) {\n    return Promise.resolve(\"export default \" + code);\n  }\n  if (options.url) {\n    code = code.replace(/import\\.meta\\.url/g, `'${options.url}'`);\n  }\n  return Promise.resolve(code);\n}\nasync function resolveImports(code, options) {\n  const imports = [...code.matchAll(EVAL_ESM_IMPORT_RE)].map((m) => m[0]);\n  if (imports.length === 0) {\n    return code;\n  }\n  const uniqueImports = [...new Set(imports)];\n  const resolved = /* @__PURE__ */ new Map();\n  await Promise.all(\n    uniqueImports.map(async (id) => {\n      let url = await resolve(id, options);\n      if (url.endsWith(\".json\")) {\n        const code2 = await loadURL(url);\n        url = toDataURL(await transformModule(code2, { url }));\n      }\n      resolved.set(id, url);\n    })\n  );\n  const re = new RegExp(\n    uniqueImports.map((index) => `(${index})`).join(\"|\"),\n    \"g\"\n  );\n  return code.replace(re, (id) => resolved.get(id));\n}\n\nconst ESM_RE = /([\\s;]|^)(import[\\s\\w*,{}]*from|import\\s*[\"'*{]|export\\b\\s*(?:[*{]|default|class|type|function|const|var|let|async function)|import\\.meta\\b)/m;\nconst CJS_RE = /([\\s;]|^)(module.exports\\b|exports\\.\\w|require\\s*\\(|global\\.\\w)/m;\nconst COMMENT_RE = /\\/\\*.+?\\*\\/|\\/\\/.*(?=[nr])/g;\nconst BUILTIN_EXTENSIONS = /* @__PURE__ */ new Set([\".mjs\", \".cjs\", \".node\", \".wasm\"]);\nfunction hasESMSyntax(code, opts = {}) {\n  if (opts.stripComments) {\n    code = code.replace(COMMENT_RE, \"\");\n  }\n  return ESM_RE.test(code);\n}\nfunction hasCJSSyntax(code, opts = {}) {\n  if (opts.stripComments) {\n    code = code.replace(COMMENT_RE, \"\");\n  }\n  return CJS_RE.test(code);\n}\nfunction detectSyntax(code, opts = {}) {\n  if (opts.stripComments) {\n    code = code.replace(COMMENT_RE, \"\");\n  }\n  const hasESM = hasESMSyntax(code, {});\n  const hasCJS = hasCJSSyntax(code, {});\n  return {\n    hasESM,\n    hasCJS,\n    isMixed: hasESM && hasCJS\n  };\n}\nconst validNodeImportDefaults = {\n  allowedProtocols: [\"node\", \"file\", \"data\"]\n};\nasync function isValidNodeImport(id, _options = {}) {\n  if (isNodeBuiltin(id)) {\n    return true;\n  }\n  const options = { ...validNodeImportDefaults, ..._options };\n  const proto = getProtocol(id);\n  if (proto && !options.allowedProtocols?.includes(proto)) {\n    return false;\n  }\n  if (proto === \"data\") {\n    return true;\n  }\n  const resolvedPath = await resolvePath(id, options);\n  const extension = extname$1(resolvedPath);\n  if (BUILTIN_EXTENSIONS.has(extension)) {\n    return true;\n  }\n  if (extension !== \".js\") {\n    return false;\n  }\n  const package_ = await readPackageJSON(resolvedPath).catch(() => {\n  });\n  if (package_?.type === \"module\") {\n    return true;\n  }\n  if (/\\.(\\w+-)?esm?(-\\w+)?\\.js$|\\/(esm?)\\//.test(resolvedPath)) {\n    return false;\n  }\n  const code = options.code || await promises.readFile(resolvedPath, \"utf8\").catch(() => {\n  }) || \"\";\n  return !hasESMSyntax(code, { stripComments: options.stripComments });\n}\n\nexport { DYNAMIC_IMPORT_RE, ESM_STATIC_IMPORT_RE, EXPORT_DECAL_RE, EXPORT_DECAL_TYPE_RE, createCommonJS, createResolve, detectSyntax, evalModule, fileURLToPath, findDynamicImports, findExportNames, findExports, findStaticImports, findTypeExports, findTypeImports, getProtocol, hasCJSSyntax, hasESMSyntax, interopDefault, isNodeBuiltin, isValidNodeImport, loadModule, loadURL, lookupNodeModuleSubpath, normalizeid, parseNodeModulePath, parseStaticImport, parseTypeImport, pathToFileURL, resolve, resolveImports, resolveModuleExportNames, resolvePath, resolvePathSync, resolveSync, sanitizeFilePath, sanitizeURIComponent, toDataURL, transformModule };\n","export const UNKNOWN_HOST = \"http://localhost\";\n\n// pathnames\nexport const INIT_PATH = \"/__vite_plugin_cloudflare_init__\";\nexport const GET_EXPORT_TYPES_PATH =\n\t\"/__vite_plugin_cloudflare_get_export_types__\";\n\n// headers\nexport const WORKER_ENTRY_PATH_HEADER = \"__VITE_WORKER_ENTRY_PATH__\";\nexport const IS_ENTRY_WORKER_HEADER = \"__VITE_IS_ENTRY_WORKER__\";\nexport const ENVIRONMENT_NAME_HEADER = \"__VITE_ENVIRONMENT_NAME__\";\nexport const IS_PARENT_ENVIRONMENT_HEADER = \"__VITE_IS_PARENT_ENVIRONMENT__\";\n\n// virtual modules\nexport const virtualPrefix = \"virtual:cloudflare/\";\nexport const VIRTUAL_WORKER_ENTRY = `${virtualPrefix}worker-entry`;\nexport const VIRTUAL_EXPORT_TYPES = `${virtualPrefix}export-types`;\n","import assert from \"node:assert\";\nimport { assertHasNodeJsCompat } from \"../nodejs-compat\";\nimport {\n\tVIRTUAL_EXPORT_TYPES,\n\tVIRTUAL_WORKER_ENTRY,\n\tvirtualPrefix,\n} from \"../shared\";\nimport { createPlugin } from \"../utils\";\n\nexport const VIRTUAL_USER_ENTRY = `${virtualPrefix}user-entry`;\nexport const VIRTUAL_CLIENT_FALLBACK_ENTRY = `${virtualPrefix}client-fallback-entry`;\nexport const VIRTUAL_NODEJS_GLOBAL_INJECT_PREFIX = `${virtualPrefix}nodejs-global-inject/`;\n\nconst virtualCloudflareResolveRE = /^virtual:cloudflare\\//;\n// eslint-disable-next-line no-control-regex -- Vite virtual module convention uses \\0 prefix\nconst virtualCloudflareLoadRE = /^\\0virtual:cloudflare\\//;\n\n/**\n * Plugin to provide virtual modules\n */\nexport const virtualModulesPlugin = createPlugin(\"virtual-modules\", (ctx) => {\n\treturn {\n\t\tapplyToEnvironment(environment) {\n\t\t\treturn (\n\t\t\t\t!ctx.isChildEnvironment(environment.name) &&\n\t\t\t\tctx.getWorkerConfig(environment.name) !== undefined\n\t\t\t);\n\t\t},\n\t\tresolveId: {\n\t\t\tfilter: { id: virtualCloudflareResolveRE },\n\t\t\tasync handler(source) {\n\t\t\t\t// Fallback for when filter is not applied\n\t\t\t\t// TODO: remove when we drop support for Vite 6\n\t\t\t\tif (!virtualCloudflareResolveRE.test(source)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (source === VIRTUAL_USER_ENTRY) {\n\t\t\t\t\tconst workerConfig = ctx.getWorkerConfig(this.environment.name);\n\t\t\t\t\tassert(workerConfig, \"Expected `workerConfig` to be defined\");\n\t\t\t\t\tconst main = await this.resolve(workerConfig.main);\n\n\t\t\t\t\tif (!main) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Failed to resolve main entry file \"${workerConfig.main}\" for environment \"${this.environment.name}\"`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn main;\n\t\t\t\t}\n\n\t\t\t\treturn `\\0${source}`;\n\t\t\t},\n\t\t},\n\t\tload: {\n\t\t\tfilter: { id: virtualCloudflareLoadRE },\n\t\t\thandler(id) {\n\t\t\t\tif (id === `\\0${VIRTUAL_WORKER_ENTRY}`) {\n\t\t\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(this.environment.name);\n\n\t\t\t\t\treturn `\n${nodeJsCompat ? nodeJsCompat.injectGlobalCode() : \"\"}\nimport { getExportTypes } from \"${VIRTUAL_EXPORT_TYPES}\";\nimport * as mod from \"${VIRTUAL_USER_ENTRY}\";\nexport * from \"${VIRTUAL_USER_ENTRY}\";\nexport default mod.default ?? {};\nif (import.meta.hot) {\n\timport.meta.hot.accept((module) => {\n\t\tconst exportTypes = getExportTypes(module);\n\t\timport.meta.hot.send(\"vite-plugin-cloudflare:worker-export-types\", exportTypes);\n\t});\n}\n\t\t\t\t\t`;\n\t\t\t\t}\n\n\t\t\t\tif (id === `\\0${VIRTUAL_EXPORT_TYPES}`) {\n\t\t\t\t\treturn `\nimport {\n\tWorkerEntrypoint,\n\tDurableObject,\n\tWorkflowEntrypoint,\n} from \"cloudflare:workers\";\n\nconst baseClasses = new Map([\n\t[\"WorkerEntrypoint\", WorkerEntrypoint],\n\t[\"DurableObject\", DurableObject],\n\t[\"WorkflowEntrypoint\", WorkflowEntrypoint],\n]);\n\nexport function getExportTypes(module) {\n\tconst exportTypes = {};\n\n\tfor (const [key, value] of Object.entries(module)) {\n\t\tif (key === \"default\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet exportType;\n\n\t\tif (typeof value === \"function\") {\n\t\t\tfor (const [type, baseClass] of baseClasses) {\n\t\t\t\tif (baseClass.prototype.isPrototypeOf(value.prototype)) {\n\t\t\t\t\texportType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!exportType) {\n\t\t\t\texportType = \"DurableObject\";\n\t\t\t}\n\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\texportType = \"WorkerEntrypoint\";\n\t\t}\n\n\t\texportTypes[key] = exportType;\n\t}\n\n\treturn exportTypes;\n}\n\t\t\t\t\t`;\n\t\t\t\t}\n\n\t\t\t\tif (id.startsWith(`\\0${VIRTUAL_NODEJS_GLOBAL_INJECT_PREFIX}`)) {\n\t\t\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(this.environment.name);\n\t\t\t\t\tassertHasNodeJsCompat(nodeJsCompat);\n\n\t\t\t\t\treturn nodeJsCompat.getGlobalVirtualModule(id.slice(1));\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n});\n\nconst virtualClientFallbackResolveRE =\n\t/^virtual:cloudflare\\/client-fallback-entry$/;\n/* eslint-disable no-control-regex -- Vite virtual module convention uses \\0 prefix */\nconst virtualClientFallbackLoadRE =\n\t/^\\0virtual:cloudflare\\/client-fallback-entry$/;\n/* eslint-enable no-control-regex */\n\n/**\n * Plugin to provide a virtual fallback entry file for the `client` environment.\n * This is used as the entry file for the client build when only the `public` directory is present.\n */\nexport const virtualClientFallbackPlugin = createPlugin(\n\t\"virtual-client-fallback\",\n\t() => {\n\t\treturn {\n\t\t\tapplyToEnvironment(environment) {\n\t\t\t\treturn environment.name === \"client\";\n\t\t\t},\n\t\t\tresolveId: {\n\t\t\t\tfilter: { id: virtualClientFallbackResolveRE },\n\t\t\t\thandler(source) {\n\t\t\t\t\t// Fallback for when filter is not applied\n\t\t\t\t\t// TODO: remove when we drop support for Vite 6\n\t\t\t\t\tif (!virtualClientFallbackResolveRE.test(source)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `\\0${VIRTUAL_CLIENT_FALLBACK_ENTRY}`;\n\t\t\t\t},\n\t\t\t},\n\t\t\tload: {\n\t\t\t\tfilter: { id: virtualClientFallbackLoadRE },\n\t\t\t\thandler(id) {\n\t\t\t\t\t// Fallback for when filter is not applied\n\t\t\t\t\t// TODO: remove when we drop support for Vite 6\n\t\t\t\t\tif (!virtualClientFallbackLoadRE.test(id)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn \"\";\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n);\n","import assert from \"node:assert\";\nimport * as path from \"node:path\";\nimport {\n\tgetCloudflarePreset,\n\tnonPrefixedNodeModules,\n} from \"@cloudflare/unenv-preset\";\nimport { getNodeCompat } from \"miniflare\";\nimport { resolvePathSync } from \"mlly\";\nimport { defineEnv } from \"unenv\";\nimport { VIRTUAL_NODEJS_GLOBAL_INJECT_PREFIX } from \"./plugins/virtual-modules\";\nimport type { ResolvedWorkerConfig } from \"./plugin-config\";\nimport type { ResolvedEnvironment } from \"unenv\";\nimport type * as vite from \"vite\";\n\ntype InjectsByModule = Map<\n\tstring,\n\tArray<{ injectedName: string; exportName: string; importName: string }>\n>;\ntype VirtualModulePathToSpecifier = Map<string, string>;\n\nexport class NodeJsCompat {\n\texternals: Set<string>;\n\tentries: Set<string>;\n\t#env: ResolvedEnvironment;\n\t/**\n\t * Map of module identifiers to an array of:\n\t * - `injectedName`: the name injected on `globalThis`\n\t * - `exportName`: the export name from the module\n\t * - `importName`: the imported name\n\t */\n\t#injectsByModule: InjectsByModule;\n\t/**\n\t * Map of virtual module to injectable module ID,\n\t * which then maps via `injectsByModule` to the global code to be injected.\n\t */\n\t#virtualModulePathToSpecifier: VirtualModulePathToSpecifier;\n\n\tconstructor(workerConfig: ResolvedWorkerConfig) {\n\t\tconst { env } = defineEnv({\n\t\t\tpresets: [\n\t\t\t\tgetCloudflarePreset({\n\t\t\t\t\tcompatibilityDate: workerConfig.compatibility_date,\n\t\t\t\t\tcompatibilityFlags: workerConfig.compatibility_flags,\n\t\t\t\t}),\n\t\t\t],\n\t\t});\n\n\t\tthis.#env = env;\n\t\tthis.externals = new Set(env.external);\n\t\tthis.entries = this.#getEntries();\n\t\tconst { injectsByModule, virtualModulePathToSpecifier } =\n\t\t\tthis.#getInjects();\n\t\tthis.#injectsByModule = injectsByModule;\n\t\tthis.#virtualModulePathToSpecifier = virtualModulePathToSpecifier;\n\t}\n\n\t/**\n\t * Gets a set of module specifiers for all possible Node.js compat polyfill entry-points\n\t */\n\t#getEntries(): Set<string> {\n\t\t// Include all the alias targets\n\t\tconst entries = new Set(Object.values(this.#env.alias));\n\n\t\t// Include all the injection targets\n\t\tfor (const globalInject of Object.values(this.#env.inject)) {\n\t\t\tif (typeof globalInject === \"string\") {\n\t\t\t\tentries.add(globalInject);\n\t\t\t} else {\n\t\t\t\tassert(\n\t\t\t\t\tglobalInject[0] !== undefined,\n\t\t\t\t\t\"Expected first element of globalInject to be defined\"\n\t\t\t\t);\n\t\t\t\tentries.add(globalInject[0]);\n\t\t\t}\n\t\t}\n\n\t\t// Include all the polyfills\n\t\tthis.#env.polyfill.forEach((polyfill) => entries.add(polyfill));\n\n\t\t// Exclude all the externals\n\t\tthis.externals.forEach((external) => entries.delete(external));\n\n\t\treturn entries;\n\t}\n\n\t#getInjects(): {\n\t\tinjectsByModule: InjectsByModule;\n\t\tvirtualModulePathToSpecifier: VirtualModulePathToSpecifier;\n\t} {\n\t\tconst injectsByModule = new Map<\n\t\t\tstring,\n\t\t\t{ injectedName: string; exportName: string; importName: string }[]\n\t\t>();\n\t\tconst virtualModulePathToSpecifier = new Map<string, string>();\n\n\t\tfor (const [injectedName, moduleSpecifier] of Object.entries(\n\t\t\tthis.#env.inject\n\t\t)) {\n\t\t\tconst [module, exportName, importName] = Array.isArray(moduleSpecifier)\n\t\t\t\t? [moduleSpecifier[0], moduleSpecifier[1], moduleSpecifier[1]]\n\t\t\t\t: [moduleSpecifier, \"default\", \"defaultExport\"];\n\n\t\t\tif (!injectsByModule.has(module)) {\n\t\t\t\tinjectsByModule.set(module, []);\n\t\t\t\tvirtualModulePathToSpecifier.set(\n\t\t\t\t\t`${VIRTUAL_NODEJS_GLOBAL_INJECT_PREFIX}${module}`,\n\t\t\t\t\tmodule\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst injects = injectsByModule.get(module);\n\t\t\tassert(injects, `expected injects for \"${module}\" to be defined`);\n\t\t\tinjects.push({ injectedName, exportName, importName });\n\t\t}\n\n\t\treturn { injectsByModule, virtualModulePathToSpecifier };\n\t}\n\n\t/**\n\t * Does the given module ID resolve to a virtual module corresponding to a global injection module?\n\t */\n\tisGlobalVirtualModule(source: string): boolean {\n\t\treturn this.#virtualModulePathToSpecifier.has(source);\n\t}\n\n\t/**\n\t * Get the contents of the virtual module corresponding to a global injection module.\n\t */\n\tgetGlobalVirtualModule(source: string): string | undefined {\n\t\tconst module = this.#virtualModulePathToSpecifier.get(source);\n\n\t\tif (!module) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst injects = this.#injectsByModule.get(module);\n\t\tassert(injects, `expected injects for \"${module}\" to be defined`);\n\t\tconst imports = injects.map(({ exportName, importName }) =>\n\t\t\timportName === exportName ? exportName : `${exportName} as ${importName}`\n\t\t);\n\n\t\treturn [\n\t\t\t`import { ${imports.join(\", \")} } from \"${module}\";`,\n\t\t\t...injects.map(\n\t\t\t\t({ injectedName, importName }) =>\n\t\t\t\t\t`globalThis.${injectedName} = ${importName};`\n\t\t\t),\n\t\t].join(\"\\n\");\n\t}\n\n\t/**\n\t * Gets the necessary global polyfills to inject into the entry-point of the user's code.\n\t */\n\tinjectGlobalCode(): string {\n\t\tconst injectedCode = Array.from(this.#virtualModulePathToSpecifier.keys())\n\t\t\t.map((moduleId) => `import \"${moduleId}\";`)\n\t\t\t.join(\"\\n\");\n\t\t// Some globals are not injected using the approach above but are added to globalThis via side-effect imports of polyfills from the unenv-preset.\n\t\tconst polyfillCode = this.#env.polyfill\n\t\t\t.map((polyfillPath) => `import \"${polyfillPath}\";`)\n\t\t\t.join(\"\\n\");\n\n\t\treturn `${injectedCode}${polyfillCode}`;\n\t}\n\n\t/**\n\t * Resolves the `source` to a Node.js compat alias if possible.\n\t *\n\t * If there is an alias, the return value is an object with:\n\t * - `unresolved`: a bare import path to the polyfill (e.g. `unenv/runtime/node/crypto`)\n\t * - `resolved`: an absolute path to the polyfill (e.g. `/path/to/project/node_modules/unenv/runtime/node/child_process/index.mjs`)\n\t */\n\tresolveNodeJsImport(\n\t\tsource: string\n\t): { unresolved: string; resolved: string } | undefined {\n\t\tconst alias = this.#env.alias[source];\n\n\t\t// These aliases must be resolved from the context of this plugin since the alias will refer to one of the\n\t\t// `@cloudflare/unenv-preset` or the `unenv` packages, which are direct dependencies of this package,\n\t\t// and not the user's project.\n\t\t// We exclude `externals` as these should be externalized rather than optimized.\n\t\tif (alias && !this.externals.has(alias)) {\n\t\t\treturn {\n\t\t\t\tunresolved: alias,\n\t\t\t\tresolved: resolvePathSync(alias, { url: import.meta.url }),\n\t\t\t};\n\t\t}\n\n\t\tif (this.entries.has(source)) {\n\t\t\treturn {\n\t\t\t\tunresolved: source,\n\t\t\t\tresolved: resolvePathSync(source, { url: import.meta.url }),\n\t\t\t};\n\t\t}\n\t}\n}\n\n/**\n * Returns `true` if the given combination of compat dates and flags enables Node.js compatibility.\n */\nexport function hasNodeJsCompat(workerConfig: ResolvedWorkerConfig) {\n\tconst nodeCompatMode = getNodeCompat(\n\t\tworkerConfig.compatibility_date,\n\t\tworkerConfig.compatibility_flags ?? []\n\t).mode;\n\n\tif (nodeCompatMode === \"v2\") {\n\t\treturn true;\n\t}\n\n\tif (nodeCompatMode === \"v1\") {\n\t\tthrow new Error(\n\t\t\t`Unsupported Node.js compat mode (v1). Only the v2 mode is supported, either change your compat date to \"2024-09-23\" or later, or set the \"nodejs_compat_v2\" compatibility flag`\n\t\t);\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns true if Node.js async local storage (ALS) is enabled (and not full Node.js compatibility mode).\n */\nexport function hasNodeJsAls(workerConfig: ResolvedWorkerConfig | undefined) {\n\treturn (\n\t\tworkerConfig !== undefined &&\n\t\tgetNodeCompat(\n\t\t\tworkerConfig.compatibility_date,\n\t\t\tworkerConfig.compatibility_flags ?? []\n\t\t).mode === \"als\"\n\t);\n}\n\nexport function isNodeAlsModule(modulePath: string) {\n\treturn /^(?:node:)?async_hooks$/.test(modulePath);\n}\n\nexport const nodeBuiltinsRE = new RegExp(\n\t`^(${nonPrefixedNodeModules.join(\"|\")}|node:.+)$`\n);\n\nexport function assertHasNodeJsCompat(\n\tnodeJsCompat: NodeJsCompat | undefined\n): asserts nodeJsCompat is NodeJsCompat {\n\tassert(nodeJsCompat, `expected nodeJsCompat to be defined`);\n}\n\nexport class NodeJsCompatWarnings {\n\tprivate sources = new Map<string, Set<string>>();\n\tprivate timer: NodeJS.Timeout | undefined;\n\n\tconstructor(\n\t\tprivate readonly environmentName: string,\n\t\tprivate readonly resolvedViteConfig: vite.ResolvedConfig\n\t) {}\n\n\tregisterImport(source: string, importer = \"<unknown>\") {\n\t\tconst importers = this.sources.get(source) ?? new Set();\n\t\tthis.sources.set(source, importers);\n\t\timporters.add(importer);\n\t\tthis.renderWarningsOnIdle();\n\t}\n\n\tprivate renderWarningsOnIdle() {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t}\n\t\tthis.timer = setTimeout(() => {\n\t\t\tthis.renderWarnings();\n\t\t\tthis.timer = undefined;\n\t\t}, 500);\n\t}\n\n\trenderWarnings() {\n\t\tif (this.sources.size > 0) {\n\t\t\tlet message =\n\t\t\t\t`Unexpected Node.js imports for environment \"${this.environmentName}\". ` +\n\t\t\t\t`Do you need to enable the \"nodejs_compat\" compatibility flag? ` +\n\t\t\t\t\"Refer to https://developers.cloudflare.com/workers/runtime-apis/nodejs/ for more details.\\n\";\n\t\t\tthis.sources.forEach((importers, source) => {\n\t\t\t\timporters.forEach((importer) => {\n\t\t\t\t\tmessage += ` - \"${source}\" imported from \"${path.relative(this.resolvedViteConfig.root, importer)}\"\\n`;\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.resolvedViteConfig.logger.warn(message, {\n\t\t\t\ttimestamp: true,\n\t\t\t});\n\t\t\tthis.sources.clear();\n\t\t}\n\t}\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as wrangler from \"wrangler\";\nimport type {\n\tResolvedAssetsOnlyConfig,\n\tResolvedWorkerConfig,\n} from \"./plugin-config\";\nimport type { Optional } from \"./utils\";\nimport type { Unstable_Config as RawWorkerConfig } from \"wrangler\";\n\nexport type WorkerResolvedConfig =\n\t| AssetsOnlyWorkerResolvedConfig\n\t| WorkerWithServerLogicResolvedConfig;\n\nexport interface AssetsOnlyWorkerResolvedConfig extends WorkerBaseResolvedConfig {\n\ttype: \"assets-only\";\n\tconfig: ResolvedAssetsOnlyConfig;\n}\n\nexport interface WorkerWithServerLogicResolvedConfig extends WorkerBaseResolvedConfig {\n\ttype: \"worker\";\n\tconfig: ResolvedWorkerConfig;\n}\n\ninterface WorkerBaseResolvedConfig {\n\traw: RawWorkerConfig;\n\tnonApplicable: NonApplicableConfigMap;\n}\n\nexport type WorkerConfig = Omit<RawWorkerConfig, keyof NonApplicableConfig>;\n\nexport type NonApplicableConfigMap = {\n\treplacedByVite: Set<\n\t\tExtract<\n\t\t\tkeyof RawWorkerConfig,\n\t\t\tkeyof NonApplicableWorkerConfigsInfo[\"replacedByVite\"]\n\t\t>\n\t>;\n\tnotRelevant: Set<\n\t\tExtract<\n\t\t\tkeyof RawWorkerConfig,\n\t\t\tNonApplicableWorkerConfigsInfo[\"notRelevant\"][number]\n\t\t>\n\t>;\n\tnotSupportedOnAuxiliary: Set<\n\t\tExtract<\n\t\t\tkeyof RawWorkerConfig,\n\t\t\tNonApplicableWorkerConfigsInfo[\"notSupportedOnAuxiliary\"][number]\n\t\t>\n\t>;\n};\n\ntype NonApplicableWorkerConfigsInfo = typeof nonApplicableWorkerConfigs;\n\ntype NonApplicableConfig =\n\t| NonApplicableConfigReplacedByVite\n\t| NonApplicableConfigNotRelevant;\n\ntype NonApplicableConfigReplacedByVite =\n\tkeyof NonApplicableWorkerConfigsInfo[\"replacedByVite\"];\n\ntype NonApplicableConfigNotRelevant =\n\tNonApplicableWorkerConfigsInfo[\"notRelevant\"][number];\n\n/**\n * Set of worker config options that are not applicable when using Vite\n */\nexport const nonApplicableWorkerConfigs = {\n\t/**\n\t * Object containing configs that have a vite replacement, the object's field contain details about the config's replacement\n\t */\n\treplacedByVite: {\n\t\talias: {\n\t\t\tviteReplacement: \"resolve.alias\",\n\t\t\tviteDocs: \"https://vite.dev/config/shared-options.html#resolve-alias\",\n\t\t},\n\t\tdefine: {\n\t\t\tviteReplacement: \"define\",\n\t\t\tviteDocs: \"https://vite.dev/config/shared-options.html#define\",\n\t\t},\n\t\tminify: {\n\t\t\tviteReplacement: \"build.minify\",\n\t\t\tviteDocs: \"https://vite.dev/config/build-options.html#build-minify\",\n\t\t},\n\t},\n\t/**\n\t * All the configs that are not relevant when using Vite (meaning that in the context of a Vite\n\t * application they lose their purpose/meaning)\n\t */\n\tnotRelevant: [\n\t\t\"base_dir\",\n\t\t\"build\",\n\t\t\"find_additional_modules\",\n\t\t\"no_bundle\",\n\t\t\"preserve_file_names\",\n\t\t\"rules\",\n\t\t\"site\",\n\t\t\"tsconfig\",\n\t],\n\t/**\n\t * Configs that are only supported on the entry worker and will be ignored on auxiliary workers\n\t */\n\tnotSupportedOnAuxiliary: [\"assets\"],\n} as const;\n\n/**\n * The non applicable configs that can be and default to `undefined`\n */\nconst nullableNonApplicable = [\n\t\"alias\",\n\t\"base_dir\",\n\t\"find_additional_modules\",\n\t\"minify\",\n\t\"no_bundle\",\n\t\"preserve_file_names\",\n\t\"site\",\n\t\"tsconfig\",\n] as const;\n\nfunction readWorkerConfig(\n\tconfigPath: string,\n\tenv: string | undefined\n): {\n\traw: RawWorkerConfig;\n\tconfig: WorkerConfig;\n\tnonApplicable: NonApplicableConfigMap;\n} {\n\tconst nonApplicable: NonApplicableConfigMap = {\n\t\treplacedByVite: new Set(),\n\t\tnotRelevant: new Set(),\n\t\tnotSupportedOnAuxiliary: new Set(),\n\t};\n\tconst config: Optional<RawWorkerConfig, \"build\" | \"define\"> =\n\t\twrangler.unstable_readConfig(\n\t\t\t{ config: configPath, env },\n\t\t\t// Preserve the original `main` value so that Vite can resolve it\n\t\t\t{ preserveOriginalMain: true }\n\t\t);\n\tconst raw = structuredClone(config) as RawWorkerConfig;\n\n\tnullableNonApplicable.forEach((prop) => {\n\t\tif (config[prop] !== undefined) {\n\t\t\tif (isReplacedByVite(prop)) {\n\t\t\t\tnonApplicable.replacedByVite.add(prop);\n\t\t\t}\n\n\t\t\tif (isNotRelevant(prop)) {\n\t\t\t\tnonApplicable.notRelevant.add(prop);\n\t\t\t}\n\t\t}\n\t\tdelete config[prop];\n\t});\n\n\t// config.build is always defined as an object and by default it has the `command` and `cwd` fields\n\t// set to `undefined` but the `watch_dir` field set to `\"./src\"`, so to check if the user set it\n\t// we need to check `command` and `cwd`\n\tif (config.build && (config.build.command || config.build.cwd)) {\n\t\tnonApplicable.notRelevant.add(\"build\");\n\t}\n\tdelete config[\"build\"];\n\n\tif (config.define && Object.keys(config.define).length > 0) {\n\t\tnonApplicable.replacedByVite.add(\"define\");\n\t}\n\tdelete config[\"define\"];\n\n\tif (config.rules.length > 0) {\n\t\tnonApplicable.notRelevant.add(\"rules\");\n\t}\n\n\treturn {\n\t\traw,\n\t\tnonApplicable,\n\t\tconfig: config as WorkerConfig,\n\t};\n}\n\n// TODO: separate prerender Worker warnings from auxiliary Worker warnings\nexport function getWarningForWorkersConfigs(\n\tconfigs:\n\t\t| {\n\t\t\t\tentryWorker: AssetsOnlyWorkerResolvedConfig;\n\t\t  }\n\t\t| {\n\t\t\t\tentryWorker: WorkerWithServerLogicResolvedConfig;\n\t\t\t\tauxiliaryWorkers: WorkerResolvedConfig[];\n\t\t  }\n): string | undefined {\n\tif (\n\t\t!(\"auxiliaryWorkers\" in configs) ||\n\t\tconfigs.auxiliaryWorkers.length === 0\n\t) {\n\t\tconst nonApplicableLines = getWorkerNonApplicableWarnLines(\n\t\t\tconfigs.entryWorker,\n\t\t\t`  - `\n\t\t);\n\n\t\tif (nonApplicableLines.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines = [\n\t\t\t`\\n\\n\\x1b[43mWARNING\\x1b[0m: your worker config${configs.entryWorker.config.configPath ? ` (at \\`${path.relative(\"\", configs.entryWorker.config.configPath)}\\`)` : \"\"} contains` +\n\t\t\t\t\" the following configuration options which are ignored since they are not applicable when using Vite:\",\n\t\t];\n\n\t\tnonApplicableLines.forEach((line) => lines.push(line));\n\n\t\tlines.push(\"\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst lines: string[] = [];\n\n\tconst processWorkerConfig = (\n\t\tworkerConfig: WorkerResolvedConfig,\n\t\tisEntryWorker = false\n\t) => {\n\t\tconst nonApplicableLines = getWorkerNonApplicableWarnLines(\n\t\t\tworkerConfig,\n\t\t\t`    - `,\n\t\t\t{ isAuxiliary: !isEntryWorker }\n\t\t);\n\n\t\tif (nonApplicableLines.length > 0) {\n\t\t\tlines.push(\n\t\t\t\t`  - (${isEntryWorker ? \"entry\" : \"auxiliary\"}) worker${workerConfig.config.name ? ` \"${workerConfig.config.name}\"` : \"\"}${workerConfig.config.configPath ? ` (config at \\`${path.relative(\"\", workerConfig.config.configPath)}\\`)` : \"\"}`\n\t\t\t);\n\t\t\tnonApplicableLines.forEach((line) => lines.push(line));\n\t\t}\n\t};\n\n\tprocessWorkerConfig(configs.entryWorker, true);\n\tconfigs.auxiliaryWorkers.forEach((config) => processWorkerConfig(config));\n\n\tif (lines.length === 0) {\n\t\treturn;\n\t}\n\n\treturn [\n\t\t\"\\n\\x1b[43mWARNING\\x1b[0m: your workers configs contain configuration options which are ignored since they are not applicable when using Vite:\",\n\t\t...lines,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nfunction getWorkerNonApplicableWarnLines(\n\tworkerConfig: WorkerResolvedConfig,\n\tlinePrefix: string,\n\toptions?: { isAuxiliary?: boolean }\n): string[] {\n\tconst lines: string[] = [];\n\n\tconst { replacedByVite, notRelevant, notSupportedOnAuxiliary } =\n\t\tworkerConfig.nonApplicable;\n\n\tfor (const config of replacedByVite) {\n\t\tlines.push(\n\t\t\t`${linePrefix}\\`${config}\\` which is replaced by Vite's \\`${nonApplicableWorkerConfigs.replacedByVite[config].viteReplacement}\\` (docs: ${nonApplicableWorkerConfigs.replacedByVite[config].viteDocs})`\n\t\t);\n\t}\n\n\tif (notRelevant.size > 0) {\n\t\tlines.push(\n\t\t\t`${linePrefix}${[...notRelevant].map((config) => `\\`${config}\\``).join(\", \")} which ${notRelevant.size > 1 ? \"are\" : \"is\"} not relevant in the context of a Vite project`\n\t\t);\n\t}\n\n\tif (options?.isAuxiliary && notSupportedOnAuxiliary.size > 0) {\n\t\tlines.push(\n\t\t\t`${linePrefix}${[...notSupportedOnAuxiliary].map((config) => `\\`${config}\\``).join(\", \")} which ${notSupportedOnAuxiliary.size > 1 ? \"are\" : \"is\"} not supported for auxiliary workers`\n\t\t);\n\t}\n\n\treturn lines;\n}\n\nfunction isReplacedByVite(\n\tconfigName: string\n): configName is NonApplicableConfigReplacedByVite {\n\treturn configName in nonApplicableWorkerConfigs[\"replacedByVite\"];\n}\n\nfunction isNotRelevant(\n\tconfigName: string\n): configName is NonApplicableConfigNotRelevant {\n\treturn nonApplicableWorkerConfigs.notRelevant.includes(\n\t\tconfigName as NonApplicableConfigNotRelevant\n\t);\n}\n\nfunction missingFieldErrorMessage(\n\tfield: string,\n\tconfigPath: string | undefined,\n\tenv: string | undefined\n) {\n\treturn `No '${field}' field provided${configPath ? ` in '${configPath}'` : \"\"}${env ? ` for '${env}' environment` : \"\"}`;\n}\n\n/**\n * Reads and sanitizes a worker config from a wrangler config file.\n */\nexport function readWorkerConfigFromFile(\n\tconfigPath: string,\n\tenv: string | undefined,\n\topts?: {\n\t\tvisitedConfigPaths?: Set<string>;\n\t}\n): {\n\traw: RawWorkerConfig;\n\tconfig: WorkerConfig;\n\tnonApplicable: NonApplicableConfigMap;\n} {\n\tif (opts?.visitedConfigPaths?.has(configPath)) {\n\t\tthrow new Error(`Duplicate Wrangler config path found: ${configPath}`);\n\t}\n\n\tconst result = readWorkerConfig(configPath, env);\n\n\topts?.visitedConfigPaths?.add(configPath);\n\n\treturn result;\n}\n\ninterface ResolveWorkerTypeOptions {\n\tisEntryWorker?: boolean;\n\t/** Config path for resolving main field to absolute path. */\n\tconfigPath?: string;\n\t/** Root directory for resolving main field when configPath is not provided. */\n\troot?: string;\n\t/** Environment name for error messages. */\n\tenv?: string;\n}\n\n/**\n * Validates required fields and determines whether the config represents\n * an assets-only worker or a worker with server logic.\n *\n * @param config The sanitized worker config (after merging defaults, file config, and config())\n * @param raw The raw config (before sanitization)\n * @param nonApplicable The non-applicable config map\n * @param opts Options for validation\n */\nexport function resolveWorkerType(\n\tconfig: WorkerConfig,\n\traw: RawWorkerConfig,\n\tnonApplicable: NonApplicableConfigMap,\n\topts?: ResolveWorkerTypeOptions\n): WorkerResolvedConfig {\n\tif (!config.name) {\n\t\tthrow new Error(\n\t\t\tmissingFieldErrorMessage(\"name\", opts?.configPath, opts?.env)\n\t\t);\n\t}\n\n\tif (!config.topLevelName) {\n\t\tthrow new Error(\n\t\t\tmissingFieldErrorMessage(\"top-level name\", opts?.configPath, opts?.env)\n\t\t);\n\t}\n\n\tif (!config.compatibility_date) {\n\t\tthrow new Error(\n\t\t\tmissingFieldErrorMessage(\n\t\t\t\t\"compatibility_date\",\n\t\t\t\topts?.configPath,\n\t\t\t\topts?.env\n\t\t\t)\n\t\t);\n\t}\n\n\tconst requiredFields = {\n\t\ttopLevelName: config.topLevelName,\n\t\tname: config.name,\n\t\tcompatibility_date: config.compatibility_date,\n\t};\n\n\tif (opts?.isEntryWorker && !config.main) {\n\t\treturn {\n\t\t\ttype: \"assets-only\",\n\t\t\traw,\n\t\t\tconfig: {\n\t\t\t\t...config,\n\t\t\t\t...requiredFields,\n\t\t\t},\n\t\t\tnonApplicable,\n\t\t};\n\t}\n\n\tif (!config.main) {\n\t\tthrow new Error(\n\t\t\tmissingFieldErrorMessage(\"main\", opts?.configPath, opts?.env)\n\t\t);\n\t}\n\n\tconst resolvedMain = maybeResolveMain(\n\t\tconfig.main,\n\t\topts?.configPath,\n\t\topts?.root\n\t);\n\n\treturn {\n\t\ttype: \"worker\",\n\t\traw,\n\t\tconfig: {\n\t\t\t...config,\n\t\t\t...requiredFields,\n\t\t\tmain: resolvedMain,\n\t\t},\n\t\tnonApplicable,\n\t};\n}\n\nconst ENTRY_MODULE_EXTENSIONS = [\".js\", \".mjs\", \".ts\", \".mts\", \".jsx\", \".tsx\"];\n\n/**\n * If `main` ends with a valid file extension it is resolved to an absolute path.\n * Else `main` is returned as is so that it can be resolved by Vite.\n * This enables resolving entry modules relative to the Worker config while also supporting virtual modules and package exports.\n */\nfunction maybeResolveMain(\n\tmain: string,\n\tconfigPath: string | undefined,\n\troot: string | undefined\n): string {\n\tif (!ENTRY_MODULE_EXTENSIONS.some((extension) => main.endsWith(extension))) {\n\t\treturn main;\n\t}\n\n\t// Determine the base directory for resolution\n\tconst baseDir = configPath ? path.dirname(configPath) : root;\n\tif (!baseDir) {\n\t\treturn main;\n\t}\n\n\t// Resolve `main` to an absolute path\n\tconst resolvedMain = path.resolve(baseDir, main);\n\n\tif (!fs.existsSync(resolvedMain)) {\n\t\tthrow new Error(\n\t\t\t`The provided Wrangler config main field (${resolvedMain}) doesn't point to an existing file`\n\t\t);\n\t}\n\n\treturn resolvedMain;\n}\n\n/**\n * Returns the path to a wrangler config for a worker after having it validated\n * (throws appropriate errors in case the validation fails)\n *\n * @param root the root of the vite project\n * @param requestedConfigPath the requested config path, if any\n * @param isForAuxiliaryWorker whether the config path is being requested for an auxiliary worker\n * @returns a valid path to a config file, or undefined for entry workers when no config is found\n */\nexport function getValidatedWranglerConfigPath(\n\troot: string,\n\trequestedConfigPath: string | undefined,\n\tisForAuxiliaryWorker = false\n): string | undefined {\n\tif (requestedConfigPath) {\n\t\tconst configPath = path.resolve(root, requestedConfigPath);\n\n\t\tconst forAuxiliaryWorkerErrorMessage = isForAuxiliaryWorker\n\t\t\t? \" requested for one of your auxiliary workers\"\n\t\t\t: \"\";\n\n\t\tconst errorMessagePrefix = `The provided configPath (${configPath})${forAuxiliaryWorkerErrorMessage}`;\n\n\t\tconst fileExtension = path.extname(configPath).slice(1);\n\n\t\tif (!allowedWranglerConfigExtensions.includes(fileExtension)) {\n\t\t\tconst foundExtensionMessage = !fileExtension\n\t\t\t\t? \"no extension found\"\n\t\t\t\t: `\"${fileExtension}\" found`;\n\t\t\tthrow new Error(\n\t\t\t\t`${errorMessagePrefix} doesn't point to a file with the correct file extension. It should point to a jsonc, json or toml file (${foundExtensionMessage} instead)`\n\t\t\t);\n\t\t}\n\n\t\tconst mainStat = fs.statSync(configPath, { throwIfNoEntry: false });\n\t\tif (!mainStat) {\n\t\t\tthrow new Error(\n\t\t\t\t`${errorMessagePrefix} doesn't point to an existing file`\n\t\t\t);\n\t\t}\n\t\tif (mainStat.isDirectory()) {\n\t\t\tthrow new Error(\n\t\t\t\t`${errorMessagePrefix} points to a directory. It should point to a file.`\n\t\t\t);\n\t\t}\n\n\t\treturn configPath;\n\t}\n\t// We don't try to find a wrangler config for auxiliary workers when no configPath is provided\n\tif (isForAuxiliaryWorker) {\n\t\treturn undefined;\n\t}\n\treturn findWranglerConfig(root);\n}\n\n// We can't rely on `readConfig` from Wrangler to find the config as it may be relative to a different root that's set by the user.\nfunction findWranglerConfig(root: string): string | undefined {\n\tfor (const extension of allowedWranglerConfigExtensions) {\n\t\tconst configPath = path.join(root, `wrangler.${extension}`);\n\n\t\tif (fs.existsSync(configPath)) {\n\t\t\treturn configPath;\n\t\t}\n\t}\n}\n\nconst allowedWranglerConfigExtensions = [\"jsonc\", \"json\", \"toml\"];\n","import * as path from \"node:path\";\nimport { parseStaticRouting } from \"@cloudflare/workers-shared/utils/configuration/parseStaticRouting\";\nimport { defu } from \"defu\";\nimport * as vite from \"vite\";\nimport * as wrangler from \"wrangler\";\nimport { DEFAULT_COMPAT_DATE } from \"./build-constants\";\nimport { getWorkerConfigs } from \"./deploy-config\";\nimport { hasNodeJsCompat, NodeJsCompat } from \"./nodejs-compat\";\nimport {\n\tgetValidatedWranglerConfigPath,\n\treadWorkerConfigFromFile,\n\tresolveWorkerType,\n} from \"./workers-configs\";\nimport type { Defined } from \"./utils\";\nimport type {\n\tAssetsOnlyWorkerResolvedConfig,\n\tNonApplicableConfigMap,\n\tWorkerConfig,\n\tWorkerResolvedConfig,\n\tWorkerWithServerLogicResolvedConfig,\n} from \"./workers-configs\";\nimport type { StaticRouting } from \"@cloudflare/workers-shared/utils/types\";\nimport type { Unstable_Config } from \"wrangler\";\n\nexport type PersistState = boolean | { path: string };\n\ninterface BaseWorkerConfig {\n\tviteEnvironment?: { name?: string; childEnvironments?: string[] };\n}\n\ninterface EntryWorkerConfig extends BaseWorkerConfig {\n\tconfigPath?: string;\n\tconfig?: WorkerConfigCustomizer<true>;\n}\n\ninterface AuxiliaryWorkerFileConfig extends BaseWorkerConfig {\n\tconfigPath: string;\n}\n\ninterface AuxiliaryWorkerInlineConfig extends BaseWorkerConfig {\n\tconfigPath?: string;\n\tconfig: WorkerConfigCustomizer<false>;\n}\n\ntype AuxiliaryWorkerConfig =\n\t| AuxiliaryWorkerFileConfig\n\t| AuxiliaryWorkerInlineConfig;\n\ninterface Experimental {\n\t/** Experimental support for handling the _headers and _redirects files during Vite dev mode. */\n\theadersAndRedirectsDevModeSupport?: boolean;\n\t/** Experimental support for a dedicated prerender Worker */\n\tprerenderWorker?: AuxiliaryWorkerConfig;\n}\n\ntype FilteredEntryWorkerConfig = Omit<\n\tResolvedAssetsOnlyConfig,\n\t\"topLevelName\" | \"name\"\n>;\n\ntype WorkerConfigCustomizer<TIsEntryWorker extends boolean> =\n\t| Partial<WorkerConfig>\n\t| ((\n\t\t\t...args: TIsEntryWorker extends true\n\t\t\t\t? [config: WorkerConfig]\n\t\t\t\t: [\n\t\t\t\t\t\tconfig: WorkerConfig,\n\t\t\t\t\t\t{ entryWorkerConfig: FilteredEntryWorkerConfig },\n\t\t\t\t\t]\n\t  ) => Partial<WorkerConfig> | void);\n\nexport interface PluginConfig extends EntryWorkerConfig {\n\tauxiliaryWorkers?: AuxiliaryWorkerConfig[];\n\tpersistState?: PersistState;\n\tinspectorPort?: number | false;\n\tremoteBindings?: boolean;\n\ttunnel?: boolean;\n\texperimental?: Experimental;\n}\n\nexport interface ResolvedAssetsOnlyConfig extends WorkerConfig {\n\ttopLevelName: Defined<WorkerConfig[\"topLevelName\"]>;\n\tname: Defined<WorkerConfig[\"name\"]>;\n\tcompatibility_date: Defined<WorkerConfig[\"compatibility_date\"]>;\n}\n\nexport interface ResolvedWorkerConfig extends ResolvedAssetsOnlyConfig {\n\tmain: Defined<WorkerConfig[\"main\"]>;\n}\n\nexport interface Worker {\n\tconfig: ResolvedWorkerConfig;\n\tnodeJsCompat: NodeJsCompat | undefined;\n}\n\ninterface BaseResolvedConfig {\n\tpersistState: PersistState;\n\tinspectorPort: number | false | undefined;\n\texperimental: Pick<Experimental, \"headersAndRedirectsDevModeSupport\">;\n\tremoteBindings: boolean;\n\ttunnel: boolean;\n}\n\ninterface NonPreviewResolvedConfig extends BaseResolvedConfig {\n\tconfigPaths: Set<string>;\n\tcloudflareEnv: string | undefined;\n\tenvironmentNameToWorkerMap: Map<string, Worker>;\n\tenvironmentNameToChildEnvironmentNamesMap: Map<string, string[]>;\n\tprerenderWorkerEnvironmentName: string | undefined;\n}\n\nexport interface AssetsOnlyResolvedConfig extends NonPreviewResolvedConfig {\n\ttype: \"assets-only\";\n\tconfig: ResolvedAssetsOnlyConfig;\n\trawConfigs: {\n\t\tentryWorker: AssetsOnlyWorkerResolvedConfig;\n\t};\n}\n\nexport interface WorkersResolvedConfig extends NonPreviewResolvedConfig {\n\ttype: \"workers\";\n\tentryWorkerEnvironmentName: string;\n\tstaticRouting: StaticRouting | undefined;\n\trawConfigs: {\n\t\tentryWorker: WorkerWithServerLogicResolvedConfig;\n\t\tauxiliaryWorkers: WorkerResolvedConfig[];\n\t};\n}\n\nexport interface PreviewResolvedConfig extends BaseResolvedConfig {\n\ttype: \"preview\";\n\tworkers: Unstable_Config[];\n}\n\nexport type ResolvedPluginConfig =\n\t| AssetsOnlyResolvedConfig\n\t| WorkersResolvedConfig\n\t| PreviewResolvedConfig;\n\nfunction filterEntryWorkerConfig(\n\tconfig: ResolvedAssetsOnlyConfig\n): FilteredEntryWorkerConfig {\n\tconst {\n\t\ttopLevelName: _topLevelName,\n\t\tname: _name,\n\t\t...filteredConfig\n\t} = config;\n\n\treturn filteredConfig;\n}\n\nexport function customizeWorkerConfig(options: {\n\tworkerConfig: WorkerConfig;\n\tconfigCustomizer: WorkerConfigCustomizer<false> | undefined;\n\tentryWorkerConfig: ResolvedAssetsOnlyConfig;\n}): WorkerConfig;\nexport function customizeWorkerConfig(options: {\n\tworkerConfig: WorkerConfig;\n\tconfigCustomizer: WorkerConfigCustomizer<true> | undefined;\n}): WorkerConfig;\nexport function customizeWorkerConfig(\n\toptions:\n\t\t| {\n\t\t\t\tworkerConfig: WorkerConfig;\n\t\t\t\tconfigCustomizer: WorkerConfigCustomizer<false> | undefined;\n\t\t\t\tentryWorkerConfig: ResolvedAssetsOnlyConfig;\n\t\t  }\n\t\t| {\n\t\t\t\tworkerConfig: WorkerConfig;\n\t\t\t\tconfigCustomizer: WorkerConfigCustomizer<true> | undefined;\n\t\t  }\n): WorkerConfig {\n\t// The `config` option can either be an object to merge into the worker config,\n\t// a function that returns such an object, or a function that mutates the worker config in place.\n\tconst configResult =\n\t\ttypeof options.configCustomizer === \"function\"\n\t\t\t? \"entryWorkerConfig\" in options\n\t\t\t\t? options.configCustomizer(options.workerConfig, {\n\t\t\t\t\t\tentryWorkerConfig: filterEntryWorkerConfig(\n\t\t\t\t\t\t\toptions.entryWorkerConfig\n\t\t\t\t\t\t),\n\t\t\t\t\t})\n\t\t\t\t: options.configCustomizer(options.workerConfig)\n\t\t\t: options.configCustomizer;\n\n\t// If the configResult is defined, merge it into the existing config.\n\tif (configResult) {\n\t\treturn defu(configResult, options.workerConfig) as WorkerConfig;\n\t}\n\n\treturn options.workerConfig;\n}\n\n/**\n * Resolves the config for a single worker, applying defaults, file config, and config().\n */\nfunction resolveWorkerConfig(\n\toptions: {\n\t\troot: string;\n\t\tconfigPath: string | undefined;\n\t\tenv: string | undefined;\n\t\tvisitedConfigPaths: Set<string>;\n\t} & (\n\t\t| {\n\t\t\t\tconfigCustomizer: WorkerConfigCustomizer<false> | undefined;\n\t\t\t\tentryWorkerConfig: ResolvedAssetsOnlyConfig;\n\t\t  }\n\t\t| { configCustomizer: WorkerConfigCustomizer<true> | undefined }\n\t)\n): WorkerResolvedConfig {\n\tconst isEntryWorker = !(\"entryWorkerConfig\" in options);\n\tlet workerConfig: WorkerConfig;\n\tlet raw: Unstable_Config;\n\tlet nonApplicable: NonApplicableConfigMap;\n\n\tif (options.configPath) {\n\t\t// File config already has defaults applied\n\t\t({\n\t\t\traw,\n\t\t\tconfig: workerConfig,\n\t\t\tnonApplicable,\n\t\t} = readWorkerConfigFromFile(options.configPath, options.env, {\n\t\t\tvisitedConfigPaths: options.visitedConfigPaths,\n\t\t}));\n\t} else {\n\t\t// No file: start with defaults\n\t\tworkerConfig = { ...wrangler.unstable_defaultWranglerConfig };\n\t\traw = structuredClone(workerConfig);\n\t\tnonApplicable = {\n\t\t\treplacedByVite: new Set(),\n\t\t\tnotRelevant: new Set(),\n\t\t\tnotSupportedOnAuxiliary: new Set(),\n\t\t};\n\t}\n\n\t// Apply config()\n\tworkerConfig =\n\t\t\"entryWorkerConfig\" in options\n\t\t\t? customizeWorkerConfig({\n\t\t\t\t\tworkerConfig,\n\t\t\t\t\tconfigCustomizer: options.configCustomizer,\n\t\t\t\t\tentryWorkerConfig: options.entryWorkerConfig,\n\t\t\t\t})\n\t\t\t: customizeWorkerConfig({\n\t\t\t\t\tworkerConfig,\n\t\t\t\t\tconfigCustomizer: options.configCustomizer,\n\t\t\t\t});\n\n\tworkerConfig.compatibility_date ??= DEFAULT_COMPAT_DATE;\n\n\tif (isEntryWorker) {\n\t\tworkerConfig.name ??= wrangler.unstable_getWorkerNameFromProject(\n\t\t\toptions.root\n\t\t);\n\t}\n\t// Auto-populate topLevelName from name\n\tworkerConfig.topLevelName ??= workerConfig.name;\n\n\treturn resolveWorkerType(workerConfig, raw, nonApplicable, {\n\t\tisEntryWorker,\n\t\tconfigPath: options.configPath,\n\t\troot: options.root,\n\t\tenv: options.env,\n\t});\n}\n\nexport function resolvePluginConfig(\n\tpluginConfig: PluginConfig,\n\tuserConfig: vite.UserConfig,\n\tviteEnv: vite.ConfigEnv\n): ResolvedPluginConfig {\n\tconst shared = {\n\t\tpersistState: pluginConfig.persistState ?? true,\n\t\tinspectorPort: pluginConfig.inspectorPort,\n\t\ttunnel: pluginConfig.tunnel ?? false,\n\t\texperimental: {\n\t\t\theadersAndRedirectsDevModeSupport:\n\t\t\t\tpluginConfig.experimental?.headersAndRedirectsDevModeSupport,\n\t\t},\n\t};\n\tconst root = userConfig.root ? path.resolve(userConfig.root) : process.cwd();\n\tconst prefixedEnv = vite.loadEnv(viteEnv.mode, root, [\n\t\t\"CLOUDFLARE_\",\n\t\t// TODO: Remove deprecated WRANGLER prefix support in next major version\n\t\t\"WRANGLER_HYPERDRIVE_LOCAL_CONNECTION_STRING_\",\n\t]);\n\n\t// Merge the loaded env variables into process.env so that they are available to\n\t// wrangler when it loads the worker configuration files.\n\tObject.assign(process.env, prefixedEnv);\n\n\tif (viteEnv.isPreview) {\n\t\treturn {\n\t\t\t...shared,\n\t\t\tremoteBindings: pluginConfig.remoteBindings ?? true,\n\t\t\ttype: \"preview\",\n\t\t\tworkers: getWorkerConfigs(root, !!process.env.CLOUDFLARE_VITE_BUILD),\n\t\t};\n\t}\n\n\tconst configPaths = new Set<string>();\n\tconst cloudflareEnv = prefixedEnv.CLOUDFLARE_ENV;\n\tconst validateAndAddEnvironmentName = createEnvironmentNameValidator();\n\tconst requestedEntryWorkerConfigPath =\n\t\tpluginConfig.configPath ?? prefixedEnv.CLOUDFLARE_VITE_WRANGLER_CONFIG_PATH;\n\tconst configPath = getValidatedWranglerConfigPath(\n\t\troot,\n\t\trequestedEntryWorkerConfigPath\n\t);\n\n\t// Build entry worker config: defaults → file config → config()\n\tconst entryWorkerResolvedConfig = resolveWorkerConfig({\n\t\troot,\n\t\tconfigPath,\n\t\tenv: cloudflareEnv,\n\t\tconfigCustomizer: pluginConfig.config,\n\t\tvisitedConfigPaths: configPaths,\n\t});\n\n\tconst environmentNameToWorkerMap = new Map<string, Worker>();\n\tconst environmentNameToChildEnvironmentNamesMap = new Map<string, string[]>();\n\n\tconst prerenderWorkerConfig = pluginConfig.experimental?.prerenderWorker;\n\tlet prerenderWorkerEnvironmentName: string | undefined;\n\n\tif (prerenderWorkerConfig && viteEnv.command === \"build\") {\n\t\tconst workerConfigPath = getValidatedWranglerConfigPath(\n\t\t\troot,\n\t\t\tprerenderWorkerConfig.configPath,\n\t\t\ttrue\n\t\t);\n\n\t\tconst workerResolvedConfig = resolveWorkerConfig({\n\t\t\troot,\n\t\t\tconfigPath: workerConfigPath,\n\t\t\tenv: cloudflareEnv,\n\t\t\tconfigCustomizer:\n\t\t\t\t\"config\" in prerenderWorkerConfig\n\t\t\t\t\t? prerenderWorkerConfig.config\n\t\t\t\t\t: undefined,\n\t\t\tentryWorkerConfig: entryWorkerResolvedConfig.config,\n\t\t\tvisitedConfigPaths: configPaths,\n\t\t});\n\n\t\tprerenderWorkerEnvironmentName =\n\t\t\tprerenderWorkerConfig.viteEnvironment?.name ??\n\t\t\tworkerNameToEnvironmentName(workerResolvedConfig.config.topLevelName);\n\n\t\tvalidateAndAddEnvironmentName(prerenderWorkerEnvironmentName);\n\n\t\tenvironmentNameToWorkerMap.set(\n\t\t\tprerenderWorkerEnvironmentName,\n\t\t\tresolveWorker(workerResolvedConfig.config as ResolvedWorkerConfig)\n\t\t);\n\n\t\tconst prerenderWorkerChildEnvironments =\n\t\t\tprerenderWorkerConfig.viteEnvironment?.childEnvironments;\n\n\t\tif (prerenderWorkerChildEnvironments) {\n\t\t\tfor (const childName of prerenderWorkerChildEnvironments) {\n\t\t\t\tvalidateAndAddEnvironmentName(childName);\n\t\t\t}\n\n\t\t\tenvironmentNameToChildEnvironmentNamesMap.set(\n\t\t\t\tprerenderWorkerEnvironmentName,\n\t\t\t\tprerenderWorkerChildEnvironments\n\t\t\t);\n\t\t}\n\t}\n\n\tif (entryWorkerResolvedConfig.type === \"assets-only\") {\n\t\treturn {\n\t\t\t...shared,\n\t\t\ttype: \"assets-only\",\n\t\t\tcloudflareEnv,\n\t\t\tconfig: entryWorkerResolvedConfig.config,\n\t\t\tenvironmentNameToWorkerMap,\n\t\t\tenvironmentNameToChildEnvironmentNamesMap,\n\t\t\tprerenderWorkerEnvironmentName,\n\t\t\tconfigPaths,\n\t\t\tremoteBindings: pluginConfig.remoteBindings ?? true,\n\t\t\trawConfigs: {\n\t\t\t\tentryWorker: entryWorkerResolvedConfig,\n\t\t\t},\n\t\t};\n\t}\n\n\tlet staticRouting: StaticRouting | undefined;\n\n\tif (\n\t\tArray.isArray(entryWorkerResolvedConfig.config.assets?.run_worker_first)\n\t) {\n\t\tstaticRouting = parseStaticRouting(\n\t\t\tentryWorkerResolvedConfig.config.assets.run_worker_first\n\t\t);\n\t}\n\n\tconst entryWorkerEnvironmentName =\n\t\tpluginConfig.viteEnvironment?.name ??\n\t\tworkerNameToEnvironmentName(entryWorkerResolvedConfig.config.topLevelName);\n\n\tvalidateAndAddEnvironmentName(entryWorkerEnvironmentName);\n\n\tenvironmentNameToWorkerMap.set(\n\t\tentryWorkerEnvironmentName,\n\t\tresolveWorker(entryWorkerResolvedConfig.config)\n\t);\n\n\tconst entryWorkerChildEnvironments =\n\t\tpluginConfig.viteEnvironment?.childEnvironments;\n\n\tif (entryWorkerChildEnvironments) {\n\t\tfor (const childName of entryWorkerChildEnvironments) {\n\t\t\tvalidateAndAddEnvironmentName(childName);\n\t\t}\n\n\t\tenvironmentNameToChildEnvironmentNamesMap.set(\n\t\t\tentryWorkerEnvironmentName,\n\t\t\tentryWorkerChildEnvironments\n\t\t);\n\t}\n\n\tconst auxiliaryWorkersResolvedConfigs: WorkerResolvedConfig[] = [];\n\n\tfor (const auxiliaryWorker of pluginConfig.auxiliaryWorkers ?? []) {\n\t\tconst workerConfigPath = getValidatedWranglerConfigPath(\n\t\t\troot,\n\t\t\tauxiliaryWorker.configPath,\n\t\t\ttrue\n\t\t);\n\n\t\t// Build auxiliary worker config: defaults → file config → config()\n\t\tconst workerResolvedConfig = resolveWorkerConfig({\n\t\t\troot,\n\t\t\tconfigPath: workerConfigPath,\n\t\t\tenv: cloudflareEnv,\n\t\t\tconfigCustomizer:\n\t\t\t\t\"config\" in auxiliaryWorker ? auxiliaryWorker.config : undefined,\n\t\t\tentryWorkerConfig: entryWorkerResolvedConfig.config,\n\t\t\tvisitedConfigPaths: configPaths,\n\t\t});\n\n\t\tif (workerResolvedConfig.config.assets) {\n\t\t\tworkerResolvedConfig.nonApplicable.notSupportedOnAuxiliary.add(\"assets\");\n\t\t}\n\n\t\tauxiliaryWorkersResolvedConfigs.push(workerResolvedConfig);\n\n\t\tconst workerEnvironmentName =\n\t\t\tauxiliaryWorker.viteEnvironment?.name ??\n\t\t\tworkerNameToEnvironmentName(workerResolvedConfig.config.topLevelName);\n\n\t\tvalidateAndAddEnvironmentName(workerEnvironmentName);\n\n\t\tenvironmentNameToWorkerMap.set(\n\t\t\tworkerEnvironmentName,\n\t\t\tresolveWorker(workerResolvedConfig.config as ResolvedWorkerConfig)\n\t\t);\n\n\t\tconst auxiliaryWorkerChildEnvironments =\n\t\t\tauxiliaryWorker.viteEnvironment?.childEnvironments;\n\n\t\tif (auxiliaryWorkerChildEnvironments) {\n\t\t\tfor (const childName of auxiliaryWorkerChildEnvironments) {\n\t\t\t\tvalidateAndAddEnvironmentName(childName);\n\t\t\t}\n\n\t\t\tenvironmentNameToChildEnvironmentNamesMap.set(\n\t\t\t\tworkerEnvironmentName,\n\t\t\t\tauxiliaryWorkerChildEnvironments\n\t\t\t);\n\t\t}\n\t}\n\n\treturn {\n\t\t...shared,\n\t\ttype: \"workers\",\n\t\tcloudflareEnv,\n\t\tconfigPaths,\n\t\tenvironmentNameToWorkerMap,\n\t\tenvironmentNameToChildEnvironmentNamesMap,\n\t\tprerenderWorkerEnvironmentName,\n\t\tentryWorkerEnvironmentName,\n\t\tstaticRouting,\n\t\tremoteBindings: pluginConfig.remoteBindings ?? true,\n\t\trawConfigs: {\n\t\t\tentryWorker: entryWorkerResolvedConfig,\n\t\t\tauxiliaryWorkers: auxiliaryWorkersResolvedConfigs,\n\t\t},\n\t};\n}\n\n// Worker names can only contain alphanumeric characters and '-' whereas environment names can only contain alphanumeric characters and '$', '_'\nfunction workerNameToEnvironmentName(workerName: string) {\n\treturn workerName.replaceAll(\"-\", \"_\");\n}\n\nfunction createEnvironmentNameValidator() {\n\tconst usedNames = new Set<string>();\n\n\treturn (name: string): void => {\n\t\tif (name === \"client\") {\n\t\t\tthrow new Error(`\"client\" is a reserved Vite environment name`);\n\t\t}\n\n\t\tif (usedNames.has(name)) {\n\t\t\tthrow new Error(`Duplicate Vite environment name: \"${name}\"`);\n\t\t}\n\n\t\tusedNames.add(name);\n\t};\n}\n\nfunction resolveWorker(workerConfig: ResolvedWorkerConfig): Worker {\n\treturn {\n\t\tconfig: workerConfig,\n\t\tnodeJsCompat: hasNodeJsCompat(workerConfig)\n\t\t\t? new NodeJsCompat(workerConfig)\n\t\t\t: undefined,\n\t};\n}\n","const comma = ','.charCodeAt(0);\nconst semicolon = ';'.charCodeAt(0);\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\nfor (let i = 0; i < chars.length; i++) {\n    const c = chars.charCodeAt(i);\n    intToChar[i] = c;\n    charToInt[c] = i;\n}\nfunction decodeInteger(reader, relative) {\n    let value = 0;\n    let shift = 0;\n    let integer = 0;\n    do {\n        const c = reader.next();\n        integer = charToInt[c];\n        value |= (integer & 31) << shift;\n        shift += 5;\n    } while (integer & 32);\n    const shouldNegate = value & 1;\n    value >>>= 1;\n    if (shouldNegate) {\n        value = -0x80000000 | -value;\n    }\n    return relative + value;\n}\nfunction encodeInteger(builder, num, relative) {\n    let delta = num - relative;\n    delta = delta < 0 ? (-delta << 1) | 1 : delta << 1;\n    do {\n        let clamped = delta & 0b011111;\n        delta >>>= 5;\n        if (delta > 0)\n            clamped |= 0b100000;\n        builder.write(intToChar[clamped]);\n    } while (delta > 0);\n    return num;\n}\nfunction hasMoreVlq(reader, max) {\n    if (reader.pos >= max)\n        return false;\n    return reader.peek() !== comma;\n}\n\nconst bufLength = 1024 * 16;\n// Provide a fallback for older environments.\nconst td = typeof TextDecoder !== 'undefined'\n    ? /* #__PURE__ */ new TextDecoder()\n    : typeof Buffer !== 'undefined'\n        ? {\n            decode(buf) {\n                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n                return out.toString();\n            },\n        }\n        : {\n            decode(buf) {\n                let out = '';\n                for (let i = 0; i < buf.length; i++) {\n                    out += String.fromCharCode(buf[i]);\n                }\n                return out;\n            },\n        };\nclass StringWriter {\n    constructor() {\n        this.pos = 0;\n        this.out = '';\n        this.buffer = new Uint8Array(bufLength);\n    }\n    write(v) {\n        const { buffer } = this;\n        buffer[this.pos++] = v;\n        if (this.pos === bufLength) {\n            this.out += td.decode(buffer);\n            this.pos = 0;\n        }\n    }\n    flush() {\n        const { buffer, out, pos } = this;\n        return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;\n    }\n}\nclass StringReader {\n    constructor(buffer) {\n        this.pos = 0;\n        this.buffer = buffer;\n    }\n    next() {\n        return this.buffer.charCodeAt(this.pos++);\n    }\n    peek() {\n        return this.buffer.charCodeAt(this.pos);\n    }\n    indexOf(char) {\n        const { buffer, pos } = this;\n        const idx = buffer.indexOf(char, pos);\n        return idx === -1 ? buffer.length : idx;\n    }\n}\n\nconst EMPTY = [];\nfunction decodeOriginalScopes(input) {\n    const { length } = input;\n    const reader = new StringReader(input);\n    const scopes = [];\n    const stack = [];\n    let line = 0;\n    for (; reader.pos < length; reader.pos++) {\n        line = decodeInteger(reader, line);\n        const column = decodeInteger(reader, 0);\n        if (!hasMoreVlq(reader, length)) {\n            const last = stack.pop();\n            last[2] = line;\n            last[3] = column;\n            continue;\n        }\n        const kind = decodeInteger(reader, 0);\n        const fields = decodeInteger(reader, 0);\n        const hasName = fields & 0b0001;\n        const scope = (hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind]);\n        let vars = EMPTY;\n        if (hasMoreVlq(reader, length)) {\n            vars = [];\n            do {\n                const varsIndex = decodeInteger(reader, 0);\n                vars.push(varsIndex);\n            } while (hasMoreVlq(reader, length));\n        }\n        scope.vars = vars;\n        scopes.push(scope);\n        stack.push(scope);\n    }\n    return scopes;\n}\nfunction encodeOriginalScopes(scopes) {\n    const writer = new StringWriter();\n    for (let i = 0; i < scopes.length;) {\n        i = _encodeOriginalScopes(scopes, i, writer, [0]);\n    }\n    return writer.flush();\n}\nfunction _encodeOriginalScopes(scopes, index, writer, state) {\n    const scope = scopes[index];\n    const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;\n    if (index > 0)\n        writer.write(comma);\n    state[0] = encodeInteger(writer, startLine, state[0]);\n    encodeInteger(writer, startColumn, 0);\n    encodeInteger(writer, kind, 0);\n    const fields = scope.length === 6 ? 0b0001 : 0;\n    encodeInteger(writer, fields, 0);\n    if (scope.length === 6)\n        encodeInteger(writer, scope[5], 0);\n    for (const v of vars) {\n        encodeInteger(writer, v, 0);\n    }\n    for (index++; index < scopes.length;) {\n        const next = scopes[index];\n        const { 0: l, 1: c } = next;\n        if (l > endLine || (l === endLine && c >= endColumn)) {\n            break;\n        }\n        index = _encodeOriginalScopes(scopes, index, writer, state);\n    }\n    writer.write(comma);\n    state[0] = encodeInteger(writer, endLine, state[0]);\n    encodeInteger(writer, endColumn, 0);\n    return index;\n}\nfunction decodeGeneratedRanges(input) {\n    const { length } = input;\n    const reader = new StringReader(input);\n    const ranges = [];\n    const stack = [];\n    let genLine = 0;\n    let definitionSourcesIndex = 0;\n    let definitionScopeIndex = 0;\n    let callsiteSourcesIndex = 0;\n    let callsiteLine = 0;\n    let callsiteColumn = 0;\n    let bindingLine = 0;\n    let bindingColumn = 0;\n    do {\n        const semi = reader.indexOf(';');\n        let genColumn = 0;\n        for (; reader.pos < semi; reader.pos++) {\n            genColumn = decodeInteger(reader, genColumn);\n            if (!hasMoreVlq(reader, semi)) {\n                const last = stack.pop();\n                last[2] = genLine;\n                last[3] = genColumn;\n                continue;\n            }\n            const fields = decodeInteger(reader, 0);\n            const hasDefinition = fields & 0b0001;\n            const hasCallsite = fields & 0b0010;\n            const hasScope = fields & 0b0100;\n            let callsite = null;\n            let bindings = EMPTY;\n            let range;\n            if (hasDefinition) {\n                const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);\n                definitionScopeIndex = decodeInteger(reader, definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0);\n                definitionSourcesIndex = defSourcesIndex;\n                range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex];\n            }\n            else {\n                range = [genLine, genColumn, 0, 0];\n            }\n            range.isScope = !!hasScope;\n            if (hasCallsite) {\n                const prevCsi = callsiteSourcesIndex;\n                const prevLine = callsiteLine;\n                callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);\n                const sameSource = prevCsi === callsiteSourcesIndex;\n                callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);\n                callsiteColumn = decodeInteger(reader, sameSource && prevLine === callsiteLine ? callsiteColumn : 0);\n                callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];\n            }\n            range.callsite = callsite;\n            if (hasMoreVlq(reader, semi)) {\n                bindings = [];\n                do {\n                    bindingLine = genLine;\n                    bindingColumn = genColumn;\n                    const expressionsCount = decodeInteger(reader, 0);\n                    let expressionRanges;\n                    if (expressionsCount < -1) {\n                        expressionRanges = [[decodeInteger(reader, 0)]];\n                        for (let i = -1; i > expressionsCount; i--) {\n                            const prevBl = bindingLine;\n                            bindingLine = decodeInteger(reader, bindingLine);\n                            bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);\n                            const expression = decodeInteger(reader, 0);\n                            expressionRanges.push([expression, bindingLine, bindingColumn]);\n                        }\n                    }\n                    else {\n                        expressionRanges = [[expressionsCount]];\n                    }\n                    bindings.push(expressionRanges);\n                } while (hasMoreVlq(reader, semi));\n            }\n            range.bindings = bindings;\n            ranges.push(range);\n            stack.push(range);\n        }\n        genLine++;\n        reader.pos = semi + 1;\n    } while (reader.pos < length);\n    return ranges;\n}\nfunction encodeGeneratedRanges(ranges) {\n    if (ranges.length === 0)\n        return '';\n    const writer = new StringWriter();\n    for (let i = 0; i < ranges.length;) {\n        i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]);\n    }\n    return writer.flush();\n}\nfunction _encodeGeneratedRanges(ranges, index, writer, state) {\n    const range = ranges[index];\n    const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, isScope, callsite, bindings, } = range;\n    if (state[0] < startLine) {\n        catchupLine(writer, state[0], startLine);\n        state[0] = startLine;\n        state[1] = 0;\n    }\n    else if (index > 0) {\n        writer.write(comma);\n    }\n    state[1] = encodeInteger(writer, range[1], state[1]);\n    const fields = (range.length === 6 ? 0b0001 : 0) | (callsite ? 0b0010 : 0) | (isScope ? 0b0100 : 0);\n    encodeInteger(writer, fields, 0);\n    if (range.length === 6) {\n        const { 4: sourcesIndex, 5: scopesIndex } = range;\n        if (sourcesIndex !== state[2]) {\n            state[3] = 0;\n        }\n        state[2] = encodeInteger(writer, sourcesIndex, state[2]);\n        state[3] = encodeInteger(writer, scopesIndex, state[3]);\n    }\n    if (callsite) {\n        const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;\n        if (sourcesIndex !== state[4]) {\n            state[5] = 0;\n            state[6] = 0;\n        }\n        else if (callLine !== state[5]) {\n            state[6] = 0;\n        }\n        state[4] = encodeInteger(writer, sourcesIndex, state[4]);\n        state[5] = encodeInteger(writer, callLine, state[5]);\n        state[6] = encodeInteger(writer, callColumn, state[6]);\n    }\n    if (bindings) {\n        for (const binding of bindings) {\n            if (binding.length > 1)\n                encodeInteger(writer, -binding.length, 0);\n            const expression = binding[0][0];\n            encodeInteger(writer, expression, 0);\n            let bindingStartLine = startLine;\n            let bindingStartColumn = startColumn;\n            for (let i = 1; i < binding.length; i++) {\n                const expRange = binding[i];\n                bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);\n                bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);\n                encodeInteger(writer, expRange[0], 0);\n            }\n        }\n    }\n    for (index++; index < ranges.length;) {\n        const next = ranges[index];\n        const { 0: l, 1: c } = next;\n        if (l > endLine || (l === endLine && c >= endColumn)) {\n            break;\n        }\n        index = _encodeGeneratedRanges(ranges, index, writer, state);\n    }\n    if (state[0] < endLine) {\n        catchupLine(writer, state[0], endLine);\n        state[0] = endLine;\n        state[1] = 0;\n    }\n    else {\n        writer.write(comma);\n    }\n    state[1] = encodeInteger(writer, endColumn, state[1]);\n    return index;\n}\nfunction catchupLine(writer, lastLine, line) {\n    do {\n        writer.write(semicolon);\n    } while (++lastLine < line);\n}\n\nfunction decode(mappings) {\n    const { length } = mappings;\n    const reader = new StringReader(mappings);\n    const decoded = [];\n    let genColumn = 0;\n    let sourcesIndex = 0;\n    let sourceLine = 0;\n    let sourceColumn = 0;\n    let namesIndex = 0;\n    do {\n        const semi = reader.indexOf(';');\n        const line = [];\n        let sorted = true;\n        let lastCol = 0;\n        genColumn = 0;\n        while (reader.pos < semi) {\n            let seg;\n            genColumn = decodeInteger(reader, genColumn);\n            if (genColumn < lastCol)\n                sorted = false;\n            lastCol = genColumn;\n            if (hasMoreVlq(reader, semi)) {\n                sourcesIndex = decodeInteger(reader, sourcesIndex);\n                sourceLine = decodeInteger(reader, sourceLine);\n                sourceColumn = decodeInteger(reader, sourceColumn);\n                if (hasMoreVlq(reader, semi)) {\n                    namesIndex = decodeInteger(reader, namesIndex);\n                    seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];\n                }\n                else {\n                    seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];\n                }\n            }\n            else {\n                seg = [genColumn];\n            }\n            line.push(seg);\n            reader.pos++;\n        }\n        if (!sorted)\n            sort(line);\n        decoded.push(line);\n        reader.pos = semi + 1;\n    } while (reader.pos <= length);\n    return decoded;\n}\nfunction sort(line) {\n    line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n    return a[0] - b[0];\n}\nfunction encode(decoded) {\n    const writer = new StringWriter();\n    let sourcesIndex = 0;\n    let sourceLine = 0;\n    let sourceColumn = 0;\n    let namesIndex = 0;\n    for (let i = 0; i < decoded.length; i++) {\n        const line = decoded[i];\n        if (i > 0)\n            writer.write(semicolon);\n        if (line.length === 0)\n            continue;\n        let genColumn = 0;\n        for (let j = 0; j < line.length; j++) {\n            const segment = line[j];\n            if (j > 0)\n                writer.write(comma);\n            genColumn = encodeInteger(writer, segment[0], genColumn);\n            if (segment.length === 1)\n                continue;\n            sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);\n            sourceLine = encodeInteger(writer, segment[2], sourceLine);\n            sourceColumn = encodeInteger(writer, segment[3], sourceColumn);\n            if (segment.length === 4)\n                continue;\n            namesIndex = encodeInteger(writer, segment[4], namesIndex);\n        }\n    }\n    return writer.flush();\n}\n\nexport { decode, decodeGeneratedRanges, decodeOriginalScopes, encode, encodeGeneratedRanges, encodeOriginalScopes };\n//# sourceMappingURL=sourcemap-codec.mjs.map\n","import { encode } from '@jridgewell/sourcemap-codec';\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\treset() {\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\t\tif (this.edited) {\n\t\t\tthis.content = this.original;\n\t\t\tthis.storeName = false;\n\t\t\tthis.edited = false;\n\t\t}\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// after split we should save the edit content record into the correct chunk\n\t\t\t// to make sure sourcemap correct\n\t\t\t// For example:\n\t\t\t// '  test'.trim()\n\t\t\t//     split   -> '  ' + 'test'\n\t\t\t//   ✔️ edit    -> '' + 'test'\n\t\t\t//   ✖️ edit    -> 'test' + ''\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tthis.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tconst newChunk = this.split(this.end - trimmed.length);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tnewChunk.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa() {\n\tif (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {\n\t\treturn (str) => globalThis.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t}\n\t\tif (typeof properties.debugId !== 'undefined') {\n\t\t\tthis.debugId = properties.debugId;\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nconst wordRegex = /\\w/;\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst contentLengthMinusOne = content.length - 1;\n\t\t\tlet contentLineEnd = content.indexOf('\\n', 0);\n\t\t\tlet previousContentLineEnd = -1;\n\t\t\t// Loop through each line in the content and add a segment, but stop if the last line is empty,\n\t\t\t// else code afterwards would fill one line too many\n\t\t\twhile (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {\n\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\t\tif (nameIndex >= 0) {\n\t\t\t\t\tsegment.push(nameIndex);\n\t\t\t\t}\n\t\t\t\tthis.rawSegments.push(segment);\n\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\n\t\t\t\tpreviousContentLineEnd = contentLineEnd;\n\t\t\t\tcontentLineEnd = content.indexOf('\\n', contentLineEnd + 1);\n\t\t\t}\n\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\n\t\t\tthis.advance(content.slice(previousContentLineEnd + 1));\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t\tthis.advance(content);\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\t\t// when iterating each char, check if it's in a word boundary\n\t\tlet charInHiresBoundary = false;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t\tcharInHiresBoundary = false;\n\t\t\t} else {\n\t\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\n\t\t\t\t\tif (this.hires === 'boundary') {\n\t\t\t\t\t\t// in hires \"boundary\", group segments per word boundary than per char\n\t\t\t\t\t\tif (wordRegex.test(original[originalCharIndex])) {\n\t\t\t\t\t\t\t// for first char in the boundary found, start the boundary by pushing a segment\n\t\t\t\t\t\t\tif (!charInHiresBoundary) {\n\t\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\t\tcharInHiresBoundary = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// for non-word char, end the boundary by pushing a segment\n\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\tcharInHiresBoundary = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t\tignoreList: { writable: true, value: options.ignoreList },\n\t\t\toffset: { writable: true, value: options.offset || 0 },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: [\n\t\t\t\toptions.source ? getRelativePath(options.file || '', options.source) : options.file || '',\n\t\t\t],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : undefined,\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)',\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',\n\t\t\t);\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',\n\t\t\t);\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\t\tindex = index + this.offset;\n\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead',\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',\n\t\t\t\t);\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\treset(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.reset();\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length - this.offset) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`,\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null) {\n\t\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null) {\n\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tconst previous = original.slice(index, index + stringLength);\n\t\t\tif (previous !== replacement) this.overwrite(index, index + stringLength, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument',\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`',\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'ignoreList', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tlet x_google_ignoreList = undefined;\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\n\t\t\tif (source.ignoreList && sourceIndex !== -1) {\n\t\t\t\tif (x_google_ignoreList === undefined) {\n\t\t\t\t\tx_google_ignoreList = [];\n\t\t\t\t}\n\t\t\t\tx_google_ignoreList.push(sourceIndex);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length,\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nexport { Bundle, SourceMap, MagicString as default };\n//# sourceMappingURL=magic-string.es.mjs.map\n","import assert from \"node:assert\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport MagicString from \"magic-string\";\nimport * as vite from \"vite\";\nimport { cleanUrl, createPlugin } from \"../utils\";\n\n/**\n * Plugin to support additional module types (`CompiledWasm`, `Data` and `Text`)\n */\nexport const additionalModulesPlugin = createPlugin(\n\t\"additional-modules\",\n\t(ctx) => {\n\t\tconst additionalModulePaths = new Set<string>();\n\n\t\treturn {\n\t\t\t// We set `enforce: \"pre\"` so that this plugin runs before the Vite core plugins.\n\t\t\t// Otherwise the `vite:wasm-fallback` plugin prevents the `.wasm` extension being used for module imports.\n\t\t\tenforce: \"pre\",\n\t\t\tapplyToEnvironment(environment) {\n\t\t\t\treturn ctx.getWorkerConfig(environment.name) !== undefined;\n\t\t\t},\n\t\t\tresolveId: {\n\t\t\t\tfilter: { id: moduleRuleFilters },\n\t\t\t\tasync handler(source, importer, options) {\n\t\t\t\t\tconst resolved = await this.resolve(source, importer, options);\n\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst additionalModuleType = matchAdditionalModule(resolved.id);\n\n\t\t\t\t\tif (!additionalModuleType) {\n\t\t\t\t\t\treturn resolved;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Strip query params from the resolved path\n\t\t\t\t\tconst filePath = cleanUrl(resolved.id);\n\n\t\t\t\t\t// Add the path to the additional module so that we can identify the module in the `hotUpdate` hook\n\t\t\t\t\tadditionalModulePaths.add(filePath);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\texternal: true,\n\t\t\t\t\t\tid: createModuleReference(additionalModuleType, filePath),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\thotUpdate(options) {\n\t\t\t\tif (additionalModulePaths.has(options.file)) {\n\t\t\t\t\tvoid options.server.restart();\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t\trenderChunk: {\n\t\t\t\tfilter: { code: { include: additionalModuleRE } },\n\t\t\t\tasync handler(code, chunk) {\n\t\t\t\t\tconst matches = code.matchAll(additionalModuleGlobalRE);\n\t\t\t\t\tlet magicString: MagicString | undefined;\n\n\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\tmagicString ??= new MagicString(code);\n\t\t\t\t\t\tconst [full, _, modulePath] = match;\n\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tmodulePath,\n\t\t\t\t\t\t\t`Unexpected error: module path not found in reference ${full}.`\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlet source: Buffer;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tsource = await fsp.readFile(modulePath);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Import \"${modulePath}\" not found. Does the file exist?`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst referenceId = this.emitFile({\n\t\t\t\t\t\t\ttype: \"asset\",\n\t\t\t\t\t\t\tname: path.basename(modulePath),\n\t\t\t\t\t\t\toriginalFileName: modulePath,\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst emittedFileName = this.getFileName(referenceId);\n\t\t\t\t\t\tconst relativePath = vite.normalizePath(\n\t\t\t\t\t\t\tpath.relative(path.dirname(chunk.fileName), emittedFileName)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst importPath = relativePath.startsWith(\".\")\n\t\t\t\t\t\t\t? relativePath\n\t\t\t\t\t\t\t: `./${relativePath}`;\n\n\t\t\t\t\t\tmagicString.update(\n\t\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\t\tmatch.index + full.length,\n\t\t\t\t\t\t\timportPath\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (magicString) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcode: magicString.toString(),\n\t\t\t\t\t\t\tmap: this.environment.config.build.sourcemap\n\t\t\t\t\t\t\t\t? magicString.generateMap({ hires: \"boundary\" })\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n);\n\nconst ADDITIONAL_MODULE_TYPES = [\"CompiledWasm\", \"Data\", \"Text\"] as const;\ntype AdditionalModuleType = (typeof ADDITIONAL_MODULE_TYPES)[number];\n\nconst ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join(\"|\")})__(.*?)__CLOUDFLARE_MODULE__`;\nexport const additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);\nconst additionalModuleGlobalRE = new RegExp(ADDITIONAL_MODULE_PATTERN, \"g\");\n\ntype ModuleRules = Array<{\n\ttype: AdditionalModuleType;\n\tpattern: RegExp;\n}>;\n\nconst moduleRules: ModuleRules = [\n\t{ type: \"CompiledWasm\", pattern: /\\.wasm(\\?module)?$/ },\n\t{ type: \"Data\", pattern: /\\.bin$/ },\n\t{ type: \"Text\", pattern: /\\.(txt|html|sql)$/ },\n];\n\nconst subpathImportRE = /^#/;\nconst moduleRuleFilters = [\n\t...moduleRules.map((rule) => rule.pattern),\n\tsubpathImportRE,\n];\n\nfunction matchAdditionalModule(source: string) {\n\tfor (const rule of moduleRules) {\n\t\tif (rule.pattern.test(source)) {\n\t\t\treturn rule.type;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction createModuleReference(type: AdditionalModuleType, id: string) {\n\treturn `__CLOUDFLARE_MODULE__${type}__${id}__CLOUDFLARE_MODULE__`;\n}\n","import { relative } from \"node:path\";\nimport {\n\tHEADERS_VERSION,\n\tPLACEHOLDER_REGEX,\n\tREDIRECTS_VERSION,\n\tSPLAT_REGEX,\n} from \"./constants\";\nimport type {\n\tAssetConfig,\n\tMetadataHeaders,\n\tMetadataRedirects,\n\tMetadataStaticRedirects,\n} from \"../types\";\nimport type { Logger, ParsedHeaders, ParsedRedirects } from \"./types\";\n\nexport function constructRedirects({\n\tredirects,\n\tredirectsFile,\n\tlogger,\n}: {\n\tredirects?: ParsedRedirects;\n\tredirectsFile?: string;\n\tlogger: Logger;\n}): Pick<AssetConfig, \"redirects\"> {\n\tif (!redirects) {\n\t\treturn {};\n\t}\n\n\tconst num_valid = redirects.rules.length;\n\tconst num_invalid = redirects.invalid.length;\n\n\t// exhaustive check, since we could not have parsed `redirects` out of\n\t// a non-existing redirects file\n\tconst redirectsRelativePath = redirectsFile\n\t\t? relative(process.cwd(), redirectsFile)\n\t\t: \"\";\n\n\tlogger.log(\n\t\t`✨ Parsed ${num_valid} valid redirect rule${num_valid === 1 ? \"\" : \"s\"}.`\n\t);\n\n\tif (num_invalid > 0) {\n\t\tlet invalidRedirectRulesList = ``;\n\n\t\tfor (const { line, lineNumber, message } of redirects.invalid) {\n\t\t\tinvalidRedirectRulesList += `▶︎ ${message}\\n`;\n\n\t\t\tif (line) {\n\t\t\t\tinvalidRedirectRulesList += `    at ${redirectsRelativePath}${lineNumber ? `:${lineNumber}` : \"\"} | ${line}\\n\\n`;\n\t\t\t}\n\t\t}\n\n\t\tlogger.warn(\n\t\t\t`Found ${num_invalid} invalid redirect rule${num_invalid === 1 ? \"\" : \"s\"}:\\n` +\n\t\t\t\t`${invalidRedirectRulesList}`\n\t\t);\n\t}\n\n\t/* Better to return no Redirects object at all than one with empty rules */\n\tif (num_valid === 0) {\n\t\treturn {};\n\t}\n\n\tconst staticRedirects: MetadataStaticRedirects = {};\n\tconst dynamicRedirects: MetadataRedirects = {};\n\tlet canCreateStaticRule = true;\n\tfor (const rule of redirects.rules) {\n\t\tif (!rule.from.match(SPLAT_REGEX) && !rule.from.match(PLACEHOLDER_REGEX)) {\n\t\t\tif (canCreateStaticRule) {\n\t\t\t\tstaticRedirects[rule.from] = {\n\t\t\t\t\tstatus: rule.status,\n\t\t\t\t\tto: rule.to,\n\t\t\t\t\tlineNumber: rule.lineNumber,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tlogger.info(\n\t\t\t\t\t`The redirect rule ${rule.from} → ${rule.status} ${rule.to} could be made more performant by bringing it above any lines with splats or placeholders.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tdynamicRedirects[rule.from] = { status: rule.status, to: rule.to };\n\t\tcanCreateStaticRule = false;\n\t}\n\n\treturn {\n\t\tredirects: {\n\t\t\tversion: REDIRECTS_VERSION,\n\t\t\tstaticRules: staticRedirects,\n\t\t\trules: dynamicRedirects,\n\t\t},\n\t};\n}\n\nexport function constructHeaders({\n\theaders,\n\theadersFile,\n\tlogger,\n}: {\n\theaders?: ParsedHeaders;\n\theadersFile?: string;\n\tlogger: Logger;\n}): Pick<AssetConfig, \"headers\"> {\n\tif (!headers) {\n\t\treturn {};\n\t}\n\n\tconst num_valid = headers.rules.length;\n\tconst num_invalid = headers.invalid.length;\n\n\t// exhaustive check, since we could not have parsed `headers` out of\n\t// a non-existing headers file\n\tconst headersRelativePath = headersFile\n\t\t? relative(process.cwd(), headersFile)\n\t\t: \"\";\n\n\tlogger.log(\n\t\t`✨ Parsed ${num_valid} valid header rule${num_valid === 1 ? \"\" : \"s\"}.`\n\t);\n\n\tif (num_invalid > 0) {\n\t\tlet invalidHeaderRulesList = ``;\n\n\t\tfor (const { line, lineNumber, message } of headers.invalid) {\n\t\t\tinvalidHeaderRulesList += `▶︎ ${message}\\n`;\n\n\t\t\tif (line) {\n\t\t\t\tinvalidHeaderRulesList += `    at ${headersRelativePath}${lineNumber ? `:${lineNumber}` : \"\"} | ${line}\\n\\n`;\n\t\t\t}\n\t\t}\n\n\t\tlogger.warn(\n\t\t\t`Found ${num_invalid} invalid header rule${num_invalid === 1 ? \"\" : \"s\"}:\\n` +\n\t\t\t\t`${invalidHeaderRulesList}`\n\t\t);\n\t}\n\n\t/* Better to return no Headers object at all than one with empty rules */\n\tif (num_valid === 0) {\n\t\treturn {};\n\t}\n\n\tconst rules: MetadataHeaders = {};\n\tfor (const rule of headers.rules) {\n\t\tconst configuredRule: MetadataHeaders[string] = {};\n\n\t\tif (Object.keys(rule.headers).length) {\n\t\t\tconfiguredRule.set = rule.headers;\n\t\t}\n\t\tif (rule.unsetHeaders.length) {\n\t\t\tconfiguredRule.unset = rule.unsetHeaders;\n\t\t}\n\n\t\trules[rule.path] = configuredRule;\n\t}\n\n\treturn {\n\t\theaders: {\n\t\t\tversion: HEADERS_VERSION,\n\t\t\trules,\n\t\t},\n\t};\n}\n","export const extractPathname = (\n\tpath = \"/\",\n\tincludeSearch: boolean,\n\tincludeHash: boolean\n): string => {\n\tif (!path.startsWith(\"/\")) {\n\t\tpath = `/${path}`;\n\t}\n\tconst url = new URL(`//${path}`, \"relative://\");\n\treturn `${url.pathname}${includeSearch ? url.search : \"\"}${\n\t\tincludeHash ? url.hash : \"\"\n\t}`;\n};\n\nconst URL_REGEX = /^https:\\/\\/+(?<host>[^/]+)\\/?(?<path>.*)/;\nconst HOST_WITH_PORT_REGEX = /.*:\\d+$/;\nconst PATH_REGEX = /^\\//;\n\nexport const validateUrl = (\n\ttoken: string,\n\tonlyRelative = false,\n\tdisallowPorts = false,\n\tincludeSearch = false,\n\tincludeHash = false\n): [undefined, string] | [string, undefined] => {\n\tconst host = URL_REGEX.exec(token);\n\tif (host && host.groups && host.groups.host) {\n\t\tif (onlyRelative) {\n\t\t\treturn [\n\t\t\t\tundefined,\n\t\t\t\t`Only relative URLs are allowed. Skipping absolute URL ${token}.`,\n\t\t\t];\n\t\t}\n\n\t\tif (disallowPorts && host.groups.host.match(HOST_WITH_PORT_REGEX)) {\n\t\t\treturn [\n\t\t\t\tundefined,\n\t\t\t\t`Specifying ports is not supported. Skipping absolute URL ${token}.`,\n\t\t\t];\n\t\t}\n\n\t\treturn [\n\t\t\t`https://${host.groups.host}${extractPathname(\n\t\t\t\thost.groups.path,\n\t\t\t\tincludeSearch,\n\t\t\t\tincludeHash\n\t\t\t)}`,\n\t\t\tundefined,\n\t\t];\n\t} else {\n\t\tif (!token.startsWith(\"/\") && onlyRelative) {\n\t\t\ttoken = `/${token}`;\n\t\t}\n\n\t\tconst path = PATH_REGEX.exec(token);\n\t\tif (path) {\n\t\t\ttry {\n\t\t\t\treturn [extractPathname(token, includeSearch, includeHash), undefined];\n\t\t\t} catch {\n\t\t\t\treturn [undefined, `Error parsing URL segment ${token}. Skipping.`];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [\n\t\tundefined,\n\t\tonlyRelative\n\t\t\t? \"URLs should begin with a forward-slash.\"\n\t\t\t: 'URLs should either be relative (e.g. begin with a forward-slash), or use HTTPS (e.g. begin with \"https://\").',\n\t];\n};\n\nexport function urlHasHost(token: string): boolean {\n\tconst host = URL_REGEX.exec(token);\n\treturn Boolean(host && host.groups && host.groups.host);\n}\n","import {\n\tHEADER_SEPARATOR,\n\tMAX_HEADER_RULES,\n\tMAX_LINE_LENGTH,\n\tSPLAT_REGEX,\n\tUNSET_OPERATOR,\n} from \"./constants\";\nimport { validateUrl } from \"./validateURL\";\nimport type { HeadersRule, InvalidHeadersRule, ParsedHeaders } from \"./types\";\n\n// Not strictly necessary to check for all protocols-like beginnings, since _technically_ that could be a legit header (e.g. name=http, value=://I'm a value).\n// But we're checking here since some people might be caught out and it'll help 99.9% of people who get it wrong.\n// We do the proper validation in `validateUrl` anyway :)\nconst LINE_IS_PROBABLY_A_PATH = new RegExp(/^([^\\s]+:\\/\\/|^\\/)/);\n\nexport function parseHeaders(\n\tinput: string,\n\t{\n\t\tmaxRules = MAX_HEADER_RULES,\n\t\tmaxLineLength = MAX_LINE_LENGTH,\n\t}: { maxRules?: number; maxLineLength?: number } = {}\n): ParsedHeaders {\n\tconst lines = input.split(\"\\n\");\n\tconst rules: HeadersRule[] = [];\n\tconst invalid: InvalidHeadersRule[] = [];\n\n\tlet rule: (HeadersRule & { line: string }) | undefined = undefined;\n\t// When a path line is rejected (invalid URL, multiple wildcards, etc.),\n\t// we silently skip subsequent header lines until the next path line\n\t// rather than emitting confusing \"Path should come before header\" errors.\n\tlet skipUntilNextPath = false;\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = (lines[i] || \"\").trim();\n\t\tif (line.length === 0 || line.startsWith(\"#\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.length > maxLineLength) {\n\t\t\tinvalid.push({\n\t\t\t\tmessage: `Ignoring line ${\n\t\t\t\t\ti + 1\n\t\t\t\t} as it exceeds the maximum allowed length of ${maxLineLength}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (LINE_IS_PROBABLY_A_PATH.test(line)) {\n\t\t\tskipUntilNextPath = false;\n\n\t\t\tif (rules.length >= maxRules) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tmessage: `Maximum number of rules supported is ${maxRules}. Skipping remaining ${\n\t\t\t\t\t\tlines.length - i\n\t\t\t\t\t} lines of file.`,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (rule) {\n\t\t\t\tif (isValidRule(rule)) {\n\t\t\t\t\trules.push({\n\t\t\t\t\t\tpath: rule.path,\n\t\t\t\t\t\theaders: rule.headers,\n\t\t\t\t\t\tunsetHeaders: rule.unsetHeaders,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tinvalid.push({\n\t\t\t\t\t\tline: rule.line,\n\t\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\t\tmessage: \"No headers specified\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst [path, pathError] = validateUrl(line, false, true);\n\t\t\tif (pathError) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tline,\n\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\tmessage: pathError,\n\t\t\t\t});\n\t\t\t\trule = undefined;\n\t\t\t\tskipUntilNextPath = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst wildcardError = validateNoMultipleWildcards(path as string);\n\t\t\tif (wildcardError) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tline,\n\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\tmessage: wildcardError,\n\t\t\t\t});\n\t\t\t\trule = undefined;\n\t\t\t\tskipUntilNextPath = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trule = {\n\t\t\t\tpath: path as string,\n\t\t\t\tline,\n\t\t\t\theaders: {},\n\t\t\t\tunsetHeaders: [],\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (skipUntilNextPath) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!line.includes(HEADER_SEPARATOR)) {\n\t\t\tif (!rule) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tline,\n\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\tmessage: \"Expected a path beginning with at least one forward-slash\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (line.trim().startsWith(UNSET_OPERATOR)) {\n\t\t\t\t\trule.unsetHeaders.push(line.trim().replace(UNSET_OPERATOR, \"\"));\n\t\t\t\t} else {\n\t\t\t\t\tinvalid.push({\n\t\t\t\t\t\tline,\n\t\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Expected a colon-separated header pair (e.g. name: value)\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [rawName, ...rawValue] = line.split(HEADER_SEPARATOR);\n\t\tconst name = (rawName || \"\").trim().toLowerCase();\n\n\t\tif (name.includes(\" \")) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: \"Header name cannot include spaces\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst value = rawValue.join(HEADER_SEPARATOR).trim();\n\n\t\tif (name === \"\") {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: \"No header name specified\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (value === \"\") {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: \"No header value specified\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!rule) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: `Path should come before header (${name}: ${value})`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst existingValues = rule.headers[name];\n\t\trule.headers[name] = existingValues ? `${existingValues}, ${value}` : value;\n\t}\n\n\tif (rule) {\n\t\tif (isValidRule(rule)) {\n\t\t\trules.push({\n\t\t\t\tpath: rule.path,\n\t\t\t\theaders: rule.headers,\n\t\t\t\tunsetHeaders: rule.unsetHeaders,\n\t\t\t});\n\t\t} else {\n\t\t\tinvalid.push({ line: rule.line, message: \"No headers specified\" });\n\t\t}\n\t}\n\n\treturn {\n\t\trules,\n\t\tinvalid,\n\t};\n}\n\nfunction isValidRule(rule: HeadersRule) {\n\treturn Object.keys(rule.headers).length > 0 || rule.unsetHeaders.length > 0;\n}\n\n/**\n * At runtime, `*` wildcards are converted to `:splat` placeholders. This means\n * a path with multiple wildcards, or a wildcard combined with an explicit\n * `:splat` placeholder, would result in duplicate `:splat` parameters which is\n * unsupported.\n */\nfunction validateNoMultipleWildcards(path: string): string | undefined {\n\tconst wildcardCount = (path.match(SPLAT_REGEX) ?? []).length;\n\tconst hasSplatPlaceholder = /:splat(?!\\w)/.test(path);\n\n\tif (wildcardCount > 1) {\n\t\treturn `Only one wildcard is allowed per rule. Use a named placeholder (e.g. :project) instead. Skipping ${path}.`;\n\t}\n\n\tif (wildcardCount > 0 && hasSplatPlaceholder) {\n\t\treturn `Cannot combine a wildcard * with a :splat placeholder because wildcards are converted to :splat at runtime. Skipping ${path}.`;\n\t}\n\n\treturn undefined;\n}\n","import {\n\tMAX_DYNAMIC_REDIRECT_RULES,\n\tMAX_LINE_LENGTH,\n\tMAX_STATIC_REDIRECT_RULES,\n\tPERMITTED_STATUS_CODES,\n\tPLACEHOLDER_REGEX,\n\tSPLAT_REGEX,\n} from \"./constants\";\nimport { urlHasHost, validateUrl } from \"./validateURL\";\nimport type { AssetConfig } from \"../types\";\nimport type {\n\tInvalidRedirectRule,\n\tParsedRedirects,\n\tRedirectLine,\n\tRedirectRule,\n} from \"./types\";\n\nexport function parseRedirects(\n\tinput: string,\n\t{\n\t\thtmlHandling = undefined,\n\t\tmaxStaticRules = MAX_STATIC_REDIRECT_RULES,\n\t\tmaxDynamicRules = MAX_DYNAMIC_REDIRECT_RULES,\n\t\tmaxLineLength = MAX_LINE_LENGTH,\n\t}: {\n\t\thtmlHandling?: AssetConfig[\"html_handling\"];\n\t\tmaxStaticRules?: number;\n\t\tmaxDynamicRules?: number;\n\t\tmaxLineLength?: number;\n\t} = {}\n): ParsedRedirects {\n\tconst lines = input.split(\"\\n\");\n\tconst rules: RedirectRule[] = [];\n\tconst seen_paths = new Set<string>();\n\tconst invalid: InvalidRedirectRule[] = [];\n\n\tlet staticRules = 0;\n\tlet dynamicRules = 0;\n\tlet canCreateStaticRule = true;\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = (lines[i] || \"\").trim();\n\t\tif (line.length === 0 || line.startsWith(\"#\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.length > maxLineLength) {\n\t\t\tinvalid.push({\n\t\t\t\tmessage: `Ignoring line ${\n\t\t\t\t\ti + 1\n\t\t\t\t} as it exceeds the maximum allowed length of ${maxLineLength}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle inline comments: strip off from the first `#` token that starts a comment, but not URL fragments.\n\t\t// This allows `/a /b#fragment` but strips `/a /b # comment`\n\t\tconst tokens = line.replace(/\\s+#.*$/, \"\").split(/\\s+/);\n\n\t\tif (tokens.length < 2 || tokens.length > 3) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: `Expected exactly 2 or 3 whitespace-separated tokens. Got ${tokens.length}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [str_from, str_to, str_status = \"302\"] = tokens as RedirectLine;\n\n\t\tconst fromResult = validateUrl(str_from, true, true, false, false);\n\t\tif (fromResult[0] === undefined) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: fromResult[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst from = fromResult[0];\n\n\t\tif (\n\t\t\tcanCreateStaticRule &&\n\t\t\t!from.match(SPLAT_REGEX) &&\n\t\t\t!from.match(PLACEHOLDER_REGEX)\n\t\t) {\n\t\t\tstaticRules += 1;\n\n\t\t\tif (staticRules > maxStaticRules) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tmessage: `Maximum number of static rules supported is ${maxStaticRules}. Skipping line.`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} else {\n\t\t\tdynamicRules += 1;\n\t\t\tcanCreateStaticRule = false;\n\n\t\t\tif (dynamicRules > maxDynamicRules) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tmessage: `Maximum number of dynamic rules supported is ${maxDynamicRules}. Skipping remaining ${\n\t\t\t\t\t\tlines.length - i\n\t\t\t\t\t} lines of file.`,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst toResult = validateUrl(str_to, false, false, true, true);\n\t\tif (toResult[0] === undefined) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: toResult[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst to = toResult[0];\n\n\t\tconst status = Number(str_status);\n\t\tif (isNaN(status) || !PERMITTED_STATUS_CODES.has(status)) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: `Valid status codes are 200, 301, 302 (default), 303, 307, or 308. Got ${str_status}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Here we reject two patterns:\n\t\t// 1. `/* /index.html` Is always rejected.\n\t\t// 2. `/ /index` Is rejected when HTML handling is enabled.\n\t\t// Allowing the redirect in other cases will cause TOO_MANY_REDIRECTS errors as the asset Worker will\n\t\t// redirect it back to `/` by removing the `/index.html`.\n\t\t// We only want to run this on relative URLs.\n\t\tconst hasRelativePath = !urlHasHost(to);\n\t\tconst hasWildcardToIndex =\n\t\t\tfrom.endsWith(\"/*\") && /\\/index(.html)?$/.test(to);\n\t\tconst hasRootToIndex = from.endsWith(\"/\") && /\\/index(.html)?$/.test(to);\n\t\tconst hasHTMLHandling = htmlHandling !== \"none\"; // HTML handling is enabled by default.\n\t\tif (\n\t\t\thasRelativePath &&\n\t\t\t(hasWildcardToIndex || (hasRootToIndex && hasHTMLHandling))\n\t\t) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Infinite loop detected in this rule and has been ignored. This will cause a redirect to strip `.html` or `/index` and end up triggering this rule again. Please fix or remove this rule to silence this warning.\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (seen_paths.has(from)) {\n\t\t\tinvalid.push({\n\t\t\t\tline,\n\t\t\t\tlineNumber: i + 1,\n\t\t\t\tmessage: `Ignoring duplicate rule for path ${from}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tseen_paths.add(from);\n\n\t\tif (status === 200) {\n\t\t\tif (urlHasHost(to)) {\n\t\t\t\tinvalid.push({\n\t\t\t\t\tline,\n\t\t\t\t\tlineNumber: i + 1,\n\t\t\t\t\tmessage: `Proxy (200) redirects can only point to relative paths. Got ${to}`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\trules.push({ from, to, status, lineNumber: i + 1 });\n\t}\n\n\treturn {\n\t\trules,\n\t\tinvalid,\n\t};\n}\n","// -- Constants for manifest encoding/decoding --\n// (header and tails are not currently being used for anything afaik)\n// NB these all refer to bytes\n\n/** Reserved header at the start of the whole manifest, NOT in each entry (currently unused)\n * manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ]\n */\nexport const HEADER_SIZE = 20;\n/** manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const PATH_HASH_SIZE = 16;\n/** manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const CONTENT_HASH_SIZE = 16;\n/** manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const TAIL_SIZE = 8;\n/** offset of PATH_HASH from start of each entry\n *  manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const PATH_HASH_OFFSET = 0;\n/** offset of CONTENT_HASH from start of each entry\n *  manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const CONTENT_HASH_OFFSET = PATH_HASH_SIZE;\n/** manifest = [HEADER, [ entry = PATH_HASH, CONTENT_HASH, TAIL], [entry], ... , [entry] ] */\nexport const ENTRY_SIZE = PATH_HASH_SIZE + CONTENT_HASH_SIZE + TAIL_SIZE;\n\n// -- Manifest creation constants --\n// used in wrangler dev and deploy\n/**\n * Maximum number of assets that can be deployed with a Worker; this is a global\n * ceiling, and may vary by the user's subscription.\n */\nexport const MAX_ASSET_COUNT = 100_000;\n/** Maximum size per asset that can be deployed with a Worker */\nexport const MAX_ASSET_SIZE = 25 * 1024 * 1024;\n\nexport const CF_ASSETS_IGNORE_FILENAME = \".assetsignore\";\nexport const REDIRECTS_FILENAME = \"_redirects\";\nexport const HEADERS_FILENAME = \"_headers\";\n","// A simple implementation of make-array\nfunction makeArray (subject) {\n  return Array.isArray(subject)\n    ? subject\n    : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n  TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n  Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n  REGEX_REGEXP_RANGE,\n  (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n    ? match\n    // Invalid range (out of order) which is ok for gitignore rules but\n    //   fatal for JavaScript regular expression, so eliminate it.\n    : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n  const {length} = slashes\n  return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// >  (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n//      you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n  [\n    // remove BOM\n    // TODO:\n    // Other similar zero-width characters?\n    /^\\uFEFF/,\n    () => EMPTY\n  ],\n\n  // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n  [\n    // (a\\ ) -> (a )\n    // (a  ) -> (a)\n    // (a \\ ) -> (a  )\n    /\\\\?\\s+$/,\n    match => match.indexOf('\\\\') === 0\n      ? SPACE\n      : EMPTY\n  ],\n\n  // replace (\\ ) with ' '\n  [\n    /\\\\\\s/g,\n    () => SPACE\n  ],\n\n  // Escape metacharacters\n  // which is written down by users but means special for regular expressions.\n\n  // > There are 12 characters with special meanings:\n  // > - the backslash \\,\n  // > - the caret ^,\n  // > - the dollar sign $,\n  // > - the period or dot .,\n  // > - the vertical bar or pipe symbol |,\n  // > - the question mark ?,\n  // > - the asterisk or star *,\n  // > - the plus sign +,\n  // > - the opening parenthesis (,\n  // > - the closing parenthesis ),\n  // > - and the opening square bracket [,\n  // > - the opening curly brace {,\n  // > These special characters are often called \"metacharacters\".\n  [\n    /[\\\\$.|*+(){^]/g,\n    match => `\\\\${match}`\n  ],\n\n  [\n    // > a question mark (?) matches a single character\n    /(?!\\\\)\\?/g,\n    () => '[^/]'\n  ],\n\n  // leading slash\n  [\n\n    // > A leading slash matches the beginning of the pathname.\n    // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n    // A leading slash matches the beginning of the pathname\n    /^\\//,\n    () => '^'\n  ],\n\n  // replace special metacharacter slash after the leading slash\n  [\n    /\\//g,\n    () => '\\\\/'\n  ],\n\n  [\n    // > A leading \"**\" followed by a slash means match in all directories.\n    // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n    // > the same as pattern \"foo\".\n    // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n    // >   under directory \"foo\".\n    // Notice that the '*'s have been replaced as '\\\\*'\n    /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n    // '**/foo' <-> 'foo'\n    () => '^(?:.*\\\\/)?'\n  ],\n\n  // starting\n  [\n    // there will be no leading '/'\n    //   (which has been replaced by section \"leading slash\")\n    // If starts with '**', adding a '^' to the regular expression also works\n    /^(?=[^^])/,\n    function startingReplacer () {\n      // If has a slash `/` at the beginning or middle\n      return !/\\/(?!$)/.test(this)\n        // > Prior to 2.22.1\n        // > If the pattern does not contain a slash /,\n        // >   Git treats it as a shell glob pattern\n        // Actually, if there is only a trailing slash,\n        //   git also treats it as a shell glob pattern\n\n        // After 2.22.1 (compatible but clearer)\n        // > If there is a separator at the beginning or middle (or both)\n        // > of the pattern, then the pattern is relative to the directory\n        // > level of the particular .gitignore file itself.\n        // > Otherwise the pattern may also match at any level below\n        // > the .gitignore level.\n        ? '(?:^|\\\\/)'\n\n        // > Otherwise, Git treats the pattern as a shell glob suitable for\n        // >   consumption by fnmatch(3)\n        : '^'\n    }\n  ],\n\n  // two globstars\n  [\n    // Use lookahead assertions so that we could match more than one `'/**'`\n    /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n    // Zero, one or several directories\n    // should not use '*', or it will be replaced by the next replacer\n\n    // Check if it is not the last `'/**'`\n    (_, index, str) => index + 6 < str.length\n\n      // case: /**/\n      // > A slash followed by two consecutive asterisks then a slash matches\n      // >   zero or more directories.\n      // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n      // '/**/'\n      ? '(?:\\\\/[^\\\\/]+)*'\n\n      // case: /**\n      // > A trailing `\"/**\"` matches everything inside.\n\n      // #21: everything inside but it should not include the current folder\n      : '\\\\/.+'\n  ],\n\n  // normal intermediate wildcards\n  [\n    // Never replace escaped '*'\n    // ignore rule '\\*' will match the path '*'\n\n    // 'abc.*/' -> go\n    // 'abc.*'  -> skip this rule,\n    //    coz trailing single wildcard will be handed by [trailing wildcard]\n    /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n    // '*.js' matches '.js'\n    // '*.js' doesn't match 'abc'\n    (_, p1, p2) => {\n      // 1.\n      // > An asterisk \"*\" matches anything except a slash.\n      // 2.\n      // > Other consecutive asterisks are considered regular asterisks\n      // > and will match according to the previous rules.\n      const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n      return p1 + unescaped\n    }\n  ],\n\n  [\n    // unescape, revert step 3 except for back slash\n    // For example, if a user escape a '\\\\*',\n    // after step 3, the result will be '\\\\\\\\\\\\*'\n    /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n    () => ESCAPE\n  ],\n\n  [\n    // '\\\\\\\\' -> '\\\\'\n    /\\\\\\\\/g,\n    () => ESCAPE\n  ],\n\n  [\n    // > The range notation, e.g. [a-zA-Z],\n    // > can be used to match one of the characters in a range.\n\n    // `\\` is escaped by step 3\n    /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n    (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n      // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n      ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n      : close === ']'\n        ? endEscape.length % 2 === 0\n          // A normal case, and it is a range notation\n          // '[bar]'\n          // '[bar\\\\\\\\]'\n          ? `[${sanitizeRange(range)}${endEscape}]`\n          // Invalid range notaton\n          // '[bar\\\\]' -> '[bar\\\\\\\\]'\n          : '[]'\n        : '[]'\n  ],\n\n  // ending\n  [\n    // 'js' will not match 'js.'\n    // 'ab' will not match 'abc'\n    /(?:[^*])$/,\n\n    // WTF!\n    // https://git-scm.com/docs/gitignore\n    // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n    // which re-fixes #24, #38\n\n    // > If there is a separator at the end of the pattern then the pattern\n    // > will only match directories, otherwise the pattern can match both\n    // > files and directories.\n\n    // 'js*' will not match 'a.js'\n    // 'js/' will not match 'a.js'\n    // 'js' will match 'a.js' and 'a.js/'\n    match => /\\/$/.test(match)\n      // foo/ will not match 'foo'\n      ? `${match}$`\n      // foo matches 'foo' and 'foo/'\n      : `${match}(?=$|\\\\/$)`\n  ],\n\n  // trailing wildcard\n  [\n    /(\\^|\\\\\\/)?\\\\\\*$/,\n    (_, p1) => {\n      const prefix = p1\n        // '\\^':\n        // '/*' does not match EMPTY\n        // '/*' does not match everything\n\n        // '\\\\\\/':\n        // 'abc/*' does not match 'abc/'\n        ? `${p1}[^/]+`\n\n        // 'a*' matches 'a'\n        // 'a*' matches 'aa'\n        : '[^/]*'\n\n      return `${prefix}(?=$|\\\\/$)`\n    }\n  ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n  let source = regexCache[pattern]\n\n  if (!source) {\n    source = REPLACERS.reduce(\n      (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n      pattern\n    )\n    regexCache[pattern] = source\n  }\n\n  return ignoreCase\n    ? new RegExp(source, 'i')\n    : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n  && isString(pattern)\n  && !REGEX_TEST_BLANK_LINE.test(pattern)\n  && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n  // > A line starting with # serves as a comment.\n  && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n  constructor (\n    origin,\n    pattern,\n    negative,\n    regex\n  ) {\n    this.origin = origin\n    this.pattern = pattern\n    this.negative = negative\n    this.regex = regex\n  }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n  const origin = pattern\n  let negative = false\n\n  // > An optional prefix \"!\" which negates the pattern;\n  if (pattern.indexOf('!') === 0) {\n    negative = true\n    pattern = pattern.substr(1)\n  }\n\n  pattern = pattern\n  // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n  // >   begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n  // > Put a backslash (\"\\\") in front of the first hash for patterns that\n  // >   begin with a hash.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n  const regex = makeRegex(pattern, ignoreCase)\n\n  return new IgnoreRule(\n    origin,\n    pattern,\n    negative,\n    regex\n  )\n}\n\nconst throwError = (message, Ctor) => {\n  throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n  if (!isString(path)) {\n    return doThrow(\n      `path must be a string, but got \\`${originalPath}\\``,\n      TypeError\n    )\n  }\n\n  // We don't know if we should ignore EMPTY, so throw\n  if (!path) {\n    return doThrow(`path must not be empty`, TypeError)\n  }\n\n  // Check if it is a relative path\n  if (checkPath.isNotRelative(path)) {\n    const r = '`path.relative()`d'\n    return doThrow(\n      `path should be a ${r} string, but got \"${originalPath}\"`,\n      RangeError\n    )\n  }\n\n  return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n  constructor ({\n    ignorecase = true,\n    ignoreCase = ignorecase,\n    allowRelativePaths = false\n  } = {}) {\n    define(this, KEY_IGNORE, true)\n\n    this._rules = []\n    this._ignoreCase = ignoreCase\n    this._allowRelativePaths = allowRelativePaths\n    this._initCache()\n  }\n\n  _initCache () {\n    this._ignoreCache = Object.create(null)\n    this._testCache = Object.create(null)\n  }\n\n  _addPattern (pattern) {\n    // #32\n    if (pattern && pattern[KEY_IGNORE]) {\n      this._rules = this._rules.concat(pattern._rules)\n      this._added = true\n      return\n    }\n\n    if (checkPattern(pattern)) {\n      const rule = createRule(pattern, this._ignoreCase)\n      this._added = true\n      this._rules.push(rule)\n    }\n  }\n\n  // @param {Array<string> | string | Ignore} pattern\n  add (pattern) {\n    this._added = false\n\n    makeArray(\n      isString(pattern)\n        ? splitPattern(pattern)\n        : pattern\n    ).forEach(this._addPattern, this)\n\n    // Some rules have just added to the ignore,\n    // making the behavior changed.\n    if (this._added) {\n      this._initCache()\n    }\n\n    return this\n  }\n\n  // legacy\n  addPattern (pattern) {\n    return this.add(pattern)\n  }\n\n  //          |           ignored : unignored\n  // negative |   0:0   |   0:1   |   1:0   |   1:1\n  // -------- | ------- | ------- | ------- | --------\n  //     0    |  TEST   |  TEST   |  SKIP   |    X\n  //     1    |  TESTIF |  SKIP   |  TEST   |    X\n\n  // - SKIP: always skip\n  // - TEST: always test\n  // - TESTIF: only test if checkUnignored\n  // - X: that never happen\n\n  // @param {boolean} whether should check if the path is unignored,\n  //   setting `checkUnignored` to `false` could reduce additional\n  //   path matching.\n\n  // @returns {TestResult} true if a file is ignored\n  _testOne (path, checkUnignored) {\n    let ignored = false\n    let unignored = false\n\n    this._rules.forEach(rule => {\n      const {negative} = rule\n      if (\n        unignored === negative && ignored !== unignored\n        || negative && !ignored && !unignored && !checkUnignored\n      ) {\n        return\n      }\n\n      const matched = rule.regex.test(path)\n\n      if (matched) {\n        ignored = !negative\n        unignored = negative\n      }\n    })\n\n    return {\n      ignored,\n      unignored\n    }\n  }\n\n  // @returns {TestResult}\n  _test (originalPath, cache, checkUnignored, slices) {\n    const path = originalPath\n      // Supports nullable path\n      && checkPath.convert(originalPath)\n\n    checkPath(\n      path,\n      originalPath,\n      this._allowRelativePaths\n        ? RETURN_FALSE\n        : throwError\n    )\n\n    return this._t(path, cache, checkUnignored, slices)\n  }\n\n  _t (path, cache, checkUnignored, slices) {\n    if (path in cache) {\n      return cache[path]\n    }\n\n    if (!slices) {\n      // path/to/a.js\n      // ['path', 'to', 'a.js']\n      slices = path.split(SLASH)\n    }\n\n    slices.pop()\n\n    // If the path has no parent directory, just test it\n    if (!slices.length) {\n      return cache[path] = this._testOne(path, checkUnignored)\n    }\n\n    const parent = this._t(\n      slices.join(SLASH) + SLASH,\n      cache,\n      checkUnignored,\n      slices\n    )\n\n    // If the path contains a parent directory, check the parent first\n    return cache[path] = parent.ignored\n      // > It is not possible to re-include a file if a parent directory of\n      // >   that file is excluded.\n      ? parent\n      : this._testOne(path, checkUnignored)\n  }\n\n  ignores (path) {\n    return this._test(path, this._ignoreCache, false).ignored\n  }\n\n  createFilter () {\n    return path => !this.ignores(path)\n  }\n\n  filter (paths) {\n    return makeArray(paths).filter(this.createFilter())\n  }\n\n  // @returns {TestResult}\n  test (path) {\n    return this._test(path, this._testCache, true)\n  }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n  checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n  // Detect `process` so that it can run in browsers.\n  typeof process !== 'undefined'\n  && (\n    process.env && process.env.IGNORE_TEST_WIN32\n    || process.platform === 'win32'\n  )\n) {\n  /* eslint no-control-regex: \"off\" */\n  const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n  || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n    ? str\n    : str.replace(/\\\\/g, '/')\n\n  checkPath.convert = makePosix\n\n  // 'C:\\\\foo'     <- 'C:\\\\foo' has been converted to 'C:/'\n  // 'd:\\\\foo'\n  const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n  checkPath.isNotRelative = path =>\n    REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n    || isNotRelative(path)\n}\n","const types = {\n    'application/prs.cww': ['cww'],\n    'application/prs.xsf+xml': ['xsf'],\n    'application/vnd.1000minds.decision-model+xml': ['1km'],\n    'application/vnd.3gpp.pic-bw-large': ['plb'],\n    'application/vnd.3gpp.pic-bw-small': ['psb'],\n    'application/vnd.3gpp.pic-bw-var': ['pvb'],\n    'application/vnd.3gpp2.tcap': ['tcap'],\n    'application/vnd.3m.post-it-notes': ['pwn'],\n    'application/vnd.accpac.simply.aso': ['aso'],\n    'application/vnd.accpac.simply.imp': ['imp'],\n    'application/vnd.acucobol': ['acu'],\n    'application/vnd.acucorp': ['atc', 'acutc'],\n    'application/vnd.adobe.air-application-installer-package+zip': ['air'],\n    'application/vnd.adobe.formscentral.fcdt': ['fcdt'],\n    'application/vnd.adobe.fxp': ['fxp', 'fxpl'],\n    'application/vnd.adobe.xdp+xml': ['xdp'],\n    'application/vnd.adobe.xfdf': ['*xfdf'],\n    'application/vnd.age': ['age'],\n    'application/vnd.ahead.space': ['ahead'],\n    'application/vnd.airzip.filesecure.azf': ['azf'],\n    'application/vnd.airzip.filesecure.azs': ['azs'],\n    'application/vnd.amazon.ebook': ['azw'],\n    'application/vnd.americandynamics.acc': ['acc'],\n    'application/vnd.amiga.ami': ['ami'],\n    'application/vnd.android.package-archive': ['apk'],\n    'application/vnd.anser-web-certificate-issue-initiation': ['cii'],\n    'application/vnd.anser-web-funds-transfer-initiation': ['fti'],\n    'application/vnd.antix.game-component': ['atx'],\n    'application/vnd.apple.installer+xml': ['mpkg'],\n    'application/vnd.apple.keynote': ['key'],\n    'application/vnd.apple.mpegurl': ['m3u8'],\n    'application/vnd.apple.numbers': ['numbers'],\n    'application/vnd.apple.pages': ['pages'],\n    'application/vnd.apple.pkpass': ['pkpass'],\n    'application/vnd.aristanetworks.swi': ['swi'],\n    'application/vnd.astraea-software.iota': ['iota'],\n    'application/vnd.audiograph': ['aep'],\n    'application/vnd.autodesk.fbx': ['fbx'],\n    'application/vnd.balsamiq.bmml+xml': ['bmml'],\n    'application/vnd.blueice.multipass': ['mpm'],\n    'application/vnd.bmi': ['bmi'],\n    'application/vnd.businessobjects': ['rep'],\n    'application/vnd.chemdraw+xml': ['cdxml'],\n    'application/vnd.chipnuts.karaoke-mmd': ['mmd'],\n    'application/vnd.cinderella': ['cdy'],\n    'application/vnd.citationstyles.style+xml': ['csl'],\n    'application/vnd.claymore': ['cla'],\n    'application/vnd.cloanto.rp9': ['rp9'],\n    'application/vnd.clonk.c4group': ['c4g', 'c4d', 'c4f', 'c4p', 'c4u'],\n    'application/vnd.cluetrust.cartomobile-config': ['c11amc'],\n    'application/vnd.cluetrust.cartomobile-config-pkg': ['c11amz'],\n    'application/vnd.commonspace': ['csp'],\n    'application/vnd.contact.cmsg': ['cdbcmsg'],\n    'application/vnd.cosmocaller': ['cmc'],\n    'application/vnd.crick.clicker': ['clkx'],\n    'application/vnd.crick.clicker.keyboard': ['clkk'],\n    'application/vnd.crick.clicker.palette': ['clkp'],\n    'application/vnd.crick.clicker.template': ['clkt'],\n    'application/vnd.crick.clicker.wordbank': ['clkw'],\n    'application/vnd.criticaltools.wbs+xml': ['wbs'],\n    'application/vnd.ctc-posml': ['pml'],\n    'application/vnd.cups-ppd': ['ppd'],\n    'application/vnd.curl.car': ['car'],\n    'application/vnd.curl.pcurl': ['pcurl'],\n    'application/vnd.dart': ['dart'],\n    'application/vnd.data-vision.rdz': ['rdz'],\n    'application/vnd.dbf': ['dbf'],\n    'application/vnd.dcmp+xml': ['dcmp'],\n    'application/vnd.dece.data': ['uvf', 'uvvf', 'uvd', 'uvvd'],\n    'application/vnd.dece.ttml+xml': ['uvt', 'uvvt'],\n    'application/vnd.dece.unspecified': ['uvx', 'uvvx'],\n    'application/vnd.dece.zip': ['uvz', 'uvvz'],\n    'application/vnd.denovo.fcselayout-link': ['fe_launch'],\n    'application/vnd.dna': ['dna'],\n    'application/vnd.dolby.mlp': ['mlp'],\n    'application/vnd.dpgraph': ['dpg'],\n    'application/vnd.dreamfactory': ['dfac'],\n    'application/vnd.ds-keypoint': ['kpxx'],\n    'application/vnd.dvb.ait': ['ait'],\n    'application/vnd.dvb.service': ['svc'],\n    'application/vnd.dynageo': ['geo'],\n    'application/vnd.ecowin.chart': ['mag'],\n    'application/vnd.enliven': ['nml'],\n    'application/vnd.epson.esf': ['esf'],\n    'application/vnd.epson.msf': ['msf'],\n    'application/vnd.epson.quickanime': ['qam'],\n    'application/vnd.epson.salt': ['slt'],\n    'application/vnd.epson.ssf': ['ssf'],\n    'application/vnd.eszigno3+xml': ['es3', 'et3'],\n    'application/vnd.ezpix-album': ['ez2'],\n    'application/vnd.ezpix-package': ['ez3'],\n    'application/vnd.fdf': ['*fdf'],\n    'application/vnd.fdsn.mseed': ['mseed'],\n    'application/vnd.fdsn.seed': ['seed', 'dataless'],\n    'application/vnd.flographit': ['gph'],\n    'application/vnd.fluxtime.clip': ['ftc'],\n    'application/vnd.framemaker': ['fm', 'frame', 'maker', 'book'],\n    'application/vnd.frogans.fnc': ['fnc'],\n    'application/vnd.frogans.ltf': ['ltf'],\n    'application/vnd.fsc.weblaunch': ['fsc'],\n    'application/vnd.fujitsu.oasys': ['oas'],\n    'application/vnd.fujitsu.oasys2': ['oa2'],\n    'application/vnd.fujitsu.oasys3': ['oa3'],\n    'application/vnd.fujitsu.oasysgp': ['fg5'],\n    'application/vnd.fujitsu.oasysprs': ['bh2'],\n    'application/vnd.fujixerox.ddd': ['ddd'],\n    'application/vnd.fujixerox.docuworks': ['xdw'],\n    'application/vnd.fujixerox.docuworks.binder': ['xbd'],\n    'application/vnd.fuzzysheet': ['fzs'],\n    'application/vnd.genomatix.tuxedo': ['txd'],\n    'application/vnd.geogebra.file': ['ggb'],\n    'application/vnd.geogebra.slides': ['ggs'],\n    'application/vnd.geogebra.tool': ['ggt'],\n    'application/vnd.geometry-explorer': ['gex', 'gre'],\n    'application/vnd.geonext': ['gxt'],\n    'application/vnd.geoplan': ['g2w'],\n    'application/vnd.geospace': ['g3w'],\n    'application/vnd.gmx': ['gmx'],\n    'application/vnd.google-apps.document': ['gdoc'],\n    'application/vnd.google-apps.drawing': ['gdraw'],\n    'application/vnd.google-apps.form': ['gform'],\n    'application/vnd.google-apps.jam': ['gjam'],\n    'application/vnd.google-apps.map': ['gmap'],\n    'application/vnd.google-apps.presentation': ['gslides'],\n    'application/vnd.google-apps.script': ['gscript'],\n    'application/vnd.google-apps.site': ['gsite'],\n    'application/vnd.google-apps.spreadsheet': ['gsheet'],\n    'application/vnd.google-earth.kml+xml': ['kml'],\n    'application/vnd.google-earth.kmz': ['kmz'],\n    'application/vnd.gov.sk.xmldatacontainer+xml': ['xdcf'],\n    'application/vnd.grafeq': ['gqf', 'gqs'],\n    'application/vnd.groove-account': ['gac'],\n    'application/vnd.groove-help': ['ghf'],\n    'application/vnd.groove-identity-message': ['gim'],\n    'application/vnd.groove-injector': ['grv'],\n    'application/vnd.groove-tool-message': ['gtm'],\n    'application/vnd.groove-tool-template': ['tpl'],\n    'application/vnd.groove-vcard': ['vcg'],\n    'application/vnd.hal+xml': ['hal'],\n    'application/vnd.handheld-entertainment+xml': ['zmm'],\n    'application/vnd.hbci': ['hbci'],\n    'application/vnd.hhe.lesson-player': ['les'],\n    'application/vnd.hp-hpgl': ['hpgl'],\n    'application/vnd.hp-hpid': ['hpid'],\n    'application/vnd.hp-hps': ['hps'],\n    'application/vnd.hp-jlyt': ['jlt'],\n    'application/vnd.hp-pcl': ['pcl'],\n    'application/vnd.hp-pclxl': ['pclxl'],\n    'application/vnd.hydrostatix.sof-data': ['sfd-hdstx'],\n    'application/vnd.ibm.minipay': ['mpy'],\n    'application/vnd.ibm.modcap': ['afp', 'listafp', 'list3820'],\n    'application/vnd.ibm.rights-management': ['irm'],\n    'application/vnd.ibm.secure-container': ['sc'],\n    'application/vnd.iccprofile': ['icc', 'icm'],\n    'application/vnd.igloader': ['igl'],\n    'application/vnd.immervision-ivp': ['ivp'],\n    'application/vnd.immervision-ivu': ['ivu'],\n    'application/vnd.insors.igm': ['igm'],\n    'application/vnd.intercon.formnet': ['xpw', 'xpx'],\n    'application/vnd.intergeo': ['i2g'],\n    'application/vnd.intu.qbo': ['qbo'],\n    'application/vnd.intu.qfx': ['qfx'],\n    'application/vnd.ipunplugged.rcprofile': ['rcprofile'],\n    'application/vnd.irepository.package+xml': ['irp'],\n    'application/vnd.is-xpr': ['xpr'],\n    'application/vnd.isac.fcs': ['fcs'],\n    'application/vnd.jam': ['jam'],\n    'application/vnd.jcp.javame.midlet-rms': ['rms'],\n    'application/vnd.jisp': ['jisp'],\n    'application/vnd.joost.joda-archive': ['joda'],\n    'application/vnd.kahootz': ['ktz', 'ktr'],\n    'application/vnd.kde.karbon': ['karbon'],\n    'application/vnd.kde.kchart': ['chrt'],\n    'application/vnd.kde.kformula': ['kfo'],\n    'application/vnd.kde.kivio': ['flw'],\n    'application/vnd.kde.kontour': ['kon'],\n    'application/vnd.kde.kpresenter': ['kpr', 'kpt'],\n    'application/vnd.kde.kspread': ['ksp'],\n    'application/vnd.kde.kword': ['kwd', 'kwt'],\n    'application/vnd.kenameaapp': ['htke'],\n    'application/vnd.kidspiration': ['kia'],\n    'application/vnd.kinar': ['kne', 'knp'],\n    'application/vnd.koan': ['skp', 'skd', 'skt', 'skm'],\n    'application/vnd.kodak-descriptor': ['sse'],\n    'application/vnd.las.las+xml': ['lasxml'],\n    'application/vnd.llamagraphics.life-balance.desktop': ['lbd'],\n    'application/vnd.llamagraphics.life-balance.exchange+xml': ['lbe'],\n    'application/vnd.lotus-1-2-3': ['123'],\n    'application/vnd.lotus-approach': ['apr'],\n    'application/vnd.lotus-freelance': ['pre'],\n    'application/vnd.lotus-notes': ['nsf'],\n    'application/vnd.lotus-organizer': ['org'],\n    'application/vnd.lotus-screencam': ['scm'],\n    'application/vnd.lotus-wordpro': ['lwp'],\n    'application/vnd.macports.portpkg': ['portpkg'],\n    'application/vnd.mapbox-vector-tile': ['mvt'],\n    'application/vnd.mcd': ['mcd'],\n    'application/vnd.medcalcdata': ['mc1'],\n    'application/vnd.mediastation.cdkey': ['cdkey'],\n    'application/vnd.mfer': ['mwf'],\n    'application/vnd.mfmp': ['mfm'],\n    'application/vnd.micrografx.flo': ['flo'],\n    'application/vnd.micrografx.igx': ['igx'],\n    'application/vnd.mif': ['mif'],\n    'application/vnd.mobius.daf': ['daf'],\n    'application/vnd.mobius.dis': ['dis'],\n    'application/vnd.mobius.mbk': ['mbk'],\n    'application/vnd.mobius.mqy': ['mqy'],\n    'application/vnd.mobius.msl': ['msl'],\n    'application/vnd.mobius.plc': ['plc'],\n    'application/vnd.mobius.txf': ['txf'],\n    'application/vnd.mophun.application': ['mpn'],\n    'application/vnd.mophun.certificate': ['mpc'],\n    'application/vnd.mozilla.xul+xml': ['xul'],\n    'application/vnd.ms-artgalry': ['cil'],\n    'application/vnd.ms-cab-compressed': ['cab'],\n    'application/vnd.ms-excel': ['xls', 'xlm', 'xla', 'xlc', 'xlt', 'xlw'],\n    'application/vnd.ms-excel.addin.macroenabled.12': ['xlam'],\n    'application/vnd.ms-excel.sheet.binary.macroenabled.12': ['xlsb'],\n    'application/vnd.ms-excel.sheet.macroenabled.12': ['xlsm'],\n    'application/vnd.ms-excel.template.macroenabled.12': ['xltm'],\n    'application/vnd.ms-fontobject': ['eot'],\n    'application/vnd.ms-htmlhelp': ['chm'],\n    'application/vnd.ms-ims': ['ims'],\n    'application/vnd.ms-lrm': ['lrm'],\n    'application/vnd.ms-officetheme': ['thmx'],\n    'application/vnd.ms-outlook': ['msg'],\n    'application/vnd.ms-pki.seccat': ['cat'],\n    'application/vnd.ms-pki.stl': ['*stl'],\n    'application/vnd.ms-powerpoint': ['ppt', 'pps', 'pot'],\n    'application/vnd.ms-powerpoint.addin.macroenabled.12': ['ppam'],\n    'application/vnd.ms-powerpoint.presentation.macroenabled.12': ['pptm'],\n    'application/vnd.ms-powerpoint.slide.macroenabled.12': ['sldm'],\n    'application/vnd.ms-powerpoint.slideshow.macroenabled.12': ['ppsm'],\n    'application/vnd.ms-powerpoint.template.macroenabled.12': ['potm'],\n    'application/vnd.ms-project': ['*mpp', 'mpt'],\n    'application/vnd.ms-visio.viewer': ['vdx'],\n    'application/vnd.ms-word.document.macroenabled.12': ['docm'],\n    'application/vnd.ms-word.template.macroenabled.12': ['dotm'],\n    'application/vnd.ms-works': ['wps', 'wks', 'wcm', 'wdb'],\n    'application/vnd.ms-wpl': ['wpl'],\n    'application/vnd.ms-xpsdocument': ['xps'],\n    'application/vnd.mseq': ['mseq'],\n    'application/vnd.musician': ['mus'],\n    'application/vnd.muvee.style': ['msty'],\n    'application/vnd.mynfc': ['taglet'],\n    'application/vnd.nato.bindingdataobject+xml': ['bdo'],\n    'application/vnd.neurolanguage.nlu': ['nlu'],\n    'application/vnd.nitf': ['ntf', 'nitf'],\n    'application/vnd.noblenet-directory': ['nnd'],\n    'application/vnd.noblenet-sealer': ['nns'],\n    'application/vnd.noblenet-web': ['nnw'],\n    'application/vnd.nokia.n-gage.ac+xml': ['*ac'],\n    'application/vnd.nokia.n-gage.data': ['ngdat'],\n    'application/vnd.nokia.n-gage.symbian.install': ['n-gage'],\n    'application/vnd.nokia.radio-preset': ['rpst'],\n    'application/vnd.nokia.radio-presets': ['rpss'],\n    'application/vnd.novadigm.edm': ['edm'],\n    'application/vnd.novadigm.edx': ['edx'],\n    'application/vnd.novadigm.ext': ['ext'],\n    'application/vnd.oasis.opendocument.chart': ['odc'],\n    'application/vnd.oasis.opendocument.chart-template': ['otc'],\n    'application/vnd.oasis.opendocument.database': ['odb'],\n    'application/vnd.oasis.opendocument.formula': ['odf'],\n    'application/vnd.oasis.opendocument.formula-template': ['odft'],\n    'application/vnd.oasis.opendocument.graphics': ['odg'],\n    'application/vnd.oasis.opendocument.graphics-template': ['otg'],\n    'application/vnd.oasis.opendocument.image': ['odi'],\n    'application/vnd.oasis.opendocument.image-template': ['oti'],\n    'application/vnd.oasis.opendocument.presentation': ['odp'],\n    'application/vnd.oasis.opendocument.presentation-template': ['otp'],\n    'application/vnd.oasis.opendocument.spreadsheet': ['ods'],\n    'application/vnd.oasis.opendocument.spreadsheet-template': ['ots'],\n    'application/vnd.oasis.opendocument.text': ['odt'],\n    'application/vnd.oasis.opendocument.text-master': ['odm'],\n    'application/vnd.oasis.opendocument.text-template': ['ott'],\n    'application/vnd.oasis.opendocument.text-web': ['oth'],\n    'application/vnd.olpc-sugar': ['xo'],\n    'application/vnd.oma.dd2+xml': ['dd2'],\n    'application/vnd.openblox.game+xml': ['obgx'],\n    'application/vnd.openofficeorg.extension': ['oxt'],\n    'application/vnd.openstreetmap.data+xml': ['osm'],\n    'application/vnd.openxmlformats-officedocument.presentationml.presentation': [\n        'pptx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.slide': [\n        'sldx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.slideshow': [\n        'ppsx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.template': [\n        'potx',\n    ],\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['xlsx'],\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.template': [\n        'xltx',\n    ],\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [\n        'docx',\n    ],\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.template': [\n        'dotx',\n    ],\n    'application/vnd.osgeo.mapguide.package': ['mgp'],\n    'application/vnd.osgi.dp': ['dp'],\n    'application/vnd.osgi.subsystem': ['esa'],\n    'application/vnd.palm': ['pdb', 'pqa', 'oprc'],\n    'application/vnd.pawaafile': ['paw'],\n    'application/vnd.pg.format': ['str'],\n    'application/vnd.pg.osasli': ['ei6'],\n    'application/vnd.picsel': ['efif'],\n    'application/vnd.pmi.widget': ['wg'],\n    'application/vnd.pocketlearn': ['plf'],\n    'application/vnd.powerbuilder6': ['pbd'],\n    'application/vnd.previewsystems.box': ['box'],\n    'application/vnd.procrate.brushset': ['brushset'],\n    'application/vnd.procreate.brush': ['brush'],\n    'application/vnd.procreate.dream': ['drm'],\n    'application/vnd.proteus.magazine': ['mgz'],\n    'application/vnd.publishare-delta-tree': ['qps'],\n    'application/vnd.pvi.ptid1': ['ptid'],\n    'application/vnd.pwg-xhtml-print+xml': ['xhtm'],\n    'application/vnd.quark.quarkxpress': [\n        'qxd',\n        'qxt',\n        'qwd',\n        'qwt',\n        'qxl',\n        'qxb',\n    ],\n    'application/vnd.rar': ['rar'],\n    'application/vnd.realvnc.bed': ['bed'],\n    'application/vnd.recordare.musicxml': ['mxl'],\n    'application/vnd.recordare.musicxml+xml': ['musicxml'],\n    'application/vnd.rig.cryptonote': ['cryptonote'],\n    'application/vnd.rim.cod': ['cod'],\n    'application/vnd.rn-realmedia': ['rm'],\n    'application/vnd.rn-realmedia-vbr': ['rmvb'],\n    'application/vnd.route66.link66+xml': ['link66'],\n    'application/vnd.sailingtracker.track': ['st'],\n    'application/vnd.seemail': ['see'],\n    'application/vnd.sema': ['sema'],\n    'application/vnd.semd': ['semd'],\n    'application/vnd.semf': ['semf'],\n    'application/vnd.shana.informed.formdata': ['ifm'],\n    'application/vnd.shana.informed.formtemplate': ['itp'],\n    'application/vnd.shana.informed.interchange': ['iif'],\n    'application/vnd.shana.informed.package': ['ipk'],\n    'application/vnd.simtech-mindmapper': ['twd', 'twds'],\n    'application/vnd.smaf': ['mmf'],\n    'application/vnd.smart.teacher': ['teacher'],\n    'application/vnd.software602.filler.form+xml': ['fo'],\n    'application/vnd.solent.sdkm+xml': ['sdkm', 'sdkd'],\n    'application/vnd.spotfire.dxp': ['dxp'],\n    'application/vnd.spotfire.sfs': ['sfs'],\n    'application/vnd.stardivision.calc': ['sdc'],\n    'application/vnd.stardivision.draw': ['sda'],\n    'application/vnd.stardivision.impress': ['sdd'],\n    'application/vnd.stardivision.math': ['smf'],\n    'application/vnd.stardivision.writer': ['sdw', 'vor'],\n    'application/vnd.stardivision.writer-global': ['sgl'],\n    'application/vnd.stepmania.package': ['smzip'],\n    'application/vnd.stepmania.stepchart': ['sm'],\n    'application/vnd.sun.wadl+xml': ['wadl'],\n    'application/vnd.sun.xml.calc': ['sxc'],\n    'application/vnd.sun.xml.calc.template': ['stc'],\n    'application/vnd.sun.xml.draw': ['sxd'],\n    'application/vnd.sun.xml.draw.template': ['std'],\n    'application/vnd.sun.xml.impress': ['sxi'],\n    'application/vnd.sun.xml.impress.template': ['sti'],\n    'application/vnd.sun.xml.math': ['sxm'],\n    'application/vnd.sun.xml.writer': ['sxw'],\n    'application/vnd.sun.xml.writer.global': ['sxg'],\n    'application/vnd.sun.xml.writer.template': ['stw'],\n    'application/vnd.sus-calendar': ['sus', 'susp'],\n    'application/vnd.svd': ['svd'],\n    'application/vnd.symbian.install': ['sis', 'sisx'],\n    'application/vnd.syncml+xml': ['xsm'],\n    'application/vnd.syncml.dm+wbxml': ['bdm'],\n    'application/vnd.syncml.dm+xml': ['xdm'],\n    'application/vnd.syncml.dmddf+xml': ['ddf'],\n    'application/vnd.tao.intent-module-archive': ['tao'],\n    'application/vnd.tcpdump.pcap': ['pcap', 'cap', 'dmp'],\n    'application/vnd.tmobile-livetv': ['tmo'],\n    'application/vnd.trid.tpt': ['tpt'],\n    'application/vnd.triscape.mxs': ['mxs'],\n    'application/vnd.trueapp': ['tra'],\n    'application/vnd.ufdl': ['ufd', 'ufdl'],\n    'application/vnd.uiq.theme': ['utz'],\n    'application/vnd.umajin': ['umj'],\n    'application/vnd.unity': ['unityweb'],\n    'application/vnd.uoml+xml': ['uoml', 'uo'],\n    'application/vnd.vcx': ['vcx'],\n    'application/vnd.visio': ['vsd', 'vst', 'vss', 'vsw', 'vsdx', 'vtx'],\n    'application/vnd.visionary': ['vis'],\n    'application/vnd.vsf': ['vsf'],\n    'application/vnd.wap.wbxml': ['wbxml'],\n    'application/vnd.wap.wmlc': ['wmlc'],\n    'application/vnd.wap.wmlscriptc': ['wmlsc'],\n    'application/vnd.webturbo': ['wtb'],\n    'application/vnd.wolfram.player': ['nbp'],\n    'application/vnd.wordperfect': ['wpd'],\n    'application/vnd.wqd': ['wqd'],\n    'application/vnd.wt.stf': ['stf'],\n    'application/vnd.xara': ['xar'],\n    'application/vnd.xfdl': ['xfdl'],\n    'application/vnd.yamaha.hv-dic': ['hvd'],\n    'application/vnd.yamaha.hv-script': ['hvs'],\n    'application/vnd.yamaha.hv-voice': ['hvp'],\n    'application/vnd.yamaha.openscoreformat': ['osf'],\n    'application/vnd.yamaha.openscoreformat.osfpvg+xml': ['osfpvg'],\n    'application/vnd.yamaha.smaf-audio': ['saf'],\n    'application/vnd.yamaha.smaf-phrase': ['spf'],\n    'application/vnd.yellowriver-custom-menu': ['cmp'],\n    'application/vnd.zul': ['zir', 'zirz'],\n    'application/vnd.zzazz.deck+xml': ['zaz'],\n    'application/x-7z-compressed': ['7z'],\n    'application/x-abiword': ['abw'],\n    'application/x-ace-compressed': ['ace'],\n    'application/x-apple-diskimage': ['*dmg'],\n    'application/x-arj': ['arj'],\n    'application/x-authorware-bin': ['aab', 'x32', 'u32', 'vox'],\n    'application/x-authorware-map': ['aam'],\n    'application/x-authorware-seg': ['aas'],\n    'application/x-bcpio': ['bcpio'],\n    'application/x-bdoc': ['*bdoc'],\n    'application/x-bittorrent': ['torrent'],\n    'application/x-blender': ['blend'],\n    'application/x-blorb': ['blb', 'blorb'],\n    'application/x-bzip': ['bz'],\n    'application/x-bzip2': ['bz2', 'boz'],\n    'application/x-cbr': ['cbr', 'cba', 'cbt', 'cbz', 'cb7'],\n    'application/x-cdlink': ['vcd'],\n    'application/x-cfs-compressed': ['cfs'],\n    'application/x-chat': ['chat'],\n    'application/x-chess-pgn': ['pgn'],\n    'application/x-chrome-extension': ['crx'],\n    'application/x-cocoa': ['cco'],\n    'application/x-compressed': ['*rar'],\n    'application/x-conference': ['nsc'],\n    'application/x-cpio': ['cpio'],\n    'application/x-csh': ['csh'],\n    'application/x-debian-package': ['*deb', 'udeb'],\n    'application/x-dgc-compressed': ['dgc'],\n    'application/x-director': [\n        'dir',\n        'dcr',\n        'dxr',\n        'cst',\n        'cct',\n        'cxt',\n        'w3d',\n        'fgd',\n        'swa',\n    ],\n    'application/x-doom': ['wad'],\n    'application/x-dtbncx+xml': ['ncx'],\n    'application/x-dtbook+xml': ['dtb'],\n    'application/x-dtbresource+xml': ['res'],\n    'application/x-dvi': ['dvi'],\n    'application/x-envoy': ['evy'],\n    'application/x-eva': ['eva'],\n    'application/x-font-bdf': ['bdf'],\n    'application/x-font-ghostscript': ['gsf'],\n    'application/x-font-linux-psf': ['psf'],\n    'application/x-font-pcf': ['pcf'],\n    'application/x-font-snf': ['snf'],\n    'application/x-font-type1': ['pfa', 'pfb', 'pfm', 'afm'],\n    'application/x-freearc': ['arc'],\n    'application/x-futuresplash': ['spl'],\n    'application/x-gca-compressed': ['gca'],\n    'application/x-glulx': ['ulx'],\n    'application/x-gnumeric': ['gnumeric'],\n    'application/x-gramps-xml': ['gramps'],\n    'application/x-gtar': ['gtar'],\n    'application/x-hdf': ['hdf'],\n    'application/x-httpd-php': ['php'],\n    'application/x-install-instructions': ['install'],\n    'application/x-ipynb+json': ['ipynb'],\n    'application/x-iso9660-image': ['*iso'],\n    'application/x-iwork-keynote-sffkey': ['*key'],\n    'application/x-iwork-numbers-sffnumbers': ['*numbers'],\n    'application/x-iwork-pages-sffpages': ['*pages'],\n    'application/x-java-archive-diff': ['jardiff'],\n    'application/x-java-jnlp-file': ['jnlp'],\n    'application/x-keepass2': ['kdbx'],\n    'application/x-latex': ['latex'],\n    'application/x-lua-bytecode': ['luac'],\n    'application/x-lzh-compressed': ['lzh', 'lha'],\n    'application/x-makeself': ['run'],\n    'application/x-mie': ['mie'],\n    'application/x-mobipocket-ebook': ['*prc', 'mobi'],\n    'application/x-ms-application': ['application'],\n    'application/x-ms-shortcut': ['lnk'],\n    'application/x-ms-wmd': ['wmd'],\n    'application/x-ms-wmz': ['wmz'],\n    'application/x-ms-xbap': ['xbap'],\n    'application/x-msaccess': ['mdb'],\n    'application/x-msbinder': ['obd'],\n    'application/x-mscardfile': ['crd'],\n    'application/x-msclip': ['clp'],\n    'application/x-msdos-program': ['*exe'],\n    'application/x-msdownload': ['*exe', '*dll', 'com', 'bat', '*msi'],\n    'application/x-msmediaview': ['mvb', 'm13', 'm14'],\n    'application/x-msmetafile': ['*wmf', '*wmz', '*emf', 'emz'],\n    'application/x-msmoney': ['mny'],\n    'application/x-mspublisher': ['pub'],\n    'application/x-msschedule': ['scd'],\n    'application/x-msterminal': ['trm'],\n    'application/x-mswrite': ['wri'],\n    'application/x-netcdf': ['nc', 'cdf'],\n    'application/x-ns-proxy-autoconfig': ['pac'],\n    'application/x-nzb': ['nzb'],\n    'application/x-perl': ['pl', 'pm'],\n    'application/x-pilot': ['*prc', '*pdb'],\n    'application/x-pkcs12': ['p12', 'pfx'],\n    'application/x-pkcs7-certificates': ['p7b', 'spc'],\n    'application/x-pkcs7-certreqresp': ['p7r'],\n    'application/x-rar-compressed': ['*rar'],\n    'application/x-redhat-package-manager': ['rpm'],\n    'application/x-research-info-systems': ['ris'],\n    'application/x-sea': ['sea'],\n    'application/x-sh': ['sh'],\n    'application/x-shar': ['shar'],\n    'application/x-shockwave-flash': ['swf'],\n    'application/x-silverlight-app': ['xap'],\n    'application/x-sql': ['*sql'],\n    'application/x-stuffit': ['sit'],\n    'application/x-stuffitx': ['sitx'],\n    'application/x-subrip': ['srt'],\n    'application/x-sv4cpio': ['sv4cpio'],\n    'application/x-sv4crc': ['sv4crc'],\n    'application/x-t3vm-image': ['t3'],\n    'application/x-tads': ['gam'],\n    'application/x-tar': ['tar'],\n    'application/x-tcl': ['tcl', 'tk'],\n    'application/x-tex': ['tex'],\n    'application/x-tex-tfm': ['tfm'],\n    'application/x-texinfo': ['texinfo', 'texi'],\n    'application/x-tgif': ['*obj'],\n    'application/x-ustar': ['ustar'],\n    'application/x-virtualbox-hdd': ['hdd'],\n    'application/x-virtualbox-ova': ['ova'],\n    'application/x-virtualbox-ovf': ['ovf'],\n    'application/x-virtualbox-vbox': ['vbox'],\n    'application/x-virtualbox-vbox-extpack': ['vbox-extpack'],\n    'application/x-virtualbox-vdi': ['vdi'],\n    'application/x-virtualbox-vhd': ['vhd'],\n    'application/x-virtualbox-vmdk': ['vmdk'],\n    'application/x-wais-source': ['src'],\n    'application/x-web-app-manifest+json': ['webapp'],\n    'application/x-x509-ca-cert': ['der', 'crt', 'pem'],\n    'application/x-xfig': ['fig'],\n    'application/x-xliff+xml': ['*xlf'],\n    'application/x-xpinstall': ['xpi'],\n    'application/x-xz': ['xz'],\n    'application/x-zip-compressed': ['*zip'],\n    'application/x-zmachine': ['z1', 'z2', 'z3', 'z4', 'z5', 'z6', 'z7', 'z8'],\n    'audio/vnd.dece.audio': ['uva', 'uvva'],\n    'audio/vnd.digital-winds': ['eol'],\n    'audio/vnd.dra': ['dra'],\n    'audio/vnd.dts': ['dts'],\n    'audio/vnd.dts.hd': ['dtshd'],\n    'audio/vnd.lucent.voice': ['lvp'],\n    'audio/vnd.ms-playready.media.pya': ['pya'],\n    'audio/vnd.nuera.ecelp4800': ['ecelp4800'],\n    'audio/vnd.nuera.ecelp7470': ['ecelp7470'],\n    'audio/vnd.nuera.ecelp9600': ['ecelp9600'],\n    'audio/vnd.rip': ['rip'],\n    'audio/x-aac': ['*aac'],\n    'audio/x-aiff': ['aif', 'aiff', 'aifc'],\n    'audio/x-caf': ['caf'],\n    'audio/x-flac': ['flac'],\n    'audio/x-m4a': ['*m4a'],\n    'audio/x-matroska': ['mka'],\n    'audio/x-mpegurl': ['m3u'],\n    'audio/x-ms-wax': ['wax'],\n    'audio/x-ms-wma': ['wma'],\n    'audio/x-pn-realaudio': ['ram', 'ra'],\n    'audio/x-pn-realaudio-plugin': ['rmp'],\n    'audio/x-realaudio': ['*ra'],\n    'audio/x-wav': ['*wav'],\n    'chemical/x-cdx': ['cdx'],\n    'chemical/x-cif': ['cif'],\n    'chemical/x-cmdf': ['cmdf'],\n    'chemical/x-cml': ['cml'],\n    'chemical/x-csml': ['csml'],\n    'chemical/x-xyz': ['xyz'],\n    'image/prs.btif': ['btif', 'btf'],\n    'image/prs.pti': ['pti'],\n    'image/vnd.adobe.photoshop': ['psd'],\n    'image/vnd.airzip.accelerator.azv': ['azv'],\n    'image/vnd.dece.graphic': ['uvi', 'uvvi', 'uvg', 'uvvg'],\n    'image/vnd.djvu': ['djvu', 'djv'],\n    'image/vnd.dvb.subtitle': ['*sub'],\n    'image/vnd.dwg': ['dwg'],\n    'image/vnd.dxf': ['dxf'],\n    'image/vnd.fastbidsheet': ['fbs'],\n    'image/vnd.fpx': ['fpx'],\n    'image/vnd.fst': ['fst'],\n    'image/vnd.fujixerox.edmics-mmr': ['mmr'],\n    'image/vnd.fujixerox.edmics-rlc': ['rlc'],\n    'image/vnd.microsoft.icon': ['ico'],\n    'image/vnd.ms-dds': ['dds'],\n    'image/vnd.ms-modi': ['mdi'],\n    'image/vnd.ms-photo': ['wdp'],\n    'image/vnd.net-fpx': ['npx'],\n    'image/vnd.pco.b16': ['b16'],\n    'image/vnd.tencent.tap': ['tap'],\n    'image/vnd.valve.source.texture': ['vtf'],\n    'image/vnd.wap.wbmp': ['wbmp'],\n    'image/vnd.xiff': ['xif'],\n    'image/vnd.zbrush.pcx': ['pcx'],\n    'image/x-3ds': ['3ds'],\n    'image/x-adobe-dng': ['dng'],\n    'image/x-cmu-raster': ['ras'],\n    'image/x-cmx': ['cmx'],\n    'image/x-freehand': ['fh', 'fhc', 'fh4', 'fh5', 'fh7'],\n    'image/x-icon': ['*ico'],\n    'image/x-jng': ['jng'],\n    'image/x-mrsid-image': ['sid'],\n    'image/x-ms-bmp': ['*bmp'],\n    'image/x-pcx': ['*pcx'],\n    'image/x-pict': ['pic', 'pct'],\n    'image/x-portable-anymap': ['pnm'],\n    'image/x-portable-bitmap': ['pbm'],\n    'image/x-portable-graymap': ['pgm'],\n    'image/x-portable-pixmap': ['ppm'],\n    'image/x-rgb': ['rgb'],\n    'image/x-tga': ['tga'],\n    'image/x-xbitmap': ['xbm'],\n    'image/x-xpixmap': ['xpm'],\n    'image/x-xwindowdump': ['xwd'],\n    'message/vnd.wfa.wsc': ['wsc'],\n    'model/vnd.bary': ['bary'],\n    'model/vnd.cld': ['cld'],\n    'model/vnd.collada+xml': ['dae'],\n    'model/vnd.dwf': ['dwf'],\n    'model/vnd.gdl': ['gdl'],\n    'model/vnd.gtw': ['gtw'],\n    'model/vnd.mts': ['*mts'],\n    'model/vnd.opengex': ['ogex'],\n    'model/vnd.parasolid.transmit.binary': ['x_b'],\n    'model/vnd.parasolid.transmit.text': ['x_t'],\n    'model/vnd.pytha.pyox': ['pyo', 'pyox'],\n    'model/vnd.sap.vds': ['vds'],\n    'model/vnd.usda': ['usda'],\n    'model/vnd.usdz+zip': ['usdz'],\n    'model/vnd.valve.source.compiled-map': ['bsp'],\n    'model/vnd.vtu': ['vtu'],\n    'text/prs.lines.tag': ['dsc'],\n    'text/vnd.curl': ['curl'],\n    'text/vnd.curl.dcurl': ['dcurl'],\n    'text/vnd.curl.mcurl': ['mcurl'],\n    'text/vnd.curl.scurl': ['scurl'],\n    'text/vnd.dvb.subtitle': ['sub'],\n    'text/vnd.familysearch.gedcom': ['ged'],\n    'text/vnd.fly': ['fly'],\n    'text/vnd.fmi.flexstor': ['flx'],\n    'text/vnd.graphviz': ['gv'],\n    'text/vnd.in3d.3dml': ['3dml'],\n    'text/vnd.in3d.spot': ['spot'],\n    'text/vnd.sun.j2me.app-descriptor': ['jad'],\n    'text/vnd.wap.wml': ['wml'],\n    'text/vnd.wap.wmlscript': ['wmls'],\n    'text/x-asm': ['s', 'asm'],\n    'text/x-c': ['c', 'cc', 'cxx', 'cpp', 'h', 'hh', 'dic'],\n    'text/x-component': ['htc'],\n    'text/x-fortran': ['f', 'for', 'f77', 'f90'],\n    'text/x-handlebars-template': ['hbs'],\n    'text/x-java-source': ['java'],\n    'text/x-lua': ['lua'],\n    'text/x-markdown': ['mkd'],\n    'text/x-nfo': ['nfo'],\n    'text/x-opml': ['opml'],\n    'text/x-org': ['*org'],\n    'text/x-pascal': ['p', 'pas'],\n    'text/x-processing': ['pde'],\n    'text/x-sass': ['sass'],\n    'text/x-scss': ['scss'],\n    'text/x-setext': ['etx'],\n    'text/x-sfv': ['sfv'],\n    'text/x-suse-ymp': ['ymp'],\n    'text/x-uuencode': ['uu'],\n    'text/x-vcalendar': ['vcs'],\n    'text/x-vcard': ['vcf'],\n    'video/vnd.dece.hd': ['uvh', 'uvvh'],\n    'video/vnd.dece.mobile': ['uvm', 'uvvm'],\n    'video/vnd.dece.pd': ['uvp', 'uvvp'],\n    'video/vnd.dece.sd': ['uvs', 'uvvs'],\n    'video/vnd.dece.video': ['uvv', 'uvvv'],\n    'video/vnd.dvb.file': ['dvb'],\n    'video/vnd.fvt': ['fvt'],\n    'video/vnd.mpegurl': ['mxu', 'm4u'],\n    'video/vnd.ms-playready.media.pyv': ['pyv'],\n    'video/vnd.uvvu.mp4': ['uvu', 'uvvu'],\n    'video/vnd.vivo': ['viv'],\n    'video/x-f4v': ['f4v'],\n    'video/x-fli': ['fli'],\n    'video/x-flv': ['flv'],\n    'video/x-m4v': ['m4v'],\n    'video/x-matroska': ['mkv', 'mk3d', 'mks'],\n    'video/x-mng': ['mng'],\n    'video/x-ms-asf': ['asf', 'asx'],\n    'video/x-ms-vob': ['vob'],\n    'video/x-ms-wm': ['wm'],\n    'video/x-ms-wmv': ['wmv'],\n    'video/x-ms-wmx': ['wmx'],\n    'video/x-ms-wvx': ['wvx'],\n    'video/x-msvideo': ['avi'],\n    'video/x-sgi-movie': ['movie'],\n    'video/x-smv': ['smv'],\n    'x-conference/x-cooltalk': ['ice'],\n};\nObject.freeze(types);\nexport default types;\n","const types = {\n    'application/andrew-inset': ['ez'],\n    'application/appinstaller': ['appinstaller'],\n    'application/applixware': ['aw'],\n    'application/appx': ['appx'],\n    'application/appxbundle': ['appxbundle'],\n    'application/atom+xml': ['atom'],\n    'application/atomcat+xml': ['atomcat'],\n    'application/atomdeleted+xml': ['atomdeleted'],\n    'application/atomsvc+xml': ['atomsvc'],\n    'application/atsc-dwd+xml': ['dwd'],\n    'application/atsc-held+xml': ['held'],\n    'application/atsc-rsat+xml': ['rsat'],\n    'application/automationml-aml+xml': ['aml'],\n    'application/automationml-amlx+zip': ['amlx'],\n    'application/bdoc': ['bdoc'],\n    'application/calendar+xml': ['xcs'],\n    'application/ccxml+xml': ['ccxml'],\n    'application/cdfx+xml': ['cdfx'],\n    'application/cdmi-capability': ['cdmia'],\n    'application/cdmi-container': ['cdmic'],\n    'application/cdmi-domain': ['cdmid'],\n    'application/cdmi-object': ['cdmio'],\n    'application/cdmi-queue': ['cdmiq'],\n    'application/cpl+xml': ['cpl'],\n    'application/cu-seeme': ['cu'],\n    'application/cwl': ['cwl'],\n    'application/dash+xml': ['mpd'],\n    'application/dash-patch+xml': ['mpp'],\n    'application/davmount+xml': ['davmount'],\n    'application/dicom': ['dcm'],\n    'application/docbook+xml': ['dbk'],\n    'application/dssc+der': ['dssc'],\n    'application/dssc+xml': ['xdssc'],\n    'application/ecmascript': ['ecma'],\n    'application/emma+xml': ['emma'],\n    'application/emotionml+xml': ['emotionml'],\n    'application/epub+zip': ['epub'],\n    'application/exi': ['exi'],\n    'application/express': ['exp'],\n    'application/fdf': ['fdf'],\n    'application/fdt+xml': ['fdt'],\n    'application/font-tdpfr': ['pfr'],\n    'application/geo+json': ['geojson'],\n    'application/gml+xml': ['gml'],\n    'application/gpx+xml': ['gpx'],\n    'application/gxf': ['gxf'],\n    'application/gzip': ['gz'],\n    'application/hjson': ['hjson'],\n    'application/hyperstudio': ['stk'],\n    'application/inkml+xml': ['ink', 'inkml'],\n    'application/ipfix': ['ipfix'],\n    'application/its+xml': ['its'],\n    'application/java-archive': ['jar', 'war', 'ear'],\n    'application/java-serialized-object': ['ser'],\n    'application/java-vm': ['class'],\n    'application/javascript': ['*js'],\n    'application/json': ['json', 'map'],\n    'application/json5': ['json5'],\n    'application/jsonml+json': ['jsonml'],\n    'application/ld+json': ['jsonld'],\n    'application/lgr+xml': ['lgr'],\n    'application/lost+xml': ['lostxml'],\n    'application/mac-binhex40': ['hqx'],\n    'application/mac-compactpro': ['cpt'],\n    'application/mads+xml': ['mads'],\n    'application/manifest+json': ['webmanifest'],\n    'application/marc': ['mrc'],\n    'application/marcxml+xml': ['mrcx'],\n    'application/mathematica': ['ma', 'nb', 'mb'],\n    'application/mathml+xml': ['mathml'],\n    'application/mbox': ['mbox'],\n    'application/media-policy-dataset+xml': ['mpf'],\n    'application/mediaservercontrol+xml': ['mscml'],\n    'application/metalink+xml': ['metalink'],\n    'application/metalink4+xml': ['meta4'],\n    'application/mets+xml': ['mets'],\n    'application/mmt-aei+xml': ['maei'],\n    'application/mmt-usd+xml': ['musd'],\n    'application/mods+xml': ['mods'],\n    'application/mp21': ['m21', 'mp21'],\n    'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n    'application/msix': ['msix'],\n    'application/msixbundle': ['msixbundle'],\n    'application/msword': ['doc', 'dot'],\n    'application/mxf': ['mxf'],\n    'application/n-quads': ['nq'],\n    'application/n-triples': ['nt'],\n    'application/node': ['cjs'],\n    'application/octet-stream': [\n        'bin',\n        'dms',\n        'lrf',\n        'mar',\n        'so',\n        'dist',\n        'distz',\n        'pkg',\n        'bpk',\n        'dump',\n        'elc',\n        'deploy',\n        'exe',\n        'dll',\n        'deb',\n        'dmg',\n        'iso',\n        'img',\n        'msi',\n        'msp',\n        'msm',\n        'buffer',\n    ],\n    'application/oda': ['oda'],\n    'application/oebps-package+xml': ['opf'],\n    'application/ogg': ['ogx'],\n    'application/omdoc+xml': ['omdoc'],\n    'application/onenote': [\n        'onetoc',\n        'onetoc2',\n        'onetmp',\n        'onepkg',\n        'one',\n        'onea',\n    ],\n    'application/oxps': ['oxps'],\n    'application/p2p-overlay+xml': ['relo'],\n    'application/patch-ops-error+xml': ['xer'],\n    'application/pdf': ['pdf'],\n    'application/pgp-encrypted': ['pgp'],\n    'application/pgp-keys': ['asc'],\n    'application/pgp-signature': ['sig', '*asc'],\n    'application/pics-rules': ['prf'],\n    'application/pkcs10': ['p10'],\n    'application/pkcs7-mime': ['p7m', 'p7c'],\n    'application/pkcs7-signature': ['p7s'],\n    'application/pkcs8': ['p8'],\n    'application/pkix-attr-cert': ['ac'],\n    'application/pkix-cert': ['cer'],\n    'application/pkix-crl': ['crl'],\n    'application/pkix-pkipath': ['pkipath'],\n    'application/pkixcmp': ['pki'],\n    'application/pls+xml': ['pls'],\n    'application/postscript': ['ai', 'eps', 'ps'],\n    'application/provenance+xml': ['provx'],\n    'application/pskc+xml': ['pskcxml'],\n    'application/raml+yaml': ['raml'],\n    'application/rdf+xml': ['rdf', 'owl'],\n    'application/reginfo+xml': ['rif'],\n    'application/relax-ng-compact-syntax': ['rnc'],\n    'application/resource-lists+xml': ['rl'],\n    'application/resource-lists-diff+xml': ['rld'],\n    'application/rls-services+xml': ['rs'],\n    'application/route-apd+xml': ['rapd'],\n    'application/route-s-tsid+xml': ['sls'],\n    'application/route-usd+xml': ['rusd'],\n    'application/rpki-ghostbusters': ['gbr'],\n    'application/rpki-manifest': ['mft'],\n    'application/rpki-roa': ['roa'],\n    'application/rsd+xml': ['rsd'],\n    'application/rss+xml': ['rss'],\n    'application/rtf': ['rtf'],\n    'application/sbml+xml': ['sbml'],\n    'application/scvp-cv-request': ['scq'],\n    'application/scvp-cv-response': ['scs'],\n    'application/scvp-vp-request': ['spq'],\n    'application/scvp-vp-response': ['spp'],\n    'application/sdp': ['sdp'],\n    'application/senml+xml': ['senmlx'],\n    'application/sensml+xml': ['sensmlx'],\n    'application/set-payment-initiation': ['setpay'],\n    'application/set-registration-initiation': ['setreg'],\n    'application/shf+xml': ['shf'],\n    'application/sieve': ['siv', 'sieve'],\n    'application/smil+xml': ['smi', 'smil'],\n    'application/sparql-query': ['rq'],\n    'application/sparql-results+xml': ['srx'],\n    'application/sql': ['sql'],\n    'application/srgs': ['gram'],\n    'application/srgs+xml': ['grxml'],\n    'application/sru+xml': ['sru'],\n    'application/ssdl+xml': ['ssdl'],\n    'application/ssml+xml': ['ssml'],\n    'application/swid+xml': ['swidtag'],\n    'application/tei+xml': ['tei', 'teicorpus'],\n    'application/thraud+xml': ['tfi'],\n    'application/timestamped-data': ['tsd'],\n    'application/toml': ['toml'],\n    'application/trig': ['trig'],\n    'application/ttml+xml': ['ttml'],\n    'application/ubjson': ['ubj'],\n    'application/urc-ressheet+xml': ['rsheet'],\n    'application/urc-targetdesc+xml': ['td'],\n    'application/voicexml+xml': ['vxml'],\n    'application/wasm': ['wasm'],\n    'application/watcherinfo+xml': ['wif'],\n    'application/widget': ['wgt'],\n    'application/winhlp': ['hlp'],\n    'application/wsdl+xml': ['wsdl'],\n    'application/wspolicy+xml': ['wspolicy'],\n    'application/xaml+xml': ['xaml'],\n    'application/xcap-att+xml': ['xav'],\n    'application/xcap-caps+xml': ['xca'],\n    'application/xcap-diff+xml': ['xdf'],\n    'application/xcap-el+xml': ['xel'],\n    'application/xcap-ns+xml': ['xns'],\n    'application/xenc+xml': ['xenc'],\n    'application/xfdf': ['xfdf'],\n    'application/xhtml+xml': ['xhtml', 'xht'],\n    'application/xliff+xml': ['xlf'],\n    'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n    'application/xml-dtd': ['dtd'],\n    'application/xop+xml': ['xop'],\n    'application/xproc+xml': ['xpl'],\n    'application/xslt+xml': ['*xsl', 'xslt'],\n    'application/xspf+xml': ['xspf'],\n    'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n    'application/yang': ['yang'],\n    'application/yin+xml': ['yin'],\n    'application/zip': ['zip'],\n    'application/zip+dotlottie': ['lottie'],\n    'audio/3gpp': ['*3gpp'],\n    'audio/aac': ['adts', 'aac'],\n    'audio/adpcm': ['adp'],\n    'audio/amr': ['amr'],\n    'audio/basic': ['au', 'snd'],\n    'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n    'audio/mobile-xmf': ['mxmf'],\n    'audio/mp3': ['*mp3'],\n    'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n    'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n    'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n    'audio/s3m': ['s3m'],\n    'audio/silk': ['sil'],\n    'audio/wav': ['wav'],\n    'audio/wave': ['*wav'],\n    'audio/webm': ['weba'],\n    'audio/xm': ['xm'],\n    'font/collection': ['ttc'],\n    'font/otf': ['otf'],\n    'font/ttf': ['ttf'],\n    'font/woff': ['woff'],\n    'font/woff2': ['woff2'],\n    'image/aces': ['exr'],\n    'image/apng': ['apng'],\n    'image/avci': ['avci'],\n    'image/avcs': ['avcs'],\n    'image/avif': ['avif'],\n    'image/bmp': ['bmp', 'dib'],\n    'image/cgm': ['cgm'],\n    'image/dicom-rle': ['drle'],\n    'image/dpx': ['dpx'],\n    'image/emf': ['emf'],\n    'image/fits': ['fits'],\n    'image/g3fax': ['g3'],\n    'image/gif': ['gif'],\n    'image/heic': ['heic'],\n    'image/heic-sequence': ['heics'],\n    'image/heif': ['heif'],\n    'image/heif-sequence': ['heifs'],\n    'image/hej2k': ['hej2'],\n    'image/ief': ['ief'],\n    'image/jaii': ['jaii'],\n    'image/jais': ['jais'],\n    'image/jls': ['jls'],\n    'image/jp2': ['jp2', 'jpg2'],\n    'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n    'image/jph': ['jph'],\n    'image/jphc': ['jhc'],\n    'image/jpm': ['jpm', 'jpgm'],\n    'image/jpx': ['jpx', 'jpf'],\n    'image/jxl': ['jxl'],\n    'image/jxr': ['jxr'],\n    'image/jxra': ['jxra'],\n    'image/jxrs': ['jxrs'],\n    'image/jxs': ['jxs'],\n    'image/jxsc': ['jxsc'],\n    'image/jxsi': ['jxsi'],\n    'image/jxss': ['jxss'],\n    'image/ktx': ['ktx'],\n    'image/ktx2': ['ktx2'],\n    'image/pjpeg': ['jfif'],\n    'image/png': ['png'],\n    'image/sgi': ['sgi'],\n    'image/svg+xml': ['svg', 'svgz'],\n    'image/t38': ['t38'],\n    'image/tiff': ['tif', 'tiff'],\n    'image/tiff-fx': ['tfx'],\n    'image/webp': ['webp'],\n    'image/wmf': ['wmf'],\n    'message/disposition-notification': ['disposition-notification'],\n    'message/global': ['u8msg'],\n    'message/global-delivery-status': ['u8dsn'],\n    'message/global-disposition-notification': ['u8mdn'],\n    'message/global-headers': ['u8hdr'],\n    'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n    'model/3mf': ['3mf'],\n    'model/gltf+json': ['gltf'],\n    'model/gltf-binary': ['glb'],\n    'model/iges': ['igs', 'iges'],\n    'model/jt': ['jt'],\n    'model/mesh': ['msh', 'mesh', 'silo'],\n    'model/mtl': ['mtl'],\n    'model/obj': ['obj'],\n    'model/prc': ['prc'],\n    'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n    'model/step+xml': ['stpx'],\n    'model/step+zip': ['stpz'],\n    'model/step-xml+zip': ['stpxz'],\n    'model/stl': ['stl'],\n    'model/u3d': ['u3d'],\n    'model/vrml': ['wrl', 'vrml'],\n    'model/x3d+binary': ['*x3db', 'x3dbz'],\n    'model/x3d+fastinfoset': ['x3db'],\n    'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n    'model/x3d+xml': ['x3d', 'x3dz'],\n    'model/x3d-vrml': ['x3dv'],\n    'text/cache-manifest': ['appcache', 'manifest'],\n    'text/calendar': ['ics', 'ifb'],\n    'text/coffeescript': ['coffee', 'litcoffee'],\n    'text/css': ['css'],\n    'text/csv': ['csv'],\n    'text/html': ['html', 'htm', 'shtml'],\n    'text/jade': ['jade'],\n    'text/javascript': ['js', 'mjs'],\n    'text/jsx': ['jsx'],\n    'text/less': ['less'],\n    'text/markdown': ['md', 'markdown'],\n    'text/mathml': ['mml'],\n    'text/mdx': ['mdx'],\n    'text/n3': ['n3'],\n    'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n    'text/richtext': ['rtx'],\n    'text/rtf': ['*rtf'],\n    'text/sgml': ['sgml', 'sgm'],\n    'text/shex': ['shex'],\n    'text/slim': ['slim', 'slm'],\n    'text/spdx': ['spdx'],\n    'text/stylus': ['stylus', 'styl'],\n    'text/tab-separated-values': ['tsv'],\n    'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n    'text/turtle': ['ttl'],\n    'text/uri-list': ['uri', 'uris', 'urls'],\n    'text/vcard': ['vcard'],\n    'text/vtt': ['vtt'],\n    'text/wgsl': ['wgsl'],\n    'text/xml': ['*xml'],\n    'text/yaml': ['yaml', 'yml'],\n    'video/3gpp': ['3gp', '3gpp'],\n    'video/3gpp2': ['3g2'],\n    'video/h261': ['h261'],\n    'video/h263': ['h263'],\n    'video/h264': ['h264'],\n    'video/iso.segment': ['m4s'],\n    'video/jpeg': ['jpgv'],\n    'video/jpm': ['*jpm', '*jpgm'],\n    'video/mj2': ['mj2', 'mjp2'],\n    'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n    'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n    'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n    'video/ogg': ['ogv'],\n    'video/quicktime': ['qt', 'mov'],\n    'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n    constructor(...args) {\n        _Mime_extensionToType.set(this, new Map());\n        _Mime_typeToExtension.set(this, new Map());\n        _Mime_typeToExtensions.set(this, new Map());\n        for (const arg of args) {\n            this.define(arg);\n        }\n    }\n    define(typeMap, force = false) {\n        for (let [type, extensions] of Object.entries(typeMap)) {\n            type = type.toLowerCase();\n            extensions = extensions.map((ext) => ext.toLowerCase());\n            if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n                __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n            }\n            const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n            let first = true;\n            for (let extension of extensions) {\n                const starred = extension.startsWith('*');\n                extension = starred ? extension.slice(1) : extension;\n                allExtensions?.add(extension);\n                if (first) {\n                    __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n                }\n                first = false;\n                if (starred)\n                    continue;\n                const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n                if (currentType && currentType != type && !force) {\n                    throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n                }\n                __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n            }\n        }\n        return this;\n    }\n    getType(path) {\n        if (typeof path !== 'string')\n            return null;\n        const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n        const ext = last.replace(/^.*\\./s, '').toLowerCase();\n        const hasPath = last.length < path.length;\n        const hasDot = ext.length < last.length - 1;\n        if (!hasDot && hasPath)\n            return null;\n        return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n    }\n    getExtension(type) {\n        if (typeof type !== 'string')\n            return null;\n        type = type?.split?.(';')[0];\n        return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n    }\n    getAllExtensions(type) {\n        if (typeof type !== 'string')\n            return null;\n        return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n    }\n    _freeze() {\n        this.define = () => {\n            throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n        };\n        Object.freeze(this);\n        for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n            Object.freeze(extensions);\n        }\n        return this;\n    }\n    _getTestState() {\n        return {\n            types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n            extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n        };\n    }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import otherTypes from '../types/other.js';\nimport standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes, otherTypes)._freeze();\n","import { readFileSync } from \"node:fs\";\nimport { isAbsolute, resolve, sep } from \"node:path\";\nimport ignore from \"ignore\";\nimport mime from \"mime\";\nimport {\n\tCF_ASSETS_IGNORE_FILENAME,\n\tHEADERS_FILENAME,\n\tREDIRECTS_FILENAME,\n} from \"./constants\";\nimport type { PathOrFileDescriptor } from \"node:fs\";\n\n/** normalises sep for windows and prefix with `/` */\nexport const normalizeFilePath = (relativeFilepath: string) => {\n\tif (isAbsolute(relativeFilepath)) {\n\t\tthrow new Error(`Expected relative path`);\n\t}\n\treturn \"/\" + relativeFilepath.split(sep).join(\"/\");\n};\n\nexport const getContentType = (absFilePath: string) => {\n\tlet contentType = mime.getType(absFilePath);\n\tif (\n\t\tcontentType &&\n\t\tcontentType.startsWith(\"text/\") &&\n\t\t!contentType.includes(\"charset\")\n\t) {\n\t\tcontentType = `${contentType}; charset=utf-8`;\n\t}\n\treturn contentType;\n};\n\n/**\n * Generate a function that can match relative filepaths against a list of gitignore formatted patterns.\n */\nexport function createPatternMatcher(\n\tpatterns: string[],\n\texclude: boolean\n): (filePath: string) => boolean {\n\tif (patterns.length === 0) {\n\t\treturn (_filePath) => !exclude;\n\t} else {\n\t\tconst ignorer = ignore().add(patterns);\n\t\treturn (filePath) => ignorer.test(filePath).ignored;\n\t}\n}\n\nexport function thrownIsDoesNotExistError(\n\tthrown: unknown\n): thrown is Error & { code: \"ENOENT\" } {\n\treturn (\n\t\tthrown instanceof Error && \"code\" in thrown && thrown.code === \"ENOENT\"\n\t);\n}\n\nexport function maybeGetFile(filePath: PathOrFileDescriptor) {\n\ttry {\n\t\treturn readFileSync(filePath, \"utf8\");\n\t} catch (e: unknown) {\n\t\tif (!thrownIsDoesNotExistError(e)) {\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\n/**\n * Create a function for filtering out ignored assets.\n *\n * The generated function takes an asset path, relative to the asset directory,\n * and returns true if the asset should not be ignored.\n */\nexport async function createAssetsIgnoreFunction(dir: string) {\n\tconst cfAssetIgnorePath = resolve(dir, CF_ASSETS_IGNORE_FILENAME);\n\n\tconst ignorePatterns = [\n\t\t// Ignore the `.assetsignore` file and other metafiles by default.\n\t\t// The ignore lib expects unix-style paths for its patterns\n\t\t`/${CF_ASSETS_IGNORE_FILENAME}`,\n\t\t`/${REDIRECTS_FILENAME}`,\n\t\t`/${HEADERS_FILENAME}`,\n\t];\n\n\tlet assetsIgnoreFilePresent = false;\n\tconst assetsIgnore = maybeGetFile(cfAssetIgnorePath);\n\tif (assetsIgnore !== undefined) {\n\t\tassetsIgnoreFilePresent = true;\n\t\tignorePatterns.push(...assetsIgnore.split(\"\\n\"));\n\t}\n\n\treturn {\n\t\tassetsIgnoreFunction: createPatternMatcher(ignorePatterns, true),\n\t\tassetsIgnoreFilePresent,\n\t};\n}\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.!#$%&’*+/=?^_`{|}~-]+@[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 { z } from \"zod\";\n\nconst InternalConfigSchema = z.object({\n\taccount_id: z.number().optional(),\n\tscript_id: z.number().optional(),\n\tdebug: z.boolean().optional(),\n});\n\nconst StaticRoutingSchema = z.object({\n\tuser_worker: z.array(z.string()),\n\tasset_worker: z.array(z.string()).optional(),\n});\n\nexport type StaticRouting = z.infer<typeof StaticRoutingSchema>;\n\nexport const RouterConfigSchema = z.object({\n\tinvoke_user_worker_ahead_of_assets: z.boolean().optional(),\n\tstatic_routing: StaticRoutingSchema.optional(),\n\thas_user_worker: z.boolean().optional(),\n\t...InternalConfigSchema.shape,\n});\n\nexport const EyeballRouterConfigSchema = z.union([\n\tz.object({\n\t\tlimitedAssetsOnly: z.boolean().optional(),\n\t}),\n\tz.null(),\n]);\n\nconst MetadataStaticRedirectEntry = z.object({\n\tstatus: z.number(),\n\tto: z.string(),\n\tlineNumber: z.number(),\n});\n\nconst MetadataRedirectEntry = z.object({\n\tstatus: z.number(),\n\tto: z.string(),\n});\n\nconst MetadataStaticRedirects = z.record(MetadataStaticRedirectEntry);\nexport type MetadataStaticRedirects = z.infer<typeof MetadataStaticRedirects>;\nconst MetadataRedirects = z.record(MetadataRedirectEntry);\nexport type MetadataRedirects = z.infer<typeof MetadataRedirects>;\n\nconst MetadataHeaderEntry = z.object({\n\tset: z.record(z.string()).optional(),\n\tunset: z.array(z.string()).optional(),\n});\n\nconst MetadataHeaders = z.record(MetadataHeaderEntry);\nexport type MetadataHeaders = z.infer<typeof MetadataHeaders>;\n\nexport const RedirectsSchema = z\n\t.object({\n\t\tversion: z.literal(1),\n\t\tstaticRules: MetadataStaticRedirects,\n\t\trules: MetadataRedirects,\n\t})\n\t.optional();\n\nexport const HeadersSchema = z\n\t.object({\n\t\tversion: z.literal(2),\n\t\trules: MetadataHeaders,\n\t})\n\t.optional();\n\nexport const AssetConfigSchema = z.object({\n\tcompatibility_date: z.string().optional(),\n\tcompatibility_flags: z.array(z.string()).optional(),\n\thtml_handling: z\n\t\t.enum([\n\t\t\t\"auto-trailing-slash\",\n\t\t\t\"force-trailing-slash\",\n\t\t\t\"drop-trailing-slash\",\n\t\t\t\"none\",\n\t\t])\n\t\t.optional(),\n\tnot_found_handling: z\n\t\t.enum([\"single-page-application\", \"404-page\", \"none\"])\n\t\t.optional(),\n\tredirects: RedirectsSchema,\n\theaders: HeadersSchema,\n\thas_static_routing: z.boolean().optional(),\n\t...InternalConfigSchema.shape,\n});\n\nexport type EyeballRouterConfig = z.infer<typeof EyeballRouterConfigSchema>;\nexport type RouterConfig = z.infer<typeof RouterConfigSchema>;\nexport type AssetConfig = z.infer<typeof AssetConfigSchema>;\n\nexport interface UnsafePerformanceTimer {\n\treadonly timeOrigin: number;\n\tnow: () => number;\n}\n\nexport interface JaegerTracing {\n\tenterSpan<T extends unknown[], R = void>(\n\t\tname: string,\n\t\tspan: (s: Span, ...args: T) => R,\n\t\t...args: T\n\t): R;\n\tgetSpanContext(): SpanContext | null;\n\trunWithSpanContext<T extends unknown[]>(\n\t\tspanContext: SpanContext | null,\n\t\tcallback: (...args: T) => unknown,\n\t\t...args: T\n\t): unknown;\n\n\treadonly traceId: string | null;\n\treadonly spanId: string | null;\n\treadonly parentSpanId: string | null;\n\treadonly cfTraceIdHeader: string | null;\n}\n\nexport interface Span {\n\taddLogs(logs: JaegerRecord): void;\n\tsetTags(tags: JaegerRecord): void;\n\tend(): void;\n\n\tisRecording: boolean;\n}\n\nexport interface SpanContext {\n\ttraceId: string;\n\tspanId: string;\n\tparentSpanId: string;\n\ttraceFlags: number;\n}\n\nexport type JaegerValue = string | number | boolean;\nexport type JaegerRecord = Record<string, JaegerValue>;\n\nexport interface ColoMetadata {\n\tmetalId: number;\n\tcoloId: number;\n\tcoloRegion: string;\n\tcoloTier: number;\n}\n","import * as path from \"node:path\";\nimport {\n\tconstructHeaders,\n\tconstructRedirects,\n} from \"@cloudflare/workers-shared/utils/configuration/constructConfiguration\";\nimport { parseHeaders } from \"@cloudflare/workers-shared/utils/configuration/parseHeaders\";\nimport { parseRedirects } from \"@cloudflare/workers-shared/utils/configuration/parseRedirects\";\nimport {\n\tHEADERS_FILENAME,\n\tREDIRECTS_FILENAME,\n} from \"@cloudflare/workers-shared/utils/constants\";\nimport { maybeGetFile } from \"@cloudflare/workers-shared/utils/helpers\";\nimport {\n\tHeadersSchema,\n\tRedirectsSchema,\n} from \"@cloudflare/workers-shared/utils/types\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type { Logger } from \"@cloudflare/workers-shared/utils/configuration/types\";\nimport type { AssetConfig } from \"@cloudflare/workers-shared/utils/types\";\nimport type * as vite from \"vite\";\nimport type { Unstable_Config } from \"wrangler\";\n\n/**\n * Returns true if the `changedFile` matches one of the _headers or _redirects files,\n * and the experimental support for these files is turned on.\n */\nexport function hasAssetsConfigChanged(\n\tresolvedPluginConfig: AssetsOnlyResolvedConfig | WorkersResolvedConfig,\n\tresolvedViteConfig: vite.ResolvedConfig,\n\tchangedFilePath: string\n) {\n\tif (!resolvedPluginConfig.experimental?.headersAndRedirectsDevModeSupport) {\n\t\treturn false;\n\t}\n\treturn [\n\t\tgetRedirectsConfigPath(resolvedViteConfig),\n\t\tgetHeadersConfigPath(resolvedViteConfig),\n\t].includes(changedFilePath);\n}\n\n/**\n * Computes the assets config that will be passed to Miniflare,\n * taking into account whether experimental _headers and _redirects support is on.\n */\nexport function getAssetsConfig(\n\tresolvedPluginConfig: AssetsOnlyResolvedConfig | WorkersResolvedConfig,\n\tentryWorkerConfig: Unstable_Config | undefined,\n\tresolvedConfig: vite.ResolvedConfig\n): AssetConfig {\n\tconst assetsConfig =\n\t\tresolvedPluginConfig.type === \"assets-only\"\n\t\t\t? resolvedPluginConfig.config.assets\n\t\t\t: entryWorkerConfig?.assets;\n\n\tconst compatibilityOptions =\n\t\tresolvedPluginConfig.type === \"assets-only\"\n\t\t\t? {\n\t\t\t\t\tcompatibility_date: resolvedPluginConfig.config.compatibility_date,\n\t\t\t\t\tcompatibility_flags: resolvedPluginConfig.config.compatibility_flags,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...(entryWorkerConfig?.compatibility_date\n\t\t\t\t\t\t? { compatibility_date: entryWorkerConfig.compatibility_date }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(entryWorkerConfig?.compatibility_flags\n\t\t\t\t\t\t? { compatibility_flags: entryWorkerConfig.compatibility_flags }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\n\tconst config = {\n\t\t...compatibilityOptions,\n\t\t...assetsConfig,\n\t\thas_static_routing:\n\t\t\tresolvedPluginConfig.type === \"workers\" &&\n\t\t\tresolvedPluginConfig.staticRouting\n\t\t\t\t? true\n\t\t\t\t: false,\n\t} satisfies AssetConfig;\n\n\tif (!resolvedPluginConfig.experimental?.headersAndRedirectsDevModeSupport) {\n\t\treturn config;\n\t}\n\n\tconst logger: Logger = {\n\t\tdebug() {\n\t\t\t/* No debug log in Vite. */\n\t\t},\n\t\tlog(message: string) {\n\t\t\tresolvedConfig.logger.info(message);\n\t\t},\n\t\tinfo(message: string) {\n\t\t\tresolvedConfig.logger.info(message);\n\t\t},\n\t\twarn(message: string) {\n\t\t\tresolvedConfig.logger.warn(message);\n\t\t},\n\t\terror(error: Error) {\n\t\t\tresolvedConfig.logger.error(error.message, { error });\n\t\t},\n\t};\n\n\tconst redirectsFile = getRedirectsConfigPath(resolvedConfig);\n\tconst redirectsContents = maybeGetFile(redirectsFile);\n\tconst redirects =\n\t\tredirectsContents &&\n\t\tRedirectsSchema.parse(\n\t\t\tconstructRedirects({\n\t\t\t\tredirects: parseRedirects(redirectsContents, {\n\t\t\t\t\thtmlHandling: assetsConfig?.html_handling,\n\t\t\t\t}),\n\t\t\t\tredirectsFile,\n\t\t\t\tlogger,\n\t\t\t}).redirects\n\t\t);\n\n\tconst headersFile = getHeadersConfigPath(resolvedConfig);\n\tconst headersContents = maybeGetFile(headersFile);\n\tconst headers =\n\t\theadersContents &&\n\t\tHeadersSchema.parse(\n\t\t\tconstructHeaders({\n\t\t\t\theaders: parseHeaders(headersContents),\n\t\t\t\theadersFile,\n\t\t\t\tlogger,\n\t\t\t}).headers\n\t\t);\n\n\treturn {\n\t\t...config,\n\t\t...(redirects ? { redirects } : {}),\n\t\t...(headers ? { headers } : {}),\n\t};\n}\n\nfunction getRedirectsConfigPath(config: vite.ResolvedConfig): string {\n\treturn path.join(config.publicDir, REDIRECTS_FILENAME);\n}\n\nfunction getHeadersConfigPath(config: vite.ResolvedConfig): string {\n\treturn path.join(config.publicDir, HEADERS_FILENAME);\n}\n","import assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport colors from \"picocolors\";\nimport { VIRTUAL_CLIENT_FALLBACK_ENTRY } from \"./plugins/virtual-modules\";\nimport { satisfiesMinimumViteVersion } from \"./utils\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type * as vite from \"vite\";\nimport type { Unstable_Config } from \"wrangler\";\n\nconst CLIENT_FALLBACK_ENTRY_NAME = \"__cloudflare_fallback_entry__\";\n\nexport function createBuildApp(\n\tresolvedPluginConfig: AssetsOnlyResolvedConfig | WorkersResolvedConfig\n): (builder: vite.ViteBuilder) => Promise<void> {\n\treturn async (builder) => {\n\t\tconst clientEnvironment = builder.environments.client;\n\t\tassert(clientEnvironment, `No \"client\" environment`);\n\t\tconst defaultHtmlPath = path.resolve(builder.config.root, \"index.html\");\n\t\tconst hasClientEntry =\n\t\t\tclientEnvironment.config.build.rollupOptions.input ||\n\t\t\tfs.existsSync(defaultHtmlPath);\n\n\t\tconst workerEnvironments = [\n\t\t\t...resolvedPluginConfig.environmentNameToWorkerMap.keys(),\n\t\t].map((environmentName) => {\n\t\t\tconst environment = builder.environments[environmentName];\n\t\t\tassert(environment, `\"${environmentName}\" environment not found`);\n\n\t\t\treturn environment;\n\t\t});\n\n\t\tawait Promise.all(\n\t\t\tworkerEnvironments.map((environment) => builder.build(environment))\n\t\t);\n\n\t\tif (resolvedPluginConfig.type === \"assets-only\") {\n\t\t\tif (hasClientEntry) {\n\t\t\t\tawait builder.build(clientEnvironment);\n\t\t\t} else if (\n\t\t\t\tgetHasPublicAssets(builder.config) ||\n\t\t\t\tresolvedPluginConfig.prerenderWorkerEnvironmentName\n\t\t\t) {\n\t\t\t\tawait fallbackBuild(builder, clientEnvironment);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst { entryWorkerEnvironmentName } = resolvedPluginConfig;\n\t\tconst entryWorkerEnvironment =\n\t\t\tbuilder.environments[entryWorkerEnvironmentName];\n\t\tassert(\n\t\t\tentryWorkerEnvironment,\n\t\t\t`No \"${entryWorkerEnvironmentName}\" environment`\n\t\t);\n\t\tconst entryWorkerBuildDirectory = path.resolve(\n\t\t\tbuilder.config.root,\n\t\t\tentryWorkerEnvironment.config.build.outDir\n\t\t);\n\t\tconst entryWorkerManifest = loadViteManifest(entryWorkerBuildDirectory);\n\t\tconst importedAssetPaths = getImportedAssetPaths(entryWorkerManifest);\n\n\t\tif (hasClientEntry) {\n\t\t\tawait builder.build(clientEnvironment);\n\t\t} else if (\n\t\t\timportedAssetPaths.size ||\n\t\t\tgetHasPublicAssets(builder.config) ||\n\t\t\tresolvedPluginConfig.prerenderWorkerEnvironmentName\n\t\t) {\n\t\t\tawait fallbackBuild(builder, clientEnvironment);\n\t\t} else {\n\t\t\t// In Vite 7 and above we do this in the `buildApp` hook\n\t\t\tif (!satisfiesMinimumViteVersion(\"7.0.0\")) {\n\t\t\t\tremoveAssetsField(entryWorkerBuildDirectory);\n\t\t\t}\n\n\t\t\t// Return early as there is no client build\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO: move static assets from the prerender environment to the client environment\n\n\t\tconst clientBuildDirectory = path.resolve(\n\t\t\tbuilder.config.root,\n\t\t\tclientEnvironment.config.build.outDir\n\t\t);\n\t\tconst movedAssetPaths: string[] = [];\n\n\t\t// Move assets imported in the entry Worker to the client build\n\t\tfor (const assetPath of importedAssetPaths) {\n\t\t\tconst src = path.join(entryWorkerBuildDirectory, assetPath);\n\t\t\tconst dest = path.join(clientBuildDirectory, assetPath);\n\n\t\t\tif (!fs.existsSync(src)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (fs.existsSync(dest)) {\n\t\t\t\tfs.unlinkSync(src);\n\t\t\t} else {\n\t\t\t\tconst destDir = path.dirname(dest);\n\t\t\t\tfs.mkdirSync(destDir, { recursive: true });\n\t\t\t\tfs.renameSync(src, dest);\n\t\t\t\tmovedAssetPaths.push(dest);\n\t\t\t}\n\t\t}\n\n\t\tif (movedAssetPaths.length) {\n\t\t\tbuilder.config.logger.info(\n\t\t\t\t[\n\t\t\t\t\t`${colors.green(\"✓\")} ${movedAssetPaths.length} asset${\n\t\t\t\t\t\tmovedAssetPaths.length > 1 ? \"s\" : \"\"\n\t\t\t\t\t} moved from \"${entryWorkerEnvironmentName}\" to \"client\" build output.`,\n\t\t\t\t\t...movedAssetPaths.map((assetPath) =>\n\t\t\t\t\t\tcolors.dim(path.relative(builder.config.root, assetPath))\n\t\t\t\t\t),\n\t\t\t\t].join(\"\\n\")\n\t\t\t);\n\t\t}\n\t};\n}\n\nfunction getHasPublicAssets({ publicDir }: vite.ResolvedConfig): boolean {\n\tlet hasPublicAssets = false;\n\n\tif (publicDir) {\n\t\ttry {\n\t\t\tconst files = fs.readdirSync(publicDir);\n\n\t\t\tif (files.length) {\n\t\t\t\thasPublicAssets = true;\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\treturn hasPublicAssets;\n}\n\nasync function fallbackBuild(\n\tbuilder: vite.ViteBuilder,\n\tenvironment: vite.BuildEnvironment\n): Promise<void> {\n\tenvironment.config.build.rollupOptions = {\n\t\tinput: VIRTUAL_CLIENT_FALLBACK_ENTRY,\n\t\tlogLevel: \"silent\",\n\t\toutput: {\n\t\t\tentryFileNames: CLIENT_FALLBACK_ENTRY_NAME,\n\t\t},\n\t};\n\n\tawait builder.build(environment);\n\n\tconst fallbackEntryPath = path.resolve(\n\t\tbuilder.config.root,\n\t\tenvironment.config.build.outDir,\n\t\tCLIENT_FALLBACK_ENTRY_NAME\n\t);\n\n\tfs.unlinkSync(fallbackEntryPath);\n}\n\nfunction loadViteManifest(directory: string) {\n\tconst contents = fs.readFileSync(\n\t\tpath.resolve(directory, \".vite\", \"manifest.json\"),\n\t\t\"utf-8\"\n\t);\n\n\treturn JSON.parse(contents) as vite.Manifest;\n}\n\nfunction getImportedAssetPaths(viteManifest: vite.Manifest): Set<string> {\n\tconst assetPaths = Object.values(viteManifest).flatMap(\n\t\t(chunk) => chunk.assets ?? []\n\t);\n\n\treturn new Set(assetPaths);\n}\n\n/**\n * Used to remove the `assets` field from the entry Worker config if there are no assets\n */\nexport function removeAssetsField(entryWorkerBuildDirectory: string): void {\n\tconst entryWorkerConfigPath = path.join(\n\t\tentryWorkerBuildDirectory,\n\t\t\"wrangler.json\"\n\t);\n\tconst workerConfig = JSON.parse(\n\t\tfs.readFileSync(entryWorkerConfigPath, \"utf-8\")\n\t) as Unstable_Config;\n\n\tworkerConfig.assets = undefined;\n\n\tfs.writeFileSync(entryWorkerConfigPath, JSON.stringify(workerConfig));\n}\n","import assert from \"node:assert\";\nimport { nonPrefixedNodeModules } from \"@cloudflare/unenv-preset\";\nimport { CoreHeaders } from \"miniflare\";\nimport * as vite from \"vite\";\nimport { nodeBuiltinsRE } from \"./nodejs-compat\";\nimport { additionalModuleRE } from \"./plugins/additional-modules\";\nimport {\n\tENVIRONMENT_NAME_HEADER,\n\tGET_EXPORT_TYPES_PATH,\n\tINIT_PATH,\n\tIS_ENTRY_WORKER_HEADER,\n\tIS_PARENT_ENVIRONMENT_HEADER,\n\tUNKNOWN_HOST,\n\tVIRTUAL_WORKER_ENTRY,\n\tWORKER_ENTRY_PATH_HEADER,\n} from \"./shared\";\nimport { debuglog, getOutputDirectory, isRolldown } from \"./utils\";\nimport type { ExportTypes } from \"./export-types\";\nimport type {\n\tResolvedWorkerConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type { MessageEvent, Miniflare, WebSocket } from \"miniflare\";\nimport type { FetchFunctionOptions } from \"vite/module-runner\";\n\nexport const MAIN_ENTRY_NAME = \"index\";\n\ninterface WebSocketContainer {\n\twebSocket?: WebSocket;\n\tmessageBuffers?: string[];\n}\n\nconst webSocketUndefinedError = \"The WebSocket is undefined\";\n\nfunction createHotChannel(\n\twebSocketContainer: WebSocketContainer\n): vite.HotChannel {\n\tconst listenersMap = new Map<string, Set<vite.HotChannelListener>>();\n\n\tconst client: vite.HotChannelClient = {\n\t\tsend(payload) {\n\t\t\tconst webSocket = webSocketContainer.webSocket;\n\t\t\tassert(webSocket, webSocketUndefinedError);\n\n\t\t\twebSocket.send(JSON.stringify(payload));\n\t\t},\n\t};\n\n\tfunction onMessage(event: MessageEvent) {\n\t\tconst payload = JSON.parse(event.data.toString()) as vite.CustomPayload;\n\t\tconst listeners = listenersMap.get(payload.event) ?? new Set();\n\n\t\tfor (const listener of listeners) {\n\t\t\tlistener(payload.data, client);\n\t\t}\n\t}\n\n\treturn {\n\t\tsend(payload) {\n\t\t\tconst webSocket = webSocketContainer.webSocket;\n\t\t\tconst message = JSON.stringify(payload);\n\n\t\t\tif (!webSocket) {\n\t\t\t\twebSocketContainer.messageBuffers ??= [];\n\t\t\t\twebSocketContainer.messageBuffers.push(message);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twebSocket.send(message);\n\t\t},\n\t\ton(event: string, listener: vite.HotChannelListener) {\n\t\t\tconst listeners = listenersMap.get(event) ?? new Set();\n\n\t\t\tlisteners.add(listener);\n\t\t\tlistenersMap.set(event, listeners);\n\t\t},\n\t\toff(event: string, listener: vite.HotChannelListener) {\n\t\t\tlistenersMap.get(event)?.delete(listener);\n\t\t},\n\t\tlisten() {\n\t\t\tconst webSocket = webSocketContainer.webSocket;\n\t\t\tassert(webSocket, webSocketUndefinedError);\n\n\t\t\twebSocket.addEventListener(\"message\", onMessage);\n\t\t},\n\t\tclose() {\n\t\t\tconst webSocket = webSocketContainer.webSocket;\n\t\t\tassert(webSocket, webSocketUndefinedError);\n\n\t\t\twebSocket.removeEventListener(\"message\", onMessage);\n\t\t},\n\t};\n}\n\nexport class CloudflareDevEnvironment extends vite.DevEnvironment {\n\t#webSocketContainer: WebSocketContainer;\n\n\tconstructor(name: string, config: vite.ResolvedConfig) {\n\t\t// It would be good if we could avoid passing this object around and mutating it\n\t\tconst webSocketContainer: WebSocketContainer = {};\n\t\tsuper(name, config, {\n\t\t\thot: true,\n\t\t\ttransport: createHotChannel(webSocketContainer),\n\t\t});\n\t\tthis.#webSocketContainer = webSocketContainer;\n\t}\n\n\tasync initRunner(\n\t\tminiflare: Miniflare,\n\t\tworkerConfig: ResolvedWorkerConfig,\n\t\toptions: { isEntryWorker: boolean; isParentEnvironment: boolean }\n\t): Promise<void> {\n\t\tconst response = await miniflare.dispatchFetch(\n\t\t\tnew URL(INIT_PATH, UNKNOWN_HOST),\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t[CoreHeaders.ROUTE_OVERRIDE]: workerConfig.name,\n\t\t\t\t\t[WORKER_ENTRY_PATH_HEADER]: encodeURIComponent(workerConfig.main),\n\t\t\t\t\t[IS_ENTRY_WORKER_HEADER]: String(options.isEntryWorker),\n\t\t\t\t\t[ENVIRONMENT_NAME_HEADER]: this.name,\n\t\t\t\t\t[IS_PARENT_ENVIRONMENT_HEADER]: String(options.isParentEnvironment),\n\t\t\t\t\tupgrade: \"websocket\",\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\t\tassert(\n\t\t\tresponse.ok,\n\t\t\t`Failed to initialize module runner, error: ${await response.text()}`\n\t\t);\n\t\tconst webSocket = response.webSocket;\n\t\tassert(webSocket, \"Failed to establish WebSocket\");\n\t\twebSocket.accept();\n\t\tthis.#webSocketContainer.webSocket = webSocket;\n\n\t\tif (this.#webSocketContainer.messageBuffers) {\n\t\t\tfor (const bufferedMessage of this.#webSocketContainer.messageBuffers) {\n\t\t\t\twebSocket.send(bufferedMessage);\n\t\t\t}\n\n\t\t\tdelete this.#webSocketContainer.messageBuffers;\n\t\t}\n\t}\n\n\tasync fetchWorkerExportTypes(\n\t\tminiflare: Miniflare,\n\t\tworkerConfig: ResolvedWorkerConfig\n\t): Promise<ExportTypes> {\n\t\t// Wait for dependencies to be optimized before making the request\n\t\tawait this.depsOptimizer?.init();\n\n\t\tconst response = await miniflare.dispatchFetch(\n\t\t\tnew URL(GET_EXPORT_TYPES_PATH, UNKNOWN_HOST),\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t[CoreHeaders.ROUTE_OVERRIDE]: workerConfig.name,\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\t\tconst json = await response.json();\n\n\t\treturn json as ExportTypes;\n\t}\n\n\toverride async fetchModule(\n\t\tid: string,\n\t\timporter?: string,\n\t\toptions?: FetchFunctionOptions\n\t): Promise<vite.FetchResult> {\n\t\t// Additional modules (CompiledWasm, Data, Text)\n\t\tif (additionalModuleRE.test(id)) {\n\t\t\treturn {\n\t\t\t\texternalize: id,\n\t\t\t\ttype: \"module\",\n\t\t\t};\n\t\t}\n\t\treturn super.fetchModule(id, importer, options);\n\t}\n}\n\nexport const cloudflareBuiltInModules = [\n\t\"cloudflare:email\",\n\t\"cloudflare:node\",\n\t\"cloudflare:sockets\",\n\t\"cloudflare:workers\",\n\t\"cloudflare:workflows\",\n];\n\nconst defaultConditions = [\"workerd\", \"worker\", \"module\", \"browser\"];\n\n// v8 supports es2024 features as of 11.9\n// workerd uses [v8 version 14.2 as of 2025-10-17](https://developers.cloudflare.com/workers/platform/changelog/#2025-10-17)\nconst target = \"es2024\";\n\n// TODO: consider removing in next major to use default extensions\nconst resolveExtensions = [\n\t\".mjs\",\n\t\".js\",\n\t\".mts\",\n\t\".ts\",\n\t\".jsx\",\n\t\".tsx\",\n\t\".json\",\n\t\".cjs\",\n\t\".cts\",\n\t\".ctx\",\n];\n\nexport function createCloudflareEnvironmentOptions({\n\tworkerConfig,\n\tuserConfig,\n\tmode,\n\tenvironmentName,\n\tisEntryWorker,\n\tisParentEnvironment,\n\thasNodeJsCompat,\n}: {\n\tworkerConfig: ResolvedWorkerConfig;\n\tuserConfig: vite.UserConfig;\n\tmode: vite.ConfigEnv[\"mode\"];\n\tenvironmentName: string;\n\tisEntryWorker: boolean;\n\tisParentEnvironment: boolean;\n\thasNodeJsCompat: boolean;\n}): vite.EnvironmentOptions {\n\tconst rollupOptions: vite.Rollup.RollupOptions = isParentEnvironment\n\t\t? {\n\t\t\t\tinput: {\n\t\t\t\t\t[MAIN_ENTRY_NAME]: VIRTUAL_WORKER_ENTRY,\n\t\t\t\t},\n\t\t\t\t// workerd checks the types of the exports so we need to ensure that additional exports are not added to the entry module\n\t\t\t\tpreserveEntrySignatures: \"strict\",\n\t\t\t}\n\t\t: {};\n\tconst define = getProcessEnvReplacements(hasNodeJsCompat, mode);\n\n\treturn {\n\t\tresolve: {\n\t\t\t// Note: in order for ssr pre-bundling to take effect we need to ask vite to treat all\n\t\t\t//       dependencies as not external\n\t\t\tnoExternal: true,\n\t\t\t// We want to use `workerd` package exports if available (e.g. for postgres).\n\t\t\tconditions: [...defaultConditions, \"development|production\"],\n\t\t\t// The Cloudflare ones are proper builtins in the environment\n\t\t\tbuiltins: [...cloudflareBuiltInModules],\n\t\t},\n\t\tdefine,\n\t\tdev: {\n\t\t\tcreateEnvironment(name, config) {\n\t\t\t\t// CloudflareDevEnvironment requires initRunner() to be called\n\t\t\t\t// via configureServer. If that hook was stripped, fall back\n\t\t\t\t// to a standard Vite environment. This is needed to support\n\t\t\t\t// React Router's child compiler, which is a separate Vite dev server\n\t\t\t\t// that runs during the build.\n\t\t\t\tconst hasConfigureServer = config.plugins.some(\n\t\t\t\t\t(plugin) =>\n\t\t\t\t\t\tplugin.name === \"vite-plugin-cloudflare:dev\" &&\n\t\t\t\t\t\tplugin.configureServer !== undefined\n\t\t\t\t);\n\t\t\t\tif (!hasConfigureServer) {\n\t\t\t\t\treturn vite.createRunnableDevEnvironment(name, config);\n\t\t\t\t}\n\t\t\t\treturn new CloudflareDevEnvironment(name, config);\n\t\t\t},\n\t\t},\n\t\tbuild: {\n\t\t\tcreateEnvironment(name, config) {\n\t\t\t\treturn new vite.BuildEnvironment(name, config);\n\t\t\t},\n\t\t\ttarget,\n\t\t\temitAssets: true,\n\t\t\tmanifest: isEntryWorker,\n\t\t\toutDir: getOutputDirectory(userConfig, environmentName),\n\t\t\tcopyPublicDir: false,\n\t\t\tssr: true,\n\t\t\t...(isRolldown\n\t\t\t\t? {\n\t\t\t\t\t\trolldownOptions: {\n\t\t\t\t\t\t\t...rollupOptions,\n\t\t\t\t\t\t\tplatform: \"neutral\",\n\t\t\t\t\t\t\tresolve: {\n\t\t\t\t\t\t\t\textensions: resolveExtensions,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\trollupOptions,\n\t\t\t\t\t}),\n\t\t},\n\t\toptimizeDeps: {\n\t\t\t// Note: ssr pre-bundling is opt-in and we need to enable it by setting `noDiscovery` to false\n\t\t\tnoDiscovery: false,\n\t\t\t// Workaround for https://github.com/vitejs/vite/issues/20867\n\t\t\t// Longer term solution is to use full-bundle mode rather than `optimizeDeps`\n\t\t\tignoreOutdatedRequests: true,\n\t\t\t// We need to normalize the path as it is treated as a glob and backslashes are therefore treated as escape characters.\n\t\t\tentries: vite.normalizePath(workerConfig.main),\n\t\t\texclude: [\n\t\t\t\t...cloudflareBuiltInModules,\n\t\t\t\t...nonPrefixedNodeModules,\n\t\t\t\t...nonPrefixedNodeModules.map((module) => `node:${module}`),\n\t\t\t\t// New Node.js built-in modules are only published with the `node:` prefix.\n\t\t\t\t...[\"node:sea\", \"node:sqlite\", \"node:test\", \"node:test/reporters\"],\n\t\t\t],\n\t\t\t...(isRolldown\n\t\t\t\t? {\n\t\t\t\t\t\trolldownOptions: {\n\t\t\t\t\t\t\tplatform: \"neutral\",\n\t\t\t\t\t\t\tresolve: {\n\t\t\t\t\t\t\t\tconditionNames: [...defaultConditions, \"development\"],\n\t\t\t\t\t\t\t\textensions: resolveExtensions,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttransform: {\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tdefine,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tplugins: [\n\t\t\t\t\t\t\t\t// In Vite 8, `require` calls are not automatically replaced when the format is ESM and `platform` is `neutral`\n\t\t\t\t\t\t\t\tvite.esmExternalRequirePlugin({\n\t\t\t\t\t\t\t\t\texternal: [nodeBuiltinsRE],\n\t\t\t\t\t\t\t\t\tskipDuplicateCheck: true,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tesbuildOptions: {\n\t\t\t\t\t\t\tplatform: \"neutral\",\n\t\t\t\t\t\t\tconditions: [...defaultConditions, \"development\"],\n\t\t\t\t\t\t\tresolveExtensions,\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\tdefine,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t},\n\t\t// We manually set `process.env` replacements using `define`\n\t\tkeepProcessEnv: true,\n\t};\n}\n\n/**\n * Gets `process.env` replacement values.\n * `process.env.NODE_ENV` is always replaced.\n * `process.env` is replaced with an empty object if `nodejs_compat` is not enabled\n * @param hasNodeJsCompat - whether `nodejs_compat` is enabled\n * @param mode - the Vite mode\n * @returns replacement values\n */\nfunction getProcessEnvReplacements(\n\thasNodeJsCompat: boolean,\n\tmode: vite.ConfigEnv[\"mode\"]\n): Record<string, string> {\n\tconst nodeEnv = process.env.NODE_ENV || mode;\n\tconst nodeEnvReplacements = {\n\t\t\"process.env.NODE_ENV\": JSON.stringify(nodeEnv),\n\t\t\"global.process.env.NODE_ENV\": JSON.stringify(nodeEnv),\n\t\t\"globalThis.process.env.NODE_ENV\": JSON.stringify(nodeEnv),\n\t};\n\n\treturn hasNodeJsCompat\n\t\t? nodeEnvReplacements\n\t\t: {\n\t\t\t\t...nodeEnvReplacements,\n\t\t\t\t\"process.env\": \"{}\",\n\t\t\t\t\"global.process.env\": \"{}\",\n\t\t\t\t\"globalThis.process.env\": \"{}\",\n\t\t\t};\n}\n\nexport function initRunners(\n\tresolvedPluginConfig: WorkersResolvedConfig,\n\tviteDevServer: vite.ViteDevServer,\n\tminiflare: Miniflare\n): Promise<void[]> | undefined {\n\tconst initPromises = [\n\t\t...resolvedPluginConfig.environmentNameToWorkerMap,\n\t].flatMap(([environmentName, worker]) => {\n\t\tdebuglog(\"Initializing worker:\", worker.config.name);\n\t\tconst isEntryWorker =\n\t\t\tenvironmentName === resolvedPluginConfig.entryWorkerEnvironmentName;\n\n\t\tconst childEnvironmentNames =\n\t\t\tresolvedPluginConfig.environmentNameToChildEnvironmentNamesMap.get(\n\t\t\t\tenvironmentName\n\t\t\t) ?? [];\n\n\t\tconst parentInit = (\n\t\t\tviteDevServer.environments[environmentName] as CloudflareDevEnvironment\n\t\t).initRunner(miniflare, worker.config, {\n\t\t\tisEntryWorker,\n\t\t\tisParentEnvironment: true,\n\t\t});\n\n\t\tconst childInits = childEnvironmentNames.map((childEnvironmentName) => {\n\t\t\tdebuglog(\"Initializing child environment:\", childEnvironmentName);\n\t\t\treturn (\n\t\t\t\tviteDevServer.environments[\n\t\t\t\t\tchildEnvironmentName\n\t\t\t\t] as CloudflareDevEnvironment\n\t\t\t).initRunner(miniflare, worker.config, {\n\t\t\t\tisEntryWorker: false,\n\t\t\t\tisParentEnvironment: false,\n\t\t\t});\n\t\t});\n\n\t\treturn [parentInit, ...childInits];\n\t});\n\n\treturn Promise.all(initPromises);\n}\n","import * as path from \"node:path\";\nimport * as wrangler from \"wrangler\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type { Unstable_Config } from \"wrangler\";\n\n/**\n * Gets any variables with which to augment the Worker config in preview mode.\n *\n * Calls `unstable_getVarsForDev` with the current Cloudflare environment to get local dev variables from the .dev.vars/.env/process.env.\n * When `secrets` is defined in the Worker config, only declared secrets are loaded.\n */\nexport function getLocalDevVarsForPreview(\n\tconfig: Unstable_Config,\n\tcloudflareEnv: string | undefined\n): string | undefined {\n\tconst dotDevDotVars = wrangler.unstable_getVarsForDev(\n\t\tconfig.configPath,\n\t\tundefined, // We don't currently support setting a list of custom `.env` files.\n\t\t{}, // Don't pass actual vars since these will be loaded from the wrangler.json.\n\t\tcloudflareEnv,\n\t\tfalse,\n\t\tconfig.secrets\n\t);\n\tconst dotDevDotVarsEntries = Array.from(Object.entries(dotDevDotVars));\n\tif (dotDevDotVarsEntries.length > 0) {\n\t\tconst dotDevDotVarsContent = dotDevDotVarsEntries\n\t\t\t.map(([key, { value }]) => {\n\t\t\t\t// `value` is typed as optional but `unstable_getVarsForDev`\n\t\t\t\t// always populates it; `?? \"\"` narrows the type for `quoteForDotenv`.\n\t\t\t\treturn `${key}=${quoteForDotenv(value?.toString() ?? \"\")}\\n`;\n\t\t\t})\n\t\t\t.join(\"\");\n\t\treturn dotDevDotVarsContent;\n\t}\n}\n\n/**\n * Quote a value so that wrangler reads it back unchanged when it parses\n * `dist/<env>/.dev.vars` at preview time.\n *\n * Strategy: To quote the string pick the first quote character that does not\n * appear in the value (single → backtick → double). Throw if a value cannot\n * be losslessly serialized rather than silently corrupting it.\n *\n * @internal exported for tests\n */\nexport function quoteForDotenv(value: string): string {\n\tif (!value.includes(\"'\")) {\n\t\treturn `'${value}'`;\n\t}\n\tif (!value.includes(\"`\")) {\n\t\treturn `\\`${value}\\``;\n\t}\n\tif (!value.includes('\"') && !/[\\\\\\n\\r]/.test(value)) {\n\t\treturn `\"${value}\"`;\n\t}\n\tthrow new Error(\n\t\t\"Unable to serialize value to .dev.vars: contains every supported quote character or unsafe escape sequence.\"\n\t);\n}\n\n/**\n * Returns `true` if the `changedFile` matches a `.dev.vars` or `.env` file.\n */\nexport function hasLocalDevVarsFileChanged(\n\t{\n\t\tconfigPaths,\n\t\tcloudflareEnv,\n\t}: AssetsOnlyResolvedConfig | WorkersResolvedConfig,\n\tchangedFilePath: string\n) {\n\treturn [...configPaths].some((configPath) => {\n\t\tconst configDir = path.dirname(configPath);\n\t\treturn [\n\t\t\t\".dev.vars\",\n\t\t\t\".env\",\n\t\t\t...(cloudflareEnv\n\t\t\t\t? [`.dev.vars.${cloudflareEnv}`, `.env.${cloudflareEnv}`]\n\t\t\t\t: []),\n\t\t].some(\n\t\t\t(localDevFile) => changedFilePath === path.join(configDir, localDevFile)\n\t\t);\n\t});\n}\n","import assert from \"node:assert\";\nimport type {\n\tAssetsOnlyResolvedConfig,\n\tWorkersResolvedConfig,\n} from \"./plugin-config\";\nimport type * as vite from \"vite\";\n\ninterface DisallowedEnvironmentOptions {\n\tresolveExternal?: vite.ResolveOptions[\"external\"];\n}\n\n/**\n * Throws an error if Worker environments include configuration options that are incompatible with the plugin.\n */\nexport function validateWorkerEnvironmentOptions(\n\tresolvedPluginConfig: AssetsOnlyResolvedConfig | WorkersResolvedConfig,\n\tresolvedViteConfig: vite.ResolvedConfig\n) {\n\tconst disallowedEnvironmentOptionsMap = new Map<\n\t\tstring,\n\t\tDisallowedEnvironmentOptions\n\t>();\n\n\tfor (const environmentName of resolvedPluginConfig.environmentNameToWorkerMap.keys()) {\n\t\tconst environmentOptions = resolvedViteConfig.environments[environmentName];\n\t\tassert(\n\t\t\tenvironmentOptions,\n\t\t\t`Missing environment config for \"${environmentName}\"`\n\t\t);\n\t\tconst { resolve } = environmentOptions;\n\t\tconst disallowedEnvironmentOptions: DisallowedEnvironmentOptions = {};\n\n\t\tif (resolve.external === true || resolve.external.length) {\n\t\t\tdisallowedEnvironmentOptions.resolveExternal = resolve.external;\n\t\t}\n\n\t\tif (Object.keys(disallowedEnvironmentOptions).length) {\n\t\t\tdisallowedEnvironmentOptionsMap.set(\n\t\t\t\tenvironmentName,\n\t\t\t\tdisallowedEnvironmentOptions\n\t\t\t);\n\t\t}\n\t}\n\n\tif (disallowedEnvironmentOptionsMap.size) {\n\t\tconst errorMessage = `The following environment options are incompatible with the Cloudflare Vite plugin:\\n${[\n\t\t\t...disallowedEnvironmentOptionsMap,\n\t\t]\n\t\t\t.map(\n\t\t\t\t([environmentName, disallowedEnvironmentOptions]) =>\n\t\t\t\t\tdisallowedEnvironmentOptions.resolveExternal &&\n\t\t\t\t\t`\t- \"${environmentName}\" environment: \\`resolve.external\\`: ${JSON.stringify(disallowedEnvironmentOptions.resolveExternal)}\\n`\n\t\t\t)\n\t\t\t.join(\n\t\t\t\t\"\"\n\t\t\t)}To resolve this issue, avoid setting \\`resolve.external\\` in your Cloudflare Worker environments.\\n`;\n\n\t\tthrow new Error(errorMessage);\n\t}\n}\n","import assert from \"node:assert\";\nimport * as path from \"node:path\";\nimport { normalizePath } from \"vite\";\nimport { hasAssetsConfigChanged } from \"../asset-config\";\nimport { createBuildApp, removeAssetsField } from \"../build\";\nimport {\n\tcloudflareBuiltInModules,\n\tcreateCloudflareEnvironmentOptions,\n} from \"../cloudflare-environment\";\nimport { assertIsNotPreview } from \"../context\";\nimport { hasLocalDevVarsFileChanged } from \"../dev-vars\";\nimport { createPlugin, debuglog, getOutputDirectory } from \"../utils\";\nimport { validateWorkerEnvironmentOptions } from \"../vite-config\";\nimport { getWarningForWorkersConfigs } from \"../workers-configs\";\nimport { QUICK_TUNNEL_ALLOWED_HOST } from \"./tunnel\";\nimport type { PluginContext } from \"../context\";\nimport type { EnvironmentOptions, UserConfig } from \"vite\";\n\n/**\n * Plugin to handle configuration and config file watching\n */\nexport const configPlugin = createPlugin(\"config\", (ctx) => {\n\treturn {\n\t\tconfig(userConfig, env) {\n\t\t\tif (ctx.resolvedPluginConfig.type === \"preview\") {\n\t\t\t\treturn {\n\t\t\t\t\tappType: \"custom\",\n\t\t\t\t\tpreview: {\n\t\t\t\t\t\tallowedHosts: getAllowedHosts(\n\t\t\t\t\t\t\tctx.resolvedPluginConfig.tunnel\n\t\t\t\t\t\t\t\t? [QUICK_TUNNEL_ALLOWED_HOST]\n\t\t\t\t\t\t\t\t: [],\n\t\t\t\t\t\t\tuserConfig.preview?.allowedHosts ??\n\t\t\t\t\t\t\t\tuserConfig.server?.allowedHosts\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!ctx.hasShownWorkerConfigWarnings) {\n\t\t\t\tctx.setHasShownWorkerConfigWarnings(true);\n\t\t\t\tconst workerConfigWarnings = getWarningForWorkersConfigs(\n\t\t\t\t\tctx.resolvedPluginConfig.rawConfigs\n\t\t\t\t);\n\t\t\t\tif (workerConfigWarnings) {\n\t\t\t\t\tconsole.warn(workerConfigWarnings);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst defaultDeniedFiles = [\n\t\t\t\t\".env\",\n\t\t\t\t\".env.*\",\n\t\t\t\t\".npmrc\",\n\t\t\t\t\".yarnrc\",\n\t\t\t\t\".yarnrc.yml\",\n\t\t\t\t\"*.{crt,pem,key,pfx,p12,p8,jks}\",\n\t\t\t\t\"**/.git/**\",\n\t\t\t\t\".dev.vars\",\n\t\t\t\t\".dev.vars.*\",\n\t\t\t\t\"**/.wrangler/**\",\n\t\t\t];\n\n\t\t\treturn {\n\t\t\t\tappType: \"custom\",\n\t\t\t\tserver: {\n\t\t\t\t\tallowedHosts: getAllowedHosts(\n\t\t\t\t\t\tctx.getTunnelHostnames(),\n\t\t\t\t\t\tuserConfig.server?.allowedHosts\n\t\t\t\t\t),\n\t\t\t\t\tfs: {\n\t\t\t\t\t\tdeny: [\n\t\t\t\t\t\t\t...defaultDeniedFiles,\n\t\t\t\t\t\t\t...Array.from(\n\t\t\t\t\t\t\t\tctx.resolvedPluginConfig.configPaths,\n\t\t\t\t\t\t\t\t(configPath) => normalizePath(configPath)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tenvironments: getEnvironmentsConfig(ctx, userConfig, env.mode),\n\t\t\t\tbuilder: {\n\t\t\t\t\tbuildApp:\n\t\t\t\t\t\tuserConfig.builder?.buildApp ??\n\t\t\t\t\t\tcreateBuildApp(ctx.resolvedPluginConfig),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tconfigResolved(resolvedViteConfig) {\n\t\t\tctx.setResolvedViteConfig(resolvedViteConfig);\n\n\t\t\tif (ctx.resolvedPluginConfig.type !== \"preview\") {\n\t\t\t\tvalidateWorkerEnvironmentOptions(\n\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\tctx.resolvedViteConfig\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tbuildStart() {\n\t\t\tctx.setHasShownWorkerConfigWarnings(false);\n\t\t},\n\t\tconfigureServer(viteDevServer) {\n\t\t\tconst configChangedHandler = async (changedFilePath: string) => {\n\t\t\t\tassertIsNotPreview(ctx);\n\n\t\t\t\tif (\n\t\t\t\t\tctx.resolvedPluginConfig.configPaths.has(changedFilePath) ||\n\t\t\t\t\thasLocalDevVarsFileChanged(\n\t\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\t\tchangedFilePath\n\t\t\t\t\t) ||\n\t\t\t\t\thasAssetsConfigChanged(\n\t\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\t\tctx.resolvedViteConfig,\n\t\t\t\t\t\tchangedFilePath\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tdebuglog(\"Config changed: \" + changedFilePath);\n\t\t\t\t\tviteDevServer.watcher.off(\"change\", configChangedHandler);\n\t\t\t\t\tdebuglog(\"Restarting dev server and aborting previous setup\");\n\t\t\t\t\tawait viteDevServer.restart();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tviteDevServer.watcher.on(\"change\", configChangedHandler);\n\t\t},\n\t\t// This hook is not supported in Vite 6\n\t\tbuildApp: {\n\t\t\torder: \"post\",\n\t\t\tasync handler(builder) {\n\t\t\t\tif (ctx.resolvedPluginConfig.type !== \"workers\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst workerEnvironments = [\n\t\t\t\t\t...ctx.resolvedPluginConfig.environmentNameToWorkerMap.keys(),\n\t\t\t\t].map((environmentName) => {\n\t\t\t\t\tconst environment = builder.environments[environmentName];\n\t\t\t\t\tassert(environment, `\"${environmentName}\" environment not found`);\n\n\t\t\t\t\treturn environment;\n\t\t\t\t});\n\n\t\t\t\t// Build any Worker environments that haven't already been built\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tworkerEnvironments\n\t\t\t\t\t\t.filter((environment) => !environment.isBuilt)\n\t\t\t\t\t\t.map((environment) => builder.build(environment))\n\t\t\t\t);\n\n\t\t\t\tconst { entryWorkerEnvironmentName } = ctx.resolvedPluginConfig;\n\t\t\t\tconst entryWorkerEnvironment =\n\t\t\t\t\tbuilder.environments[entryWorkerEnvironmentName];\n\t\t\t\tassert(\n\t\t\t\t\tentryWorkerEnvironment,\n\t\t\t\t\t`No \"${entryWorkerEnvironmentName}\" environment`\n\t\t\t\t);\n\t\t\t\tconst entryWorkerBuildDirectory = path.resolve(\n\t\t\t\t\tbuilder.config.root,\n\t\t\t\t\tentryWorkerEnvironment.config.build.outDir\n\t\t\t\t);\n\n\t\t\t\tif (!builder.environments.client?.isBuilt) {\n\t\t\t\t\tremoveAssetsField(entryWorkerBuildDirectory);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n});\n\n/**\n * Generates the environment configuration for all Worker environments.\n */\nfunction getEnvironmentsConfig(\n\tctx: PluginContext,\n\tuserConfig: UserConfig,\n\tmode: string\n): Record<string, EnvironmentOptions> | undefined {\n\tassertIsNotPreview(ctx);\n\n\tif (!ctx.resolvedPluginConfig.environmentNameToWorkerMap.size) {\n\t\treturn;\n\t}\n\n\tconst workerEnvironments = Object.fromEntries(\n\t\t[...ctx.resolvedPluginConfig.environmentNameToWorkerMap].flatMap(\n\t\t\t([environmentName, worker]) => {\n\t\t\t\tconst childEnvironmentNames =\n\t\t\t\t\tctx.resolvedPluginConfig.environmentNameToChildEnvironmentNamesMap.get(\n\t\t\t\t\t\tenvironmentName\n\t\t\t\t\t) ?? [];\n\n\t\t\t\tconst sharedOptions = {\n\t\t\t\t\tworkerConfig: worker.config,\n\t\t\t\t\tuserConfig,\n\t\t\t\t\tmode,\n\t\t\t\t\thasNodeJsCompat: ctx.getNodeJsCompat(environmentName) !== undefined,\n\t\t\t\t};\n\n\t\t\t\tconst isEntryWorker =\n\t\t\t\t\tenvironmentName ===\n\t\t\t\t\t\tctx.resolvedPluginConfig.prerenderWorkerEnvironmentName ||\n\t\t\t\t\t(ctx.resolvedPluginConfig.type === \"workers\" &&\n\t\t\t\t\t\tenvironmentName ===\n\t\t\t\t\t\t\tctx.resolvedPluginConfig.entryWorkerEnvironmentName);\n\n\t\t\t\tconst parentConfig = [\n\t\t\t\t\tenvironmentName,\n\t\t\t\t\tcreateCloudflareEnvironmentOptions({\n\t\t\t\t\t\t...sharedOptions,\n\t\t\t\t\t\tenvironmentName,\n\t\t\t\t\t\tisEntryWorker,\n\t\t\t\t\t\tisParentEnvironment: true,\n\t\t\t\t\t}),\n\t\t\t\t] as const;\n\n\t\t\t\tconst childConfigs = childEnvironmentNames.map(\n\t\t\t\t\t(childEnvironmentName) =>\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tchildEnvironmentName,\n\t\t\t\t\t\t\tcreateCloudflareEnvironmentOptions({\n\t\t\t\t\t\t\t\t...sharedOptions,\n\t\t\t\t\t\t\t\tenvironmentName: childEnvironmentName,\n\t\t\t\t\t\t\t\tisEntryWorker: false,\n\t\t\t\t\t\t\t\tisParentEnvironment: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t] as const\n\t\t\t\t);\n\n\t\t\t\treturn [parentConfig, ...childConfigs];\n\t\t\t}\n\t\t)\n\t);\n\n\treturn {\n\t\t...workerEnvironments,\n\t\tclient: {\n\t\t\tbuild: {\n\t\t\t\toutDir: getOutputDirectory(userConfig, \"client\"),\n\t\t\t},\n\t\t\toptimizeDeps: {\n\t\t\t\t// Some frameworks allow users to mix client and server code in the same file and then extract the server code.\n\t\t\t\t// As the dependency optimization may happen before the server code is extracted, we should exclude Cloudflare built-ins from client optimization.\n\t\t\t\texclude: [...cloudflareBuiltInModules],\n\t\t\t},\n\t\t},\n\t};\n}\n\nfunction getAllowedHosts(\n\ttunnelHostnames: string[],\n\tuserAllowedHosts: true | string[] | undefined\n): true | string[] | undefined {\n\tif (tunnelHostnames.length === 0 || userAllowedHosts === true) {\n\t\treturn userAllowedHosts;\n\t}\n\n\treturn Array.from(new Set([...(userAllowedHosts ?? []), ...tunnelHostnames]));\n}\n","import assert from \"node:assert\";\nimport getPort, { portNumbers } from \"get-port\";\nimport colors from \"picocolors\";\nimport type { PluginContext } from \"./context\";\nimport type * as vite from \"vite\";\n\nexport const DEBUG_PATH = \"/__debug\";\nconst DEFAULT_INSPECTOR_PORT = 9229;\n\n/**\n * Gets the inspector port option that should be passed to Miniflare based on the user's plugin config\n */\nexport async function getInputInspectorPort(\n\tctx: PluginContext,\n\tviteServer: vite.ViteDevServer | vite.PreviewServer\n) {\n\tif (\n\t\tctx.resolvedPluginConfig.inspectorPort === undefined ||\n\t\tctx.resolvedPluginConfig.inspectorPort === 0\n\t) {\n\t\tconst resolvedInspectorPort = await ctx.getResolvedInspectorPort();\n\n\t\tif (resolvedInspectorPort !== null) {\n\t\t\t// the user is not specifying an inspector port to use and we're already\n\t\t\t// using one (this is a server restart) so let's just reuse that\n\t\t\treturn resolvedInspectorPort;\n\t\t}\n\t}\n\n\tconst inputInspectorPort =\n\t\tctx.resolvedPluginConfig.inspectorPort ??\n\t\t(await getFirstAvailablePort(DEFAULT_INSPECTOR_PORT));\n\n\tif (\n\t\tctx.resolvedPluginConfig.inspectorPort === undefined &&\n\t\tinputInspectorPort !== DEFAULT_INSPECTOR_PORT\n\t) {\n\t\tviteServer.config.logger.warn(\n\t\t\tcolors.dim(\n\t\t\t\t`Default inspector port ${DEFAULT_INSPECTOR_PORT} not available, using ${inputInspectorPort} instead\\n`\n\t\t\t)\n\t\t);\n\t}\n\n\treturn inputInspectorPort;\n}\n\nfunction getFirstAvailablePort(start: number) {\n\treturn getPort({ port: portNumbers(start, 65535) });\n}\n\n/**\n * Modifies the URL printing logic to also include a URL that developers can use to open DevTools to debug their Worker(s)\n */\nexport function addDebugToVitePrintUrls(\n\tserver: vite.ViteDevServer | vite.PreviewServer\n) {\n\tconst originalPrintUrls = server.printUrls;\n\tserver.printUrls = () => {\n\t\toriginalPrintUrls();\n\n\t\tconst localUrl = server.resolvedUrls?.local[0];\n\n\t\tif (localUrl) {\n\t\t\tconst { protocol, hostname, port } = new URL(localUrl);\n\n\t\t\tconst colorDebugUrl = (url: string) =>\n\t\t\t\tcolors.dim(\n\t\t\t\t\tcolors.yellow(\n\t\t\t\t\t\turl.replace(\n\t\t\t\t\t\t\t/:(\\d+)\\//,\n\t\t\t\t\t\t\t(_, portNumber) => `:${colors.bold(portNumber)}/`\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tserver.config.logger.info(\n\t\t\t\t`  ${colors.green(\"➜\")}  ${colors.bold(\"Debug\")}:   ${colorDebugUrl(`${protocol}//${hostname}:${port}${DEBUG_PATH}`)}`\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * Generate HTML that comprises a single script that:\n *  - redirects the page to the DevTools for debugging the first available Worker\n *  - opens tabs to the DevTools for all the remaining workers if any\n *\n * Note: this works based on the Miniflare inspector proxy logic (where Workers are available via\n * their names)\n */\nexport function getDebugPathHtml(workerNames: string[], inspectorPort: number) {\n\t// this function should always be called only when there is at least one worker to debug\n\tassert(workerNames.length >= 1, \"no workers present to debug\");\n\n\tconst workerDevtoolsUrls = workerNames.map((workerName) => {\n\t\tconst localhost = `localhost:${inspectorPort}/${workerName}`;\n\t\tconst searchParams = new URLSearchParams({\n\t\t\ttheme: \"systemPreferred\",\n\t\t\tdebugger: \"true\",\n\t\t\tws: localhost,\n\t\t\tdomain: workerName,\n\t\t});\n\t\tconst devtoolsFrontendUrl = `https://devtools.devprod.cloudflare.dev/js_app?${searchParams}`;\n\t\treturn devtoolsFrontendUrl;\n\t});\n\n\treturn `\n\t\t<script>\n\t\t\tconst workerUrls = ${JSON.stringify(workerDevtoolsUrls)};\n\t\t\tconst [firstUrl, ...rest] = workerUrls;\n\t\t\tfor (const workerUrl of rest) {\n\t\t\t\t// open new tabs for the devtools of the various workers\n\t\t\t\twindow.open(workerUrl);\n\t\t\t}\n\t\t\t// redirect the current tab to the devtools of the first worker\n\t\t\twindow.location.replace(firstUrl);\n\t\t</script>\n    `;\n}\n","import assert from \"node:assert\";\nimport { assertIsNotPreview, assertIsPreview } from \"../context\";\nimport {\n\taddDebugToVitePrintUrls,\n\tDEBUG_PATH,\n\tgetDebugPathHtml,\n} from \"../debug\";\nimport { createPlugin } from \"../utils\";\n\n/**\n * Plugin to provide a `/__debug` path for debugging Workers\n */\nexport const debugPlugin = createPlugin(\"debug\", (ctx) => {\n\treturn {\n\t\tenforce: \"pre\",\n\t\tconfigureServer(viteDevServer) {\n\t\t\tassertIsNotPreview(ctx);\n\t\t\t// If we're in a JavaScript Debug terminal, Miniflare will send the inspector ports directly to VSCode for registration.\n\t\t\t// As such, we don't need our inspector proxy and in fact including it causes issues with multiple clients connected to the\n\t\t\t// inspector endpoint.\n\t\t\tconst isInVscodeJsDebugTerminal = !!process.env.VSCODE_INSPECTOR_OPTIONS;\n\n\t\t\tif (isInVscodeJsDebugTerminal) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tctx.resolvedPluginConfig.type === \"workers\" &&\n\t\t\t\tctx.resolvedPluginConfig.inspectorPort !== false\n\t\t\t) {\n\t\t\t\taddDebugToVitePrintUrls(viteDevServer);\n\t\t\t}\n\n\t\t\tconst workerNames =\n\t\t\t\tctx.resolvedPluginConfig.type === \"workers\"\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t...ctx.resolvedPluginConfig.environmentNameToWorkerMap.values(),\n\t\t\t\t\t\t].map((worker) => worker.config.name)\n\t\t\t\t\t: [];\n\n\t\t\tviteDevServer.middlewares.use(DEBUG_PATH, async (_, res, next) => {\n\t\t\t\tconst resolvedInspectorPort = await ctx.getResolvedInspectorPort();\n\n\t\t\t\tif (resolvedInspectorPort) {\n\t\t\t\t\tconst html = getDebugPathHtml(workerNames, resolvedInspectorPort);\n\t\t\t\t\tres.setHeader(\"Content-Type\", \"text/html\");\n\t\t\t\t\tres.end(html);\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tasync configurePreviewServer(vitePreviewServer) {\n\t\t\tassertIsPreview(ctx);\n\t\t\t// If we're in a JavaScript Debug terminal, Miniflare will send the inspector ports directly to VSCode for registration.\n\t\t\t// As such, we don't need our inspector proxy and in fact including it causes issues with multiple clients connected to the\n\t\t\t// inspector endpoint.\n\t\t\tconst isInVscodeJsDebugTerminal = !!process.env.VSCODE_INSPECTOR_OPTIONS;\n\n\t\t\tif (isInVscodeJsDebugTerminal) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tctx.resolvedPluginConfig.workers.length >= 1 &&\n\t\t\t\tctx.resolvedPluginConfig.inspectorPort !== false\n\t\t\t) {\n\t\t\t\taddDebugToVitePrintUrls(vitePreviewServer);\n\t\t\t}\n\n\t\t\tconst workerNames = ctx.resolvedPluginConfig.workers.map((worker) => {\n\t\t\t\tassert(worker.name, \"Expected the Worker to have a name\");\n\t\t\t\treturn worker.name;\n\t\t\t});\n\n\t\t\tvitePreviewServer.middlewares.use(DEBUG_PATH, async (_, res, next) => {\n\t\t\t\tconst resolvedInspectorPort = await ctx.getResolvedInspectorPort();\n\n\t\t\t\tif (resolvedInspectorPort) {\n\t\t\t\t\tconst html = getDebugPathHtml(workerNames, resolvedInspectorPort);\n\t\t\t\t\tres.setHeader(\"Content-Type\", \"text/html\");\n\t\t\t\t\tres.end(html);\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t};\n});\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from \"./ApiRequestOptions\";\nimport type { ApiResult } from \"./ApiResult\";\n\nexport class ApiError extends Error {\n\tpublic readonly url: string;\n\tpublic readonly status: number;\n\tpublic readonly statusText: string;\n\tpublic readonly body: any;\n\tpublic readonly request: ApiRequestOptions;\n\n\tconstructor(\n\t\trequest: ApiRequestOptions,\n\t\tresponse: ApiResult,\n\t\tmessage: string\n\t) {\n\t\tsuper(message);\n\n\t\tthis.name = \"ApiError\";\n\t\tthis.url = response.url;\n\t\tthis.status = response.status;\n\t\tthis.statusText = response.statusText;\n\t\tthis.body = response.body;\n\t\tthis.request = request;\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nexport class CancelError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"CancelError\";\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport interface OnCancel {\n\treadonly isResolved: boolean;\n\treadonly isRejected: boolean;\n\treadonly isCancelled: boolean;\n\n\t(cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n\t#isResolved: boolean;\n\t#isRejected: boolean;\n\t#isCancelled: boolean;\n\treadonly #cancelHandlers: (() => void)[];\n\treadonly #promise: Promise<T>;\n\t#resolve?: (value: T | PromiseLike<T>) => void;\n\t#reject?: (reason?: any) => void;\n\n\tconstructor(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t\tonCancel: OnCancel\n\t\t) => void\n\t) {\n\t\tthis.#isResolved = false;\n\t\tthis.#isRejected = false;\n\t\tthis.#isCancelled = false;\n\t\tthis.#cancelHandlers = [];\n\t\tthis.#promise = new Promise<T>((resolve, reject) => {\n\t\t\tthis.#resolve = resolve;\n\t\t\tthis.#reject = reject;\n\n\t\t\tconst onResolve = (value: T | PromiseLike<T>): void => {\n\t\t\t\tif (this.#isResolved || this.#isRejected || this.#isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#isResolved = true;\n\t\t\t\tthis.#resolve?.(value);\n\t\t\t};\n\n\t\t\tconst onReject = (reason?: any): void => {\n\t\t\t\tif (this.#isResolved || this.#isRejected || this.#isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#isRejected = true;\n\t\t\t\tthis.#reject?.(reason);\n\t\t\t};\n\n\t\t\tconst onCancel = (cancelHandler: () => void): void => {\n\t\t\t\tif (this.#isResolved || this.#isRejected || this.#isCancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#cancelHandlers.push(cancelHandler);\n\t\t\t};\n\n\t\t\tObject.defineProperty(onCancel, \"isResolved\", {\n\t\t\t\tget: (): boolean => this.#isResolved,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, \"isRejected\", {\n\t\t\t\tget: (): boolean => this.#isRejected,\n\t\t\t});\n\n\t\t\tObject.defineProperty(onCancel, \"isCancelled\", {\n\t\t\t\tget: (): boolean => this.#isCancelled,\n\t\t\t});\n\n\t\t\treturn executor(onResolve, onReject, onCancel as OnCancel);\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn \"Cancellable Promise\";\n\t}\n\n\tpublic then<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.#promise.then(onFulfilled, onRejected);\n\t}\n\n\tpublic catch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n\t): Promise<T | TResult> {\n\t\treturn this.#promise.catch(onRejected);\n\t}\n\n\tpublic finally(onFinally?: (() => void) | null): Promise<T> {\n\t\treturn this.#promise.finally(onFinally);\n\t}\n\n\tpublic cancel(): void {\n\t\tif (this.#isResolved || this.#isRejected || this.#isCancelled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#isCancelled = true;\n\t\tif (this.#cancelHandlers.length) {\n\t\t\ttry {\n\t\t\t\tfor (const cancelHandler of this.#cancelHandlers) {\n\t\t\t\t\tcancelHandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\"Cancellation threw an error\", error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.#cancelHandlers.length = 0;\n\t\tthis.#reject?.(new CancelError(\"Request aborted\"));\n\t}\n\n\tpublic get isCancelled(): boolean {\n\t\treturn this.#isCancelled;\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\nimport type { WranglerLogger } from \"../../types\";\nimport type { ApiRequestOptions } from \"./ApiRequestOptions\";\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\ntype Headers = Record<string, string>;\n\nexport type OpenAPIConfig = {\n\tBASE: string;\n\tVERSION: string;\n\tWITH_CREDENTIALS: boolean;\n\tCREDENTIALS: \"include\" | \"omit\" | \"same-origin\";\n\tTOKEN?: string | Resolver<string>;\n\tUSERNAME?: string | Resolver<string>;\n\tPASSWORD?: string | Resolver<string>;\n\tHEADERS?: Headers | Resolver<Headers>;\n\tENCODE_PATH?: (path: string) => string;\n\tLOGGER?: WranglerLogger | undefined;\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n\tBASE: \"\",\n\tVERSION: \"1.0.0\",\n\tWITH_CREDENTIALS: false,\n\tCREDENTIALS: \"include\",\n\tTOKEN: undefined,\n\tUSERNAME: undefined,\n\tPASSWORD: undefined,\n\tHEADERS: undefined,\n\tENCODE_PATH: undefined,\n\tLOGGER: undefined,\n};\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport { ApiError } from \"./ApiError\";\nimport { CancelablePromise } from \"./CancelablePromise\";\nimport { type OpenAPIConfig } from \"./OpenAPI\";\nimport type { ApiRequestOptions } from \"./ApiRequestOptions\";\nimport type { ApiResult } from \"./ApiResult\";\nimport type { OnCancel } from \"./CancelablePromise\";\nimport type { PaginatedResult, ResultInfo } from \"./PaginatedResult\";\n\ntype FetchResponseInfo = {\n\tcode: number;\n\tmessage: string;\n};\n\ntype FetchResult<ResponseType = unknown> = {\n\tsuccess: boolean;\n\tresult?: ResponseType;\n\terrors?: FetchResponseInfo[];\n\tmessages?: FetchResponseInfo[];\n\tresult_info?: ResultInfo;\n};\n\nconst isDefined = <T>(\n\tvalue: T | null | undefined\n): value is Exclude<T, null | undefined> => {\n\treturn value !== undefined && value !== null;\n};\n\nconst isString = (value: any): value is string => {\n\treturn typeof value === \"string\";\n};\n\nconst isStringWithValue = (value: any): value is string => {\n\treturn isString(value) && value !== \"\";\n};\n\nconst isBlob = (value: any): value is Blob => {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\ttypeof value.type === \"string\" &&\n\t\ttypeof value.stream === \"function\" &&\n\t\ttypeof value.arrayBuffer === \"function\" &&\n\t\ttypeof value.constructor === \"function\" &&\n\t\ttypeof value.constructor.name === \"string\" &&\n\t\t/^(Blob|File)$/.test(value.constructor.name) &&\n\t\t/^(Blob|File)$/.test(value[Symbol.toStringTag])\n\t);\n};\n\nconst base64 = (str: string): string => {\n\ttry {\n\t\treturn btoa(str);\n\t} catch (err) {\n\t\t// @ts-ignore\n\t\treturn Buffer.from(str).toString(\"base64\");\n\t}\n};\n\nconst getQueryString = (params: Record<string, any>): string => {\n\tconst qs: string[] = [];\n\n\tconst append = (key: string, value: any) => {\n\t\tqs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\t};\n\n\tconst process = (key: string, value: any) => {\n\t\tif (isDefined(value)) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((v) => {\n\t\t\t\t\tprocess(key, v);\n\t\t\t\t});\n\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\tObject.entries(value).forEach(([k, v]) => {\n\t\t\t\t\tprocess(`${key}[${k}]`, v);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tappend(key, value);\n\t\t\t}\n\t\t}\n\t};\n\n\tObject.entries(params).forEach(([key, value]) => {\n\t\tprocess(key, value);\n\t});\n\n\tif (qs.length > 0) {\n\t\treturn `?${qs.join(\"&\")}`;\n\t}\n\n\treturn \"\";\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n\tconst encoder = config.ENCODE_PATH || encodeURI;\n\n\tconst path = options.url\n\t\t.replace(\"{api-version}\", config.VERSION)\n\t\t.replace(/{(.*?)}/g, (substring: string, group: string) => {\n\t\t\tif (options.path?.hasOwnProperty(group)) {\n\t\t\t\treturn encoder(String(options.path[group]));\n\t\t\t}\n\t\t\treturn substring;\n\t\t});\n\n\tconst url = `${config.BASE}${path}`;\n\tif (options.query) {\n\t\treturn `${url}${getQueryString(options.query)}`;\n\t}\n\treturn url;\n};\n\nconst getFormData = (options: ApiRequestOptions): FormData | undefined => {\n\tif (options.formData) {\n\t\tconst formData = new FormData();\n\n\t\tconst process = async (key: string, value: any) => {\n\t\t\tif (isString(value)) {\n\t\t\t\tformData.append(key, value);\n\t\t\t} else {\n\t\t\t\tformData.append(key, JSON.stringify(value));\n\t\t\t}\n\t\t};\n\n\t\tObject.entries(options.formData)\n\t\t\t.filter(([_, value]) => isDefined(value))\n\t\t\t.forEach(([key, value]) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tvalue.forEach((v) => process(key, v));\n\t\t\t\t} else {\n\t\t\t\t\tprocess(key, value);\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn formData;\n\t}\n\treturn undefined;\n};\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nconst resolve = async <T>(\n\toptions: ApiRequestOptions,\n\tresolver?: T | Resolver<T>\n): Promise<T | undefined> => {\n\tif (typeof resolver === \"function\") {\n\t\treturn (resolver as Resolver<T>)(options);\n\t}\n\treturn resolver;\n};\n\nconst getHeaders = async (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions\n): Promise<Headers> => {\n\tconst token = await resolve(options, config.TOKEN);\n\tconst username = await resolve(options, config.USERNAME);\n\tconst password = await resolve(options, config.PASSWORD);\n\tconst additionalHeaders = await resolve(options, config.HEADERS);\n\n\tconst headers = Object.entries({\n\t\tAccept: \"application/json\",\n\t\t...additionalHeaders,\n\t\t...options.headers,\n\t})\n\t\t.filter(([_, value]) => isDefined(value))\n\t\t.reduce(\n\t\t\t(headers, [key, value]) => ({\n\t\t\t\t...headers,\n\t\t\t\t[key]: String(value),\n\t\t\t}),\n\t\t\t{} as Record<string, string>\n\t\t);\n\n\tif (isStringWithValue(token)) {\n\t\theaders[\"Authorization\"] = `Bearer ${token}`;\n\t}\n\n\tif (isStringWithValue(username) && isStringWithValue(password)) {\n\t\tconst credentials = base64(`${username}:${password}`);\n\t\theaders[\"Authorization\"] = `Basic ${credentials}`;\n\t}\n\n\tif (options.body) {\n\t\tif (options.mediaType) {\n\t\t\theaders[\"Content-Type\"] = options.mediaType;\n\t\t} else if (isBlob(options.body)) {\n\t\t\theaders[\"Content-Type\"] = options.body.type || \"application/octet-stream\";\n\t\t} else if (isString(options.body)) {\n\t\t\theaders[\"Content-Type\"] = \"text/plain\";\n\t\t} else {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\t}\n\n\treturn new Headers(headers);\n};\n\nconst getRequestBody = (options: ApiRequestOptions): any => {\n\tif (options.body !== undefined) {\n\t\tif (options.mediaType?.includes(\"/json\")) {\n\t\t\treturn JSON.stringify(options.body);\n\t\t} else if (isString(options.body) || isBlob(options.body)) {\n\t\t\treturn options.body;\n\t\t} else {\n\t\t\treturn JSON.stringify(options.body);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nconst isResponseSchemaV4 = (\n\tconfig: OpenAPIConfig,\n\t_options: ApiRequestOptions\n): boolean => {\n\treturn config.BASE.endsWith(\"/containers\");\n};\n\nconst parseResponseSchemaV4 = <T>(\n\turl: string,\n\tresponse: Response,\n\tresponseHeader: string | undefined,\n\tresponseBody: any\n): ApiResult => {\n\tconst fetchResult = (\n\t\ttypeof responseBody === \"object\" ? responseBody : JSON.parse(responseBody)\n\t) as FetchResult<T>;\n\tconst ok = response.ok && fetchResult.success;\n\tlet result: any;\n\tif (ok) {\n\t\tif (fetchResult.result !== undefined) {\n\t\t\tresult = fetchResult.result;\n\t\t} else {\n\t\t\tresult = {};\n\t\t}\n\t} else {\n\t\tresult = { error: fetchResult.errors?.[0]?.message };\n\t}\n\treturn {\n\t\turl,\n\t\tok,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\tbody: responseHeader ?? result,\n\t};\n};\n\nexport const sendRequest = async (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions,\n\turl: string,\n\tbody: any,\n\tformData: FormData | undefined,\n\theaders: Headers,\n\tonCancel: OnCancel\n): Promise<Response> => {\n\tconst controller = new AbortController();\n\n\tconst request: RequestInit = {\n\t\theaders,\n\t\tbody: body ?? formData,\n\t\tmethod: options.method,\n\t\tsignal: controller.signal,\n\t};\n\n\tif (config.WITH_CREDENTIALS) {\n\t\t// :(\n\t\t// The vite-plugin is attempting to typecheck everything with worker types, which does not support request.credentials\n\t\t// Also note this is always set to \"omit\".\n\t\t// @ts-ignore\n\t\trequest.credentials = config.CREDENTIALS;\n\t}\n\n\tonCancel(() => controller.abort());\n\n\treturn await fetch(url, request);\n};\n\nconst getResponseHeader = (\n\tresponse: Response,\n\tresponseHeader?: string\n): string | undefined => {\n\tif (responseHeader) {\n\t\tconst content = response.headers.get(responseHeader);\n\t\tif (isString(content)) {\n\t\t\treturn content;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nconst getResponseBody = async (response: Response): Promise<any> => {\n\tif (response.status !== 204) {\n\t\ttry {\n\t\t\tconst contentType = response.headers.get(\"Content-Type\");\n\t\t\tif (contentType) {\n\t\t\t\tconst jsonTypes = [\"application/json\", \"application/problem+json\"];\n\t\t\t\tconst isJSON = jsonTypes.some((type) =>\n\t\t\t\t\tcontentType.toLowerCase().startsWith(type)\n\t\t\t\t);\n\t\t\t\tif (isJSON) {\n\t\t\t\t\treturn await response.json();\n\t\t\t\t} else {\n\t\t\t\t\treturn await response.text();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nconst catchErrorCodes = (\n\toptions: ApiRequestOptions,\n\tresult: ApiResult\n): void => {\n\tconst errors: Record<number, string> = {\n\t\t400: \"Bad Request\",\n\t\t401: \"Unauthorized\",\n\t\t403: \"Forbidden\",\n\t\t404: \"Not Found\",\n\t\t500: \"Internal Server Error\",\n\t\t502: \"Bad Gateway\",\n\t\t503: \"Service Unavailable\",\n\t\t...options.errors,\n\t};\n\n\tconst error = errors[result.status];\n\tif (error) {\n\t\tthrow new ApiError(options, result, error);\n\t}\n\n\tif (!result.ok) {\n\t\tthrow new ApiError(options, result, \"Generic Error\");\n\t}\n};\n\ntype ExecuteRequestResult = {\n\turl: string;\n\tresponse: Response;\n\tresponseBody: any;\n\tresponseHeader: string | undefined;\n};\n\n/**\n * Shared HTTP execution: builds URL, headers, body, sends the request,\n * and returns the raw response components for further processing.\n * Returns null if the request was cancelled before sending.\n */\nconst executeRequest = async (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions,\n\tonCancel: OnCancel\n): Promise<ExecuteRequestResult | null> => {\n\tconst url = getUrl(config, options);\n\tconst formData = getFormData(options);\n\tconst body = getRequestBody(options);\n\tconst headers = await getHeaders(config, options);\n\tdebugLogRequest(config, url, headers, formData ?? body ?? {});\n\n\tif (onCancel.isCancelled) {\n\t\treturn null;\n\t}\n\n\tconst response = await sendRequest(\n\t\tconfig,\n\t\toptions,\n\t\turl,\n\t\tbody,\n\t\tformData,\n\t\theaders,\n\t\tonCancel\n\t);\n\tconst responseBody = await getResponseBody(response);\n\tconst responseHeader = getResponseHeader(response, options.responseHeader);\n\n\treturn { url, response, responseBody, responseHeader };\n};\n\n/**\n * Build an ApiResult from the raw response, handling V4 schema parsing.\n */\nconst buildApiResult = (\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions,\n\treq: ExecuteRequestResult\n): ApiResult => {\n\tif (isResponseSchemaV4(config, options)) {\n\t\treturn parseResponseSchemaV4(\n\t\t\treq.url,\n\t\t\treq.response,\n\t\t\treq.responseHeader,\n\t\t\treq.responseBody\n\t\t);\n\t}\n\n\treturn {\n\t\turl: req.url,\n\t\tok: req.response.ok,\n\t\tstatus: req.response.status,\n\t\tstatusText: req.response.statusText,\n\t\tbody: req.responseHeader ?? req.responseBody,\n\t};\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\nexport const request = <T>(\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions\n): CancelablePromise<T> => {\n\treturn new CancelablePromise(async (resolve, reject, onCancel) => {\n\t\ttry {\n\t\t\tconst req = await executeRequest(config, options, onCancel);\n\t\t\tif (!req) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = buildApiResult(config, options, req);\n\t\t\tdebugLogResponse(config, result);\n\t\t\tcatchErrorCodes(options, result);\n\t\t\tresolve(result.body);\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};\n\n/**\n * Request method that preserves pagination info from V4 responses\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<PaginatedResult<T>>\n * @throws ApiError\n */\nexport const requestPaginated = <T>(\n\tconfig: OpenAPIConfig,\n\toptions: ApiRequestOptions\n): CancelablePromise<PaginatedResult<T>> => {\n\treturn new CancelablePromise(async (resolve, reject, onCancel) => {\n\t\ttry {\n\t\t\tconst req = await executeRequest(config, options, onCancel);\n\t\t\tif (!req) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = buildApiResult(config, options, req);\n\t\t\tdebugLogResponse(config, result);\n\t\t\tcatchErrorCodes(options, result);\n\n\t\t\t// Extract result_info from the raw V4 response body for pagination\n\t\t\tlet resultInfo: ResultInfo | undefined;\n\t\t\tif (isResponseSchemaV4(config, options)) {\n\t\t\t\tconst fetchResult = (\n\t\t\t\t\ttypeof req.responseBody === \"object\"\n\t\t\t\t\t\t? req.responseBody\n\t\t\t\t\t\t: JSON.parse(req.responseBody)\n\t\t\t\t) as FetchResult<T>;\n\t\t\t\tresultInfo = fetchResult.result_info;\n\t\t\t}\n\n\t\t\tresolve({\n\t\t\t\tdata: result.body as T,\n\t\t\t\tresultInfo,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};\n\nconst debugLogRequest = async (\n\tconfig: OpenAPIConfig,\n\turl: string,\n\theaders: Headers,\n\tbody: FormData | unknown\n) => {\n\tconfig.LOGGER?.debug(`-- START CF API REQUEST: ${url}`);\n\tconst logHeaders = new Headers(headers);\n\tlogHeaders.delete(\"Authorization\");\n\tconfig.LOGGER?.debugWithSanitization(\n\t\t\"HEADERS:\",\n\t\tJSON.stringify(logHeaders, null, 2)\n\t);\n\tconfig.LOGGER?.debugWithSanitization(\n\t\t\"BODY:\",\n\t\tJSON.stringify(\n\t\t\tbody instanceof FormData ? await new Response(body).text() : body,\n\t\t\tnull,\n\t\t\t2\n\t\t)\n\t);\n\tconfig.LOGGER?.debug(\"-- END CF API REQUEST\");\n};\n\nconst debugLogResponse = (config: OpenAPIConfig, response: ApiResult) => {\n\tconfig.LOGGER?.debug(\n\t\t\"-- START CF API RESPONSE:\",\n\t\tresponse.statusText,\n\t\tresponse.status\n\t);\n\n\tconfig.LOGGER?.debugWithSanitization(\"RESPONSE:\", response.body);\n\tconfig.LOGGER?.debug(\"-- END CF API RESPONSE\");\n};\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { ApplicationHealth } from \"./ApplicationHealth\";\nimport type { ApplicationRolloutProgress } from \"./ApplicationRolloutProgress\";\nimport type { ISO8601Timestamp } from \"./ISO8601Timestamp\";\nimport type { ModifyUserDeploymentConfiguration } from \"./ModifyUserDeploymentConfiguration\";\nimport type { RolloutID } from \"./RolloutID\";\nimport type { RolloutStep } from \"./RolloutStep\";\n\n/**\n * Represents the status and metadata of a rollout process for an application.\n */\nexport type ApplicationRollout = {\n\tdescription: string;\n\tid: RolloutID;\n\tcreated_at: ISO8601Timestamp;\n\t/**\n\t * Timestamp of the most recent update to status, health, or progress\n\t */\n\tlast_updated_at: ISO8601Timestamp;\n\t/**\n\t * Kind of the rollout process.\n\t * - \"full_auto\": The default rollout mode, which starts progressing the steps upon rollout creation.\n\t * - \"full_manual\": Requires manually progressing each step in the rollout using the UpdateRollout's action paramater.\n\t * - \"durable_objects_auto\": Default when the application is a DO application.\n\t *\n\t */\n\tkind: ApplicationRollout.kind;\n\t/**\n\t * The rollout strategy\n\t */\n\tstrategy: ApplicationRollout.strategy;\n\t/**\n\t * Current application version before the rollout.\n\t */\n\tcurrent_version: number;\n\t/**\n\t * Target application version after the rollout is complete and applied to all current instances.\n\t */\n\ttarget_version: number;\n\tcurrent_configuration: ModifyUserDeploymentConfiguration;\n\ttarget_configuration: ModifyUserDeploymentConfiguration;\n\t/**\n\t * Current status of the rollout.\n\t */\n\tstatus: ApplicationRollout.status;\n\thealth: ApplicationHealth;\n\tsteps: Array<RolloutStep>;\n\tprogress: ApplicationRolloutProgress;\n\t/**\n\t * Timestamp when the rollout started.\n\t */\n\tstarted_at?: string;\n};\n\nexport namespace ApplicationRollout {\n\t/**\n\t * Kind of the rollout process.\n\t * - \"full_auto\": The default rollout mode, which starts progressing the steps upon rollout creation.\n\t * - \"full_manual\": Requires manually progressing each step in the rollout using the UpdateRollout's action paramater.\n\t * - \"durable_objects_auto\": Default when the application is a DO application.\n\t *\n\t */\n\texport enum kind {\n\t\tFULL_AUTO = \"full_auto\",\n\t\tFULL_MANUAL = \"full_manual\",\n\t\tDURABLE_OBJECTS_AUTO = \"durable_objects_auto\",\n\t}\n\n\t/**\n\t * The rollout strategy\n\t */\n\texport enum strategy {\n\t\tROLLING = \"rolling\",\n\t}\n\n\t/**\n\t * Current status of the rollout.\n\t */\n\texport enum status {\n\t\tPENDING = \"pending\",\n\t\tPROGRESSING = \"progressing\",\n\t\tCOMPLETED = \"completed\",\n\t\tREVERTED = \"reverted\",\n\t\tREPLACED = \"replaced\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type BadRequestWithCodeError = {\n\t/**\n\t * If VALIDATE_INPUT, you should see the inputs that were wrong in the details object.\n\t */\n\terror: BadRequestWithCodeError.error;\n\t/**\n\t * Details that might be filled depending on the error code.\n\t */\n\tdetails?: Record<string, any>;\n};\n\nexport namespace BadRequestWithCodeError {\n\t/**\n\t * If VALIDATE_INPUT, you should see the inputs that were wrong in the details object.\n\t */\n\texport enum error {\n\t\tVALIDATE_INPUT = \"VALIDATE_INPUT\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { ModifyUserDeploymentConfiguration } from \"./ModifyUserDeploymentConfiguration\";\nimport type { RolloutStepRequest } from \"./RolloutStepRequest\";\n\n/**\n * Request body to create a new rollout for an application.\n */\nexport type CreateApplicationRolloutRequest = {\n\ttarget_configuration: ModifyUserDeploymentConfiguration;\n\t/**\n\t * Strategy used for the rollout. Currently supports only \"rolling\".\n\t */\n\tstrategy: CreateApplicationRolloutRequest.strategy;\n\t/**\n\t * Percentage of rollout to increase in each step when \"steps\" is not specificed. Applicable values are 5, 10, 20, 25, 50, 100.\n\t * These create rollouts with 20, 10, 5, 4, 2, 1 steps respectively.\n\t *\n\t */\n\tstep_percentage?: CreateApplicationRolloutRequest.step_percentage;\n\t/**\n\t * Steps defining the rollout process, when \"step_percentage\" is not defined.\n\t * Only one of \"step_percentage\" or \"steps\" can be defined when creating a rollout.\n\t * \"steps\" allow granular control over each step.\n\t *\n\t */\n\tsteps?: Array<RolloutStepRequest>;\n\t/**\n\t * Description of the rollout process.\n\t */\n\tdescription: string;\n\t/**\n\t * Kind of the rollout process.\n\t * - \"full_auto\": The default rollout mode, which starts progressing the steps upon rollout creation.\n\t * - \"full_manual\": Requires manually progressing each step in the rollout using the UpdateRollout's action paramater.\n\t *\n\t */\n\tkind?: CreateApplicationRolloutRequest.kind;\n};\n\nexport namespace CreateApplicationRolloutRequest {\n\t/**\n\t * Strategy used for the rollout. Currently supports only \"rolling\".\n\t */\n\texport enum strategy {\n\t\tROLLING = \"rolling\",\n\t}\n\n\t/**\n\t * Percentage of rollout to increase in each step when \"steps\" is not specificed. Applicable values are 5, 10, 20, 25, 50, 100.\n\t * These create rollouts with 20, 10, 5, 4, 2, 1 steps respectively.\n\t *\n\t */\n\texport enum step_percentage {\n\t\t\"_5\" = 5,\n\t\t\"_10\" = 10,\n\t\t\"_20\" = 20,\n\t\t\"_25\" = 25,\n\t\t\"_50\" = 50,\n\t\t\"_100\" = 100,\n\t}\n\n\t/**\n\t * Kind of the rollout process.\n\t * - \"full_auto\": The default rollout mode, which starts progressing the steps upon rollout creation.\n\t * - \"full_manual\": Requires manually progressing each step in the rollout using the UpdateRollout's action paramater.\n\t *\n\t */\n\texport enum kind {\n\t\tFULL_AUTO = \"full_auto\",\n\t\tFULL_MANUAL = \"full_manual\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Response when the deployment that is backing the resource is not found.\n *\n */\nexport type DeploymentNotFoundError = {\n\terror: DeploymentNotFoundError.error;\n};\n\nexport namespace DeploymentNotFoundError {\n\texport enum error {\n\t\tDEPLOYMENT_NOT_FOUND = \"DEPLOYMENT_NOT_FOUND\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The image registry already exists\n */\nexport type ImageRegistryAlreadyExistsError = {\n\t/**\n\t * The domain of the registry already exists\n\t */\n\terror: ImageRegistryAlreadyExistsError.error;\n\t/**\n\t * Details that might be filled depending on the error code.\n\t */\n\tdetails?: Record<string, any>;\n};\n\nexport namespace ImageRegistryAlreadyExistsError {\n\t/**\n\t * The domain of the registry already exists\n\t */\n\texport enum error {\n\t\tIMAGE_REGISTRY_ALREADY_EXISTS = \"IMAGE_REGISTRY_ALREADY_EXISTS\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The image registry is configured to be public, so it does not have a public key\n */\nexport type ImageRegistryIsPublic = {\n\terror: ImageRegistryIsPublic.error;\n};\n\nexport namespace ImageRegistryIsPublic {\n\texport enum error {\n\t\tIMAGE_REGISTRY_IS_PUBLIC = \"IMAGE_REGISTRY_IS_PUBLIC\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The registry is not allowed to be modified\n */\nexport type ImageRegistryNotAllowedError = {\n\t/**\n\t * The domain of the registry is not allowed to be modified\n\t */\n\terror: ImageRegistryNotAllowedError.error;\n\t/**\n\t * Details that might be filled depending on the error code.\n\t */\n\tdetails?: Record<string, any>;\n};\n\nexport namespace ImageRegistryNotAllowedError {\n\t/**\n\t * The domain of the registry is not allowed to be modified\n\t */\n\texport enum error {\n\t\tIMAGE_REGISTRY_NOT_ALLOWED = \"IMAGE_REGISTRY_NOT_ALLOWED\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The image registry does not exist\n */\nexport type ImageRegistryNotFoundError = {\n\terror: ImageRegistryNotFoundError.error;\n};\n\nexport namespace ImageRegistryNotFoundError {\n\texport enum error {\n\t\tIMAGE_REGISTRY_NOT_FOUND = \"IMAGE_REGISTRY_NOT_FOUND\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport enum ImageRegistryPermissions {\n\tPULL = \"pull\",\n\tPUSH = \"push\",\n\tLIBRARY_PUSH = \"library_push\",\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ImageRegistryProtocolAlreadyExists = {\n\terror: ImageRegistryProtocolAlreadyExists.error;\n};\n\nexport namespace ImageRegistryProtocolAlreadyExists {\n\texport enum error {\n\t\tIMAGE_REGISTRY_PROTOCOL_ALREADY_EXISTS = \"IMAGE_REGISTRY_PROTOCOL_ALREADY_EXISTS\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Returned when deleting an image registry protocol and it is referenced by a resource.\n */\nexport type ImageRegistryProtocolIsReferencedError = {\n\terror: ImageRegistryProtocolIsReferencedError.error;\n};\n\nexport namespace ImageRegistryProtocolIsReferencedError {\n\texport enum error {\n\t\tIMAGE_REGISTRY_PROTO_IS_REFERENCED = \"IMAGE_REGISTRY_PROTO_IS_REFERENCED\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The image registry protocol does not exist\n */\nexport type ImageRegistryProtocolNotFound = {\n\terror: ImageRegistryProtocolNotFound.error;\n};\n\nexport namespace ImageRegistryProtocolNotFound {\n\texport enum error {\n\t\tIMAGE_REGISTRY_PROTOCOL_NOT_FOUND = \"IMAGE_REGISTRY_PROTOCOL_NOT_FOUND\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Configuration for a VM provisioner.\n */\nexport type ProvisionerConfiguration = {\n\t/**\n\t * The provisioner to use.\n\t */\n\ttype: ProvisionerConfiguration.type;\n};\n\nexport namespace ProvisionerConfiguration {\n\t/**\n\t * The provisioner to use.\n\t */\n\texport enum type {\n\t\tNONE = \"none\",\n\t\tCLOUDINIT = \"cloudinit\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { ISO8601Timestamp } from \"./ISO8601Timestamp\";\n\n/**\n * Steps within the rollout process.\n */\nexport type RolloutStep = {\n\t/**\n\t * The sequential order of the rollout step, automatically assigned starting from 1, based on the total number of steps in the rollout process.\n\t */\n\tid: number;\n\tstep_size: {\n\t\t/**\n\t\t * Percentage of instances affected in this step. Min 10% and Max 100%.\n\t\t */\n\t\tpercentage: number;\n\t};\n\t/**\n\t * Description of the rollout step.\n\t */\n\tdescription: string;\n\t/**\n\t * Status of the rollout step.\n\t */\n\tstatus: RolloutStep.status;\n\t/**\n\t * Reason why the step has the current status\n\t */\n\treason?: string;\n\tstarted_at?: ISO8601Timestamp;\n\tcompleted_at?: ISO8601Timestamp;\n};\n\nexport namespace RolloutStep {\n\t/**\n\t * Status of the rollout step.\n\t */\n\texport enum status {\n\t\tPENDING = \"pending\",\n\t\tPROGRESSING = \"progressing\",\n\t\tREVERTING = \"reverting\",\n\t\tCOMPLETED = \"completed\",\n\t\tREVERTED = \"reverted\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { GenericErrorDetails } from \"./GenericErrorDetails\";\n\n/**\n * The secret name already exists\n */\nexport type SecretNameAlreadyExists = {\n\t/**\n\t * The secret name already exists in this account\n\t */\n\terror: SecretNameAlreadyExists.error;\n\tdetails?: GenericErrorDetails;\n};\n\nexport namespace SecretNameAlreadyExists {\n\t/**\n\t * The secret name already exists in this account\n\t */\n\texport enum error {\n\t\tSECRET_NAME_ALREADY_EXISTS = \"SECRET_NAME_ALREADY_EXISTS\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The secret name does not exist\n */\nexport type SecretNotFound = {\n\terror: SecretNotFound.error;\n};\n\nexport namespace SecretNotFound {\n\texport enum error {\n\t\tSECRET_NAME_NOT_FOUND = \"SECRET_NAME_NOT_FOUND\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The ssh public key does not exist\n */\nexport type SSHPublicKeyNotFoundError = {\n\terror: SSHPublicKeyNotFoundError.error;\n};\n\nexport namespace SSHPublicKeyNotFoundError {\n\texport enum error {\n\t\tSSH_PUBLIC_KEY_NOT_FOUND = \"SSH_PUBLIC_KEY_NOT_FOUND\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Request body to update a rollout within an application.\n */\nexport type UpdateApplicationRolloutRequest = {\n\t/**\n\t * Action to perform on the rollout.\n\t * - next: The rollout will go forward one step. It will succeed if the current step is finished.\n\t * - previous: The rollout will go back one step.\n\t * - revert: The rollout goes back to the first step in one go.\n\t *\n\t */\n\taction: UpdateApplicationRolloutRequest.action;\n};\n\nexport namespace UpdateApplicationRolloutRequest {\n\t/**\n\t * Action to perform on the rollout.\n\t * - next: The rollout will go forward one step. It will succeed if the current step is finished.\n\t * - previous: The rollout will go back one step.\n\t * - revert: The rollout goes back to the first step in one go.\n\t *\n\t */\n\texport enum action {\n\t\tNEXT = \"next\",\n\t\tPREVIOUS = \"previous\",\n\t\tREVERT = \"revert\",\n\t}\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport { OpenAPI } from \"../core/OpenAPI\";\nimport { request as __request } from \"../core/request\";\nimport type { CancelablePromise } from \"../core/CancelablePromise\";\nimport type { AccountRegistryToken } from \"../models/AccountRegistryToken\";\nimport type { CreateImageRegistryRequestBody } from \"../models/CreateImageRegistryRequestBody\";\nimport type { CustomerImageRegistry } from \"../models/CustomerImageRegistry\";\nimport type { DeleteImageRegistryResponse } from \"../models/DeleteImageRegistryResponse\";\nimport type { EmptyResponse } from \"../models/EmptyResponse\";\nimport type { ImageRegistryCredentialsConfiguration } from \"../models/ImageRegistryCredentialsConfiguration\";\nimport type { ImageRegistryProtocol } from \"../models/ImageRegistryProtocol\";\nimport type { ImageRegistryProtocols } from \"../models/ImageRegistryProtocols\";\n\nexport class ImageRegistriesService {\n\t/**\n\t * Create an image registry protocol that resolves to multiple domains.\n\t * @param requestBody\n\t * @returns ImageRegistryProtocol The image registry protocol was created\n\t * @throws ApiError\n\t */\n\tpublic static createImageRegistryProtocol(\n\t\trequestBody: ImageRegistryProtocol\n\t): CancelablePromise<ImageRegistryProtocol> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"POST\",\n\t\t\turl: \"/registries/protos\",\n\t\t\tbody: requestBody,\n\t\t\tmediaType: \"application/json\",\n\t\t\terrors: {\n\t\t\t\t400: `Bad Request that contains a specific constant code and details object about the error.`,\n\t\t\t\t403: `The registry that is being added is not allowed`,\n\t\t\t\t409: `Image registry protocol already exists`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * List all image registry protocols.\n\t * @returns ImageRegistryProtocols The image registry protocols in the account\n\t * @throws ApiError\n\t */\n\tpublic static listImageRegistryProtocols(): CancelablePromise<ImageRegistryProtocols> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"GET\",\n\t\t\turl: \"/registries/protos\",\n\t\t\terrors: {\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Modify an image registry protocol. The previous list of domains will be replaced by the ones you specify in this endpoint.\n\t * @param requestBody\n\t * @returns ImageRegistryProtocol The image registry protocol was modified\n\t * @throws ApiError\n\t */\n\tpublic static modifyImageRegistryProtocol(\n\t\trequestBody: ImageRegistryProtocol\n\t): CancelablePromise<ImageRegistryProtocol> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"PUT\",\n\t\t\turl: \"/registries/protos\",\n\t\t\tbody: requestBody,\n\t\t\tmediaType: \"application/json\",\n\t\t\terrors: {\n\t\t\t\t400: `Bad Request that contains a specific constant code and details object about the error.`,\n\t\t\t\t403: `The registry that is being added is not allowed`,\n\t\t\t\t404: `Image registry protocol doesn't exist`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Delete an image registry protocol. Be careful, if there is deployments running referencing this protocol they won't be able to pull the image.\n\t * @param proto\n\t * @returns EmptyResponse Image registry protocol was deleted successfully\n\t * @throws ApiError\n\t */\n\tpublic static deleteImageRegistryProto(\n\t\tproto: string\n\t): CancelablePromise<EmptyResponse> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"DELETE\",\n\t\t\turl: \"/registries/protos/{proto}\",\n\t\t\tpath: {\n\t\t\t\tproto: proto,\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t400: `The image registry protocol couldn't be deleted because it's referenced by a deployment or application`,\n\t\t\t\t404: `Image registry protocol doesn't exist`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Get a JWT to pull from the image registry\n\t * Get a JWT to pull from the image registry specifying its domain\n\t * @param domain\n\t * @param requestBody\n\t * @returns AccountRegistryToken Credentials with 'pull' or 'push' permissions to access the registry\n\t * @throws ApiError\n\t */\n\tpublic static generateImageRegistryCredentials(\n\t\tdomain: string,\n\t\trequestBody: ImageRegistryCredentialsConfiguration\n\t): CancelablePromise<AccountRegistryToken> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"POST\",\n\t\t\turl: \"/registries/{domain}/credentials\",\n\t\t\tpath: {\n\t\t\t\tdomain: domain,\n\t\t\t},\n\t\t\tbody: requestBody,\n\t\t\tmediaType: \"application/json\",\n\t\t\terrors: {\n\t\t\t\t400: `Bad Request that contains a specific constant code and details object about the error.`,\n\t\t\t\t404: `The image registry does not exist`,\n\t\t\t\t409: `The registry was configured as public, so credentials can not be generated`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Delete a registry from the account\n\t * Delete a registry from the account, this will make Cloudchamber unable to pull images from the registry\n\t * @param domain\n\t * @returns EmptyResponse The image registry is deleted\n\t * @throws ApiError\n\t */\n\tpublic static deleteImageRegistry(\n\t\tdomain: string\n\t): CancelablePromise<DeleteImageRegistryResponse> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"DELETE\",\n\t\t\turl: \"/registries/{domain}\",\n\t\t\tpath: {\n\t\t\t\tdomain: domain,\n\t\t\t},\n\t\t\terrors: {\n\t\t\t\t404: `The image registry does not exist`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Get the list of configured registries in the account\n\t * Get the list of configured registries in the account\n\t * @returns CustomerImageRegistry The list of registries that are added in the account\n\t * @throws ApiError\n\t */\n\tpublic static listImageRegistries(): CancelablePromise<\n\t\tArray<CustomerImageRegistry>\n\t> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"GET\",\n\t\t\turl: \"/registries\",\n\t\t\terrors: {\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Add a new image registry configuration\n\t * Add a new image registry into your account, so then Cloudflare can pull docker images with public key JWT authentication\n\t * @param requestBody\n\t * @returns CustomerImageRegistry Created a new image registry in the account\n\t * @throws ApiError\n\t */\n\tpublic static createImageRegistry(\n\t\trequestBody: CreateImageRegistryRequestBody\n\t): CancelablePromise<CustomerImageRegistry> {\n\t\treturn __request(OpenAPI, {\n\t\t\tmethod: \"POST\",\n\t\t\turl: \"/registries\",\n\t\t\tbody: requestBody,\n\t\t\tmediaType: \"application/json\",\n\t\t\terrors: {\n\t\t\t\t400: `Image registry input is malformed, see the error details`,\n\t\t\t\t403: `The registry that is being added is not allowed`,\n\t\t\t\t409: `The image registry already exists in the account`,\n\t\t\t\t500: `There has been an internal error`,\n\t\t\t},\n\t\t});\n\t}\n}\n","import { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { UserError } from \"@cloudflare/workers-utils\";\nimport type {\n\tBuildArgs,\n\tContainerDevOptions,\n\tImageURIConfig,\n\tWranglerLogger,\n} from \"./types\";\n\nexport async function constructBuildCommand(\n\toptions: BuildArgs,\n\tlogger?: WranglerLogger\n) {\n\tconst platform = options.platform ?? \"linux/amd64\";\n\tconst buildCmd = [\n\t\t\"build\",\n\t\t\"--load\",\n\t\t\"-t\",\n\t\toptions.tag,\n\t\t\"--platform\",\n\t\tplatform,\n\t\t\"--provenance=false\",\n\t];\n\n\tif (options.args) {\n\t\tfor (const arg in options.args) {\n\t\t\tbuildCmd.push(\"--build-arg\", `${arg}=${options.args[arg]}`);\n\t\t}\n\t}\n\tif (options.setNetworkToHost) {\n\t\tbuildCmd.push(\"--network\", \"host\");\n\t}\n\n\tconst dockerfile = readFileSync(options.pathToDockerfile, \"utf-8\");\n\t// pipe in the dockerfile\n\tbuildCmd.push(\"-f\", \"-\");\n\tbuildCmd.push(options.buildContext);\n\tlogger?.debug(`Building image with command: ${buildCmd.join(\" \")}`);\n\treturn { buildCmd, dockerfile };\n}\n\nexport function dockerBuild(\n\tdockerPath: string,\n\toptions: {\n\t\tbuildCmd: string[];\n\t\tdockerfile: string;\n\t}\n): { abort: () => void; ready: Promise<void> } {\n\tlet errorHandled = false;\n\tlet resolve: () => void;\n\tlet reject: (err: unknown) => void;\n\tconst ready = new Promise<void>((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\tconst child = spawn(dockerPath, options.buildCmd, {\n\t\tstdio: [\"pipe\", \"inherit\", \"inherit\"],\n\t\t// We need to set detached to true so that the child process\n\t\t// will control all of its child processes and we can kill\n\t\t// all of them in case we need to abort the build process.\n\t\t// On Windows, detached: true opens a new console window per child\n\t\t// process, so we only set it on non-Windows platforms.\n\t\tdetached: process.platform !== \"win32\",\n\t\t// Prevent child processes from opening visible console windows on Windows.\n\t\t// This is a no-op on non-Windows platforms.\n\t\twindowsHide: true,\n\t});\n\tif (child.stdin !== null) {\n\t\tchild.stdin.write(options.dockerfile);\n\t\tchild.stdin.end();\n\t}\n\n\tchild.on(\"exit\", (code) => {\n\t\tif (code === 0) {\n\t\t\tresolve();\n\t\t} else if (!errorHandled) {\n\t\t\terrorHandled = true;\n\t\t\treject(\n\t\t\t\tnew UserError(`Docker build exited with code: ${code}`, {\n\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n\tchild.on(\"error\", (err) => {\n\t\tif (!errorHandled) {\n\t\t\terrorHandled = true;\n\t\t\treject(err);\n\t\t}\n\t});\n\treturn {\n\t\tabort: () => {\n\t\t\tchild.unref();\n\t\t\tif (child.pid !== undefined) {\n\t\t\t\tif (process.platform === \"win32\") {\n\t\t\t\t\t// On Windows, negative-PID process group kill is not supported.\n\t\t\t\t\t// Kill the child process directly instead.\n\t\t\t\t\tchild.kill();\n\t\t\t\t} else {\n\t\t\t\t\t// Kill using the negative PID to terminate the whole process group\n\t\t\t\t\t// controlled by the child process.\n\t\t\t\t\tprocess.kill(-child.pid);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tready,\n\t};\n}\n\nexport async function buildImage(\n\tdockerPath: string,\n\toptions: Exclude<ContainerDevOptions, ImageURIConfig>\n) {\n\tconst { buildCmd, dockerfile } = await constructBuildCommand({\n\t\ttag: options.image_tag,\n\t\tpathToDockerfile: options.dockerfile,\n\t\tbuildContext: options.image_build_context,\n\t\targs: options.image_vars,\n\t\tplatform: \"linux/amd64\",\n\t});\n\n\treturn dockerBuild(dockerPath, { buildCmd, dockerfile });\n}\n","import { spawn } from \"node:child_process\";\nimport { UserError } from \"@cloudflare/workers-utils\";\nimport { ImageRegistriesService, ImageRegistryPermissions } from \"./client\";\nimport { OpenAPI } from \"./client/core/OpenAPI\";\n\nexport function configureOpenAPIForContainerPull(\n\taccountId: string,\n\tapiToken: string,\n\tapiBase = \"https://api.cloudflare.com/client/v4\"\n): void {\n\tOpenAPI.BASE = `${apiBase}/accounts/${accountId}/containers`;\n\tOpenAPI.CREDENTIALS = \"omit\";\n\tconst existingHeaders =\n\t\ttypeof OpenAPI.HEADERS === \"object\" ? OpenAPI.HEADERS : {};\n\tOpenAPI.HEADERS = {\n\t\t...existingHeaders,\n\t\tAuthorization: `Bearer ${apiToken}`,\n\t};\n}\n\n/**\n * Gets push and pull credentials for a configured image registry\n * and runs `docker login`, so subsequent image pushes or pulls are\n * authenticated\n */\nexport async function dockerLoginImageRegistry(\n\tpathToDocker: string,\n\tdomain: string\n) {\n\t// how long the credentials should be valid for\n\tconst expirationMinutes = 15;\n\n\tconst credentials =\n\t\tawait ImageRegistriesService.generateImageRegistryCredentials(domain, {\n\t\t\texpiration_minutes: expirationMinutes,\n\t\t\tpermissions: [\n\t\t\t\tImageRegistryPermissions.PUSH,\n\t\t\t\tImageRegistryPermissions.PULL,\n\t\t\t],\n\t\t});\n\n\tconst child = spawn(\n\t\tpathToDocker,\n\t\t[\"login\", \"--password-stdin\", \"--username\", credentials.username, domain],\n\t\t{ stdio: [\"pipe\", \"inherit\", \"inherit\"] }\n\t).on(\"error\", (err) => {\n\t\tthrow err;\n\t});\n\n\tchild.stdin.write(credentials.password);\n\tchild.stdin.end();\n\tawait new Promise<void>((resolve, reject) => {\n\t\tchild.on(\"close\", (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\treject(\n\t\t\t\t\tnew UserError(`Login failed with code: ${code}`, {\n\t\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t});\n}\n","import { getCloudflareContainerRegistry } from \"./knobs\";\n\n// The Cloudflare managed registry is special in that the namesapces for repos should always\n// start with the Cloudflare Account tag\n// This is a helper to generate the image tag with correct namespace attached to the Cloudflare Registry host\nexport const getCloudflareRegistryWithAccountNamespace = (\n\taccountID: string,\n\ttag: string\n): string => {\n\treturn `${getCloudflareContainerRegistry()}/${accountID}/${tag}`;\n};\n\nexport const MF_DEV_CONTAINER_PREFIX = \"cloudflare-dev\";\n","import { MF_DEV_CONTAINER_PREFIX } from \"./registry\";\n\n// Will return the default cloudflare managed registry for either a staging or production envrionment\n// based on the env var WRANGLER_API_ENVIRONMENT. The default registry can be overriden with the env\n// var CLOUDFLARE_CONTAINER_REGISTRY.\nexport const getCloudflareContainerRegistry = () => {\n\t// previously defaulted to registry.cloudchamber.cfdata.org\n\treturn (\n\t\tprocess.env.CLOUDFLARE_CONTAINER_REGISTRY ??\n\t\t(process.env.WRANGLER_API_ENVIRONMENT === \"staging\"\n\t\t\t? \"staging.registry.cloudflare.com\"\n\t\t\t: \"registry.cloudflare.com\")\n\t);\n};\n\n/** Prefixes with the cloudflare-dev namespace. The name should be the container's DO classname, and the tag a build uuid. */\nexport const getDevContainerImageName = (name: string, tag: string) => {\n\treturn `${MF_DEV_CONTAINER_PREFIX}/${name.toLowerCase()}:${tag}`;\n};\n","import { spawn } from \"node:child_process\";\nimport { UserError } from \"@cloudflare/workers-utils\";\n\nexport async function dockerImageInspect(\n\tdockerPath: string,\n\toptions: { imageTag: string; formatString: string }\n): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst proc = spawn(\n\t\t\tdockerPath,\n\t\t\t[\"image\", \"inspect\", options.imageTag, \"--format\", options.formatString],\n\t\t\t{\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t}\n\t\t);\n\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\n\t\tproc.stdout.on(\"data\", (chunk) => (stdout += chunk));\n\t\tproc.stderr.on(\"data\", (chunk) => (stderr += chunk));\n\n\t\tproc.on(\"close\", (code) => {\n\t\t\tif (code !== 0) {\n\t\t\t\treturn reject(\n\t\t\t\t\tnew UserError(`failed inspecting image locally: ${stderr.trim()}`, {\n\t\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\tresolve(stdout.trim());\n\t\t});\n\t\tproc.on(\"error\", (err) => reject(err));\n\t});\n}\n","import { execFileSync, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { UserError } from \"@cloudflare/workers-utils\";\nimport { dockerImageInspect } from \"./inspect\";\nimport type { ContainerDevOptions } from \"./types\";\nimport type { StdioOptions } from \"node:child_process\";\n\n/** helper for simple docker command call that don't require any io handling */\nexport const runDockerCmd = (\n\tdockerPath: string,\n\targs: string[],\n\tstdio?: StdioOptions\n): {\n\tabort: () => void;\n\tready: Promise<{ aborted: boolean }>;\n\t// Note: we make the return type a thenable just for convenience so that callers can directly await it\n\tthen: (resolve: () => void, reject: () => void) => void;\n} => {\n\tlet aborted = false;\n\tlet resolve: (args: { aborted: boolean }) => void;\n\tlet reject: (err: unknown) => void;\n\tconst ready = new Promise<{ aborted: boolean }>((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\tconst child = spawn(dockerPath, args, {\n\t\tstdio: stdio ?? \"inherit\",\n\t\t// We need to set detached to true so that the child process\n\t\t// will control all of its child processes and we can kill\n\t\t// all of them in case we need to abort the build process.\n\t\t// On Windows, detached: true opens a new console window per child\n\t\t// process, so we only set it on non-Windows platforms.\n\t\tdetached: process.platform !== \"win32\",\n\t\t// Prevent child processes from opening visible console windows on Windows.\n\t\t// This is a no-op on non-Windows platforms.\n\t\twindowsHide: true,\n\t});\n\tlet errorHandled = false;\n\n\tchild.on(\"close\", (code) => {\n\t\tif (code === 0 || aborted) {\n\t\t\tresolve({ aborted });\n\t\t} else if (!errorHandled) {\n\t\t\terrorHandled = true;\n\t\t\treject(\n\t\t\t\tnew UserError(`Docker command exited with code: ${code}`, {\n\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n\tchild.on(\"error\", (err) => {\n\t\tif (!errorHandled) {\n\t\t\terrorHandled = true;\n\t\t\treject(\n\t\t\t\tnew UserError(`Docker command failed: ${err.message}`, {\n\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n\treturn {\n\t\tabort: () => {\n\t\t\taborted = true;\n\t\t\tchild.unref();\n\t\t\tif (child.pid !== undefined) {\n\t\t\t\tif (process.platform === \"win32\") {\n\t\t\t\t\t// On Windows, negative-PID process group kill is not supported.\n\t\t\t\t\t// Kill the child process directly instead.\n\t\t\t\t\tchild.kill();\n\t\t\t\t} else {\n\t\t\t\t\t// Kill using the negative PID to terminate the whole process group\n\t\t\t\t\t// controlled by the child process.\n\t\t\t\t\tprocess.kill(-child.pid);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tready,\n\t\tthen: async (onResolve, onReject) => ready.then(onResolve).catch(onReject),\n\t};\n};\n\nexport const runDockerCmdWithOutput = (dockerPath: string, args: string[]) => {\n\ttry {\n\t\tconst stdout = execFileSync(dockerPath, args, { encoding: \"utf8\" });\n\t\treturn stdout.trim();\n\t} catch (error) {\n\t\tthrow new UserError(\n\t\t\t`Failed running docker command: ${(error as Error).message}. Command: ${dockerPath} ${args.join(\" \")}`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n};\n\n/** Checks whether docker is running on the system */\nexport const isDockerRunning = async (dockerPath: string) => {\n\ttry {\n\t\tawait runDockerCmd(dockerPath, [\"info\"], [\"inherit\", \"pipe\", \"pipe\"]);\n\t} catch {\n\t\t// We assume this command is unlikely to fail for reasons other than the Docker daemon not running, or the Docker CLI not being installed or in the PATH.\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/** throws when docker is not installed */\nexport const verifyDockerInstalled = async (\n\tdockerPath: string,\n\tisDev = true\n) => {\n\tconst dockerIsRunning = await isDockerRunning(dockerPath);\n\tif (!dockerIsRunning) {\n\t\tthrow new UserError(\n\t\t\t`The Docker CLI could not be launched. Please ensure that the Docker CLI is installed and the daemon is running.\\n` +\n\t\t\t\t`Other container tooling that is compatible with the Docker CLI and engine may work, but is not yet guaranteed to do so. You can specify an executable with the environment variable WRANGLER_DOCKER_BIN and a socket with DOCKER_HOST.` +\n\t\t\t\t`${isDev ? \"\\nTo suppress this error if you do not intend on triggering any container instances, set dev.enable_containers to false in your Wrangler config or passing in --enable-containers=false.\" : \"\"}`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n};\n\n/**\n * Kills and removes any containers which come from the given image tag\n */\nexport const cleanupContainers = (\n\tdockerPath: string,\n\timageTags: Set<string>\n) => {\n\ttry {\n\t\t// Find all containers (stopped and running) for each built image\n\t\tconst containerIds = getContainerIdsByImageTags(dockerPath, imageTags);\n\n\t\tif (containerIds.length === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Workerd should have stopped all containers, but clean up any in case. Sends a sigkill.\n\t\trunDockerCmdWithOutput(dockerPath, [\"rm\", \"--force\", ...containerIds]);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\n/**\n * See https://docs.docker.com/reference/cli/docker/container/ls/#ancestor\n *\n * @param dockerPath The path to the Docker executable\n * @param imageTags A set of ancestor image tags\n * @returns The ids of all containers that share the given image tags as ancestors.\n */\nexport function getContainerIdsByImageTags(\n\tdockerPath: string,\n\timageTags: Set<string>\n): string[] {\n\tconst ids = new Set<string>();\n\n\tfor (const imageTag of imageTags) {\n\t\tconst containerIdsFromImage = getContainerIdsFromImage(\n\t\t\tdockerPath,\n\t\t\timageTag\n\t\t);\n\t\tcontainerIdsFromImage.forEach((id) => ids.add(id));\n\t}\n\n\treturn Array.from(ids);\n}\n\nexport const getContainerIdsFromImage = (\n\tdockerPath: string,\n\tancestorImage: string\n) => {\n\tconst output = runDockerCmdWithOutput(dockerPath, [\n\t\t\"ps\",\n\t\t\"-a\",\n\t\t\"--filter\",\n\t\t`ancestor=${ancestorImage}`,\n\t\t\"--format\",\n\t\t\"{{.ID}}\",\n\t]);\n\treturn output.split(\"\\n\").filter((line) => line.trim());\n};\n\n/**\n * While all ports are exposed in prod, a limitation of local dev with docker is that\n * users will have to manually expose ports in their Dockerfile.\n * We want to fail early and clearly if a user tries to develop with a container\n * that has no ports exposed and is definitely not accessible.\n *\n * (A user could still use `getTCPPort()` on a port that is not exposed, but we leave that error for runtime.)\n */\nexport async function checkExposedPorts(\n\tdockerPath: string,\n\toptions: ContainerDevOptions\n) {\n\tconst output = await dockerImageInspect(dockerPath, {\n\t\timageTag: options.image_tag,\n\t\tformatString: \"{{ len .Config.ExposedPorts }}\",\n\t});\n\tif (output === \"0\") {\n\t\tthrow new UserError(\n\t\t\t`The container \"${options.class_name}\" does not expose any ports. In your Dockerfile, please expose any ports you intend to connect to.\\n` +\n\t\t\t\t\"For additional information please see: https://developers.cloudflare.com/containers/local-dev/#exposing-ports.\\n\",\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n}\n\n/**\n * Generates a random container build id\n */\nexport function generateContainerBuildId() {\n\treturn randomUUID().slice(0, 8);\n}\n\n/**\n * Output of docker context ls --format json\n */\ntype DockerContext = {\n\tCurrent: boolean;\n\tDescription: string;\n\tDockerEndpoint: string;\n\tError: string;\n\tName: string;\n};\n\n/**\n * Run `docker context ls` to get the socket from the currently active Docker context\n * @returns The socket path or null if we are not able to determine it\n */\nexport function getDockerSocketFromContext(dockerPath: string): string | null {\n\ttry {\n\t\tconst output = runDockerCmdWithOutput(dockerPath, [\n\t\t\t\"context\",\n\t\t\t\"ls\",\n\t\t\t\"--format\",\n\t\t\t\"json\",\n\t\t]);\n\n\t\t// Parse each line as a separate JSON object\n\t\tconst lines = output.trim().split(\"\\n\");\n\t\tconst contexts: DockerContext[] = lines.map((line) => JSON.parse(line));\n\n\t\t// Find the current context\n\t\tconst currentContext = contexts.find((context) => context.Current === true);\n\n\t\tif (currentContext && currentContext.DockerEndpoint) {\n\t\t\treturn currentContext.DockerEndpoint;\n\t\t}\n\t} catch {\n\t\t// Fall back to null if docker context inspection fails so that we can use platform defaults\n\t}\n\treturn null;\n}\n/**\n * Resolve Docker host as follows:\n * 1. Check WRANGLER_DOCKER_HOST environment variable\n * 2. Check DOCKER_HOST environment variable\n * 3. Try to get socket from active Docker context\n * 4. Fall back to platform-specific defaults\n */\nexport function resolveDockerHost(dockerPath: string): string {\n\tif (process.env.WRANGLER_DOCKER_HOST) {\n\t\treturn process.env.WRANGLER_DOCKER_HOST;\n\t}\n\n\tif (process.env.DOCKER_HOST) {\n\t\treturn process.env.DOCKER_HOST;\n\t}\n\n\t// 3. Try to get socket from by running `docker context ls`\n\n\tconst contextSocket = getDockerSocketFromContext(dockerPath);\n\tif (contextSocket) {\n\t\treturn contextSocket;\n\t}\n\n\t// 4. Fall back to platform-specific defaults\n\t// (note windows doesn't work yet due to a runtime limitation)\n\treturn process.platform === \"win32\"\n\t\t? \"//./pipe/docker_engine\"\n\t\t: \"unix:///var/run/docker.sock\";\n}\n\n/**\n *\n * Get docker host from environment variables or platform defaults.\n * Does not use the docker context ls command, so we\n */\nexport const getDockerHostFromEnv = (): string => {\n\tconst fromEnv = process.env.WRANGLER_DOCKER_HOST ?? process.env.DOCKER_HOST;\n\n\treturn (fromEnv ?? process.platform === \"win32\")\n\t\t? \"//./pipe/docker_engine\"\n\t\t: \"unix:///var/run/docker.sock\";\n};\n\n/**\n * Get all repository tags for a given image\n */\nexport async function getImageRepoTags(\n\tdockerPath: string,\n\timageTag: string\n): Promise<string[]> {\n\ttry {\n\t\tconst output = await dockerImageInspect(dockerPath, {\n\t\t\timageTag,\n\t\t\tformatString: \"{{ range .RepoTags }}{{ . }}\\n{{ end }}\",\n\t\t});\n\t\treturn output.split(\"\\n\").filter((tag) => tag.trim() !== \"\");\n\t} catch {\n\t\treturn [];\n\t}\n}\n\n/**\n * Checks if the given image has any duplicate tags from previous dev sessions,\n * and remove them if so.\n */\nexport async function cleanupDuplicateImageTags(\n\tdockerPath: string,\n\timageTag: string\n): Promise<void> {\n\ttry {\n\t\tconst repoTags = await getImageRepoTags(dockerPath, imageTag);\n\t\t// Remove all cloudflare-dev tags from previous sessions except the current one\n\t\tconst tagsToRemove = repoTags.filter(\n\t\t\t(tag) => tag !== imageTag && tag.startsWith(\"cloudflare-dev\")\n\t\t);\n\t\tif (tagsToRemove.length > 0) {\n\t\t\trunDockerCmdWithOutput(dockerPath, [\"rmi\", ...tagsToRemove]);\n\t\t}\n\t} catch {}\n}\n","import { UserError } from \"@cloudflare/workers-utils\";\nimport { buildImage } from \"./build\";\nimport { ExternalRegistryKind } from \"./client/models/ExternalRegistryKind\";\nimport { getCloudflareContainerRegistry } from \"./knobs\";\nimport { dockerLoginImageRegistry } from \"./login\";\nimport { getCloudflareRegistryWithAccountNamespace } from \"./registry\";\nimport {\n\tcheckExposedPorts,\n\tcleanupDuplicateImageTags,\n\trunDockerCmd,\n\tverifyDockerInstalled,\n} from \"./utils\";\nimport type {\n\tContainerDevOptions,\n\tDockerfileConfig,\n\tViteLogger,\n\tWranglerLogger,\n} from \"./types\";\n\nexport const DEFAULT_CONTAINER_EGRESS_INTERCEPTOR_IMAGE =\n\t\"cloudflare/proxy-everything:3cb1195@sha256:0ef6716c52430096900b150d84a3302057d6cd2319dae7987128c85d0733e3c8\";\n\nexport function getEgressInterceptorImage(): string {\n\treturn (\n\t\tprocess.env.MINIFLARE_CONTAINER_EGRESS_IMAGE ??\n\t\tDEFAULT_CONTAINER_EGRESS_INTERCEPTOR_IMAGE\n\t);\n}\n\nexport async function pullEgressInterceptorImage(\n\tdockerPath: string\n): Promise<void> {\n\tconst image = getEgressInterceptorImage();\n\tawait runDockerCmd(dockerPath, [\"pull\", image, \"--platform\", \"linux/amd64\"]);\n}\n\nexport async function pullImage(\n\tdockerPath: string,\n\toptions: Exclude<ContainerDevOptions, DockerfileConfig>,\n\tlogger: WranglerLogger | ViteLogger\n): Promise<{ abort: () => void; ready: Promise<void> }> {\n\tconst domain = new URL(`http://${options.image_uri}`).hostname;\n\n\tconst isExternalRegistry = domain !== getCloudflareContainerRegistry();\n\ttry {\n\t\tawait dockerLoginImageRegistry(dockerPath, domain);\n\t} catch (e) {\n\t\tif (!isExternalRegistry) {\n\t\t\tthrow e;\n\t\t}\n\t\tlogger?.warn(\n\t\t\t\"Unable to retrieve configured registry credentials from Cloudflare.\" +\n\t\t\t\t\"\\nUnless this is a public image, you will need to run `wrangler containers registries configure` before deploying.\" +\n\t\t\t\t\"\\nAttempting to pull image anyway...\"\n\t\t);\n\t}\n\n\tconst pull = runDockerCmd(dockerPath, [\n\t\t\"pull\",\n\t\toptions.image_uri,\n\t\t// All containers running on our platform need to be built for amd64 architecture, but by default docker pull seems to look for an image matching the host system, so we need to specify this here\n\t\t\"--platform\",\n\t\t\"linux/amd64\",\n\t]);\n\tconst ready = pull.ready.then(async ({ aborted }: { aborted: boolean }) => {\n\t\tif (!aborted) {\n\t\t\t// re-tag image with the expected dev-formatted image tag for consistency\n\t\t\tawait runDockerCmd(dockerPath, [\n\t\t\t\t\"tag\",\n\t\t\t\toptions.image_uri,\n\t\t\t\toptions.image_tag,\n\t\t\t]);\n\t\t}\n\t});\n\n\treturn {\n\t\tabort: () => {\n\t\t\tpull.abort();\n\t\t},\n\t\tready,\n\t};\n}\n\n/**\n *\n * Builds or pulls the container images for local development. This\n * will be called before starting the local development server, and by a rebuild\n * hotkey during development.\n *\n * Because this runs when local dev starts, we also do some validation here,\n * such as checking if the Docker CLI is installed, and if the container images\n * expose any ports.\n */\nexport async function prepareContainerImagesForDev(args: {\n\tdockerPath: string;\n\tcontainerOptions: ContainerDevOptions[];\n\tonContainerImagePreparationStart: (args: {\n\t\tcontainerOptions: ContainerDevOptions;\n\t\tabort: () => void;\n\t}) => void;\n\tonContainerImagePreparationEnd: (args: {\n\t\tcontainerOptions: ContainerDevOptions;\n\t}) => void;\n\tlogger: WranglerLogger | ViteLogger;\n}): Promise<void> {\n\tconst {\n\t\tdockerPath,\n\t\tcontainerOptions,\n\t\tonContainerImagePreparationStart,\n\t\tonContainerImagePreparationEnd,\n\t} = args;\n\tlet aborted = false;\n\tif (process.platform === \"win32\") {\n\t\tthrow new UserError(\n\t\t\t\"Local development with containers is currently not supported on Windows. You should use WSL instead. You can also set `enable_containers` to false if you do not need to develop the container part of your application.\",\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n\tawait verifyDockerInstalled(dockerPath);\n\tfor (const options of containerOptions) {\n\t\tif (\"dockerfile\" in options) {\n\t\t\tconst build = await buildImage(dockerPath, options);\n\t\t\tonContainerImagePreparationStart({\n\t\t\t\tcontainerOptions: options,\n\t\t\t\tabort: () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t\tbuild.abort();\n\t\t\t\t},\n\t\t\t});\n\t\t\tawait build.ready;\n\n\t\t\tonContainerImagePreparationEnd({\n\t\t\t\tcontainerOptions: options,\n\t\t\t});\n\t\t} else {\n\t\t\tconst pull = await pullImage(dockerPath, options, args.logger);\n\t\t\tonContainerImagePreparationStart({\n\t\t\t\tcontainerOptions: options,\n\t\t\t\tabort: () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t\tpull.abort();\n\t\t\t\t},\n\t\t\t});\n\t\t\tawait pull.ready;\n\t\t\tonContainerImagePreparationEnd({\n\t\t\t\tcontainerOptions: options,\n\t\t\t});\n\t\t}\n\t\tif (!aborted) {\n\t\t\t// Clean up duplicate image tags. This is scoped to cloudflare-dev only\n\t\t\tawait cleanupDuplicateImageTags(dockerPath, options.image_tag);\n\n\t\t\tawait checkExposedPorts(dockerPath, options);\n\t\t}\n\t}\n\n\t// Pull the egress interceptor image used to intercept outbound HTTP from\n\t// containers and route it back to workerd (e.g. for interceptOutboundHttp).\n\tif (!aborted) {\n\t\tawait pullEgressInterceptorImage(dockerPath);\n\t}\n}\n\n/**\n * Resolve an image name to the full unambiguous name.\n *\n * image:tag -> prepend registry.cloudflare.com/accountid/\n * registry.cloudflare.com/image:tag -> registry.cloudlfare.com/accountid/image:tag\n * registry.cloudflare.com/accountid/image:tag -> no change\n * anyother-registry.com/anything -> no change\n */\nexport function resolveImageName(accountId: string, image: string): string {\n\tlet url: URL | undefined;\n\ttry {\n\t\turl = new URL(`http://${image}`);\n\t} catch {\n\t\t// Invalid URL\n\t}\n\n\tif (\n\t\turl === undefined ||\n\t\t(!url.host.match(/[:.]/) && url.hostname !== \"localhost\")\n\t) {\n\t\t// Not a valid URL so assume it is in the format image:tag and prepend the registry\n\t\treturn getCloudflareRegistryWithAccountNamespace(accountId, image);\n\t}\n\n\tif (url.hostname !== getCloudflareContainerRegistry()) {\n\t\t// hostname not the managed registry, passthrough\n\t\treturn image;\n\t}\n\n\tif (url.pathname.startsWith(`/${accountId}`)) {\n\t\t// is managed registry and has the account id, passthrough\n\t\treturn image;\n\t}\n\n\t// check if already looks like it has an account id (32 char hex string)\n\tconst accountIdPattern = /^\\/([a-f0-9]{32})\\//;\n\tconst match = accountIdPattern.exec(url.pathname);\n\tif (match) {\n\t\tconst foundAccountId = match[1];\n\t\tif (foundAccountId !== accountId) {\n\t\t\tthrow new Error(\n\t\t\t\t`Image \"${image}\" does not belong to your account\\nImage appears to belong to account: \"${foundAccountId}\"\\nCurrent account: \"${accountId}\"`\n\t\t\t);\n\t\t}\n\t\treturn image;\n\t}\n\n\t// is managed registry and doesn't have the account id,add it to the path\n\treturn `${url.hostname}/${accountId}${url.pathname}`;\n}\n\n/**\n * Get type of container registry, and validate.\n * Currently we support Cloudflare managed registries and AWS ECR.\n * When using Cloudflare managed registries we expect CLOUDFLARE_CONTAINER_REGISTRY to be set\n */\nexport const getAndValidateRegistryType = (domain: string): RegistryPattern => {\n\t// TODO: use parseImageName when that gets moved to this package\n\tif (domain.includes(\"://\")) {\n\t\tthrow new Error(\n\t\t\t`${domain} is invalid:\\nImage reference should not include the protocol part (e.g: registry.cloudflare.com rather than https://registry.cloudflare.com)`\n\t\t);\n\t}\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(`http://${domain}`);\n\t} catch (e) {\n\t\tif (e instanceof Error) {\n\t\t\tthrow new Error(`${domain} is invalid:\\n${e.message}`);\n\t\t}\n\t\tthrow e;\n\t}\n\n\tconst acceptedRegistries: RegistryPattern[] = [\n\t\t{\n\t\t\ttype: ExternalRegistryKind.ECR,\n\t\t\tpattern: /^[0-9]{12}\\.dkr\\.ecr\\.[a-z0-9-]+\\.amazonaws\\.com$/,\n\t\t\tname: \"AWS ECR\",\n\t\t\tsecretType: \"AWS Secret Access Key\",\n\t\t},\n\t\t{\n\t\t\ttype: ExternalRegistryKind.DOCKER_HUB,\n\t\t\tpattern: /^docker\\.io$/,\n\t\t\tname: \"DockerHub\",\n\t\t\tsecretType: \"DockerHub PAT Token\",\n\t\t},\n\t\t{\n\t\t\ttype: \"cloudflare\",\n\t\t\t// Make a regex based on the env var CLOUDFLARE_CONTAINER_REGISTRY\n\t\t\tpattern: new RegExp(\n\t\t\t\t`^${getCloudflareContainerRegistry().replace(/[\\\\.]/g, \"\\\\$&\")}$`\n\t\t\t),\n\t\t\tname: \"Cloudflare Containers Managed Registry\",\n\t\t},\n\t];\n\n\tconst match = acceptedRegistries.find((registry) =>\n\t\tregistry.pattern.test(url.hostname)\n\t);\n\n\tif (!match) {\n\t\tconst supportedRegistries = acceptedRegistries\n\t\t\t.filter((r) => r.type !== \"cloudflare\")\n\t\t\t.map((r) => r.name)\n\t\t\t.join(\", \");\n\t\tthrow new UserError(\n\t\t\t`${url.hostname} is not a supported image registry.\\nCurrently we support the following non-Cloudflare registries: ${supportedRegistries}.\\nTo use an existing image from another repository, see https://developers.cloudflare.com/containers/platform-details/image-management/#using-pre-built-container-images`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n\n\treturn match;\n};\n\ninterface RegistryPattern {\n\ttype: ExternalRegistryKind | \"cloudflare\";\n\tsecretType?: string;\n\tpattern: RegExp;\n\tname: string;\n}\n","// Taken from https://stackoverflow.com/a/3561711\n// which is everything from the tc39 proposal, plus the following two characters: ^/\n// It's also everything included in the URLPattern escape (https://wicg.github.io/urlpattern/#escape-a-regexp-string), plus the following: -\n\nimport { REDIRECTS_VERSION } from \"../handler\";\nimport type { AssetConfig } from \"../../../utils/types\";\n\n// As the answer says, there's no downside to escaping these extra characters, so better safe than sorry\nconst ESCAPE_REGEX_CHARACTERS = /[-/\\\\^$*+?.()|[\\]{}]/g;\nconst escapeRegex = (str: string) => {\n\treturn str.replace(ESCAPE_REGEX_CHARACTERS, \"\\\\$&\");\n};\n\n// Placeholder names must begin with a colon then a letter, be alphanumeric and optionally contain underscores.\n// e.g. :place_123_holder\nconst HOST_PLACEHOLDER_REGEX =\n\t/(?<=^https:\\\\\\/\\\\\\/[^/]*?):([A-Za-z]\\w*)(?=\\\\)/g;\nconst PLACEHOLDER_REGEX = /:([A-Za-z]\\w*)/g;\n\nexport type Replacements = Record<string, string>;\n\nexport type Removals = string[];\n\nexport const replacer = (str: string, replacements: Replacements) => {\n\tfor (const [replacement, value] of Object.entries(replacements)) {\n\t\tstr = str.replaceAll(`:${replacement}`, value);\n\t}\n\treturn str;\n};\n\nexport const generateGlobOnlyRuleRegExp = (rule: string) => {\n\t// Escape all regex characters other than globs (the \"*\" character) since that's all that's supported.\n\trule = rule.split(\"*\").map(escapeRegex).join(\".*\");\n\n\t// Wrap in line terminators to be safe.\n\trule = \"^\" + rule + \"$\";\n\n\treturn RegExp(rule);\n};\n\nexport const generateRuleRegExp = (rule: string) => {\n\t// Create :splat capturer then escape.\n\trule = rule.split(\"*\").map(escapeRegex).join(\"(?<splat>.*)\");\n\n\t// Create :placeholder capturers (already escaped).\n\t// For placeholders in the host, we separate at forward slashes and periods.\n\t// For placeholders in the path, we separate at forward slashes.\n\t// This matches the behavior of URLPattern.\n\t// e.g. https://:subdomain.domain/ -> https://(here).domain/\n\t// e.g. /static/:file -> /static/(image.jpg)\n\t// e.g. /blog/:post -> /blog/(an-exciting-post)\n\tconst host_matches = rule.matchAll(HOST_PLACEHOLDER_REGEX);\n\tfor (const host_match of host_matches) {\n\t\trule = rule.split(host_match[0]).join(`(?<${host_match[1]}>[^/.]+)`);\n\t}\n\n\tconst path_matches = rule.matchAll(PLACEHOLDER_REGEX);\n\tfor (const path_match of path_matches) {\n\t\trule = rule.split(path_match[0]).join(`(?<${path_match[1]}>[^/]+)`);\n\t}\n\n\t// Wrap in line terminators to be safe.\n\trule = \"^\" + rule + \"$\";\n\n\treturn RegExp(rule);\n};\n\nexport const generateRulesMatcher = <T>(\n\trules?: Record<string, T>,\n\treplacerFn: (match: T, replacements: Replacements) => T = (match) => match\n) => {\n\tif (!rules) {\n\t\treturn () => [];\n\t}\n\n\tconst compiledRules = Object.entries(rules)\n\t\t.map(([rule, match]) => {\n\t\t\tconst crossHost = rule.startsWith(\"https://\");\n\n\t\t\ttry {\n\t\t\t\tconst regExp = generateRuleRegExp(rule);\n\t\t\t\treturn [{ crossHost, regExp }, match];\n\t\t\t} catch {}\n\t\t})\n\t\t.filter((value) => value !== undefined) as [\n\t\t{ crossHost: boolean; regExp: RegExp },\n\t\tT,\n\t][];\n\n\treturn ({ request }: { request: Request }) => {\n\t\tconst { pathname, hostname } = new URL(request.url);\n\n\t\treturn compiledRules\n\t\t\t.map(([{ crossHost, regExp }, match]) => {\n\t\t\t\t// This, rather confusingly, means that although we enforce `https://` protocols in\n\t\t\t\t// the rules of `_headers`/`_redirects`, we don't actually respect that at all at runtime.\n\t\t\t\t// When processing a request against an absolute URL rule, we rewrite the protocol to `https://`.\n\t\t\t\t// This has the benefit of ensuring attackers can't specify a different protocol\n\t\t\t\t// to circumvent a developer's security rules (e.g. CORS), but it isn't obvious behavior.\n\t\t\t\t// We should consider different syntax in the future for developers when they specify rules.\n\t\t\t\t// For example, `*://example.com/path`, `://example.com/path` or `//example.com/`.\n\t\t\t\t// Though we'd need to be careful with that last one\n\t\t\t\t// as that would currently be read as a relative URL.\n\t\t\t\t// Perhaps, if we ever move the `_headers`/`_redirects` files to acting ahead of Functions,\n\t\t\t\t// this might be a good time for this change.\n\t\t\t\tconst test = crossHost ? `https://${hostname}${pathname}` : pathname;\n\t\t\t\tconst result = regExp.exec(test);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn replacerFn(match, result.groups || {});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((value) => value !== undefined) as T[];\n\t};\n};\n\nexport const staticRedirectsMatcher = (\n\tconfiguration: Required<AssetConfig>,\n\thost: string,\n\tpathname: string\n) => {\n\tconst withHostMatch =\n\t\tconfiguration.redirects.staticRules[`https://${host}${pathname}`];\n\tconst withoutHostMatch = configuration.redirects.staticRules[pathname];\n\n\tif (withHostMatch && withoutHostMatch) {\n\t\tif (withHostMatch.lineNumber < withoutHostMatch.lineNumber) {\n\t\t\treturn withHostMatch;\n\t\t} else {\n\t\t\treturn withoutHostMatch;\n\t\t}\n\t}\n\n\treturn withHostMatch || withoutHostMatch;\n};\n\nexport const generateRedirectsMatcher = (\n\tconfiguration: Required<AssetConfig>\n) =>\n\tgenerateRulesMatcher(\n\t\tconfiguration.redirects.version === REDIRECTS_VERSION\n\t\t\t? configuration.redirects.rules\n\t\t\t: {},\n\t\t({ status, to }, replacements) => {\n\t\t\tconst target = replacer(to, replacements).trim();\n\t\t\tconst protoPattern = /^(\\w+:\\/\\/)/;\n\t\t\tif (protoPattern.test(target)) {\n\t\t\t\t// External redirects are not modified.\n\t\t\t\treturn {\n\t\t\t\t\tstatus,\n\t\t\t\t\tto: target,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// Relative redirects are modified to remove multiple slashes.\n\t\t\t\treturn {\n\t\t\t\t\tstatus,\n\t\t\t\t\tto: target.replace(/\\/+/g, \"/\"),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t);\n\nexport const generateStaticRoutingRuleMatcher =\n\t(rules: string[]) =>\n\t({ request }: { request: Request }) => {\n\t\tconst { pathname } = new URL(request.url);\n\t\tfor (const rule of rules) {\n\t\t\ttry {\n\t\t\t\tconst regExp = generateGlobOnlyRuleRegExp(rule);\n\t\t\t\tif (regExp.test(pathname)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn false;\n\t};\n","import path from \"node:path\";\nimport { getDevContainerImageName } from \"@cloudflare/containers-shared/src/knobs\";\nimport { isDockerfile } from \"@cloudflare/workers-utils\";\nimport type { ResolvedWorkerConfig } from \"./plugin-config\";\n\n/**\n * Returns the path to the Docker executable as defined by the\n * `WRANGLER_DOCKER_BIN` environment variable, or the default value\n * `\"docker\"`\n */\nexport function getDockerPath(): string {\n\tconst defaultDockerPath = \"docker\";\n\tconst dockerPathEnvVar = \"WRANGLER_DOCKER_BIN\";\n\n\treturn process.env[dockerPathEnvVar] || defaultDockerPath;\n}\n\n/**\n * @returns Container options suitable for building or pulling images,\n * with image tag set to well-known dev format, or undefined if\n * containers are not enabled or not configured.\n */\nexport function getContainerOptions(options: {\n\tcontainersConfig: ResolvedWorkerConfig[\"containers\"];\n\tcontainerBuildId: string;\n\tconfigPath?: string;\n}) {\n\tconst { containersConfig, containerBuildId, configPath } = options;\n\n\tif (!containersConfig?.length) {\n\t\treturn undefined;\n\t}\n\n\treturn containersConfig.map((container) => {\n\t\tif (isDockerfile(container.image, configPath)) {\n\t\t\treturn {\n\t\t\t\tdockerfile: container.image,\n\t\t\t\timage_build_context:\n\t\t\t\t\tcontainer.image_build_context ?? path.dirname(container.image),\n\t\t\t\timage_vars: container.image_vars,\n\t\t\t\tclass_name: container.class_name,\n\t\t\t\timage_tag: getDevContainerImageName(\n\t\t\t\t\tcontainer.class_name,\n\t\t\t\t\tcontainerBuildId\n\t\t\t\t),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\timage_uri: container.image,\n\t\t\t\tclass_name: container.class_name,\n\t\t\t\timage_tag: getDevContainerImageName(\n\t\t\t\t\tcontainer.class_name,\n\t\t\t\t\tcontainerBuildId\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t});\n}\n\nexport type ContainerTagToOptionsMap = Map<\n\tstring,\n\tNonNullable<ReturnType<typeof getContainerOptions>>[number]\n>;\n","import { createRequire } from \"module\";\nimport { basename, dirname, normalize, relative, resolve, sep } from \"path\";\nimport * as nativeFs from \"fs\";\n\n//#region rolldown:runtime\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n\n//#endregion\n//#region src/utils.ts\nfunction cleanPath(path) {\n\tlet normalized = normalize(path);\n\tif (normalized.length > 1 && normalized[normalized.length - 1] === sep) normalized = normalized.substring(0, normalized.length - 1);\n\treturn normalized;\n}\nconst SLASHES_REGEX = /[\\\\/]/g;\nfunction convertSlashes(path, separator) {\n\treturn path.replace(SLASHES_REGEX, separator);\n}\nconst WINDOWS_ROOT_DIR_REGEX = /^[a-z]:[\\\\/]$/i;\nfunction isRootDirectory(path) {\n\treturn path === \"/\" || WINDOWS_ROOT_DIR_REGEX.test(path);\n}\nfunction normalizePath(path, options) {\n\tconst { resolvePaths, normalizePath: normalizePath$1, pathSeparator } = options;\n\tconst pathNeedsCleaning = process.platform === \"win32\" && path.includes(\"/\") || path.startsWith(\".\");\n\tif (resolvePaths) path = resolve(path);\n\tif (normalizePath$1 || pathNeedsCleaning) path = cleanPath(path);\n\tif (path === \".\") return \"\";\n\tconst needsSeperator = path[path.length - 1] !== pathSeparator;\n\treturn convertSlashes(needsSeperator ? path + pathSeparator : path, pathSeparator);\n}\n\n//#endregion\n//#region src/api/functions/join-path.ts\nfunction joinPathWithBasePath(filename, directoryPath) {\n\treturn directoryPath + filename;\n}\nfunction joinPathWithRelativePath(root, options) {\n\treturn function(filename, directoryPath) {\n\t\tconst sameRoot = directoryPath.startsWith(root);\n\t\tif (sameRoot) return directoryPath.slice(root.length) + filename;\n\t\telse return convertSlashes(relative(root, directoryPath), options.pathSeparator) + options.pathSeparator + filename;\n\t};\n}\nfunction joinPath(filename) {\n\treturn filename;\n}\nfunction joinDirectoryPath(filename, directoryPath, separator) {\n\treturn directoryPath + filename + separator;\n}\nfunction build$7(root, options) {\n\tconst { relativePaths, includeBasePath } = options;\n\treturn relativePaths && root ? joinPathWithRelativePath(root, options) : includeBasePath ? joinPathWithBasePath : joinPath;\n}\n\n//#endregion\n//#region src/api/functions/push-directory.ts\nfunction pushDirectoryWithRelativePath(root) {\n\treturn function(directoryPath, paths) {\n\t\tpaths.push(directoryPath.substring(root.length) || \".\");\n\t};\n}\nfunction pushDirectoryFilterWithRelativePath(root) {\n\treturn function(directoryPath, paths, filters) {\n\t\tconst relativePath = directoryPath.substring(root.length) || \".\";\n\t\tif (filters.every((filter) => filter(relativePath, true))) paths.push(relativePath);\n\t};\n}\nconst pushDirectory = (directoryPath, paths) => {\n\tpaths.push(directoryPath || \".\");\n};\nconst pushDirectoryFilter = (directoryPath, paths, filters) => {\n\tconst path = directoryPath || \".\";\n\tif (filters.every((filter) => filter(path, true))) paths.push(path);\n};\nconst empty$2 = () => {};\nfunction build$6(root, options) {\n\tconst { includeDirs, filters, relativePaths } = options;\n\tif (!includeDirs) return empty$2;\n\tif (relativePaths) return filters && filters.length ? pushDirectoryFilterWithRelativePath(root) : pushDirectoryWithRelativePath(root);\n\treturn filters && filters.length ? pushDirectoryFilter : pushDirectory;\n}\n\n//#endregion\n//#region src/api/functions/push-file.ts\nconst pushFileFilterAndCount = (filename, _paths, counts, filters) => {\n\tif (filters.every((filter) => filter(filename, false))) counts.files++;\n};\nconst pushFileFilter = (filename, paths, _counts, filters) => {\n\tif (filters.every((filter) => filter(filename, false))) paths.push(filename);\n};\nconst pushFileCount = (_filename, _paths, counts, _filters) => {\n\tcounts.files++;\n};\nconst pushFile = (filename, paths) => {\n\tpaths.push(filename);\n};\nconst empty$1 = () => {};\nfunction build$5(options) {\n\tconst { excludeFiles, filters, onlyCounts } = options;\n\tif (excludeFiles) return empty$1;\n\tif (filters && filters.length) return onlyCounts ? pushFileFilterAndCount : pushFileFilter;\n\telse if (onlyCounts) return pushFileCount;\n\telse return pushFile;\n}\n\n//#endregion\n//#region src/api/functions/get-array.ts\nconst getArray = (paths) => {\n\treturn paths;\n};\nconst getArrayGroup = () => {\n\treturn [\"\"].slice(0, 0);\n};\nfunction build$4(options) {\n\treturn options.group ? getArrayGroup : getArray;\n}\n\n//#endregion\n//#region src/api/functions/group-files.ts\nconst groupFiles = (groups, directory, files) => {\n\tgroups.push({\n\t\tdirectory,\n\t\tfiles,\n\t\tdir: directory\n\t});\n};\nconst empty = () => {};\nfunction build$3(options) {\n\treturn options.group ? groupFiles : empty;\n}\n\n//#endregion\n//#region src/api/functions/resolve-symlink.ts\nconst resolveSymlinksAsync = function(path, state, callback$1) {\n\tconst { queue, fs, options: { suppressErrors } } = state;\n\tqueue.enqueue();\n\tfs.realpath(path, (error, resolvedPath) => {\n\t\tif (error) return queue.dequeue(suppressErrors ? null : error, state);\n\t\tfs.stat(resolvedPath, (error$1, stat) => {\n\t\t\tif (error$1) return queue.dequeue(suppressErrors ? null : error$1, state);\n\t\t\tif (stat.isDirectory() && isRecursive(path, resolvedPath, state)) return queue.dequeue(null, state);\n\t\t\tcallback$1(stat, resolvedPath);\n\t\t\tqueue.dequeue(null, state);\n\t\t});\n\t});\n};\nconst resolveSymlinks = function(path, state, callback$1) {\n\tconst { queue, fs, options: { suppressErrors } } = state;\n\tqueue.enqueue();\n\ttry {\n\t\tconst resolvedPath = fs.realpathSync(path);\n\t\tconst stat = fs.statSync(resolvedPath);\n\t\tif (stat.isDirectory() && isRecursive(path, resolvedPath, state)) return;\n\t\tcallback$1(stat, resolvedPath);\n\t} catch (e) {\n\t\tif (!suppressErrors) throw e;\n\t}\n};\nfunction build$2(options, isSynchronous) {\n\tif (!options.resolveSymlinks || options.excludeSymlinks) return null;\n\treturn isSynchronous ? resolveSymlinks : resolveSymlinksAsync;\n}\nfunction isRecursive(path, resolved, state) {\n\tif (state.options.useRealPaths) return isRecursiveUsingRealPaths(resolved, state);\n\tlet parent = dirname(path);\n\tlet depth = 1;\n\twhile (parent !== state.root && depth < 2) {\n\t\tconst resolvedPath = state.symlinks.get(parent);\n\t\tconst isSameRoot = !!resolvedPath && (resolvedPath === resolved || resolvedPath.startsWith(resolved) || resolved.startsWith(resolvedPath));\n\t\tif (isSameRoot) depth++;\n\t\telse parent = dirname(parent);\n\t}\n\tstate.symlinks.set(path, resolved);\n\treturn depth > 1;\n}\nfunction isRecursiveUsingRealPaths(resolved, state) {\n\treturn state.visited.includes(resolved + state.options.pathSeparator);\n}\n\n//#endregion\n//#region src/api/functions/invoke-callback.ts\nconst onlyCountsSync = (state) => {\n\treturn state.counts;\n};\nconst groupsSync = (state) => {\n\treturn state.groups;\n};\nconst defaultSync = (state) => {\n\treturn state.paths;\n};\nconst limitFilesSync = (state) => {\n\treturn state.paths.slice(0, state.options.maxFiles);\n};\nconst onlyCountsAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.counts, state.options.suppressErrors);\n\treturn null;\n};\nconst defaultAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.paths, state.options.suppressErrors);\n\treturn null;\n};\nconst limitFilesAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.paths.slice(0, state.options.maxFiles), state.options.suppressErrors);\n\treturn null;\n};\nconst groupsAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.groups, state.options.suppressErrors);\n\treturn null;\n};\nfunction report(error, callback$1, output, suppressErrors) {\n\tif (error && !suppressErrors) callback$1(error, output);\n\telse callback$1(null, output);\n}\nfunction build$1(options, isSynchronous) {\n\tconst { onlyCounts, group, maxFiles } = options;\n\tif (onlyCounts) return isSynchronous ? onlyCountsSync : onlyCountsAsync;\n\telse if (group) return isSynchronous ? groupsSync : groupsAsync;\n\telse if (maxFiles) return isSynchronous ? limitFilesSync : limitFilesAsync;\n\telse return isSynchronous ? defaultSync : defaultAsync;\n}\n\n//#endregion\n//#region src/api/functions/walk-directory.ts\nconst readdirOpts = { withFileTypes: true };\nconst walkAsync = (state, crawlPath, directoryPath, currentDepth, callback$1) => {\n\tstate.queue.enqueue();\n\tif (currentDepth < 0) return state.queue.dequeue(null, state);\n\tconst { fs } = state;\n\tstate.visited.push(crawlPath);\n\tstate.counts.directories++;\n\tfs.readdir(crawlPath || \".\", readdirOpts, (error, entries = []) => {\n\t\tcallback$1(entries, directoryPath, currentDepth);\n\t\tstate.queue.dequeue(state.options.suppressErrors ? null : error, state);\n\t});\n};\nconst walkSync = (state, crawlPath, directoryPath, currentDepth, callback$1) => {\n\tconst { fs } = state;\n\tif (currentDepth < 0) return;\n\tstate.visited.push(crawlPath);\n\tstate.counts.directories++;\n\tlet entries = [];\n\ttry {\n\t\tentries = fs.readdirSync(crawlPath || \".\", readdirOpts);\n\t} catch (e) {\n\t\tif (!state.options.suppressErrors) throw e;\n\t}\n\tcallback$1(entries, directoryPath, currentDepth);\n};\nfunction build(isSynchronous) {\n\treturn isSynchronous ? walkSync : walkAsync;\n}\n\n//#endregion\n//#region src/api/queue.ts\n/**\n* This is a custom stateless queue to track concurrent async fs calls.\n* It increments a counter whenever a call is queued and decrements it\n* as soon as it completes. When the counter hits 0, it calls onQueueEmpty.\n*/\nvar Queue = class {\n\tcount = 0;\n\tconstructor(onQueueEmpty) {\n\t\tthis.onQueueEmpty = onQueueEmpty;\n\t}\n\tenqueue() {\n\t\tthis.count++;\n\t\treturn this.count;\n\t}\n\tdequeue(error, output) {\n\t\tif (this.onQueueEmpty && (--this.count <= 0 || error)) {\n\t\t\tthis.onQueueEmpty(error, output);\n\t\t\tif (error) {\n\t\t\t\toutput.controller.abort();\n\t\t\t\tthis.onQueueEmpty = void 0;\n\t\t\t}\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/api/counter.ts\nvar Counter = class {\n\t_files = 0;\n\t_directories = 0;\n\tset files(num) {\n\t\tthis._files = num;\n\t}\n\tget files() {\n\t\treturn this._files;\n\t}\n\tset directories(num) {\n\t\tthis._directories = num;\n\t}\n\tget directories() {\n\t\treturn this._directories;\n\t}\n\t/**\n\t* @deprecated use `directories` instead\n\t*/\n\t/* c8 ignore next 3 */\n\tget dirs() {\n\t\treturn this._directories;\n\t}\n};\n\n//#endregion\n//#region src/api/aborter.ts\n/**\n* AbortController is not supported on Node 14 so we use this until we can drop\n* support for Node 14.\n*/\nvar Aborter = class {\n\taborted = false;\n\tabort() {\n\t\tthis.aborted = true;\n\t}\n};\n\n//#endregion\n//#region src/api/walker.ts\nvar Walker = class {\n\troot;\n\tisSynchronous;\n\tstate;\n\tjoinPath;\n\tpushDirectory;\n\tpushFile;\n\tgetArray;\n\tgroupFiles;\n\tresolveSymlink;\n\twalkDirectory;\n\tcallbackInvoker;\n\tconstructor(root, options, callback$1) {\n\t\tthis.isSynchronous = !callback$1;\n\t\tthis.callbackInvoker = build$1(options, this.isSynchronous);\n\t\tthis.root = normalizePath(root, options);\n\t\tthis.state = {\n\t\t\troot: isRootDirectory(this.root) ? this.root : this.root.slice(0, -1),\n\t\t\tpaths: [\"\"].slice(0, 0),\n\t\t\tgroups: [],\n\t\t\tcounts: new Counter(),\n\t\t\toptions,\n\t\t\tqueue: new Queue((error, state) => this.callbackInvoker(state, error, callback$1)),\n\t\t\tsymlinks: /* @__PURE__ */ new Map(),\n\t\t\tvisited: [\"\"].slice(0, 0),\n\t\t\tcontroller: new Aborter(),\n\t\t\tfs: options.fs || nativeFs\n\t\t};\n\t\tthis.joinPath = build$7(this.root, options);\n\t\tthis.pushDirectory = build$6(this.root, options);\n\t\tthis.pushFile = build$5(options);\n\t\tthis.getArray = build$4(options);\n\t\tthis.groupFiles = build$3(options);\n\t\tthis.resolveSymlink = build$2(options, this.isSynchronous);\n\t\tthis.walkDirectory = build(this.isSynchronous);\n\t}\n\tstart() {\n\t\tthis.pushDirectory(this.root, this.state.paths, this.state.options.filters);\n\t\tthis.walkDirectory(this.state, this.root, this.root, this.state.options.maxDepth, this.walk);\n\t\treturn this.isSynchronous ? this.callbackInvoker(this.state, null) : null;\n\t}\n\twalk = (entries, directoryPath, depth) => {\n\t\tconst { paths, options: { filters, resolveSymlinks: resolveSymlinks$1, excludeSymlinks, exclude, maxFiles, signal, useRealPaths, pathSeparator }, controller } = this.state;\n\t\tif (controller.aborted || signal && signal.aborted || maxFiles && paths.length > maxFiles) return;\n\t\tconst files = this.getArray(this.state.paths);\n\t\tfor (let i = 0; i < entries.length; ++i) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.isFile() || entry.isSymbolicLink() && !resolveSymlinks$1 && !excludeSymlinks) {\n\t\t\t\tconst filename = this.joinPath(entry.name, directoryPath);\n\t\t\t\tthis.pushFile(filename, files, this.state.counts, filters);\n\t\t\t} else if (entry.isDirectory()) {\n\t\t\t\tlet path = joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator);\n\t\t\t\tif (exclude && exclude(entry.name, path)) continue;\n\t\t\t\tthis.pushDirectory(path, paths, filters);\n\t\t\t\tthis.walkDirectory(this.state, path, path, depth - 1, this.walk);\n\t\t\t} else if (this.resolveSymlink && entry.isSymbolicLink()) {\n\t\t\t\tlet path = joinPathWithBasePath(entry.name, directoryPath);\n\t\t\t\tthis.resolveSymlink(path, this.state, (stat, resolvedPath) => {\n\t\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t\tresolvedPath = normalizePath(resolvedPath, this.state.options);\n\t\t\t\t\t\tif (exclude && exclude(entry.name, useRealPaths ? resolvedPath : path + pathSeparator)) return;\n\t\t\t\t\t\tthis.walkDirectory(this.state, resolvedPath, useRealPaths ? resolvedPath : path + pathSeparator, depth - 1, this.walk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolvedPath = useRealPaths ? resolvedPath : path;\n\t\t\t\t\t\tconst filename = basename(resolvedPath);\n\t\t\t\t\t\tconst directoryPath$1 = normalizePath(dirname(resolvedPath), this.state.options);\n\t\t\t\t\t\tresolvedPath = this.joinPath(filename, directoryPath$1);\n\t\t\t\t\t\tthis.pushFile(resolvedPath, files, this.state.counts, filters);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.groupFiles(this.state.groups, directoryPath, files);\n\t};\n};\n\n//#endregion\n//#region src/api/async.ts\nfunction promise(root, options) {\n\treturn new Promise((resolve$1, reject) => {\n\t\tcallback(root, options, (err, output) => {\n\t\t\tif (err) return reject(err);\n\t\t\tresolve$1(output);\n\t\t});\n\t});\n}\nfunction callback(root, options, callback$1) {\n\tlet walker = new Walker(root, options, callback$1);\n\twalker.start();\n}\n\n//#endregion\n//#region src/api/sync.ts\nfunction sync(root, options) {\n\tconst walker = new Walker(root, options);\n\treturn walker.start();\n}\n\n//#endregion\n//#region src/builder/api-builder.ts\nvar APIBuilder = class {\n\tconstructor(root, options) {\n\t\tthis.root = root;\n\t\tthis.options = options;\n\t}\n\twithPromise() {\n\t\treturn promise(this.root, this.options);\n\t}\n\twithCallback(cb) {\n\t\tcallback(this.root, this.options, cb);\n\t}\n\tsync() {\n\t\treturn sync(this.root, this.options);\n\t}\n};\n\n//#endregion\n//#region src/builder/index.ts\nlet pm = null;\n/* c8 ignore next 6 */\ntry {\n\t__require.resolve(\"picomatch\");\n\tpm = __require(\"picomatch\");\n} catch {}\nvar Builder = class {\n\tglobCache = {};\n\toptions = {\n\t\tmaxDepth: Infinity,\n\t\tsuppressErrors: true,\n\t\tpathSeparator: sep,\n\t\tfilters: []\n\t};\n\tglobFunction;\n\tconstructor(options) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options\n\t\t};\n\t\tthis.globFunction = this.options.globFunction;\n\t}\n\tgroup() {\n\t\tthis.options.group = true;\n\t\treturn this;\n\t}\n\twithPathSeparator(separator) {\n\t\tthis.options.pathSeparator = separator;\n\t\treturn this;\n\t}\n\twithBasePath() {\n\t\tthis.options.includeBasePath = true;\n\t\treturn this;\n\t}\n\twithRelativePaths() {\n\t\tthis.options.relativePaths = true;\n\t\treturn this;\n\t}\n\twithDirs() {\n\t\tthis.options.includeDirs = true;\n\t\treturn this;\n\t}\n\twithMaxDepth(depth) {\n\t\tthis.options.maxDepth = depth;\n\t\treturn this;\n\t}\n\twithMaxFiles(limit) {\n\t\tthis.options.maxFiles = limit;\n\t\treturn this;\n\t}\n\twithFullPaths() {\n\t\tthis.options.resolvePaths = true;\n\t\tthis.options.includeBasePath = true;\n\t\treturn this;\n\t}\n\twithErrors() {\n\t\tthis.options.suppressErrors = false;\n\t\treturn this;\n\t}\n\twithSymlinks({ resolvePaths = true } = {}) {\n\t\tthis.options.resolveSymlinks = true;\n\t\tthis.options.useRealPaths = resolvePaths;\n\t\treturn this.withFullPaths();\n\t}\n\twithAbortSignal(signal) {\n\t\tthis.options.signal = signal;\n\t\treturn this;\n\t}\n\tnormalize() {\n\t\tthis.options.normalizePath = true;\n\t\treturn this;\n\t}\n\tfilter(predicate) {\n\t\tthis.options.filters.push(predicate);\n\t\treturn this;\n\t}\n\tonlyDirs() {\n\t\tthis.options.excludeFiles = true;\n\t\tthis.options.includeDirs = true;\n\t\treturn this;\n\t}\n\texclude(predicate) {\n\t\tthis.options.exclude = predicate;\n\t\treturn this;\n\t}\n\tonlyCounts() {\n\t\tthis.options.onlyCounts = true;\n\t\treturn this;\n\t}\n\tcrawl(root) {\n\t\treturn new APIBuilder(root || \".\", this.options);\n\t}\n\twithGlobFunction(fn) {\n\t\tthis.globFunction = fn;\n\t\treturn this;\n\t}\n\t/**\n\t* @deprecated Pass options using the constructor instead:\n\t* ```ts\n\t* new fdir(options).crawl(\"/path/to/root\");\n\t* ```\n\t* This method will be removed in v7.0\n\t*/\n\t/* c8 ignore next 4 */\n\tcrawlWithOptions(root, options) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options\n\t\t};\n\t\treturn new APIBuilder(root || \".\", this.options);\n\t}\n\tglob(...patterns) {\n\t\tif (this.globFunction) return this.globWithOptions(patterns);\n\t\treturn this.globWithOptions(patterns, ...[{ dot: true }]);\n\t}\n\tglobWithOptions(patterns, ...options) {\n\t\tconst globFn = this.globFunction || pm;\n\t\t/* c8 ignore next 5 */\n\t\tif (!globFn) throw new Error(\"Please specify a glob function to use glob matching.\");\n\t\tvar isMatch = this.globCache[patterns.join(\"\\0\")];\n\t\tif (!isMatch) {\n\t\t\tisMatch = globFn(patterns, ...options);\n\t\t\tthis.globCache[patterns.join(\"\\0\")] = isMatch;\n\t\t}\n\t\tthis.options.filters.push((path) => isMatch(path));\n\t\treturn this;\n\t}\n};\n\n//#endregion\nexport { Builder as fdir };","'use strict';\n\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}*?`;\nconst SEP = '/';\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  SEP\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  SEP: '\\\\'\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    __proto__: null,\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  /**\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","/*global navigator*/\n'use strict';\n\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.isWindows = () => {\n  if (typeof navigator !== 'undefined' && navigator.platform) {\n    const platform = navigator.platform.toLowerCase();\n    return platform === 'win32' || platform === 'windows';\n  }\n\n  if (typeof process !== 'undefined' && process.platform) {\n    return process.platform === 'win32';\n  }\n\n  return false;\n};\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\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\nexports.basename = (path, { windows } = {}) => {\n  const segs = path.split(windows ? /[\\\\/]/ : '/');\n  const last = segs[segs.length - 1];\n\n  if (last === '') {\n    return segs[segs.length - 2];\n  }\n\n  return last;\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\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(opts.windows);\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.output = (prev.output || prev.value) + tok.value;\n      prev.value += 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 ((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\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(opts.windows);\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 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 = opts.windows;\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) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(utils.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\nconst pico = require('./lib/picomatch');\nconst utils = require('./lib/utils');\n\nfunction picomatch(glob, options, returnState = false) {\n  // default to os.platform()\n  if (options && (options.windows === null || options.windows === undefined)) {\n    // don't mutate the original options object\n    options = { ...options, windows: utils.isWindows() };\n  }\n\n  return pico(glob, options, returnState);\n}\n\nObject.assign(picomatch, pico);\nmodule.exports = picomatch;\n","import nativeFs from \"fs\";\nimport path, { posix } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { fdir } from \"fdir\";\nimport picomatch from \"picomatch\";\n\n//#region src/utils.ts\nconst isReadonlyArray = Array.isArray;\nconst isWin = process.platform === \"win32\";\nconst ONLY_PARENT_DIRECTORIES = /^(\\/?\\.\\.)+$/;\nfunction getPartialMatcher(patterns, options = {}) {\n\tconst patternsCount = patterns.length;\n\tconst patternsParts = Array(patternsCount);\n\tconst matchers = Array(patternsCount);\n\tconst globstarEnabled = !options.noglobstar;\n\tfor (let i = 0; i < patternsCount; i++) {\n\t\tconst parts = splitPattern(patterns[i]);\n\t\tpatternsParts[i] = parts;\n\t\tconst partsCount = parts.length;\n\t\tconst partMatchers = Array(partsCount);\n\t\tfor (let j = 0; j < partsCount; j++) partMatchers[j] = picomatch(parts[j], options);\n\t\tmatchers[i] = partMatchers;\n\t}\n\treturn (input) => {\n\t\tconst inputParts = input.split(\"/\");\n\t\tif (inputParts[0] === \"..\" && ONLY_PARENT_DIRECTORIES.test(input)) return true;\n\t\tfor (let i = 0; i < patterns.length; i++) {\n\t\t\tconst patternParts = patternsParts[i];\n\t\t\tconst matcher = matchers[i];\n\t\t\tconst inputPatternCount = inputParts.length;\n\t\t\tconst minParts = Math.min(inputPatternCount, patternParts.length);\n\t\t\tlet j = 0;\n\t\t\twhile (j < minParts) {\n\t\t\t\tconst part = patternParts[j];\n\t\t\t\tif (part.includes(\"/\")) return true;\n\t\t\t\tconst match = matcher[j](inputParts[j]);\n\t\t\t\tif (!match) break;\n\t\t\t\tif (globstarEnabled && part === \"**\") return true;\n\t\t\t\tj++;\n\t\t\t}\n\t\t\tif (j === inputPatternCount) return true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/* node:coverage ignore next 2 */\nconst WIN32_ROOT_DIR = /^[A-Z]:\\/$/i;\nconst isRoot = isWin ? (p) => WIN32_ROOT_DIR.test(p) : (p) => p === \"/\";\nfunction buildFormat(cwd, root, absolute) {\n\tif (cwd === root || root.startsWith(`${cwd}/`)) {\n\t\tif (absolute) {\n\t\t\tconst start = isRoot(cwd) ? cwd.length : cwd.length + 1;\n\t\t\treturn (p, isDir) => p.slice(start, isDir ? -1 : void 0) || \".\";\n\t\t}\n\t\tconst prefix = root.slice(cwd.length + 1);\n\t\tif (prefix) return (p, isDir) => {\n\t\t\tif (p === \".\") return prefix;\n\t\t\tconst result = `${prefix}/${p}`;\n\t\t\treturn isDir ? result.slice(0, -1) : result;\n\t\t};\n\t\treturn (p, isDir) => isDir && p !== \".\" ? p.slice(0, -1) : p;\n\t}\n\tif (absolute) return (p) => posix.relative(cwd, p) || \".\";\n\treturn (p) => posix.relative(cwd, `${root}/${p}`) || \".\";\n}\nfunction buildRelative(cwd, root) {\n\tif (root.startsWith(`${cwd}/`)) {\n\t\tconst prefix = root.slice(cwd.length + 1);\n\t\treturn (p) => `${prefix}/${p}`;\n\t}\n\treturn (p) => {\n\t\tconst result = posix.relative(cwd, `${root}/${p}`);\n\t\tif (p.endsWith(\"/\") && result !== \"\") return `${result}/`;\n\t\treturn result || \".\";\n\t};\n}\nconst splitPatternOptions = { parts: true };\nfunction splitPattern(path$1) {\n\tvar _result$parts;\n\tconst result = picomatch.scan(path$1, splitPatternOptions);\n\treturn ((_result$parts = result.parts) === null || _result$parts === void 0 ? void 0 : _result$parts.length) ? result.parts : [path$1];\n}\nconst ESCAPED_WIN32_BACKSLASHES = /\\\\(?![()[\\]{}!+@])/g;\nfunction convertPosixPathToPattern(path$1) {\n\treturn escapePosixPath(path$1);\n}\nfunction convertWin32PathToPattern(path$1) {\n\treturn escapeWin32Path(path$1).replace(ESCAPED_WIN32_BACKSLASHES, \"/\");\n}\n/**\n* Converts a path to a pattern depending on the platform.\n* Identical to {@link escapePath} on POSIX systems.\n* @see {@link https://superchupu.dev/tinyglobby/documentation#convertPathToPattern}\n*/\n/* node:coverage ignore next 3 */\nconst convertPathToPattern = isWin ? convertWin32PathToPattern : convertPosixPathToPattern;\nconst POSIX_UNESCAPED_GLOB_SYMBOLS = /(?<!\\\\)([()[\\]{}*?|]|^!|[!+@](?=\\()|\\\\(?![()[\\]{}!*+?@|]))/g;\nconst WIN32_UNESCAPED_GLOB_SYMBOLS = /(?<!\\\\)([()[\\]{}]|^!|[!+@](?=\\())/g;\nconst escapePosixPath = (path$1) => path$1.replace(POSIX_UNESCAPED_GLOB_SYMBOLS, \"\\\\$&\");\nconst escapeWin32Path = (path$1) => path$1.replace(WIN32_UNESCAPED_GLOB_SYMBOLS, \"\\\\$&\");\n/**\n* Escapes a path's special characters depending on the platform.\n* @see {@link https://superchupu.dev/tinyglobby/documentation#escapePath}\n*/\n/* node:coverage ignore next */\nconst escapePath = isWin ? escapeWin32Path : escapePosixPath;\n/**\n* Checks if a pattern has dynamic parts.\n*\n* Has a few minor differences with [`fast-glob`](https://github.com/mrmlnc/fast-glob) for better accuracy:\n*\n* - Doesn't necessarily return `false` on patterns that include `\\`.\n* - Returns `true` if the pattern includes parentheses, regardless of them representing one single pattern or not.\n* - Returns `true` for unfinished glob extensions i.e. `(h`, `+(h`.\n* - Returns `true` for unfinished brace expansions as long as they include `,` or `..`.\n*\n* @see {@link https://superchupu.dev/tinyglobby/documentation#isDynamicPattern}\n*/\nfunction isDynamicPattern(pattern, options) {\n\tif ((options === null || options === void 0 ? void 0 : options.caseSensitiveMatch) === false) return true;\n\tconst scan = picomatch.scan(pattern);\n\treturn scan.isGlob || scan.negated;\n}\nfunction log(...tasks) {\n\tconsole.log(`[tinyglobby ${(/* @__PURE__ */ new Date()).toLocaleTimeString(\"es\")}]`, ...tasks);\n}\n\n//#endregion\n//#region src/index.ts\nconst PARENT_DIRECTORY = /^(\\/?\\.\\.)+/;\nconst ESCAPING_BACKSLASHES = /\\\\(?=[()[\\]{}!*+?@|])/g;\nconst BACKSLASHES = /\\\\/g;\nfunction normalizePattern(pattern, expandDirectories, cwd, props, isIgnore) {\n\tlet result = pattern;\n\tif (pattern.endsWith(\"/\")) result = pattern.slice(0, -1);\n\tif (!result.endsWith(\"*\") && expandDirectories) result += \"/**\";\n\tconst escapedCwd = escapePath(cwd);\n\tif (path.isAbsolute(result.replace(ESCAPING_BACKSLASHES, \"\"))) result = posix.relative(escapedCwd, result);\n\telse result = posix.normalize(result);\n\tconst parentDirectoryMatch = PARENT_DIRECTORY.exec(result);\n\tconst parts = splitPattern(result);\n\tif (parentDirectoryMatch === null || parentDirectoryMatch === void 0 ? void 0 : parentDirectoryMatch[0]) {\n\t\tconst n = (parentDirectoryMatch[0].length + 1) / 3;\n\t\tlet i = 0;\n\t\tconst cwdParts = escapedCwd.split(\"/\");\n\t\twhile (i < n && parts[i + n] === cwdParts[cwdParts.length + i - n]) {\n\t\t\tresult = result.slice(0, (n - i - 1) * 3) + result.slice((n - i) * 3 + parts[i + n].length + 1) || \".\";\n\t\t\ti++;\n\t\t}\n\t\tconst potentialRoot = posix.join(cwd, parentDirectoryMatch[0].slice(i * 3));\n\t\tif (!potentialRoot.startsWith(\".\") && props.root.length > potentialRoot.length) {\n\t\t\tprops.root = potentialRoot;\n\t\t\tprops.depthOffset = -n + i;\n\t\t}\n\t}\n\tif (!isIgnore && props.depthOffset >= 0) {\n\t\tvar _props$commonPath;\n\t\t(_props$commonPath = props.commonPath) !== null && _props$commonPath !== void 0 || (props.commonPath = parts);\n\t\tconst newCommonPath = [];\n\t\tconst length = Math.min(props.commonPath.length, parts.length);\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst part = parts[i];\n\t\t\tif (part === \"**\" && !parts[i + 1]) {\n\t\t\t\tnewCommonPath.pop();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (part !== props.commonPath[i] || isDynamicPattern(part) || i === parts.length - 1) break;\n\t\t\tnewCommonPath.push(part);\n\t\t}\n\t\tprops.depthOffset = newCommonPath.length;\n\t\tprops.commonPath = newCommonPath;\n\t\tprops.root = newCommonPath.length > 0 ? posix.join(cwd, ...newCommonPath) : cwd;\n\t}\n\treturn result;\n}\nfunction processPatterns({ patterns = [\"**/*\"], ignore = [], expandDirectories = true }, cwd, props) {\n\tif (typeof patterns === \"string\") patterns = [patterns];\n\tif (typeof ignore === \"string\") ignore = [ignore];\n\tconst matchPatterns = [];\n\tconst ignorePatterns = [];\n\tfor (const pattern of ignore) {\n\t\tif (!pattern) continue;\n\t\tif (pattern[0] !== \"!\" || pattern[1] === \"(\") ignorePatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, true));\n\t}\n\tfor (const pattern of patterns) {\n\t\tif (!pattern) continue;\n\t\tif (pattern[0] !== \"!\" || pattern[1] === \"(\") matchPatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, false));\n\t\telse if (pattern[1] !== \"!\" || pattern[2] === \"(\") ignorePatterns.push(normalizePattern(pattern.slice(1), expandDirectories, cwd, props, true));\n\t}\n\treturn {\n\t\tmatch: matchPatterns,\n\t\tignore: ignorePatterns\n\t};\n}\nfunction formatPaths(paths, relative) {\n\tfor (let i = paths.length - 1; i >= 0; i--) {\n\t\tconst path$1 = paths[i];\n\t\tpaths[i] = relative(path$1);\n\t}\n\treturn paths;\n}\nfunction normalizeCwd(cwd) {\n\tif (!cwd) return process.cwd().replace(BACKSLASHES, \"/\");\n\tif (cwd instanceof URL) return fileURLToPath(cwd).replace(BACKSLASHES, \"/\");\n\treturn path.resolve(cwd).replace(BACKSLASHES, \"/\");\n}\nfunction getCrawler(patterns, inputOptions = {}) {\n\tconst options = process.env.TINYGLOBBY_DEBUG ? {\n\t\t...inputOptions,\n\t\tdebug: true\n\t} : inputOptions;\n\tconst cwd = normalizeCwd(options.cwd);\n\tif (options.debug) log(\"globbing with:\", {\n\t\tpatterns,\n\t\toptions,\n\t\tcwd\n\t});\n\tif (Array.isArray(patterns) && patterns.length === 0) return [{\n\t\tsync: () => [],\n\t\twithPromise: async () => []\n\t}, false];\n\tconst props = {\n\t\troot: cwd,\n\t\tcommonPath: null,\n\t\tdepthOffset: 0\n\t};\n\tconst processed = processPatterns({\n\t\t...options,\n\t\tpatterns\n\t}, cwd, props);\n\tif (options.debug) log(\"internal processing patterns:\", processed);\n\tconst matchOptions = {\n\t\tdot: options.dot,\n\t\tnobrace: options.braceExpansion === false,\n\t\tnocase: options.caseSensitiveMatch === false,\n\t\tnoextglob: options.extglob === false,\n\t\tnoglobstar: options.globstar === false,\n\t\tposix: true\n\t};\n\tconst matcher = picomatch(processed.match, {\n\t\t...matchOptions,\n\t\tignore: processed.ignore\n\t});\n\tconst ignore = picomatch(processed.ignore, matchOptions);\n\tconst partialMatcher = getPartialMatcher(processed.match, matchOptions);\n\tconst format = buildFormat(cwd, props.root, options.absolute);\n\tconst formatExclude = options.absolute ? format : buildFormat(cwd, props.root, true);\n\tconst fdirOptions = {\n\t\tfilters: [options.debug ? (p, isDirectory) => {\n\t\t\tconst path$1 = format(p, isDirectory);\n\t\t\tconst matches = matcher(path$1);\n\t\t\tif (matches) log(`matched ${path$1}`);\n\t\t\treturn matches;\n\t\t} : (p, isDirectory) => matcher(format(p, isDirectory))],\n\t\texclude: options.debug ? (_, p) => {\n\t\t\tconst relativePath = formatExclude(p, true);\n\t\t\tconst skipped = relativePath !== \".\" && !partialMatcher(relativePath) || ignore(relativePath);\n\t\t\tif (skipped) log(`skipped ${p}`);\n\t\t\telse log(`crawling ${p}`);\n\t\t\treturn skipped;\n\t\t} : (_, p) => {\n\t\t\tconst relativePath = formatExclude(p, true);\n\t\t\treturn relativePath !== \".\" && !partialMatcher(relativePath) || ignore(relativePath);\n\t\t},\n\t\tfs: options.fs ? {\n\t\t\treaddir: options.fs.readdir || nativeFs.readdir,\n\t\t\treaddirSync: options.fs.readdirSync || nativeFs.readdirSync,\n\t\t\trealpath: options.fs.realpath || nativeFs.realpath,\n\t\t\trealpathSync: options.fs.realpathSync || nativeFs.realpathSync,\n\t\t\tstat: options.fs.stat || nativeFs.stat,\n\t\t\tstatSync: options.fs.statSync || nativeFs.statSync\n\t\t} : void 0,\n\t\tpathSeparator: \"/\",\n\t\trelativePaths: true,\n\t\tresolveSymlinks: true,\n\t\tsignal: options.signal\n\t};\n\tif (options.deep !== void 0) fdirOptions.maxDepth = Math.round(options.deep - props.depthOffset);\n\tif (options.absolute) {\n\t\tfdirOptions.relativePaths = false;\n\t\tfdirOptions.resolvePaths = true;\n\t\tfdirOptions.includeBasePath = true;\n\t}\n\tif (options.followSymbolicLinks === false) {\n\t\tfdirOptions.resolveSymlinks = false;\n\t\tfdirOptions.excludeSymlinks = true;\n\t}\n\tif (options.onlyDirectories) {\n\t\tfdirOptions.excludeFiles = true;\n\t\tfdirOptions.includeDirs = true;\n\t} else if (options.onlyFiles === false) fdirOptions.includeDirs = true;\n\tprops.root = props.root.replace(BACKSLASHES, \"\");\n\tconst root = props.root;\n\tif (options.debug) log(\"internal properties:\", props);\n\tconst relative = cwd !== root && !options.absolute && buildRelative(cwd, props.root);\n\treturn [new fdir(fdirOptions).crawl(root), relative];\n}\nasync function glob(patternsOrOptions, options) {\n\tif (patternsOrOptions && (options === null || options === void 0 ? void 0 : options.patterns)) throw new Error(\"Cannot pass patterns as both an argument and an option\");\n\tconst isModern = isReadonlyArray(patternsOrOptions) || typeof patternsOrOptions === \"string\";\n\tconst opts = isModern ? options : patternsOrOptions;\n\tconst patterns = isModern ? patternsOrOptions : patternsOrOptions.patterns;\n\tconst [crawler, relative] = getCrawler(patterns, opts);\n\tif (!relative) return crawler.withPromise();\n\treturn formatPaths(await crawler.withPromise(), relative);\n}\nfunction globSync(patternsOrOptions, options) {\n\tif (patternsOrOptions && (options === null || options === void 0 ? void 0 : options.patterns)) throw new Error(\"Cannot pass patterns as both an argument and an option\");\n\tconst isModern = isReadonlyArray(patternsOrOptions) || typeof patternsOrOptions === \"string\";\n\tconst opts = isModern ? options : patternsOrOptions;\n\tconst patterns = isModern ? patternsOrOptions : patternsOrOptions.patterns;\n\tconst [crawler, relative] = getCrawler(patterns, opts);\n\tif (!relative) return crawler.sync();\n\treturn formatPaths(crawler.sync(), relative);\n}\n\n//#endregion\nexport { convertPathToPattern, escapePath, glob, globSync, isDynamicPattern };","import assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tgenerateContainerBuildId,\n\tresolveDockerHost,\n} from \"@cloudflare/containers-shared\";\nimport {\n\tgetBrowserRenderingHeadfulFromEnv,\n\tgetLocalExplorerEnabledFromEnv,\n} from \"@cloudflare/workers-utils\";\nimport {\n\tbuildPublicUrl,\n\tgetDefaultDevRegistryPath,\n\tkUnsafeEphemeralUniqueKey,\n\tLog,\n\tLogLevel,\n\tparseModuleFallbackRequest,\n\tResponse as MiniflareResponse,\n} from \"miniflare\";\nimport { globSync } from \"tinyglobby\";\nimport * as wrangler from \"wrangler\";\nimport { getAssetsConfig } from \"./asset-config\";\nimport {\n\tASSET_WORKER_NAME,\n\tkRequestType,\n\tPROXY_SHARED_SECRET,\n\tROUTER_WORKER_NAME,\n\tVITE_PROXY_WORKER_NAME,\n} from \"./constants\";\nimport { getContainerOptions, getDockerPath } from \"./containers\";\nimport { getInputInspectorPort } from \"./debug\";\nimport { additionalModuleRE } from \"./plugins/additional-modules\";\nimport { ENVIRONMENT_NAME_HEADER } from \"./shared\";\nimport { satisfiesMinimumViteVersion, withTrailingSlash } from \"./utils\";\nimport type { CloudflareDevEnvironment } from \"./cloudflare-environment\";\nimport type { ContainerTagToOptionsMap } from \"./containers\";\nimport type {\n\tAssetsOnlyPluginContext,\n\tPreviewPluginContext,\n\tWorkersPluginContext,\n} from \"./context\";\nimport type { PersistState } from \"./plugin-config\";\nimport type {\n\tMiniflareOptions,\n\tWorkerdStructuredLog,\n\tWorkerOptions,\n} from \"miniflare\";\nimport type * as vite from \"vite\";\nimport type {\n\tBinding,\n\tRemoteProxySession,\n\tSourcelessWorkerOptions,\n} from \"wrangler\";\n\nconst INTERNAL_WORKERS_COMPATIBILITY_DATE = \"2024-10-04\";\n// Used to mark HTML assets as being in the public directory so that they can be resolved from their root relative paths\nconst PUBLIC_DIR_PREFIX = \"/__vite_public_dir__\";\n\nfunction getPersistenceRoot(\n\troot: string,\n\tpersistState: PersistState\n): string | undefined {\n\tif (persistState === false) {\n\t\treturn;\n\t}\n\n\tconst defaultPersistPath = \".wrangler/state\";\n\tconst persistPath = path.resolve(\n\t\troot,\n\t\ttypeof persistState === \"object\" ? persistState.path : defaultPersistPath,\n\t\t\"v3\"\n\t);\n\n\treturn persistPath;\n}\n\n// We want module names to be their absolute path without the leading slash\n// (i.e. the modules root should be the root directory). On Windows, we need\n// paths to include the drive letter (i.e. `C:/a/b/c/index.mjs`).\n// Internally, Miniflare uses `path.relative(modulesRoot, path)` to compute\n// module names. Setting `modulesRoot` to a drive letter and prepending this\n// to paths ensures correct names. This requires us to specify `contents` in\n// the miniflare module definitions though, as the new paths don't exist.\nconst miniflareModulesRoot = process.platform === \"win32\" ? \"Z:\\\\\" : \"/\";\nconst ROUTER_WORKER_PATH = \"./workers/router-worker/index.js\";\nconst ASSET_WORKER_PATH = \"./workers/asset-worker/index.js\";\nconst VITE_PROXY_WORKER_PATH = \"./workers/vite-proxy-worker/index.js\";\nconst RUNNER_PATH = \"./workers/runner-worker/index.js\";\nconst MODULE_RUNNER_PATH = \"./workers/runner-worker/module-runner.js\";\nconst MODULE_RUNNER_LEGACY_PATH =\n\t\"./workers/runner-worker/module-runner-legacy.js\";\nconst WRAPPER_PATH = \"__VITE_WORKER_ENTRY__\";\n\n/** Map that maps worker configPaths to their existing remote proxy session data (if any) */\nconst remoteProxySessionsDataMap = new Map<\n\tstring,\n\t{\n\t\tsession: RemoteProxySession;\n\t\tremoteBindings: Record<string, Binding>;\n\t} | null\n>();\n\nexport async function getDevMiniflareOptions(\n\tctx: AssetsOnlyPluginContext | WorkersPluginContext,\n\tviteDevServer: vite.ViteDevServer\n): Promise<{\n\tminiflareOptions: Extract<MiniflareOptions, { workers: WorkerOptions[] }>;\n\tcontainerTagToOptionsMap: ContainerTagToOptionsMap;\n}> {\n\tconst inputInspectorPort = await getInputInspectorPort(ctx, viteDevServer);\n\tconst { resolvedPluginConfig, resolvedViteConfig, entryWorkerConfig } = ctx;\n\n\tconst assetsConfig = getAssetsConfig(\n\t\tresolvedPluginConfig,\n\t\tentryWorkerConfig,\n\t\tresolvedViteConfig\n\t);\n\n\tconst assetWorkers: Array<WorkerOptions> = [\n\t\t{\n\t\t\tname: ROUTER_WORKER_NAME,\n\t\t\tcompatibilityDate: INTERNAL_WORKERS_COMPATIBILITY_DATE,\n\t\t\tcompatibilityFlags: [\"enable_ctx_exports\"],\n\t\t\tmodulesRoot: miniflareModulesRoot,\n\t\t\tmodules: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\tpath: path.join(miniflareModulesRoot, ROUTER_WORKER_PATH),\n\t\t\t\t\tcontents: fs.readFileSync(\n\t\t\t\t\t\tfileURLToPath(new URL(ROUTER_WORKER_PATH, import.meta.url))\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t\tbindings: {\n\t\t\t\tCONFIG: {\n\t\t\t\t\thas_user_worker: resolvedPluginConfig.type === \"workers\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tserviceBindings: {\n\t\t\t\tASSET_WORKER: ASSET_WORKER_NAME,\n\t\t\t\t...(entryWorkerConfig ? { USER_WORKER: entryWorkerConfig.name } : {}),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: ASSET_WORKER_NAME,\n\t\t\tcompatibilityDate: INTERNAL_WORKERS_COMPATIBILITY_DATE,\n\t\t\tmodulesRoot: miniflareModulesRoot,\n\t\t\tmodules: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\tpath: path.join(miniflareModulesRoot, ASSET_WORKER_PATH),\n\t\t\t\t\tcontents: fs.readFileSync(\n\t\t\t\t\t\tfileURLToPath(new URL(ASSET_WORKER_PATH, import.meta.url))\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t\tbindings: {\n\t\t\t\tCONFIG: assetsConfig,\n\t\t\t\t__VITE_HEADERS__: JSON.stringify(viteDevServer.config.server.headers),\n\t\t\t},\n\t\t\tserviceBindings: {\n\t\t\t\t__VITE_HTML_EXISTS__: async (request) => {\n\t\t\t\t\tconst { pathname } = new URL(request.url);\n\n\t\t\t\t\tif (pathname.endsWith(\".html\")) {\n\t\t\t\t\t\tconst { root, publicDir } = resolvedViteConfig;\n\t\t\t\t\t\tconst publicDirInRoot = publicDir.startsWith(\n\t\t\t\t\t\t\twithTrailingSlash(root)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst publicPath = withTrailingSlash(publicDir.slice(root.length));\n\n\t\t\t\t\t\t// Assets in the public directory should be served at the root path\n\t\t\t\t\t\tif (publicDirInRoot && pathname.startsWith(publicPath)) {\n\t\t\t\t\t\t\treturn MiniflareResponse.json(null);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst publicDirFilePath = path.join(publicDir, pathname);\n\t\t\t\t\t\tconst rootDirFilePath = path.join(root, pathname);\n\n\t\t\t\t\t\tfor (const resolvedPath of [publicDirFilePath, rootDirFilePath]) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst stats = await fsp.stat(resolvedPath);\n\n\t\t\t\t\t\t\t\tif (stats.isFile()) {\n\t\t\t\t\t\t\t\t\treturn MiniflareResponse.json(\n\t\t\t\t\t\t\t\t\t\tresolvedPath === publicDirFilePath\n\t\t\t\t\t\t\t\t\t\t\t? `${PUBLIC_DIR_PREFIX}${pathname}`\n\t\t\t\t\t\t\t\t\t\t\t: pathname\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn MiniflareResponse.json(null);\n\t\t\t\t},\n\t\t\t\t__VITE_FETCH_HTML__: async (request) => {\n\t\t\t\t\tconst { pathname } = new URL(request.url);\n\t\t\t\t\tconst { root, publicDir } = resolvedViteConfig;\n\t\t\t\t\tconst isInPublicDir = pathname.startsWith(PUBLIC_DIR_PREFIX);\n\t\t\t\t\tconst resolvedPath = isInPublicDir\n\t\t\t\t\t\t? path.join(publicDir, pathname.slice(PUBLIC_DIR_PREFIX.length))\n\t\t\t\t\t\t: path.join(root, pathname);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet html = await fsp.readFile(resolvedPath, \"utf-8\");\n\n\t\t\t\t\t\t// HTML files in the public directory should not be transformed\n\t\t\t\t\t\tif (!isInPublicDir) {\n\t\t\t\t\t\t\thtml = await viteDevServer.transformIndexHtml(resolvedPath, html);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn new MiniflareResponse(html, {\n\t\t\t\t\t\t\theaders: { \"Content-Type\": \"text/html\" },\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tthrow new Error(`Unexpected error. Failed to load \"${pathname}\".`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: VITE_PROXY_WORKER_NAME,\n\t\t\tcompatibilityDate: INTERNAL_WORKERS_COMPATIBILITY_DATE,\n\t\t\tmodulesRoot: miniflareModulesRoot,\n\t\t\tmodules: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\tpath: path.join(miniflareModulesRoot, VITE_PROXY_WORKER_PATH),\n\t\t\t\t\tcontents: fs.readFileSync(\n\t\t\t\t\t\tfileURLToPath(new URL(VITE_PROXY_WORKER_PATH, import.meta.url))\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t\tserviceBindings: {\n\t\t\t\t...(entryWorkerConfig\n\t\t\t\t\t? { ENTRY_USER_WORKER: entryWorkerConfig.name }\n\t\t\t\t\t: {}),\n\t\t\t\t__VITE_MIDDLEWARE__: {\n\t\t\t\t\tnode: (req, res) => viteDevServer.middlewares(req, res),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t];\n\n\tconst containerTagToOptionsMap: ContainerTagToOptionsMap = new Map();\n\n\tconst workersFromConfig =\n\t\tresolvedPluginConfig.type === \"workers\"\n\t\t\t? await Promise.all(\n\t\t\t\t\t[...resolvedPluginConfig.environmentNameToWorkerMap].map(\n\t\t\t\t\t\tasync ([environmentName, worker]) => {\n\t\t\t\t\t\t\tconst bindings =\n\t\t\t\t\t\t\t\twrangler.unstable_convertConfigBindingsToStartWorkerBindings(\n\t\t\t\t\t\t\t\t\tworker.config\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst preExistingRemoteProxySession = worker.config.configPath\n\t\t\t\t\t\t\t\t? remoteProxySessionsDataMap.get(worker.config.configPath)\n\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\tconst remoteProxySessionData =\n\t\t\t\t\t\t\t\t!resolvedPluginConfig.remoteBindings\n\t\t\t\t\t\t\t\t\t? // if remote bindings are not enabled then the proxy session can simply be null\n\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t: await wrangler.maybeStartOrUpdateRemoteProxySession(\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tname: worker.config.name,\n\t\t\t\t\t\t\t\t\t\t\t\tbindings: bindings ?? {},\n\t\t\t\t\t\t\t\t\t\t\t\taccount_id: worker.config.account_id,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tpreExistingRemoteProxySession ?? null\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (worker.config.configPath && remoteProxySessionData) {\n\t\t\t\t\t\t\t\tremoteProxySessionsDataMap.set(\n\t\t\t\t\t\t\t\t\tworker.config.configPath,\n\t\t\t\t\t\t\t\t\tremoteProxySessionData\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet containerBuildId: string | undefined;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tworker.config.containers?.length &&\n\t\t\t\t\t\t\t\tworker.config.dev.enable_containers\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst dockerPath = getDockerPath();\n\t\t\t\t\t\t\t\tworker.config.dev.container_engine =\n\t\t\t\t\t\t\t\t\tresolveDockerHost(dockerPath);\n\t\t\t\t\t\t\t\tcontainerBuildId = generateContainerBuildId();\n\n\t\t\t\t\t\t\t\tconst options = getContainerOptions({\n\t\t\t\t\t\t\t\t\tcontainersConfig: worker.config.containers,\n\t\t\t\t\t\t\t\t\tcontainerBuildId,\n\t\t\t\t\t\t\t\t\tconfigPath: worker.config.configPath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tfor (const option of options ?? []) {\n\t\t\t\t\t\t\t\t\tcontainerTagToOptionsMap.set(option.image_tag, option);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst miniflareWorkerOptions =\n\t\t\t\t\t\t\t\twrangler.unstable_getMiniflareWorkerOptions(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t...worker.config,\n\t\t\t\t\t\t\t\t\t\tassets: undefined,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tresolvedPluginConfig.cloudflareEnv,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tremoteProxyConnectionString:\n\t\t\t\t\t\t\t\t\t\t\tremoteProxySessionData?.session\n\t\t\t\t\t\t\t\t\t\t\t\t?.remoteProxyConnectionString,\n\n\t\t\t\t\t\t\t\t\t\tcontainerBuildId,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst { externalWorkers, workerOptions } = miniflareWorkerOptions;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tworkerOptions.browserRendering &&\n\t\t\t\t\t\t\t\tgetBrowserRenderingHeadfulFromEnv()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tworkerOptions.browserRendering.headful = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst wrappers = [\n\t\t\t\t\t\t\t\t`import { createWorkerEntrypointWrapper, createDurableObjectWrapper, createWorkflowEntrypointWrapper } from \"${RUNNER_PATH}\";`,\n\t\t\t\t\t\t\t\t`export { __VITE_RUNNER_OBJECT__ } from \"${RUNNER_PATH}\";`,\n\t\t\t\t\t\t\t\t`export default createWorkerEntrypointWrapper(\"default\");`,\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst exportTypes = ctx.workerNameToExportTypesMap.get(\n\t\t\t\t\t\t\t\tworker.config.name\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tassert(exportTypes, `Expected exportTypes to be defined`);\n\n\t\t\t\t\t\t\tfor (const [name, type] of Object.entries(exportTypes)) {\n\t\t\t\t\t\t\t\twrappers.push(\n\t\t\t\t\t\t\t\t\t`export const ${name} = create${type}Wrapper(\"${name}\");`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\texternalWorkers,\n\t\t\t\t\t\t\t\tworker: {\n\t\t\t\t\t\t\t\t\t...workerOptions,\n\t\t\t\t\t\t\t\t\tname: worker.config.name,\n\t\t\t\t\t\t\t\t\tmodulesRoot: miniflareModulesRoot,\n\t\t\t\t\t\t\t\t\tmodules: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\t\t\t\t\t\t\tpath: path.join(miniflareModulesRoot, WRAPPER_PATH),\n\t\t\t\t\t\t\t\t\t\t\tcontents: wrappers.join(\"\\n\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\t\t\t\t\t\t\tpath: path.join(miniflareModulesRoot, RUNNER_PATH),\n\t\t\t\t\t\t\t\t\t\t\tcontents: fs.readFileSync(\n\t\t\t\t\t\t\t\t\t\t\t\tfileURLToPath(new URL(RUNNER_PATH, import.meta.url))\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t// A breaking change to the module runner was introduced in\n\t\t\t\t\t\t\t\t\t\t// https://github.com/vitejs/vite/pull/20924 and released in Vite 7.2.0.\n\t\t\t\t\t\t\t\t\t\t// We ship two bundled copies of vite/module-runner and select the\n\t\t\t\t\t\t\t\t\t\t// appropriate one based on the user's installed Vite version.\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"ESModule\",\n\t\t\t\t\t\t\t\t\t\t\tpath: path.join(\n\t\t\t\t\t\t\t\t\t\t\t\tminiflareModulesRoot,\n\t\t\t\t\t\t\t\t\t\t\t\t\"workers/runner-worker/vite/module-runner\"\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcontents: fs.readFileSync(\n\t\t\t\t\t\t\t\t\t\t\t\tfileURLToPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew URL(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsatisfiesMinimumViteVersion(\"7.2.0\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? MODULE_RUNNER_PATH\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: MODULE_RUNNER_LEGACY_PATH,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\timport.meta.url\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tunsafeUseModuleFallbackService: true,\n\t\t\t\t\t\t\t\t\tunsafeInspectorProxy: inputInspectorPort !== false,\n\t\t\t\t\t\t\t\t\t// Route dev registry requests through the vite Assets proxy worker,\n\t\t\t\t\t\t\t\t\t...(environmentName ===\n\t\t\t\t\t\t\t\t\t\tresolvedPluginConfig.entryWorkerEnvironmentName && {\n\t\t\t\t\t\t\t\t\t\tunsafeOverrideFetchWorker: VITE_PROXY_WORKER_NAME,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tunsafeEvalBinding: \"__VITE_UNSAFE_EVAL__\",\n\t\t\t\t\t\t\t\t\tserviceBindings: {\n\t\t\t\t\t\t\t\t\t\t...workerOptions.serviceBindings,\n\t\t\t\t\t\t\t\t\t\t...(environmentName ===\n\t\t\t\t\t\t\t\t\t\t\tresolvedPluginConfig.entryWorkerEnvironmentName &&\n\t\t\t\t\t\t\t\t\t\tworker.config.assets?.binding\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t[worker.config.assets.binding]: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnode: (req, res) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treq[kRequestType] = \"asset\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tviteDevServer.middlewares(req, res);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t__VITE_INVOKE_MODULE__: async (request) => {\n\t\t\t\t\t\t\t\t\t\t\tconst targetEnvironmentName = request.headers.get(\n\t\t\t\t\t\t\t\t\t\t\t\tENVIRONMENT_NAME_HEADER\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\t\t\t\t\t\ttargetEnvironmentName,\n\t\t\t\t\t\t\t\t\t\t\t\t`Expected ${ENVIRONMENT_NAME_HEADER} header`\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tconst payload =\n\t\t\t\t\t\t\t\t\t\t\t\t(await request.json()) as vite.CustomPayload;\n\t\t\t\t\t\t\t\t\t\t\tconst devEnvironment = viteDevServer.environments[\n\t\t\t\t\t\t\t\t\t\t\t\ttargetEnvironmentName\n\t\t\t\t\t\t\t\t\t\t\t] as CloudflareDevEnvironment;\n\t\t\t\t\t\t\t\t\t\t\tconst result =\n\t\t\t\t\t\t\t\t\t\t\t\tawait devEnvironment.hot.handleInvoke(payload);\n\t\t\t\t\t\t\t\t\t\t\treturn MiniflareResponse.json(result);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdurableObjects: {\n\t\t\t\t\t\t\t\t\t\t...workerOptions.durableObjects,\n\t\t\t\t\t\t\t\t\t\t__VITE_RUNNER_OBJECT__: {\n\t\t\t\t\t\t\t\t\t\t\tclassName: \"__VITE_RUNNER_OBJECT__\",\n\t\t\t\t\t\t\t\t\t\t\tunsafeUniqueKey: kUnsafeEphemeralUniqueKey,\n\t\t\t\t\t\t\t\t\t\t\tunsafePreventEviction: true,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} satisfies Partial<WorkerOptions>,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t: [];\n\n\tconst userWorkers = workersFromConfig.map((options) => options.worker);\n\n\tconst externalWorkers = workersFromConfig.flatMap(\n\t\t(options) => options.externalWorkers\n\t);\n\n\tconst logger = new ViteMiniflareLogger(resolvedViteConfig);\n\n\tconst serverConfig = viteDevServer.config.server;\n\tconst publicUrl = buildPublicUrl({\n\t\thostname:\n\t\t\ttypeof serverConfig.host === \"string\" ? serverConfig.host : undefined,\n\t\tport: serverConfig.port,\n\t\tsecure: !!serverConfig.https,\n\t});\n\n\treturn {\n\t\tminiflareOptions: {\n\t\t\tlog: logger,\n\t\t\tpublicUrl,\n\t\t\tunsafeProxySharedSecret: PROXY_SHARED_SECRET,\n\t\t\tlogRequests: false,\n\t\t\tinspectorPort:\n\t\t\t\tinputInspectorPort === false ? undefined : inputInspectorPort,\n\t\t\tunsafeDevRegistryPath: getDefaultDevRegistryPath(),\n\t\t\tunsafeTriggerHandlers: true,\n\t\t\tunsafeLocalExplorer: getLocalExplorerEnabledFromEnv(),\n\t\t\ttelemetry: { enabled: false },\n\t\t\thandleStructuredLogs: getStructuredLogsLogger(logger),\n\t\t\tdefaultPersistRoot: getPersistenceRoot(\n\t\t\t\tresolvedViteConfig.root,\n\t\t\t\tresolvedPluginConfig.persistState\n\t\t\t),\n\t\t\tworkers: [...assetWorkers, ...externalWorkers, ...userWorkers],\n\t\t\tasync unsafeModuleFallbackService(request) {\n\t\t\t\tconst parsed = await parseModuleFallbackRequest(request);\n\n\t\t\t\tif (!parsed) {\n\t\t\t\t\treturn new MiniflareResponse(\"Invalid module fallback request\", {\n\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst rawSpecifier = parsed.rawSpecifier;\n\t\t\t\tassert(\n\t\t\t\t\trawSpecifier,\n\t\t\t\t\t`Unexpected error: no specifier in request to module fallback service.`\n\t\t\t\t);\n\t\t\t\tconst match = additionalModuleRE.exec(rawSpecifier);\n\t\t\t\tassert(\n\t\t\t\t\tmatch,\n\t\t\t\t\t`Unexpected error: no match for module: ${rawSpecifier}.`\n\t\t\t\t);\n\t\t\t\tconst [full, moduleType, modulePath] = match;\n\t\t\t\tassert(\n\t\t\t\t\tmoduleType,\n\t\t\t\t\t`Unexpected error: module type not found in reference: ${full}.`\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tmodulePath,\n\t\t\t\t\t`Unexpected error: module path not found in reference: ${full}.`\n\t\t\t\t);\n\n\t\t\t\tlet contents: Buffer;\n\n\t\t\t\ttry {\n\t\t\t\t\tcontents = await fsp.readFile(modulePath);\n\t\t\t\t} catch {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Import \"${modulePath}\" not found. Does the file exist?`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tswitch (moduleType) {\n\t\t\t\t\tcase \"CompiledWasm\": {\n\t\t\t\t\t\treturn MiniflareResponse.json({ wasm: Array.from(contents) });\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Data\": {\n\t\t\t\t\t\treturn MiniflareResponse.json({ data: Array.from(contents) });\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Text\": {\n\t\t\t\t\t\treturn MiniflareResponse.json({ text: contents.toString() });\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn MiniflareResponse.error();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tcontainerTagToOptionsMap,\n\t};\n}\n\nfunction getPreviewModules(\n\tmain: string,\n\tmodulesRules: SourcelessWorkerOptions[\"modulesRules\"]\n) {\n\tassert(modulesRules, `Unexpected error: 'modulesRules' is undefined`);\n\tconst rootPath = path.dirname(main);\n\tconst entryPath = path.basename(main);\n\n\treturn {\n\t\trootPath,\n\t\tmodules: [\n\t\t\t{\n\t\t\t\ttype: \"ESModule\",\n\t\t\t\tpath: entryPath,\n\t\t\t} as const,\n\t\t\t...modulesRules.flatMap(({ type, include }) =>\n\t\t\t\tglobSync(include, { cwd: rootPath, ignore: entryPath }).map(\n\t\t\t\t\t(globPath) => ({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tpath: globPath,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t),\n\t\t],\n\t} satisfies Pick<WorkerOptions, \"rootPath\" | \"modules\">;\n}\n\nexport async function getPreviewMiniflareOptions(\n\tctx: PreviewPluginContext,\n\tvitePreviewServer: vite.PreviewServer\n): Promise<{\n\tminiflareOptions: Extract<MiniflareOptions, { workers: WorkerOptions[] }>;\n\tcontainerTagToOptionsMap: ContainerTagToOptionsMap;\n}> {\n\tconst inputInspectorPort = await getInputInspectorPort(\n\t\tctx,\n\t\tvitePreviewServer\n\t);\n\tconst { resolvedPluginConfig, resolvedViteConfig } = ctx;\n\tconst containerTagToOptionsMap: ContainerTagToOptionsMap = new Map();\n\n\tconst workers: Array<WorkerOptions> = (\n\t\tawait Promise.all(\n\t\t\tresolvedPluginConfig.workers.map(async (workerConfig) => {\n\t\t\t\tconst bindings =\n\t\t\t\t\twrangler.unstable_convertConfigBindingsToStartWorkerBindings(\n\t\t\t\t\t\tworkerConfig\n\t\t\t\t\t);\n\n\t\t\t\tconst preExistingRemoteProxySessionData = workerConfig.configPath\n\t\t\t\t\t? remoteProxySessionsDataMap.get(workerConfig.configPath)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst remoteProxySessionData = !resolvedPluginConfig.remoteBindings\n\t\t\t\t\t? // if remote bindings are not enabled then the proxy session can simply be null\n\t\t\t\t\t\tnull\n\t\t\t\t\t: await wrangler.maybeStartOrUpdateRemoteProxySession(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: workerConfig.name,\n\t\t\t\t\t\t\t\tbindings: bindings ?? {},\n\t\t\t\t\t\t\t\taccount_id: workerConfig.account_id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpreExistingRemoteProxySessionData ?? null\n\t\t\t\t\t\t);\n\n\t\t\t\tif (workerConfig.configPath && remoteProxySessionData) {\n\t\t\t\t\tremoteProxySessionsDataMap.set(\n\t\t\t\t\t\tworkerConfig.configPath,\n\t\t\t\t\t\tremoteProxySessionData\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet containerBuildId: string | undefined;\n\t\t\t\tif (\n\t\t\t\t\tworkerConfig.containers?.length &&\n\t\t\t\t\tworkerConfig.dev.enable_containers\n\t\t\t\t) {\n\t\t\t\t\tconst dockerPath = getDockerPath();\n\t\t\t\t\tworkerConfig.dev.container_engine = resolveDockerHost(dockerPath);\n\t\t\t\t\tcontainerBuildId = generateContainerBuildId();\n\n\t\t\t\t\tconst options = getContainerOptions({\n\t\t\t\t\t\tcontainersConfig: workerConfig.containers,\n\t\t\t\t\t\tcontainerBuildId,\n\t\t\t\t\t\tconfigPath: workerConfig.configPath,\n\t\t\t\t\t});\n\t\t\t\t\tfor (const option of options ?? []) {\n\t\t\t\t\t\tcontainerTagToOptionsMap.set(option.image_tag, option);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst miniflareWorkerOptions =\n\t\t\t\t\twrangler.unstable_getMiniflareWorkerOptions(workerConfig, undefined, {\n\t\t\t\t\t\tremoteProxyConnectionString:\n\t\t\t\t\t\t\tremoteProxySessionData?.session?.remoteProxyConnectionString,\n\n\t\t\t\t\t\tcontainerBuildId,\n\t\t\t\t\t});\n\n\t\t\t\tconst { externalWorkers } = miniflareWorkerOptions;\n\n\t\t\t\tconst { modulesRules, ...workerOptions } =\n\t\t\t\t\tminiflareWorkerOptions.workerOptions;\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\t...workerOptions,\n\t\t\t\t\t\tname: workerOptions.name ?? workerConfig.name,\n\t\t\t\t\t\tunsafeInspectorProxy: inputInspectorPort !== false,\n\t\t\t\t\t\t...(miniflareWorkerOptions.main\n\t\t\t\t\t\t\t? getPreviewModules(miniflareWorkerOptions.main, modulesRules)\n\t\t\t\t\t\t\t: { modules: true, script: \"\" }),\n\t\t\t\t\t},\n\t\t\t\t\t...externalWorkers,\n\t\t\t\t] satisfies Array<WorkerOptions>;\n\t\t\t})\n\t\t)\n\t).flat();\n\n\tconst logger = new ViteMiniflareLogger(resolvedViteConfig);\n\n\tconst serverConfig = vitePreviewServer.config.preview;\n\tconst publicUrl = buildPublicUrl({\n\t\thostname:\n\t\t\ttypeof serverConfig.host === \"string\" ? serverConfig.host : undefined,\n\t\tport: serverConfig.port,\n\t\tsecure: !!serverConfig.https,\n\t});\n\n\treturn {\n\t\tminiflareOptions: {\n\t\t\tlog: logger,\n\t\t\tpublicUrl,\n\t\t\tunsafeProxySharedSecret: PROXY_SHARED_SECRET,\n\t\t\tinspectorPort:\n\t\t\t\tinputInspectorPort === false ? undefined : inputInspectorPort,\n\t\t\tunsafeDevRegistryPath: getDefaultDevRegistryPath(),\n\t\t\tunsafeTriggerHandlers: true,\n\t\t\tunsafeLocalExplorer: getLocalExplorerEnabledFromEnv(),\n\t\t\ttelemetry: { enabled: false },\n\t\t\thandleStructuredLogs: getStructuredLogsLogger(logger),\n\t\t\tdefaultPersistRoot: getPersistenceRoot(\n\t\t\t\tresolvedViteConfig.root,\n\t\t\t\tresolvedPluginConfig.persistState\n\t\t\t),\n\t\t\tworkers,\n\t\t},\n\t\tcontainerTagToOptionsMap,\n\t};\n}\n\n/**\n * A Miniflare logger that forwards messages onto a Vite logger.\n */\nclass ViteMiniflareLogger extends Log {\n\tprivate logger: vite.Logger;\n\tconstructor(config: vite.ResolvedConfig) {\n\t\tsuper(miniflareLogLevelFromViteLogLevel(config.logLevel));\n\t\tthis.logger = config.logger;\n\t}\n\n\toverride logWithLevel(level: LogLevel, message: string) {\n\t\tswitch (level) {\n\t\t\tcase LogLevel.ERROR:\n\t\t\t\treturn this.logger.error(message);\n\t\t\tcase LogLevel.WARN:\n\t\t\t\treturn this.logger.warn(message);\n\t\t\tcase LogLevel.INFO:\n\t\t\t\treturn this.logger.info(message);\n\t\t}\n\t}\n\n\toverride logReady() {\n\t\t// Noop so that Miniflare server start messages are not logged\n\t}\n}\n\nfunction miniflareLogLevelFromViteLogLevel(\n\tlevel: vite.LogLevel = \"info\"\n): LogLevel {\n\tswitch (level) {\n\t\tcase \"error\":\n\t\t\treturn LogLevel.ERROR;\n\t\tcase \"warn\":\n\t\t\treturn LogLevel.WARN;\n\t\tcase \"info\":\n\t\t\treturn LogLevel.INFO;\n\t\tcase \"silent\":\n\t\t\treturn LogLevel.NONE;\n\t}\n}\n\n/**\n * Generates a log handler to be passed as the `handleStructuredLogs` option to miniflare\n *\n * @param logger the vite logger to use\n * @returns the log handler to pass to miniflare\n */\nfunction getStructuredLogsLogger(logger: Log) {\n\treturn ({ level, message }: WorkerdStructuredLog) => {\n\t\tif (level === \"warn\") {\n\t\t\treturn logger.warn(message);\n\t\t}\n\n\t\tif (level === \"error\") {\n\t\t\treturn logger.logWithLevel(LogLevel.ERROR, message);\n\t\t}\n\n\t\treturn logger.info(message);\n\t};\n}\n","import { createHeaders } from \"@remix-run/node-fetch-server\";\nimport { CoreHeaders, coupleWebSocket } from \"miniflare\";\nimport { WebSocketServer } from \"ws\";\nimport { UNKNOWN_HOST } from \"./shared\";\nimport type { Headers, Miniflare } from \"miniflare\";\nimport type { IncomingMessage } from \"node:http\";\nimport type { Duplex } from \"node:stream\";\nimport type * as vite from \"vite\";\n\n/**\n * Handles 'upgrade' requests to the Vite HTTP server and forwards WebSocket events between the client and Worker environments.\n */\nexport function handleWebSocket(\n\thttpServer: vite.HttpServer,\n\tminiflare: Miniflare,\n\tentryWorkerName?: string\n) {\n\tconst nodeWebSocket = new WebSocketServer({ noServer: true });\n\n\thttpServer.on(\n\t\t\"upgrade\",\n\t\tasync (request: IncomingMessage, socket: Duplex, head: Buffer) => {\n\t\t\t// Socket errors crash Node.js if unhandled\n\t\t\tsocket.on(\"error\", () => socket.destroy());\n\n\t\t\tconst rawHost = request.headers.host ?? UNKNOWN_HOST;\n\t\t\tconst base = /^https?:\\/\\//i.test(rawHost)\n\t\t\t\t? rawHost\n\t\t\t\t: `http://${rawHost}`;\n\t\t\tconst url = new URL(request.url ?? \"\", base);\n\n\t\t\tconst isViteRequest =\n\t\t\t\trequest.headers[\"sec-websocket-protocol\"]?.startsWith(\"vite\");\n\t\t\tconst isSandboxRequest = hasSandboxOrigin(url.origin);\n\n\t\t\t// Ignore Vite HMR WebSockets but forward on all sandbox requests.\n\t\t\tif (isViteRequest && !isSandboxRequest) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst headers = createHeaders(request);\n\n\t\t\tif (entryWorkerName) {\n\t\t\t\theaders.set(CoreHeaders.ROUTE_OVERRIDE, entryWorkerName);\n\t\t\t}\n\n\t\t\tconst response = await miniflare.dispatchFetch(url, {\n\t\t\t\theaders: headers as unknown as Headers,\n\t\t\t\tmethod: request.method,\n\t\t\t});\n\t\t\tconst workerWebSocket = response.webSocket;\n\n\t\t\tif (!workerWebSocket) {\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnodeWebSocket.handleUpgrade(\n\t\t\t\trequest,\n\t\t\t\tsocket,\n\t\t\t\thead,\n\t\t\t\tasync (clientWebSocket) => {\n\t\t\t\t\tvoid coupleWebSocket(clientWebSocket, workerWebSocket);\n\t\t\t\t\tnodeWebSocket.emit(\"connection\", clientWebSocket, request);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n}\n\n/**\n * Matches the origin of a Sandbox SDK preview URL.\n * See: https://developers.cloudflare.com/sandbox/concepts/preview-urls/\n *\n * Pattern: https?://<port(4+ digits)>-<id(no dots)>-<token>.localhost\n *\n * IMPORTANT: The token segment is [a-z0-9_]+ (no hyphens) to prevent ReDoS — two adjacent\n * [^.]+ groups separated by - cause quadratic backtracking on hyphen-heavy input. Tokens are\n * documented as letters/digits/underscores only.\n */\nconst SANDBOX_ORIGIN_REGEXP =\n\t/^https?:\\/\\/\\d{4,}-[^.]+-[a-z0-9_]+\\.localhost(:\\d+)?$/i;\n\nfunction hasSandboxOrigin(origin: string) {\n\treturn SANDBOX_ORIGIN_REGEXP.test(origin);\n}\n","import assert from \"node:assert\";\nimport {\n\tconfigureOpenAPIForContainerPull,\n\tgetCloudflareContainerRegistry,\n\tprepareContainerImagesForDev,\n} from \"@cloudflare/containers-shared\";\nimport { cleanupContainers } from \"@cloudflare/containers-shared/src/utils\";\nimport { generateStaticRoutingRuleMatcher } from \"@cloudflare/workers-shared/asset-worker/src/utils/rules-engine\";\nimport { UserError } from \"@cloudflare/workers-utils\";\nimport { buildPublicUrl, CoreHeaders } from \"miniflare\";\nimport colors from \"picocolors\";\nimport { initRunners } from \"../cloudflare-environment\";\nimport {\n\tASSET_WORKER_NAME,\n\tkRequestType,\n\tROUTER_WORKER_NAME,\n} from \"../constants\";\nimport { getDockerPath } from \"../containers\";\nimport { assertIsNotPreview } from \"../context\";\nimport {\n\tcompareExportTypes,\n\tcompareWorkerNameToExportTypesMaps,\n\tgetCurrentWorkerNameToExportTypesMap,\n} from \"../export-types\";\nimport { getDevMiniflareOptions } from \"../miniflare-options\";\nimport { UNKNOWN_HOST } from \"../shared\";\nimport {\n\tcreatePlugin,\n\tcreateRequestHandler,\n\tdebuglog,\n\tsatisfiesMinimumViteVersion,\n} from \"../utils\";\nimport { handleWebSocket } from \"../websockets\";\nimport type { StaticRouting } from \"@cloudflare/workers-shared/utils/types\";\n\nlet exitCallback = () => {};\n\nprocess.on(\"exit\", () => {\n\texitCallback();\n});\n\n/**\n * Plugin to provide core development functionality\n */\nexport const devPlugin = createPlugin(\"dev\", (ctx) => {\n\tlet containerImageTags = new Set<string>();\n\n\treturn {\n\t\tasync buildEnd() {\n\t\t\tif (\n\t\t\t\tctx.resolvedViteConfig.command === \"serve\" &&\n\t\t\t\tcontainerImageTags.size\n\t\t\t) {\n\t\t\t\tconst dockerPath = getDockerPath();\n\t\t\t\tcleanupContainers(dockerPath, containerImageTags);\n\t\t\t}\n\n\t\t\tdebuglog(\n\t\t\t\t\"buildEnd:\",\n\t\t\t\tctx.isRestartingDevServer ? \"restarted\" : \"disposing\"\n\t\t\t);\n\t\t\tif (!ctx.isRestartingDevServer) {\n\t\t\t\ttry {\n\t\t\t\t\tawait ctx.disposeMiniflare();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tdebuglog(\"Failed to dispose Miniflare instance:\", error);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync configureServer(viteDevServer) {\n\t\t\tassertIsNotPreview(ctx);\n\n\t\t\tconst initialOptions = await getDevMiniflareOptions(ctx, viteDevServer);\n\t\t\tlet containerTagToOptionsMap = initialOptions.containerTagToOptionsMap;\n\n\t\t\tawait ctx.startOrUpdateMiniflare(initialOptions.miniflareOptions);\n\n\t\t\t// Once the HTTP server is listening, update Miniflare's publicUrl with\n\t\t\t// the actual address. This ensures \"Cloudflare Stream\" preview URLs always reflect\n\t\t\t// the real server URL — even if Vite bumped the port.\n\t\t\tif (viteDevServer.httpServer) {\n\t\t\t\tviteDevServer.httpServer.on(\"listening\", () => {\n\t\t\t\t\tconst addr = viteDevServer.httpServer?.address();\n\t\t\t\t\tif (typeof addr === \"object\" && addr !== null) {\n\t\t\t\t\t\tconst serverConfig = viteDevServer.config.server;\n\t\t\t\t\t\tctx.miniflare.publicUrl = buildPublicUrl({\n\t\t\t\t\t\t\thostname:\n\t\t\t\t\t\t\t\ttypeof serverConfig.host === \"string\"\n\t\t\t\t\t\t\t\t\t? serverConfig.host\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tport: addr.port,\n\t\t\t\t\t\t\tsecure: !!serverConfig.https,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (ctx.resolvedPluginConfig.type === \"workers\") {\n\t\t\t\tdebuglog(\"Initializing the Vite module runners\");\n\t\t\t\tawait initRunners(\n\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\tviteDevServer,\n\t\t\t\t\tctx.miniflare\n\t\t\t\t);\n\t\t\t\tconst currentWorkerNameToExportTypesMap =\n\t\t\t\t\tawait getCurrentWorkerNameToExportTypesMap(\n\t\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\t\tviteDevServer,\n\t\t\t\t\t\tctx.miniflare\n\t\t\t\t\t);\n\t\t\t\tconst hasChanged = compareWorkerNameToExportTypesMaps(\n\t\t\t\t\tctx.workerNameToExportTypesMap,\n\t\t\t\t\tcurrentWorkerNameToExportTypesMap\n\t\t\t\t);\n\n\t\t\t\tif (hasChanged) {\n\t\t\t\t\tctx.setWorkerNameToExportTypesMap(currentWorkerNameToExportTypesMap);\n\t\t\t\t\tconst updatedOptions = await getDevMiniflareOptions(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tviteDevServer\n\t\t\t\t\t);\n\t\t\t\t\tcontainerTagToOptionsMap = updatedOptions.containerTagToOptionsMap;\n\t\t\t\t\tawait ctx.startOrUpdateMiniflare(updatedOptions.miniflareOptions);\n\t\t\t\t\tawait initRunners(\n\t\t\t\t\t\tctx.resolvedPluginConfig,\n\t\t\t\t\t\tviteDevServer,\n\t\t\t\t\t\tctx.miniflare\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tfor (const environmentName of ctx.resolvedPluginConfig.environmentNameToWorkerMap.keys()) {\n\t\t\t\t\tconst environment = viteDevServer.environments[environmentName];\n\t\t\t\t\tassert(\n\t\t\t\t\t\tenvironment,\n\t\t\t\t\t\t`Expected environment \"${environmentName}\" to be defined`\n\t\t\t\t\t);\n\t\t\t\t\tenvironment.hot.on(\n\t\t\t\t\t\t\"vite-plugin-cloudflare:worker-export-types\",\n\t\t\t\t\t\tasync (newExportTypes) => {\n\t\t\t\t\t\t\tconst workerConfig = ctx.getWorkerConfig(environmentName);\n\t\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\t\tworkerConfig,\n\t\t\t\t\t\t\t\t`Expected workerConfig for environment \"${environmentName}\" to be defined`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst oldExportTypes = ctx.workerNameToExportTypesMap.get(\n\t\t\t\t\t\t\t\tworkerConfig.name\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\t\toldExportTypes,\n\t\t\t\t\t\t\t\t`Expected export types for Worker \"${workerConfig.name}\" to be defined`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst exportTypeHasChanged = compareExportTypes(\n\t\t\t\t\t\t\t\toldExportTypes,\n\t\t\t\t\t\t\t\tnewExportTypes\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (exportTypeHasChanged) {\n\t\t\t\t\t\t\t\tviteDevServer.config.logger.info(\n\t\t\t\t\t\t\t\t\tcolors.dim(\n\t\t\t\t\t\t\t\t\t\tcolors.yellow(\n\t\t\t\t\t\t\t\t\t\t\t\"Worker exports have changed. Restarting dev server.\"\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait viteDevServer.restart();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst entryWorkerConfig = ctx.entryWorkerConfig;\n\t\t\t\tassert(entryWorkerConfig, `No entry Worker config`);\n\t\t\t\tconst entryWorkerName = entryWorkerConfig.name;\n\n\t\t\t\t// The HTTP server is not available in middleware mode\n\t\t\t\tif (viteDevServer.httpServer) {\n\t\t\t\t\thandleWebSocket(\n\t\t\t\t\t\tviteDevServer.httpServer,\n\t\t\t\t\t\tctx.miniflare,\n\t\t\t\t\t\tentryWorkerName\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst staticRouting: StaticRouting | undefined =\n\t\t\t\t\tentryWorkerConfig.assets?.run_worker_first === true\n\t\t\t\t\t\t? { user_worker: [\"/*\"] }\n\t\t\t\t\t\t: ctx.resolvedPluginConfig.staticRouting;\n\n\t\t\t\tif (staticRouting) {\n\t\t\t\t\tconst excludeRulesMatcher = generateStaticRoutingRuleMatcher(\n\t\t\t\t\t\tstaticRouting.asset_worker ?? []\n\t\t\t\t\t);\n\t\t\t\t\tconst includeRulesMatcher = generateStaticRoutingRuleMatcher(\n\t\t\t\t\t\tstaticRouting.user_worker\n\t\t\t\t\t);\n\t\t\t\t\tconst userWorkerHandler = createRequestHandler(async (request) => {\n\t\t\t\t\t\trequest.headers.set(CoreHeaders.ROUTE_OVERRIDE, entryWorkerName);\n\n\t\t\t\t\t\treturn ctx.miniflare.dispatchFetch(request, {\n\t\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tviteDevServer.middlewares.use(\n\t\t\t\t\t\tasync function cloudflarePreMiddleware(req, res, next) {\n\t\t\t\t\t\t\tassert(req.url, `req.url not defined`);\n\t\t\t\t\t\t\t// Only the URL pathname is used to match rules\n\t\t\t\t\t\t\tconst request = new Request(new URL(req.url, UNKNOWN_HOST));\n\n\t\t\t\t\t\t\tif (req[kRequestType] === \"asset\") {\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t} else if (excludeRulesMatcher({ request })) {\n\t\t\t\t\t\t\t\treq[kRequestType] = \"asset\";\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t} else if (includeRulesMatcher({ request })) {\n\t\t\t\t\t\t\t\tvoid userWorkerHandler(req, res, next);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (containerTagToOptionsMap.size) {\n\t\t\t\t\tviteDevServer.config.logger.info(\n\t\t\t\t\t\tcolors.dim(\n\t\t\t\t\t\t\tcolors.yellow(\n\t\t\t\t\t\t\t\t\"∷ Building container images for local development...\\n\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tconst hasCFRegistryImages = [\n\t\t\t\t\t\t...containerTagToOptionsMap.values(),\n\t\t\t\t\t].some(\n\t\t\t\t\t\t(opts) =>\n\t\t\t\t\t\t\t\"image_uri\" in opts &&\n\t\t\t\t\t\t\tnew URL(`http://${opts.image_uri}`).hostname ===\n\t\t\t\t\t\t\t\tgetCloudflareContainerRegistry()\n\t\t\t\t\t);\n\n\t\t\t\t\tif (hasCFRegistryImages) {\n\t\t\t\t\t\tconst apiToken = process.env.CLOUDFLARE_API_TOKEN;\n\t\t\t\t\t\tconst accountId =\n\t\t\t\t\t\t\tctx.entryWorkerConfig?.account_id ??\n\t\t\t\t\t\t\tprocess.env.CLOUDFLARE_ACCOUNT_ID;\n\n\t\t\t\t\t\tif (!apiToken || !accountId) {\n\t\t\t\t\t\t\tthrow new UserError(\n\t\t\t\t\t\t\t\t\"To use images from the Cloudflare-managed registry with the Vite plugin, \" +\n\t\t\t\t\t\t\t\t\t\"set the CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID environment variables.\\n\" +\n\t\t\t\t\t\t\t\t\t\"The API token requires Containers:Edit and Workers Scripts:Edit permissions.\\n\" +\n\t\t\t\t\t\t\t\t\t\"Alternatively, use a Dockerfile that references the image via FROM.\",\n\t\t\t\t\t\t\t\t{ telemetryMessage: false }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconfigureOpenAPIForContainerPull(accountId, apiToken);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait prepareContainerImagesForDev({\n\t\t\t\t\t\tdockerPath: getDockerPath(),\n\t\t\t\t\t\tcontainerOptions: [...containerTagToOptionsMap.values()],\n\t\t\t\t\t\tonContainerImagePreparationStart: () => {},\n\t\t\t\t\t\tonContainerImagePreparationEnd: () => {},\n\t\t\t\t\t\tlogger: viteDevServer.config.logger,\n\t\t\t\t\t});\n\n\t\t\t\t\tcontainerImageTags = new Set(containerTagToOptionsMap.keys());\n\t\t\t\t\tviteDevServer.config.logger.info(\n\t\t\t\t\t\tcolors.dim(\n\t\t\t\t\t\t\tcolors.yellow(\n\t\t\t\t\t\t\t\t\"\\n⚡️ Containers successfully built. To rebuild your containers during development, restart the Vite dev server (r + enter).\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Upon exiting the dev process we should ensure we perform any\n\t\t\t\t\t * containers-specific cleanup work. Vite recommends using the\n\t\t\t\t\t * `buildEnd` and `closeBundle` hooks, which are called when the\n\t\t\t\t\t * server is closed. Unfortunately none of these hooks work if the\n\t\t\t\t\t * process exits forcefully, via `ctrl+C`, and Vite provides no\n\t\t\t\t\t * other alternatives. For this reason we decided to hook into both\n\t\t\t\t\t * `buildEnd` and the `exit` event, and ensure we always cleanup\n\t\t\t\t\t * (please note that handling the `beforeExit` event, which does\n\t\t\t\t\t * support async ops, is not an option, since Vite calls\n\t\t\t\t\t * `process.exit()` imperatively, and therefore causes `beforeExit`\n\t\t\t\t\t * not to be emitted).\n\t\t\t\t\t *\n\t\t\t\t\t */\n\t\t\t\t\texitCallback = () => {\n\t\t\t\t\t\tif (containerImageTags.size) {\n\t\t\t\t\t\t\tcleanupContainers(getDockerPath(), containerImageTags);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\t// In Vite 6, pre-middleware is placed before the host check middleware,\n\t\t\t\t// leaving the server vulnerable to DNS rebinding attacks. We move it to\n\t\t\t\t// after the host check middleware by re-inserting it before\n\t\t\t\t// viteCachedTransformMiddleware. In Vite 7+, it's already in the\n\t\t\t\t// correct position so no action is needed.\n\t\t\t\tif (!satisfiesMinimumViteVersion(\"7.0.0\")) {\n\t\t\t\t\tconst middlewareStack = viteDevServer.middlewares.stack;\n\t\t\t\t\tconst preMiddlewareIndex = middlewareStack.findIndex(\n\t\t\t\t\t\t(middleware) =>\n\t\t\t\t\t\t\t\"name\" in middleware.handle &&\n\t\t\t\t\t\t\tmiddleware.handle.name === \"cloudflarePreMiddleware\"\n\t\t\t\t\t);\n\n\t\t\t\t\tif (preMiddlewareIndex !== -1) {\n\t\t\t\t\t\tconst [preMiddleware] = middlewareStack.splice(\n\t\t\t\t\t\t\tpreMiddlewareIndex,\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t);\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tpreMiddleware,\n\t\t\t\t\t\t\t\"Failed to remove cloudflarePreMiddleware from stack\"\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst cachedTransformMiddlewareIndex = middlewareStack.findIndex(\n\t\t\t\t\t\t\t(middleware) =>\n\t\t\t\t\t\t\t\t\"name\" in middleware.handle &&\n\t\t\t\t\t\t\t\tmiddleware.handle.name === \"viteCachedTransformMiddleware\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tcachedTransformMiddlewareIndex !== -1,\n\t\t\t\t\t\t\t\"Failed to find viteCachedTransformMiddleware\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmiddlewareStack.splice(\n\t\t\t\t\t\t\tcachedTransformMiddlewareIndex,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tpreMiddleware\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// post middleware\n\t\t\t\tviteDevServer.middlewares.use(\n\t\t\t\t\tcreateRequestHandler(async (request, req) => {\n\t\t\t\t\t\tif (req[kRequestType] === \"asset\") {\n\t\t\t\t\t\t\trequest.headers.set(\n\t\t\t\t\t\t\t\tCoreHeaders.ROUTE_OVERRIDE,\n\t\t\t\t\t\t\t\tASSET_WORKER_NAME\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn ctx.miniflare.dispatchFetch(request, {\n\t\t\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest.headers.set(\n\t\t\t\t\t\t\t\tCoreHeaders.ROUTE_OVERRIDE,\n\t\t\t\t\t\t\t\tROUTER_WORKER_NAME\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn ctx.miniflare.dispatchFetch(request, {\n\t\t\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t};\n\t\t},\n\t};\n});\n","import assert from \"node:assert\";\nimport * as vite from \"vite\";\nimport {\n\tassertHasNodeJsCompat,\n\thasNodeJsAls,\n\tisNodeAlsModule,\n\tnodeBuiltinsRE,\n\tNodeJsCompatWarnings,\n} from \"../nodejs-compat\";\nimport { createPlugin, isRolldown } from \"../utils\";\nimport type { ResolvedWorkerConfig } from \"../plugin-config\";\n\n/**\n * Plugin to support the `nodejs_als` compatibility flag\n */\nexport const nodeJsAlsPlugin = createPlugin(\"nodejs-als\", (ctx) => {\n\treturn {\n\t\tconfigEnvironment(name) {\n\t\t\tif (hasNodeJsAls(ctx.getWorkerConfig(name))) {\n\t\t\t\treturn {\n\t\t\t\t\tresolve: {\n\t\t\t\t\t\tbuiltins: [\"async_hooks\", \"node:async_hooks\"],\n\t\t\t\t\t},\n\t\t\t\t\toptimizeDeps: {\n\t\t\t\t\t\texclude: [\"async_hooks\", \"node:async_hooks\"],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t};\n});\n\n/**\n * Plugin to support the `nodejs_compat` compatibility flag\n */\nexport const nodeJsCompatPlugin = createPlugin(\"nodejs-compat\", (ctx) => {\n\treturn {\n\t\tconfigEnvironment(name) {\n\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(name);\n\n\t\t\t// Only configure this environment if it is a Worker using Node.js compatibility.\n\t\t\tif (nodeJsCompat) {\n\t\t\t\treturn {\n\t\t\t\t\tresolve: {\n\t\t\t\t\t\tbuiltins: [...nodeJsCompat.externals],\n\t\t\t\t\t},\n\t\t\t\t\t...(isRolldown\n\t\t\t\t\t\t? ({\n\t\t\t\t\t\t\t\tbuild: {\n\t\t\t\t\t\t\t\t\trolldownOptions: {\n\t\t\t\t\t\t\t\t\t\tplugins: [\n\t\t\t\t\t\t\t\t\t\t\t// In Vite 8, `require` calls are not automatically replaced when the format is ESM and `platform` is `neutral`\n\t\t\t\t\t\t\t\t\t\t\tvite.esmExternalRequirePlugin({\n\t\t\t\t\t\t\t\t\t\t\t\texternal: [...nodeJsCompat.externals],\n\t\t\t\t\t\t\t\t\t\t\t\tskipDuplicateCheck: true,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} as vite.BuildOptions)\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tapplyToEnvironment(environment) {\n\t\t\t// Only run this plugin's hooks if it is a Worker with Node.js compatibility.\n\t\t\treturn ctx.getNodeJsCompat(environment.name) !== undefined;\n\t\t},\n\t\t// We need the resolver from this plugin to run before built-in ones, otherwise Vite's built-in\n\t\t// resolver will try to externalize the Node.js module imports (e.g. `perf_hooks` and `node:tty`)\n\t\t// rather than allowing the resolve hook here to alias them to polyfills.\n\t\tenforce: \"pre\",\n\t\tresolveId: {\n\t\t\tfilter: {\n\t\t\t\tid: [nodeBuiltinsRE, /^unenv\\//, /^@cloudflare\\/unenv-preset\\//],\n\t\t\t},\n\t\t\tasync handler(source, importer, options) {\n\t\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(this.environment.name);\n\t\t\t\tassertHasNodeJsCompat(nodeJsCompat);\n\n\t\t\t\t// See if we can map the `source` to a Node.js compat alias.\n\t\t\t\tconst result = nodeJsCompat.resolveNodeJsImport(source);\n\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.environment.mode === \"dev\") {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tthis.environment.depsOptimizer,\n\t\t\t\t\t\t\"depsOptimizer is required in dev mode\"\n\t\t\t\t\t);\n\t\t\t\t\t// We are in dev mode (rather than build).\n\t\t\t\t\t// So let's pre-bundle this polyfill entry-point using the dependency optimizer.\n\t\t\t\t\tconst { id } = this.environment.depsOptimizer.registerMissingImport(\n\t\t\t\t\t\tresult.unresolved,\n\t\t\t\t\t\tresult.resolved\n\t\t\t\t\t);\n\t\t\t\t\t// We use the unresolved path to the polyfill and let the dependency optimizer's\n\t\t\t\t\t// resolver find the resolved path to the bundled version.\n\t\t\t\t\treturn this.resolve(id, importer, options);\n\t\t\t\t}\n\n\t\t\t\t// We are in build mode so return the absolute path to the polyfill.\n\t\t\t\treturn this.resolve(result.resolved, importer, options);\n\t\t\t},\n\t\t},\n\t\tasync configureServer(viteDevServer) {\n\t\t\t// Pre-optimize Node.js compat library entry-points for those environments that need it.\n\t\t\tawait Promise.all(\n\t\t\t\tObject.values(viteDevServer.environments).flatMap(\n\t\t\t\t\tasync (environment) => {\n\t\t\t\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(environment.name);\n\n\t\t\t\t\t\tif (nodeJsCompat) {\n\t\t\t\t\t\t\t// Make sure that the dependency optimizer has been initialized.\n\t\t\t\t\t\t\t// This ensures that its standard static crawling to identify libraries to optimize still happens.\n\t\t\t\t\t\t\t// If you don't call `init()` then the calls to `registerMissingImport()` appear to cancel the static crawling.\n\t\t\t\t\t\t\tawait environment.depsOptimizer?.init();\n\n\t\t\t\t\t\t\t// Register every unenv-preset entry-point with the dependency optimizer upfront before the first request.\n\t\t\t\t\t\t\t// Without this the dependency optimizer will try to bundle them on-the-fly in the middle of the first request.\n\t\t\t\t\t\t\t// That can potentially cause problems if it causes previously optimized bundles to become stale and need to be bundled.\n\t\t\t\t\t\t\treturn Array.from(nodeJsCompat.entries).map((entry) => {\n\t\t\t\t\t\t\t\tconst result = nodeJsCompat.resolveNodeJsImport(entry);\n\n\t\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\tconst registration =\n\t\t\t\t\t\t\t\t\t\tenvironment.depsOptimizer?.registerMissingImport(\n\t\t\t\t\t\t\t\t\t\t\tresult.unresolved,\n\t\t\t\t\t\t\t\t\t\t\tresult.resolved\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\treturn registration?.processing;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t};\n});\n\nlet exitCallback = () => {};\n\nprocess.on(\"exit\", () => {\n\texitCallback();\n});\n\n/**\n * Plugin to warn if Node.js APIs are used without enabling the `nodejs_compat` compatibility flag\n */\nexport const nodeJsCompatWarningsPlugin = createPlugin(\n\t\"nodejs-compat-warnings\",\n\t(ctx) => {\n\t\tconst nodeJsCompatWarningsMap = new Map<\n\t\t\tResolvedWorkerConfig,\n\t\t\tNodeJsCompatWarnings\n\t\t>();\n\n\t\texitCallback = () => {\n\t\t\tfor (const nodeJsCompatWarnings of nodeJsCompatWarningsMap.values()) {\n\t\t\t\tnodeJsCompatWarnings.renderWarnings();\n\t\t\t}\n\t\t};\n\n\t\treturn {\n\t\t\t// We must ensure that the `resolveId` hook runs before the built-in ones.\n\t\t\t// Otherwise we never see the Node.js built-in imports since they get handled by default Vite behavior.\n\t\t\tenforce: \"pre\",\n\t\t\tconfigResolved(resolvedViteConfig) {\n\t\t\t\tfor (const environmentName of Object.keys(\n\t\t\t\t\tresolvedViteConfig.environments\n\t\t\t\t)) {\n\t\t\t\t\tconst workerConfig = ctx.getWorkerConfig(environmentName);\n\t\t\t\t\tconst nodeJsCompat = ctx.getNodeJsCompat(environmentName);\n\n\t\t\t\t\tif (workerConfig && !nodeJsCompat) {\n\t\t\t\t\t\tnodeJsCompatWarningsMap.set(\n\t\t\t\t\t\t\tworkerConfig,\n\t\t\t\t\t\t\tnew NodeJsCompatWarnings(environmentName, resolvedViteConfig)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tapplyToEnvironment(environment) {\n\t\t\t\treturn (\n\t\t\t\t\tctx.getWorkerConfig(environment.name) !== undefined &&\n\t\t\t\t\t!ctx.getNodeJsCompat(environment.name)\n\t\t\t\t);\n\t\t\t},\n\t\t\tresolveId: {\n\t\t\t\tfilter: { id: nodeBuiltinsRE },\n\t\t\t\thandler(source, importer) {\n\t\t\t\t\t// Fallback for when filter is not applied\n\t\t\t\t\t// TODO: remove when we drop support for Vite 6\n\t\t\t\t\tif (!nodeBuiltinsRE.test(source)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst workerConfig = ctx.getWorkerConfig(this.environment.name);\n\t\t\t\t\tassert(workerConfig, `expected workerConfig to be defined`);\n\n\t\t\t\t\tif (hasNodeJsAls(workerConfig) && isNodeAlsModule(source)) {\n\t\t\t\t\t\t// Skip if this is just async_hooks and Node.js ALS support is on.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nodeJsCompatWarnings =\n\t\t\t\t\t\tnodeJsCompatWarningsMap.get(workerConfig);\n\t\t\t\t\tnodeJsCompatWarnings?.registerImport(source, importer);\n\n\t\t\t\t\t// Mark this path as external to avoid messy unwanted resolve errors.\n\t\t\t\t\t// It will fail at runtime but we will log warnings to the user.\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: source,\n\t\t\t\t\t\texternal: true,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n);\n","import assert from \"node:assert\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as vite from \"vite\";\nimport { MAIN_ENTRY_NAME } from \"../cloudflare-environment\";\nimport { assertIsNotPreview } from \"../context\";\nimport { writeDeployConfig } from \"../deploy-config\";\nimport { getLocalDevVarsForPreview } from \"../dev-vars\";\nimport { createPlugin } from \"../utils\";\nimport type { Unstable_RawConfig } from \"wrangler\";\n\n/**\n * Plugin to generate additional output files as part of the build, including the output `wrangler.json` file.\n */\nexport const outputConfigPlugin = createPlugin(\"output-config\", (ctx) => {\n\treturn {\n\t\tgenerateBundle(_, bundle) {\n\t\t\tassertIsNotPreview(ctx);\n\n\t\t\t// Child environments should not emit wrangler.json or .dev.vars files\n\t\t\tif (ctx.isChildEnvironment(this.environment.name)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet outputConfig: Unstable_RawConfig | undefined;\n\n\t\t\tconst inputWorkerConfig = ctx.getWorkerConfig(this.environment.name);\n\n\t\t\tif (inputWorkerConfig) {\n\t\t\t\tconst entryChunk = Object.values(bundle).find(\n\t\t\t\t\t(chunk) =>\n\t\t\t\t\t\tchunk.type === \"chunk\" &&\n\t\t\t\t\t\tchunk.isEntry &&\n\t\t\t\t\t\tchunk.name === MAIN_ENTRY_NAME\n\t\t\t\t);\n\n\t\t\t\tassert(\n\t\t\t\t\tentryChunk,\n\t\t\t\t\t`Expected entry chunk with name \"${MAIN_ENTRY_NAME}\"`\n\t\t\t\t);\n\n\t\t\t\tconst isPrerenderWorker =\n\t\t\t\t\tthis.environment.name ===\n\t\t\t\t\tctx.resolvedPluginConfig.prerenderWorkerEnvironmentName;\n\t\t\t\tconst isEntryWorker =\n\t\t\t\t\tctx.resolvedPluginConfig.type === \"workers\" &&\n\t\t\t\t\tthis.environment.name ===\n\t\t\t\t\t\tctx.resolvedPluginConfig.entryWorkerEnvironmentName;\n\n\t\t\t\toutputConfig = {\n\t\t\t\t\t...inputWorkerConfig,\n\t\t\t\t\tmain: entryChunk.fileName,\n\t\t\t\t\tno_bundle: true,\n\t\t\t\t\trules: [{ type: \"ESModule\", globs: [\"**/*.js\", \"**/*.mjs\"] }],\n\t\t\t\t\tassets:\n\t\t\t\t\t\tisEntryWorker || isPrerenderWorker\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...inputWorkerConfig.assets,\n\t\t\t\t\t\t\t\t\tdirectory: getAssetsDirectory(\n\t\t\t\t\t\t\t\t\t\tthis.environment.config.build.outDir,\n\t\t\t\t\t\t\t\t\t\tctx.resolvedViteConfig\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t};\n\n\t\t\t\t// Infer `upload_source_maps` from Vite's `build.sourcemap` if not explicitly set\n\t\t\t\tif (\n\t\t\t\t\tinputWorkerConfig.upload_source_maps === undefined &&\n\t\t\t\t\tthis.environment.config.build.sourcemap\n\t\t\t\t) {\n\t\t\t\t\toutputConfig.upload_source_maps = true;\n\t\t\t\t}\n\n\t\t\t\tif (inputWorkerConfig.configPath) {\n\t\t\t\t\tconst localDevVars = getLocalDevVarsForPreview(\n\t\t\t\t\t\tinputWorkerConfig,\n\t\t\t\t\t\tctx.resolvedPluginConfig.cloudflareEnv\n\t\t\t\t\t);\n\t\t\t\t\t// Save a .dev.vars file to the worker's build output directory if there are local dev vars, so that it will be then detected by `vite preview`.\n\t\t\t\t\tif (localDevVars) {\n\t\t\t\t\t\tthis.emitFile({\n\t\t\t\t\t\t\ttype: \"asset\",\n\t\t\t\t\t\t\tfileName: \".dev.vars\",\n\t\t\t\t\t\t\tsource: localDevVars,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this.environment.name === \"client\") {\n\t\t\t\tconst filesToAssetsIgnore = [\"wrangler.json\", \".dev.vars\"] as const;\n\t\t\t\tconst existingAssetsIgnoreContent =\n\t\t\t\t\tctx.resolvedViteConfig.publicDir.length > 0\n\t\t\t\t\t\t? readAssetsIgnoreFile(\n\t\t\t\t\t\t\t\tpath.join(ctx.resolvedViteConfig.publicDir, \".assetsignore\")\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: \"\";\n\n\t\t\t\tthis.emitFile({\n\t\t\t\t\ttype: \"asset\",\n\t\t\t\t\tfileName: \".assetsignore\",\n\t\t\t\t\tsource: `${existingAssetsIgnoreContent}${filesToAssetsIgnore.join(\"\\n\")}\\n`,\n\t\t\t\t});\n\n\t\t\t\t// For assets only projects the `wrangler.json` file is emitted in the client output directory\n\t\t\t\tif (ctx.resolvedPluginConfig.type === \"assets-only\") {\n\t\t\t\t\tconst inputAssetsOnlyConfig = ctx.resolvedPluginConfig.config;\n\n\t\t\t\t\toutputConfig = {\n\t\t\t\t\t\t...inputAssetsOnlyConfig,\n\t\t\t\t\t\tassets: {\n\t\t\t\t\t\t\t...inputAssetsOnlyConfig.assets,\n\t\t\t\t\t\t\tdirectory: \".\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!outputConfig) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set to `undefined` if it's an empty object so that the user doesn't see a warning about using `unsafe` fields when deploying their Worker.\n\t\t\tif (\n\t\t\t\toutputConfig.unsafe &&\n\t\t\t\tObject.keys(outputConfig.unsafe).length === 0\n\t\t\t) {\n\t\t\t\toutputConfig.unsafe = undefined;\n\t\t\t}\n\n\t\t\tthis.emitFile({\n\t\t\t\ttype: \"asset\",\n\t\t\t\tfileName: \"wrangler.json\",\n\t\t\t\tsource: JSON.stringify(outputConfig),\n\t\t\t});\n\t\t},\n\t\twriteBundle() {\n\t\t\tassertIsNotPreview(ctx);\n\n\t\t\t// These conditions ensure the deploy config is emitted once per application build as `writeBundle` is called for each environment.\n\t\t\t// If Vite introduces an additional hook that runs after the application has built then we could use that instead.\n\t\t\tif (\n\t\t\t\tthis.environment.name ===\n\t\t\t\t(ctx.resolvedPluginConfig.type === \"workers\"\n\t\t\t\t\t? ctx.resolvedPluginConfig.entryWorkerEnvironmentName\n\t\t\t\t\t: \"client\")\n\t\t\t) {\n\t\t\t\twriteDeployConfig(ctx.resolvedPluginConfig, ctx.resolvedViteConfig);\n\t\t\t}\n\t\t},\n\t};\n});\n\nfunction readAssetsIgnoreFile(assetsIgnorePath: string): string {\n\tconst content = existsSync(assetsIgnorePath)\n\t\t? readFileSync(assetsIgnorePath, \"utf-8\")\n\t\t: \"\";\n\tif (content.length === 0) {\n\t\treturn \"\";\n\t}\n\treturn content.at(-1) === \"\\n\" ? content : `${content}\\n`;\n}\n\nfunction getAssetsDirectory(\n\tworkerOutputDirectory: string,\n\tresolvedViteConfig: vite.ResolvedConfig\n): string {\n\tconst clientOutputDirectory =\n\t\tresolvedViteConfig.environments.client?.build.outDir;\n\n\tassert(\n\t\tclientOutputDirectory,\n\t\t\"Unexpected error: client output directory is undefined\"\n\t);\n\n\treturn vite.normalizePath(\n\t\tpath.relative(\n\t\t\tpath.resolve(resolvedViteConfig.root, workerOutputDirectory),\n\t\t\tpath.resolve(resolvedViteConfig.root, clientOutputDirectory)\n\t\t)\n\t);\n}\n","import {\n\tconfigureOpenAPIForContainerPull,\n\tgetCloudflareContainerRegistry,\n\tprepareContainerImagesForDev,\n} from \"@cloudflare/containers-shared\";\nimport { cleanupContainers } from \"@cloudflare/containers-shared/src/utils\";\nimport { UserError } from \"@cloudflare/workers-utils\";\nimport { buildPublicUrl } from \"miniflare\";\nimport colors from \"picocolors\";\nimport { getDockerPath } from \"../containers\";\nimport { assertIsPreview } from \"../context\";\nimport { getPreviewMiniflareOptions } from \"../miniflare-options\";\nimport { createPlugin, createRequestHandler } from \"../utils\";\nimport { handleWebSocket } from \"../websockets\";\n\nlet exitCallback = () => {};\n\nprocess.on(\"exit\", () => {\n\texitCallback();\n});\n\n/**\n * Plugin to provide core preview functionality\n */\nexport const previewPlugin = createPlugin(\"preview\", (ctx) => {\n\treturn {\n\t\tasync configurePreviewServer(vitePreviewServer) {\n\t\t\tassertIsPreview(ctx);\n\n\t\t\t// Ensure Miniflare is disposed when the preview server is closed during prerendering\n\t\t\tconst closePreviewServer =\n\t\t\t\tvitePreviewServer.close.bind(vitePreviewServer);\n\t\t\tvitePreviewServer.close = async () => {\n\t\t\t\tawait Promise.all([ctx.disposeMiniflare(), closePreviewServer()]);\n\t\t\t};\n\n\t\t\tconst { miniflareOptions, containerTagToOptionsMap } =\n\t\t\t\tawait getPreviewMiniflareOptions(ctx, vitePreviewServer);\n\n\t\t\tawait ctx.startOrUpdateMiniflare(miniflareOptions);\n\n\t\t\t// Once the HTTP server is listening, update Miniflare's publicUrl with\n\t\t\t// the actual address. This ensures \"Cloudflare Stream\" preview URLs always reflect\n\t\t\t// the real server URL — even if Vite bumped the port.\n\t\t\tif (vitePreviewServer.httpServer) {\n\t\t\t\tvitePreviewServer.httpServer.on(\"listening\", () => {\n\t\t\t\t\tconst addr = vitePreviewServer.httpServer?.address();\n\t\t\t\t\tif (typeof addr === \"object\" && addr !== null) {\n\t\t\t\t\t\tconst serverConfig = vitePreviewServer.config.preview;\n\t\t\t\t\t\tctx.miniflare.publicUrl = buildPublicUrl({\n\t\t\t\t\t\t\thostname:\n\t\t\t\t\t\t\t\ttypeof serverConfig.host === \"string\"\n\t\t\t\t\t\t\t\t\t? serverConfig.host\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tport: addr.port,\n\t\t\t\t\t\t\tsecure: !!serverConfig.https,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (containerTagToOptionsMap.size) {\n\t\t\t\tconst dockerPath = getDockerPath();\n\n\t\t\t\tvitePreviewServer.config.logger.info(\n\t\t\t\t\tcolors.dim(\n\t\t\t\t\t\tcolors.yellow(\"∷ Building container images for local preview...\\n\")\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tconst hasCFRegistryImages = [...containerTagToOptionsMap.values()].some(\n\t\t\t\t\t(opts) =>\n\t\t\t\t\t\t\"image_uri\" in opts &&\n\t\t\t\t\t\tnew URL(`http://${opts.image_uri}`).hostname ===\n\t\t\t\t\t\t\tgetCloudflareContainerRegistry()\n\t\t\t\t);\n\n\t\t\t\tif (hasCFRegistryImages) {\n\t\t\t\t\tconst apiToken = process.env.CLOUDFLARE_API_TOKEN;\n\t\t\t\t\tconst accountId =\n\t\t\t\t\t\tctx.allWorkerConfigs[0]?.account_id ??\n\t\t\t\t\t\tprocess.env.CLOUDFLARE_ACCOUNT_ID;\n\n\t\t\t\t\tif (!apiToken || !accountId) {\n\t\t\t\t\t\tthrow new UserError(\n\t\t\t\t\t\t\t\"To use images from the Cloudflare-managed registry with the Vite plugin, \" +\n\t\t\t\t\t\t\t\t\"set the CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID environment variables.\\n\" +\n\t\t\t\t\t\t\t\t\"The API token requires Containers:Edit and Workers Scripts:Edit permissions.\\n\" +\n\t\t\t\t\t\t\t\t\"Alternatively, use a Dockerfile that references the image via FROM.\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttelemetryMessage: false,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconfigureOpenAPIForContainerPull(accountId, apiToken);\n\t\t\t\t}\n\n\t\t\t\tawait prepareContainerImagesForDev({\n\t\t\t\t\tdockerPath: getDockerPath(),\n\t\t\t\t\tcontainerOptions: [...containerTagToOptionsMap.values()],\n\t\t\t\t\tonContainerImagePreparationStart: () => {},\n\t\t\t\t\tonContainerImagePreparationEnd: () => {},\n\t\t\t\t\tlogger: vitePreviewServer.config.logger,\n\t\t\t\t});\n\n\t\t\t\tconst containerImageTags = new Set(containerTagToOptionsMap.keys());\n\t\t\t\tvitePreviewServer.config.logger.info(\n\t\t\t\t\tcolors.dim(colors.yellow(\"\\n⚡️ Containers successfully built.\\n\"))\n\t\t\t\t);\n\n\t\t\t\texitCallback = () => {\n\t\t\t\t\tif (containerImageTags.size) {\n\t\t\t\t\t\tcleanupContainers(dockerPath, containerImageTags);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\thandleWebSocket(vitePreviewServer.httpServer, ctx.miniflare);\n\n\t\t\t// In preview mode we put our middleware at the front of the chain so that all assets are handled in Miniflare\n\t\t\tvitePreviewServer.middlewares.use(\n\t\t\t\tcreateRequestHandler((request) => {\n\t\t\t\t\treturn ctx.miniflare.dispatchFetch(request, { redirect: \"manual\" });\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t};\n});\n","import { createPlugin } from \"../utils\";\nimport type * as vite from \"vite\";\n\n/**\n * Plugin to pass options to `@vitejs/plugin-rsc`\n */\nexport const rscPlugin = createPlugin(\"rsc\", () => {\n\treturn {\n\t\tenforce: \"pre\",\n\t\tconfig() {\n\t\t\treturn { rsc: { serverHandler: false } } as vite.UserConfig;\n\t\t},\n\t};\n});\n","import fs from 'node:fs';\n\nlet isDockerCached;\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\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\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\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\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 (isInsideContainer()) {\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? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export function parseMountPointFromConfig(content) {\n\tfor (const line of content.split('\\n')) {\n\t\t// Skip comment lines\n\t\tif (/^\\s*#/.test(line)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Match root at start of line (after optional whitespace)\n\t\tconst match = /^\\s*root\\s*=\\s*(?<mountPoint>\"[^\"]*\"|'[^']*'|[^#]*)/.exec(line);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn match.groups.mountPoint\n\t\t\t.trim()\n\t\t\t// Strip surrounding quotes\n\t\t\t.replaceAll(/^[\"']|[\"']$/g, '');\n\t}\n}\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\nimport {parseMountPointFromConfig} from './utilities.js';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\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 parsedMountPoint = parseMountPointFromConfig(configContent);\n\n\t\tif (parsedMountPoint === undefined) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = parsedMountPoint;\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\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 = valueGetter();\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","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\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\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\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 tryEachApp(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\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\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' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\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\t?? (platform === '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 (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\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\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\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\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `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\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\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, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`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\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","import {\n\tCorePaths,\n\tgetDefaultDevRegistryPath,\n\tgetWorkerRegistry,\n} from \"miniflare\";\nimport open from \"open\";\nimport colors from \"picocolors\";\nimport * as wrangler from \"wrangler\";\nimport { assertIsNotPreview, assertIsPreview } from \"../context\";\nimport { createPlugin, satisfiesMinimumViteVersion } from \"../utils\";\nimport { extendTunnelExpiry } from \"./tunnel\";\nimport type { PluginContext } from \"../context\";\nimport type * as vite from \"vite\";\n\nexport const shortcutsPlugin = createPlugin(\"shortcuts\", (ctx) => {\n\t// This requires Vite 7.2.7 which fixes custom CLI shortcuts support\n\t// @see https://github.com/vitejs/vite/pull/21103\n\tconst isCustomShortcutsSupported = satisfiesMinimumViteVersion(\"7.2.7\");\n\n\treturn {\n\t\tasync configureServer(viteDevServer) {\n\t\t\tif (!isCustomShortcutsSupported) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tassertIsNotPreview(ctx);\n\t\t\taddBindingsShortcut(viteDevServer, ctx);\n\t\t\taddExplorerShortcut(viteDevServer);\n\t\t\tif (ctx.resolvedPluginConfig.tunnel) {\n\t\t\t\taddTunnelShortcut(viteDevServer);\n\t\t\t}\n\t\t},\n\t\tasync configurePreviewServer(vitePreviewServer) {\n\t\t\tif (!isCustomShortcutsSupported) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tassertIsPreview(ctx);\n\t\t\taddBindingsShortcut(vitePreviewServer, ctx);\n\t\t\taddExplorerShortcut(vitePreviewServer);\n\t\t\tif (ctx.resolvedPluginConfig.tunnel) {\n\t\t\t\taddTunnelShortcut(vitePreviewServer);\n\t\t\t}\n\t\t},\n\t};\n});\n\nexport function addBindingsShortcut(\n\tserver: vite.ViteDevServer | vite.PreviewServer,\n\tctx: PluginContext\n) {\n\tconst workerConfigs = ctx.allWorkerConfigs;\n\n\tif (workerConfigs.length === 0) {\n\t\treturn;\n\t}\n\n\t// Interactive shortcuts should only be registered in a TTY environment\n\tif (!process.stdin.isTTY) {\n\t\treturn;\n\t}\n\n\tconst registryPath = getDefaultDevRegistryPath();\n\tconst printBindingsShortcut = {\n\t\tkey: \"b\",\n\t\tdescription: \"list configured Cloudflare bindings\",\n\t\taction: (viteServer) => {\n\t\t\tviteServer.config.logger.info(\"\");\n\n\t\t\tfor (const workerConfig of workerConfigs) {\n\t\t\t\tconst bindings =\n\t\t\t\t\twrangler.unstable_convertConfigBindingsToStartWorkerBindings(\n\t\t\t\t\t\tworkerConfig\n\t\t\t\t\t);\n\n\t\t\t\twrangler.unstable_printBindings(\n\t\t\t\t\tbindings,\n\t\t\t\t\tworkerConfig.tail_consumers,\n\t\t\t\t\tworkerConfig.streaming_tail_consumers,\n\t\t\t\t\tworkerConfig.containers,\n\t\t\t\t\t{\n\t\t\t\t\t\twarnIfNoBindings: true,\n\t\t\t\t\t\tisMultiWorker: workerConfigs.length > 1,\n\t\t\t\t\t\tname: workerConfig.name ?? \"Your Worker\",\n\t\t\t\t\t\tregistry: getWorkerRegistry(registryPath),\n\t\t\t\t\t\tlog: (message: string) => viteServer.config.logger.info(message),\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t} satisfies vite.CLIShortcut<vite.ViteDevServer | vite.PreviewServer>;\n\n\t// Update the bindCLIShortcuts method to print our shortcut hint first\n\tconst bindCLIShortcuts = server.bindCLIShortcuts.bind(server);\n\tserver.bindCLIShortcuts = (\n\t\toptions?: vite.BindCLIShortcutsOptions<\n\t\t\tvite.ViteDevServer | vite.PreviewServer\n\t\t>\n\t) => {\n\t\tif (\n\t\t\t// Vite will not print shortcuts if not in a TTY or in CI\n\t\t\t// @see https://github.com/vitejs/vite/blob/fa3753a0f3a6c12659d8a68eefbd055c5ab90552/packages/vite/src/node/shortcuts.ts#L28-L35\n\t\t\tserver.httpServer &&\n\t\t\tprocess.stdin.isTTY &&\n\t\t\t!process.env.CI &&\n\t\t\toptions?.print\n\t\t) {\n\t\t\tserver.config.logger.info(\n\t\t\t\tcolors.dim(colors.green(\"  ➜\")) +\n\t\t\t\t\tcolors.dim(\"  press \") +\n\t\t\t\t\tcolors.bold(`${printBindingsShortcut.key} + enter`) +\n\t\t\t\t\tcolors.dim(` to ${printBindingsShortcut.description}`)\n\t\t\t);\n\t\t}\n\n\t\tbindCLIShortcuts(options);\n\t};\n\n\t// Add the custom binding shortcut\n\tserver.bindCLIShortcuts({\n\t\tcustomShortcuts: [printBindingsShortcut],\n\t});\n}\n\nexport function addExplorerShortcut(\n\tserver: vite.ViteDevServer | vite.PreviewServer\n) {\n\tif (!process.stdin.isTTY) {\n\t\treturn;\n\t}\n\n\tconst openExplorerShortcut = {\n\t\tkey: \"e\",\n\t\tdescription: \"open local explorer\",\n\t\taction: async (viteServer) => {\n\t\t\tconst url = viteServer.resolvedUrls?.local[0];\n\t\t\tif (!url) {\n\t\t\t\tviteServer.config.logger.warn(\"No local URL available\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst explorerUrl = new URL(CorePaths.EXPLORER, url).href;\n\t\t\tconst childProcess = await open(explorerUrl);\n\t\t\tchildProcess.on(\"error\", () => {\n\t\t\t\tviteServer.config.logger.warn(\n\t\t\t\t\t\"Failed to open browser, the local explorer can be accessed at \" +\n\t\t\t\t\t\texplorerUrl\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t} satisfies vite.CLIShortcut<vite.ViteDevServer | vite.PreviewServer>;\n\n\t// Wrap bindCLIShortcuts to print our shortcut hint\n\tconst bindCLIShortcuts = server.bindCLIShortcuts.bind(server);\n\tserver.bindCLIShortcuts = (\n\t\toptions?: vite.BindCLIShortcutsOptions<\n\t\t\tvite.ViteDevServer | vite.PreviewServer\n\t\t>\n\t) => {\n\t\tif (\n\t\t\tserver.httpServer &&\n\t\t\tprocess.stdin.isTTY &&\n\t\t\t!process.env.CI &&\n\t\t\toptions?.print\n\t\t) {\n\t\t\tserver.config.logger.info(\n\t\t\t\tcolors.dim(colors.green(\"  ➜\")) +\n\t\t\t\t\tcolors.dim(\"  press \") +\n\t\t\t\t\tcolors.bold(`${openExplorerShortcut.key} + enter`) +\n\t\t\t\t\tcolors.dim(` to ${openExplorerShortcut.description}`)\n\t\t\t);\n\t\t}\n\n\t\tbindCLIShortcuts(options);\n\t};\n\n\tserver.bindCLIShortcuts({\n\t\tcustomShortcuts: [openExplorerShortcut],\n\t});\n}\n\nexport function addTunnelShortcut(\n\tserver: vite.ViteDevServer | vite.PreviewServer\n) {\n\tif (!process.stdin.isTTY) {\n\t\treturn;\n\t}\n\n\tconst extendTunnelExpiryShortcut = {\n\t\tkey: \"t\",\n\t\tdescription: \"extend tunnel by 1 hour\",\n\t\taction: () => {\n\t\t\textendTunnelExpiry();\n\t\t},\n\t} satisfies vite.CLIShortcut<vite.ViteDevServer | vite.PreviewServer>;\n\n\tserver.bindCLIShortcuts({\n\t\tcustomShortcuts: [extendTunnelExpiryShortcut],\n\t});\n}\n","import { CoreHeaders } from \"miniflare\";\nimport { createPlugin, createRequestHandler } from \"../utils\";\n\n/**\n * Plugin to forward `/cdn-cgi/handler/*` routes to trigger handlers in development\n */\nexport const triggerHandlersPlugin = createPlugin(\"trigger-handlers\", (ctx) => {\n\treturn {\n\t\tenforce: \"pre\",\n\t\tasync configureServer(viteDevServer) {\n\t\t\tconst entryWorkerConfig = ctx.entryWorkerConfig;\n\n\t\t\tif (!entryWorkerConfig) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst entryWorkerName = entryWorkerConfig.name;\n\t\t\tconst requestHandler = createRequestHandler((request) => {\n\t\t\t\trequest.headers.set(CoreHeaders.ROUTE_OVERRIDE, entryWorkerName);\n\t\t\t\treturn ctx.miniflare.dispatchFetch(request, {\n\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tviteDevServer.middlewares.use(\"/cdn-cgi/handler/\", requestHandler);\n\t\t},\n\t};\n});\n","import { cleanUrl, createPlugin } from \"../utils\";\n\nconst wasmInitRE = /\\.wasm\\?init$/;\n\n/**\n * Plugin to support the `.wasm?init` extension\n */\nexport const wasmHelperPlugin = createPlugin(\"wasm-helper\", (ctx) => {\n\treturn {\n\t\tenforce: \"pre\",\n\t\tapplyToEnvironment(environment) {\n\t\t\treturn ctx.getWorkerConfig(environment.name) !== undefined;\n\t\t},\n\t\tload: {\n\t\t\tfilter: { id: wasmInitRE },\n\t\t\thandler(id) {\n\t\t\t\t// Fallback for when filter is not applied\n\t\t\t\t// TODO: remove when we drop support for Vite 6\n\t\t\t\tif (!wasmInitRE.test(id)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn `\n\t\t\t\t\timport wasm from \"${cleanUrl(id)}\";\n\t\t\t\t\texport default function(opts = {}) {\n\t\t\t\t\t\treturn WebAssembly.instantiate(wasm, opts);\n\t\t\t\t\t}\n\t\t\t\t`;\n\t\t\t},\n\t\t},\n\t};\n});\n","import { assertWranglerVersion } from \"./assert-wrangler-version\";\nimport { DEFAULT_COMPAT_DATE } from \"./build-constants\";\nimport { PluginContext } from \"./context\";\nimport { resolvePluginConfig } from \"./plugin-config\";\nimport { additionalModulesPlugin } from \"./plugins/additional-modules\";\nimport { configPlugin } from \"./plugins/config\";\nimport { debugPlugin } from \"./plugins/debug\";\nimport { devPlugin } from \"./plugins/dev\";\nimport {\n\tnodeJsAlsPlugin,\n\tnodeJsCompatPlugin,\n\tnodeJsCompatWarningsPlugin,\n} from \"./plugins/nodejs-compat\";\nimport { outputConfigPlugin } from \"./plugins/output-config\";\nimport { previewPlugin } from \"./plugins/preview\";\nimport { rscPlugin } from \"./plugins/rsc\";\nimport { shortcutsPlugin } from \"./plugins/shortcuts\";\nimport { triggerHandlersPlugin } from \"./plugins/trigger-handlers\";\nimport { tunnelPlugin } from \"./plugins/tunnel\";\nimport {\n\tvirtualClientFallbackPlugin,\n\tvirtualModulesPlugin,\n} from \"./plugins/virtual-modules\";\nimport { wasmHelperPlugin } from \"./plugins/wasm\";\nimport { debuglog } from \"./utils\";\nimport type { SharedContext } from \"./context\";\nimport type { PluginConfig } from \"./plugin-config\";\nimport type { CompatDate } from \"@cloudflare/workers-utils\";\nimport type * as vite from \"vite\";\n\n// TODO: simplify this function in the next major release (DEVX-2533)\n/**\n * @deprecated Use today's date instead (as `YYYY-MM-DD`)\n *\n * Gets the compatibility date to use with the local workerd version.\n *\n * Note: the function's signature is as is because it needs to be backward compatibly with\n *       a previous iteration of this, it will be simplified in the next major version of this package.\n *\n * @param _options Unused argument (present only for backward compatibility)\n * @returns Object containing the compatibility date (this is not the date directly for backward compatibility)\n */\nexport function getLocalWorkerdCompatibilityDate(_options?: {\n\tprojectPath?: string;\n}): { date: CompatDate; source: \"workerd\" | \"fallback\" } {\n\treturn { date: DEFAULT_COMPAT_DATE, source: \"workerd\" };\n}\n\nexport type { PluginConfig } from \"./plugin-config\";\nexport type { WorkerConfig } from \"./workers-configs\";\n\nconst sharedContext: SharedContext = {\n\thasShownWorkerConfigWarnings: false,\n\trestartingDevServerCount: 0,\n\ttunnelHostnames: new Set(),\n};\n\nawait assertWranglerVersion();\n\n/**\n * Vite plugin that enables a full-featured integration between Vite and the Cloudflare Workers runtime.\n *\n * See the [README](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare#readme) for more details.\n *\n * @param pluginConfig An optional {@link PluginConfig} object.\n */\nexport function cloudflare(pluginConfig: PluginConfig = {}): vite.Plugin[] {\n\tconst ctx = new PluginContext(sharedContext);\n\n\treturn [\n\t\t{\n\t\t\tname: \"vite-plugin-cloudflare\",\n\t\t\tsharedDuringBuild: true,\n\t\t\tconfig(userConfig, env) {\n\t\t\t\tctx.setResolvedPluginConfig(\n\t\t\t\t\tresolvePluginConfig(pluginConfig, userConfig, env)\n\t\t\t\t);\n\n\t\t\t\tif (env.command === \"build\") {\n\t\t\t\t\tprocess.env.CLOUDFLARE_VITE_BUILD = \"true\";\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync configureServer(viteDevServer) {\n\t\t\t\t// Patch the `server.restart` method to track whether the server is restarting or not.\n\t\t\t\tconst restartServer = viteDevServer.restart.bind(viteDevServer);\n\t\t\t\tviteDevServer.restart = async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.beginRestartingDevServer();\n\t\t\t\t\t\tdebuglog(\"From server.restart(): Restarting server...\");\n\t\t\t\t\t\tawait restartServer();\n\t\t\t\t\t\tdebuglog(\"From server.restart(): Restarted server...\");\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tctx.endRestartingDevServer();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\tconfigPlugin(ctx),\n\t\trscPlugin(ctx),\n\t\tdevPlugin(ctx),\n\t\ttunnelPlugin(ctx),\n\t\tpreviewPlugin(ctx),\n\t\tshortcutsPlugin(ctx),\n\t\tdebugPlugin(ctx),\n\t\ttriggerHandlersPlugin(ctx),\n\t\tvirtualModulesPlugin(ctx),\n\t\tvirtualClientFallbackPlugin(ctx),\n\t\toutputConfigPlugin(ctx),\n\t\twasmHelperPlugin(ctx),\n\t\tadditionalModulesPlugin(ctx),\n\t\tnodeJsAlsPlugin(ctx),\n\t\tnodeJsCompatPlugin(ctx),\n\t\tnodeJsCompatWarningsPlugin(ctx),\n\t];\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,175,177,178,179,180,186,187,194,195,196,197,198,200,201,202,203,204,205,206,248,249,250,251,252,253,254,255,263,264,265,266,267,268,269,270,271,272,273,274,275,276],"mappings":"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BAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,OAAO;AAC9C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,gBAAgB,OAAO,MAAM;AAC7C,iBAAgB,g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,cAAYA,WAAS,+BAA+B;;EAG7D,KAAK,6BAA8B;AACjC,UAAO;;;AAIX,QAAO,UAAU;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;;;;;CCvdD,MAAM0B,yBAA6C;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;CAGD,MAAMC,+BAA6B,EAAE;AAGrC,QAAO,eAAeA,8BAA4B,KAAK;;;;CAKvD,MAAM,6BAA6B,EAAE;AAGrC,QAAO,eAAe,4BAA4B,KAAK;;;;;CAMvD,SAAS,sBAAuB,QAAQ;EACtC,IAAIC,WAAS,2BAA2B;AAExC,MAAIA,aAAW,OACb,YAAS,OAAO,KAAK,OAAO;AAG9B,SAAOA;;AAGT,MAAK,IAAIC,MAAI,GAAGA,MAAIH,uBAAqB,QAAQ,EAAEG,KAAG;EACpD,MAAM,MAAMH,uBAAqBG;EACjC,MAAM,gBAAgB,IAAI,aAAa;AACvC,+BAA2B,OAAO,6BAA2B,iBAC3D;;AAGJ,QAAO,UAAU;EACf;EACA;EACA;EACD;;;;;;CC5ID,MAAM,EACJ,sBACA;CAGF,IAAM,UAAN,MAAM,QAAQ;;EAEZ,QAAQ;;EAER,OAAO;;EAEP,SAAS;;EAET,QAAQ;;EAER;;;;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QACA,eACA,WACA,KAAK,EACN;CACD,MAAM,eAAe,YACnB,aACA,aACA,QACA,gBACA,WACA,KAAK,EACN;CACD,MAAMG,UAAQ,0BACZ,aACA,QACA,OAAO,SAAS,aAAa,SAAS,EAAE,EACxC,WACD;CACD,MAAM,cAAc;EAElB;EACA,oBAAoB,YAClB,aACA,aACA,QACA,sBACA,2BACA,KAAK,EACN;EACD,qBAAqB,YACnB,aACA,aACA,QACA,uBACA,eACA,EAAE,CACH;EACD,aAAa,YACX,aACA,aACA,QACA,eACAH,YACA,sBACD;EACD,cAAc,YACZ,aACA,aACA,QACA,gBACAA,YACA,iBACD;EACD,UAAU,6BACR,aACA,aACA,QACA,WACD;EACD,OAAO,0BAA0B,aAAa,aAAa,QAAQ,QAAQ;EAC3E,MAAM,kCACJ,aACA,wBACA,aACA,QACA,QACA,sBAAsBA,aAAW,aACjC,cAAc,QAAQ,EACtB,KAAK,EACN;EACD,MAAM,uBAAuB,YAC3B,aACA,aACA,QACA,QACAA,YACA,KAAK,EACN,GAAG,8BACF,YACA,YACE,aACA,aACA,QACA,QACAA,YACA,KAAK,EACN,CACF;EACD,yBAAyB,YACvB,aACA,aACA,QACA,2BACA,WACA,KAAK,EACN;EACD,qBAAqB,YACnB,aACA,aACA,QACA,uBACA,WACA,KAAK,EACN;EACD,UAAU,iCACR,YACA,YACE,aACA,aACA,QACA,YACAA,YACA,KAAK,EACN,CACF;EACD;EACA;EACA,UAAU,YACR,aACA,aACA,QACA,YACA,kBACA,EAAE,OAAO,KAAK,GAAG,CAClB;EACD,QAAQ,2BAA2B,aAAa,aAAa,OAAO;EACpE,QAAQ,2BAA2B,aAAa,aAAa,OAAO;EACpE,WAAW,8BAA8B,aAAa,aAAa,OAAO;EAC1E;EACA;EACA;EAEA,MAAM,eACJ,aACA,aACA,WACA,QACA,SACA,QACA,aAAa,QAAQ,EACrB,EAAE,CACH;EACD,SAAS,eACP,aACA,aACA,WACA,QACA,SACA,WACA,gBAAgB,QAAQ,EACxB,KAAK,EACN;EACD,QAAQ,eACN,aACA,aACA,WACA,QACA,SACA,UACA,gBAAgB,QAAQ,EACxB,EAAE,CACH;EACD,iBAAiB,eACf,aACA,aACA,WACA,QACA,SACA,mBACA,yBAAyB,SAAS,6BAA6B,EAC/D,EACE,UAAU,EAAE,EACb,CACF;EACD,WAAW,eACT,aACA,aACA,WACA,QACA,SACA,aACA,IACE,qBAAqB,SAAS,wBAAwB,EACtD,2BACD,EACD,EAAE,CACH;EACD,YAAY,YACV,aACA,aACA,QACA,cACA,oBACA,EAAE,CACH;EACD,eAAe,eACb,aACA,aACA,WACA,QACA,SACA,iBACA,qBAAqB,SAAS,kBAAkB,EAChD,EAAE,CACH;EACD,cAAc,eACZ,aACA,aACA,WACA,QACA,SACA,gBACA,4BACA,EAAE,CACH;EACD,YAAY,eACV,aACA,aACA,WACA,QACA,SACA,cACA,qBAAqB,SAAS,OAAO,MAAM,WAAW,EACtD,KAAK,EACN;EACD,YAAY,eACV,aACA,aACA,WACA,QACA,SACA,cACA,qBAAqB,SAAS,yBAAyB,EACvD,EAAE,CACH;EACD,QAAQ,eACN,aACA,aACA,WACA,QACA,SACA,UACA,eAAe,QAAQ,EACvB;GAAE,WAAW,EAAE;GAAE,WAAW,EAAE;GAAE,CACjC;EACD,YAAY,eACV,aACA,aACA,WACA,QACA,SACA,cACA,qBAAqB,SAAS,kBAAkB,EAChD,EAAE,CACH;EACD,cAAc,eACZ,aACA,aACA,WACA,QACA,SACA,gBACA,qBAAqB,SAAS,kBAAkB,EAChD,EAAE,CACH;EACD,WAAW,eACT,aACA,aACA,WACA,QACA,SACA,aACA,qBAAqB,SAAS,yBAAyB,EACvD,EAAE,CACH;EACD,sBAAsB,eACpB,aACA,aACA,WACA,QACA,SACA,wBACA,qBAAqB,SAAS,iCAAiC,EAC/D,EAAE,CACH;EACD,WAAW,eACT,aACA,aACA,WACA,QACA,SACA,aACA,qBAAqB,SAAS,wBAAwB,EACtD,EAAE,CACH;EACD,YAAY,eACV,aACA,aACA,WACA,QACA,SACA,cACA,qBAAqB,SAAS,0BAA0B,EACxD,EAAE,CACH;EACD,UAAU,eACR,aACA,aACA,WACA,QACA,SACA,YACA,qBAAqB,SAAS,uBAAuB,EACrD,EAAE,CACH;EACD,2BAA2B,eACzB,aACA,aACA,WACA,QACA,SACA,6BACA,qBAAqB,SAAS,+BAA+B,EAC7D,EAAE,CACH;EACD,qBAAqB,eACnB,aACA,aACA,WACA,QACA,SACA,uBACA,qBAAqB,SAAS,+BAA+B,EAC7D,EAAE,CACH;EACD,mBAAmB,eACjB,aACA,aACA,WACA,QACA,SACA,qBACA,qBAAqB,SAAS,+BAA+B,EAC7D,EAAE,CACH;EACD,gBAAgB,eACd,aACA,aACA,WACA,QACA,SACA,kBACA,uBACA,KAAK,EACN;EACD,0BAA0B,eACxB,aACA,aACA,WACA,QACA,SACA,4BACA,gCACA,KAAK,EACN;EACD,QAAQ,eACN,aACA,aACA,WACA,QACA,SACA,UACA,uBAAuB,QAAQ,EAC/B,EAAE,CACH;EACD,SAAS,eACP,aACA,aACA,WACA,QACA,SACA,WACA,2BAA2B,QAAQ,EACnC,KAAK,EACN;EACD,IAAI,eACF,aACA,aACA,WACA,QACA,SACA,MACA,kBAAkB,QAAQ,EAC1B,KAAK,EACN;EACD,QAAQ,eACN,aACA,aACA,WACA,QACA,SACA,UACA,2BAA2B,QAAQ,EACnC,KAAK,EACN;EACD,QAAQ,eACN,aACA,aACA,WACA,QACA,SACA,UACA,2BAA2B,QAAQ,EACnC,KAAK,EACN;EACD,OAAO,eACL,aACA,aACA,WACA,QACA,SACA,SACA,2BAA2B,QAAQ,EACnC,KAAK,EACN;EACD,WAAW,eACT,aACA,aACA,WACA,QACA,SACA,aACA,qBAAqB,SAAS,wBAAwB,EACtD,EAAE,CACH;EACD,uBAAuB,eACrB,aACA,aACA,WACA,QACA,SACA,yBACA,qBAAqB,SAAS,kCAAkC,EAChE,EAAE,CACH;EACD,WAAW,eACT,aACA,aACA,WACA,QACA,SACA,aACA,qBAAqB,SAAS,yBAAyB,EACvD,EAAE,CACH;EACD,oBAAoB,eAClB,aACA,aACA,WACA,QACA,SACA,sBACA,qBAAqB,SAAS,0BAA0B,EACxD,EAAE,CACH;EACD,UAAU,eACR,aACA,aACA,WACA,QACA,SACA,YACA,qBAAqB,SAAS,wBAAwB,EACtD,EAAE,CACH;EACD,gBAAgB,eACd,aACA,aACA,WACA,QACA,SACA,kBACA,qBAAqB,SAAS,4BAA4B,EAC1D,EAAE,CACH;EACD,YAAY,eACV,aACA,aACA,WACA,QACA,SACA,cACA,qBAAqB,SAAS,yBAAyB,EACvD,EAAE,CACH;EACD,cAAc,eACZ,aACA,aACA,WACA,QACA,SACA,gBACA,qBAAqB,SAAS,0BAA0B,EACxD,EAAE,CACH;EACD,cAAc,eACZ,aACA,aACA,WACA,QACA,SACA,gBACA,qBAAqB,SAAS,0BAA0B,EACxD,EAAE,CACH;EACD,kBAAkB,eAChB,aACA,aACA,WACA,QACA,SACA,oBACA,+BAA+B,QAAQ,EACvC,KAAK,EACN;EACD,SAAS,YACP,aACA,aACA,QACA,WACA,wBAAwB,QAAQ,EAChC,EACE,UAAU,EAAE,EACb,CACF;EACD,WAAW,YACT,aACA,aACA,QACA,aACA,WACA,KAAK,EACN;EACD,QAAQ,YACN,aACA,aACA,QACA,UACA,WACA,KAAK,EACN;EACD,YAAY,YACV,aACA,aACA,QACA,cACA,WACA,KAAK,EACN;EACD,oBAAoB,YAClB,aACA,aACA,QACA,sBACA,WACA,KAAK,EACN;EACD,SAAS,YACP,aACA,aACA,QACA,WACA,WACA,KAAK,EACN;EACD,oBAAoB,YAClB,aACA,aACA,QACA,sBACA,WACA,KAAK,EACN;EACD,eAAe,YACb,aACA,aACA,QACA,iBACA,uBACA,KAAK,EACN;EACD,OAAO,YACL,aACA,aACA,QACA,SACA,eACA,KAAK,EACN;EACD,mBAAmB,YACjB,aACA,aACA,QACA,qBACA,QAAQ,UAAU,eAAe,EACjC,KAAK,EACN;EACD,gBAAgB,YACd,aACA,aACA,QACA,kBACA,uBACA,EAAE,SAAS,CAAC,WAAW,EAAE,CAC1B;EACD,UAAU,YACR,aACA,aACA,QACA,YACA,uBAAuB,QAAQ,EAC/B,KAAK,EACN;EACF;AACD,sC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AAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAK;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAK;CAAG;CAAI;CAAK;CAAK;CAAK;CAAI;CAAK;CAAM;CAAI;CAAI;CAAM;CAAI;CAAG;CAAI;CAAM;CAAG;CAAK;CAAM;CAAI;CAAM;CAAK;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAK;CAAI;CAAK;CAAI;CAAK;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAM;CAAG;CAAM;CAAI;CAAG;CAAM;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAK;CAAM;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAM;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAM;CAAI;CAAG;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAI;CAAG;CAAK;CAAI;CAAI;CAAI;CAAK;CAAI;CAAK;CAAI;CAAG;CAAG;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAK;CAAI;CAAI;CAAG;CAAG;CAAM;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;C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"}