@ricsam/quickjs-core 0.2.12 → 0.2.14

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/index.ts"],
4
4
  "sourcesContent": [
5
- "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { SetupCoreOptions, CoreHandle, StateMap } from \"./types.cjs\";\nimport { createStateMap } from \"./class-builder.cjs\";\nimport {\n createReadableStreamClass,\n createReadableStreamDefaultReaderClass,\n createReadableStream,\n} from \"./streams/readable-stream.cjs\";\nimport {\n createWritableStreamClass,\n createWritableStreamDefaultWriterClass,\n} from \"./streams/writable-stream.cjs\";\nimport { createTransformStreamClass } from \"./streams/transform-stream.cjs\";\nimport { createBlobClass } from \"./blob.cjs\";\nimport { createFileClass } from \"./file.cjs\";\nimport { createDOMExceptionClass } from \"./dom-exception.cjs\";\nimport { createURLSearchParamsClass } from \"./url-search-params.cjs\";\nimport { createURLClass, addURLSearchParamsGetter } from \"./url.cjs\";\n\n/**\n * Setup core APIs in a QuickJS context\n *\n * Injects the following globals:\n * - ReadableStream, WritableStream, TransformStream\n * - ReadableStreamDefaultReader, WritableStreamDefaultWriter\n * - Blob\n * - File\n * - DOMException\n * - URL, URLSearchParams\n * - TextEncoder, TextDecoder\n *\n * @example\n * const handle = setupCore(context);\n *\n * context.evalCode(`\n * const blob = new Blob([\"hello\", \" \", \"world\"], { type: \"text/plain\" });\n * const text = await blob.text(); // \"hello world\"\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"chunk1\");\n * controller.enqueue(\"chunk2\");\n * controller.close();\n * }\n * });\n * `);\n */\nexport function setupCore(\n context: QuickJSContext,\n options?: SetupCoreOptions\n): CoreHandle {\n const stateMap = options?.stateMap ?? createStateMap();\n const handles: { name: string; handle: QuickJSHandle }[] = [];\n\n // Create ReadableStreamDefaultReader class first\n const ReadableStreamDefaultReader = createReadableStreamDefaultReaderClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"ReadableStreamDefaultReader\",\n ReadableStreamDefaultReader\n );\n ReadableStreamDefaultReader.dispose();\n\n // Create ReadableStream class\n const readerClassRef = context.getProp(context.global, \"ReadableStreamDefaultReader\");\n const ReadableStream = createReadableStreamClass(\n context,\n stateMap,\n readerClassRef\n );\n readerClassRef.dispose();\n context.setProp(context.global, \"ReadableStream\", ReadableStream);\n ReadableStream.dispose();\n\n // Create WritableStreamDefaultWriter class first\n const WritableStreamDefaultWriter = createWritableStreamDefaultWriterClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"WritableStreamDefaultWriter\",\n WritableStreamDefaultWriter\n );\n WritableStreamDefaultWriter.dispose();\n\n // Create WritableStream class\n const writerClassRef = context.getProp(context.global, \"WritableStreamDefaultWriter\");\n const WritableStream = createWritableStreamClass(\n context,\n stateMap,\n writerClassRef\n );\n writerClassRef.dispose();\n context.setProp(context.global, \"WritableStream\", WritableStream);\n WritableStream.dispose();\n\n // Create TransformStream class\n const TransformStream = createTransformStreamClass(context, stateMap);\n context.setProp(context.global, \"TransformStream\", TransformStream);\n TransformStream.dispose();\n\n // Create Blob class with stream factory\n const BlobClass = createBlobClass(context, stateMap, (source) =>\n createReadableStream(context, stateMap, source)\n );\n context.setProp(context.global, \"Blob\", BlobClass);\n BlobClass.dispose();\n\n // Create File class (extends Blob)\n const blobClassRef = context.getProp(context.global, \"Blob\");\n const FileClass = createFileClass(context, stateMap, blobClassRef);\n blobClassRef.dispose();\n context.setProp(context.global, \"File\", FileClass);\n FileClass.dispose();\n\n // Create DOMException class\n const DOMExceptionClass = createDOMExceptionClass(context, stateMap);\n context.setProp(context.global, \"DOMException\", DOMExceptionClass);\n DOMExceptionClass.dispose();\n\n // Create URLSearchParams class\n const URLSearchParamsClass = createURLSearchParamsClass(context, stateMap);\n context.setProp(context.global, \"URLSearchParams\", URLSearchParamsClass);\n URLSearchParamsClass.dispose();\n\n // Add Symbol.iterator support for URLSearchParams\n const urlSearchParamsIteratorResult = context.evalCode(`\n URLSearchParams.prototype[Symbol.iterator] = function() {\n return this.entries()[Symbol.iterator]();\n };\n `);\n if (urlSearchParamsIteratorResult.error) {\n urlSearchParamsIteratorResult.error.dispose();\n } else {\n urlSearchParamsIteratorResult.value.dispose();\n }\n\n // Create URL class (depends on URLSearchParams)\n const URLClass = createURLClass(context, stateMap);\n context.setProp(context.global, \"URL\", URLClass);\n URLClass.dispose();\n\n // Add searchParams getter to URL that returns URLSearchParams instance\n addURLSearchParamsGetter(context);\n\n // TextEncoder/TextDecoder - pure JS implementation for UTF-8\n const textEncodingCode = `\n(function() {\n class TextEncoder {\n constructor(encoding = \"utf-8\") {\n if (encoding !== \"utf-8\" && encoding !== \"utf8\") {\n throw new RangeError(\"The encoding label provided is invalid.\");\n }\n this.encoding = \"utf-8\";\n }\n\n encode(input = \"\") {\n const str = String(input);\n const bytes = [];\n\n for (let i = 0; i < str.length; i++) {\n let charCode = str.charCodeAt(i);\n\n if (charCode < 0x80) {\n bytes.push(charCode);\n } else if (charCode < 0x800) {\n bytes.push(0xC0 | (charCode >> 6));\n bytes.push(0x80 | (charCode & 0x3F));\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n const nextCharCode = str.charCodeAt(++i);\n if (nextCharCode >= 0xDC00 && nextCharCode <= 0xDFFF) {\n const codePoint = 0x10000 + ((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00);\n bytes.push(0xF0 | (codePoint >> 18));\n bytes.push(0x80 | ((codePoint >> 12) & 0x3F));\n bytes.push(0x80 | ((codePoint >> 6) & 0x3F));\n bytes.push(0x80 | (codePoint & 0x3F));\n }\n } else if (charCode < 0x10000) {\n bytes.push(0xE0 | (charCode >> 12));\n bytes.push(0x80 | ((charCode >> 6) & 0x3F));\n bytes.push(0x80 | (charCode & 0x3F));\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n encodeInto(source, destination) {\n const encoded = this.encode(source);\n const len = Math.min(encoded.length, destination.length);\n destination.set(encoded.subarray(0, len));\n return { read: source.length, written: len };\n }\n }\n\n class TextDecoder {\n constructor(encoding = \"utf-8\", options = {}) {\n if (encoding !== \"utf-8\" && encoding !== \"utf8\") {\n throw new RangeError(\"The encoding label provided is invalid.\");\n }\n this.encoding = \"utf-8\";\n this.fatal = Boolean(options.fatal);\n this.ignoreBOM = Boolean(options.ignoreBOM);\n }\n\n decode(input, options = {}) {\n if (!input) return \"\";\n\n let bytes;\n if (input instanceof ArrayBuffer) {\n bytes = new Uint8Array(input);\n } else if (ArrayBuffer.isView(input)) {\n bytes = new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n } else if (input instanceof Uint8Array) {\n bytes = input;\n } else {\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n let offset = 0;\n if (!this.ignoreBOM && bytes.length >= 3 &&\n bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {\n offset = 3;\n }\n\n let result = \"\";\n for (let i = offset; i < bytes.length;) {\n const byte1 = bytes[i++];\n\n if (byte1 < 0x80) {\n result += String.fromCharCode(byte1);\n } else if ((byte1 & 0xE0) === 0xC0) {\n const byte2 = bytes[i++] & 0x3F;\n result += String.fromCharCode(((byte1 & 0x1F) << 6) | byte2);\n } else if ((byte1 & 0xF0) === 0xE0) {\n const byte2 = bytes[i++] & 0x3F;\n const byte3 = bytes[i++] & 0x3F;\n result += String.fromCharCode(((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xF8) === 0xF0) {\n const byte2 = bytes[i++] & 0x3F;\n const byte3 = bytes[i++] & 0x3F;\n const byte4 = bytes[i++] & 0x3F;\n const codePoint = ((byte1 & 0x07) << 18) | (byte2 << 12) | (byte3 << 6) | byte4;\n const adjusted = codePoint - 0x10000;\n result += String.fromCharCode(0xD800 + (adjusted >> 10), 0xDC00 + (adjusted & 0x3FF));\n }\n }\n\n return result;\n }\n }\n\n globalThis.TextEncoder = TextEncoder;\n globalThis.TextDecoder = TextDecoder;\n})();\n`;\n\n const textEncodingResult = context.evalCode(textEncodingCode);\n if (textEncodingResult.error) {\n console.error(\"Failed to setup TextEncoder/TextDecoder\");\n textEncodingResult.error.dispose();\n } else {\n textEncodingResult.value.dispose();\n }\n\n /**\n * @returns CoreHandle with shared stateMap and dispose method\n *\n * **dispose() behavior:**\n * - Clears internal handle tracking array\n * - Does NOT dispose globals (ReadableStream, Blob, etc.) - they are owned\n * by context.global and cleaned up by context.dispose()\n * - Call before context.dispose() to release internal references\n *\n * @see PATTERNS.md for implementation patterns\n */\n return {\n stateMap,\n dispose() {\n // Note: handles set on global (ReadableStream, Blob, etc.) are NOT disposed here\n // They are owned by the global object and will be cleaned up by context.dispose()\n // Disposing them before context disposal causes QuickJS GC assertion failures\n handles.length = 0;\n },\n };\n}\n\n// Re-export types\nexport type {\n Scope,\n MarshalOptions,\n UnmarshalOptions,\n PropertyDescriptor,\n ClassDefinition,\n StateMap,\n SetupCoreOptions,\n CoreHandle,\n QuickJSContext,\n QuickJSHandle,\n QuickJSRuntime,\n} from \"./types.cjs\";\nexport { INTERNAL_STATE } from \"./types.cjs\";\n\n// Re-export utilities\nexport { withScope, withScopeAsync } from \"./scope.cjs\";\nexport { marshal, isHandle, getHandleType } from \"./marshal.cjs\";\nexport { unmarshal, cleanupUnmarshaledHandles } from \"./unmarshal.cjs\";\nexport { defineFunction, defineAsyncFunction } from \"./function-builder.cjs\";\nexport {\n defineClass,\n createStateMap,\n getState,\n setState,\n getInstanceState,\n setInstanceState,\n getInstanceStateById,\n cleanupInstanceState,\n clearAllInstanceState,\n} from \"./class-builder.cjs\";\n\n// Re-export class instance helpers for cross-class access\nexport {\n isDefineClassInstance,\n isInstanceOf,\n getClassInstanceState,\n getInstanceId,\n getClassName,\n} from \"./class-helpers.cjs\";\nexport type { DefineClassInstance } from \"./class-helpers.cjs\";\n\n// Re-export instance state management\nexport {\n nextInstanceId,\n registerInstance,\n getInstanceMetadata,\n getInstanceClassName,\n cleanupInstanceState as cleanupInstanceStateById,\n} from \"./instance-state.cjs\";\nexport type { InstanceMetadata } from \"./instance-state.cjs\";\n\n// Re-export stream utilities\nexport {\n createReadableStream,\n consumeReadableStream,\n} from \"./streams/readable-stream.cjs\";\nexport { createWritableStream } from \"./streams/writable-stream.cjs\";\n\n// Re-export Blob/File utilities\nexport { createBlob } from \"./blob.cjs\";\nexport { createFile } from \"./file.cjs\";\n\n// Re-export URL utilities\nexport { createURLSearchParamsClass } from \"./url-search-params.cjs\";\nexport type { URLSearchParamsState } from \"./url-search-params.cjs\";\nexport { createURLClass, addURLSearchParamsGetter } from \"./url.cjs\";\nexport type { URLState } from \"./url.cjs\";\n"
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { SetupCoreOptions, CoreHandle, StateMap } from \"./types.cjs\";\nimport { createStateMap } from \"./class-builder.cjs\";\nimport {\n createReadableStreamClass,\n createReadableStreamDefaultReaderClass,\n createReadableStream,\n} from \"./streams/readable-stream.cjs\";\nimport {\n createWritableStreamClass,\n createWritableStreamDefaultWriterClass,\n} from \"./streams/writable-stream.cjs\";\nimport { createTransformStreamClass } from \"./streams/transform-stream.cjs\";\nimport { createBlobClass } from \"./blob.cjs\";\nimport { createFileClass } from \"./file.cjs\";\nimport { createDOMExceptionClass } from \"./dom-exception.cjs\";\nimport { createURLSearchParamsClass } from \"./url-search-params.cjs\";\nimport { createURLClass, addURLSearchParamsLinkage, addURLSearchParamsGetter } from \"./url.cjs\";\n\n/**\n * Setup core APIs in a QuickJS context\n *\n * Injects the following globals:\n * - ReadableStream, WritableStream, TransformStream\n * - ReadableStreamDefaultReader, WritableStreamDefaultWriter\n * - Blob\n * - File\n * - DOMException\n * - URL, URLSearchParams\n * - TextEncoder, TextDecoder\n *\n * @example\n * const handle = setupCore(context);\n *\n * context.evalCode(`\n * const blob = new Blob([\"hello\", \" \", \"world\"], { type: \"text/plain\" });\n * const text = await blob.text(); // \"hello world\"\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"chunk1\");\n * controller.enqueue(\"chunk2\");\n * controller.close();\n * }\n * });\n * `);\n */\nexport function setupCore(\n context: QuickJSContext,\n options?: SetupCoreOptions\n): CoreHandle {\n const stateMap = options?.stateMap ?? createStateMap();\n const handles: { name: string; handle: QuickJSHandle }[] = [];\n\n // Create ReadableStreamDefaultReader class first\n const ReadableStreamDefaultReader = createReadableStreamDefaultReaderClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"ReadableStreamDefaultReader\",\n ReadableStreamDefaultReader\n );\n ReadableStreamDefaultReader.dispose();\n\n // Create ReadableStream class\n const readerClassRef = context.getProp(context.global, \"ReadableStreamDefaultReader\");\n const ReadableStream = createReadableStreamClass(\n context,\n stateMap,\n readerClassRef\n );\n readerClassRef.dispose();\n context.setProp(context.global, \"ReadableStream\", ReadableStream);\n ReadableStream.dispose();\n\n // Create WritableStreamDefaultWriter class first\n const WritableStreamDefaultWriter = createWritableStreamDefaultWriterClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"WritableStreamDefaultWriter\",\n WritableStreamDefaultWriter\n );\n WritableStreamDefaultWriter.dispose();\n\n // Create WritableStream class\n const writerClassRef = context.getProp(context.global, \"WritableStreamDefaultWriter\");\n const WritableStream = createWritableStreamClass(\n context,\n stateMap,\n writerClassRef\n );\n writerClassRef.dispose();\n context.setProp(context.global, \"WritableStream\", WritableStream);\n WritableStream.dispose();\n\n // Create TransformStream class\n const TransformStream = createTransformStreamClass(context, stateMap);\n context.setProp(context.global, \"TransformStream\", TransformStream);\n TransformStream.dispose();\n\n // Create Blob class with stream factory\n const BlobClass = createBlobClass(context, stateMap, (source) =>\n createReadableStream(context, stateMap, source)\n );\n context.setProp(context.global, \"Blob\", BlobClass);\n BlobClass.dispose();\n\n // Create File class (extends Blob)\n const blobClassRef = context.getProp(context.global, \"Blob\");\n const FileClass = createFileClass(context, stateMap, blobClassRef);\n blobClassRef.dispose();\n context.setProp(context.global, \"File\", FileClass);\n FileClass.dispose();\n\n // Create DOMException class\n const DOMExceptionClass = createDOMExceptionClass(context, stateMap);\n context.setProp(context.global, \"DOMException\", DOMExceptionClass);\n DOMExceptionClass.dispose();\n\n // Create URLSearchParams class\n const URLSearchParamsClass = createURLSearchParamsClass(context, stateMap);\n context.setProp(context.global, \"URLSearchParams\", URLSearchParamsClass);\n URLSearchParamsClass.dispose();\n\n // Add Symbol.iterator support for URLSearchParams\n const urlSearchParamsIteratorResult = context.evalCode(`\n URLSearchParams.prototype[Symbol.iterator] = function() {\n return this.entries()[Symbol.iterator]();\n };\n `);\n if (urlSearchParamsIteratorResult.error) {\n urlSearchParamsIteratorResult.error.dispose();\n } else {\n urlSearchParamsIteratorResult.value.dispose();\n }\n\n // Create URL class (depends on URLSearchParams)\n const URLClass = createURLClass(context, stateMap);\n context.setProp(context.global, \"URL\", URLClass);\n URLClass.dispose();\n\n // Add searchParams getter to URL that returns URLSearchParams instance\n // Uses JavaScript closures to sync URLSearchParams mutations back to URL\n addURLSearchParamsLinkage(context);\n\n // TextEncoder/TextDecoder - pure JS implementation for UTF-8\n const textEncodingCode = `\n(function() {\n class TextEncoder {\n constructor(encoding = \"utf-8\") {\n if (encoding !== \"utf-8\" && encoding !== \"utf8\") {\n throw new RangeError(\"The encoding label provided is invalid.\");\n }\n this.encoding = \"utf-8\";\n }\n\n encode(input = \"\") {\n const str = String(input);\n const bytes = [];\n\n for (let i = 0; i < str.length; i++) {\n let charCode = str.charCodeAt(i);\n\n if (charCode < 0x80) {\n bytes.push(charCode);\n } else if (charCode < 0x800) {\n bytes.push(0xC0 | (charCode >> 6));\n bytes.push(0x80 | (charCode & 0x3F));\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n const nextCharCode = str.charCodeAt(++i);\n if (nextCharCode >= 0xDC00 && nextCharCode <= 0xDFFF) {\n const codePoint = 0x10000 + ((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00);\n bytes.push(0xF0 | (codePoint >> 18));\n bytes.push(0x80 | ((codePoint >> 12) & 0x3F));\n bytes.push(0x80 | ((codePoint >> 6) & 0x3F));\n bytes.push(0x80 | (codePoint & 0x3F));\n }\n } else if (charCode < 0x10000) {\n bytes.push(0xE0 | (charCode >> 12));\n bytes.push(0x80 | ((charCode >> 6) & 0x3F));\n bytes.push(0x80 | (charCode & 0x3F));\n }\n }\n\n return new Uint8Array(bytes);\n }\n\n encodeInto(source, destination) {\n const encoded = this.encode(source);\n const len = Math.min(encoded.length, destination.length);\n destination.set(encoded.subarray(0, len));\n return { read: source.length, written: len };\n }\n }\n\n class TextDecoder {\n constructor(encoding = \"utf-8\", options = {}) {\n if (encoding !== \"utf-8\" && encoding !== \"utf8\") {\n throw new RangeError(\"The encoding label provided is invalid.\");\n }\n this.encoding = \"utf-8\";\n this.fatal = Boolean(options.fatal);\n this.ignoreBOM = Boolean(options.ignoreBOM);\n }\n\n decode(input, options = {}) {\n if (!input) return \"\";\n\n let bytes;\n if (input instanceof ArrayBuffer) {\n bytes = new Uint8Array(input);\n } else if (ArrayBuffer.isView(input)) {\n bytes = new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n } else if (input instanceof Uint8Array) {\n bytes = input;\n } else {\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n let offset = 0;\n if (!this.ignoreBOM && bytes.length >= 3 &&\n bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {\n offset = 3;\n }\n\n let result = \"\";\n for (let i = offset; i < bytes.length;) {\n const byte1 = bytes[i++];\n\n if (byte1 < 0x80) {\n result += String.fromCharCode(byte1);\n } else if ((byte1 & 0xE0) === 0xC0) {\n const byte2 = bytes[i++] & 0x3F;\n result += String.fromCharCode(((byte1 & 0x1F) << 6) | byte2);\n } else if ((byte1 & 0xF0) === 0xE0) {\n const byte2 = bytes[i++] & 0x3F;\n const byte3 = bytes[i++] & 0x3F;\n result += String.fromCharCode(((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xF8) === 0xF0) {\n const byte2 = bytes[i++] & 0x3F;\n const byte3 = bytes[i++] & 0x3F;\n const byte4 = bytes[i++] & 0x3F;\n const codePoint = ((byte1 & 0x07) << 18) | (byte2 << 12) | (byte3 << 6) | byte4;\n const adjusted = codePoint - 0x10000;\n result += String.fromCharCode(0xD800 + (adjusted >> 10), 0xDC00 + (adjusted & 0x3FF));\n }\n }\n\n return result;\n }\n }\n\n globalThis.TextEncoder = TextEncoder;\n globalThis.TextDecoder = TextDecoder;\n})();\n`;\n\n const textEncodingResult = context.evalCode(textEncodingCode);\n if (textEncodingResult.error) {\n console.error(\"Failed to setup TextEncoder/TextDecoder\");\n textEncodingResult.error.dispose();\n } else {\n textEncodingResult.value.dispose();\n }\n\n /**\n * @returns CoreHandle with shared stateMap and dispose method\n *\n * **dispose() behavior:**\n * - Clears internal handle tracking array\n * - Does NOT dispose globals (ReadableStream, Blob, etc.) - they are owned\n * by context.global and cleaned up by context.dispose()\n * - Call before context.dispose() to release internal references\n *\n * @see PATTERNS.md for implementation patterns\n */\n return {\n stateMap,\n dispose() {\n // Note: handles set on global (ReadableStream, Blob, etc.) are NOT disposed here\n // They are owned by the global object and will be cleaned up by context.dispose()\n // Disposing them before context disposal causes QuickJS GC assertion failures\n handles.length = 0;\n },\n };\n}\n\n// Re-export types\nexport type {\n Scope,\n MarshalOptions,\n UnmarshalOptions,\n PropertyDescriptor,\n ClassDefinition,\n StateMap,\n SetupCoreOptions,\n CoreHandle,\n QuickJSContext,\n QuickJSHandle,\n QuickJSRuntime,\n} from \"./types.cjs\";\nexport { INTERNAL_STATE } from \"./types.cjs\";\n\n// Re-export utilities\nexport { withScope, withScopeAsync } from \"./scope.cjs\";\nexport { marshal, isHandle, getHandleType } from \"./marshal.cjs\";\nexport { unmarshal, cleanupUnmarshaledHandles } from \"./unmarshal.cjs\";\nexport { defineFunction, defineAsyncFunction } from \"./function-builder.cjs\";\nexport {\n defineClass,\n createStateMap,\n getState,\n setState,\n getInstanceState,\n setInstanceState,\n getInstanceStateById,\n cleanupInstanceState,\n clearAllInstanceState,\n} from \"./class-builder.cjs\";\n\n// Re-export class instance helpers for cross-class access\nexport {\n isDefineClassInstance,\n isInstanceOf,\n getClassInstanceState,\n getInstanceId,\n getClassName,\n createClassTypeGuard,\n isUnmarshalledRequest,\n isUnmarshalledResponse,\n isUnmarshalledHeaders,\n isUnmarshalledFormData,\n} from \"./class-helpers.cjs\";\nexport type { DefineClassInstance, TypedClassInstance } from \"./class-helpers.cjs\";\n\n// Re-export instance state management\nexport {\n nextInstanceId,\n registerInstance,\n getInstanceMetadata,\n getInstanceClassName,\n cleanupInstanceState as cleanupInstanceStateById,\n} from \"./instance-state.cjs\";\nexport type { InstanceMetadata } from \"./instance-state.cjs\";\n\n// Re-export stream utilities\nexport {\n createReadableStream,\n consumeReadableStream,\n} from \"./streams/readable-stream.cjs\";\nexport { createWritableStream } from \"./streams/writable-stream.cjs\";\n\n// Re-export Blob/File utilities\nexport { createBlob } from \"./blob.cjs\";\nexport { createFile } from \"./file.cjs\";\n\n// Re-export URL utilities\nexport { createURLSearchParamsClass } from \"./url-search-params.cjs\";\nexport type { URLSearchParamsState } from \"./url-search-params.cjs\";\nexport { createURLClass, addURLSearchParamsLinkage, addURLSearchParamsGetter } from \"./url.cjs\";\nexport type { URLState } from \"./url.cjs\";\n\n// Re-export coercion utilities\nexport {\n createCoercer,\n classCoercer,\n instanceOrShape,\n coerceURL,\n coerceToURLString,\n coerceHeaders,\n coerceBody,\n coerceRequestInit,\n coerceResponseInit,\n} from \"./coerce.cjs\";\nexport type {\n Coercer,\n CoercionResult,\n URLCoerced,\n HeadersCoerced,\n RequestInitCoerced,\n ResponseInitCoerced,\n} from \"./coerce.cjs\";\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "009CAAFE3527D16B64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "AAC8B5BEA5BE896D64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/quickjs-core",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "type": "commonjs"
5
5
  }
