{"version":3,"file":"test-internal.mjs","names":["DEFAULT_EVICTION_OPTIONS: DurableObjectEvictionOptions","sameIsolatedNamespaces: DurableObjectNamespace[] | undefined","env","DEFAULT_EVICTION_OPTIONS","errors: unknown[]","timeoutId: ReturnType<typeof setTimeout> | undefined","globalWaitUntil: unknown[]","exports","releaseStarted: (() => void) | undefined","OPTIONAL_DURABLE_OBJECT_KEYS: ReadonlySet<\n\t(typeof DURABLE_OBJECT_KEYS)[number]\n>","runtimeEnv","env","DurableObjectClass","#controller","timestamp: Date","attempts: number","metadata: MessageBatchMetadata","retryMessages: QueueRetryMessage[]","explicitAcks: string[]","DEFAULT_EVICTION_OPTIONS: DurableObjectEvictionOptions","chunks: Uint8Array[]","operations: WorkflowIntrospectionOperation[]","streamResult: WorkflowIntrospectionStreamResult","workflow: WorkflowBinding","#sessionId","#operations","#instanceIntrospectors","#disposed","instanceId: string","#instanceModifierPromise","#instanceModifier"],"sources":["../../../../src/worker/d1.ts","../../../../src/worker/env.ts","../../../../src/worker/durable-objects.ts","../../../../src/worker/wait-until.ts","../../../../src/worker/patch-ctx.ts","../../../../src/worker/entrypoints.ts","../../../../src/worker/events.ts","../../../../src/worker/reset.ts","../../../../src/worker/secrets-store.ts","../../../../../workflows-shared/src/introspection.ts","../../../../src/worker/workflows.ts"],"sourcesContent":["import type { D1Migration } from \"../shared/d1\";\n\nfunction isD1Database(v: unknown): v is D1Database {\n\treturn (\n\t\ttypeof v === \"object\" &&\n\t\tv !== null &&\n\t\tv.constructor.name === \"D1Database\" &&\n\t\t\"prepare\" in v &&\n\t\ttypeof v.prepare === \"function\" &&\n\t\t\"batch\" in v &&\n\t\ttypeof v.batch === \"function\" &&\n\t\t\"exec\" in v &&\n\t\ttypeof v.exec === \"function\"\n\t);\n}\n\nfunction isD1Migration(v: unknown): v is D1Migration {\n\treturn (\n\t\ttypeof v === \"object\" &&\n\t\tv !== null &&\n\t\t\"name\" in v &&\n\t\ttypeof v.name === \"string\" &&\n\t\t\"queries\" in v &&\n\t\tArray.isArray(v.queries) &&\n\t\tv.queries.every((query) => typeof query === \"string\")\n\t);\n}\nfunction isD1Migrations(v: unknown): v is D1Migration[] {\n\treturn Array.isArray(v) && v.every(isD1Migration);\n}\n\nexport async function applyD1Migrations(\n\tdb: D1Database,\n\tmigrations: D1Migration[],\n\tmigrationsTableName = \"d1_migrations\"\n) {\n\tif (!isD1Database(db)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'applyD1Migrations': parameter 1 is not of type 'D1Database'.\"\n\t\t);\n\t}\n\tif (!isD1Migrations(migrations)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'applyD1Migrations': parameter 2 is not of type 'D1Migration[]'.\"\n\t\t);\n\t}\n\t// noinspection SuspiciousTypeOfGuard\n\tif (typeof migrationsTableName !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'applyD1Migrations': parameter 3 is not of type 'string'.\"\n\t\t);\n\t}\n\n\tconst escapeId = (id: string) => `\"${id.replace(/\"/g, '\"\"')}\"`;\n\tconst escapedTableName = escapeId(migrationsTableName);\n\n\t// Create migrations table if it doesn't exist\n\tconst schema = `CREATE TABLE IF NOT EXISTS ${escapedTableName} (\n\t\tid         INTEGER PRIMARY KEY AUTOINCREMENT,\n\t\tname       TEXT UNIQUE,\n\t\tapplied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL\n\t);`;\n\tawait db.prepare(schema).run();\n\n\t// Find applied migrations\n\tconst appliedMigrationNamesResult = await db\n\t\t.prepare(`SELECT name FROM ${escapedTableName};`)\n\t\t.all<{ name: string }>();\n\tconst appliedMigrationNames = appliedMigrationNamesResult.results.map(\n\t\t({ name }) => name\n\t);\n\n\t// Apply un-applied migrations\n\tconst insertMigrationStmt = db.prepare(\n\t\t`INSERT INTO ${escapedTableName} (name) VALUES (?);`\n\t);\n\tfor (const migration of migrations) {\n\t\tif (appliedMigrationNames.includes(migration.name)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst queries = migration.queries.map((query) => db.prepare(query));\n\t\tqueries.push(insertMigrationStmt.bind(migration.name));\n\t\tawait db.batch(queries);\n\t}\n}\n","import assert from \"node:assert\";\nimport { exports } from \"cloudflare:workers\";\n\nexport { env } from \"cloudflare:workers\";\n\n/**\n * For reasons that aren't clear to me, just `SELF = exports.default` ends up with SELF being\n * undefined in a test. This Proxy solution works.\n */\nexport const SELF = new Proxy(\n\t{},\n\t{\n\t\tget(_, p) {\n\t\t\tconst target = exports.default as unknown as Record<\n\t\t\t\tstring | symbol,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tconst value = target[p];\n\t\t\treturn typeof value === \"function\" ? value.bind(target) : value;\n\t\t},\n\t}\n);\n\nexport function getSerializedOptions(): SerializedOptions {\n\tassert(typeof __vitest_worker__ === \"object\", \"Expected global Vitest state\");\n\tconst options = __vitest_worker__.providedContext.cloudflarePoolOptions;\n\t// `options` should always be defined when running tests\n\n\tassert(\n\t\toptions !== undefined,\n\t\t\"Expected serialised options, got keys: \" +\n\t\t\tObject.keys(__vitest_worker__.providedContext).join(\", \")\n\t);\n\tconst parsedOptions = JSON.parse(options);\n\treturn {\n\t\t...parsedOptions,\n\t\tdurableObjectBindingDesignators: new Map(\n\t\t\tparsedOptions.durableObjectBindingDesignators\n\t\t),\n\t};\n}\n\nexport function getResolvedMainPath(\n\tforBindingType: \"service\" | \"Durable Object\"\n): string {\n\tconst options = getSerializedOptions();\n\tif (options.main === undefined) {\n\t\tthrow new Error(\n\t\t\t`Using ${forBindingType} bindings to the current worker requires \\`poolOptions.workers.main\\` to be set to your worker's entrypoint: ${JSON.stringify(options)}`\n\t\t);\n\t}\n\treturn options.main;\n}\n","import assert from \"node:assert\";\nimport { env, exports } from \"cloudflare:workers\";\nimport workerdUnsafe from \"workerd:unsafe\";\nimport { getSerializedOptions } from \"./env\";\nimport type { __VITEST_POOL_WORKERS_RUNNER_DURABLE_OBJECT__ } from \"./index\";\nimport type { DurableObjectEvictionOptions } from \"workerd:unsafe\";\n\nconst DEFAULT_EVICTION_OPTIONS: DurableObjectEvictionOptions = {\n\twebSockets: \"hibernate\",\n};\n\nconst CF_KEY_ACTION = \"vitestPoolWorkersDurableObjectAction\";\n\nlet nextActionId = 0;\nconst kUseResponse = Symbol(\"kUseResponse\");\nconst actionResults = new Map<number /* id */, unknown>();\n\nfunction isDurableObjectNamespace(v: unknown): v is DurableObjectNamespace {\n\treturn (\n\t\tv instanceof Object &&\n\t\t/^(?:Loopback)?DurableObjectNamespace$/.test(v.constructor.name) &&\n\t\t\"newUniqueId\" in v &&\n\t\ttypeof v.newUniqueId === \"function\" &&\n\t\t\"idFromName\" in v &&\n\t\ttypeof v.idFromName === \"function\" &&\n\t\t\"idFromString\" in v &&\n\t\ttypeof v.idFromString === \"function\" &&\n\t\t\"get\" in v &&\n\t\ttypeof v.get === \"function\"\n\t);\n}\nfunction isDurableObjectStub(v: unknown): v is DurableObjectStub {\n\treturn (\n\t\ttypeof v === \"object\" &&\n\t\tv !== null &&\n\t\t(v.constructor.name === \"DurableObject\" ||\n\t\t\tv.constructor.name === \"WorkerRpc\") &&\n\t\t\"fetch\" in v &&\n\t\ttypeof v.fetch === \"function\" &&\n\t\t\"id\" in v &&\n\t\ttypeof v.id === \"object\"\n\t);\n}\n\n// Whilst `sameIsolatedNamespaces` depends on `getSerializedOptions()`,\n// `durableObjectBindingDesignators` is derived from the user Durable Object\n// config. If this were to change, the Miniflare options would change too\n// restarting this worker. This means we only need to compute this once, as it\n// will automatically invalidate when needed.\nlet sameIsolatedNamespaces: DurableObjectNamespace[] | undefined;\nfunction getSameIsolateNamespaces(): DurableObjectNamespace[] {\n\tif (sameIsolatedNamespaces !== undefined) {\n\t\treturn sameIsolatedNamespaces;\n\t}\n\tsameIsolatedNamespaces = [];\n\n\tconst options = getSerializedOptions();\n\tif (options.durableObjectBindingDesignators === undefined) {\n\t\treturn sameIsolatedNamespaces;\n\t}\n\n\tfor (const [key, designator] of options.durableObjectBindingDesignators) {\n\t\t// We're assuming the user isn't able to guess the current worker name, so\n\t\t// if a `scriptName` is set, the designator is for another worker.\n\t\tif (designator.scriptName !== undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst namespace = env[key] ?? (exports as Record<string, unknown>)?.[key];\n\t\tassert(\n\t\t\tisDurableObjectNamespace(namespace),\n\t\t\t`Expected ${key} to be a DurableObjectNamespace binding`\n\t\t);\n\t\tsameIsolatedNamespaces.push(namespace);\n\t}\n\n\treturn sameIsolatedNamespaces;\n}\n\nfunction assertSameIsolate(stub: DurableObjectStub) {\n\t// Make sure our special `cf` requests get handled correctly and aren't\n\t// routed to user fetch handlers\n\tconst idString = stub.id.toString();\n\tconst namespaces = getSameIsolateNamespaces();\n\t// Try to recreate the stub's ID using each same-isolate namespace.\n\t// `idFromString()` will throw if the ID is not for that namespace.\n\t// If a call succeeds, we know the ID is for an object in this isolate.\n\tfor (const namespace of namespaces) {\n\t\ttry {\n\t\t\tnamespace.idFromString(idString);\n\t\t\treturn;\n\t\t} catch {}\n\t}\n\t// If no calls succeed, we know the ID is for an object outside this isolate,\n\t// and we won't be able to use the `actionResults` map to share data.\n\tthrow new Error(\n\t\t\"Durable Object test helpers can only be used with stubs pointing to objects defined within the same worker.\"\n\t);\n}\n\nasync function runInStub<O extends DurableObject, R>(\n\tstub: Fetcher,\n\tcallback: (instance: O, state: DurableObjectState) => R | Promise<R>\n): Promise<R> {\n\tconst id = nextActionId++;\n\tactionResults.set(id, callback);\n\n\tconst response = await stub.fetch(\"http://x\", {\n\t\tcf: { [CF_KEY_ACTION]: id },\n\t\t// Prevent the runtime from following redirects returned by the callback,\n\t\t// which would re-enter `maybeHandleRunRequest` with a consumed action ID.\n\t\tredirect: \"manual\",\n\t});\n\n\t// `result` may be `undefined`\n\tassert(actionResults.has(id), `Expected action result for ${id}`);\n\tconst result = actionResults.get(id);\n\tactionResults.delete(id);\n\n\tif (result === kUseResponse) {\n\t\treturn response as R;\n\t} else if (response.ok) {\n\t\treturn result as R;\n\t} else {\n\t\tthrow result;\n\t}\n}\n\n// See public facing `cloudflare:test` types for docs\n// (`async` so it throws asynchronously/rejects)\nexport async function runInDurableObject<O extends DurableObject, R>(\n\tstub: DurableObjectStub,\n\tcallback: (instance: O, state: DurableObjectState) => R | Promise<R>\n): Promise<R> {\n\tif (!isDurableObjectStub(stub)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'runInDurableObject': parameter 1 is not of type 'DurableObjectStub'.\"\n\t\t);\n\t}\n\tif (typeof callback !== \"function\") {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'runInDurableObject': parameter 2 is not of type 'function'.\"\n\t\t);\n\t}\n\n\tassertSameIsolate(stub);\n\treturn runInStub(stub, callback);\n}\n\nasync function runAlarm(instance: DurableObject, state: DurableObjectState) {\n\tconst alarm = await state.storage.getAlarm();\n\tif (alarm === null) {\n\t\treturn false;\n\t}\n\tawait state.storage.deleteAlarm();\n\tawait instance.alarm?.();\n\treturn true;\n}\n// See public facing `cloudflare:test` types for docs\n// (`async` so it throws asynchronously/rejects)\nexport async function runDurableObjectAlarm(\n\tstub: DurableObjectStub\n): Promise<boolean /* ran */> {\n\tif (!isDurableObjectStub(stub)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'runDurableObjectAlarm': parameter 1 is not of type 'DurableObjectStub'.\"\n\t\t);\n\t}\n\treturn await runInDurableObject(stub, runAlarm);\n}\n\n// See public facing `cloudflare:test` types for docs\n// (`async` so it throws asynchronously/rejects)\nexport async function evictDurableObject(\n\tstub: DurableObjectStub,\n\toptions: DurableObjectEvictionOptions = DEFAULT_EVICTION_OPTIONS\n): Promise<void> {\n\tif (!isDurableObjectStub(stub)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'evictDurableObject': parameter 1 is not of type 'DurableObjectStub'.\"\n\t\t);\n\t}\n\tawait workerdUnsafe.evict(stub, options);\n}\n\n/**\n * Internal method for running `callback` inside the I/O context of the\n * Runner Durable Object.\n *\n * Tests run in this context by default. This is required for performing\n * operations that use Vitest's RPC mechanism as the Durable Object\n * owns the RPC WebSocket. For example, importing modules or sending logs.\n * Trying to perform those operations from a different context (e.g. within\n * a `export default { fetch() {} }` handler or user Durable Object's `fetch()`\n * handler) without using this function will result in a `Cannot perform I/O on\n * behalf of a different request` error.\n */\nexport function runInRunnerObject<R>(\n\tcallback: (\n\t\tinstance: __VITEST_POOL_WORKERS_RUNNER_DURABLE_OBJECT__\n\t) => R | Promise<R>\n): Promise<R> {\n\t// Runner DO is ephemeral (ColoLocalActorNamespace), which has .get(name)\n\t// instead of the standard idFromName()/get(id) API.\n\tconst ns = env[\"__VITEST_POOL_WORKERS_RUNNER_OBJECT\"] as unknown as {\n\t\tget(name: string): Fetcher;\n\t};\n\tconst stub = ns.get(\"singleton\");\n\treturn runInStub(stub, callback);\n}\n\nexport async function maybeHandleRunRequest(\n\trequest: Request,\n\tinstance: unknown,\n\tstate?: DurableObjectState\n): Promise<Response | undefined> {\n\tconst actionId = request.cf?.[CF_KEY_ACTION];\n\tif (actionId === undefined) {\n\t\treturn;\n\t}\n\n\tassert(typeof actionId === \"number\", `Expected numeric ${CF_KEY_ACTION}`);\n\ttry {\n\t\tconst callback = actionResults.get(actionId);\n\t\tassert(typeof callback === \"function\", `Expected callback for ${actionId}`);\n\t\tconst result = await callback(instance, state);\n\t\t// If the callback returns a `Response`, we can't pass it back to the\n\t\t// caller through `actionResults`. If we did that, we'd get a `Cannot\n\t\t// perform I/O on behalf of a different Durable Object` error if we\n\t\t// tried to use it. Instead, we set a flag in `actionResults` that\n\t\t// instructs the caller to use the `Response` returned by\n\t\t// `DurableObjectStub#fetch()` directly.\n\t\tif (result instanceof Response) {\n\t\t\tactionResults.set(actionId, kUseResponse);\n\t\t\treturn result;\n\t\t} else {\n\t\t\tactionResults.set(actionId, result);\n\t\t}\n\t\treturn new Response(null, { status: 204 });\n\t} catch (e) {\n\t\tactionResults.set(actionId, e);\n\t\treturn new Response(null, { status: 500 });\n\t}\n}\n\nexport async function listDurableObjectIds(\n\tnamespace: DurableObjectNamespace\n): Promise<DurableObjectId[]> {\n\tif (!isDurableObjectNamespace(namespace)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'listDurableObjectIds': parameter 1 is not of type 'DurableObjectNamespace'.\"\n\t\t);\n\t}\n\n\t// To get an instance of `DurableObjectNamespace`, the user must've bound the\n\t// namespace to the test runner worker, since `DurableObjectNamespace` has no\n\t// user-accessible constructor. This means `namespace` must be in `globalEnv`.\n\t// We can use this to find the bound name for this binding. We inject a\n\t// mapping between bound names and Durable Object designators. We pass the\n\t// bound name to Miniflare's Node-side loopback to find all IDs on disk.\n\tconst boundName = Object.entries(env).find(\n\t\t(entry) => namespace === entry[1]\n\t)?.[0];\n\tassert(boundName !== undefined, \"Expected to find bound name for namespace\");\n\n\tconst options = getSerializedOptions();\n\tconst searchParams = new URLSearchParams({ binding_name: boundName });\n\tif (options.selfName !== undefined) {\n\t\tsearchParams.set(\"worker_name\", options.selfName);\n\t}\n\n\tconst url = `http://placeholder/durable-objects?${searchParams.toString()}`;\n\tconst res = await env.__VITEST_POOL_WORKERS_LOOPBACK_SERVICE.fetch(url);\n\tassert.strictEqual(res.status, 200);\n\tconst ids = await res.json();\n\tassert(Array.isArray(ids));\n\treturn ids.map((id) => {\n\t\tassert(typeof id === \"string\");\n\t\treturn namespace.idFromString(id);\n\t});\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\n/**\n * In production, Workers have a 30-second limit for `waitUntil` promises.\n * We use the same limit here. If promises are still pending after this,\n * they almost certainly indicate a bug (e.g. a `waitUntil` promise that\n * will never resolve). We log a warning and move on so the test suite\n * doesn't hang indefinitely.\n */\nlet WAIT_UNTIL_TIMEOUT = 30_000;\n\n/** @internal — only exposed for tests */\nexport function setWaitUntilTimeout(ms: number): void {\n\tWAIT_UNTIL_TIMEOUT = ms;\n}\n\nconst kTimedOut = Symbol(\"kTimedOut\");\n\n/**\n * Empty array and wait for all promises to resolve until no more added.\n * If a single promise rejects, the rejection will be passed-through.\n * If multiple promises reject, the rejections will be aggregated.\n *\n * If any batch of promises hasn't settled after {@link WAIT_UNTIL_TIMEOUT}ms,\n * a warning is logged and the remaining promises are abandoned.\n */\nexport async function waitForWaitUntil(\n\t/* mut */ waitUntil: unknown[]\n): Promise<void> {\n\tconst errors: unknown[] = [];\n\n\twhile (waitUntil.length > 0) {\n\t\tconst batch = waitUntil.splice(0);\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\tconst result = await Promise.race([\n\t\t\tPromise.allSettled(batch).then((results) => ({ results })),\n\t\t\tnew Promise<typeof kTimedOut>(\n\t\t\t\t(resolve) =>\n\t\t\t\t\t(timeoutId = setTimeout(() => resolve(kTimedOut), WAIT_UNTIL_TIMEOUT))\n\t\t\t),\n\t\t]);\n\t\tclearTimeout(timeoutId);\n\n\t\tif (result === kTimedOut) {\n\t\t\t__console.warn(\n\t\t\t\t`[vitest-pool-workers] ${batch.length} waitUntil promise(s) did not ` +\n\t\t\t\t\t`resolve within ${WAIT_UNTIL_TIMEOUT / 1000}s and will be abandoned. ` +\n\t\t\t\t\t`This normally means your Worker's waitUntil handler has a bug ` +\n\t\t\t\t\t`that prevents it from settling (e.g. a fetch that never completes ` +\n\t\t\t\t\t`or a missing resolve/reject call).`\n\t\t\t);\n\t\t\t// Stop draining — any promises added during this batch are also abandoned\n\t\t\twaitUntil.length = 0;\n\t\t\tbreak;\n\t\t}\n\n\t\t// Record all rejected promises\n\t\tfor (const settled of result.results) {\n\t\t\tif (settled.status === \"rejected\") {\n\t\t\t\terrors.push(settled.reason);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (errors.length === 1) {\n\t\t// If there was only one rejection, rethrow it\n\t\tthrow errors[0];\n\t} else if (errors.length > 1) {\n\t\t// If there were more rejections, rethrow them all\n\t\tthrow new AggregateError(errors);\n\t}\n}\n\n// If isolated storage is enabled, we ensure all `waitUntil()`s are `await`ed at\n// the end of each test, as these may contain storage calls (e.g. caching\n// responses). Note we can't wait at the end of `.concurrent` tests, as we can't\n// track which `waitUntil()`s belong to which tests.\n//\n// If isolated storage is disabled, we ensure all `waitUntil()`s are `await`ed\n// at the end of each test *file*. This ensures we don't try to dispose the\n// runtime until all `waitUntil()`s complete.\nconst globalWaitUntil: unknown[] = [];\nexport function registerGlobalWaitUntil(promise: unknown) {\n\tglobalWaitUntil.push(promise);\n}\nexport function waitForGlobalWaitUntil(): Promise<void> {\n\treturn waitForWaitUntil(globalWaitUntil);\n}\n\nexport const handlerContextStore = new AsyncLocalStorage<ExecutionContext>();\nexport function registerHandlerAndGlobalWaitUntil(promise: Promise<unknown>) {\n\tconst handlerContext = handlerContextStore.getStore();\n\tif (handlerContext === undefined) {\n\t\tregisterGlobalWaitUntil(promise);\n\t} else {\n\t\t// `patchAndRunWithHandlerContext()` ensures handler `waitUntil()` calls\n\t\t// `registerGlobalWaitUntil()` too\n\t\thandlerContext.waitUntil(promise);\n\t}\n}\n","import { handlerContextStore, registerGlobalWaitUntil } from \"./wait-until\";\n\nconst patchedHandlerContexts = new WeakSet<ExecutionContext>();\n\n/**\n * Executes the given callback within the provided ExecutionContext,\n * patching the context to ensure that:\n *\n *  - waitUntil calls are registered globally\n *  - ctx.exports shows a warning if accessing missing exports\n */\nexport function patchAndRunWithHandlerContext<T>(\n\t/* mut */ ctx: ExecutionContext,\n\tcallback: () => T\n): T {\n\t// Ensure calls to `ctx.waitUntil()` registered with global wait-until\n\tif (!patchedHandlerContexts.has(ctx)) {\n\t\tpatchedHandlerContexts.add(ctx);\n\n\t\t// Patch `ctx.waitUntil()`\n\t\tconst originalWaitUntil = ctx.waitUntil;\n\t\tctx.waitUntil = (promise: Promise<unknown>) => {\n\t\t\tregisterGlobalWaitUntil(promise);\n\t\t\treturn originalWaitUntil.call(ctx, promise);\n\t\t};\n\n\t\t// Patch `ctx.exports`\n\t\tif (isCtxExportsEnabled(ctx.exports)) {\n\t\t\tObject.defineProperty(ctx, \"exports\", {\n\t\t\t\tvalue: getCtxExportsProxy(ctx.exports),\n\t\t\t});\n\t\t}\n\t}\n\treturn handlerContextStore.run(ctx, callback);\n}\n\n/**\n * Creates a proxy to the `ctx.exports` object that will warn the user if they attempt\n * to access an undefined property. This could be a valid mistake by the user or\n * it could mean that our static analysis of the main Worker's exports missed something.\n */\nexport function getCtxExportsProxy(\n\texports: Cloudflare.Exports\n): Cloudflare.Exports {\n\treturn new Proxy(exports, {\n\t\tget(target, p: keyof Cloudflare.Exports) {\n\t\t\tif (p in target) {\n\t\t\t\treturn target[p];\n\t\t\t}\n\t\t\tconsole.warn(\n\t\t\t\t`Attempted to access 'ctx.exports.${p}', which was not defined for the main Worker.\\n` +\n\t\t\t\t\t`Check that '${p}' is exported as an entry-point from the Worker.\\n` +\n\t\t\t\t\t`The '@cloudflare/vitest-pool-workers' integration tries to infer these exports by analyzing the source code of the main Worker.\\n`\n\t\t\t);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n\n/**\n * Returns true if `ctx.exports` is enabled via compatibility flags.\n */\nexport function isCtxExportsEnabled(\n\texports: Cloudflare.Exports | undefined\n): exports is Cloudflare.Exports {\n\treturn (\n\t\t(globalThis as unknown as { Cloudflare: Cloudflare }).Cloudflare\n\t\t\t?.compatibilityFlags.enable_ctx_exports && exports !== undefined\n\t);\n}\n","import assert from \"node:assert\";\nimport {\n\tDurableObject as DurableObjectClass,\n\tenv as runtimeEnv,\n\tWorkerEntrypoint,\n\tWorkflowEntrypoint,\n} from \"cloudflare:workers\";\nimport { maybeHandleRunRequest, runInRunnerObject } from \"./durable-objects\";\nimport { getResolvedMainPath } from \"./env\";\nimport { patchAndRunWithHandlerContext } from \"./patch-ctx\";\n\n// =============================================================================\n// Common Entrypoint Helpers\n// =============================================================================\n\n/**\n * Internal method for importing a module using Vite's transformation and\n * execution pipeline. Can be called from any I/O context, and will ensure the\n * request is run from within the `__VITEST_POOL_WORKERS_RUNNER_DURABLE_OBJECT__`.\n */\nasync function importModule(\n\tspecifier: string\n): Promise<Record<string, unknown>> {\n\t/**\n\t * We need to run this import inside the Runner Object, or we get errors like:\n\t *  - The Workers runtime canceled this request because it detected that your Worker's code had hung and would never generate a response. Refer to: https://developers.cloudflare.com/workers/observability/errors/\n\t *  - Cannot perform I/O on behalf of a different Durable Object. I/O objects (such as streams, request/response bodies, and others) created in the context of one Durable Object cannot be accessed from a different Durable Object in the same isolate. This is a limitation of Cloudflare Workers which allows us to improve overall performance.\n\t */\n\treturn runInRunnerObject(() => {\n\t\treturn __vitest_mocker__.moduleRunner.import(specifier);\n\t});\n}\n\nconst IGNORED_KEYS = [\"self\"];\n\n/**\n * Create a class extending `superClass` with a `Proxy` as a `prototype`.\n * Unknown accesses on the `prototype` will defer to `getUnknownPrototypeKey()`.\n * `workerd` will only look for RPC methods/properties on the prototype, not the\n * instance. This helps avoid accidentally exposing things over RPC, but makes\n * things a little trickier for us...\n */\nfunction createProxyPrototypeClass<\n\tT extends\n\t\t| typeof WorkerEntrypoint\n\t\t| typeof DurableObjectClass\n\t\t| typeof WorkflowEntrypoint,\n\tExtraPrototype = unknown,\n>(\n\tsuperClass: T,\n\tgetUnknownPrototypeKey: (key: string) => unknown\n): T & { prototype: ExtraPrototype } {\n\t// Build a class with a \"Proxy\"-prototype, so we can intercept RPC calls\n\tfunction Class(...args: ConstructorParameters<typeof superClass>) {\n\t\t// Delay proxying prototype until construction, so workerd sees this as a\n\t\t// regular class when introspecting it. This check fails if we don't do this:\n\t\t// https://github.com/cloudflare/workerd/blob/9e915ed637d65adb3c57522607d2cd8b8d692b6b/src/workerd/io/worker.c%2B%2B#L1920-L1921\n\t\tClass.prototype = new Proxy(Class.prototype, {\n\t\t\tget(target, key, receiver) {\n\t\t\t\tconst value = Reflect.get(target, key, receiver);\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t\t// noinspection SuspiciousTypeOfGuard\n\t\t\t\tif (typeof key === \"symbol\" || IGNORED_KEYS.includes(key)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn getUnknownPrototypeKey.call(receiver, key as string);\n\t\t\t},\n\t\t});\n\n\t\treturn Reflect.construct(superClass, args, Class);\n\t}\n\n\tReflect.setPrototypeOf(Class.prototype, superClass.prototype);\n\tReflect.setPrototypeOf(Class, superClass);\n\n\treturn Class as unknown as T & { prototype: ExtraPrototype };\n}\n\n/**\n * Only properties and methods declared on the prototype can be accessed over\n * RPC. This function throws a helpful error message if a property isn't\n * defined. Note we need to distinguish between a property that returns\n * `undefined` and something not being defined at all.\n */\nfunction assertRPCPropertyAccessible(\n\tctor: WorkerEntrypointConstructor | DurableObjectConstructor,\n\tinstance:\n\t\t| WorkerEntrypoint<Record<string, unknown> | Cloudflare.Env>\n\t\t| DurableObjectClass<Record<string, unknown> | Cloudflare.Env>,\n\tkey: string\n): void {\n\tconst prototypeHasKey = Reflect.has(ctor.prototype, key);\n\tif (!prototypeHasKey) {\n\t\tconst quotedKey = JSON.stringify(key);\n\t\tconst instanceHasKey = Reflect.has(instance, key);\n\t\tlet message = \"\";\n\t\tif (instanceHasKey) {\n\t\t\tmessage = [\n\t\t\t\t`The RPC receiver's prototype does not implement ${quotedKey}, but the receiver instance does.`,\n\t\t\t\t\"Only properties and methods defined on the prototype can be accessed over RPC.\",\n\t\t\t\t`Ensure properties are declared like \\`get ${key}() { ... }\\` instead of \\`${key} = ...\\`,`,\n\t\t\t\t`and methods are declared like \\`${key}() { ... }\\` instead of \\`${key} = () => { ... }\\`.`,\n\t\t\t].join(\"\\n\");\n\t\t} else {\n\t\t\tmessage = `The RPC receiver does not implement ${quotedKey}.`;\n\t\t}\n\t\tthrow new TypeError(message);\n\t}\n}\n\nfunction getRPCProperty(\n\tctor: WorkerEntrypointConstructor | DurableObjectConstructor,\n\tinstance:\n\t\t| WorkerEntrypoint<Record<string, unknown> | Cloudflare.Env>\n\t\t| DurableObjectClass<Record<string, unknown> | Cloudflare.Env>,\n\tkey: string\n): unknown {\n\tassertRPCPropertyAccessible(ctor, instance, key);\n\t// `receiver` is the value of `this` provided if a getter is encountered\n\treturn Reflect.get(/* target */ ctor.prototype, key, /* receiver */ instance);\n}\n\ntype InvocationQueueOwner =\n\t| WorkerEntrypoint<Cloudflare.Env>\n\t| DurableObjectClass<Cloudflare.Env>\n\t| WorkflowEntrypoint<Cloudflare.Env>;\n\n/**\n * When calling RPC methods dynamically, we don't know whether the `property`\n * returned from `getSELFRPCProperty()` or `getDurableObjectRPCProperty()` below\n * is just a property or a method. If we just returned `property`, but the\n * client tried to call it as a method, `workerd` would throw an \"x is not a\n * function\" error.\n *\n * Instead, we return a *callable, custom thenable*. This behaves like a\n * function and a `Promise`! If `workerd` calls it, we'll wait for the promise\n * to resolve then forward the call. Otherwise, this just appears like a regular\n * async property. Note all client calls are async, so converting sync\n * properties and methods to async is fine here.\n *\n * Unfortunately, wrapping `property` with a `Proxy` and an `apply()` trap gives\n * `TypeError: Method Promise.prototype.then called on incompatible receiver #<Promise>`. :(\n */\nfunction getRPCPropertyCallableThenable(\n\tkey: string,\n\tproperty: Promise<unknown>,\n\tqueueOwner: InvocationQueueOwner\n) {\n\tconst fn = async function (...args: unknown[]) {\n\t\treturn enqueueInvocation(queueOwner, async (release) => {\n\t\t\ttry {\n\t\t\t\tconst maybeFn = await property;\n\t\t\t\tif (typeof maybeFn === \"function\") {\n\t\t\t\t\treturn maybeFn(...args);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new TypeError(`${JSON.stringify(key)} is not a function.`);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\trelease();\n\t\t\t}\n\t\t});\n\t} as Promise<unknown> & ((...args: unknown[]) => Promise<unknown>);\n\tfn.then = (onFulfilled, onRejected) => property.then(onFulfilled, onRejected);\n\tfn.catch = (onRejected) => property.catch(onRejected);\n\tfn.finally = (onFinally) => property.finally(onFinally);\n\treturn fn;\n}\n\nconst invocationQueues = new WeakMap<InvocationQueueOwner, Promise<void>>();\n\n/**\n * Preserve the order in which async wrapper invocations begin executing.\n *\n * Resolving a property like `stub.method`, or ensuring a Durable Object handler\n * instance, may need to import user modules or instantiate wrapper objects. If\n * several calls are fired synchronously, those async steps can otherwise\n * complete out of order before the actual user code is invoked. The queue is\n * released as soon as invocation starts, so async completions can still run\n * concurrently.\n */\nasync function enqueueInvocation<T>(\n\towner: InvocationQueueOwner,\n\tcallback: (release: () => void) => Promise<T>\n): Promise<T> {\n\tconst previous = invocationQueues.get(owner) ?? Promise.resolve();\n\tlet releaseStarted: (() => void) | undefined;\n\tconst started = new Promise<void>((resolve) => {\n\t\treleaseStarted = resolve;\n\t});\n\tconst release = () => {\n\t\tconst releaseStartedFn = releaseStarted;\n\t\tif (releaseStartedFn !== undefined) {\n\t\t\treleaseStartedFn();\n\t\t}\n\t};\n\tconst result = previous.catch(() => {}).then(() => callback(release));\n\tinvocationQueues.set(owner, started);\n\treturn result;\n}\n\n/**\n * `ctx` and `env` are defined as `protected` within `WorkerEntrypoint` and\n * `DurableObjectClass`. Usually this isn't a problem, as `protected` members\n * can be accessed from subclasses defined with `class extends` keywords.\n * Unfortunately, we have to define our classes with a `Proxy` prototype to\n * support forwarding RPC. This prevents us accessing `protected` members.\n * Instead, we define this function to extract these members, and provide type\n * safety for callers.\n */\nfunction getEntrypointState(instance: WorkerEntrypoint<Cloudflare.Env>): {\n\tctx: ExecutionContext;\n\tenv: Cloudflare.Env;\n};\nfunction getEntrypointState(instance: DurableObjectClass<Cloudflare.Env>): {\n\tctx: DurableObjectState;\n\tenv: Cloudflare.Env;\n};\nfunction getEntrypointState(\n\tinstance:\n\t\t| WorkerEntrypoint<Cloudflare.Env>\n\t\t| DurableObjectClass<Cloudflare.Env>\n) {\n\treturn instance as unknown as {\n\t\tctx: ExecutionContext | DurableObjectState;\n\t\tenv: Cloudflare.Env;\n\t};\n}\n\nconst WORKER_ENTRYPOINT_KEYS = [\n\t\"connect\",\n\t\"tailStream\",\n\t\"fetch\",\n\t\"tail\",\n\t\"trace\",\n\t\"scheduled\",\n\t\"queue\",\n\t\"test\",\n\t\"email\",\n] as const;\nconst DURABLE_OBJECT_KEYS = [\n\t\"connect\",\n\t\"fetch\",\n\t\"alarm\",\n\t\"webSocketMessage\",\n\t\"webSocketClose\",\n\t\"webSocketError\",\n] as const;\n// Handlers `workerd` treats as optional: when a Durable Object doesn't define\n// one, the corresponding event is silently dropped. We can't leave them off the\n// wrapper's prototype to get that behaviour for free — the prototype is built\n// before user code is loaded, so `workerd` always sees a handler and always\n// dispatches. The no-op has to be reproduced here instead.\n//\n// `alarm()` deliberately isn't in this set: `workerd` rejects `setAlarm()` up\n// front on a class with no `alarm()` handler, so a missing one is a real error.\nconst OPTIONAL_DURABLE_OBJECT_KEYS: ReadonlySet<\n\t(typeof DURABLE_OBJECT_KEYS)[number]\n> = new Set([\"webSocketMessage\", \"webSocketClose\", \"webSocketError\"] as const);\n\n// This type will grab the keys from T and remove \"branded\" keys\ntype UnbrandedKeys<T> = Exclude<keyof T, `__${string}_BRAND`>;\n\n// Check that we've included all possible keys\n// noinspection JSUnusedLocalSymbols\nconst _workerEntrypointExhaustive: (typeof WORKER_ENTRYPOINT_KEYS)[number] =\n\tundefined as unknown as UnbrandedKeys<WorkerEntrypoint<Cloudflare.Env>>;\n// noinspection JSUnusedLocalSymbols\nconst _durableObjectExhaustive: (typeof DURABLE_OBJECT_KEYS)[number] =\n\tundefined as unknown as UnbrandedKeys<DurableObjectClass<Cloudflare.Env>>;\n\n// =============================================================================\n// `WorkerEntrypoint` wrappers\n// =============================================================================\n\n// `WorkerEntrypoint` is `abstract`, so we need to cast before constructing\ntype WorkerEntrypointConstructor = {\n\tnew (\n\t\t...args: ConstructorParameters<typeof WorkerEntrypoint>\n\t): WorkerEntrypoint;\n};\n\n/**\n * Get the export to use for `entrypoint`. This is used for the `SELF` service\n * binding in `cloudflare:test`, which sets `entrypoint` to \"default\".\n * This requires importing the `main` module with Vite.\n */\nasync function getWorkerEntrypointExport(\n\tenv: Cloudflare.Env,\n\tentrypoint: string\n): Promise<{ mainPath: string; entrypointValue: unknown }> {\n\tconst mainPath = getResolvedMainPath(\"service\");\n\tconst mainModule = await importModule(mainPath);\n\tconst entrypointValue =\n\t\ttypeof mainModule === \"object\" &&\n\t\tmainModule !== null &&\n\t\tentrypoint in mainModule &&\n\t\tmainModule[entrypoint];\n\tif (!entrypointValue) {\n\t\tconst message =\n\t\t\t`${mainPath} does not export a ${entrypoint} entrypoint. \\`@cloudflare/vitest-pool-workers\\` does not support service workers or named entrypoints for \\`SELF\\`.\\n` +\n\t\t\t\"If you're using service workers, please migrate to the modules format: https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\";\n\t\tthrow new TypeError(message);\n\t}\n\treturn { mainPath, entrypointValue };\n}\n\n/**\n * Get a property named `key` from the user's `WorkerEntrypoint`. `wrapper` here\n * is an instance of a `WorkerEntrypoint` wrapper (i.e. the return value of\n * `createWorkerEntrypointWrapper()`). This requires importing the `main` module\n * with Vite, so will always return a `Promise.`\n */\nasync function getWorkerEntrypointRPCProperty(\n\twrapper: WorkerEntrypoint<Cloudflare.Env>,\n\tentrypoint: string,\n\tkey: string\n): Promise<unknown> {\n\tconst { ctx } = getEntrypointState(wrapper);\n\tconst { mainPath, entrypointValue } = await getWorkerEntrypointExport(\n\t\truntimeEnv as Cloudflare.Env,\n\t\tentrypoint\n\t);\n\t// Ensure constructor and properties execute with ctx `AsyncLocalStorage` set\n\treturn patchAndRunWithHandlerContext(ctx, () => {\n\t\t// Use the dynamic env from `cloudflare:workers` to respect `withEnv()`\n\t\tconst env = runtimeEnv as Cloudflare.Env;\n\t\tconst expectedWorkerEntrypointMessage = `Expected ${entrypoint} export of ${mainPath} to be a subclass of \\`WorkerEntrypoint\\` for RPC`;\n\t\tif (typeof entrypointValue !== \"function\") {\n\t\t\tthrow new TypeError(expectedWorkerEntrypointMessage);\n\t\t}\n\t\tconst ctor = entrypointValue as WorkerEntrypointConstructor;\n\t\tconst instance = new ctor(ctx, env);\n\t\t// noinspection SuspiciousTypeOfGuard\n\t\tif (!(instance instanceof WorkerEntrypoint)) {\n\t\t\tthrow new TypeError(expectedWorkerEntrypointMessage);\n\t\t}\n\n\t\tconst value = getRPCProperty(ctor, instance, key);\n\t\tif (typeof value === \"function\") {\n\t\t\t// If this is a function, ensure it executes with ctx `AsyncLocalStorage`\n\t\t\t// set, and with a correctly bound `this`\n\t\t\treturn (...args: unknown[]) =>\n\t\t\t\tpatchAndRunWithHandlerContext(ctx, () => value.apply(instance, args));\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t});\n}\n\nexport function createWorkerEntrypointWrapper(\n\tentrypoint: string\n): typeof WorkerEntrypoint {\n\tconst Wrapper = createProxyPrototypeClass(\n\t\tWorkerEntrypoint,\n\t\tfunction (this: WorkerEntrypoint<Cloudflare.Env>, key) {\n\t\t\t// All `ExportedHandler` keys are reserved and cannot be called over RPC\n\t\t\tif ((DURABLE_OBJECT_KEYS as readonly string[]).includes(key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst property = getWorkerEntrypointRPCProperty(this, entrypoint, key);\n\t\t\treturn getRPCPropertyCallableThenable(key, property, this);\n\t\t}\n\t);\n\n\t// Add prototype methods for all default handlers\n\tfor (const key of WORKER_ENTRYPOINT_KEYS) {\n\t\tWrapper.prototype[key] = async function (\n\t\t\tthis: WorkerEntrypoint<Cloudflare.Env>,\n\t\t\tthing: unknown\n\t\t) {\n\t\t\tconst { mainPath, entrypointValue } = await getWorkerEntrypointExport(\n\t\t\t\tthis.env,\n\t\t\t\tentrypoint\n\t\t\t);\n\n\t\t\treturn patchAndRunWithHandlerContext(this.ctx, () => {\n\t\t\t\tif (typeof entrypointValue === \"object\" && entrypointValue !== null) {\n\t\t\t\t\t// Assuming the user has defined an `ExportedHandler`\n\t\t\t\t\tconst maybeFn = (entrypointValue as Record<string, unknown>)[key];\n\t\t\t\t\tif (typeof maybeFn === \"function\") {\n\t\t\t\t\t\treturn maybeFn.call(entrypointValue, thing, runtimeEnv, this.ctx);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to define a \\`${key}()\\` function`;\n\t\t\t\t\t\tthrow new TypeError(message);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof entrypointValue === \"function\") {\n\t\t\t\t\t// Assuming the user has defined a `WorkerEntrypoint` subclass\n\t\t\t\t\tconst ctor = entrypointValue as WorkerEntrypointConstructor;\n\t\t\t\t\tconst instance = new ctor(this.ctx, runtimeEnv);\n\t\t\t\t\t// noinspection SuspiciousTypeOfGuard\n\t\t\t\t\tif (!(instance instanceof WorkerEntrypoint)) {\n\t\t\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to be a subclass of \\`WorkerEntrypoint\\``;\n\t\t\t\t\t\tthrow new TypeError(message);\n\t\t\t\t\t}\n\t\t\t\t\tconst maybeFn = instance[key];\n\t\t\t\t\tif (typeof maybeFn === \"function\") {\n\t\t\t\t\t\treturn (maybeFn as (arg: unknown) => unknown).call(instance, thing);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to define a \\`${key}()\\` method`;\n\t\t\t\t\t\tthrow new TypeError(message);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Assuming the user has messed up\n\t\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to be an object or a class, got ${entrypointValue}`;\n\t\t\t\t\tthrow new TypeError(message);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t}\n\treturn Wrapper;\n}\n\n// =============================================================================\n// `DurableObject` wrappers\n// =============================================================================\n\ntype DurableObjectConstructor = {\n\tnew (\n\t\t...args: ConstructorParameters<typeof DurableObjectClass>\n\t): DurableObject | DurableObjectClass;\n};\n\nconst kInstanceConstructor = Symbol(\"kInstanceConstructor\");\nconst kInstance = Symbol(\"kInstance\");\nconst kEnsureInstance = Symbol(\"kEnsureInstance\");\ntype DurableObjectWrapperExtraPrototype = {\n\t[kInstanceConstructor]: DurableObjectConstructor;\n\t[kInstance]:\n\t\t| DurableObject\n\t\t| DurableObjectClass<Record<string, unknown> | Cloudflare.Env>;\n\t[kEnsureInstance](): Promise<{\n\t\tmainPath: string;\n\t\tinstanceCtor: DurableObjectConstructor;\n\t\tinstance:\n\t\t\t| DurableObject\n\t\t\t| DurableObjectClass<Record<string, unknown> | Cloudflare.Env>;\n\t}>;\n};\ntype DurableObjectWrapper = DurableObjectClass<Cloudflare.Env> &\n\tDurableObjectWrapperExtraPrototype;\n\nasync function getDurableObjectRPCProperty(\n\twrapper: DurableObjectWrapper,\n\tclassName: string,\n\tkey: string\n): Promise<unknown> {\n\tconst { mainPath, instanceCtor, instance } = await wrapper[kEnsureInstance]();\n\tif (!(instance instanceof DurableObjectClass)) {\n\t\tconst message = `Expected ${className} exported by ${mainPath} be a subclass of \\`DurableObject\\` for RPC`;\n\t\tthrow new TypeError(message);\n\t}\n\tassertRPCPropertyAccessible(instanceCtor, instance, key);\n\t// `workerd` rejects constructor-assigned overrides of RPC methods, but a\n\t// constructor may return a Proxy that wraps a method from its prototype.\n\tif (Object.hasOwn(instance, key)) {\n\t\tthrow new TypeError(\n\t\t\t`The RPC receiver does not implement the method ${JSON.stringify(key)}.`\n\t\t);\n\t}\n\tconst value = Reflect.get(instance, key, instance);\n\tif (typeof value === \"function\") {\n\t\t// If this is a function, ensure correctly bound `this`\n\t\treturn value.bind(instance);\n\t} else {\n\t\treturn value;\n\t}\n}\n\nexport function createDurableObjectWrapper(\n\tclassName: string\n): typeof DurableObjectClass {\n\tconst Wrapper = createProxyPrototypeClass<\n\t\ttypeof DurableObjectClass,\n\t\tDurableObjectWrapperExtraPrototype\n\t>(DurableObjectClass, function (this: DurableObjectWrapper, key) {\n\t\t// All `ExportedHandler` keys are reserved and cannot be called over RPC\n\t\tif ((WORKER_ENTRYPOINT_KEYS as readonly string[]).includes(key)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst property = getDurableObjectRPCProperty(this, className, key);\n\t\treturn getRPCPropertyCallableThenable(key, property, this);\n\t});\n\n\tWrapper.prototype[kEnsureInstance] = async function (\n\t\tthis: DurableObjectWrapper\n\t) {\n\t\tconst { ctx, env } = getEntrypointState(this);\n\t\tconst mainPath = getResolvedMainPath(\"Durable Object\");\n\t\t// `ensureInstance()` may be called multiple times concurrently.\n\t\t// We're assuming `importModule()` will only import the module once.\n\t\tconst mainModule = await importModule(mainPath);\n\t\tconst constructor = mainModule[className];\n\t\tif (typeof constructor !== \"function\") {\n\t\t\tthrow new TypeError(\n\t\t\t\t`${mainPath} does not export a ${className} Durable Object`\n\t\t\t);\n\t\t}\n\t\tthis[kInstanceConstructor] ??= constructor as DurableObjectConstructor;\n\t\tif (this[kInstanceConstructor] !== constructor) {\n\t\t\t// This would be if the module was invalidated\n\t\t\t// (i.e. source file changed), then the Durable Object was `fetch()`ed\n\t\t\t// again. We reset all Durable Object instances between each test, so it's\n\t\t\t// unlikely multiple constructors would be used by the same instance,\n\t\t\t// unless the user did something funky with Durable Objects outside tests.\n\t\t\tawait ctx.blockConcurrencyWhile<never>(() => {\n\t\t\t\t// Throw inside `blockConcurrencyWhile()` to abort this object\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${mainPath} changed, invalidating this Durable Object. ` +\n\t\t\t\t\t\t\"Please retry the `DurableObjectStub#fetch()` call.\"\n\t\t\t\t);\n\t\t\t});\n\t\t\tassert.fail(\"Unreachable\");\n\t\t}\n\t\tif (this[kInstance] === undefined) {\n\t\t\tthis[kInstance] = new this[kInstanceConstructor](ctx, env);\n\t\t\t// Wait for any `blockConcurrencyWhile()`s in the constructor to complete\n\t\t\tawait ctx.blockConcurrencyWhile(async () => {});\n\t\t}\n\t\treturn {\n\t\t\tmainPath,\n\t\t\tinstanceCtor: this[kInstanceConstructor],\n\t\t\tinstance: this[kInstance],\n\t\t};\n\t};\n\n\t// Add prototype method for `fetch` handler to handle `runInDurableObject()`s\n\tWrapper.prototype.fetch = async function (\n\t\tthis: DurableObjectWrapper,\n\t\trequest: Request\n\t) {\n\t\tconst { ctx } = getEntrypointState(this);\n\n\t\t// Make sure we've initialised user code\n\t\tconst { mainPath, instance } = await this[kEnsureInstance]();\n\n\t\t// If this is an internal Durable Object action, handle it...\n\t\tconst response = await maybeHandleRunRequest(request, instance, ctx);\n\t\tif (response !== undefined) {\n\t\t\treturn response;\n\t\t}\n\n\t\t// Otherwise, pass through to the user code\n\t\tif (instance.fetch === undefined) {\n\t\t\tconst message = `${className} exported by ${mainPath} does not define a \\`fetch()\\` method`;\n\t\t\tthrow new TypeError(message);\n\t\t}\n\t\treturn instance.fetch(request);\n\t};\n\n\t// Add prototype methods for all other default handlers\n\tfor (const key of DURABLE_OBJECT_KEYS) {\n\t\tif (key === \"fetch\") {\n\t\t\tcontinue;\n\t\t} // `fetch()` has special handling above\n\t\tWrapper.prototype[key] = async function (\n\t\t\tthis: DurableObjectWrapper,\n\t\t\t...args: unknown[]\n\t\t) {\n\t\t\treturn enqueueInvocation(this, async (release) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { mainPath, instance } = await this[kEnsureInstance]();\n\t\t\t\t\tconst maybeFn = instance[key];\n\t\t\t\t\tif (typeof maybeFn === \"function\") {\n\t\t\t\t\t\treturn (maybeFn as (...a: unknown[]) => void).apply(instance, args);\n\t\t\t\t\t} else if (OPTIONAL_DURABLE_OBJECT_KEYS.has(key)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst message = `${className} exported by ${mainPath} does not define a \\`${key}()\\` method`;\n\t\t\t\t\t\tthrow new TypeError(message);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\trelease();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t}\n\n\treturn Wrapper;\n}\n\n// =============================================================================\n// `WorkflowEntrypoint` wrappers\n// =============================================================================\n\ntype WorkflowEntrypointConstructor = {\n\tnew (\n\t\t...args: ConstructorParameters<typeof WorkflowEntrypoint>\n\t): WorkflowEntrypoint;\n};\n\nexport function createWorkflowEntrypointWrapper(entrypoint: string) {\n\tconst Wrapper = createProxyPrototypeClass(\n\t\tWorkflowEntrypoint,\n\t\tfunction (this: WorkflowEntrypoint<Cloudflare.Env>, key) {\n\t\t\t// only Workflow `run` should be exposed over RPC\n\t\t\tif (![\"run\"].includes(key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst property = getWorkerEntrypointRPCProperty(\n\t\t\t\tthis as unknown as WorkerEntrypoint<Cloudflare.Env>,\n\t\t\t\tentrypoint,\n\t\t\t\tkey\n\t\t\t);\n\t\t\treturn getRPCPropertyCallableThenable(key, property, this);\n\t\t}\n\t);\n\n\tWrapper.prototype.run = async function (\n\t\tthis: WorkflowEntrypoint<Cloudflare.Env>,\n\t\t...args\n\t) {\n\t\tconst { mainPath, entrypointValue } = await getWorkerEntrypointExport(\n\t\t\truntimeEnv,\n\t\t\tentrypoint\n\t\t);\n\t\t// workflow entrypoint value should always be a constructor\n\t\tif (typeof entrypointValue === \"function\") {\n\t\t\t// Assuming the user has defined a `WorkflowEntrypoint` subclass\n\t\t\tconst ctor = entrypointValue as WorkflowEntrypointConstructor;\n\t\t\tconst instance = new ctor(this.ctx, runtimeEnv);\n\t\t\t// noinspection SuspiciousTypeOfGuard\n\t\t\tif (!(instance instanceof WorkflowEntrypoint)) {\n\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to be a subclass of \\`WorkflowEntrypoint\\``;\n\t\t\t\tthrow new TypeError(message);\n\t\t\t}\n\t\t\tconst maybeFn = instance[\"run\"];\n\t\t\tif (typeof maybeFn === \"function\") {\n\t\t\t\treturn patchAndRunWithHandlerContext(this.ctx, () =>\n\t\t\t\t\tmaybeFn.call(instance, ...args)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to define a \\`run()\\` method, but got ${typeof maybeFn}`;\n\t\t\t\tthrow new TypeError(message);\n\t\t\t}\n\t\t} else {\n\t\t\t// Assuming the user has messed up\n\t\t\tconst message = `Expected ${entrypoint} export of ${mainPath} to be a subclass of \\`WorkflowEntrypoint\\`, but got ${entrypointValue}`;\n\t\t\tthrow new TypeError(message);\n\t\t}\n\t};\n\n\treturn Wrapper;\n}\n","import { exports } from \"cloudflare:workers\";\nimport { env } from \"./env\";\nimport { getCtxExportsProxy, isCtxExportsEnabled } from \"./patch-ctx\";\nimport { registerGlobalWaitUntil, waitForWaitUntil } from \"./wait-until\";\n\n// `workerd` doesn't allow these internal classes to be constructed directly.\n// To replicate this behaviour require this unique symbol to be specified as the\n// first constructor argument. If this is missing, throw `Illegal invocation`.\nconst kConstructFlag = Symbol(\"kConstructFlag\");\n\n// See public facing `cloudflare:test` types for docs.\n\n// =============================================================================\n// `ExecutionContext`\n// =============================================================================\n\nconst kWaitUntil = Symbol(\"kWaitUntil\");\nclass ExecutionContext {\n\t// https://github.com/cloudflare/workerd/blob/v1.20231218.0/src/workerd/api/global-scope.h#L168\n\t[kWaitUntil]: unknown[] = [];\n\n\tconstructor(flag: typeof kConstructFlag) {\n\t\tif (flag !== kConstructFlag) {\n\t\t\tthrow new TypeError(\"Illegal constructor\");\n\t\t}\n\t}\n\n\t// Expose the ctx.exports from the main \"SELF\" Worker if there is one.\n\treadonly exports = isCtxExportsEnabled(exports)\n\t\t? getCtxExportsProxy(exports)\n\t\t: undefined;\n\n\twaitUntil(promise: unknown) {\n\t\tif (!(this instanceof ExecutionContext)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\tthis[kWaitUntil].push(promise);\n\t\tregisterGlobalWaitUntil(promise);\n\t}\n\n\tpassThroughOnException(): void {}\n}\nexport function createExecutionContext(): ExecutionContext {\n\treturn new ExecutionContext(kConstructFlag);\n}\n\nfunction isExecutionContextLike(v: unknown): v is { [kWaitUntil]: unknown[] } {\n\treturn (\n\t\ttypeof v === \"object\" &&\n\t\tv !== null &&\n\t\tkWaitUntil in v &&\n\t\tArray.isArray(v[kWaitUntil])\n\t);\n}\nexport async function waitOnExecutionContext(ctx: unknown): Promise<void> {\n\tif (!isExecutionContextLike(ctx)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'getWaitUntil': parameter 1 is not of type 'ExecutionContext'.\\n\" +\n\t\t\t\t\"You must call 'createExecutionContext()' or 'createPagesEventContext()' to get an 'ExecutionContext' instance.\"\n\t\t);\n\t}\n\treturn waitForWaitUntil(ctx[kWaitUntil]);\n}\n\n// =============================================================================\n// `ScheduledController`\n// =============================================================================\n\nclass ScheduledController {\n\t// https://github.com/cloudflare/workerd/blob/v1.20231218.0/src/workerd/api/scheduled.h#L35\n\treadonly scheduledTime!: number;\n\treadonly cron!: string;\n\n\tconstructor(flag: typeof kConstructFlag, options?: FetcherScheduledOptions) {\n\t\tif (flag !== kConstructFlag) {\n\t\t\tthrow new TypeError(\"Illegal constructor\");\n\t\t}\n\n\t\tconst scheduledTime = Number(options?.scheduledTime ?? Date.now());\n\t\tconst cron = String(options?.cron ?? \"\");\n\n\t\t// Match `JSG_READONLY_INSTANCE_PROPERTY` behaviour\n\t\tObject.defineProperties(this, {\n\t\t\tscheduledTime: {\n\t\t\t\tget() {\n\t\t\t\t\treturn scheduledTime;\n\t\t\t\t},\n\t\t\t},\n\t\t\tcron: {\n\t\t\t\tget() {\n\t\t\t\t\treturn cron;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tnoRetry(): void {\n\t\tif (!(this instanceof ScheduledController)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t}\n}\nexport function createScheduledController(\n\toptions?: FetcherScheduledOptions\n): ScheduledController {\n\tif (options !== undefined && typeof options !== \"object\") {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'createScheduledController': parameter 1 is not of type 'ScheduledOptions'.\"\n\t\t);\n\t}\n\treturn new ScheduledController(kConstructFlag, options);\n}\n\n// =============================================================================\n// `MessageBatch`\n// =============================================================================\n\nconst kRetry = Symbol(\"kRetry\");\nconst kAck = Symbol(\"kAck\");\nconst kRetryAll = Symbol(\"kRetryAll\");\nconst kAckAll = Symbol(\"kAckAll\");\nclass QueueMessage<Body = unknown> /* Message */ {\n\t// https://github.com/cloudflare/workerd/blob/v1.20231218.0/src/workerd/api/queue.h#L113\n\treadonly #controller: QueueController;\n\treadonly id!: string;\n\treadonly timestamp!: Date;\n\treadonly body!: Body;\n\treadonly attempts!: number;\n\t[kRetry] = false;\n\t[kAck] = false;\n\n\tconstructor(\n\t\tflag: typeof kConstructFlag,\n\t\tcontroller: QueueController,\n\t\tmessage: ServiceBindingQueueMessage<Body>\n\t) {\n\t\tif (flag !== kConstructFlag) {\n\t\t\tthrow new TypeError(\"Illegal constructor\");\n\t\t}\n\t\tthis.#controller = controller;\n\n\t\tconst id = String(message.id);\n\n\t\tlet timestamp: Date;\n\t\t// noinspection SuspiciousTypeOfGuard\n\t\tif (typeof message.timestamp === \"number\") {\n\t\t\ttimestamp = new Date(message.timestamp);\n\t\t} else if (message.timestamp instanceof Date) {\n\t\t\ttimestamp = new Date(message.timestamp.getTime()); // Prevent external mutations\n\t\t} else {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"Incorrect type for the 'timestamp' field on 'ServiceBindingQueueMessage': the provided value is not of type 'date'.\"\n\t\t\t);\n\t\t}\n\n\t\tlet attempts: number;\n\t\t// noinspection SuspiciousTypeOfGuard\n\t\tif (typeof message.attempts === \"number\") {\n\t\t\tattempts = message.attempts;\n\t\t} else {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"Incorrect type for the 'attempts' field on 'ServiceBindingQueueMessage': the provided value is not of type 'number'.\"\n\t\t\t);\n\t\t}\n\n\t\tif (\"serializedBody\" in message) {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"Cannot use `serializedBody` with `createMessageBatch()`\"\n\t\t\t);\n\t\t}\n\t\tconst body = structuredClone(message.body); // Prevent external mutations\n\n\t\t// Match `JSG_READONLY_INSTANCE_PROPERTY` behaviour\n\t\tObject.defineProperties(this, {\n\t\t\tid: {\n\t\t\t\tget() {\n\t\t\t\t\treturn id;\n\t\t\t\t},\n\t\t\t},\n\t\t\ttimestamp: {\n\t\t\t\tget() {\n\t\t\t\t\treturn timestamp;\n\t\t\t\t},\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tget() {\n\t\t\t\t\treturn body;\n\t\t\t\t},\n\t\t\t},\n\t\t\tattempts: {\n\t\t\t\tget() {\n\t\t\t\t\treturn attempts;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tretry() {\n\t\tif (!(this instanceof QueueMessage)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\tif (this.#controller[kRetryAll]) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.#controller[kAckAll]) {\n\t\t\tconsole.warn(\n\t\t\t\t`Received a call to retry() on message ${this.id} after ackAll() was already called. ` +\n\t\t\t\t\t\"Calling retry() on a message after calling ackAll() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (this[kAck]) {\n\t\t\tconsole.warn(\n\t\t\t\t`Received a call to retry() on message ${this.id} after ack() was already called. ` +\n\t\t\t\t\t\"Calling retry() on a message after calling ack() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis[kRetry] = true;\n\t}\n\n\tack() {\n\t\tif (!(this instanceof QueueMessage)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\tif (this.#controller[kAckAll]) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.#controller[kRetryAll]) {\n\t\t\tconsole.warn(\n\t\t\t\t`Received a call to ack() on message ${this.id} after retryAll() was already called. ` +\n\t\t\t\t\t\"Calling ack() on a message after calling retryAll() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (this[kRetry]) {\n\t\t\tconsole.warn(\n\t\t\t\t`Received a call to ack() on message ${this.id} after retry() was already called. ` +\n\t\t\t\t\t\"Calling ack() on a message after calling retry() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis[kAck] = true;\n\t}\n}\nclass QueueController<Body = unknown> /* MessageBatch */ {\n\t// https://github.com/cloudflare/workerd/blob/v1.20231218.0/src/workerd/api/queue.h#L198\n\treadonly queue!: string;\n\treadonly messages!: QueueMessage<Body>[];\n\treadonly metadata!: MessageBatchMetadata;\n\t[kRetryAll] = false;\n\t[kAckAll] = false;\n\n\tconstructor(\n\t\tflag: typeof kConstructFlag,\n\t\tqueueOption: string,\n\t\tmessagesOption: ServiceBindingQueueMessage<Body>[]\n\t) {\n\t\tif (flag !== kConstructFlag) {\n\t\t\tthrow new TypeError(\"Illegal constructor\");\n\t\t}\n\n\t\tconst queue = String(queueOption);\n\t\tconst messages = messagesOption.map(\n\t\t\t(message) => new QueueMessage(kConstructFlag, this, message)\n\t\t);\n\t\tconst metadata: MessageBatchMetadata = {\n\t\t\tmetrics: {\n\t\t\t\tbacklogCount: 0,\n\t\t\t\tbacklogBytes: 0,\n\t\t\t\toldestMessageTimestamp: new Date(0),\n\t\t\t},\n\t\t};\n\n\t\t// Match `JSG_READONLY_INSTANCE_PROPERTY` behaviour\n\t\tObject.defineProperties(this, {\n\t\t\tqueue: {\n\t\t\t\tget() {\n\t\t\t\t\treturn queue;\n\t\t\t\t},\n\t\t\t},\n\t\t\tmessages: {\n\t\t\t\tget() {\n\t\t\t\t\treturn messages;\n\t\t\t\t},\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tget() {\n\t\t\t\t\treturn metadata;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tretryAll() {\n\t\tif (!(this instanceof QueueController)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\tif (this[kAckAll]) {\n\t\t\tconsole.warn(\n\t\t\t\t\"Received a call to retryAll() after ackAll() was already called. \" +\n\t\t\t\t\t\"Calling retryAll() after calling ackAll() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis[kRetryAll] = true;\n\t}\n\n\tackAll() {\n\t\tif (!(this instanceof QueueController)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\tif (this[kRetryAll]) {\n\t\t\tconsole.warn(\n\t\t\t\t\"Received a call to ackAll() after retryAll() was already called. \" +\n\t\t\t\t\t\"Calling ackAll() after calling retryAll() has no effect.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis[kAckAll] = true;\n\t}\n}\nexport function createMessageBatch<Body = unknown>(\n\tqueueName: string,\n\tmessages: ServiceBindingQueueMessage<Body>[]\n): MessageBatch<Body> {\n\tif (arguments.length === 0) {\n\t\t// `queueName` will be coerced to a `string`, but it must be defined\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'createMessageBatch': parameter 1 is not of type 'string'.\"\n\t\t);\n\t}\n\tif (!Array.isArray(messages)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'createMessageBatch': parameter 2 is not of type 'Array'.\"\n\t\t);\n\t}\n\treturn new QueueController(kConstructFlag, queueName, messages);\n}\nexport async function getQueueResult(\n\tbatch: QueueController,\n\tctx: ExecutionContext\n): Promise<FetcherQueueResult> {\n\t// noinspection SuspiciousTypeOfGuard\n\tif (!(batch instanceof QueueController)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'getQueueResult': parameter 1 is not of type 'MessageBatch'.\\n\" +\n\t\t\t\t\"You must call 'createMessageBatch()' to get a 'MessageBatch' instance.\"\n\t\t);\n\t}\n\t// noinspection SuspiciousTypeOfGuard\n\tif (!(ctx instanceof ExecutionContext)) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'getQueueResult': parameter 2 is not of type 'ExecutionContext'.\\n\" +\n\t\t\t\t\"You must call 'createExecutionContext()' to get an 'ExecutionContext' instance.\"\n\t\t);\n\t}\n\tawait waitOnExecutionContext(ctx);\n\n\tconst retryMessages: QueueRetryMessage[] = [];\n\tconst explicitAcks: string[] = [];\n\tfor (const message of batch.messages) {\n\t\tif (message[kRetry]) {\n\t\t\tretryMessages.push({ msgId: message.id });\n\t\t}\n\t\tif (message[kAck]) {\n\t\t\texplicitAcks.push(message.id);\n\t\t}\n\t}\n\treturn {\n\t\toutcome: \"ok\",\n\t\tretryBatch: {\n\t\t\tretry: batch[kRetryAll],\n\t\t},\n\t\tackAll: batch[kAckAll],\n\t\tretryMessages,\n\t\texplicitAcks,\n\t};\n}\n\n// =============================================================================\n// Pages Functions `EventContext`\n// =============================================================================\n\nfunction hasASSETSServiceBinding(\n\tvalue: Record<string, unknown>\n): value is Record<string, unknown> & { ASSETS: Fetcher } {\n\treturn (\n\t\t\"ASSETS\" in value &&\n\t\ttypeof value.ASSETS === \"object\" &&\n\t\tvalue.ASSETS !== null &&\n\t\t\"fetch\" in value.ASSETS &&\n\t\ttypeof value.ASSETS.fetch === \"function\"\n\t);\n}\n\ninterface EventContextInit {\n\trequest: Request<unknown, IncomingRequestCfProperties>;\n\tfunctionPath?: string;\n\tnext?(request: Request): Response | Promise<Response>;\n\tparams?: Record<string, string | string[]>;\n\tdata?: Record<string, unknown>;\n}\n\nexport function createPagesEventContext<F extends PagesFunction>(\n\topts: EventContextInit\n): Parameters<F>[0] & { [kWaitUntil]: unknown[] } {\n\tif (typeof opts !== \"object\" || opts === null) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'createPagesEventContext': parameter 1 is not of type 'EventContextInit'.\"\n\t\t);\n\t}\n\tif (!(opts.request instanceof Request)) {\n\t\tthrow new TypeError(\n\t\t\t\"Incorrect type for the 'request' field on 'EventContextInit': the provided value is not of type 'Request'.\"\n\t\t);\n\t}\n\t// noinspection SuspiciousTypeOfGuard\n\tif (\n\t\topts.functionPath !== undefined &&\n\t\ttypeof opts.functionPath !== \"string\"\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"Incorrect type for the 'functionPath' field on 'EventContextInit': the provided value is not of type 'string'.\"\n\t\t);\n\t}\n\tif (opts.next !== undefined && typeof opts.next !== \"function\") {\n\t\tthrow new TypeError(\n\t\t\t\"Incorrect type for the 'next' field on 'EventContextInit': the provided value is not of type 'function'.\"\n\t\t);\n\t}\n\tif (\n\t\topts.params !== undefined &&\n\t\t!(typeof opts.params === \"object\" && opts.params !== null)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"Incorrect type for the 'params' field on 'EventContextInit': the provided value is not of type 'object'.\"\n\t\t);\n\t}\n\tif (\n\t\topts.data !== undefined &&\n\t\t!(typeof opts.data === \"object\" && opts.data !== null)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"Incorrect type for the 'data' field on 'EventContextInit': the provided value is not of type 'object'.\"\n\t\t);\n\t}\n\n\tif (!hasASSETSServiceBinding(env)) {\n\t\tthrow new TypeError(\n\t\t\t\"Cannot call `createPagesEventContext()` without defining `ASSETS` service binding\"\n\t\t);\n\t}\n\n\tconst ctx = createExecutionContext();\n\treturn {\n\t\t// If we might need to re-use this request, clone it\n\t\trequest: opts.next ? opts.request.clone() : opts.request,\n\t\tfunctionPath: opts.functionPath ?? \"\",\n\t\t[kWaitUntil]: ctx[kWaitUntil],\n\t\twaitUntil: ctx.waitUntil.bind(ctx),\n\t\tpassThroughOnException: ctx.passThroughOnException.bind(ctx),\n\t\tasync next(nextInput, nextInit) {\n\t\t\tif (opts.next === undefined) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\"Cannot call `EventContext#next()` without including `next` property in 2nd argument to `createPagesEventContext()`\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (nextInput === undefined) {\n\t\t\t\treturn opts.next(opts.request);\n\t\t\t} else {\n\t\t\t\tif (typeof nextInput === \"string\") {\n\t\t\t\t\tnextInput = new URL(nextInput, opts.request.url).toString();\n\t\t\t\t}\n\t\t\t\tconst nextRequest = new Request(nextInput, nextInit);\n\t\t\t\treturn opts.next(nextRequest);\n\t\t\t}\n\t\t},\n\t\tenv,\n\t\tparams: opts.params ?? {},\n\t\tdata: opts.data ?? {},\n\t};\n}\n","import workerdUnsafe from \"workerd:unsafe\";\nimport type { DurableObjectEvictionOptions } from \"workerd:unsafe\";\n\nconst DEFAULT_EVICTION_OPTIONS: DurableObjectEvictionOptions = {\n\twebSockets: \"hibernate\",\n};\n\nexport async function reset(): Promise<void> {\n\tawait workerdUnsafe.deleteAllDurableObjects();\n}\n\nexport async function abortAllDurableObjects(): Promise<void> {\n\tawait workerdUnsafe.abortAllDurableObjects();\n}\n\n// See public facing `cloudflare:test` types for docs\nexport async function evictAllDurableObjects(\n\toptions: DurableObjectEvictionOptions = DEFAULT_EVICTION_OPTIONS\n): Promise<void> {\n\tawait workerdUnsafe.evictAllDurableObjects(options);\n}\n","import type { SecretsStoreSecretAdmin } from \"miniflare\";\n\n// Must match ADMIN_API in miniflare/src/workers/secrets-store/constants.ts\nconst ADMIN_API = \"SecretsStoreSecret::admin_api\";\n\n/**\n * Returns the admin API for a secrets store binding, allowing tests to\n * create, update, and delete secrets that would otherwise be read-only.\n *\n * ```ts\n * import { adminSecretsStore } from \"cloudflare:test\";\n *\n * const admin = adminSecretsStore(env.MY_SECRET);\n * await admin.create(\"my-secret-value\");\n * ```\n */\nexport function adminSecretsStore(binding: unknown): SecretsStoreSecretAdmin {\n\tif (\n\t\ttypeof binding !== \"object\" ||\n\t\tbinding === null ||\n\t\ttypeof (binding as Record<string, unknown>)[ADMIN_API] !== \"function\"\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"Failed to execute 'adminSecretsStore': parameter 1 is not a secrets store binding.\"\n\t\t);\n\t}\n\n\treturn (binding as Record<string, (...args: unknown[]) => unknown>)[\n\t\tADMIN_API\n\t]() as SecretsStoreSecretAdmin;\n}\n","import type {\n\tModifierCallback,\n\tWorkflowBinding,\n\tWorkflowInstanceIntrospector,\n\tWorkflowInstanceModifier,\n\tWorkflowIntrospectionOperation,\n\tWorkflowIntrospectionStreamResult,\n\tWorkflowIntrospector,\n\tWorkflowStepSelector,\n} from \"./types\";\n\nfunction normalizeStreamMockChunk(value: unknown): Uint8Array {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\n\tif (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\n\tthrow new TypeError(\n\t\t\"Workflow mockStepResult() ReadableStream chunks must be ArrayBuffer or TypedArray values.\"\n\t);\n}\n\nasync function readStreamMockChunks(\n\tstream: ReadableStream<unknown>\n): Promise<Uint8Array[]> {\n\tif (stream.locked) {\n\t\tthrow new TypeError(\n\t\t\t\"Workflow mockStepResult() received a locked or unreadable ReadableStream.\"\n\t\t);\n\t}\n\n\tconst chunks: Uint8Array[] = [];\n\tconst reader = stream.getReader();\n\tlet fullyRead = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst result = await reader.read();\n\t\t\tif (result.done) {\n\t\t\t\tfullyRead = true;\n\t\t\t\treturn chunks;\n\t\t\t}\n\n\t\t\tconst chunk = normalizeStreamMockChunk(result.value);\n\t\t\tif (chunk.byteLength === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tchunks.push(chunk.slice());\n\t\t}\n\t} finally {\n\t\tif (!fullyRead) {\n\t\t\tawait reader\n\t\t\t\t.cancel(\"stream mock consumption stopped before completion\")\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\ttry {\n\t\t\treader.releaseLock();\n\t\t} catch {\n\t\t\t/** Reader may still be processing cancel(). */\n\t\t}\n\t}\n}\n\nexport class WorkflowInstanceModificationRecorder implements WorkflowInstanceModifier {\n\tconstructor(private readonly operations: WorkflowIntrospectionOperation[]) {}\n\n\tasync disableSleeps(steps?: WorkflowStepSelector[]): Promise<void> {\n\t\tthis.operations.push({ type: \"disableSleeps\", steps });\n\t}\n\n\tasync disableRetryDelays(steps?: WorkflowStepSelector[]): Promise<void> {\n\t\tthis.operations.push({ type: \"disableRetryDelays\", steps });\n\t}\n\n\tasync mockStepResult(\n\t\tstep: WorkflowStepSelector,\n\t\tstepResult: unknown\n\t): Promise<void> {\n\t\tif (stepResult instanceof ReadableStream) {\n\t\t\tconst streamResult: WorkflowIntrospectionStreamResult = {\n\t\t\t\t__workflowIntrospectionStreamResult: true,\n\t\t\t\tchunks: await readStreamMockChunks(stepResult),\n\t\t\t};\n\t\t\tthis.operations.push({\n\t\t\t\ttype: \"mockStepResult\",\n\t\t\t\tstep,\n\t\t\t\tstepResult: streamResult,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.operations.push({ type: \"mockStepResult\", step, stepResult });\n\t}\n\n\tasync mockStepError(\n\t\tstep: WorkflowStepSelector,\n\t\terror: Error,\n\t\ttimes?: number\n\t): Promise<void> {\n\t\tthis.operations.push({\n\t\t\ttype: \"mockStepError\",\n\t\t\tstep,\n\t\t\terror: { name: error.name, message: error.message },\n\t\t\ttimes,\n\t\t});\n\t}\n\n\tasync forceStepTimeout(\n\t\tstep: WorkflowStepSelector,\n\t\ttimes?: number\n\t): Promise<void> {\n\t\tthis.operations.push({ type: \"forceStepTimeout\", step, times });\n\t}\n\n\tasync mockEvent(event: { type: string; payload: unknown }): Promise<void> {\n\t\tthis.operations.push({ type: \"mockEvent\", event });\n\t}\n\n\tasync forceEventTimeout(step: WorkflowStepSelector): Promise<void> {\n\t\tthis.operations.push({ type: \"forceEventTimeout\", step });\n\t}\n}\n\nexport class WorkflowIntrospectorHandle implements WorkflowIntrospector {\n\t#disposed = false;\n\t#sessionId: string | undefined;\n\t#instanceIntrospectors = new Map<string, WorkflowInstanceIntrospector>();\n\t#operations: WorkflowIntrospectionOperation[] = [];\n\n\tconstructor(private readonly workflow: WorkflowBinding) {}\n\n\tasync start(): Promise<void> {\n\t\tthis.#sessionId = await this.workflow.unsafeStartIntrospection();\n\t}\n\n\tprivate getSessionId(): string {\n\t\tif (this.#sessionId === undefined) {\n\t\t\tthrow new Error(\"Workflow introspection has not started.\");\n\t\t}\n\t\treturn this.#sessionId;\n\t}\n\n\tasync modifyAll(fn: ModifierCallback): Promise<void> {\n\t\tconst sessionId = this.getSessionId();\n\t\tawait fn(new WorkflowInstanceModificationRecorder(this.#operations));\n\t\tawait this.workflow.unsafeSetIntrospectionOperations(\n\t\t\tsessionId,\n\t\t\tthis.#operations\n\t\t);\n\t}\n\n\tasync get(): Promise<WorkflowInstanceIntrospector[]> {\n\t\tconst sessionId = this.getSessionId();\n\t\tawait this.syncInstanceIntrospectors(sessionId);\n\n\t\treturn Array.from(this.#instanceIntrospectors.values());\n\t}\n\n\tprivate async syncInstanceIntrospectors(sessionId: string): Promise<void> {\n\t\tconst instanceIds =\n\t\t\tawait this.workflow.unsafeGetIntrospectionInstances(sessionId);\n\n\t\tfor (const instanceId of instanceIds) {\n\t\t\tif (!this.#instanceIntrospectors.has(instanceId)) {\n\t\t\t\tthis.#instanceIntrospectors.set(\n\t\t\t\t\tinstanceId,\n\t\t\t\t\tnew WorkflowInstanceIntrospectorHandle(this.workflow, instanceId)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async stopIntrospectionSession(sessionId: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.syncInstanceIntrospectors(sessionId);\n\t\t} finally {\n\t\t\tawait this.workflow.unsafeStopIntrospection(sessionId);\n\t\t}\n\t}\n\n\tprivate async disposeInstanceIntrospectors(): Promise<void> {\n\t\ttry {\n\t\t\tawait Promise.all(\n\t\t\t\tArray.from(this.#instanceIntrospectors.values(), (introspector) =>\n\t\t\t\t\tintrospector.dispose()\n\t\t\t\t)\n\t\t\t);\n\t\t} finally {\n\t\t\tthis.#instanceIntrospectors.clear();\n\t\t}\n\t}\n\n\t/** Keep this bound; explicit resource management may call the disposer unbound. */\n\tdispose = async (): Promise<void> => {\n\t\tif (this.#disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#disposed = true;\n\t\tconst sessionId = this.#sessionId;\n\n\t\ttry {\n\t\t\tif (sessionId !== undefined) {\n\t\t\t\tawait this.stopIntrospectionSession(sessionId);\n\t\t\t}\n\t\t} finally {\n\t\t\tawait this.disposeInstanceIntrospectors();\n\t\t}\n\t};\n\n\tasync [Symbol.asyncDispose](): Promise<void> {\n\t\tawait this.dispose();\n\t}\n}\n\nexport class WorkflowInstanceIntrospectorHandle implements WorkflowInstanceIntrospector {\n\t#instanceModifier: WorkflowInstanceModifier | undefined;\n\t#instanceModifierPromise: Promise<WorkflowInstanceModifier> | undefined;\n\n\tconstructor(\n\t\tprivate readonly workflow: WorkflowBinding,\n\t\tprivate readonly instanceId: string\n\t) {\n\t\tthis.#instanceModifierPromise = workflow\n\t\t\t.unsafeGetInstanceModifier(instanceId)\n\t\t\t.then((modifier) => {\n\t\t\t\tthis.#instanceModifier = modifier as WorkflowInstanceModifier;\n\t\t\t\tthis.#instanceModifierPromise = undefined;\n\t\t\t\treturn this.#instanceModifier;\n\t\t\t});\n\n\t\t// To avoid an unhandled rejection when the handle is used without modify()\n\t\tvoid this.#instanceModifierPromise.catch(() => {});\n\t}\n\n\tasync modify(fn: ModifierCallback): Promise<WorkflowInstanceIntrospector> {\n\t\tif (this.#instanceModifierPromise !== undefined) {\n\t\t\tthis.#instanceModifier = await this.#instanceModifierPromise;\n\t\t}\n\t\tif (this.#instanceModifier === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t\"could not apply modifications due to internal error. Retrying the test may resolve the issue.\"\n\t\t\t);\n\t\t}\n\n\t\tawait fn(this.#instanceModifier);\n\n\t\treturn this;\n\t}\n\n\tasync waitForStepResult(step: WorkflowStepSelector): Promise<unknown> {\n\t\treturn await this.workflow.unsafeWaitForStepResult(\n\t\t\tthis.instanceId,\n\t\t\tstep.name,\n\t\t\tstep.index\n\t\t);\n\t}\n\n\tasync waitForStatus(status: string): Promise<void> {\n\t\tif (status === \"queued\") {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.workflow.unsafeWaitForStatus(this.instanceId, status);\n\t}\n\n\tasync getOutput(): Promise<unknown> {\n\t\treturn await this.workflow.unsafeGetOutputOrError(this.instanceId, true);\n\t}\n\n\tasync getError(): Promise<{ name: string; message: string }> {\n\t\treturn (await this.workflow.unsafeGetOutputOrError(\n\t\t\tthis.instanceId,\n\t\t\tfalse\n\t\t)) as { name: string; message: string };\n\t}\n\n\t/** Keep this bound; explicit resource management may call the disposer unbound. */\n\tdispose = async (): Promise<void> => {\n\t\tawait this.workflow.unsafeAbort(this.instanceId, \"Instance dispose\");\n\t};\n\n\tasync [Symbol.asyncDispose](): Promise<void> {\n\t\tawait this.dispose();\n\t}\n}\n","import {\n\tWorkflowInstanceIntrospectorHandle,\n\tWorkflowIntrospectorHandle,\n} from \"@cloudflare/workflows-shared/src/introspection\";\nimport type {\n\tWorkflowBinding,\n\tWorkflowInstanceIntrospector,\n\tWorkflowIntrospector,\n} from \"@cloudflare/workflows-shared/src/types\";\n\n// Note(osilva): `introspectWorkflowInstance()` doesn’t need to be async, but we keep it that way\n// to avoid potential breaking changes later and to stay consistent with `introspectWorkflow`.\n\n// In the \"cloudflare:test\" module, the exposed type is `Workflow`. Here we use `WorkflowBinding`\n// (which implements `Workflow`) to access unsafe functions.\nexport async function introspectWorkflowInstance(\n\tworkflow: WorkflowBinding,\n\tinstanceId: string\n): Promise<WorkflowInstanceIntrospector> {\n\tif (!workflow || !instanceId) {\n\t\tthrow new Error(\n\t\t\t\"[WorkflowIntrospector] Workflow binding and instance id are required.\"\n\t\t);\n\t}\n\treturn new WorkflowInstanceIntrospectorHandle(workflow, instanceId);\n}\n\n// Note(osilva): `introspectWorkflow` could be sync with some changes, but we keep it async\n// to avoid potential breaking changes later.\n\n// In the \"cloudflare:test\" module, the exposed type is `Workflow`. Here we use `WorkflowBinding`\n// (which implements `Workflow`) to access unsafe functions.\nexport async function introspectWorkflow(\n\tworkflow: WorkflowBinding\n): Promise<WorkflowIntrospector> {\n\tif (!workflow) {\n\t\tthrow new Error(\"[WorkflowIntrospector] Workflow binding is required.\");\n\t}\n\n\tconst introspector = new WorkflowIntrospectorHandle(workflow);\n\tawait introspector.start();\n\treturn introspector;\n}\n"],"mappings":";;;;;;AAEA,SAAS,aAAa,GAA6B;AAClD,QACC,OAAO,MAAM,YACb,MAAM,QACN,EAAE,YAAY,SAAS,gBACvB,aAAa,KACb,OAAO,EAAE,YAAY,cACrB,WAAW,KACX,OAAO,EAAE,UAAU,cACnB,UAAU,KACV,OAAO,EAAE,SAAS;;AAIpB,SAAS,cAAc,GAA8B;AACpD,QACC,OAAO,MAAM,YACb,MAAM,QACN,UAAU,KACV,OAAO,EAAE,SAAS,YAClB,aAAa,KACb,MAAM,QAAQ,EAAE,QAAQ,IACxB,EAAE,QAAQ,OAAO,UAAU,OAAO,UAAU,SAAS;;AAGvD,SAAS,eAAe,GAAgC;AACvD,QAAO,MAAM,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc;;AAGlD,eAAsB,kBACrB,IACA,YACA,sBAAsB,iBACrB;AACD,KAAI,CAAC,aAAa,GAAG,CACpB,OAAM,IAAI,UACT,kFACA;AAEF,KAAI,CAAC,eAAe,WAAW,CAC9B,OAAM,IAAI,UACT,qFACA;AAGF,KAAI,OAAO,wBAAwB,SAClC,OAAM,IAAI,UACT,8EACA;CAGF,MAAM,YAAY,OAAe,IAAI,GAAG,QAAQ,MAAM,OAAK,CAAC;CAC5D,MAAM,mBAAmB,SAAS,oBAAoB;CAGtD,MAAM,SAAS,8BAA8B,iBAAiB;;;;;AAK9D,OAAM,GAAG,QAAQ,OAAO,CAAC,KAAK;CAM9B,MAAM,yBAH8B,MAAM,GACxC,QAAQ,oBAAoB,iBAAiB,GAAG,CAChD,KAAuB,EACiC,QAAQ,KAChE,EAAE,WAAW,KACd;CAGD,MAAM,sBAAsB,GAAG,QAC9B,eAAe,iBAAiB,qBAChC;AACD,MAAK,MAAM,aAAa,YAAY;AACnC,MAAI,sBAAsB,SAAS,UAAU,KAAK,CACjD;EAGD,MAAM,UAAU,UAAU,QAAQ,KAAK,UAAU,GAAG,QAAQ,MAAM,CAAC;AACnE,UAAQ,KAAK,oBAAoB,KAAK,UAAU,KAAK,CAAC;AACtD,QAAM,GAAG,MAAM,QAAQ;;;;;;;;;;AC1EzB,MAAa,OAAO,IAAI,MACvB,EAAE,EACF,EACC,IAAI,GAAG,GAAG;CACT,MAAM,SAAS,QAAQ;CAIvB,MAAM,QAAQ,OAAO;AACrB,QAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;GAE3D,CACD;AAED,SAAgB,uBAA0C;AACzD,QAAO,OAAO,sBAAsB,UAAU,+BAA+B;CAC7E,MAAM,UAAU,kBAAkB,gBAAgB;AAGlD,QACC,YAAY,QACZ,4CACC,OAAO,KAAK,kBAAkB,gBAAgB,CAAC,KAAK,KAAK,CAC1D;CACD,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzC,QAAO;EACN,GAAG;EACH,iCAAiC,IAAI,IACpC,cAAc,gCACd;EACD;;AAGF,SAAgB,oBACf,gBACS;CACT,MAAM,UAAU,sBAAsB;AACtC,KAAI,QAAQ,SAAS,OACpB,OAAM,IAAI,MACT,SAAS,eAAe,+GAA+G,KAAK,UAAU,QAAQ,GAC9J;AAEF,QAAO,QAAQ;;;;;AC5ChB,MAAMA,6BAAyD,EAC9D,YAAY,aACZ;AAED,MAAM,gBAAgB;AAEtB,IAAI,eAAe;AACnB,MAAM,eAAe,OAAO,eAAe;AAC3C,MAAM,gCAAgB,IAAI,KAA+B;AAEzD,SAAS,yBAAyB,GAAyC;AAC1E,QACC,aAAa,UACb,wCAAwC,KAAK,EAAE,YAAY,KAAK,IAChE,iBAAiB,KACjB,OAAO,EAAE,gBAAgB,cACzB,gBAAgB,KAChB,OAAO,EAAE,eAAe,cACxB,kBAAkB,KAClB,OAAO,EAAE,iBAAiB,cAC1B,SAAS,KACT,OAAO,EAAE,QAAQ;;AAGnB,SAAS,oBAAoB,GAAoC;AAChE,QACC,OAAO,MAAM,YACb,MAAM,SACL,EAAE,YAAY,SAAS,mBACvB,EAAE,YAAY,SAAS,gBACxB,WAAW,KACX,OAAO,EAAE,UAAU,cACnB,QAAQ,KACR,OAAO,EAAE,OAAO;;AASlB,IAAIC;AACJ,SAAS,2BAAqD;AAC7D,KAAI,2BAA2B,OAC9B,QAAO;AAER,0BAAyB,EAAE;CAE3B,MAAM,UAAU,sBAAsB;AACtC,KAAI,QAAQ,oCAAoC,OAC/C,QAAO;AAGR,MAAK,MAAM,CAAC,KAAK,eAAe,QAAQ,iCAAiC;AAGxE,MAAI,WAAW,eAAe,OAC7B;EAGD,MAAM,YAAYC,MAAI,QAAS,UAAsC;AACrE,SACC,yBAAyB,UAAU,EACnC,YAAY,IAAI,yCAChB;AACD,yBAAuB,KAAK,UAAU;;AAGvC,QAAO;;AAGR,SAAS,kBAAkB,MAAyB;CAGnD,MAAM,WAAW,KAAK,GAAG,UAAU;CACnC,MAAM,aAAa,0BAA0B;AAI7C,MAAK,MAAM,aAAa,WACvB,KAAI;AACH,YAAU,aAAa,SAAS;AAChC;SACO;AAIT,OAAM,IAAI,MACT,8GACA;;AAGF,eAAe,UACd,MACA,UACa;CACb,MAAM,KAAK;AACX,eAAc,IAAI,IAAI,SAAS;CAE/B,MAAM,WAAW,MAAM,KAAK,MAAM,YAAY;EAC7C,IAAI,GAAG,gBAAgB,IAAI;EAG3B,UAAU;EACV,CAAC;AAGF,QAAO,cAAc,IAAI,GAAG,EAAE,8BAA8B,KAAK;CACjE,MAAM,SAAS,cAAc,IAAI,GAAG;AACpC,eAAc,OAAO,GAAG;AAExB,KAAI,WAAW,aACd,QAAO;UACG,SAAS,GACnB,QAAO;KAEP,OAAM;;AAMR,eAAsB,mBACrB,MACA,UACa;AACb,KAAI,CAAC,oBAAoB,KAAK,CAC7B,OAAM,IAAI,UACT,0FACA;AAEF,KAAI,OAAO,aAAa,WACvB,OAAM,IAAI,UACT,iFACA;AAGF,mBAAkB,KAAK;AACvB,QAAO,UAAU,MAAM,SAAS;;AAGjC,eAAe,SAAS,UAAyB,OAA2B;AAE3E,KADc,MAAM,MAAM,QAAQ,UAAU,KAC9B,KACb,QAAO;AAER,OAAM,MAAM,QAAQ,aAAa;AACjC,OAAM,SAAS,SAAS;AACxB,QAAO;;AAIR,eAAsB,sBACrB,MAC6B;AAC7B,KAAI,CAAC,oBAAoB,KAAK,CAC7B,OAAM,IAAI,UACT,6FACA;AAEF,QAAO,MAAM,mBAAmB,MAAM,SAAS;;AAKhD,eAAsB,mBACrB,MACA,UAAwCC,4BACxB;AAChB,KAAI,CAAC,oBAAoB,KAAK,CAC7B,OAAM,IAAI,UACT,0FACA;AAEF,OAAM,cAAc,MAAM,MAAM,QAAQ;;;;;;;;;;;;;;AAezC,SAAgB,kBACf,UAGa;AAOb,QAAO,UAJID,MAAI,uCAGC,IAAI,YAAY,EACT,SAAS;;AAGjC,eAAsB,sBACrB,SACA,UACA,OACgC;CAChC,MAAM,WAAW,QAAQ,KAAK;AAC9B,KAAI,aAAa,OAChB;AAGD,QAAO,OAAO,aAAa,UAAU,oBAAoB,gBAAgB;AACzE,KAAI;EACH,MAAM,WAAW,cAAc,IAAI,SAAS;AAC5C,SAAO,OAAO,aAAa,YAAY,yBAAyB,WAAW;EAC3E,MAAM,SAAS,MAAM,SAAS,UAAU,MAAM;AAO9C,MAAI,kBAAkB,UAAU;AAC/B,iBAAc,IAAI,UAAU,aAAa;AACzC,UAAO;QAEP,eAAc,IAAI,UAAU,OAAO;AAEpC,SAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;UAClC,GAAG;AACX,gBAAc,IAAI,UAAU,EAAE;AAC9B,SAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;;;AAI5C,eAAsB,qBACrB,WAC6B;AAC7B,KAAI,CAAC,yBAAyB,UAAU,CACvC,OAAM,IAAI,UACT,iGACA;CASF,MAAM,YAAY,OAAO,QAAQA,MAAI,CAAC,MACpC,UAAU,cAAc,MAAM,GAC/B,GAAG;AACJ,QAAO,cAAc,QAAW,4CAA4C;CAE5E,MAAM,UAAU,sBAAsB;CACtC,MAAM,eAAe,IAAI,gBAAgB,EAAE,cAAc,WAAW,CAAC;AACrE,KAAI,QAAQ,aAAa,OACxB,cAAa,IAAI,eAAe,QAAQ,SAAS;CAGlD,MAAM,MAAM,sCAAsC,aAAa,UAAU;CACzE,MAAM,MAAM,MAAMA,MAAI,uCAAuC,MAAM,IAAI;AACvE,QAAO,YAAY,IAAI,QAAQ,IAAI;CACnC,MAAM,MAAM,MAAM,IAAI,MAAM;AAC5B,QAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,QAAO,IAAI,KAAK,OAAO;AACtB,SAAO,OAAO,OAAO,SAAS;AAC9B,SAAO,UAAU,aAAa,GAAG;GAChC;;;;;;;;;;;;AC9QH,IAAI,qBAAqB;;AAGzB,SAAgB,oBAAoB,IAAkB;AACrD,sBAAqB;;AAGtB,MAAM,YAAY,OAAO,YAAY;;;;;;;;;AAUrC,eAAsB,iBACX,WACM;CAChB,MAAME,SAAoB,EAAE;AAE5B,QAAO,UAAU,SAAS,GAAG;EAC5B,MAAM,QAAQ,UAAU,OAAO,EAAE;EACjC,IAAIC;EACJ,MAAM,SAAS,MAAM,QAAQ,KAAK,CACjC,QAAQ,WAAW,MAAM,CAAC,MAAM,aAAa,EAAE,SAAS,EAAE,EAC1D,IAAI,SACF,YACC,YAAY,iBAAiB,QAAQ,UAAU,EAAE,mBAAmB,CACtE,CACD,CAAC;AACF,eAAa,UAAU;AAEvB,MAAI,WAAW,WAAW;AACzB,aAAU,KACT,yBAAyB,MAAM,OAAO,+CACnB,qBAAqB,IAAK,6LAI7C;AAED,aAAU,SAAS;AACnB;;AAID,OAAK,MAAM,WAAW,OAAO,QAC5B,KAAI,QAAQ,WAAW,WACtB,QAAO,KAAK,QAAQ,OAAO;;AAK9B,KAAI,OAAO,WAAW,EAErB,OAAM,OAAO;UACH,OAAO,SAAS,EAE1B,OAAM,IAAI,eAAe,OAAO;;AAYlC,MAAMC,kBAA6B,EAAE;AACrC,SAAgB,wBAAwB,SAAkB;AACzD,iBAAgB,KAAK,QAAQ;;AAE9B,SAAgB,yBAAwC;AACvD,QAAO,iBAAiB,gBAAgB;;AAGzC,MAAa,sBAAsB,IAAI,mBAAqC;AAC5E,SAAgB,kCAAkC,SAA2B;CAC5E,MAAM,iBAAiB,oBAAoB,UAAU;AACrD,KAAI,mBAAmB,OACtB,yBAAwB,QAAQ;KAIhC,gBAAe,UAAU,QAAQ;;;;;AC/FnC,MAAM,yCAAyB,IAAI,SAA2B;;;;;;;;AAS9D,SAAgB,8BACL,KACV,UACI;AAEJ,KAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE;AACrC,yBAAuB,IAAI,IAAI;EAG/B,MAAM,oBAAoB,IAAI;AAC9B,MAAI,aAAa,YAA8B;AAC9C,2BAAwB,QAAQ;AAChC,UAAO,kBAAkB,KAAK,KAAK,QAAQ;;AAI5C,MAAI,oBAAoB,IAAI,QAAQ,CACnC,QAAO,eAAe,KAAK,WAAW,EACrC,OAAO,mBAAmB,IAAI,QAAQ,EACtC,CAAC;;AAGJ,QAAO,oBAAoB,IAAI,KAAK,SAAS;;;;;;;AAQ9C,SAAgB,mBACf,WACqB;AACrB,QAAO,IAAI,MAAMC,WAAS,EACzB,IAAI,QAAQ,GAA6B;AACxC,MAAI,KAAK,OACR,QAAO,OAAO;AAEf,UAAQ,KACP,oCAAoC,EAAE,6DACtB,EAAE,qLAElB;IAGF,CAAC;;;;;AAMH,SAAgB,oBACf,WACgC;AAChC,QACE,WAAqD,YACnD,mBAAmB,sBAAsBA,cAAY;;;;;;;;;;AC/C1D,eAAe,aACd,WACmC;;;;;;AAMnC,QAAO,wBAAwB;AAC9B,SAAO,kBAAkB,aAAa,OAAO,UAAU;GACtD;;AAGH,MAAM,eAAe,CAAC,OAAO;;;;;;;;AAS7B,SAAS,0BAOR,YACA,wBACoC;CAEpC,SAAS,MAAM,GAAG,MAAgD;AAIjE,QAAM,YAAY,IAAI,MAAM,MAAM,WAAW,EAC5C,IAAI,QAAQ,KAAK,UAAU;GAC1B,MAAM,QAAQ,QAAQ,IAAI,QAAQ,KAAK,SAAS;AAChD,OAAI,UAAU,OACb,QAAO;AAGR,OAAI,OAAO,QAAQ,YAAY,aAAa,SAAS,IAAI,CACxD;AAED,UAAO,uBAAuB,KAAK,UAAU,IAAc;KAE5D,CAAC;AAEF,SAAO,QAAQ,UAAU,YAAY,MAAM,MAAM;;AAGlD,SAAQ,eAAe,MAAM,WAAW,WAAW,UAAU;AAC7D,SAAQ,eAAe,OAAO,WAAW;AAEzC,QAAO;;;;;;;;AASR,SAAS,4BACR,MACA,UAGA,KACO;AAEP,KAAI,CADoB,QAAQ,IAAI,KAAK,WAAW,IAAI,EAClC;EACrB,MAAM,YAAY,KAAK,UAAU,IAAI;EACrC,MAAM,iBAAiB,QAAQ,IAAI,UAAU,IAAI;EACjD,IAAI,UAAU;AACd,MAAI,eACH,WAAU;GACT,mDAAmD,UAAU;GAC7D;GACA,6CAA6C,IAAI,4BAA4B,IAAI;GACjF,mCAAmC,IAAI,4BAA4B,IAAI;GACvE,CAAC,KAAK,KAAK;MAEZ,WAAU,uCAAuC,UAAU;AAE5D,QAAM,IAAI,UAAU,QAAQ;;;AAI9B,SAAS,eACR,MACA,UAGA,KACU;AACV,6BAA4B,MAAM,UAAU,IAAI;AAEhD,QAAO,QAAQ,IAAiB,KAAK,WAAW,KAAoB,SAAS;;;;;;;;;;;;;;;;;;AAwB9E,SAAS,+BACR,KACA,UACA,YACC;CACD,MAAM,KAAK,eAAgB,GAAG,MAAiB;AAC9C,SAAO,kBAAkB,YAAY,OAAO,YAAY;AACvD,OAAI;IACH,MAAM,UAAU,MAAM;AACtB,QAAI,OAAO,YAAY,WACtB,QAAO,QAAQ,GAAG,KAAK;QAEvB,OAAM,IAAI,UAAU,GAAG,KAAK,UAAU,IAAI,CAAC,qBAAqB;aAExD;AACT,aAAS;;IAET;;AAEH,IAAG,QAAQ,aAAa,eAAe,SAAS,KAAK,aAAa,WAAW;AAC7E,IAAG,SAAS,eAAe,SAAS,MAAM,WAAW;AACrD,IAAG,WAAW,cAAc,SAAS,QAAQ,UAAU;AACvD,QAAO;;AAGR,MAAM,mCAAmB,IAAI,SAA8C;;;;;;;;;;;AAY3E,eAAe,kBACd,OACA,UACa;CACb,MAAM,WAAW,iBAAiB,IAAI,MAAM,IAAI,QAAQ,SAAS;CACjE,IAAIC;CACJ,MAAM,UAAU,IAAI,SAAe,YAAY;AAC9C,mBAAiB;GAChB;CACF,MAAM,gBAAgB;EACrB,MAAM,mBAAmB;AACzB,MAAI,qBAAqB,OACxB,mBAAkB;;CAGpB,MAAM,SAAS,SAAS,YAAY,GAAG,CAAC,WAAW,SAAS,QAAQ,CAAC;AACrE,kBAAiB,IAAI,OAAO,QAAQ;AACpC,QAAO;;AAoBR,SAAS,mBACR,UAGC;AACD,QAAO;;AAMR,MAAM,yBAAyB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,sBAAsB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;AASD,MAAMC,+BAEF,IAAI,IAAI;CAAC;CAAoB;CAAkB;CAAiB,CAAU;;;;;;AA6B9E,eAAe,0BACd,OACA,YAC0D;CAC1D,MAAM,WAAW,oBAAoB,UAAU;CAC/C,MAAM,aAAa,MAAM,aAAa,SAAS;CAC/C,MAAM,kBACL,OAAO,eAAe,YACtB,eAAe,QACf,cAAc,cACd,WAAW;AACZ,KAAI,CAAC,iBAAiB;EACrB,MAAM,UACL,GAAG,SAAS,qBAAqB,WAAW;AAE7C,QAAM,IAAI,UAAU,QAAQ;;AAE7B,QAAO;EAAE;EAAU;EAAiB;;;;;;;;AASrC,eAAe,+BACd,SACA,YACA,KACmB;CACnB,MAAM,EAAE,QAAQ,mBAAmB,QAAQ;CAC3C,MAAM,EAAE,UAAU,oBAAoB,MAAM,0BAC3CC,OACA,WACA;AAED,QAAO,8BAA8B,WAAW;EAE/C,MAAMC,QAAMD;EACZ,MAAM,kCAAkC,YAAY,WAAW,aAAa,SAAS;AACrF,MAAI,OAAO,oBAAoB,WAC9B,OAAM,IAAI,UAAU,gCAAgC;EAErD,MAAM,OAAO;EACb,MAAM,WAAW,IAAI,KAAK,KAAKC,MAAI;AAEnC,MAAI,EAAE,oBAAoB,kBACzB,OAAM,IAAI,UAAU,gCAAgC;EAGrD,MAAM,QAAQ,eAAe,MAAM,UAAU,IAAI;AACjD,MAAI,OAAO,UAAU,WAGpB,SAAQ,GAAG,SACV,8BAA8B,WAAW,MAAM,MAAM,UAAU,KAAK,CAAC;MAEtE,QAAO;GAEP;;AAGH,SAAgB,8BACf,YAC0B;CAC1B,MAAM,UAAU,0BACf,kBACA,SAAkD,KAAK;AAEtD,MAAK,oBAA0C,SAAS,IAAI,CAC3D;AAID,SAAO,+BAA+B,KADrB,+BAA+B,MAAM,YAAY,IAAI,EACjB,KAAK;GAE3D;AAGD,MAAK,MAAM,OAAO,uBACjB,SAAQ,UAAU,OAAO,eAExB,OACC;EACD,MAAM,EAAE,UAAU,oBAAoB,MAAM,0BAC3C,KAAK,KACL,WACA;AAED,SAAO,8BAA8B,KAAK,WAAW;AACpD,OAAI,OAAO,oBAAoB,YAAY,oBAAoB,MAAM;IAEpE,MAAM,UAAW,gBAA4C;AAC7D,QAAI,OAAO,YAAY,WACtB,QAAO,QAAQ,KAAK,iBAAiB,OAAOD,OAAY,KAAK,IAAI;SAC3D;KACN,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS,iBAAiB,IAAI;AAClF,WAAM,IAAI,UAAU,QAAQ;;cAEnB,OAAO,oBAAoB,YAAY;IAGjD,MAAM,WAAW,IADJ,gBACa,KAAK,KAAKA,MAAW;AAE/C,QAAI,EAAE,oBAAoB,mBAAmB;KAC5C,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS;AAC7D,WAAM,IAAI,UAAU,QAAQ;;IAE7B,MAAM,UAAU,SAAS;AACzB,QAAI,OAAO,YAAY,WACtB,QAAQ,QAAsC,KAAK,UAAU,MAAM;SAC7D;KACN,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS,iBAAiB,IAAI;AAClF,WAAM,IAAI,UAAU,QAAQ;;UAEvB;IAEN,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS,mCAAmC;AAChG,UAAM,IAAI,UAAU,QAAQ;;IAE5B;;AAGJ,QAAO;;AAaR,MAAM,uBAAuB,OAAO,uBAAuB;AAC3D,MAAM,YAAY,OAAO,YAAY;AACrC,MAAM,kBAAkB,OAAO,kBAAkB;AAiBjD,eAAe,4BACd,SACA,WACA,KACmB;CACnB,MAAM,EAAE,UAAU,cAAc,aAAa,MAAM,QAAQ,kBAAkB;AAC7E,KAAI,EAAE,oBAAoBE,gBAAqB;EAC9C,MAAM,UAAU,YAAY,UAAU,eAAe,SAAS;AAC9D,QAAM,IAAI,UAAU,QAAQ;;AAE7B,6BAA4B,cAAc,UAAU,IAAI;AAGxD,KAAI,OAAO,OAAO,UAAU,IAAI,CAC/B,OAAM,IAAI,UACT,kDAAkD,KAAK,UAAU,IAAI,CAAC,GACtE;CAEF,MAAM,QAAQ,QAAQ,IAAI,UAAU,KAAK,SAAS;AAClD,KAAI,OAAO,UAAU,WAEpB,QAAO,MAAM,KAAK,SAAS;KAE3B,QAAO;;AAIT,SAAgB,2BACf,WAC4B;CAC5B,MAAM,UAAU,0BAGdA,eAAoB,SAAsC,KAAK;AAEhE,MAAK,uBAA6C,SAAS,IAAI,CAC9D;AAID,SAAO,+BAA+B,KADrB,4BAA4B,MAAM,WAAW,IAAI,EACb,KAAK;GACzD;AAEF,SAAQ,UAAU,mBAAmB,iBAEnC;EACD,MAAM,EAAE,KAAK,eAAQ,mBAAmB,KAAK;EAC7C,MAAM,WAAW,oBAAoB,iBAAiB;EAItD,MAAM,eADa,MAAM,aAAa,SAAS,EAChB;AAC/B,MAAI,OAAO,gBAAgB,WAC1B,OAAM,IAAI,UACT,GAAG,SAAS,qBAAqB,UAAU,iBAC3C;AAEF,OAAK,0BAA0B;AAC/B,MAAI,KAAK,0BAA0B,aAAa;AAM/C,SAAM,IAAI,4BAAmC;AAE5C,UAAM,IAAI,MACT,GAAG,SAAS,kGAEZ;KACA;AACF,UAAO,KAAK,cAAc;;AAE3B,MAAI,KAAK,eAAe,QAAW;AAClC,QAAK,aAAa,IAAI,KAAK,sBAAsB,KAAKD,MAAI;AAE1D,SAAM,IAAI,sBAAsB,YAAY,GAAG;;AAEhD,SAAO;GACN;GACA,cAAc,KAAK;GACnB,UAAU,KAAK;GACf;;AAIF,SAAQ,UAAU,QAAQ,eAEzB,SACC;EACD,MAAM,EAAE,QAAQ,mBAAmB,KAAK;EAGxC,MAAM,EAAE,UAAU,aAAa,MAAM,KAAK,kBAAkB;EAG5D,MAAM,WAAW,MAAM,sBAAsB,SAAS,UAAU,IAAI;AACpE,MAAI,aAAa,OAChB,QAAO;AAIR,MAAI,SAAS,UAAU,QAAW;GACjC,MAAM,UAAU,GAAG,UAAU,eAAe,SAAS;AACrD,SAAM,IAAI,UAAU,QAAQ;;AAE7B,SAAO,SAAS,MAAM,QAAQ;;AAI/B,MAAK,MAAM,OAAO,qBAAqB;AACtC,MAAI,QAAQ,QACX;AAED,UAAQ,UAAU,OAAO,eAExB,GAAG,MACF;AACD,UAAO,kBAAkB,MAAM,OAAO,YAAY;AACjD,QAAI;KACH,MAAM,EAAE,UAAU,aAAa,MAAM,KAAK,kBAAkB;KAC5D,MAAM,UAAU,SAAS;AACzB,SAAI,OAAO,YAAY,WACtB,QAAQ,QAAsC,MAAM,UAAU,KAAK;cACzD,6BAA6B,IAAI,IAAI,CAC/C;UACM;MACN,MAAM,UAAU,GAAG,UAAU,eAAe,SAAS,uBAAuB,IAAI;AAChF,YAAM,IAAI,UAAU,QAAQ;;cAEpB;AACT,cAAS;;KAET;;;AAIJ,QAAO;;AAaR,SAAgB,gCAAgC,YAAoB;CACnE,MAAM,UAAU,0BACf,oBACA,SAAoD,KAAK;AAExD,MAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CACzB;AAQD,SAAO,+BAA+B,KALrB,+BAChB,MACA,YACA,IACA,EACoD,KAAK;GAE3D;AAED,SAAQ,UAAU,MAAM,eAEvB,GAAG,MACF;EACD,MAAM,EAAE,UAAU,oBAAoB,MAAM,0BAC3CD,OACA,WACA;AAED,MAAI,OAAO,oBAAoB,YAAY;GAG1C,MAAM,WAAW,IADJ,gBACa,KAAK,KAAKA,MAAW;AAE/C,OAAI,EAAE,oBAAoB,qBAAqB;IAC9C,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS;AAC7D,UAAM,IAAI,UAAU,QAAQ;;GAE7B,MAAM,UAAU,SAAS;AACzB,OAAI,OAAO,YAAY,WACtB,QAAO,8BAA8B,KAAK,WACzC,QAAQ,KAAK,UAAU,GAAG,KAAK,CAC/B;QACK;IACN,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS,yCAAyC,OAAO;AAC7G,UAAM,IAAI,UAAU,QAAQ;;SAEvB;GAEN,MAAM,UAAU,YAAY,WAAW,aAAa,SAAS,uDAAuD;AACpH,SAAM,IAAI,UAAU,QAAQ;;;AAI9B,QAAO;;;;;AC9nBR,MAAM,iBAAiB,OAAO,iBAAiB;AAQ/C,MAAM,aAAa,OAAO,aAAa;AACvC,IAAM,mBAAN,MAAM,iBAAiB;CAEtB,CAAC,cAAyB,EAAE;CAE5B,YAAY,MAA6B;AACxC,MAAI,SAAS,eACZ,OAAM,IAAI,UAAU,sBAAsB;;CAK5C,AAAS,UAAU,oBAAoB,QAAQ,GAC5C,mBAAmB,QAAQ,GAC3B;CAEH,UAAU,SAAkB;AAC3B,MAAI,EAAE,gBAAgB,kBACrB,OAAM,IAAI,UAAU,qBAAqB;AAE1C,OAAK,YAAY,KAAK,QAAQ;AAC9B,0BAAwB,QAAQ;;CAGjC,yBAA+B;;AAEhC,SAAgB,yBAA2C;AAC1D,QAAO,IAAI,iBAAiB,eAAe;;AAG5C,SAAS,uBAAuB,GAA8C;AAC7E,QACC,OAAO,MAAM,YACb,MAAM,QACN,cAAc,KACd,MAAM,QAAQ,EAAE,YAAY;;AAG9B,eAAsB,uBAAuB,KAA6B;AACzE,KAAI,CAAC,uBAAuB,IAAI,CAC/B,OAAM,IAAI,UACT,mMAEA;AAEF,QAAO,iBAAiB,IAAI,YAAY;;AAOzC,IAAM,sBAAN,MAAM,oBAAoB;CAEzB,AAAS;CACT,AAAS;CAET,YAAY,MAA6B,SAAmC;AAC3E,MAAI,SAAS,eACZ,OAAM,IAAI,UAAU,sBAAsB;EAG3C,MAAM,gBAAgB,OAAO,SAAS,iBAAiB,KAAK,KAAK,CAAC;EAClE,MAAM,OAAO,OAAO,SAAS,QAAQ,GAAG;AAGxC,SAAO,iBAAiB,MAAM;GAC7B,eAAe,EACd,MAAM;AACL,WAAO;MAER;GACD,MAAM,EACL,MAAM;AACL,WAAO;MAER;GACD,CAAC;;CAGH,UAAgB;AACf,MAAI,EAAE,gBAAgB,qBACrB,OAAM,IAAI,UAAU,qBAAqB;;;AAI5C,SAAgB,0BACf,SACsB;AACtB,KAAI,YAAY,UAAa,OAAO,YAAY,SAC/C,OAAM,IAAI,UACT,gGACA;AAEF,QAAO,IAAI,oBAAoB,gBAAgB,QAAQ;;AAOxD,MAAM,SAAS,OAAO,SAAS;AAC/B,MAAM,OAAO,OAAO,OAAO;AAC3B,MAAM,YAAY,OAAO,YAAY;AACrC,MAAM,UAAU,OAAO,UAAU;AACjC,IAAM,eAAN,MAAM,aAA2C;CAEhD,CAASG;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,CAAC,UAAU;CACX,CAAC,QAAQ;CAET,YACC,MACA,YACA,SACC;AACD,MAAI,SAAS,eACZ,OAAM,IAAI,UAAU,sBAAsB;AAE3C,QAAKA,aAAc;EAEnB,MAAM,KAAK,OAAO,QAAQ,GAAG;EAE7B,IAAIC;AAEJ,MAAI,OAAO,QAAQ,cAAc,SAChC,aAAY,IAAI,KAAK,QAAQ,UAAU;WAC7B,QAAQ,qBAAqB,KACvC,aAAY,IAAI,KAAK,QAAQ,UAAU,SAAS,CAAC;MAEjD,OAAM,IAAI,UACT,sHACA;EAGF,IAAIC;AAEJ,MAAI,OAAO,QAAQ,aAAa,SAC/B,YAAW,QAAQ;MAEnB,OAAM,IAAI,UACT,uHACA;AAGF,MAAI,oBAAoB,QACvB,OAAM,IAAI,UACT,0DACA;EAEF,MAAM,OAAO,gBAAgB,QAAQ,KAAK;AAG1C,SAAO,iBAAiB,MAAM;GAC7B,IAAI,EACH,MAAM;AACL,WAAO;MAER;GACD,WAAW,EACV,MAAM;AACL,WAAO;MAER;GACD,MAAM,EACL,MAAM;AACL,WAAO;MAER;GACD,UAAU,EACT,MAAM;AACL,WAAO;MAER;GACD,CAAC;;CAGH,QAAQ;AACP,MAAI,EAAE,gBAAgB,cACrB,OAAM,IAAI,UAAU,qBAAqB;AAE1C,MAAI,MAAKF,WAAY,WACpB;AAED,MAAI,MAAKA,WAAY,UAAU;AAC9B,WAAQ,KACP,yCAAyC,KAAK,GAAG,wGAEjD;AACD;;AAED,MAAI,KAAK,OAAO;AACf,WAAQ,KACP,yCAAyC,KAAK,GAAG,kGAEjD;AACD;;AAED,OAAK,UAAU;;CAGhB,MAAM;AACL,MAAI,EAAE,gBAAgB,cACrB,OAAM,IAAI,UAAU,qBAAqB;AAE1C,MAAI,MAAKA,WAAY,SACpB;AAED,MAAI,MAAKA,WAAY,YAAY;AAChC,WAAQ,KACP,uCAAuC,KAAK,GAAG,0GAE/C;AACD;;AAED,MAAI,KAAK,SAAS;AACjB,WAAQ,KACP,uCAAuC,KAAK,GAAG,oGAE/C;AACD;;AAED,OAAK,QAAQ;;;AAGf,IAAM,kBAAN,MAAM,gBAAmD;CAExD,AAAS;CACT,AAAS;CACT,AAAS;CACT,CAAC,aAAa;CACd,CAAC,WAAW;CAEZ,YACC,MACA,aACA,gBACC;AACD,MAAI,SAAS,eACZ,OAAM,IAAI,UAAU,sBAAsB;EAG3C,MAAM,QAAQ,OAAO,YAAY;EACjC,MAAM,WAAW,eAAe,KAC9B,YAAY,IAAI,aAAa,gBAAgB,MAAM,QAAQ,CAC5D;EACD,MAAMG,WAAiC,EACtC,SAAS;GACR,cAAc;GACd,cAAc;GACd,wCAAwB,IAAI,KAAK,EAAE;GACnC,EACD;AAGD,SAAO,iBAAiB,MAAM;GAC7B,OAAO,EACN,MAAM;AACL,WAAO;MAER;GACD,UAAU,EACT,MAAM;AACL,WAAO;MAER;GACD,UAAU,EACT,MAAM;AACL,WAAO;MAER;GACD,CAAC;;CAGH,WAAW;AACV,MAAI,EAAE,gBAAgB,iBACrB,OAAM,IAAI,UAAU,qBAAqB;AAE1C,MAAI,KAAK,UAAU;AAClB,WAAQ,KACP,4HAEA;AACD;;AAED,OAAK,aAAa;;CAGnB,SAAS;AACR,MAAI,EAAE,gBAAgB,iBACrB,OAAM,IAAI,UAAU,qBAAqB;AAE1C,MAAI,KAAK,YAAY;AACpB,WAAQ,KACP,4HAEA;AACD;;AAED,OAAK,WAAW;;;AAGlB,SAAgB,mBACf,WACA,UACqB;AACrB,KAAI,UAAU,WAAW,EAExB,OAAM,IAAI,UACT,+EACA;AAEF,KAAI,CAAC,MAAM,QAAQ,SAAS,CAC3B,OAAM,IAAI,UACT,8EACA;AAEF,QAAO,IAAI,gBAAgB,gBAAgB,WAAW,SAAS;;AAEhE,eAAsB,eACrB,OACA,KAC8B;AAE9B,KAAI,EAAE,iBAAiB,iBACtB,OAAM,IAAI,UACT,yJAEA;AAGF,KAAI,EAAE,eAAe,kBACpB,OAAM,IAAI,UACT,sKAEA;AAEF,OAAM,uBAAuB,IAAI;CAEjC,MAAMC,gBAAqC,EAAE;CAC7C,MAAMC,eAAyB,EAAE;AACjC,MAAK,MAAM,WAAW,MAAM,UAAU;AACrC,MAAI,QAAQ,QACX,eAAc,KAAK,EAAE,OAAO,QAAQ,IAAI,CAAC;AAE1C,MAAI,QAAQ,MACX,cAAa,KAAK,QAAQ,GAAG;;AAG/B,QAAO;EACN,SAAS;EACT,YAAY,EACX,OAAO,MAAM,YACb;EACD,QAAQ,MAAM;EACd;EACA;EACA;;AAOF,SAAS,wBACR,OACyD;AACzD,QACC,YAAY,SACZ,OAAO,MAAM,WAAW,YACxB,MAAM,WAAW,QACjB,WAAW,MAAM,UACjB,OAAO,MAAM,OAAO,UAAU;;AAYhC,SAAgB,wBACf,MACiD;AACjD,KAAI,OAAO,SAAS,YAAY,SAAS,KACxC,OAAM,IAAI,UACT,8FACA;AAEF,KAAI,EAAE,KAAK,mBAAmB,SAC7B,OAAM,IAAI,UACT,6GACA;AAGF,KACC,KAAK,iBAAiB,UACtB,OAAO,KAAK,iBAAiB,SAE7B,OAAM,IAAI,UACT,iHACA;AAEF,KAAI,KAAK,SAAS,UAAa,OAAO,KAAK,SAAS,WACnD,OAAM,IAAI,UACT,2GACA;AAEF,KACC,KAAK,WAAW,UAChB,EAAE,OAAO,KAAK,WAAW,YAAY,KAAK,WAAW,MAErD,OAAM,IAAI,UACT,2GACA;AAEF,KACC,KAAK,SAAS,UACd,EAAE,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,MAEjD,OAAM,IAAI,UACT,yGACA;AAGF,KAAI,CAAC,wBAAwB,IAAI,CAChC,OAAM,IAAI,UACT,oFACA;CAGF,MAAM,MAAM,wBAAwB;AACpC,QAAO;EAEN,SAAS,KAAK,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK;EACjD,cAAc,KAAK,gBAAgB;GAClC,aAAa,IAAI;EAClB,WAAW,IAAI,UAAU,KAAK,IAAI;EAClC,wBAAwB,IAAI,uBAAuB,KAAK,IAAI;EAC5D,MAAM,KAAK,WAAW,UAAU;AAC/B,OAAI,KAAK,SAAS,OACjB,OAAM,IAAI,UACT,qHACA;AAEF,OAAI,cAAc,OACjB,QAAO,KAAK,KAAK,KAAK,QAAQ;QACxB;AACN,QAAI,OAAO,cAAc,SACxB,aAAY,IAAI,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,UAAU;IAE5D,MAAM,cAAc,IAAI,QAAQ,WAAW,SAAS;AACpD,WAAO,KAAK,KAAK,YAAY;;;EAG/B;EACA,QAAQ,KAAK,UAAU,EAAE;EACzB,MAAM,KAAK,QAAQ,EAAE;EACrB;;;;;AC9dF,MAAMC,2BAAyD,EAC9D,YAAY,aACZ;AAED,eAAsB,QAAuB;AAC5C,OAAM,cAAc,yBAAyB;;AAG9C,eAAsB,yBAAwC;AAC7D,OAAM,cAAc,wBAAwB;;AAI7C,eAAsB,uBACrB,UAAwC,0BACxB;AAChB,OAAM,cAAc,uBAAuB,QAAQ;;;;;AChBpD,MAAM,YAAY;;;;;;;;;;;;AAalB,SAAgB,kBAAkB,SAA2C;AAC5E,KACC,OAAO,YAAY,YACnB,YAAY,QACZ,OAAQ,QAAoC,eAAe,WAE3D,OAAM,IAAI,UACT,qFACA;AAGF,QAAQ,QACP,YACE;;;;;AClBJ,SAAS,yBAAyB,OAA4B;AAC7D,KAAI,iBAAiB,WACpB,QAAO;AAGR,KAAI,iBAAiB,YACpB,QAAO,IAAI,WAAW,MAAM;AAG7B,KAAI,YAAY,OAAO,MAAM,IAAI,EAAE,iBAAiB,UACnD,QAAO,IAAI,WAAW,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;AAGxE,OAAM,IAAI,UACT,4FACA;;AAGF,eAAe,qBACd,QACwB;AACxB,KAAI,OAAO,OACV,OAAM,IAAI,UACT,4EACA;CAGF,MAAMC,SAAuB,EAAE;CAC/B,MAAM,SAAS,OAAO,WAAW;CACjC,IAAI,YAAY;AAChB,KAAI;AACH,SAAO,MAAM;GACZ,MAAM,SAAS,MAAM,OAAO,MAAM;AAClC,OAAI,OAAO,MAAM;AAChB,gBAAY;AACZ,WAAO;;GAGR,MAAM,QAAQ,yBAAyB,OAAO,MAAM;AACpD,OAAI,MAAM,eAAe,EACxB;AAGD,UAAO,KAAK,MAAM,OAAO,CAAC;;WAElB;AACT,MAAI,CAAC,UACJ,OAAM,OACJ,OAAO,oDAAoD,CAC3D,YAAY,GAAG;AAElB,MAAI;AACH,UAAO,aAAa;UACb;;;AAMV,IAAa,uCAAb,MAAsF;CACrF,YAAY,AAAiBC,YAA8C;EAA9C;;CAE7B,MAAM,cAAc,OAA+C;AAClE,OAAK,WAAW,KAAK;GAAE,MAAM;GAAiB;GAAO,CAAC;;CAGvD,MAAM,mBAAmB,OAA+C;AACvE,OAAK,WAAW,KAAK;GAAE,MAAM;GAAsB;GAAO,CAAC;;CAG5D,MAAM,eACL,MACA,YACgB;AAChB,MAAI,sBAAsB,gBAAgB;GACzC,MAAMC,eAAkD;IACvD,qCAAqC;IACrC,QAAQ,MAAM,qBAAqB,WAAW;IAC9C;AACD,QAAK,WAAW,KAAK;IACpB,MAAM;IACN;IACA,YAAY;IACZ,CAAC;AACF;;AAGD,OAAK,WAAW,KAAK;GAAE,MAAM;GAAkB;GAAM;GAAY,CAAC;;CAGnE,MAAM,cACL,MACA,OACA,OACgB;AAChB,OAAK,WAAW,KAAK;GACpB,MAAM;GACN;GACA,OAAO;IAAE,MAAM,MAAM;IAAM,SAAS,MAAM;IAAS;GACnD;GACA,CAAC;;CAGH,MAAM,iBACL,MACA,OACgB;AAChB,OAAK,WAAW,KAAK;GAAE,MAAM;GAAoB;GAAM;GAAO,CAAC;;CAGhE,MAAM,UAAU,OAA0D;AACzE,OAAK,WAAW,KAAK;GAAE,MAAM;GAAa;GAAO,CAAC;;CAGnD,MAAM,kBAAkB,MAA2C;AAClE,OAAK,WAAW,KAAK;GAAE,MAAM;GAAqB;GAAM,CAAC;;;AAI3D,IAAa,6BAAb,MAAwE;CACvE,YAAY;CACZ;CACA,yCAAyB,IAAI,KAA2C;CACxE,cAAgD,EAAE;CAElD,YAAY,AAAiBC,UAA2B;EAA3B;;CAE7B,MAAM,QAAuB;AAC5B,QAAKC,YAAa,MAAM,KAAK,SAAS,0BAA0B;;CAGjE,AAAQ,eAAuB;AAC9B,MAAI,MAAKA,cAAe,OACvB,OAAM,IAAI,MAAM,0CAA0C;AAE3D,SAAO,MAAKA;;CAGb,MAAM,UAAU,IAAqC;EACpD,MAAM,YAAY,KAAK,cAAc;AACrC,QAAM,GAAG,IAAI,qCAAqC,MAAKC,WAAY,CAAC;AACpE,QAAM,KAAK,SAAS,iCACnB,WACA,MAAKA,WACL;;CAGF,MAAM,MAA+C;EACpD,MAAM,YAAY,KAAK,cAAc;AACrC,QAAM,KAAK,0BAA0B,UAAU;AAE/C,SAAO,MAAM,KAAK,MAAKC,sBAAuB,QAAQ,CAAC;;CAGxD,MAAc,0BAA0B,WAAkC;EACzE,MAAM,cACL,MAAM,KAAK,SAAS,gCAAgC,UAAU;AAE/D,OAAK,MAAM,cAAc,YACxB,KAAI,CAAC,MAAKA,sBAAuB,IAAI,WAAW,CAC/C,OAAKA,sBAAuB,IAC3B,YACA,IAAI,mCAAmC,KAAK,UAAU,WAAW,CACjE;;CAKJ,MAAc,yBAAyB,WAAkC;AACxE,MAAI;AACH,SAAM,KAAK,0BAA0B,UAAU;YACtC;AACT,SAAM,KAAK,SAAS,wBAAwB,UAAU;;;CAIxD,MAAc,+BAA8C;AAC3D,MAAI;AACH,SAAM,QAAQ,IACb,MAAM,KAAK,MAAKA,sBAAuB,QAAQ,GAAG,iBACjD,aAAa,SAAS,CACtB,CACD;YACQ;AACT,SAAKA,sBAAuB,OAAO;;;;CAKrC,UAAU,YAA2B;AACpC,MAAI,MAAKC,SACR;AAED,QAAKA,WAAY;EACjB,MAAM,YAAY,MAAKH;AAEvB,MAAI;AACH,OAAI,cAAc,OACjB,OAAM,KAAK,yBAAyB,UAAU;YAEtC;AACT,SAAM,KAAK,8BAA8B;;;CAI3C,OAAO,OAAO,gBAA+B;AAC5C,QAAM,KAAK,SAAS;;;AAItB,IAAa,qCAAb,MAAwF;CACvF;CACA;CAEA,YACC,AAAiBD,UACjB,AAAiBK,YAChB;EAFgB;EACA;AAEjB,QAAKC,0BAA2B,SAC9B,0BAA0B,WAAW,CACrC,MAAM,aAAa;AACnB,SAAKC,mBAAoB;AACzB,SAAKD,0BAA2B;AAChC,UAAO,MAAKC;IACX;AAGH,EAAK,MAAKD,wBAAyB,YAAY,GAAG;;CAGnD,MAAM,OAAO,IAA6D;AACzE,MAAI,MAAKA,4BAA6B,OACrC,OAAKC,mBAAoB,MAAM,MAAKD;AAErC,MAAI,MAAKC,qBAAsB,OAC9B,OAAM,IAAI,MACT,gGACA;AAGF,QAAM,GAAG,MAAKA,iBAAkB;AAEhC,SAAO;;CAGR,MAAM,kBAAkB,MAA8C;AACrE,SAAO,MAAM,KAAK,SAAS,wBAC1B,KAAK,YACL,KAAK,MACL,KAAK,MACL;;CAGF,MAAM,cAAc,QAA+B;AAClD,MAAI,WAAW,SACd;AAGD,QAAM,KAAK,SAAS,oBAAoB,KAAK,YAAY,OAAO;;CAGjE,MAAM,YAA8B;AACnC,SAAO,MAAM,KAAK,SAAS,uBAAuB,KAAK,YAAY,KAAK;;CAGzE,MAAM,WAAuD;AAC5D,SAAQ,MAAM,KAAK,SAAS,uBAC3B,KAAK,YACL,MACA;;;CAIF,UAAU,YAA2B;AACpC,QAAM,KAAK,SAAS,YAAY,KAAK,YAAY,mBAAmB;;CAGrE,OAAO,OAAO,gBAA+B;AAC5C,QAAM,KAAK,SAAS;;;;;;AClRtB,eAAsB,2BACrB,UACA,YACwC;AACxC,KAAI,CAAC,YAAY,CAAC,WACjB,OAAM,IAAI,MACT,wEACA;AAEF,QAAO,IAAI,mCAAmC,UAAU,WAAW;;AAQpE,eAAsB,mBACrB,UACgC;AAChC,KAAI,CAAC,SACJ,OAAM,IAAI,MAAM,uDAAuD;CAGxE,MAAM,eAAe,IAAI,2BAA2B,SAAS;AAC7D,OAAM,aAAa,OAAO;AAC1B,QAAO"}