@ricsam/isolate-types 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/isolate-types.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Isolate type definitions as string constants.\n *\n * These are the canonical source for isolated-vm global type definitions.\n * The .d.ts files in each package are generated from these strings during build.\n *\n * @example\n * import { TYPE_DEFINITIONS } from \"@ricsam/isolate-types\";\n *\n * // Use with ts-morph for type checking code strings\n * project.createSourceFile(\"types.d.ts\", TYPE_DEFINITIONS.fetch);\n */\n\n/**\n * Type definitions for @ricsam/isolate-core globals.\n *\n * Includes: ReadableStream, WritableStream, TransformStream, Blob, File, URL, URLSearchParams, DOMException\n */\nexport const CORE_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-core\n *\n * These types define the globals injected by setupCore() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // In your tsconfig.isolate.json\n * {\n * \"compilerOptions\": {\n * \"lib\": [\"ESNext\", \"DOM\"]\n * }\n * }\n *\n * // Then reference this file or use ts-morph for code strings\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Web Streams API\n // ============================================\n\n /**\n * A readable stream of data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n */\n const ReadableStream: typeof globalThis.ReadableStream;\n\n /**\n * A writable stream of data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WritableStream\n */\n const WritableStream: typeof globalThis.WritableStream;\n\n /**\n * A transform stream that can be used to pipe data through a transformer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransformStream\n */\n const TransformStream: typeof globalThis.TransformStream;\n\n /**\n * Default reader for ReadableStream\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader\n */\n const ReadableStreamDefaultReader: typeof globalThis.ReadableStreamDefaultReader;\n\n /**\n * Default writer for WritableStream\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter\n */\n const WritableStreamDefaultWriter: typeof globalThis.WritableStreamDefaultWriter;\n\n // ============================================\n // Blob and File APIs\n // ============================================\n\n /**\n * A file-like object of immutable, raw data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Blob\n */\n const Blob: typeof globalThis.Blob;\n\n /**\n * A file object representing a file.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/File\n */\n const File: typeof globalThis.File;\n\n // ============================================\n // URL APIs\n // ============================================\n\n /**\n * Interface for URL manipulation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URL\n */\n const URL: typeof globalThis.URL;\n\n /**\n * Utility for working with URL query strings.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n */\n const URLSearchParams: typeof globalThis.URLSearchParams;\n\n // ============================================\n // Error Handling\n // ============================================\n\n /**\n * Exception type for DOM operations.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n */\n const DOMException: typeof globalThis.DOMException;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-fetch globals.\n *\n * Includes: Headers, Request, Response, AbortController, AbortSignal, FormData, fetch, serve, Server, ServerWebSocket\n */\nexport const FETCH_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-fetch\n *\n * These types define the globals injected by setupFetch() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with serve()\n * type WebSocketData = { id: number; connectedAt: number };\n *\n * serve({\n * fetch(request, server) {\n * if (request.url.includes(\"/ws\")) {\n * // server.upgrade knows data should be WebSocketData\n * server.upgrade(request, { data: { id: 123, connectedAt: Date.now() } });\n * return new Response(null, { status: 101 });\n * }\n * return new Response(\"Hello!\");\n * },\n * websocket: {\n * // Type hint - specifies the type of ws.data\n * data: {} as WebSocketData,\n * message(ws, message) {\n * // ws.data is typed as WebSocketData\n * console.log(\"User\", ws.data.id, \"says:\", message);\n * ws.send(\"Echo: \" + message);\n * }\n * }\n * });\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Standard Fetch API (from lib.dom)\n // ============================================\n\n /**\n * Headers class for HTTP headers manipulation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Headers\n */\n const Headers: typeof globalThis.Headers;\n\n /**\n * Request class for HTTP requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Request\n */\n const Request: typeof globalThis.Request;\n\n /**\n * Response class for HTTP responses.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Response\n */\n const Response: typeof globalThis.Response;\n\n /**\n * AbortController for cancelling fetch requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController\n */\n const AbortController: typeof globalThis.AbortController;\n\n /**\n * AbortSignal for listening to abort events.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n */\n const AbortSignal: typeof globalThis.AbortSignal;\n\n /**\n * FormData for constructing form data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FormData\n */\n const FormData: typeof globalThis.FormData;\n\n /**\n * Fetch function for making HTTP requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\n */\n function fetch(\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response>;\n\n // ============================================\n // Isolate-specific: serve() API\n // ============================================\n\n /**\n * Server interface for handling WebSocket upgrades within serve() handlers.\n *\n * @typeParam T - The type of data associated with WebSocket connections\n */\n interface Server<T = unknown> {\n /**\n * Upgrade an HTTP request to a WebSocket connection.\n *\n * @param request - The incoming HTTP request to upgrade\n * @param options - Optional data to associate with the WebSocket connection\n * @returns true if upgrade will proceed, false otherwise\n *\n * @example\n * serve({\n * fetch(request, server) {\n * if (server.upgrade(request, { data: { userId: 123 } })) {\n * return new Response(null, { status: 101 });\n * }\n * return new Response(\"Upgrade failed\", { status: 400 });\n * }\n * });\n */\n upgrade(request: Request, options?: { data?: T }): boolean;\n }\n\n /**\n * ServerWebSocket interface for WebSocket connections within serve() handlers.\n *\n * @typeParam T - The type of data associated with this WebSocket connection\n */\n interface ServerWebSocket<T = unknown> {\n /**\n * User data associated with this connection.\n * Set via \\`server.upgrade(request, { data: ... })\\`.\n */\n readonly data: T;\n\n /**\n * Send a message to the client.\n *\n * @param message - The message to send (string, ArrayBuffer, or Uint8Array)\n */\n send(message: string | ArrayBuffer | Uint8Array): void;\n\n /**\n * Close the WebSocket connection.\n *\n * @param code - Optional close code (default: 1000)\n * @param reason - Optional close reason\n */\n close(code?: number, reason?: string): void;\n\n /**\n * WebSocket ready state.\n * - 0: CONNECTING\n * - 1: OPEN\n * - 2: CLOSING\n * - 3: CLOSED\n */\n readonly readyState: number;\n }\n\n /**\n * Options for the serve() function.\n *\n * @typeParam T - The type of data associated with WebSocket connections\n */\n interface ServeOptions<T = unknown> {\n /**\n * Handler for HTTP requests.\n *\n * @param request - The incoming HTTP request\n * @param server - Server interface for WebSocket upgrades\n * @returns Response or Promise resolving to Response\n */\n fetch(request: Request, server: Server<T>): Response | Promise<Response>;\n\n /**\n * WebSocket event handlers.\n */\n websocket?: {\n /**\n * Type hint for WebSocket data. The value is not used at runtime.\n * Specifies the type of \\`ws.data\\` for all handlers and \\`server.upgrade()\\`.\n *\n * @example\n * websocket: {\n * data: {} as { userId: string },\n * message(ws, message) {\n * // ws.data.userId is typed as string\n * }\n * }\n */\n data?: T;\n\n /**\n * Called when a WebSocket connection is opened.\n *\n * @param ws - The WebSocket connection\n */\n open?(ws: ServerWebSocket<T>): void | Promise<void>;\n\n /**\n * Called when a message is received.\n *\n * @param ws - The WebSocket connection\n * @param message - The received message (string or ArrayBuffer)\n */\n message?(\n ws: ServerWebSocket<T>,\n message: string | ArrayBuffer\n ): void | Promise<void>;\n\n /**\n * Called when the connection is closed.\n *\n * @param ws - The WebSocket connection\n * @param code - The close code\n * @param reason - The close reason\n */\n close?(\n ws: ServerWebSocket<T>,\n code: number,\n reason: string\n ): void | Promise<void>;\n\n /**\n * Called when an error occurs.\n *\n * @param ws - The WebSocket connection\n * @param error - The error that occurred\n */\n error?(ws: ServerWebSocket<T>, error: Error): void | Promise<void>;\n };\n }\n\n /**\n * Register an HTTP server handler in the isolate.\n *\n * Only one serve() handler can be active at a time.\n * Calling serve() again replaces the previous handler.\n *\n * @param options - Server configuration including fetch handler and optional WebSocket handlers\n *\n * @example\n * type WsData = { connectedAt: number };\n *\n * serve({\n * fetch(request, server) {\n * const url = new URL(request.url);\n *\n * if (url.pathname === \"/ws\") {\n * if (server.upgrade(request, { data: { connectedAt: Date.now() } })) {\n * return new Response(null, { status: 101 });\n * }\n * }\n *\n * if (url.pathname === \"/api/hello\") {\n * return Response.json({ message: \"Hello!\" });\n * }\n *\n * return new Response(\"Not Found\", { status: 404 });\n * },\n * websocket: {\n * data: {} as WsData,\n * open(ws) {\n * console.log(\"Connected at:\", ws.data.connectedAt);\n * },\n * message(ws, message) {\n * ws.send(\"Echo: \" + message);\n * },\n * close(ws, code, reason) {\n * console.log(\"Closed:\", code, reason);\n * }\n * }\n * });\n */\n function serve<T = unknown>(options: ServeOptions<T>): void;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-fs globals.\n *\n * Includes: fs namespace, FileSystemHandle, FileSystemFileHandle, FileSystemDirectoryHandle, FileSystemWritableFileStream\n */\nexport const FS_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-fs\n *\n * These types define the globals injected by setupFs() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with file system access\n * const root = await getDirectory(\"/data\");\n * const fileHandle = await root.getFileHandle(\"config.json\");\n * const file = await fileHandle.getFile();\n * const content = await file.text();\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // getDirectory - Isolate-specific entry point\n // ============================================\n\n /**\n * Get a directory handle for the given path.\n *\n * The host controls which paths are accessible. Invalid or unauthorized\n * paths will throw an error.\n *\n * @param path - The path to request from the host\n * @returns A promise resolving to a directory handle\n * @throws If the path is not allowed or doesn't exist\n *\n * @example\n * const root = await getDirectory(\"/\");\n * const dataDir = await getDirectory(\"/data\");\n */\n function getDirectory(path: string): Promise<FileSystemDirectoryHandle>;\n\n // ============================================\n // File System Access API\n // ============================================\n\n /**\n * Base interface for file system handles.\n */\n interface FileSystemHandle {\n /**\n * The kind of handle: \"file\" or \"directory\".\n */\n readonly kind: \"file\" | \"directory\";\n\n /**\n * The name of the file or directory.\n */\n readonly name: string;\n\n /**\n * Compare two handles to check if they reference the same entry.\n *\n * @param other - Another FileSystemHandle to compare against\n * @returns true if both handles reference the same entry\n */\n isSameEntry(other: FileSystemHandle): Promise<boolean>;\n }\n\n /**\n * Handle for a file in the file system.\n */\n interface FileSystemFileHandle extends FileSystemHandle {\n /**\n * Always \"file\" for file handles.\n */\n readonly kind: \"file\";\n\n /**\n * Get the file contents as a File object.\n *\n * @returns A promise resolving to a File object\n *\n * @example\n * const file = await fileHandle.getFile();\n * const text = await file.text();\n */\n getFile(): Promise<File>;\n\n /**\n * Create a writable stream for writing to the file.\n *\n * @param options - Options for the writable stream\n * @returns A promise resolving to a writable stream\n *\n * @example\n * const writable = await fileHandle.createWritable();\n * await writable.write(\"Hello, World!\");\n * await writable.close();\n */\n createWritable(options?: {\n /**\n * If true, keeps existing file data. Otherwise, truncates the file.\n */\n keepExistingData?: boolean;\n }): Promise<FileSystemWritableFileStream>;\n }\n\n /**\n * Handle for a directory in the file system.\n */\n interface FileSystemDirectoryHandle extends FileSystemHandle {\n /**\n * Always \"directory\" for directory handles.\n */\n readonly kind: \"directory\";\n\n /**\n * Get a file handle within this directory.\n *\n * @param name - The name of the file\n * @param options - Options for getting the file handle\n * @returns A promise resolving to a file handle\n * @throws If the file doesn't exist and create is not true\n *\n * @example\n * const file = await dir.getFileHandle(\"data.json\");\n * const newFile = await dir.getFileHandle(\"output.txt\", { create: true });\n */\n getFileHandle(\n name: string,\n options?: {\n /**\n * If true, creates the file if it doesn't exist.\n */\n create?: boolean;\n }\n ): Promise<FileSystemFileHandle>;\n\n /**\n * Get a subdirectory handle within this directory.\n *\n * @param name - The name of the subdirectory\n * @param options - Options for getting the directory handle\n * @returns A promise resolving to a directory handle\n * @throws If the directory doesn't exist and create is not true\n *\n * @example\n * const subdir = await dir.getDirectoryHandle(\"logs\");\n * const newDir = await dir.getDirectoryHandle(\"cache\", { create: true });\n */\n getDirectoryHandle(\n name: string,\n options?: {\n /**\n * If true, creates the directory if it doesn't exist.\n */\n create?: boolean;\n }\n ): Promise<FileSystemDirectoryHandle>;\n\n /**\n * Remove a file or directory within this directory.\n *\n * @param name - The name of the entry to remove\n * @param options - Options for removal\n * @throws If the entry doesn't exist or cannot be removed\n *\n * @example\n * await dir.removeEntry(\"old-file.txt\");\n * await dir.removeEntry(\"old-dir\", { recursive: true });\n */\n removeEntry(\n name: string,\n options?: {\n /**\n * If true, removes directories recursively.\n */\n recursive?: boolean;\n }\n ): Promise<void>;\n\n /**\n * Resolve the path from this directory to a descendant handle.\n *\n * @param possibleDescendant - A handle that may be a descendant\n * @returns An array of path segments, or null if not a descendant\n *\n * @example\n * const path = await root.resolve(nestedFile);\n * // [\"subdir\", \"file.txt\"]\n */\n resolve(possibleDescendant: FileSystemHandle): Promise<string[] | null>;\n\n /**\n * Iterate over entries in this directory.\n *\n * @returns An async iterator of [name, handle] pairs\n *\n * @example\n * for await (const [name, handle] of dir.entries()) {\n * console.log(name, handle.kind);\n * }\n */\n entries(): AsyncIterableIterator<[string, FileSystemHandle]>;\n\n /**\n * Iterate over entry names in this directory.\n *\n * @returns An async iterator of names\n *\n * @example\n * for await (const name of dir.keys()) {\n * console.log(name);\n * }\n */\n keys(): AsyncIterableIterator<string>;\n\n /**\n * Iterate over handles in this directory.\n *\n * @returns An async iterator of handles\n *\n * @example\n * for await (const handle of dir.values()) {\n * console.log(handle.name, handle.kind);\n * }\n */\n values(): AsyncIterableIterator<FileSystemHandle>;\n\n /**\n * Async iterator support for directory entries.\n *\n * @example\n * for await (const [name, handle] of dir) {\n * console.log(name, handle.kind);\n * }\n */\n [Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>;\n }\n\n /**\n * Parameters for write operations on FileSystemWritableFileStream.\n */\n interface WriteParams {\n /**\n * The type of write operation.\n * - \"write\": Write data at the current position or specified position\n * - \"seek\": Move the file position\n * - \"truncate\": Truncate the file to a specific size\n */\n type: \"write\" | \"seek\" | \"truncate\";\n\n /**\n * The data to write (for \"write\" type).\n */\n data?: string | ArrayBuffer | Uint8Array | Blob;\n\n /**\n * The position to write at or seek to.\n */\n position?: number;\n\n /**\n * The size to truncate to (for \"truncate\" type).\n */\n size?: number;\n }\n\n /**\n * Writable stream for writing to a file.\n * Extends WritableStream with file-specific operations.\n */\n interface FileSystemWritableFileStream extends WritableStream<Uint8Array> {\n /**\n * Write data to the file.\n *\n * @param data - The data to write\n * @returns A promise that resolves when the write completes\n *\n * @example\n * await writable.write(\"Hello, World!\");\n * await writable.write(new Uint8Array([1, 2, 3]));\n * await writable.write({ type: \"write\", data: \"text\", position: 0 });\n */\n write(\n data: string | ArrayBuffer | Uint8Array | Blob | WriteParams\n ): Promise<void>;\n\n /**\n * Seek to a position in the file.\n *\n * @param position - The byte position to seek to\n * @returns A promise that resolves when the seek completes\n *\n * @example\n * await writable.seek(0); // Seek to beginning\n * await writable.write(\"Overwrite\");\n */\n seek(position: number): Promise<void>;\n\n /**\n * Truncate the file to a specific size.\n *\n * @param size - The size to truncate to\n * @returns A promise that resolves when the truncation completes\n *\n * @example\n * await writable.truncate(100); // Keep only first 100 bytes\n */\n truncate(size: number): Promise<void>;\n }\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-test-environment globals.\n *\n * Includes: describe, it, test, expect, beforeAll, afterAll, beforeEach, afterEach\n */\nexport const TEST_ENV_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-test-environment\n *\n * These types define the globals injected by setupTestEnvironment() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * describe(\"Math operations\", () => {\n * it(\"should add numbers\", () => {\n * expect(1 + 1).toBe(2);\n * });\n * });\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Test Structure\n // ============================================\n\n /**\n * Define a test suite.\n *\n * @param name - The name of the test suite\n * @param fn - Function containing tests and nested suites\n *\n * @example\n * describe(\"Calculator\", () => {\n * it(\"adds numbers\", () => {\n * expect(1 + 1).toBe(2);\n * });\n * });\n */\n function describe(name: string, fn: () => void): void;\n\n namespace describe {\n /**\n * Skip this suite and all its tests.\n */\n function skip(name: string, fn: () => void): void;\n\n /**\n * Only run this suite (and other .only suites).\n */\n function only(name: string, fn: () => void): void;\n\n /**\n * Mark suite as todo (skipped with different status).\n */\n function todo(name: string, fn?: () => void): void;\n }\n\n /**\n * Define a test case.\n *\n * @param name - The name of the test\n * @param fn - The test function (can be async)\n *\n * @example\n * it(\"should work\", () => {\n * expect(true).toBe(true);\n * });\n *\n * it(\"should work async\", async () => {\n * const result = await Promise.resolve(42);\n * expect(result).toBe(42);\n * });\n */\n function it(name: string, fn: () => void | Promise<void>): void;\n\n namespace it {\n /**\n * Skip this test.\n */\n function skip(name: string, fn?: () => void | Promise<void>): void;\n\n /**\n * Only run this test (and other .only tests).\n */\n function only(name: string, fn: () => void | Promise<void>): void;\n\n /**\n * Mark test as todo.\n */\n function todo(name: string, fn?: () => void | Promise<void>): void;\n }\n\n /**\n * Alias for it().\n */\n function test(name: string, fn: () => void | Promise<void>): void;\n\n namespace test {\n /**\n * Skip this test.\n */\n function skip(name: string, fn?: () => void | Promise<void>): void;\n\n /**\n * Only run this test (and other .only tests).\n */\n function only(name: string, fn: () => void | Promise<void>): void;\n\n /**\n * Mark test as todo.\n */\n function todo(name: string, fn?: () => void | Promise<void>): void;\n }\n\n // ============================================\n // Lifecycle Hooks\n // ============================================\n\n /**\n * Run once before all tests in the current suite.\n *\n * @param fn - Setup function (can be async)\n */\n function beforeAll(fn: () => void | Promise<void>): void;\n\n /**\n * Run once after all tests in the current suite.\n *\n * @param fn - Teardown function (can be async)\n */\n function afterAll(fn: () => void | Promise<void>): void;\n\n /**\n * Run before each test in the current suite (and nested suites).\n *\n * @param fn - Setup function (can be async)\n */\n function beforeEach(fn: () => void | Promise<void>): void;\n\n /**\n * Run after each test in the current suite (and nested suites).\n *\n * @param fn - Teardown function (can be async)\n */\n function afterEach(fn: () => void | Promise<void>): void;\n\n // ============================================\n // Assertions\n // ============================================\n\n /**\n * Matchers for assertions.\n */\n interface Matchers<T> {\n /**\n * Strict equality (===).\n */\n toBe(expected: T): void;\n\n /**\n * Deep equality.\n */\n toEqual(expected: unknown): void;\n\n /**\n * Deep equality with type checking.\n */\n toStrictEqual(expected: unknown): void;\n\n /**\n * Check if value is truthy.\n */\n toBeTruthy(): void;\n\n /**\n * Check if value is falsy.\n */\n toBeFalsy(): void;\n\n /**\n * Check if value is null.\n */\n toBeNull(): void;\n\n /**\n * Check if value is undefined.\n */\n toBeUndefined(): void;\n\n /**\n * Check if value is defined (not undefined).\n */\n toBeDefined(): void;\n\n /**\n * Check if value is NaN.\n */\n toBeNaN(): void;\n\n /**\n * Check if number is greater than expected.\n */\n toBeGreaterThan(n: number): void;\n\n /**\n * Check if number is greater than or equal to expected.\n */\n toBeGreaterThanOrEqual(n: number): void;\n\n /**\n * Check if number is less than expected.\n */\n toBeLessThan(n: number): void;\n\n /**\n * Check if number is less than or equal to expected.\n */\n toBeLessThanOrEqual(n: number): void;\n\n /**\n * Check if array/string contains item/substring.\n */\n toContain(item: unknown): void;\n\n /**\n * Check length of array/string.\n */\n toHaveLength(length: number): void;\n\n /**\n * Check if object has property (optionally with value).\n */\n toHaveProperty(key: string, value?: unknown): void;\n\n /**\n * Check if function throws.\n */\n toThrow(expected?: string | RegExp | Error): void;\n\n /**\n * Check if string matches pattern.\n */\n toMatch(pattern: string | RegExp): void;\n\n /**\n * Check if object matches subset of properties.\n */\n toMatchObject(object: object): void;\n\n /**\n * Check if value is instance of class.\n */\n toBeInstanceOf(constructor: Function): void;\n\n /**\n * Negate the matcher.\n */\n not: Matchers<T>;\n\n /**\n * Await promise and check resolved value.\n */\n resolves: Matchers<Awaited<T>>;\n\n /**\n * Await promise and check rejection.\n */\n rejects: Matchers<unknown>;\n }\n\n /**\n * Create an expectation for a value.\n *\n * @param actual - The value to test\n * @returns Matchers for the value\n *\n * @example\n * expect(1 + 1).toBe(2);\n * expect({ a: 1 }).toEqual({ a: 1 });\n * expect(() => { throw new Error(); }).toThrow();\n * expect(promise).resolves.toBe(42);\n */\n function expect<T>(actual: T): Matchers<T>;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-console globals.\n *\n * Includes: console.log, warn, error, debug, info, trace, dir, table, time, timeEnd, timeLog, count, countReset, clear, assert, group, groupCollapsed, groupEnd\n */\nexport const CONSOLE_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-console\n *\n * These types define the globals injected by setupConsole() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n */\n\nexport {};\n\ndeclare global {\n /**\n * Console interface for logging and debugging.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Console\n */\n interface Console {\n /**\n * Log a message to the console.\n * @param data - Values to log\n */\n log(...data: unknown[]): void;\n\n /**\n * Log a warning message.\n * @param data - Values to log\n */\n warn(...data: unknown[]): void;\n\n /**\n * Log an error message.\n * @param data - Values to log\n */\n error(...data: unknown[]): void;\n\n /**\n * Log a debug message.\n * @param data - Values to log\n */\n debug(...data: unknown[]): void;\n\n /**\n * Log an info message.\n * @param data - Values to log\n */\n info(...data: unknown[]): void;\n\n /**\n * Log a stack trace.\n * @param data - Values to log with the trace\n */\n trace(...data: unknown[]): void;\n\n /**\n * Display an object in a formatted way.\n * @param item - Object to display\n * @param options - Display options\n */\n dir(item: unknown, options?: object): void;\n\n /**\n * Display tabular data.\n * @param tabularData - Data to display as a table\n * @param properties - Optional array of property names to include\n */\n table(tabularData: unknown, properties?: string[]): void;\n\n /**\n * Start a timer.\n * @param label - Timer label (default: \"default\")\n */\n time(label?: string): void;\n\n /**\n * End a timer and log the elapsed time.\n * @param label - Timer label (default: \"default\")\n */\n timeEnd(label?: string): void;\n\n /**\n * Log the elapsed time of a timer without ending it.\n * @param label - Timer label (default: \"default\")\n * @param data - Additional values to log\n */\n timeLog(label?: string, ...data: unknown[]): void;\n\n /**\n * Log an error if the assertion is false.\n * @param condition - Condition to test\n * @param data - Values to log if assertion fails\n */\n assert(condition?: boolean, ...data: unknown[]): void;\n\n /**\n * Increment and log a counter.\n * @param label - Counter label (default: \"default\")\n */\n count(label?: string): void;\n\n /**\n * Reset a counter.\n * @param label - Counter label (default: \"default\")\n */\n countReset(label?: string): void;\n\n /**\n * Clear the console.\n */\n clear(): void;\n\n /**\n * Start an inline group.\n * @param data - Group label\n */\n group(...data: unknown[]): void;\n\n /**\n * Start a collapsed inline group.\n * @param data - Group label\n */\n groupCollapsed(...data: unknown[]): void;\n\n /**\n * End the current inline group.\n */\n groupEnd(): void;\n }\n\n /**\n * Console object for logging and debugging.\n */\n const console: Console;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-encoding globals.\n *\n * Includes: atob, btoa\n */\nexport const ENCODING_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-encoding\n *\n * These types define the globals injected by setupEncoding() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n */\n\nexport {};\n\ndeclare global {\n /**\n * Decodes a Base64-encoded string.\n *\n * @param encodedData - The Base64 string to decode\n * @returns The decoded string\n * @throws DOMException if the input is not valid Base64\n *\n * @example\n * atob(\"SGVsbG8=\"); // \"Hello\"\n */\n function atob(encodedData: string): string;\n\n /**\n * Encodes a string to Base64.\n *\n * @param stringToEncode - The string to encode (must contain only Latin1 characters)\n * @returns The Base64 encoded string\n * @throws DOMException if the string contains characters outside Latin1 range (0-255)\n *\n * @example\n * btoa(\"Hello\"); // \"SGVsbG8=\"\n */\n function btoa(stringToEncode: string): string;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-crypto globals.\n *\n * Includes: crypto.subtle, crypto.getRandomValues, crypto.randomUUID, CryptoKey\n */\nexport const CRYPTO_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-crypto\n *\n * These types define the globals injected by setupCrypto() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Generate random bytes\n * const arr = new Uint8Array(16);\n * crypto.getRandomValues(arr);\n *\n * // Generate UUID\n * const uuid = crypto.randomUUID();\n *\n * // Use SubtleCrypto\n * const key = await crypto.subtle.generateKey(\n * { name: \"AES-GCM\", length: 256 },\n * true,\n * [\"encrypt\", \"decrypt\"]\n * );\n */\n\nexport {};\n\ndeclare global {\n /**\n * CryptoKey represents a cryptographic key.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey\n */\n interface CryptoKey {\n /**\n * The type of key: \"public\", \"private\", or \"secret\".\n */\n readonly type: \"public\" | \"private\" | \"secret\";\n\n /**\n * Whether the key can be exported.\n */\n readonly extractable: boolean;\n\n /**\n * The algorithm used by this key.\n */\n readonly algorithm: KeyAlgorithm;\n\n /**\n * The usages allowed for this key.\n */\n readonly usages: ReadonlyArray<KeyUsage>;\n }\n\n /**\n * CryptoKey constructor (keys cannot be constructed directly).\n */\n const CryptoKey: {\n prototype: CryptoKey;\n };\n\n /**\n * SubtleCrypto interface for cryptographic operations.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto\n */\n interface SubtleCrypto {\n /**\n * Generate a digest (hash) of the given data.\n *\n * @param algorithm - Hash algorithm (e.g., \"SHA-256\", \"SHA-384\", \"SHA-512\")\n * @param data - Data to hash\n * @returns Promise resolving to the hash as ArrayBuffer\n */\n digest(\n algorithm: AlgorithmIdentifier,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Generate a new cryptographic key or key pair.\n *\n * @param algorithm - Key generation algorithm\n * @param extractable - Whether the key can be exported\n * @param keyUsages - Allowed key usages\n * @returns Promise resolving to a CryptoKey or CryptoKeyPair\n */\n generateKey(\n algorithm: RsaHashedKeyGenParams | EcKeyGenParams | AesKeyGenParams | HmacKeyGenParams,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey | CryptoKeyPair>;\n\n /**\n * Sign data using a private key.\n *\n * @param algorithm - Signing algorithm\n * @param key - Private key to sign with\n * @param data - Data to sign\n * @returns Promise resolving to the signature as ArrayBuffer\n */\n sign(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Verify a signature.\n *\n * @param algorithm - Signing algorithm\n * @param key - Public key to verify with\n * @param signature - Signature to verify\n * @param data - Data that was signed\n * @returns Promise resolving to true if valid, false otherwise\n */\n verify(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n signature: BufferSource,\n data: BufferSource\n ): Promise<boolean>;\n\n /**\n * Encrypt data.\n *\n * @param algorithm - Encryption algorithm\n * @param key - Encryption key\n * @param data - Data to encrypt\n * @returns Promise resolving to encrypted data as ArrayBuffer\n */\n encrypt(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Decrypt data.\n *\n * @param algorithm - Decryption algorithm\n * @param key - Decryption key\n * @param data - Data to decrypt\n * @returns Promise resolving to decrypted data as ArrayBuffer\n */\n decrypt(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Import a key from external data.\n *\n * @param format - Key format (\"raw\", \"pkcs8\", \"spki\", \"jwk\")\n * @param keyData - Key data\n * @param algorithm - Key algorithm\n * @param extractable - Whether the key can be exported\n * @param keyUsages - Allowed key usages\n * @returns Promise resolving to a CryptoKey\n */\n importKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n keyData: BufferSource | JsonWebKey,\n algorithm: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n\n /**\n * Export a key.\n *\n * @param format - Export format (\"raw\", \"pkcs8\", \"spki\", \"jwk\")\n * @param key - Key to export\n * @returns Promise resolving to ArrayBuffer or JsonWebKey\n */\n exportKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n key: CryptoKey\n ): Promise<ArrayBuffer | JsonWebKey>;\n\n /**\n * Derive bits from a key.\n *\n * @param algorithm - Derivation algorithm\n * @param baseKey - Base key for derivation\n * @param length - Number of bits to derive\n * @returns Promise resolving to derived bits as ArrayBuffer\n */\n deriveBits(\n algorithm: AlgorithmIdentifier,\n baseKey: CryptoKey,\n length: number\n ): Promise<ArrayBuffer>;\n\n /**\n * Derive a new key from a base key.\n *\n * @param algorithm - Derivation algorithm\n * @param baseKey - Base key for derivation\n * @param derivedKeyType - Type of key to derive\n * @param extractable - Whether the derived key can be exported\n * @param keyUsages - Allowed usages for derived key\n * @returns Promise resolving to a CryptoKey\n */\n deriveKey(\n algorithm: AlgorithmIdentifier,\n baseKey: CryptoKey,\n derivedKeyType: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n\n /**\n * Wrap a key for secure export.\n *\n * @param format - Key format\n * @param key - Key to wrap\n * @param wrappingKey - Key to wrap with\n * @param wrapAlgorithm - Wrapping algorithm\n * @returns Promise resolving to wrapped key as ArrayBuffer\n */\n wrapKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n key: CryptoKey,\n wrappingKey: CryptoKey,\n wrapAlgorithm: AlgorithmIdentifier\n ): Promise<ArrayBuffer>;\n\n /**\n * Unwrap a wrapped key.\n *\n * @param format - Key format\n * @param wrappedKey - Wrapped key data\n * @param unwrappingKey - Key to unwrap with\n * @param unwrapAlgorithm - Unwrapping algorithm\n * @param unwrappedKeyAlgorithm - Algorithm for the unwrapped key\n * @param extractable - Whether the unwrapped key can be exported\n * @param keyUsages - Allowed usages for unwrapped key\n * @returns Promise resolving to a CryptoKey\n */\n unwrapKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n wrappedKey: BufferSource,\n unwrappingKey: CryptoKey,\n unwrapAlgorithm: AlgorithmIdentifier,\n unwrappedKeyAlgorithm: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n }\n\n /**\n * Crypto interface providing cryptographic functionality.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto\n */\n interface Crypto {\n /**\n * SubtleCrypto interface for cryptographic operations.\n */\n readonly subtle: SubtleCrypto;\n\n /**\n * Fill a TypedArray with cryptographically random values.\n *\n * @param array - TypedArray to fill (max 65536 bytes)\n * @returns The same array, filled with random values\n *\n * @example\n * const arr = new Uint8Array(16);\n * crypto.getRandomValues(arr);\n */\n getRandomValues<T extends ArrayBufferView | null>(array: T): T;\n\n /**\n * Generate a random UUID v4.\n *\n * @returns A random UUID string\n *\n * @example\n * const uuid = crypto.randomUUID();\n * // \"550e8400-e29b-41d4-a716-446655440000\"\n */\n randomUUID(): string;\n }\n\n /**\n * Crypto object providing cryptographic functionality.\n */\n const crypto: Crypto;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-path globals.\n *\n * Includes: path.join, path.normalize, path.basename, path.dirname, path.extname,\n * path.isAbsolute, path.parse, path.format, path.resolve, path.relative,\n * path.cwd, path.sep, path.delimiter\n */\nexport const PATH_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-path\n *\n * These types define the globals injected by setupPath() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with path operations\n * const joined = path.join('/foo', 'bar', 'baz');\n * const resolved = path.resolve('relative/path');\n * const cwd = path.cwd();\n */\n\nexport {};\n\ndeclare global {\n /**\n * Parsed path object returned by path.parse().\n */\n interface ParsedPath {\n /** The root of the path (e.g., \"/\" for absolute paths, \"\" for relative) */\n root: string;\n /** The directory portion of the path */\n dir: string;\n /** The file name including extension */\n base: string;\n /** The file extension (e.g., \".txt\") */\n ext: string;\n /** The file name without extension */\n name: string;\n }\n\n /**\n * Input object for path.format().\n */\n interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n }\n\n /**\n * Path utilities for POSIX paths.\n * @see https://nodejs.org/api/path.html\n */\n namespace path {\n /**\n * Join path segments with the platform-specific separator.\n *\n * @param paths - Path segments to join\n * @returns The joined path, normalized\n *\n * @example\n * path.join('/foo', 'bar', 'baz'); // \"/foo/bar/baz\"\n * path.join('foo', 'bar', '..', 'baz'); // \"foo/baz\"\n */\n function join(...paths: string[]): string;\n\n /**\n * Normalize a path, resolving '..' and '.' segments.\n *\n * @param p - The path to normalize\n * @returns The normalized path\n *\n * @example\n * path.normalize('/foo/bar/../baz'); // \"/foo/baz\"\n * path.normalize('/foo//bar'); // \"/foo/bar\"\n */\n function normalize(p: string): string;\n\n /**\n * Get the last portion of a path (the file name).\n *\n * @param p - The path\n * @param ext - Optional extension to remove from the result\n * @returns The base name of the path\n *\n * @example\n * path.basename('/foo/bar/baz.txt'); // \"baz.txt\"\n * path.basename('/foo/bar/baz.txt', '.txt'); // \"baz\"\n */\n function basename(p: string, ext?: string): string;\n\n /**\n * Get the directory name of a path.\n *\n * @param p - The path\n * @returns The directory portion of the path\n *\n * @example\n * path.dirname('/foo/bar/baz.txt'); // \"/foo/bar\"\n * path.dirname('/foo'); // \"/\"\n */\n function dirname(p: string): string;\n\n /**\n * Get the extension of a path.\n *\n * @param p - The path\n * @returns The extension including the dot, or empty string\n *\n * @example\n * path.extname('file.txt'); // \".txt\"\n * path.extname('file.tar.gz'); // \".gz\"\n * path.extname('.bashrc'); // \"\"\n */\n function extname(p: string): string;\n\n /**\n * Check if a path is absolute.\n *\n * @param p - The path to check\n * @returns True if the path is absolute\n *\n * @example\n * path.isAbsolute('/foo/bar'); // true\n * path.isAbsolute('foo/bar'); // false\n */\n function isAbsolute(p: string): boolean;\n\n /**\n * Parse a path into its components.\n *\n * @param p - The path to parse\n * @returns An object with root, dir, base, ext, and name properties\n *\n * @example\n * path.parse('/foo/bar/baz.txt');\n * // { root: \"/\", dir: \"/foo/bar\", base: \"baz.txt\", ext: \".txt\", name: \"baz\" }\n */\n function parse(p: string): ParsedPath;\n\n /**\n * Build a path from an object.\n *\n * @param pathObject - Object with path components\n * @returns The formatted path string\n *\n * @example\n * path.format({ dir: '/foo/bar', base: 'baz.txt' }); // \"/foo/bar/baz.txt\"\n * path.format({ root: '/', name: 'file', ext: '.txt' }); // \"/file.txt\"\n */\n function format(pathObject: FormatInputPathObject): string;\n\n /**\n * Resolve a sequence of paths to an absolute path.\n * Processes paths from right to left, prepending each until an absolute path is formed.\n * Uses the configured working directory for relative paths.\n *\n * @param paths - Path segments to resolve\n * @returns The resolved absolute path\n *\n * @example\n * // With cwd set to \"/home/user\"\n * path.resolve('foo/bar'); // \"/home/user/foo/bar\"\n * path.resolve('/foo', 'bar'); // \"/foo/bar\"\n * path.resolve('/foo', '/bar', 'baz'); // \"/bar/baz\"\n */\n function resolve(...paths: string[]): string;\n\n /**\n * Compute the relative path from one path to another.\n *\n * @param from - The source path\n * @param to - The destination path\n * @returns The relative path from 'from' to 'to'\n *\n * @example\n * path.relative('/foo/bar', '/foo/baz'); // \"../baz\"\n * path.relative('/foo', '/foo/bar/baz'); // \"bar/baz\"\n */\n function relative(from: string, to: string): string;\n\n /**\n * Get the configured working directory.\n *\n * @returns The current working directory\n *\n * @example\n * path.cwd(); // \"/home/user\" (or whatever was configured)\n */\n function cwd(): string;\n\n /**\n * The platform-specific path segment separator.\n * Always \"/\" for POSIX paths.\n */\n const sep: string;\n\n /**\n * The platform-specific path delimiter.\n * Always \":\" for POSIX paths.\n */\n const delimiter: string;\n }\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-timers globals.\n *\n * Includes: setTimeout, setInterval, clearTimeout, clearInterval\n */\nexport const TIMERS_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-timers\n *\n * These types define the globals injected by setupTimers() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * const timeoutId = setTimeout(() => {\n * console.log(\"fired!\");\n * }, 1000);\n *\n * clearTimeout(timeoutId);\n *\n * const intervalId = setInterval(() => {\n * console.log(\"tick\");\n * }, 100);\n *\n * clearInterval(intervalId);\n */\n\nexport {};\n\ndeclare global {\n /**\n * Schedule a callback to execute after a delay.\n *\n * @param callback - The function to call after the delay\n * @param ms - The delay in milliseconds (default: 0)\n * @param args - Additional arguments to pass to the callback\n * @returns A timer ID that can be passed to clearTimeout\n *\n * @example\n * const id = setTimeout(() => console.log(\"done\"), 1000);\n * setTimeout((a, b) => console.log(a, b), 100, \"hello\", \"world\");\n */\n function setTimeout(\n callback: (...args: unknown[]) => void,\n ms?: number,\n ...args: unknown[]\n ): number;\n\n /**\n * Schedule a callback to execute repeatedly at a fixed interval.\n *\n * @param callback - The function to call at each interval\n * @param ms - The interval in milliseconds (minimum: 4ms)\n * @param args - Additional arguments to pass to the callback\n * @returns A timer ID that can be passed to clearInterval\n *\n * @example\n * const id = setInterval(() => console.log(\"tick\"), 1000);\n */\n function setInterval(\n callback: (...args: unknown[]) => void,\n ms?: number,\n ...args: unknown[]\n ): number;\n\n /**\n * Cancel a timeout previously scheduled with setTimeout.\n *\n * @param id - The timer ID returned by setTimeout\n *\n * @example\n * const id = setTimeout(() => {}, 1000);\n * clearTimeout(id);\n */\n function clearTimeout(id: number | undefined): void;\n\n /**\n * Cancel an interval previously scheduled with setInterval.\n *\n * @param id - The timer ID returned by setInterval\n *\n * @example\n * const id = setInterval(() => {}, 1000);\n * clearInterval(id);\n */\n function clearInterval(id: number | undefined): void;\n}\n`;\n\n/**\n * Map of package names to their type definitions.\n */\nexport const TYPE_DEFINITIONS = {\n core: CORE_TYPES,\n console: CONSOLE_TYPES,\n crypto: CRYPTO_TYPES,\n encoding: ENCODING_TYPES,\n fetch: FETCH_TYPES,\n fs: FS_TYPES,\n path: PATH_TYPES,\n testEnvironment: TEST_ENV_TYPES,\n timers: TIMERS_TYPES,\n} as const;\n\n/**\n * Type for the keys of TYPE_DEFINITIONS.\n */\nexport type TypeDefinitionKey = keyof typeof TYPE_DEFINITIONS;\n"
5
+ "/**\n * Isolate type definitions as string constants.\n *\n * These are the canonical source for isolated-vm global type definitions.\n * The .d.ts files in each package are generated from these strings during build.\n *\n * @example\n * import { TYPE_DEFINITIONS } from \"@ricsam/isolate-types\";\n *\n * // Use with ts-morph for type checking code strings\n * project.createSourceFile(\"types.d.ts\", TYPE_DEFINITIONS.fetch);\n */\n\n/**\n * Type definitions for @ricsam/isolate-core globals.\n *\n * Includes: ReadableStream, WritableStream, TransformStream, Blob, File, URL, URLSearchParams, DOMException\n */\nexport const CORE_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-core\n *\n * These types define the globals injected by setupCore() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // In your tsconfig.isolate.json\n * {\n * \"compilerOptions\": {\n * \"lib\": [\"ESNext\", \"DOM\"]\n * }\n * }\n *\n * // Then reference this file or use ts-morph for code strings\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Web Streams API\n // ============================================\n\n /**\n * A readable stream of data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n */\n const ReadableStream: typeof globalThis.ReadableStream;\n\n /**\n * A writable stream of data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WritableStream\n */\n const WritableStream: typeof globalThis.WritableStream;\n\n /**\n * A transform stream that can be used to pipe data through a transformer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransformStream\n */\n const TransformStream: typeof globalThis.TransformStream;\n\n /**\n * Default reader for ReadableStream\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader\n */\n const ReadableStreamDefaultReader: typeof globalThis.ReadableStreamDefaultReader;\n\n /**\n * Default writer for WritableStream\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter\n */\n const WritableStreamDefaultWriter: typeof globalThis.WritableStreamDefaultWriter;\n\n // ============================================\n // Blob and File APIs\n // ============================================\n\n /**\n * A file-like object of immutable, raw data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Blob\n */\n const Blob: typeof globalThis.Blob;\n\n /**\n * A file object representing a file.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/File\n */\n const File: typeof globalThis.File;\n\n // ============================================\n // URL APIs\n // ============================================\n\n /**\n * Interface for URL manipulation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URL\n */\n const URL: typeof globalThis.URL;\n\n /**\n * Utility for working with URL query strings.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n */\n const URLSearchParams: typeof globalThis.URLSearchParams;\n\n // ============================================\n // Error Handling\n // ============================================\n\n /**\n * Exception type for DOM operations.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n */\n const DOMException: typeof globalThis.DOMException;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-fetch globals.\n *\n * Includes: Headers, Request, Response, AbortController, AbortSignal, FormData, fetch, serve, Server, ServerWebSocket, WebSocket\n */\nexport const FETCH_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-fetch\n *\n * These types define the globals injected by setupFetch() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with serve()\n * type WebSocketData = { id: number; connectedAt: number };\n *\n * serve({\n * fetch(request, server) {\n * if (request.url.includes(\"/ws\")) {\n * // server.upgrade knows data should be WebSocketData\n * server.upgrade(request, { data: { id: 123, connectedAt: Date.now() } });\n * return new Response(null, { status: 101 });\n * }\n * return new Response(\"Hello!\");\n * },\n * websocket: {\n * // Type hint - specifies the type of ws.data\n * data: {} as WebSocketData,\n * message(ws, message) {\n * // ws.data is typed as WebSocketData\n * console.log(\"User\", ws.data.id, \"says:\", message);\n * ws.send(\"Echo: \" + message);\n * }\n * }\n * });\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Standard Fetch API (from lib.dom)\n // ============================================\n\n /**\n * Headers class for HTTP headers manipulation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Headers\n */\n const Headers: typeof globalThis.Headers;\n\n /**\n * Request class for HTTP requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Request\n */\n const Request: typeof globalThis.Request;\n\n /**\n * Response class for HTTP responses.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Response\n */\n const Response: typeof globalThis.Response;\n\n /**\n * AbortController for cancelling fetch requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController\n */\n const AbortController: typeof globalThis.AbortController;\n\n /**\n * AbortSignal for listening to abort events.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n */\n const AbortSignal: typeof globalThis.AbortSignal;\n\n /**\n * FormData for constructing form data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FormData\n */\n const FormData: typeof globalThis.FormData;\n\n /**\n * Fetch function for making HTTP requests.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\n */\n function fetch(\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response>;\n\n // ============================================\n // Isolate-specific: serve() API\n // ============================================\n\n /**\n * Server interface for handling WebSocket upgrades within serve() handlers.\n *\n * @typeParam T - The type of data associated with WebSocket connections\n */\n interface Server<T = unknown> {\n /**\n * Upgrade an HTTP request to a WebSocket connection.\n *\n * @param request - The incoming HTTP request to upgrade\n * @param options - Optional data to associate with the WebSocket connection\n * @returns true if upgrade will proceed, false otherwise\n *\n * @example\n * serve({\n * fetch(request, server) {\n * if (server.upgrade(request, { data: { userId: 123 } })) {\n * return new Response(null, { status: 101 });\n * }\n * return new Response(\"Upgrade failed\", { status: 400 });\n * }\n * });\n */\n upgrade(request: Request, options?: { data?: T }): boolean;\n }\n\n /**\n * ServerWebSocket interface for WebSocket connections within serve() handlers.\n *\n * @typeParam T - The type of data associated with this WebSocket connection\n */\n interface ServerWebSocket<T = unknown> {\n /**\n * User data associated with this connection.\n * Set via \\`server.upgrade(request, { data: ... })\\`.\n */\n readonly data: T;\n\n /**\n * Send a message to the client.\n *\n * @param message - The message to send (string, ArrayBuffer, or Uint8Array)\n */\n send(message: string | ArrayBuffer | Uint8Array): void;\n\n /**\n * Close the WebSocket connection.\n *\n * @param code - Optional close code (default: 1000)\n * @param reason - Optional close reason\n */\n close(code?: number, reason?: string): void;\n\n /**\n * WebSocket ready state.\n * - 0: CONNECTING\n * - 1: OPEN\n * - 2: CLOSING\n * - 3: CLOSED\n */\n readonly readyState: number;\n }\n\n /**\n * Options for the serve() function.\n *\n * @typeParam T - The type of data associated with WebSocket connections\n */\n interface ServeOptions<T = unknown> {\n /**\n * Handler for HTTP requests.\n *\n * @param request - The incoming HTTP request\n * @param server - Server interface for WebSocket upgrades\n * @returns Response or Promise resolving to Response\n */\n fetch(request: Request, server: Server<T>): Response | Promise<Response>;\n\n /**\n * WebSocket event handlers.\n */\n websocket?: {\n /**\n * Type hint for WebSocket data. The value is not used at runtime.\n * Specifies the type of \\`ws.data\\` for all handlers and \\`server.upgrade()\\`.\n *\n * @example\n * websocket: {\n * data: {} as { userId: string },\n * message(ws, message) {\n * // ws.data.userId is typed as string\n * }\n * }\n */\n data?: T;\n\n /**\n * Called when a WebSocket connection is opened.\n *\n * @param ws - The WebSocket connection\n */\n open?(ws: ServerWebSocket<T>): void | Promise<void>;\n\n /**\n * Called when a message is received.\n *\n * @param ws - The WebSocket connection\n * @param message - The received message (string or ArrayBuffer)\n */\n message?(\n ws: ServerWebSocket<T>,\n message: string | ArrayBuffer\n ): void | Promise<void>;\n\n /**\n * Called when the connection is closed.\n *\n * @param ws - The WebSocket connection\n * @param code - The close code\n * @param reason - The close reason\n */\n close?(\n ws: ServerWebSocket<T>,\n code: number,\n reason: string\n ): void | Promise<void>;\n\n /**\n * Called when an error occurs.\n *\n * @param ws - The WebSocket connection\n * @param error - The error that occurred\n */\n error?(ws: ServerWebSocket<T>, error: Error): void | Promise<void>;\n };\n }\n\n /**\n * Register an HTTP server handler in the isolate.\n *\n * Only one serve() handler can be active at a time.\n * Calling serve() again replaces the previous handler.\n *\n * @param options - Server configuration including fetch handler and optional WebSocket handlers\n *\n * @example\n * type WsData = { connectedAt: number };\n *\n * serve({\n * fetch(request, server) {\n * const url = new URL(request.url);\n *\n * if (url.pathname === \"/ws\") {\n * if (server.upgrade(request, { data: { connectedAt: Date.now() } })) {\n * return new Response(null, { status: 101 });\n * }\n * }\n *\n * if (url.pathname === \"/api/hello\") {\n * return Response.json({ message: \"Hello!\" });\n * }\n *\n * return new Response(\"Not Found\", { status: 404 });\n * },\n * websocket: {\n * data: {} as WsData,\n * open(ws) {\n * console.log(\"Connected at:\", ws.data.connectedAt);\n * },\n * message(ws, message) {\n * ws.send(\"Echo: \" + message);\n * },\n * close(ws, code, reason) {\n * console.log(\"Closed:\", code, reason);\n * }\n * }\n * });\n */\n function serve<T = unknown>(options: ServeOptions<T>): void;\n\n // ============================================\n // Client WebSocket API (outbound connections)\n // ============================================\n\n /**\n * The type for WebSocket binary data handling.\n */\n type BinaryType = \"blob\" | \"arraybuffer\";\n\n /**\n * Event fired when a WebSocket connection is closed.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n */\n interface CloseEvent extends Event {\n /**\n * The close code sent by the server.\n */\n readonly code: number;\n\n /**\n * The close reason sent by the server.\n */\n readonly reason: string;\n\n /**\n * Whether the connection was closed cleanly.\n */\n readonly wasClean: boolean;\n }\n\n /**\n * Event fired when a WebSocket receives a message.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent\n */\n interface MessageEvent<T = any> extends Event {\n /**\n * The data sent by the message emitter.\n */\n readonly data: T;\n\n /**\n * The origin of the message emitter.\n */\n readonly origin: string;\n\n /**\n * The last event ID (for Server-Sent Events).\n */\n readonly lastEventId: string;\n\n /**\n * The MessagePort array sent with the message (if any).\n */\n readonly ports: ReadonlyArray<MessagePort>;\n\n /**\n * The source of the message (if applicable).\n */\n readonly source: MessageEventSource | null;\n }\n\n /**\n * WHATWG WebSocket client for making outbound WebSocket connections.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n *\n * @example\n * const ws = new WebSocket(\"wss://echo.websocket.org\");\n *\n * ws.onopen = () => {\n * console.log(\"Connected!\");\n * ws.send(\"Hello, server!\");\n * };\n *\n * ws.onmessage = (event) => {\n * console.log(\"Received:\", event.data);\n * };\n *\n * ws.onclose = (event) => {\n * console.log(\"Closed:\", event.code, event.reason);\n * };\n *\n * ws.onerror = () => {\n * console.log(\"Error occurred\");\n * };\n */\n interface WebSocket extends EventTarget {\n /**\n * The URL of the WebSocket connection.\n */\n readonly url: string;\n\n /**\n * The current state of the connection.\n * - 0: CONNECTING\n * - 1: OPEN\n * - 2: CLOSING\n * - 3: CLOSED\n */\n readonly readyState: number;\n\n /**\n * The number of bytes of data that have been queued but not yet transmitted.\n */\n readonly bufferedAmount: number;\n\n /**\n * The extensions selected by the server.\n */\n readonly extensions: string;\n\n /**\n * The subprotocol selected by the server.\n */\n readonly protocol: string;\n\n /**\n * The type of binary data being transmitted.\n * Can be \"blob\" or \"arraybuffer\".\n */\n binaryType: BinaryType;\n\n /**\n * Send data through the WebSocket connection.\n *\n * @param data - The data to send\n * @throws InvalidStateError if the connection is not open\n *\n * @example\n * ws.send(\"Hello!\");\n * ws.send(new Uint8Array([1, 2, 3]));\n */\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;\n\n /**\n * Close the WebSocket connection.\n *\n * @param code - The close code (default: 1000)\n * @param reason - The close reason (max 123 bytes UTF-8)\n *\n * @example\n * ws.close();\n * ws.close(1000, \"Normal closure\");\n */\n close(code?: number, reason?: string): void;\n\n /**\n * Event handler for when the connection is established.\n */\n onopen: ((this: WebSocket, ev: Event) => any) | null;\n\n /**\n * Event handler for when a message is received.\n */\n onmessage: ((this: WebSocket, ev: MessageEvent) => any) | null;\n\n /**\n * Event handler for when an error occurs.\n */\n onerror: ((this: WebSocket, ev: Event) => any) | null;\n\n /**\n * Event handler for when the connection is closed.\n */\n onclose: ((this: WebSocket, ev: CloseEvent) => any) | null;\n\n /**\n * Connection is being established.\n */\n readonly CONNECTING: 0;\n\n /**\n * Connection is open and ready to communicate.\n */\n readonly OPEN: 1;\n\n /**\n * Connection is in the process of closing.\n */\n readonly CLOSING: 2;\n\n /**\n * Connection is closed or couldn't be opened.\n */\n readonly CLOSED: 3;\n }\n\n /**\n * WebSocket constructor.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket\n */\n interface WebSocketConstructor {\n /**\n * Create a new WebSocket connection.\n *\n * @param url - The URL to connect to (must be ws:// or wss://)\n * @param protocols - Optional subprotocol(s) to request\n * @throws SyntaxError if the URL is invalid\n *\n * @example\n * const ws = new WebSocket(\"wss://example.com/socket\");\n * const ws = new WebSocket(\"wss://example.com/socket\", \"graphql-ws\");\n * const ws = new WebSocket(\"wss://example.com/socket\", [\"protocol1\", \"protocol2\"]);\n */\n new (url: string | URL, protocols?: string | string[]): WebSocket;\n\n readonly prototype: WebSocket;\n\n /**\n * Connection is being established.\n */\n readonly CONNECTING: 0;\n\n /**\n * Connection is open and ready to communicate.\n */\n readonly OPEN: 1;\n\n /**\n * Connection is in the process of closing.\n */\n readonly CLOSING: 2;\n\n /**\n * Connection is closed or couldn't be opened.\n */\n readonly CLOSED: 3;\n }\n\n /**\n * WHATWG WebSocket client for making outbound WebSocket connections.\n */\n const WebSocket: WebSocketConstructor;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-fs globals.\n *\n * Includes: fs namespace, FileSystemHandle, FileSystemFileHandle, FileSystemDirectoryHandle, FileSystemWritableFileStream\n */\nexport const FS_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-fs\n *\n * These types define the globals injected by setupFs() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with file system access\n * const root = await getDirectory(\"/data\");\n * const fileHandle = await root.getFileHandle(\"config.json\");\n * const file = await fileHandle.getFile();\n * const content = await file.text();\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // getDirectory - Isolate-specific entry point\n // ============================================\n\n /**\n * Get a directory handle for the given path.\n *\n * The host controls which paths are accessible. Invalid or unauthorized\n * paths will throw an error.\n *\n * @param path - The path to request from the host\n * @returns A promise resolving to a directory handle\n * @throws If the path is not allowed or doesn't exist\n *\n * @example\n * const root = await getDirectory(\"/\");\n * const dataDir = await getDirectory(\"/data\");\n */\n function getDirectory(path: string): Promise<FileSystemDirectoryHandle>;\n\n // ============================================\n // File System Access API\n // ============================================\n\n /**\n * Base interface for file system handles.\n */\n interface FileSystemHandle {\n /**\n * The kind of handle: \"file\" or \"directory\".\n */\n readonly kind: \"file\" | \"directory\";\n\n /**\n * The name of the file or directory.\n */\n readonly name: string;\n\n /**\n * Compare two handles to check if they reference the same entry.\n *\n * @param other - Another FileSystemHandle to compare against\n * @returns true if both handles reference the same entry\n */\n isSameEntry(other: FileSystemHandle): Promise<boolean>;\n }\n\n /**\n * Handle for a file in the file system.\n */\n interface FileSystemFileHandle extends FileSystemHandle {\n /**\n * Always \"file\" for file handles.\n */\n readonly kind: \"file\";\n\n /**\n * Get the file contents as a File object.\n *\n * @returns A promise resolving to a File object\n *\n * @example\n * const file = await fileHandle.getFile();\n * const text = await file.text();\n */\n getFile(): Promise<File>;\n\n /**\n * Create a writable stream for writing to the file.\n *\n * @param options - Options for the writable stream\n * @returns A promise resolving to a writable stream\n *\n * @example\n * const writable = await fileHandle.createWritable();\n * await writable.write(\"Hello, World!\");\n * await writable.close();\n */\n createWritable(options?: {\n /**\n * If true, keeps existing file data. Otherwise, truncates the file.\n */\n keepExistingData?: boolean;\n }): Promise<FileSystemWritableFileStream>;\n }\n\n /**\n * Handle for a directory in the file system.\n */\n interface FileSystemDirectoryHandle extends FileSystemHandle {\n /**\n * Always \"directory\" for directory handles.\n */\n readonly kind: \"directory\";\n\n /**\n * Get a file handle within this directory.\n *\n * @param name - The name of the file\n * @param options - Options for getting the file handle\n * @returns A promise resolving to a file handle\n * @throws If the file doesn't exist and create is not true\n *\n * @example\n * const file = await dir.getFileHandle(\"data.json\");\n * const newFile = await dir.getFileHandle(\"output.txt\", { create: true });\n */\n getFileHandle(\n name: string,\n options?: {\n /**\n * If true, creates the file if it doesn't exist.\n */\n create?: boolean;\n }\n ): Promise<FileSystemFileHandle>;\n\n /**\n * Get a subdirectory handle within this directory.\n *\n * @param name - The name of the subdirectory\n * @param options - Options for getting the directory handle\n * @returns A promise resolving to a directory handle\n * @throws If the directory doesn't exist and create is not true\n *\n * @example\n * const subdir = await dir.getDirectoryHandle(\"logs\");\n * const newDir = await dir.getDirectoryHandle(\"cache\", { create: true });\n */\n getDirectoryHandle(\n name: string,\n options?: {\n /**\n * If true, creates the directory if it doesn't exist.\n */\n create?: boolean;\n }\n ): Promise<FileSystemDirectoryHandle>;\n\n /**\n * Remove a file or directory within this directory.\n *\n * @param name - The name of the entry to remove\n * @param options - Options for removal\n * @throws If the entry doesn't exist or cannot be removed\n *\n * @example\n * await dir.removeEntry(\"old-file.txt\");\n * await dir.removeEntry(\"old-dir\", { recursive: true });\n */\n removeEntry(\n name: string,\n options?: {\n /**\n * If true, removes directories recursively.\n */\n recursive?: boolean;\n }\n ): Promise<void>;\n\n /**\n * Resolve the path from this directory to a descendant handle.\n *\n * @param possibleDescendant - A handle that may be a descendant\n * @returns An array of path segments, or null if not a descendant\n *\n * @example\n * const path = await root.resolve(nestedFile);\n * // [\"subdir\", \"file.txt\"]\n */\n resolve(possibleDescendant: FileSystemHandle): Promise<string[] | null>;\n\n /**\n * Iterate over entries in this directory.\n *\n * @returns An async iterator of [name, handle] pairs\n *\n * @example\n * for await (const [name, handle] of dir.entries()) {\n * console.log(name, handle.kind);\n * }\n */\n entries(): AsyncIterableIterator<[string, FileSystemHandle]>;\n\n /**\n * Iterate over entry names in this directory.\n *\n * @returns An async iterator of names\n *\n * @example\n * for await (const name of dir.keys()) {\n * console.log(name);\n * }\n */\n keys(): AsyncIterableIterator<string>;\n\n /**\n * Iterate over handles in this directory.\n *\n * @returns An async iterator of handles\n *\n * @example\n * for await (const handle of dir.values()) {\n * console.log(handle.name, handle.kind);\n * }\n */\n values(): AsyncIterableIterator<FileSystemHandle>;\n\n /**\n * Async iterator support for directory entries.\n *\n * @example\n * for await (const [name, handle] of dir) {\n * console.log(name, handle.kind);\n * }\n */\n [Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>;\n }\n\n /**\n * Parameters for write operations on FileSystemWritableFileStream.\n */\n interface WriteParams {\n /**\n * The type of write operation.\n * - \"write\": Write data at the current position or specified position\n * - \"seek\": Move the file position\n * - \"truncate\": Truncate the file to a specific size\n */\n type: \"write\" | \"seek\" | \"truncate\";\n\n /**\n * The data to write (for \"write\" type).\n */\n data?: string | ArrayBuffer | Uint8Array | Blob;\n\n /**\n * The position to write at or seek to.\n */\n position?: number;\n\n /**\n * The size to truncate to (for \"truncate\" type).\n */\n size?: number;\n }\n\n /**\n * Writable stream for writing to a file.\n * Extends WritableStream with file-specific operations.\n */\n interface FileSystemWritableFileStream extends WritableStream<Uint8Array> {\n /**\n * Write data to the file.\n *\n * @param data - The data to write\n * @returns A promise that resolves when the write completes\n *\n * @example\n * await writable.write(\"Hello, World!\");\n * await writable.write(new Uint8Array([1, 2, 3]));\n * await writable.write({ type: \"write\", data: \"text\", position: 0 });\n */\n write(\n data: string | ArrayBuffer | Uint8Array | Blob | WriteParams\n ): Promise<void>;\n\n /**\n * Seek to a position in the file.\n *\n * @param position - The byte position to seek to\n * @returns A promise that resolves when the seek completes\n *\n * @example\n * await writable.seek(0); // Seek to beginning\n * await writable.write(\"Overwrite\");\n */\n seek(position: number): Promise<void>;\n\n /**\n * Truncate the file to a specific size.\n *\n * @param size - The size to truncate to\n * @returns A promise that resolves when the truncation completes\n *\n * @example\n * await writable.truncate(100); // Keep only first 100 bytes\n */\n truncate(size: number): Promise<void>;\n }\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-test-environment globals.\n *\n * Includes: describe, it, test, expect, beforeAll, afterAll, beforeEach, afterEach\n */\nexport const TEST_ENV_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-test-environment\n *\n * These types define the globals injected by setupTestEnvironment() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * describe(\"Math operations\", () => {\n * it(\"should add numbers\", () => {\n * expect(1 + 1).toBe(2);\n * });\n * });\n */\n\nexport {};\n\ndeclare global {\n // ============================================\n // Test Structure\n // ============================================\n\n /**\n * Define a test suite.\n *\n * @param name - The name of the test suite\n * @param fn - Function containing tests and nested suites\n *\n * @example\n * describe(\"Calculator\", () => {\n * it(\"adds numbers\", () => {\n * expect(1 + 1).toBe(2);\n * });\n * });\n */\n function describe(name: string, fn: () => void): void;\n\n namespace describe {\n /**\n * Skip this suite and all its tests.\n */\n function skip(name: string, fn: () => void): void;\n\n /**\n * Only run this suite (and other .only suites).\n */\n function only(name: string, fn: () => void): void;\n\n /**\n * Mark suite as todo (skipped with different status).\n */\n function todo(name: string, fn?: () => void): void;\n }\n\n /**\n * Define a test case.\n *\n * @param name - The name of the test\n * @param fn - The test function (can be async)\n *\n * @example\n * it(\"should work\", () => {\n * expect(true).toBe(true);\n * });\n *\n * it(\"should work async\", async () => {\n * const result = await Promise.resolve(42);\n * expect(result).toBe(42);\n * });\n */\n function it(name: string, fn: () => void | Promise<void>): void;\n\n namespace it {\n /**\n * Skip this test.\n */\n function skip(name: string, fn?: () => void | Promise<void>): void;\n\n /**\n * Only run this test (and other .only tests).\n */\n function only(name: string, fn: () => void | Promise<void>): void;\n\n /**\n * Mark test as todo.\n */\n function todo(name: string, fn?: () => void | Promise<void>): void;\n }\n\n /**\n * Alias for it().\n */\n function test(name: string, fn: () => void | Promise<void>): void;\n\n namespace test {\n /**\n * Skip this test.\n */\n function skip(name: string, fn?: () => void | Promise<void>): void;\n\n /**\n * Only run this test (and other .only tests).\n */\n function only(name: string, fn: () => void | Promise<void>): void;\n\n /**\n * Mark test as todo.\n */\n function todo(name: string, fn?: () => void | Promise<void>): void;\n }\n\n // ============================================\n // Lifecycle Hooks\n // ============================================\n\n /**\n * Run once before all tests in the current suite.\n *\n * @param fn - Setup function (can be async)\n */\n function beforeAll(fn: () => void | Promise<void>): void;\n\n /**\n * Run once after all tests in the current suite.\n *\n * @param fn - Teardown function (can be async)\n */\n function afterAll(fn: () => void | Promise<void>): void;\n\n /**\n * Run before each test in the current suite (and nested suites).\n *\n * @param fn - Setup function (can be async)\n */\n function beforeEach(fn: () => void | Promise<void>): void;\n\n /**\n * Run after each test in the current suite (and nested suites).\n *\n * @param fn - Teardown function (can be async)\n */\n function afterEach(fn: () => void | Promise<void>): void;\n\n // ============================================\n // Assertions\n // ============================================\n\n /**\n * Matchers for assertions.\n */\n interface Matchers<T> {\n /**\n * Strict equality (===).\n */\n toBe(expected: T): void;\n\n /**\n * Deep equality.\n */\n toEqual(expected: unknown): void;\n\n /**\n * Deep equality with type checking.\n */\n toStrictEqual(expected: unknown): void;\n\n /**\n * Check if value is truthy.\n */\n toBeTruthy(): void;\n\n /**\n * Check if value is falsy.\n */\n toBeFalsy(): void;\n\n /**\n * Check if value is null.\n */\n toBeNull(): void;\n\n /**\n * Check if value is undefined.\n */\n toBeUndefined(): void;\n\n /**\n * Check if value is defined (not undefined).\n */\n toBeDefined(): void;\n\n /**\n * Check if value is NaN.\n */\n toBeNaN(): void;\n\n /**\n * Check if number is greater than expected.\n */\n toBeGreaterThan(n: number): void;\n\n /**\n * Check if number is greater than or equal to expected.\n */\n toBeGreaterThanOrEqual(n: number): void;\n\n /**\n * Check if number is less than expected.\n */\n toBeLessThan(n: number): void;\n\n /**\n * Check if number is less than or equal to expected.\n */\n toBeLessThanOrEqual(n: number): void;\n\n /**\n * Check if array/string contains item/substring.\n */\n toContain(item: unknown): void;\n\n /**\n * Check length of array/string.\n */\n toHaveLength(length: number): void;\n\n /**\n * Check if object has property (optionally with value).\n */\n toHaveProperty(key: string, value?: unknown): void;\n\n /**\n * Check if function throws.\n */\n toThrow(expected?: string | RegExp | Error): void;\n\n /**\n * Check if string matches pattern.\n */\n toMatch(pattern: string | RegExp): void;\n\n /**\n * Check if object matches subset of properties.\n */\n toMatchObject(object: object): void;\n\n /**\n * Check if value is instance of class.\n */\n toBeInstanceOf(constructor: Function): void;\n\n /**\n * Negate the matcher.\n */\n not: Matchers<T>;\n\n /**\n * Await promise and check resolved value.\n */\n resolves: Matchers<Awaited<T>>;\n\n /**\n * Await promise and check rejection.\n */\n rejects: Matchers<unknown>;\n }\n\n /**\n * Create an expectation for a value.\n *\n * @param actual - The value to test\n * @returns Matchers for the value\n *\n * @example\n * expect(1 + 1).toBe(2);\n * expect({ a: 1 }).toEqual({ a: 1 });\n * expect(() => { throw new Error(); }).toThrow();\n * expect(promise).resolves.toBe(42);\n */\n function expect<T>(actual: T): Matchers<T>;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-console globals.\n *\n * Includes: console.log, warn, error, debug, info, trace, dir, table, time, timeEnd, timeLog, count, countReset, clear, assert, group, groupCollapsed, groupEnd\n */\nexport const CONSOLE_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-console\n *\n * These types define the globals injected by setupConsole() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n */\n\nexport {};\n\ndeclare global {\n /**\n * Console interface for logging and debugging.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Console\n */\n interface Console {\n /**\n * Log a message to the console.\n * @param data - Values to log\n */\n log(...data: unknown[]): void;\n\n /**\n * Log a warning message.\n * @param data - Values to log\n */\n warn(...data: unknown[]): void;\n\n /**\n * Log an error message.\n * @param data - Values to log\n */\n error(...data: unknown[]): void;\n\n /**\n * Log a debug message.\n * @param data - Values to log\n */\n debug(...data: unknown[]): void;\n\n /**\n * Log an info message.\n * @param data - Values to log\n */\n info(...data: unknown[]): void;\n\n /**\n * Log a stack trace.\n * @param data - Values to log with the trace\n */\n trace(...data: unknown[]): void;\n\n /**\n * Display an object in a formatted way.\n * @param item - Object to display\n * @param options - Display options\n */\n dir(item: unknown, options?: object): void;\n\n /**\n * Display tabular data.\n * @param tabularData - Data to display as a table\n * @param properties - Optional array of property names to include\n */\n table(tabularData: unknown, properties?: string[]): void;\n\n /**\n * Start a timer.\n * @param label - Timer label (default: \"default\")\n */\n time(label?: string): void;\n\n /**\n * End a timer and log the elapsed time.\n * @param label - Timer label (default: \"default\")\n */\n timeEnd(label?: string): void;\n\n /**\n * Log the elapsed time of a timer without ending it.\n * @param label - Timer label (default: \"default\")\n * @param data - Additional values to log\n */\n timeLog(label?: string, ...data: unknown[]): void;\n\n /**\n * Log an error if the assertion is false.\n * @param condition - Condition to test\n * @param data - Values to log if assertion fails\n */\n assert(condition?: boolean, ...data: unknown[]): void;\n\n /**\n * Increment and log a counter.\n * @param label - Counter label (default: \"default\")\n */\n count(label?: string): void;\n\n /**\n * Reset a counter.\n * @param label - Counter label (default: \"default\")\n */\n countReset(label?: string): void;\n\n /**\n * Clear the console.\n */\n clear(): void;\n\n /**\n * Start an inline group.\n * @param data - Group label\n */\n group(...data: unknown[]): void;\n\n /**\n * Start a collapsed inline group.\n * @param data - Group label\n */\n groupCollapsed(...data: unknown[]): void;\n\n /**\n * End the current inline group.\n */\n groupEnd(): void;\n }\n\n /**\n * Console object for logging and debugging.\n */\n const console: Console;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-encoding globals.\n *\n * Includes: atob, btoa, Buffer\n */\nexport const ENCODING_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-encoding\n *\n * These types define the globals injected by setupEncoding() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n */\n\nexport {};\n\ndeclare global {\n /**\n * Decodes a Base64-encoded string.\n *\n * @param encodedData - The Base64 string to decode\n * @returns The decoded string\n * @throws DOMException if the input is not valid Base64\n *\n * @example\n * atob(\"SGVsbG8=\"); // \"Hello\"\n */\n function atob(encodedData: string): string;\n\n /**\n * Encodes a string to Base64.\n *\n * @param stringToEncode - The string to encode (must contain only Latin1 characters)\n * @returns The Base64 encoded string\n * @throws DOMException if the string contains characters outside Latin1 range (0-255)\n *\n * @example\n * btoa(\"Hello\"); // \"SGVsbG8=\"\n */\n function btoa(stringToEncode: string): string;\n\n // ============================================\n // Buffer\n // ============================================\n\n /**\n * Buffer encoding types supported by the isolate Buffer implementation.\n */\n type BufferEncoding = \"utf8\" | \"utf-8\" | \"base64\" | \"hex\";\n\n /**\n * Buffer class for working with binary data.\n * Extends Uint8Array for compatibility.\n * @see https://nodejs.org/api/buffer.html\n */\n interface Buffer extends Uint8Array {\n /**\n * Convert the buffer to a string.\n *\n * @param encoding - The encoding to use (default: \"utf8\")\n * @returns The string representation\n *\n * @example\n * const buf = Buffer.from(\"hello\");\n * buf.toString(); // \"hello\"\n * buf.toString(\"hex\"); // \"68656c6c6f\"\n * buf.toString(\"base64\"); // \"aGVsbG8=\"\n */\n toString(encoding?: BufferEncoding): string;\n\n /**\n * Returns a new Buffer that references the same memory as the original,\n * but offset and cropped by the start and end indices.\n *\n * @param start - Start index (default: 0)\n * @param end - End index (default: buffer.length)\n * @returns A new Buffer instance\n *\n * @example\n * const buf = Buffer.from(\"hello\");\n * buf.slice(1, 4).toString(); // \"ell\"\n */\n slice(start?: number, end?: number): Buffer;\n\n /**\n * Returns a new Buffer that references the same memory as the original,\n * but offset and cropped by the start and end indices.\n *\n * @param start - Start index (default: 0)\n * @param end - End index (default: buffer.length)\n * @returns A new Buffer instance\n */\n subarray(start?: number, end?: number): Buffer;\n }\n\n /**\n * Buffer constructor interface.\n */\n interface BufferConstructor {\n /**\n * Creates a new Buffer from a string, array, ArrayBuffer, or another Buffer.\n *\n * @param value - The value to create a buffer from\n * @param encodingOrOffset - Encoding for strings, or byte offset for ArrayBuffer\n * @param length - Length for ArrayBuffer (when offset is provided)\n * @returns A new Buffer instance\n *\n * @example\n * Buffer.from(\"hello\"); // UTF-8 encoded\n * Buffer.from(\"aGVsbG8=\", \"base64\"); // base64 decoded\n * Buffer.from(\"68656c6c6f\", \"hex\"); // hex decoded\n * Buffer.from([104, 101, 108, 108, 111]); // from array\n */\n from(value: string, encoding?: BufferEncoding): Buffer;\n from(value: ArrayBuffer, byteOffset?: number, length?: number): Buffer;\n from(value: Uint8Array | ReadonlyArray<number>): Buffer;\n from(value: Iterable<number>): Buffer;\n\n /**\n * Allocates a new Buffer of the specified size, filled with zeros or the specified fill value.\n *\n * @param size - The size of the buffer in bytes\n * @param fill - Value to fill the buffer with (default: 0)\n * @param encoding - Encoding for string fill values\n * @returns A new Buffer instance\n *\n * @example\n * Buffer.alloc(5); // <Buffer 00 00 00 00 00>\n * Buffer.alloc(5, 1); // <Buffer 01 01 01 01 01>\n * Buffer.alloc(5, \"ab\"); // <Buffer 61 62 61 62 61>\n */\n alloc(size: number, fill?: number | string | Buffer, encoding?: BufferEncoding): Buffer;\n\n /**\n * Allocates a new Buffer of the specified size without initializing the memory.\n * The contents are unknown and may contain sensitive data.\n *\n * @param size - The size of the buffer in bytes\n * @returns A new Buffer instance\n */\n allocUnsafe(size: number): Buffer;\n\n /**\n * Concatenates a list of Buffers.\n *\n * @param list - Array of Buffer instances to concatenate\n * @param totalLength - Total length of the buffers (optional)\n * @returns A new Buffer instance\n *\n * @example\n * const buf1 = Buffer.from(\"hel\");\n * const buf2 = Buffer.from(\"lo\");\n * Buffer.concat([buf1, buf2]).toString(); // \"hello\"\n */\n concat(list: ReadonlyArray<Uint8Array>, totalLength?: number): Buffer;\n\n /**\n * Returns true if the given object is a Buffer.\n *\n * @param obj - Object to test\n * @returns true if obj is a Buffer\n *\n * @example\n * Buffer.isBuffer(Buffer.from(\"test\")); // true\n * Buffer.isBuffer(new Uint8Array(5)); // false\n */\n isBuffer(obj: unknown): obj is Buffer;\n\n /**\n * Returns the byte length of a string when encoded.\n *\n * @param string - The string to measure\n * @param encoding - The encoding (default: \"utf8\")\n * @returns The byte length\n *\n * @example\n * Buffer.byteLength(\"hello\"); // 5\n * Buffer.byteLength(\"aGVsbG8=\", \"base64\"); // 5 (decoded length)\n */\n byteLength(string: string, encoding?: BufferEncoding): number;\n byteLength(buffer: ArrayBufferView | ArrayBuffer): number;\n\n /**\n * Returns true if the encoding is a valid buffer encoding.\n *\n * @param encoding - The encoding to check\n * @returns true if the encoding is supported\n */\n isEncoding(encoding: string): encoding is BufferEncoding;\n\n readonly prototype: Buffer;\n }\n\n /**\n * Buffer class for working with binary data.\n * @see https://nodejs.org/api/buffer.html\n */\n const Buffer: BufferConstructor;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-crypto globals.\n *\n * Includes: crypto.subtle, crypto.getRandomValues, crypto.randomUUID, CryptoKey\n */\nexport const CRYPTO_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-crypto\n *\n * These types define the globals injected by setupCrypto() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Generate random bytes\n * const arr = new Uint8Array(16);\n * crypto.getRandomValues(arr);\n *\n * // Generate UUID\n * const uuid = crypto.randomUUID();\n *\n * // Use SubtleCrypto\n * const key = await crypto.subtle.generateKey(\n * { name: \"AES-GCM\", length: 256 },\n * true,\n * [\"encrypt\", \"decrypt\"]\n * );\n */\n\nexport {};\n\ndeclare global {\n /**\n * CryptoKey represents a cryptographic key.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey\n */\n interface CryptoKey {\n /**\n * The type of key: \"public\", \"private\", or \"secret\".\n */\n readonly type: \"public\" | \"private\" | \"secret\";\n\n /**\n * Whether the key can be exported.\n */\n readonly extractable: boolean;\n\n /**\n * The algorithm used by this key.\n */\n readonly algorithm: KeyAlgorithm;\n\n /**\n * The usages allowed for this key.\n */\n readonly usages: ReadonlyArray<KeyUsage>;\n }\n\n /**\n * CryptoKey constructor (keys cannot be constructed directly).\n */\n const CryptoKey: {\n prototype: CryptoKey;\n };\n\n /**\n * SubtleCrypto interface for cryptographic operations.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto\n */\n interface SubtleCrypto {\n /**\n * Generate a digest (hash) of the given data.\n *\n * @param algorithm - Hash algorithm (e.g., \"SHA-256\", \"SHA-384\", \"SHA-512\")\n * @param data - Data to hash\n * @returns Promise resolving to the hash as ArrayBuffer\n */\n digest(\n algorithm: AlgorithmIdentifier,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Generate a new cryptographic key or key pair.\n *\n * @param algorithm - Key generation algorithm\n * @param extractable - Whether the key can be exported\n * @param keyUsages - Allowed key usages\n * @returns Promise resolving to a CryptoKey or CryptoKeyPair\n */\n generateKey(\n algorithm: RsaHashedKeyGenParams | EcKeyGenParams | AesKeyGenParams | HmacKeyGenParams,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey | CryptoKeyPair>;\n\n /**\n * Sign data using a private key.\n *\n * @param algorithm - Signing algorithm\n * @param key - Private key to sign with\n * @param data - Data to sign\n * @returns Promise resolving to the signature as ArrayBuffer\n */\n sign(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Verify a signature.\n *\n * @param algorithm - Signing algorithm\n * @param key - Public key to verify with\n * @param signature - Signature to verify\n * @param data - Data that was signed\n * @returns Promise resolving to true if valid, false otherwise\n */\n verify(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n signature: BufferSource,\n data: BufferSource\n ): Promise<boolean>;\n\n /**\n * Encrypt data.\n *\n * @param algorithm - Encryption algorithm\n * @param key - Encryption key\n * @param data - Data to encrypt\n * @returns Promise resolving to encrypted data as ArrayBuffer\n */\n encrypt(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Decrypt data.\n *\n * @param algorithm - Decryption algorithm\n * @param key - Decryption key\n * @param data - Data to decrypt\n * @returns Promise resolving to decrypted data as ArrayBuffer\n */\n decrypt(\n algorithm: AlgorithmIdentifier,\n key: CryptoKey,\n data: BufferSource\n ): Promise<ArrayBuffer>;\n\n /**\n * Import a key from external data.\n *\n * @param format - Key format (\"raw\", \"pkcs8\", \"spki\", \"jwk\")\n * @param keyData - Key data\n * @param algorithm - Key algorithm\n * @param extractable - Whether the key can be exported\n * @param keyUsages - Allowed key usages\n * @returns Promise resolving to a CryptoKey\n */\n importKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n keyData: BufferSource | JsonWebKey,\n algorithm: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n\n /**\n * Export a key.\n *\n * @param format - Export format (\"raw\", \"pkcs8\", \"spki\", \"jwk\")\n * @param key - Key to export\n * @returns Promise resolving to ArrayBuffer or JsonWebKey\n */\n exportKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n key: CryptoKey\n ): Promise<ArrayBuffer | JsonWebKey>;\n\n /**\n * Derive bits from a key.\n *\n * @param algorithm - Derivation algorithm\n * @param baseKey - Base key for derivation\n * @param length - Number of bits to derive\n * @returns Promise resolving to derived bits as ArrayBuffer\n */\n deriveBits(\n algorithm: AlgorithmIdentifier,\n baseKey: CryptoKey,\n length: number\n ): Promise<ArrayBuffer>;\n\n /**\n * Derive a new key from a base key.\n *\n * @param algorithm - Derivation algorithm\n * @param baseKey - Base key for derivation\n * @param derivedKeyType - Type of key to derive\n * @param extractable - Whether the derived key can be exported\n * @param keyUsages - Allowed usages for derived key\n * @returns Promise resolving to a CryptoKey\n */\n deriveKey(\n algorithm: AlgorithmIdentifier,\n baseKey: CryptoKey,\n derivedKeyType: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n\n /**\n * Wrap a key for secure export.\n *\n * @param format - Key format\n * @param key - Key to wrap\n * @param wrappingKey - Key to wrap with\n * @param wrapAlgorithm - Wrapping algorithm\n * @returns Promise resolving to wrapped key as ArrayBuffer\n */\n wrapKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n key: CryptoKey,\n wrappingKey: CryptoKey,\n wrapAlgorithm: AlgorithmIdentifier\n ): Promise<ArrayBuffer>;\n\n /**\n * Unwrap a wrapped key.\n *\n * @param format - Key format\n * @param wrappedKey - Wrapped key data\n * @param unwrappingKey - Key to unwrap with\n * @param unwrapAlgorithm - Unwrapping algorithm\n * @param unwrappedKeyAlgorithm - Algorithm for the unwrapped key\n * @param extractable - Whether the unwrapped key can be exported\n * @param keyUsages - Allowed usages for unwrapped key\n * @returns Promise resolving to a CryptoKey\n */\n unwrapKey(\n format: \"raw\" | \"pkcs8\" | \"spki\" | \"jwk\",\n wrappedKey: BufferSource,\n unwrappingKey: CryptoKey,\n unwrapAlgorithm: AlgorithmIdentifier,\n unwrappedKeyAlgorithm: AlgorithmIdentifier,\n extractable: boolean,\n keyUsages: KeyUsage[]\n ): Promise<CryptoKey>;\n }\n\n /**\n * Crypto interface providing cryptographic functionality.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto\n */\n interface Crypto {\n /**\n * SubtleCrypto interface for cryptographic operations.\n */\n readonly subtle: SubtleCrypto;\n\n /**\n * Fill a TypedArray with cryptographically random values.\n *\n * @param array - TypedArray to fill (max 65536 bytes)\n * @returns The same array, filled with random values\n *\n * @example\n * const arr = new Uint8Array(16);\n * crypto.getRandomValues(arr);\n */\n getRandomValues<T extends ArrayBufferView | null>(array: T): T;\n\n /**\n * Generate a random UUID v4.\n *\n * @returns A random UUID string\n *\n * @example\n * const uuid = crypto.randomUUID();\n * // \"550e8400-e29b-41d4-a716-446655440000\"\n */\n randomUUID(): string;\n }\n\n /**\n * Crypto object providing cryptographic functionality.\n */\n const crypto: Crypto;\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-path globals.\n *\n * Includes: path.join, path.normalize, path.basename, path.dirname, path.extname,\n * path.isAbsolute, path.parse, path.format, path.resolve, path.relative,\n * path.cwd, path.sep, path.delimiter\n */\nexport const PATH_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-path\n *\n * These types define the globals injected by setupPath() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * // Typecheck isolate code with path operations\n * const joined = path.join('/foo', 'bar', 'baz');\n * const resolved = path.resolve('relative/path');\n * const cwd = path.cwd();\n */\n\nexport {};\n\ndeclare global {\n /**\n * Parsed path object returned by path.parse().\n */\n interface ParsedPath {\n /** The root of the path (e.g., \"/\" for absolute paths, \"\" for relative) */\n root: string;\n /** The directory portion of the path */\n dir: string;\n /** The file name including extension */\n base: string;\n /** The file extension (e.g., \".txt\") */\n ext: string;\n /** The file name without extension */\n name: string;\n }\n\n /**\n * Input object for path.format().\n */\n interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n }\n\n /**\n * Path utilities for POSIX paths.\n * @see https://nodejs.org/api/path.html\n */\n namespace path {\n /**\n * Join path segments with the platform-specific separator.\n *\n * @param paths - Path segments to join\n * @returns The joined path, normalized\n *\n * @example\n * path.join('/foo', 'bar', 'baz'); // \"/foo/bar/baz\"\n * path.join('foo', 'bar', '..', 'baz'); // \"foo/baz\"\n */\n function join(...paths: string[]): string;\n\n /**\n * Normalize a path, resolving '..' and '.' segments.\n *\n * @param p - The path to normalize\n * @returns The normalized path\n *\n * @example\n * path.normalize('/foo/bar/../baz'); // \"/foo/baz\"\n * path.normalize('/foo//bar'); // \"/foo/bar\"\n */\n function normalize(p: string): string;\n\n /**\n * Get the last portion of a path (the file name).\n *\n * @param p - The path\n * @param ext - Optional extension to remove from the result\n * @returns The base name of the path\n *\n * @example\n * path.basename('/foo/bar/baz.txt'); // \"baz.txt\"\n * path.basename('/foo/bar/baz.txt', '.txt'); // \"baz\"\n */\n function basename(p: string, ext?: string): string;\n\n /**\n * Get the directory name of a path.\n *\n * @param p - The path\n * @returns The directory portion of the path\n *\n * @example\n * path.dirname('/foo/bar/baz.txt'); // \"/foo/bar\"\n * path.dirname('/foo'); // \"/\"\n */\n function dirname(p: string): string;\n\n /**\n * Get the extension of a path.\n *\n * @param p - The path\n * @returns The extension including the dot, or empty string\n *\n * @example\n * path.extname('file.txt'); // \".txt\"\n * path.extname('file.tar.gz'); // \".gz\"\n * path.extname('.bashrc'); // \"\"\n */\n function extname(p: string): string;\n\n /**\n * Check if a path is absolute.\n *\n * @param p - The path to check\n * @returns True if the path is absolute\n *\n * @example\n * path.isAbsolute('/foo/bar'); // true\n * path.isAbsolute('foo/bar'); // false\n */\n function isAbsolute(p: string): boolean;\n\n /**\n * Parse a path into its components.\n *\n * @param p - The path to parse\n * @returns An object with root, dir, base, ext, and name properties\n *\n * @example\n * path.parse('/foo/bar/baz.txt');\n * // { root: \"/\", dir: \"/foo/bar\", base: \"baz.txt\", ext: \".txt\", name: \"baz\" }\n */\n function parse(p: string): ParsedPath;\n\n /**\n * Build a path from an object.\n *\n * @param pathObject - Object with path components\n * @returns The formatted path string\n *\n * @example\n * path.format({ dir: '/foo/bar', base: 'baz.txt' }); // \"/foo/bar/baz.txt\"\n * path.format({ root: '/', name: 'file', ext: '.txt' }); // \"/file.txt\"\n */\n function format(pathObject: FormatInputPathObject): string;\n\n /**\n * Resolve a sequence of paths to an absolute path.\n * Processes paths from right to left, prepending each until an absolute path is formed.\n * Uses the configured working directory for relative paths.\n *\n * @param paths - Path segments to resolve\n * @returns The resolved absolute path\n *\n * @example\n * // With cwd set to \"/home/user\"\n * path.resolve('foo/bar'); // \"/home/user/foo/bar\"\n * path.resolve('/foo', 'bar'); // \"/foo/bar\"\n * path.resolve('/foo', '/bar', 'baz'); // \"/bar/baz\"\n */\n function resolve(...paths: string[]): string;\n\n /**\n * Compute the relative path from one path to another.\n *\n * @param from - The source path\n * @param to - The destination path\n * @returns The relative path from 'from' to 'to'\n *\n * @example\n * path.relative('/foo/bar', '/foo/baz'); // \"../baz\"\n * path.relative('/foo', '/foo/bar/baz'); // \"bar/baz\"\n */\n function relative(from: string, to: string): string;\n\n /**\n * Get the configured working directory.\n *\n * @returns The current working directory\n *\n * @example\n * path.cwd(); // \"/home/user\" (or whatever was configured)\n */\n function cwd(): string;\n\n /**\n * The platform-specific path segment separator.\n * Always \"/\" for POSIX paths.\n */\n const sep: string;\n\n /**\n * The platform-specific path delimiter.\n * Always \":\" for POSIX paths.\n */\n const delimiter: string;\n }\n}\n`;\n\n/**\n * Type definitions for @ricsam/isolate-timers globals.\n *\n * Includes: setTimeout, setInterval, clearTimeout, clearInterval\n */\nexport const TIMERS_TYPES = `/**\n * Global Type Definitions for @ricsam/isolate-timers\n *\n * These types define the globals injected by setupTimers() into an isolated-vm context.\n * Use these types to typecheck user code that will run inside the V8 isolate.\n *\n * @example\n * const timeoutId = setTimeout(() => {\n * console.log(\"fired!\");\n * }, 1000);\n *\n * clearTimeout(timeoutId);\n *\n * const intervalId = setInterval(() => {\n * console.log(\"tick\");\n * }, 100);\n *\n * clearInterval(intervalId);\n */\n\nexport {};\n\ndeclare global {\n /**\n * Schedule a callback to execute after a delay.\n *\n * @param callback - The function to call after the delay\n * @param ms - The delay in milliseconds (default: 0)\n * @param args - Additional arguments to pass to the callback\n * @returns A timer ID that can be passed to clearTimeout\n *\n * @example\n * const id = setTimeout(() => console.log(\"done\"), 1000);\n * setTimeout((a, b) => console.log(a, b), 100, \"hello\", \"world\");\n */\n function setTimeout(\n callback: (...args: unknown[]) => void,\n ms?: number,\n ...args: unknown[]\n ): number;\n\n /**\n * Schedule a callback to execute repeatedly at a fixed interval.\n *\n * @param callback - The function to call at each interval\n * @param ms - The interval in milliseconds (minimum: 4ms)\n * @param args - Additional arguments to pass to the callback\n * @returns A timer ID that can be passed to clearInterval\n *\n * @example\n * const id = setInterval(() => console.log(\"tick\"), 1000);\n */\n function setInterval(\n callback: (...args: unknown[]) => void,\n ms?: number,\n ...args: unknown[]\n ): number;\n\n /**\n * Cancel a timeout previously scheduled with setTimeout.\n *\n * @param id - The timer ID returned by setTimeout\n *\n * @example\n * const id = setTimeout(() => {}, 1000);\n * clearTimeout(id);\n */\n function clearTimeout(id: number | undefined): void;\n\n /**\n * Cancel an interval previously scheduled with setInterval.\n *\n * @param id - The timer ID returned by setInterval\n *\n * @example\n * const id = setInterval(() => {}, 1000);\n * clearInterval(id);\n */\n function clearInterval(id: number | undefined): void;\n}\n`;\n\n/**\n * Playwright types for isolated-vm.\n *\n * These types define the globals injected by setupPlaywright() into an isolated-vm context.\n * Playwright brings 3 globals: page, context, and browser.\n */\nexport const PLAYWRIGHT_TYPES = `\n/**\n * Locator represents an element or group of elements in the page.\n */\ndeclare class Locator {\n /** Click the element */\n click(): Promise<void>;\n /** Double-click the element */\n dblclick(): Promise<void>;\n /** Fill an input element with text */\n fill(text: string): Promise<void>;\n /** Type text into an element (key by key) */\n type(text: string): Promise<void>;\n /** Check a checkbox or radio */\n check(): Promise<void>;\n /** Uncheck a checkbox */\n uncheck(): Promise<void>;\n /** Select an option in a dropdown */\n selectOption(value: string | string[]): Promise<void>;\n /** Clear an input element */\n clear(): Promise<void>;\n /** Press a key */\n press(key: string): Promise<void>;\n /** Hover over the element */\n hover(): Promise<void>;\n /** Focus the element */\n focus(): Promise<void>;\n /** Get text content of the element */\n textContent(): Promise<string | null>;\n /** Get the value of an input element */\n inputValue(): Promise<string>;\n /** Check if the element is visible */\n isVisible(): Promise<boolean>;\n /** Check if the element is enabled */\n isEnabled(): Promise<boolean>;\n /** Check if the element is checked */\n isChecked(): Promise<boolean>;\n /** Check if the element is disabled */\n isDisabled(): Promise<boolean>;\n /** Check if the element is hidden */\n isHidden(): Promise<boolean>;\n /** Get the count of matching elements */\n count(): Promise<number>;\n /** Get an attribute value */\n getAttribute(name: string): Promise<string | null>;\n /** Get innerHTML */\n innerHTML(): Promise<string>;\n /** Get innerText */\n innerText(): Promise<string>;\n /** Get all text contents */\n allTextContents(): Promise<string[]>;\n /** Get all inner texts */\n allInnerTexts(): Promise<string[]>;\n /** Wait for the element to match a state */\n waitFor(options?: { state?: \"attached\" | \"detached\" | \"visible\" | \"hidden\"; timeout?: number }): Promise<void>;\n /** Get bounding box */\n boundingBox(): Promise<{ x: number; y: number; width: number; height: number } | null>;\n /** Set input files for a file input */\n setInputFiles(files: string | string[] | { name: string; mimeType: string; buffer: ArrayBuffer | Uint8Array | string }[]): Promise<void>;\n /** Take a screenshot of the element */\n screenshot(options?: { path?: string; type?: \"png\" | \"jpeg\"; quality?: number }): Promise<string>;\n /** Drag to another element */\n dragTo(target: Locator): Promise<void>;\n /** Scroll element into view */\n scrollIntoViewIfNeeded(): Promise<void>;\n /** Highlight the element for debugging */\n highlight(): Promise<void>;\n /** Evaluate a function in the context of the element */\n evaluate<R>(fn: (el: Element, arg?: unknown) => R, arg?: unknown): Promise<R>;\n /** Evaluate a function for all matching elements */\n evaluateAll<R>(fn: (els: Element[], arg?: unknown) => R, arg?: unknown): Promise<R>;\n\n // Chaining methods\n /** Chain with another CSS selector */\n locator(selector: string): Locator;\n /** Chain with getByRole */\n getByRole(role: string, options?: { name?: string | RegExp; exact?: boolean }): Locator;\n /** Chain with getByText */\n getByText(text: string | RegExp): Locator;\n /** Chain with getByLabel */\n getByLabel(label: string | RegExp): Locator;\n /** Chain with getByPlaceholder */\n getByPlaceholder(placeholder: string | RegExp): Locator;\n /** Chain with getByTestId */\n getByTestId(testId: string): Locator;\n /** Chain with getByAltText */\n getByAltText(alt: string | RegExp): Locator;\n /** Chain with getByTitle */\n getByTitle(title: string | RegExp): Locator;\n\n // Subset selection\n /** Get all matching locators as an array */\n all(): Promise<Locator[]>;\n /** Get the nth matching element */\n nth(index: number): Locator;\n /** Get the first matching element */\n first(): Locator;\n /** Get the last matching element */\n last(): Locator;\n\n // Filtering\n /** Filter locators by additional criteria */\n filter(options: { hasText?: string | RegExp; hasNotText?: string | RegExp; has?: Locator; hasNot?: Locator }): Locator;\n /** Create a locator matching either this or the other locator */\n or(other: Locator): Locator;\n /** Create a locator matching both this and the other locator */\n and(other: Locator): Locator;\n}\n\n/**\n * FrameLocator for interacting with elements inside iframes.\n */\ninterface FrameLocator {\n locator(selector: string): Locator;\n getByRole(role: string, options?: { name?: string | RegExp; exact?: boolean }): Locator;\n getByText(text: string | RegExp): Locator;\n getByLabel(label: string | RegExp): Locator;\n getByPlaceholder(placeholder: string | RegExp): Locator;\n getByTestId(testId: string): Locator;\n getByAltText(alt: string | RegExp): Locator;\n getByTitle(title: string | RegExp): Locator;\n}\n\n/**\n * Keyboard API for simulating keyboard input.\n */\ninterface Keyboard {\n type(text: string, options?: { delay?: number }): Promise<void>;\n press(key: string, options?: { delay?: number }): Promise<void>;\n down(key: string): Promise<void>;\n up(key: string): Promise<void>;\n insertText(text: string): Promise<void>;\n}\n\n/**\n * Mouse API for simulating mouse input.\n */\ninterface Mouse {\n move(x: number, y: number, options?: { steps?: number }): Promise<void>;\n click(x: number, y: number, options?: { button?: \"left\" | \"right\" | \"middle\"; clickCount?: number; delay?: number }): Promise<void>;\n down(options?: { button?: \"left\" | \"right\" | \"middle\"; clickCount?: number }): Promise<void>;\n up(options?: { button?: \"left\" | \"right\" | \"middle\"; clickCount?: number }): Promise<void>;\n wheel(deltaX: number, deltaY: number): Promise<void>;\n}\n\n/**\n * API Response from page.request methods.\n */\ninterface APIResponse {\n status(): number;\n ok(): boolean;\n headers(): Record<string, string>;\n json(): Promise<unknown>;\n text(): Promise<string>;\n body(): Promise<ArrayBuffer>;\n}\n\n/**\n * Request API for making HTTP requests with page cookies.\n */\ninterface APIRequestContext {\n fetch(url: string, options?: { method?: string; data?: unknown; headers?: Record<string, string> }): Promise<APIResponse>;\n get(url: string, options?: { headers?: Record<string, string> }): Promise<APIResponse>;\n post(url: string, options?: { data?: unknown; headers?: Record<string, string> }): Promise<APIResponse>;\n put(url: string, options?: { data?: unknown; headers?: Record<string, string> }): Promise<APIResponse>;\n delete(url: string, options?: { headers?: Record<string, string> }): Promise<APIResponse>;\n}\n\n/**\n * Frame information.\n */\ninterface FrameInfo {\n name: string;\n url: string;\n}\n\n/**\n * Cookie data.\n */\ninterface Cookie {\n name: string;\n value: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n}\n\n/**\n * IsolatePage - represents a browser page in the isolate.\n */\ndeclare class IsolatePage {\n /** Navigate to a URL */\n goto(url: string, options?: { waitUntil?: \"load\" | \"domcontentloaded\" | \"networkidle\" }): Promise<void>;\n /** Reload the page */\n reload(): Promise<void>;\n /** Get the current URL (synchronous) */\n url(): string;\n /** Get the page title */\n title(): Promise<string>;\n /** Get the page HTML content */\n content(): Promise<string>;\n /** Wait for a selector to appear */\n waitForSelector(selector: string, options?: { state?: \"attached\" | \"detached\" | \"visible\" | \"hidden\"; timeout?: number }): Promise<void>;\n /** Wait for a specified time */\n waitForTimeout(ms: number): Promise<void>;\n /** Wait for a load state */\n waitForLoadState(state?: \"load\" | \"domcontentloaded\" | \"networkidle\"): Promise<void>;\n /** Wait for the URL to match */\n waitForURL(url: string | RegExp, options?: { timeout?: number; waitUntil?: \"load\" | \"domcontentloaded\" | \"networkidle\" }): Promise<void>;\n /** Evaluate JavaScript in the browser context */\n evaluate<R>(script: string | (() => R) | ((arg: unknown) => R), arg?: unknown): Promise<R>;\n /** Create a locator by CSS selector */\n locator(selector: string): Locator;\n /** Create a locator by ARIA role */\n getByRole(role: string, options?: { name?: string | RegExp; exact?: boolean }): Locator;\n /** Create a locator by text content */\n getByText(text: string | RegExp): Locator;\n /** Create a locator by label */\n getByLabel(label: string | RegExp): Locator;\n /** Create a locator by placeholder */\n getByPlaceholder(placeholder: string | RegExp): Locator;\n /** Create a locator by test ID */\n getByTestId(testId: string): Locator;\n /** Create a locator by alt text */\n getByAltText(alt: string | RegExp): Locator;\n /** Create a locator by title */\n getByTitle(title: string | RegExp): Locator;\n /** Create a frame locator */\n frameLocator(selector: string): FrameLocator;\n /** Navigate back */\n goBack(options?: { waitUntil?: \"load\" | \"domcontentloaded\" | \"networkidle\" }): Promise<void>;\n /** Navigate forward */\n goForward(options?: { waitUntil?: \"load\" | \"domcontentloaded\" | \"networkidle\" }): Promise<void>;\n /** Click an element (shorthand) */\n click(selector: string): Promise<void>;\n /** Fill an input (shorthand) */\n fill(selector: string, value: string): Promise<void>;\n /** Take a screenshot */\n screenshot(options?: { path?: string; fullPage?: boolean; type?: \"png\" | \"jpeg\"; quality?: number }): Promise<string>;\n /** Generate a PDF (Chromium only) */\n pdf(options?: { path?: string; format?: string; landscape?: boolean; margin?: { top?: string; bottom?: string; left?: string; right?: string } }): Promise<string>;\n /** Set the viewport size */\n setViewportSize(size: { width: number; height: number }): Promise<void>;\n /** Get the viewport size */\n viewportSize(): Promise<{ width: number; height: number } | null>;\n /** Emulate media type or color scheme */\n emulateMedia(options: { media?: \"screen\" | \"print\" | null; colorScheme?: \"light\" | \"dark\" | \"no-preference\" | null }): Promise<void>;\n /** Set extra HTTP headers */\n setExtraHTTPHeaders(headers: Record<string, string>): Promise<void>;\n /** Bring the page to front */\n bringToFront(): Promise<void>;\n /** Close the page */\n close(): Promise<void>;\n /** Check if the page is closed */\n isClosed(): Promise<boolean>;\n /** Pause execution (for debugging) */\n pause(): Promise<void>;\n /** Get all frames */\n frames(): Promise<FrameInfo[]>;\n /** Get the main frame */\n mainFrame(): Promise<FrameInfo>;\n /** Get the browser context for this page */\n context(): IsolateContext;\n /** Keyboard API */\n readonly keyboard: Keyboard;\n /** Mouse API */\n readonly mouse: Mouse;\n /** Request API for making HTTP requests */\n readonly request: APIRequestContext;\n}\n\n/**\n * IsolateContext - represents a browser context in the isolate.\n */\ndeclare class IsolateContext {\n /** Create a new page in this context (requires createPage callback) */\n newPage(): Promise<IsolatePage>;\n /** Close this context and all its pages */\n close(): Promise<void>;\n /** Clear all cookies */\n clearCookies(): Promise<void>;\n /** Add cookies */\n addCookies(cookies: Cookie[]): Promise<void>;\n /** Get cookies */\n cookies(urls?: string | string[]): Promise<Cookie[]>;\n}\n\n/**\n * Browser object for creating new contexts.\n */\ninterface IsolateBrowser {\n /** Create a new browser context (requires createContext callback) */\n newContext(options?: {\n viewport?: { width: number; height: number } | null;\n userAgent?: string;\n locale?: string;\n timezoneId?: string;\n geolocation?: { latitude: number; longitude: number; accuracy?: number };\n permissions?: string[];\n colorScheme?: \"light\" | \"dark\" | \"no-preference\";\n }): Promise<IsolateContext>;\n}\n\n/**\n * The default page object.\n */\ndeclare const page: IsolatePage;\n\n/**\n * The default browser context.\n */\ndeclare const context: IsolateContext;\n\n/**\n * Browser object for creating new contexts.\n */\ndeclare const browser: IsolateBrowser;\n\n// ============================================================================\n// Playwright Expect Matchers (extends test-environment expect)\n// ============================================================================\n\n/**\n * Options for locator assertion timeouts.\n */\ninterface LocatorAssertionOptions {\n timeout?: number;\n}\n\n/**\n * Locator-specific assertion matchers (added to expect when using Playwright).\n * These are available when calling expect(locator).\n */\ninterface PlaywrightLocatorMatchers {\n /** Assert element is visible */\n toBeVisible(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is hidden */\n toBeHidden(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is enabled */\n toBeEnabled(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is disabled */\n toBeDisabled(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is checked */\n toBeChecked(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is focused */\n toBeFocused(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is empty */\n toBeEmpty(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is attached to DOM */\n toBeAttached(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is editable */\n toBeEditable(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element is in viewport */\n toBeInViewport(options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element contains text */\n toContainText(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has exact text */\n toHaveText(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has value (for inputs) */\n toHaveValue(expected: string, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has attribute */\n toHaveAttribute(name: string, value?: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element count */\n toHaveCount(count: number, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has class */\n toHaveClass(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element contains class */\n toContainClass(expected: string, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has id */\n toHaveId(expected: string, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has CSS property */\n toHaveCSS(name: string, value: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has JavaScript property */\n toHaveJSProperty(name: string, value: unknown, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has accessible name */\n toHaveAccessibleName(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has accessible description */\n toHaveAccessibleDescription(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert element has ARIA role */\n toHaveRole(expected: string, options?: LocatorAssertionOptions): Promise<void>;\n /** Negated matchers */\n not: PlaywrightLocatorMatchers;\n}\n\n/**\n * Page-specific assertion matchers (added to expect when using Playwright).\n * These are available when calling expect(page).\n */\ninterface PlaywrightPageMatchers {\n /** Assert page has URL */\n toHaveURL(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Assert page has title */\n toHaveTitle(expected: string | RegExp, options?: LocatorAssertionOptions): Promise<void>;\n /** Negated matchers */\n not: PlaywrightPageMatchers;\n}\n`;\n\n/**\n * Map of package names to their type definitions.\n */\nexport const TYPE_DEFINITIONS = {\n core: CORE_TYPES,\n console: CONSOLE_TYPES,\n crypto: CRYPTO_TYPES,\n encoding: ENCODING_TYPES,\n fetch: FETCH_TYPES,\n fs: FS_TYPES,\n path: PATH_TYPES,\n testEnvironment: TEST_ENV_TYPES,\n timers: TIMERS_TYPES,\n playwright: PLAYWRIGHT_TYPES,\n} as const;\n\n/**\n * Type for the keys of TYPE_DEFINITIONS.\n */\nexport type TypeDefinitionKey = keyof typeof TYPE_DEFINITIONS;\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuGnB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkRpB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2TjB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+RvB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0ItB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCvB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwSrB,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6MnB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqFrB,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,QAAQ;AACV;",
8
- "debugId": "5A2BD610E49AE2D964756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuGnB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2fpB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2TjB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+RvB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0ItB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuMvB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwSrB,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6MnB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwFrB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoZzB,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,YAAY;AACd;",
8
+ "debugId": "86F16192ABAB885164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate-types",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "type": "commonjs"
5
5
  }
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/typecheck.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Type-checking utility for isolated-vm user code using ts-morph.\n *\n * This utility allows you to validate TypeScript code strings against\n * the isolate global type definitions before running them in the sandbox.\n *\n * @example\n * import { typecheckIsolateCode } from \"@ricsam/isolate-types\";\n *\n * const result = typecheckIsolateCode(`\n * serve({\n * fetch(request, server) {\n * return new Response(\"Hello!\");\n * }\n * });\n * `, { include: [\"fetch\"] });\n *\n * if (!result.success) {\n * console.error(\"Type errors:\", result.errors);\n * }\n */\n\nimport { Project, ts } from \"ts-morph\";\nimport { TYPE_DEFINITIONS, type TypeDefinitionKey } from \"./isolate-types.cjs\";\n\n/**\n * Result of type-checking isolate code.\n */\nexport interface TypecheckResult {\n /**\n * Whether the code passed type checking.\n */\n success: boolean;\n\n /**\n * Array of type errors found in the code.\n */\n errors: TypecheckError[];\n}\n\n/**\n * A single type-checking error.\n */\nexport interface TypecheckError {\n /**\n * The error message from TypeScript.\n */\n message: string;\n\n /**\n * The line number where the error occurred (1-indexed).\n */\n line?: number;\n\n /**\n * The column number where the error occurred (1-indexed).\n */\n column?: number;\n\n /**\n * The TypeScript error code.\n */\n code?: number;\n}\n\n/**\n * A single library type file to inject into the virtual file system.\n */\nexport interface LibraryTypeFile {\n /** The file content (e.g., .d.ts or package.json content) */\n content: string;\n /** The virtual path (e.g., \"node_modules/zod/index.d.ts\") */\n path: string;\n}\n\n/**\n * Library types bundle for a single package.\n */\nexport interface LibraryTypes {\n files: LibraryTypeFile[];\n}\n\n/**\n * Options for type-checking isolate code.\n */\nexport interface TypecheckOptions {\n /**\n * Which isolate global types to include.\n * @default [\"core\", \"fetch\", \"fs\"]\n */\n include?: Array<\"core\" | \"fetch\" | \"fs\" | \"console\" | \"encoding\" | \"timers\" | \"testEnvironment\">;\n\n /**\n * Library type definitions to inject for import resolution.\n * These are added to the virtual node_modules/ for module resolution.\n *\n * Use the build-library-types.ts script to generate these bundles from\n * your project's node_modules, then pass them here.\n *\n * @example\n * import { LIBRARY_TYPES } from \"./my-library-types.cjs\";\n *\n * typecheckIsolateCode(code, {\n * libraryTypes: {\n * zod: LIBRARY_TYPES.zod,\n * \"@richie-rpc/core\": LIBRARY_TYPES[\"@richie-rpc/core\"],\n * }\n * });\n */\n libraryTypes?: Record<string, LibraryTypes>;\n\n /**\n * Additional compiler options to pass to TypeScript.\n */\n compilerOptions?: Partial<ts.CompilerOptions>;\n}\n\n/**\n * Get the message text from a TypeScript diagnostic message.\n * Handles both string messages and DiagnosticMessageChain objects.\n */\nfunction getMessageText(messageText: unknown): string {\n if (typeof messageText === \"string\") {\n return messageText;\n }\n\n // Handle ts-morph DiagnosticMessageChain wrapper\n if (\n messageText &&\n typeof messageText === \"object\" &&\n \"getMessageText\" in messageText &&\n typeof (messageText as { getMessageText: unknown }).getMessageText ===\n \"function\"\n ) {\n return (messageText as { getMessageText: () => string }).getMessageText();\n }\n\n // Handle raw TypeScript DiagnosticMessageChain\n if (\n messageText &&\n typeof messageText === \"object\" &&\n \"messageText\" in messageText\n ) {\n return String((messageText as { messageText: unknown }).messageText);\n }\n\n return String(messageText);\n}\n\n\n/**\n * Type-check isolate user code against the package type definitions.\n *\n * @param code - The TypeScript/JavaScript code to check\n * @param options - Configuration options\n * @returns The result of type checking\n *\n * @example\n * // Check code that uses the fetch API\n * const result = typecheckIsolateCode(`\n * const response = await fetch(\"https://api.example.com/data\");\n * const data = await response.json();\n * `, { include: [\"core\", \"fetch\"] });\n *\n * @example\n * // Check code that uses serve()\n * const result = typecheckIsolateCode(`\n * serve({\n * fetch(request, server) {\n * return new Response(\"Hello!\");\n * }\n * });\n * `, { include: [\"fetch\"] });\n *\n * @example\n * // Check code that uses the file system API\n * const result = typecheckIsolateCode(`\n * const root = await getDirectory(\"/data\");\n * const file = await root.getFileHandle(\"config.json\");\n * `, { include: [\"core\", \"fs\"] });\n */\nexport function typecheckIsolateCode(\n code: string,\n options?: TypecheckOptions\n): TypecheckResult {\n const include = options?.include ?? [\"core\", \"fetch\", \"fs\"];\n const libraryTypes = options?.libraryTypes ?? {};\n const hasLibraries = Object.keys(libraryTypes).length > 0;\n\n // Create a project with in-memory file system\n const project = new Project({\n useInMemoryFileSystem: true,\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n // Use NodeJs resolution for node_modules/ lookup when libraries are included\n moduleResolution: hasLibraries\n ? ts.ModuleResolutionKind.NodeJs\n : undefined,\n lib: [\"lib.esnext.d.ts\", \"lib.dom.d.ts\"],\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n ...options?.compilerOptions,\n },\n });\n\n const memFs = project.getFileSystem();\n\n // Add type definition files from embedded strings (isolate globals)\n for (const pkg of include) {\n const content = TYPE_DEFINITIONS[pkg as TypeDefinitionKey];\n if (content) {\n project.createSourceFile(`${pkg}.d.ts`, content);\n }\n }\n\n // Add library type definitions to virtual node_modules/\n for (const [_libName, lib] of Object.entries(libraryTypes)) {\n for (const typeFile of lib.files) {\n // JSON files go to file system, TS files as source files\n if (typeFile.path.endsWith(\".json\")) {\n memFs.writeFileSync(`/${typeFile.path}`, typeFile.content);\n } else {\n project.createSourceFile(`/${typeFile.path}`, typeFile.content, { overwrite: true });\n }\n }\n }\n\n // Add the user code\n const sourceFile = project.createSourceFile(\"usercode.ts\", code);\n\n // Get diagnostics\n const diagnostics = sourceFile.getPreEmitDiagnostics();\n\n // Convert diagnostics to our error format\n const errors: TypecheckError[] = diagnostics.map((diagnostic) => {\n const start = diagnostic.getStart();\n const sourceFile = diagnostic.getSourceFile();\n\n let line: number | undefined;\n let column: number | undefined;\n\n if (start !== undefined && sourceFile) {\n const lineAndChar = sourceFile.getLineAndColumnAtPos(start);\n line = lineAndChar.line;\n column = lineAndChar.column;\n }\n\n return {\n message: getMessageText(diagnostic.getMessageText()),\n line,\n column,\n code: diagnostic.getCode(),\n };\n });\n\n return {\n success: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Format type-check errors for display.\n *\n * @param result - The type-check result\n * @returns A formatted string of errors\n *\n * @example\n * const result = typecheckIsolateCode(code);\n * if (!result.success) {\n * console.error(formatTypecheckErrors(result));\n * }\n */\nexport function formatTypecheckErrors(result: TypecheckResult): string {\n if (result.success) {\n return \"No type errors found.\";\n }\n\n return result.errors\n .map((error) => {\n const location =\n error.line !== undefined ? `:${error.line}:${error.column ?? 1}` : \"\";\n const code = error.code ? ` (TS${error.code})` : \"\";\n return `usercode.ts${location}${code}: ${error.message}`;\n })\n .join(\"\\n\");\n}\n"
5
+ "/**\n * Type-checking utility for isolated-vm user code using ts-morph.\n *\n * This utility allows you to validate TypeScript code strings against\n * the isolate global type definitions before running them in the sandbox.\n *\n * @example\n * import { typecheckIsolateCode } from \"@ricsam/isolate-types\";\n *\n * const result = typecheckIsolateCode(`\n * serve({\n * fetch(request, server) {\n * return new Response(\"Hello!\");\n * }\n * });\n * `, { include: [\"fetch\"] });\n *\n * if (!result.success) {\n * console.error(\"Type errors:\", result.errors);\n * }\n */\n\nimport { Project, ts } from \"ts-morph\";\nimport { TYPE_DEFINITIONS, type TypeDefinitionKey } from \"./isolate-types.cjs\";\n\n/**\n * Result of type-checking isolate code.\n */\nexport interface TypecheckResult {\n /**\n * Whether the code passed type checking.\n */\n success: boolean;\n\n /**\n * Array of type errors found in the code.\n */\n errors: TypecheckError[];\n}\n\n/**\n * A single type-checking error.\n */\nexport interface TypecheckError {\n /**\n * The error message from TypeScript.\n */\n message: string;\n\n /**\n * The line number where the error occurred (1-indexed).\n */\n line?: number;\n\n /**\n * The column number where the error occurred (1-indexed).\n */\n column?: number;\n\n /**\n * The TypeScript error code.\n */\n code?: number;\n}\n\n/**\n * A single library type file to inject into the virtual file system.\n */\nexport interface LibraryTypeFile {\n /** The file content (e.g., .d.ts or package.json content) */\n content: string;\n /** The virtual path (e.g., \"node_modules/zod/index.d.ts\") */\n path: string;\n}\n\n/**\n * Library types bundle for a single package.\n */\nexport interface LibraryTypes {\n files: LibraryTypeFile[];\n}\n\n/**\n * Options for type-checking isolate code.\n */\nexport interface TypecheckOptions {\n /**\n * Which isolate global types to include.\n * @default [\"core\", \"fetch\", \"fs\"]\n */\n include?: Array<\"core\" | \"fetch\" | \"fs\" | \"console\" | \"encoding\" | \"timers\" | \"testEnvironment\" | \"playwright\">;\n\n /**\n * Library type definitions to inject for import resolution.\n * These are added to the virtual node_modules/ for module resolution.\n *\n * Use the build-library-types.ts script to generate these bundles from\n * your project's node_modules, then pass them here.\n *\n * @example\n * import { LIBRARY_TYPES } from \"./my-library-types.cjs\";\n *\n * typecheckIsolateCode(code, {\n * libraryTypes: {\n * zod: LIBRARY_TYPES.zod,\n * \"@richie-rpc/core\": LIBRARY_TYPES[\"@richie-rpc/core\"],\n * }\n * });\n */\n libraryTypes?: Record<string, LibraryTypes>;\n\n /**\n * Additional compiler options to pass to TypeScript.\n */\n compilerOptions?: Partial<ts.CompilerOptions>;\n}\n\n/**\n * Get the message text from a TypeScript diagnostic message.\n * Handles both string messages and DiagnosticMessageChain objects.\n */\nfunction getMessageText(messageText: unknown): string {\n if (typeof messageText === \"string\") {\n return messageText;\n }\n\n // Handle ts-morph DiagnosticMessageChain wrapper\n if (\n messageText &&\n typeof messageText === \"object\" &&\n \"getMessageText\" in messageText &&\n typeof (messageText as { getMessageText: unknown }).getMessageText ===\n \"function\"\n ) {\n return (messageText as { getMessageText: () => string }).getMessageText();\n }\n\n // Handle raw TypeScript DiagnosticMessageChain\n if (\n messageText &&\n typeof messageText === \"object\" &&\n \"messageText\" in messageText\n ) {\n return String((messageText as { messageText: unknown }).messageText);\n }\n\n return String(messageText);\n}\n\n\n/**\n * Type-check isolate user code against the package type definitions.\n *\n * @param code - The TypeScript/JavaScript code to check\n * @param options - Configuration options\n * @returns The result of type checking\n *\n * @example\n * // Check code that uses the fetch API\n * const result = typecheckIsolateCode(`\n * const response = await fetch(\"https://api.example.com/data\");\n * const data = await response.json();\n * `, { include: [\"core\", \"fetch\"] });\n *\n * @example\n * // Check code that uses serve()\n * const result = typecheckIsolateCode(`\n * serve({\n * fetch(request, server) {\n * return new Response(\"Hello!\");\n * }\n * });\n * `, { include: [\"fetch\"] });\n *\n * @example\n * // Check code that uses the file system API\n * const result = typecheckIsolateCode(`\n * const root = await getDirectory(\"/data\");\n * const file = await root.getFileHandle(\"config.json\");\n * `, { include: [\"core\", \"fs\"] });\n */\nexport function typecheckIsolateCode(\n code: string,\n options?: TypecheckOptions\n): TypecheckResult {\n const include = options?.include ?? [\"core\", \"fetch\", \"fs\"];\n const libraryTypes = options?.libraryTypes ?? {};\n const hasLibraries = Object.keys(libraryTypes).length > 0;\n\n // Create a project with in-memory file system\n const project = new Project({\n useInMemoryFileSystem: true,\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n // Use NodeJs resolution for node_modules/ lookup when libraries are included\n moduleResolution: hasLibraries\n ? ts.ModuleResolutionKind.NodeJs\n : undefined,\n lib: [\"lib.esnext.d.ts\", \"lib.dom.d.ts\"],\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n ...options?.compilerOptions,\n },\n });\n\n const memFs = project.getFileSystem();\n\n // Add type definition files from embedded strings (isolate globals)\n for (const pkg of include) {\n const content = TYPE_DEFINITIONS[pkg as TypeDefinitionKey];\n if (content) {\n project.createSourceFile(`${pkg}.d.ts`, content);\n }\n }\n\n // Add library type definitions to virtual node_modules/\n for (const [_libName, lib] of Object.entries(libraryTypes)) {\n for (const typeFile of lib.files) {\n // JSON files go to file system, TS files as source files\n if (typeFile.path.endsWith(\".json\")) {\n memFs.writeFileSync(`/${typeFile.path}`, typeFile.content);\n } else {\n project.createSourceFile(`/${typeFile.path}`, typeFile.content, { overwrite: true });\n }\n }\n }\n\n // Add the user code\n const sourceFile = project.createSourceFile(\"usercode.ts\", code);\n\n // Get diagnostics\n const diagnostics = sourceFile.getPreEmitDiagnostics();\n\n // Convert diagnostics to our error format\n const errors: TypecheckError[] = diagnostics.map((diagnostic) => {\n const start = diagnostic.getStart();\n const sourceFile = diagnostic.getSourceFile();\n\n let line: number | undefined;\n let column: number | undefined;\n\n if (start !== undefined && sourceFile) {\n const lineAndChar = sourceFile.getLineAndColumnAtPos(start);\n line = lineAndChar.line;\n column = lineAndChar.column;\n }\n\n return {\n message: getMessageText(diagnostic.getMessageText()),\n line,\n column,\n code: diagnostic.getCode(),\n };\n });\n\n return {\n success: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Format type-check errors for display.\n *\n * @param result - The type-check result\n * @returns A formatted string of errors\n *\n * @example\n * const result = typecheckIsolateCode(code);\n * if (!result.success) {\n * console.error(formatTypecheckErrors(result));\n * }\n */\nexport function formatTypecheckErrors(result: TypecheckResult): string {\n if (result.success) {\n return \"No type errors found.\";\n }\n\n return result.errors\n .map((error) => {\n const location =\n error.line !== undefined ? `:${error.line}:${error.column ?? 1}` : \"\";\n const code = error.code ? ` (TS${error.code})` : \"\";\n return `usercode.ts${location}${code}: ${error.message}`;\n })\n .join(\"\\n\");\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsB4B,IAA5B;AACyD,IAAzD;AAkGA,SAAS,cAAc,CAAC,aAA8B;AAAA,EACpD,IAAI,OAAO,gBAAgB,UAAU;AAAA,IACnC,OAAO;AAAA,EACT;AAAA,EAGA,IACE,eACA,OAAO,gBAAgB,YACvB,oBAAoB,eACpB,OAAQ,YAA4C,mBAClD,YACF;AAAA,IACA,OAAQ,YAAiD,eAAe;AAAA,EAC1E;AAAA,EAGA,IACE,eACA,OAAO,gBAAgB,YACvB,iBAAiB,aACjB;AAAA,IACA,OAAO,OAAQ,YAAyC,WAAW;AAAA,EACrE;AAAA,EAEA,OAAO,OAAO,WAAW;AAAA;AAmCpB,SAAS,oBAAoB,CAClC,MACA,SACiB;AAAA,EACjB,MAAM,UAAU,SAAS,WAAW,CAAC,QAAQ,SAAS,IAAI;AAAA,EAC1D,MAAM,eAAe,SAAS,gBAAgB,CAAC;AAAA,EAC/C,MAAM,eAAe,OAAO,KAAK,YAAY,EAAE,SAAS;AAAA,EAGxD,MAAM,UAAU,IAAI,wBAAQ;AAAA,IAC1B,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,MACf,QAAQ,mBAAG,aAAa;AAAA,MACxB,QAAQ,mBAAG,WAAW;AAAA,MAEtB,kBAAkB,eACd,mBAAG,qBAAqB,SACxB;AAAA,MACJ,KAAK,CAAC,mBAAmB,cAAc;AAAA,MACvC,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,8BAA8B;AAAA,SAC3B,SAAS;AAAA,IACd;AAAA,EACF,CAAC;AAAA,EAED,MAAM,QAAQ,QAAQ,cAAc;AAAA,EAGpC,WAAW,OAAO,SAAS;AAAA,IACzB,MAAM,UAAU,sCAAiB;AAAA,IACjC,IAAI,SAAS;AAAA,MACX,QAAQ,iBAAiB,GAAG,YAAY,OAAO;AAAA,IACjD;AAAA,EACF;AAAA,EAGA,YAAY,UAAU,QAAQ,OAAO,QAAQ,YAAY,GAAG;AAAA,IAC1D,WAAW,YAAY,IAAI,OAAO;AAAA,MAEhC,IAAI,SAAS,KAAK,SAAS,OAAO,GAAG;AAAA,QACnC,MAAM,cAAc,IAAI,SAAS,QAAQ,SAAS,OAAO;AAAA,MAC3D,EAAO;AAAA,QACL,QAAQ,iBAAiB,IAAI,SAAS,QAAQ,SAAS,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA;AAAA,IAEvF;AAAA,EACF;AAAA,EAGA,MAAM,aAAa,QAAQ,iBAAiB,eAAe,IAAI;AAAA,EAG/D,MAAM,cAAc,WAAW,sBAAsB;AAAA,EAGrD,MAAM,SAA2B,YAAY,IAAI,CAAC,eAAe;AAAA,IAC/D,MAAM,QAAQ,WAAW,SAAS;AAAA,IAClC,MAAM,cAAa,WAAW,cAAc;AAAA,IAE5C,IAAI;AAAA,IACJ,IAAI;AAAA,IAEJ,IAAI,UAAU,aAAa,aAAY;AAAA,MACrC,MAAM,cAAc,YAAW,sBAAsB,KAAK;AAAA,MAC1D,OAAO,YAAY;AAAA,MACnB,SAAS,YAAY;AAAA,IACvB;AAAA,IAEA,OAAO;AAAA,MACL,SAAS,eAAe,WAAW,eAAe,CAAC;AAAA,MACnD;AAAA,MACA;AAAA,MACA,MAAM,WAAW,QAAQ;AAAA,IAC3B;AAAA,GACD;AAAA,EAED,OAAO;AAAA,IACL,SAAS,OAAO,WAAW;AAAA,IAC3B;AAAA,EACF;AAAA;AAeK,SAAS,qBAAqB,CAAC,QAAiC;AAAA,EACrE,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAO,OACX,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,WACJ,MAAM,SAAS,YAAY,IAAI,MAAM,QAAQ,MAAM,UAAU,MAAM;AAAA,IACrE,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,UAAU;AAAA,IACjD,OAAO,cAAc,WAAW,SAAS,MAAM;AAAA,GAChD,EACA,KAAK;AAAA,CAAI;AAAA;",
8
8
  "debugId": "7A9839367703654F64756E2164756E21",