@@ -254,11 +254,110 @@ function unmarshal(context, handle, options = {}) {
254
254
  instanceIdHandle.dispose();
255
255
  const metadata = import_instance_state.getInstanceMetadata(instanceId);
256
256
  if (metadata) {
257
- return {
258
- __instanceId__: instanceId,
259
- __className__: metadata.className,
260
- __isDefineClassInstance__: true
261
- };
257
+ const state = metadata.state;
258
+ const debugProps = {};
259
+ if (state) {
260
+ switch (metadata.className) {
261
+ case "Response":
262
+ debugProps.status = state.status;
263
+ debugProps.ok = state.ok;
264
+ debugProps.url = state.url;
265
+ debugProps.type = state.type;
266
+ debugProps.statusText = state.statusText;
267
+ debugProps.redirected = state.redirected;
268
+ break;
269
+ case "Request":
270
+ debugProps.method = state.method;
271
+ debugProps.url = state.url;
272
+ debugProps.mode = state.mode;
273
+ debugProps.credentials = state.credentials;
274
+ debugProps.cache = state.cache;
275
+ debugProps.redirect = state.redirect;
276
+ break;
277
+ case "Headers": {
278
+ const headers = state.headers;
279
+ if (headers instanceof Map) {
280
+ debugProps.size = headers.size;
281
+ const entries = {};
282
+ for (const [key, values] of headers) {
283
+ entries[key] = values.join(", ");
284
+ }
285
+ debugProps.entries = entries;
286
+ }
287
+ break;
288
+ }
289
+ case "URL":
290
+ debugProps.href = state.href;
291
+ debugProps.protocol = state.protocol;
292
+ debugProps.host = state.host;
293
+ debugProps.pathname = state.pathname;
294
+ debugProps.search = state.search;
295
+ break;
296
+ case "URLSearchParams": {
297
+ const params = state.params;
298
+ if (Array.isArray(params)) {
299
+ debugProps.size = params.length;
300
+ const entries = {};
301
+ for (const [key, value] of params) {
302
+ if (!entries[key])
303
+ entries[key] = [];
304
+ entries[key].push(value);
305
+ }
306
+ debugProps.entries = entries;
307
+ }
308
+ break;
309
+ }
310
+ case "Blob":
311
+ case "File":
312
+ debugProps.size = state.size;
313
+ debugProps.type = state.type;
314
+ if (state.name !== undefined)
315
+ debugProps.name = state.name;
316
+ break;
317
+ case "ReadableStream":
318
+ debugProps.locked = state.locked;
319
+ debugProps.closed = state.closed;
320
+ break;
321
+ case "FormData": {
322
+ const entries = state.entries;
323
+ if (Array.isArray(entries)) {
324
+ debugProps.size = entries.length;
325
+ }
326
+ break;
327
+ }
328
+ case "AbortController":
329
+ case "AbortSignal":
330
+ debugProps.aborted = state.aborted;
331
+ break;
332
+ default:
333
+ for (const key of ["name", "message", "size", "length", "type", "value"]) {
334
+ if (key in state && state[key] !== undefined) {
335
+ debugProps[key] = state[key];
336
+ }
337
+ }
338
+ }
339
+ }
340
+ const result = {};
341
+ Object.defineProperty(result, "__instanceId__", {
342
+ value: instanceId,
343
+ enumerable: false,
344
+ writable: false,
345
+ configurable: false
346
+ });
347
+ Object.defineProperty(result, "__className__", {
348
+ value: metadata.className,
349
+ enumerable: false,
350
+ writable: false,
351
+ configurable: false
352
+ });
353
+ Object.defineProperty(result, "__isDefineClassInstance__", {
354
+ value: true,
355
+ enumerable: false,
356
+ writable: false,
357
+ configurable: false
358
+ });
359
+ Object.assign(result, debugProps);
360
+ return result;
262
361
  }
263
362
  } else {
264
363
  instanceIdHandle.dispose();
@@ -322,4 +421,4 @@ function unmarshal(context, handle, options = {}) {
322
421
  }
323
422
  })
324
423
 
325
- //# debugId=A2AB36755476FD0564756E2164756E21
424
+ //# debugId=93627B917732BA3164756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/unmarshal.ts"],
4
4
  "sourcesContent": [
5
- "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { UnmarshalOptions } from \"./types.cjs\";\nimport { marshal } from \"./marshal.cjs\";\nimport { getInstanceMetadata } from \"./instance-state.cjs\";\n\n// Track duped handles per context so they can be cleaned up\nconst contextDupedHandles = new WeakMap<QuickJSContext, Set<QuickJSHandle>>();\n\n/**\n * Get or create the set of duped handles for a context\n */\nfunction getDupedHandles(context: QuickJSContext): Set<QuickJSHandle> {\n let handles = contextDupedHandles.get(context);\n if (!handles) {\n handles = new Set();\n contextDupedHandles.set(context, handles);\n }\n return handles;\n}\n\n/**\n * Clean up all duped handles for a context\n * Should be called before disposing the context\n */\nexport function cleanupUnmarshaledHandles(context: QuickJSContext): void {\n const handles = contextDupedHandles.get(context);\n if (handles) {\n for (const handle of handles) {\n try {\n handle.dispose();\n } catch {\n // Handle may already be disposed\n }\n }\n handles.clear();\n contextDupedHandles.delete(context);\n }\n}\n\n/**\n * Unmarshal a QuickJS handle to a JavaScript value\n *\n * @example\n * const value = unmarshal(context, handle);\n */\nexport function unmarshal(\n context: QuickJSContext,\n handle: QuickJSHandle,\n options: UnmarshalOptions = {}\n): unknown {\n const maxDepth = options.maxDepth ?? 10;\n const seen = new WeakMap<QuickJSHandle, object>();\n\n function unmarshalValue(h: QuickJSHandle, depth: number): unknown {\n if (depth > maxDepth) {\n throw new Error(`Maximum unmarshalling depth of ${maxDepth} exceeded`);\n }\n\n // Try custom unmarshaller first\n if (options.custom) {\n const customResult = options.custom(h, context);\n if (customResult !== undefined) {\n return customResult;\n }\n }\n\n const type = context.typeof(h);\n\n // Handle primitives\n if (type === \"undefined\") {\n return undefined;\n }\n\n // Check for null (typeof returns \"object\" for null)\n const dumpedValue = context.dump(h);\n if (dumpedValue === null) {\n return null;\n }\n\n if (type === \"boolean\") {\n return dumpedValue as boolean;\n }\n if (type === \"number\") {\n return dumpedValue as number;\n }\n if (type === \"string\") {\n return dumpedValue as string;\n }\n\n // Handle bigint\n if (typeof dumpedValue === \"bigint\") {\n return dumpedValue;\n }\n\n // Handle functions - return a wrapper that calls back into QuickJS\n if (type === \"function\") {\n // Dup the handle so it stays alive after unmarshalling\n // This is necessary because the caller may dispose the original handle\n const fnHandle = h.dup();\n // Track the duped handle for cleanup\n getDupedHandles(context).add(fnHandle);\n const wrapper = (...args: unknown[]) => {\n const argHandles = args.map((arg) => marshal(context, arg));\n try {\n const result = context.callFunction(fnHandle, context.undefined, ...argHandles);\n if (result.error) {\n const errorValue = context.dump(result.error);\n result.error.dispose();\n throw new Error(\n typeof errorValue === \"object\" && errorValue !== null\n ? (errorValue as { message?: string }).message || String(errorValue)\n : String(errorValue)\n );\n }\n const value = unmarshalValue(result.value, depth + 1);\n result.value.dispose();\n return value;\n } finally {\n for (const argHandle of argHandles) {\n argHandle.dispose();\n }\n }\n };\n // Attach a dispose method to clean up the handle when the function is no longer needed\n (wrapper as unknown as { __dispose__: () => void }).__dispose__ = () => {\n fnHandle.dispose();\n };\n return wrapper;\n }\n\n // Handle objects\n if (type === \"object\") {\n // Check for circular reference\n if (seen.has(h)) {\n return seen.get(h);\n }\n\n // Check if it's an array\n const lengthHandle = context.getProp(h, \"length\");\n const lengthType = context.typeof(lengthHandle);\n lengthHandle.dispose();\n\n if (lengthType === \"number\") {\n // Check for Array by looking for Array.isArray\n const arrayIsArray = context.getProp(context.global, \"Array\");\n const isArrayFn = context.getProp(arrayIsArray, \"isArray\");\n const isArrayResult = context.callFunction(isArrayFn, context.undefined, h);\n arrayIsArray.dispose();\n isArrayFn.dispose();\n\n let isArray = false;\n if (!isArrayResult.error) {\n isArray = context.dump(isArrayResult.value) === true;\n isArrayResult.value.dispose();\n } else {\n isArrayResult.error.dispose();\n }\n\n if (isArray) {\n const arr: unknown[] = [];\n seen.set(h, arr);\n\n const len = context.getNumber(context.getProp(h, \"length\"));\n const lenHandle = context.getProp(h, \"length\");\n const length = context.getNumber(lenHandle);\n lenHandle.dispose();\n\n for (let i = 0; i < length; i++) {\n const elementHandle = context.getProp(h, i);\n arr[i] = unmarshalValue(elementHandle, depth + 1);\n elementHandle.dispose();\n }\n return arr;\n }\n }\n\n // Check if it's a Date\n const dateConstructor = context.getProp(context.global, \"Date\");\n const isDateResult = context.evalCode(`(function(obj, Date) { return obj instanceof Date; })`);\n if (!isDateResult.error) {\n const checkResult = context.callFunction(\n isDateResult.value,\n context.undefined,\n h,\n dateConstructor\n );\n isDateResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n dateConstructor.dispose();\n\n const getTimeHandle = context.getProp(h, \"getTime\");\n const timeResult = context.callFunction(getTimeHandle, h);\n getTimeHandle.dispose();\n\n if (!timeResult.error) {\n const timestamp = context.getNumber(timeResult.value);\n timeResult.value.dispose();\n return new Date(timestamp);\n }\n if (timeResult.error) timeResult.error.dispose();\n }\n if (checkResult.error) checkResult.error.dispose();\n else if (checkResult.value) checkResult.value.dispose();\n } else {\n isDateResult.error.dispose();\n }\n dateConstructor.dispose();\n\n // Check if it's a Uint8Array\n const uint8ArrayConstructor = context.getProp(context.global, \"Uint8Array\");\n const isUint8ArrayResult = context.evalCode(`(function(obj, U8) { return obj instanceof U8; })`);\n if (!isUint8ArrayResult.error) {\n const checkResult = context.callFunction(\n isUint8ArrayResult.value,\n context.undefined,\n h,\n uint8ArrayConstructor\n );\n isUint8ArrayResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n uint8ArrayConstructor.dispose();\n\n // Get the Uint8Array bytes\n // First try: get the underlying buffer property and extract bytes\n try {\n const bufferHandle = context.getProp(h, \"buffer\");\n const byteOffsetHandle = context.getProp(h, \"byteOffset\");\n const byteLengthHandle = context.getProp(h, \"byteLength\");\n\n if (\n context.typeof(bufferHandle) === \"object\" &&\n context.typeof(byteOffsetHandle) === \"number\" &&\n context.typeof(byteLengthHandle) === \"number\"\n ) {\n const byteOffset = context.getNumber(byteOffsetHandle);\n const byteLength = context.getNumber(byteLengthHandle);\n\n // Try to get array buffer from the buffer property\n const arrayBuffer = context.getArrayBuffer(bufferHandle);\n bufferHandle.dispose();\n byteOffsetHandle.dispose();\n byteLengthHandle.dispose();\n\n if (arrayBuffer) {\n // arrayBuffer.value is a Uint8Array representing the full ArrayBuffer\n // Use slice to get the portion we need (with proper copy)\n return arrayBuffer.value.slice(byteOffset, byteOffset + byteLength);\n }\n } else {\n bufferHandle.dispose();\n byteOffsetHandle.dispose();\n byteLengthHandle.dispose();\n }\n } catch {\n // Fall through to alternative methods\n }\n\n // Second try: getArrayBuffer directly on the Uint8Array handle\n // (works on some QuickJS builds)\n try {\n const arrayBuffer = context.getArrayBuffer(h);\n if (arrayBuffer) {\n return new Uint8Array(arrayBuffer.value);\n }\n } catch {\n // Fall through to plain object handling if getArrayBuffer fails\n }\n // Fall through to plain object handling if getArrayBuffer fails\n } else {\n if (checkResult.error) checkResult.error.dispose();\n else checkResult.value.dispose();\n uint8ArrayConstructor.dispose();\n }\n } else {\n isUint8ArrayResult.error.dispose();\n uint8ArrayConstructor.dispose();\n }\n\n // Check if it's an ArrayBuffer\n const arrayBufferConstructor = context.getProp(context.global, \"ArrayBuffer\");\n const isArrayBufferResult = context.evalCode(`(function(obj, AB) { return obj instanceof AB; })`);\n if (!isArrayBufferResult.error) {\n const checkResult = context.callFunction(\n isArrayBufferResult.value,\n context.undefined,\n h,\n arrayBufferConstructor\n );\n isArrayBufferResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n arrayBufferConstructor.dispose();\n\n // Get the ArrayBuffer bytes directly\n // Wrap in try-catch as getArrayBuffer may throw on some QuickJS builds\n try {\n const arrayBuffer = context.getArrayBuffer(h);\n if (arrayBuffer) {\n return arrayBuffer.value.slice(0);\n }\n } catch {\n // Fall through to plain object handling if getArrayBuffer fails\n }\n // Fall through to plain object handling if getArrayBuffer fails\n } else {\n if (checkResult.error) checkResult.error.dispose();\n else checkResult.value.dispose();\n arrayBufferConstructor.dispose();\n }\n } else {\n isArrayBufferResult.error.dispose();\n arrayBufferConstructor.dispose();\n }\n\n // Check for defineClass instance by looking for __instanceId__\n const instanceIdHandle = context.getProp(h, \"__instanceId__\");\n if (context.typeof(instanceIdHandle) === \"number\") {\n const instanceId = context.getNumber(instanceIdHandle);\n instanceIdHandle.dispose();\n\n const metadata = getInstanceMetadata(instanceId);\n if (metadata) {\n // Return a special object that preserves class identity\n return {\n __instanceId__: instanceId,\n __className__: metadata.className,\n __isDefineClassInstance__: true as const,\n };\n }\n } else {\n instanceIdHandle.dispose();\n }\n\n // Check if it's an Error\n const errorConstructor = context.getProp(context.global, \"Error\");\n const isErrorResult = context.evalCode(`(function(obj, Error) { return obj instanceof Error; })`);\n if (!isErrorResult.error) {\n const checkResult = context.callFunction(\n isErrorResult.value,\n context.undefined,\n h,\n errorConstructor\n );\n isErrorResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n errorConstructor.dispose();\n\n // Extract error properties using getProp (works on prototype properties)\n const messageHandle = context.getProp(h, \"message\");\n const stackHandle = context.getProp(h, \"stack\");\n const nameHandle = context.getProp(h, \"name\");\n\n const message = context.typeof(messageHandle) === \"string\"\n ? context.getString(messageHandle)\n : \"\";\n const stack = context.typeof(stackHandle) === \"string\"\n ? context.getString(stackHandle)\n : undefined;\n const name = context.typeof(nameHandle) === \"string\"\n ? context.getString(nameHandle)\n : \"Error\";\n\n messageHandle.dispose();\n stackHandle.dispose();\n nameHandle.dispose();\n\n const err = new Error(message);\n err.name = name;\n if (stack) err.stack = stack;\n return err;\n }\n if (checkResult.error) checkResult.error.dispose();\n else if (checkResult.value) checkResult.value.dispose();\n } else {\n isErrorResult.error.dispose();\n }\n errorConstructor.dispose();\n\n // Plain object\n const obj: Record<string, unknown> = {};\n seen.set(h, obj);\n\n // Get own enumerable properties\n const keysResult = context.evalCode(`(function(obj) { return Object.keys(obj); })`);\n if (!keysResult.error) {\n const keysArrayHandle = context.callFunction(keysResult.value, context.undefined, h);\n keysResult.value.dispose();\n\n if (!keysArrayHandle.error) {\n const keysArray = unmarshalValue(keysArrayHandle.value, depth + 1) as string[];\n keysArrayHandle.value.dispose();\n\n for (const key of keysArray) {\n const propHandle = context.getProp(h, key);\n obj[key] = unmarshalValue(propHandle, depth + 1);\n propHandle.dispose();\n }\n } else {\n keysArrayHandle.error.dispose();\n }\n } else {\n keysResult.error.dispose();\n }\n\n return obj;\n }\n\n // Fallback to dump for unknown types\n return dumpedValue;\n }\n\n return unmarshalValue(handle, 0);\n}\n"
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { UnmarshalOptions } from \"./types.cjs\";\nimport { marshal } from \"./marshal.cjs\";\nimport { getInstanceMetadata } from \"./instance-state.cjs\";\n\n// Track duped handles per context so they can be cleaned up\nconst contextDupedHandles = new WeakMap<QuickJSContext, Set<QuickJSHandle>>();\n\n/**\n * Get or create the set of duped handles for a context\n */\nfunction getDupedHandles(context: QuickJSContext): Set<QuickJSHandle> {\n let handles = contextDupedHandles.get(context);\n if (!handles) {\n handles = new Set();\n contextDupedHandles.set(context, handles);\n }\n return handles;\n}\n\n/**\n * Clean up all duped handles for a context\n * Should be called before disposing the context\n */\nexport function cleanupUnmarshaledHandles(context: QuickJSContext): void {\n const handles = contextDupedHandles.get(context);\n if (handles) {\n for (const handle of handles) {\n try {\n handle.dispose();\n } catch {\n // Handle may already be disposed\n }\n }\n handles.clear();\n contextDupedHandles.delete(context);\n }\n}\n\n/**\n * Unmarshal a QuickJS handle to a JavaScript value\n *\n * @example\n * const value = unmarshal(context, handle);\n */\nexport function unmarshal(\n context: QuickJSContext,\n handle: QuickJSHandle,\n options: UnmarshalOptions = {}\n): unknown {\n const maxDepth = options.maxDepth ?? 10;\n const seen = new WeakMap<QuickJSHandle, object>();\n\n function unmarshalValue(h: QuickJSHandle, depth: number): unknown {\n if (depth > maxDepth) {\n throw new Error(`Maximum unmarshalling depth of ${maxDepth} exceeded`);\n }\n\n // Try custom unmarshaller first\n if (options.custom) {\n const customResult = options.custom(h, context);\n if (customResult !== undefined) {\n return customResult;\n }\n }\n\n const type = context.typeof(h);\n\n // Handle primitives\n if (type === \"undefined\") {\n return undefined;\n }\n\n // Check for null (typeof returns \"object\" for null)\n const dumpedValue = context.dump(h);\n if (dumpedValue === null) {\n return null;\n }\n\n if (type === \"boolean\") {\n return dumpedValue as boolean;\n }\n if (type === \"number\") {\n return dumpedValue as number;\n }\n if (type === \"string\") {\n return dumpedValue as string;\n }\n\n // Handle bigint\n if (typeof dumpedValue === \"bigint\") {\n return dumpedValue;\n }\n\n // Handle functions - return a wrapper that calls back into QuickJS\n if (type === \"function\") {\n // Dup the handle so it stays alive after unmarshalling\n // This is necessary because the caller may dispose the original handle\n const fnHandle = h.dup();\n // Track the duped handle for cleanup\n getDupedHandles(context).add(fnHandle);\n const wrapper = (...args: unknown[]) => {\n const argHandles = args.map((arg) => marshal(context, arg));\n try {\n const result = context.callFunction(fnHandle, context.undefined, ...argHandles);\n if (result.error) {\n const errorValue = context.dump(result.error);\n result.error.dispose();\n throw new Error(\n typeof errorValue === \"object\" && errorValue !== null\n ? (errorValue as { message?: string }).message || String(errorValue)\n : String(errorValue)\n );\n }\n const value = unmarshalValue(result.value, depth + 1);\n result.value.dispose();\n return value;\n } finally {\n for (const argHandle of argHandles) {\n argHandle.dispose();\n }\n }\n };\n // Attach a dispose method to clean up the handle when the function is no longer needed\n (wrapper as unknown as { __dispose__: () => void }).__dispose__ = () => {\n fnHandle.dispose();\n };\n return wrapper;\n }\n\n // Handle objects\n if (type === \"object\") {\n // Check for circular reference\n if (seen.has(h)) {\n return seen.get(h);\n }\n\n // Check if it's an array\n const lengthHandle = context.getProp(h, \"length\");\n const lengthType = context.typeof(lengthHandle);\n lengthHandle.dispose();\n\n if (lengthType === \"number\") {\n // Check for Array by looking for Array.isArray\n const arrayIsArray = context.getProp(context.global, \"Array\");\n const isArrayFn = context.getProp(arrayIsArray, \"isArray\");\n const isArrayResult = context.callFunction(isArrayFn, context.undefined, h);\n arrayIsArray.dispose();\n isArrayFn.dispose();\n\n let isArray = false;\n if (!isArrayResult.error) {\n isArray = context.dump(isArrayResult.value) === true;\n isArrayResult.value.dispose();\n } else {\n isArrayResult.error.dispose();\n }\n\n if (isArray) {\n const arr: unknown[] = [];\n seen.set(h, arr);\n\n const len = context.getNumber(context.getProp(h, \"length\"));\n const lenHandle = context.getProp(h, \"length\");\n const length = context.getNumber(lenHandle);\n lenHandle.dispose();\n\n for (let i = 0; i < length; i++) {\n const elementHandle = context.getProp(h, i);\n arr[i] = unmarshalValue(elementHandle, depth + 1);\n elementHandle.dispose();\n }\n return arr;\n }\n }\n\n // Check if it's a Date\n const dateConstructor = context.getProp(context.global, \"Date\");\n const isDateResult = context.evalCode(`(function(obj, Date) { return obj instanceof Date; })`);\n if (!isDateResult.error) {\n const checkResult = context.callFunction(\n isDateResult.value,\n context.undefined,\n h,\n dateConstructor\n );\n isDateResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n dateConstructor.dispose();\n\n const getTimeHandle = context.getProp(h, \"getTime\");\n const timeResult = context.callFunction(getTimeHandle, h);\n getTimeHandle.dispose();\n\n if (!timeResult.error) {\n const timestamp = context.getNumber(timeResult.value);\n timeResult.value.dispose();\n return new Date(timestamp);\n }\n if (timeResult.error) timeResult.error.dispose();\n }\n if (checkResult.error) checkResult.error.dispose();\n else if (checkResult.value) checkResult.value.dispose();\n } else {\n isDateResult.error.dispose();\n }\n dateConstructor.dispose();\n\n // Check if it's a Uint8Array\n const uint8ArrayConstructor = context.getProp(context.global, \"Uint8Array\");\n const isUint8ArrayResult = context.evalCode(`(function(obj, U8) { return obj instanceof U8; })`);\n if (!isUint8ArrayResult.error) {\n const checkResult = context.callFunction(\n isUint8ArrayResult.value,\n context.undefined,\n h,\n uint8ArrayConstructor\n );\n isUint8ArrayResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n uint8ArrayConstructor.dispose();\n\n // Get the Uint8Array bytes\n // First try: get the underlying buffer property and extract bytes\n try {\n const bufferHandle = context.getProp(h, \"buffer\");\n const byteOffsetHandle = context.getProp(h, \"byteOffset\");\n const byteLengthHandle = context.getProp(h, \"byteLength\");\n\n if (\n context.typeof(bufferHandle) === \"object\" &&\n context.typeof(byteOffsetHandle) === \"number\" &&\n context.typeof(byteLengthHandle) === \"number\"\n ) {\n const byteOffset = context.getNumber(byteOffsetHandle);\n const byteLength = context.getNumber(byteLengthHandle);\n\n // Try to get array buffer from the buffer property\n const arrayBuffer = context.getArrayBuffer(bufferHandle);\n bufferHandle.dispose();\n byteOffsetHandle.dispose();\n byteLengthHandle.dispose();\n\n if (arrayBuffer) {\n // arrayBuffer.value is a Uint8Array representing the full ArrayBuffer\n // Use slice to get the portion we need (with proper copy)\n return arrayBuffer.value.slice(byteOffset, byteOffset + byteLength);\n }\n } else {\n bufferHandle.dispose();\n byteOffsetHandle.dispose();\n byteLengthHandle.dispose();\n }\n } catch {\n // Fall through to alternative methods\n }\n\n // Second try: getArrayBuffer directly on the Uint8Array handle\n // (works on some QuickJS builds)\n try {\n const arrayBuffer = context.getArrayBuffer(h);\n if (arrayBuffer) {\n return new Uint8Array(arrayBuffer.value);\n }\n } catch {\n // Fall through to plain object handling if getArrayBuffer fails\n }\n // Fall through to plain object handling if getArrayBuffer fails\n } else {\n if (checkResult.error) checkResult.error.dispose();\n else checkResult.value.dispose();\n uint8ArrayConstructor.dispose();\n }\n } else {\n isUint8ArrayResult.error.dispose();\n uint8ArrayConstructor.dispose();\n }\n\n // Check if it's an ArrayBuffer\n const arrayBufferConstructor = context.getProp(context.global, \"ArrayBuffer\");\n const isArrayBufferResult = context.evalCode(`(function(obj, AB) { return obj instanceof AB; })`);\n if (!isArrayBufferResult.error) {\n const checkResult = context.callFunction(\n isArrayBufferResult.value,\n context.undefined,\n h,\n arrayBufferConstructor\n );\n isArrayBufferResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n arrayBufferConstructor.dispose();\n\n // Get the ArrayBuffer bytes directly\n // Wrap in try-catch as getArrayBuffer may throw on some QuickJS builds\n try {\n const arrayBuffer = context.getArrayBuffer(h);\n if (arrayBuffer) {\n return arrayBuffer.value.slice(0);\n }\n } catch {\n // Fall through to plain object handling if getArrayBuffer fails\n }\n // Fall through to plain object handling if getArrayBuffer fails\n } else {\n if (checkResult.error) checkResult.error.dispose();\n else checkResult.value.dispose();\n arrayBufferConstructor.dispose();\n }\n } else {\n isArrayBufferResult.error.dispose();\n arrayBufferConstructor.dispose();\n }\n\n // Check for defineClass instance by looking for __instanceId__\n const instanceIdHandle = context.getProp(h, \"__instanceId__\");\n if (context.typeof(instanceIdHandle) === \"number\") {\n const instanceId = context.getNumber(instanceIdHandle);\n instanceIdHandle.dispose();\n\n const metadata = getInstanceMetadata(instanceId);\n if (metadata) {\n // Extract useful debug properties based on class type\n const state = metadata.state as Record<string, unknown>;\n const debugProps: Record<string, unknown> = {};\n\n if (state) {\n switch (metadata.className) {\n case \"Response\":\n debugProps.status = state.status;\n debugProps.ok = state.ok;\n debugProps.url = state.url;\n debugProps.type = state.type;\n debugProps.statusText = state.statusText;\n debugProps.redirected = state.redirected;\n break;\n case \"Request\":\n debugProps.method = state.method;\n debugProps.url = state.url;\n debugProps.mode = state.mode;\n debugProps.credentials = state.credentials;\n debugProps.cache = state.cache;\n debugProps.redirect = state.redirect;\n break;\n case \"Headers\": {\n const headers = state.headers as Map<string, string[]> | undefined;\n if (headers instanceof Map) {\n debugProps.size = headers.size;\n // Convert to plain object for debugging\n const entries: Record<string, string> = {};\n for (const [key, values] of headers) {\n entries[key] = values.join(\", \");\n }\n debugProps.entries = entries;\n }\n break;\n }\n case \"URL\":\n debugProps.href = state.href;\n debugProps.protocol = state.protocol;\n debugProps.host = state.host;\n debugProps.pathname = state.pathname;\n debugProps.search = state.search;\n break;\n case \"URLSearchParams\": {\n const params = state.params as Array<[string, string]> | undefined;\n if (Array.isArray(params)) {\n debugProps.size = params.length;\n // Convert to plain object for debugging\n const entries: Record<string, string[]> = {};\n for (const [key, value] of params) {\n if (!entries[key]) entries[key] = [];\n entries[key].push(value);\n }\n debugProps.entries = entries;\n }\n break;\n }\n case \"Blob\":\n case \"File\":\n debugProps.size = state.size;\n debugProps.type = state.type;\n if (state.name !== undefined) debugProps.name = state.name;\n break;\n case \"ReadableStream\":\n debugProps.locked = state.locked;\n debugProps.closed = state.closed;\n break;\n case \"FormData\": {\n const entries = state.entries as Array<{ name: string; value: unknown }> | undefined;\n if (Array.isArray(entries)) {\n debugProps.size = entries.length;\n }\n break;\n }\n case \"AbortController\":\n case \"AbortSignal\":\n debugProps.aborted = state.aborted;\n break;\n default:\n // For unknown classes, try to include common properties\n for (const key of [\"name\", \"message\", \"size\", \"length\", \"type\", \"value\"]) {\n if (key in state && state[key] !== undefined) {\n debugProps[key] = state[key];\n }\n }\n }\n }\n\n // Return object with non-enumerable class identity markers AND enumerable debug properties\n const result: Record<string, unknown> = {};\n\n // Make internal properties non-enumerable so they don't show up in Object.keys()\n Object.defineProperty(result, '__instanceId__', {\n value: instanceId,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(result, '__className__', {\n value: metadata.className,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(result, '__isDefineClassInstance__', {\n value: true as const,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n\n // Add debug properties as enumerable (visible in Object.keys)\n Object.assign(result, debugProps);\n\n return result;\n }\n } else {\n instanceIdHandle.dispose();\n }\n\n // Check if it's an Error\n const errorConstructor = context.getProp(context.global, \"Error\");\n const isErrorResult = context.evalCode(`(function(obj, Error) { return obj instanceof Error; })`);\n if (!isErrorResult.error) {\n const checkResult = context.callFunction(\n isErrorResult.value,\n context.undefined,\n h,\n errorConstructor\n );\n isErrorResult.value.dispose();\n\n if (!checkResult.error && context.dump(checkResult.value) === true) {\n checkResult.value.dispose();\n errorConstructor.dispose();\n\n // Extract error properties using getProp (works on prototype properties)\n const messageHandle = context.getProp(h, \"message\");\n const stackHandle = context.getProp(h, \"stack\");\n const nameHandle = context.getProp(h, \"name\");\n\n const message = context.typeof(messageHandle) === \"string\"\n ? context.getString(messageHandle)\n : \"\";\n const stack = context.typeof(stackHandle) === \"string\"\n ? context.getString(stackHandle)\n : undefined;\n const name = context.typeof(nameHandle) === \"string\"\n ? context.getString(nameHandle)\n : \"Error\";\n\n messageHandle.dispose();\n stackHandle.dispose();\n nameHandle.dispose();\n\n const err = new Error(message);\n err.name = name;\n if (stack) err.stack = stack;\n return err;\n }\n if (checkResult.error) checkResult.error.dispose();\n else if (checkResult.value) checkResult.value.dispose();\n } else {\n isErrorResult.error.dispose();\n }\n errorConstructor.dispose();\n\n // Plain object\n const obj: Record<string, unknown> = {};\n seen.set(h, obj);\n\n // Get own enumerable properties\n const keysResult = context.evalCode(`(function(obj) { return Object.keys(obj); })`);\n if (!keysResult.error) {\n const keysArrayHandle = context.callFunction(keysResult.value, context.undefined, h);\n keysResult.value.dispose();\n\n if (!keysArrayHandle.error) {\n const keysArray = unmarshalValue(keysArrayHandle.value, depth + 1) as string[];\n keysArrayHandle.value.dispose();\n\n for (const key of keysArray) {\n const propHandle = context.getProp(h, key);\n obj[key] = unmarshalValue(propHandle, depth + 1);\n propHandle.dispose();\n }\n } else {\n keysArrayHandle.error.dispose();\n }\n } else {\n keysResult.error.dispose();\n }\n\n return obj;\n }\n\n // Fallback to dump for unknown types\n return dumpedValue;\n }\n\n return unmarshalValue(handle, 0);\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "A2AB36755476FD0564756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "93627B917732BA3164756E2164756E21",
9
9
  "names": []
10
10
  }