@@ -9,6 +9,7 @@ import {
9
9
  PATH_TYPES,
10
10
  TEST_ENV_TYPES,
11
11
  TIMERS_TYPES,
12
+ PLAYWRIGHT_TYPES,
12
13
  TYPE_DEFINITIONS
13
14
  } from "./isolate-types.mjs";
14
15
  import {
@@ -21,6 +22,7 @@ export {
21
22
  TYPE_DEFINITIONS,
22
23
  TIMERS_TYPES,
23
24
  TEST_ENV_TYPES,
25
+ PLAYWRIGHT_TYPES,
24
26
  PATH_TYPES,
25
27
  FS_TYPES,
26
28
  FETCH_TYPES,
@@ -30,4 +32,4 @@ export {
30
32
  CONSOLE_TYPES
31
33
  };
32
34
 
33
- //# debugId=2F34907203719A5964756E2164756E21
35
+ //# debugId=B3A641E8622ADFEA64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * @ricsam/isolate-types\n *\n * Type definitions and type-checking utilities for isolated-vm V8 sandbox code.\n */\n\n// Re-export type definitions\nexport {\n CORE_TYPES,\n CONSOLE_TYPES,\n CRYPTO_TYPES,\n ENCODING_TYPES,\n FETCH_TYPES,\n FS_TYPES,\n PATH_TYPES,\n TEST_ENV_TYPES,\n TIMERS_TYPES,\n TYPE_DEFINITIONS,\n type TypeDefinitionKey,\n} from \"./isolate-types.mjs\";\n\n// Re-export typecheck utilities\nexport {\n typecheckIsolateCode,\n formatTypecheckErrors,\n type TypecheckResult,\n type TypecheckError,\n type TypecheckOptions,\n type LibraryTypes,\n type LibraryTypeFile,\n} from \"./typecheck.mjs\";\n"
5
+ "/**\n * @ricsam/isolate-types\n *\n * Type definitions and type-checking utilities for isolated-vm V8 sandbox code.\n */\n\n// Re-export type definitions\nexport {\n CORE_TYPES,\n CONSOLE_TYPES,\n CRYPTO_TYPES,\n ENCODING_TYPES,\n FETCH_TYPES,\n FS_TYPES,\n PATH_TYPES,\n TEST_ENV_TYPES,\n TIMERS_TYPES,\n PLAYWRIGHT_TYPES,\n TYPE_DEFINITIONS,\n type TypeDefinitionKey,\n} from \"./isolate-types.mjs\";\n\n// Re-export typecheck utilities\nexport {\n typecheckIsolateCode,\n formatTypecheckErrors,\n type TypecheckResult,\n type TypecheckError,\n type TypecheckOptions,\n type LibraryTypes,\n type LibraryTypeFile,\n} from \"./typecheck.mjs\";\n"
6
6
  ],
7
- "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;",
8
- "debugId": "2F34907203719A5964756E2164756E21",
7
+ "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;",
8
+ "debugId": "B3A641E8622ADFEA64756E2164756E21",
9
9
  "names": []
10
10
  }