package/dist/cjs/url.cjs CHANGED
@@ -31,26 +31,36 @@ var __export = (target, all) => {
31
31
  var exports_url = {};
32
32
  __export(exports_url, {
33
33
  createURLClass: () => createURLClass,
34
+ addURLSearchParamsLinkage: () => addURLSearchParamsLinkage,
34
35
  addURLSearchParamsGetter: () => addURLSearchParamsGetter
35
36
  });
36
37
  module.exports = __toCommonJS(exports_url);
37
38
  var import_class_builder = require("./class-builder.cjs");
39
+ function rebuildURLHref(state) {
40
+ let userinfo = "";
41
+ if (state.username) {
42
+ userinfo = state.password ? `${state.username}:${state.password}@` : `${state.username}@`;
43
+ }
44
+ state.href = `${state.protocol}//${userinfo}${state.host}${state.pathname}${state.search}${state.hash}`;
45
+ state.origin = `${state.protocol}//${state.host}`;
46
+ }
38
47
  function createURLClass(context, stateMap) {
39
48
  return import_class_builder.defineClass(context, stateMap, {
40
49
  name: "URL",
41
50
  construct: (args) => {
42
- const urlString = args[0];
51
+ const urlInput = args[0];
43
52
  const base = args[1];
44
- if (urlString === undefined) {
53
+ if (urlInput === undefined) {
45
54
  throw new TypeError("Failed to construct 'URL': 1 argument required, but only 0 present.");
46
55
  }
56
+ const urlString = typeof urlInput === "object" && urlInput !== null && "href" in urlInput ? urlInput.href : String(urlInput);
47
57
  let parsed;
48
58
  try {
49
59
  if (base !== undefined) {
50
60
  const baseStr = typeof base === "object" && base !== null && "href" in base ? base.href : String(base);
51
- parsed = new globalThis.URL(String(urlString), baseStr);
61
+ parsed = new globalThis.URL(urlString, baseStr);
52
62
  } else {
53
- parsed = new globalThis.URL(String(urlString));
63
+ parsed = new globalThis.URL(urlString);
54
64
  }
55
65
  } catch (e) {
56
66
  throw new TypeError(`Failed to construct 'URL': Invalid URL`);
@@ -73,21 +83,56 @@ function createURLClass(context, stateMap) {
73
83
  hash: {
74
84
  get() {
75
85
  return this.hash;
86
+ },
87
+ set(value) {
88
+ this.hash = value.startsWith("#") ? value : `#${value}`;
89
+ rebuildURLHref(this);
76
90
  }
77
91
  },
78
92
  host: {
79
93
  get() {
80
94
  return this.host;
95
+ },
96
+ set(value) {
97
+ const colonIndex = value.lastIndexOf(":");
98
+ if (colonIndex > -1 && !value.includes("]", colonIndex)) {
99
+ this.hostname = value.slice(0, colonIndex);
100
+ this.port = value.slice(colonIndex + 1);
101
+ } else {
102
+ this.hostname = value;
103
+ this.port = "";
104
+ }
105
+ this.host = value;
106
+ rebuildURLHref(this);
81
107
  }
82
108
  },
83
109
  hostname: {
84
110
  get() {
85
111
  return this.hostname;
112
+ },
113
+ set(value) {
114
+ this.hostname = value;
115
+ this.host = this.port ? `${value}:${this.port}` : value;
116
+ rebuildURLHref(this);
86
117
  }
87
118
  },
88
119
  href: {
89
120
  get() {
90
121
  return this.href;
122
+ },
123
+ set(value) {
124
+ const parsed = new globalThis.URL(value);
125
+ this.hash = parsed.hash;
126
+ this.host = parsed.host;
127
+ this.hostname = parsed.hostname;
128
+ this.href = parsed.href;
129
+ this.origin = parsed.origin;
130
+ this.password = parsed.password;
131
+ this.pathname = parsed.pathname;
132
+ this.port = parsed.port;
133
+ this.protocol = parsed.protocol;
134
+ this.search = parsed.search;
135
+ this.username = parsed.username;
91
136
  }
92
137
  },
93
138
  origin: {
@@ -98,31 +143,57 @@ function createURLClass(context, stateMap) {
98
143
  password: {
99
144
  get() {
100
145
  return this.password;
146
+ },
147
+ set(value) {
148
+ this.password = value;
149
+ rebuildURLHref(this);
101
150
  }
102
151
  },
103
152
  pathname: {
104
153
  get() {
105
154
  return this.pathname;
155
+ },
156
+ set(value) {
157
+ this.pathname = value.startsWith("/") ? value : `/${value}`;
158
+ rebuildURLHref(this);
106
159
  }
107
160
  },
108
161
  port: {
109
162
  get() {
110
163
  return this.port;
164
+ },
165
+ set(value) {
166
+ this.port = value;
167
+ this.host = value ? `${this.hostname}:${value}` : this.hostname;
168
+ rebuildURLHref(this);
111
169
  }
112
170
  },
113
171
  protocol: {
114
172
  get() {
115
173
  return this.protocol;
174
+ },
175
+ set(value) {
176
+ this.protocol = value.endsWith(":") ? value : `${value}:`;
177
+ this.origin = `${this.protocol}//${this.host}`;
178
+ rebuildURLHref(this);
116
179
  }
117
180
  },
118
181
  search: {
119
182
  get() {
120
183
  return this.search;
184
+ },
185
+ set(value) {
186
+ this.search = value && !value.startsWith("?") ? `?${value}` : value;
187
+ rebuildURLHref(this);
121
188
  }
122
189
  },
123
190
  username: {
124
191
  get() {
125
192
  return this.username;
193
+ },
194
+ set(value) {
195
+ this.username = value;
196
+ rebuildURLHref(this);
126
197
  }
127
198
  }
128
199
  },
@@ -132,9 +203,6 @@ function createURLClass(context, stateMap) {
132
203
  },
133
204
  toJSON() {
134
205
  return this.href;
135
- },
136
- __getSearch__() {
137
- return this.search;
138
206
  }
139
207
  },
140
208
  staticMethods: {
@@ -153,18 +221,42 @@ function createURLClass(context, stateMap) {
153
221
  }
154
222
  });
155
223
  }
156
- function addURLSearchParamsGetter(context) {
224
+ function addURLSearchParamsLinkage(context) {
157
225
  const result = context.evalCode(`
158
226
  (function() {
159
- const searchParamsCache = new Map();
160
-
161
227
  Object.defineProperty(URL.prototype, 'searchParams', {
162
228
  get: function() {
163
- const instanceId = this.__instanceId__;
164
- if (!searchParamsCache.has(instanceId)) {
165
- searchParamsCache.set(instanceId, new URLSearchParams(this.__getSearch__()));
229
+ // Cache the URLSearchParams instance on first access
230
+ if (!this._cachedSearchParams) {
231
+ const url = this;
232
+ const params = new URLSearchParams(this.search);
233
+
234
+ // Wrap mutating methods to sync back to URL
235
+ const originalSet = params.set.bind(params);
236
+ const originalAppend = params.append.bind(params);
237
+ const originalDelete = params.delete.bind(params);
238
+ const originalSort = params.sort.bind(params);
239
+
240
+ params.set = function(name, value) {
241
+ originalSet(name, value);
242
+ url.search = this.toString();
243
+ };
244
+ params.append = function(name, value) {
245
+ originalAppend(name, value);
246
+ url.search = this.toString();
247
+ };
248
+ params.delete = function(name, value) {
249
+ originalDelete(name, value);
250
+ url.search = this.toString();
251
+ };
252
+ params.sort = function() {
253
+ originalSort();
254
+ url.search = this.toString();
255
+ };
256
+
257
+ this._cachedSearchParams = params;
166
258
  }
167
- return searchParamsCache.get(instanceId);
259
+ return this._cachedSearchParams;
168
260
  },
169
261
  enumerable: true,
170
262
  configurable: true
@@ -174,10 +266,11 @@ function addURLSearchParamsGetter(context) {
174
266
  if (result.error) {
175
267
  const err = context.dump(result.error);
176
268
  result.error.dispose();
177
- throw new Error(`Failed to add searchParams getter: ${JSON.stringify(err)}`);
269
+ throw new Error(`Failed to setup URL/URLSearchParams linkage: ${JSON.stringify(err)}`);
178
270
  }
179
271
  result.value.dispose();
180
272
  }
273
+ var addURLSearchParamsGetter = addURLSearchParamsLinkage;
181
274
  })
182
275
 
183
- //# debugId=C3940F5C588B349864756E2164756E21
276
+ //# debugId=5358D58086DA4A4164756E2164756E21