@ricsam/quickjs-core 0.2.13 → 0.2.15

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.
@@ -220,11 +220,110 @@ function unmarshal(context, handle, options = {}) {
220
220
  instanceIdHandle.dispose();
221
221
  const metadata = getInstanceMetadata(instanceId);
222
222
  if (metadata) {
223
- return {
224
- __instanceId__: instanceId,
225
- __className__: metadata.className,
226
- __isDefineClassInstance__: true
227
- };
223
+ const state = metadata.state;
224
+ const debugProps = {};
225
+ if (state) {
226
+ switch (metadata.className) {
227
+ case "Response":
228
+ debugProps.status = state.status;
229
+ debugProps.ok = state.ok;
230
+ debugProps.url = state.url;
231
+ debugProps.type = state.type;
232
+ debugProps.statusText = state.statusText;
233
+ debugProps.redirected = state.redirected;
234
+ break;
235
+ case "Request":
236
+ debugProps.method = state.method;
237
+ debugProps.url = state.url;
238
+ debugProps.mode = state.mode;
239
+ debugProps.credentials = state.credentials;
240
+ debugProps.cache = state.cache;
241
+ debugProps.redirect = state.redirect;
242
+ break;
243
+ case "Headers": {
244
+ const headers = state.headers;
245
+ if (headers instanceof Map) {
246
+ debugProps.size = headers.size;
247
+ const entries = {};
248
+ for (const [key, values] of headers) {
249
+ entries[key] = values.join(", ");
250
+ }
251
+ debugProps.entries = entries;
252
+ }
253
+ break;
254
+ }
255
+ case "URL":
256
+ debugProps.href = state.href;
257
+ debugProps.protocol = state.protocol;
258
+ debugProps.host = state.host;
259
+ debugProps.pathname = state.pathname;
260
+ debugProps.search = state.search;
261
+ break;
262
+ case "URLSearchParams": {
263
+ const params = state.params;
264
+ if (Array.isArray(params)) {
265
+ debugProps.size = params.length;
266
+ const entries = {};
267
+ for (const [key, value] of params) {
268
+ if (!entries[key])
269
+ entries[key] = [];
270
+ entries[key].push(value);
271
+ }
272
+ debugProps.entries = entries;
273
+ }
274
+ break;
275
+ }
276
+ case "Blob":
277
+ case "File":
278
+ debugProps.size = state.size;
279
+ debugProps.type = state.type;
280
+ if (state.name !== undefined)
281
+ debugProps.name = state.name;
282
+ break;
283
+ case "ReadableStream":
284
+ debugProps.locked = state.locked;
285
+ debugProps.closed = state.closed;
286
+ break;
287
+ case "FormData": {
288
+ const entries = state.entries;
289
+ if (Array.isArray(entries)) {
290
+ debugProps.size = entries.length;
291
+ }
292
+ break;
293
+ }
294
+ case "AbortController":
295
+ case "AbortSignal":
296
+ debugProps.aborted = state.aborted;
297
+ break;
298
+ default:
299
+ for (const key of ["name", "message", "size", "length", "type", "value"]) {
300
+ if (key in state && state[key] !== undefined) {
301
+ debugProps[key] = state[key];
302
+ }
303
+ }
304
+ }
305
+ }
306
+ const result = {};
307
+ Object.defineProperty(result, "__instanceId__", {
308
+ value: instanceId,
309
+ enumerable: false,
310
+ writable: false,
311
+ configurable: false
312
+ });
313
+ Object.defineProperty(result, "__className__", {
314
+ value: metadata.className,
315
+ enumerable: false,
316
+ writable: false,
317
+ configurable: false
318
+ });
319
+ Object.defineProperty(result, "__isDefineClassInstance__", {
320
+ value: true,
321
+ enumerable: false,
322
+ writable: false,
323
+ configurable: false
324
+ });
325
+ Object.assign(result, debugProps);
326
+ return result;
228
327
  }
229
328
  } else {
230
329
  instanceIdHandle.dispose();
@@ -291,4 +390,4 @@ export {
291
390
  cleanupUnmarshaledHandles
292
391
  };
293
392
 
294
- //# debugId=88FB175CB151CB5164756E2164756E21
393
+ //# debugId=59E1AD4F0B55CF7C64756E2164756E21
@@ -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.mjs\";\nimport { marshal } from \"./marshal.mjs\";\nimport { getInstanceMetadata } from \"./instance-state.mjs\";\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.mjs\";\nimport { marshal } from \"./marshal.mjs\";\nimport { getInstanceMetadata } from \"./instance-state.mjs\";\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": "88FB175CB151CB5164756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "59E1AD4F0B55CF7C64756E2164756E21",
9
9
  "names": []
10
10
  }
package/dist/mjs/url.mjs CHANGED
@@ -1,22 +1,31 @@
1
1
  // @bun
2
2
  // packages/core/src/url.ts
3
3
  import { defineClass } from "./class-builder.mjs";
4
+ function rebuildURLHref(state) {
5
+ let userinfo = "";
6
+ if (state.username) {
7
+ userinfo = state.password ? `${state.username}:${state.password}@` : `${state.username}@`;
8
+ }
9
+ state.href = `${state.protocol}//${userinfo}${state.host}${state.pathname}${state.search}${state.hash}`;
10
+ state.origin = `${state.protocol}//${state.host}`;
11
+ }
4
12
  function createURLClass(context, stateMap) {
5
13
  return defineClass(context, stateMap, {
6
14
  name: "URL",
7
15
  construct: (args) => {
8
- const urlString = args[0];
16
+ const urlInput = args[0];
9
17
  const base = args[1];
10
- if (urlString === undefined) {
18
+ if (urlInput === undefined) {
11
19
  throw new TypeError("Failed to construct 'URL': 1 argument required, but only 0 present.");
12
20
  }
21
+ const urlString = typeof urlInput === "object" && urlInput !== null && "href" in urlInput ? urlInput.href : String(urlInput);
13
22
  let parsed;
14
23
  try {
15
24
  if (base !== undefined) {
16
25
  const baseStr = typeof base === "object" && base !== null && "href" in base ? base.href : String(base);
17
- parsed = new globalThis.URL(String(urlString), baseStr);
26
+ parsed = new globalThis.URL(urlString, baseStr);
18
27
  } else {
19
- parsed = new globalThis.URL(String(urlString));
28
+ parsed = new globalThis.URL(urlString);
20
29
  }
21
30
  } catch (e) {
22
31
  throw new TypeError(`Failed to construct 'URL': Invalid URL`);
@@ -39,21 +48,56 @@ function createURLClass(context, stateMap) {
39
48
  hash: {
40
49
  get() {
41
50
  return this.hash;
51
+ },
52
+ set(value) {
53
+ this.hash = value.startsWith("#") ? value : `#${value}`;
54
+ rebuildURLHref(this);
42
55
  }
43
56
  },
44
57
  host: {
45
58
  get() {
46
59
  return this.host;
60
+ },
61
+ set(value) {
62
+ const colonIndex = value.lastIndexOf(":");
63
+ if (colonIndex > -1 && !value.includes("]", colonIndex)) {
64
+ this.hostname = value.slice(0, colonIndex);
65
+ this.port = value.slice(colonIndex + 1);
66
+ } else {
67
+ this.hostname = value;
68
+ this.port = "";
69
+ }
70
+ this.host = value;
71
+ rebuildURLHref(this);
47
72
  }
48
73
  },
49
74
  hostname: {
50
75
  get() {
51
76
  return this.hostname;
77
+ },
78
+ set(value) {
79
+ this.hostname = value;
80
+ this.host = this.port ? `${value}:${this.port}` : value;
81
+ rebuildURLHref(this);
52
82
  }
53
83
  },
54
84
  href: {
55
85
  get() {
56
86
  return this.href;
87
+ },
88
+ set(value) {
89
+ const parsed = new globalThis.URL(value);
90
+ this.hash = parsed.hash;
91
+ this.host = parsed.host;
92
+ this.hostname = parsed.hostname;
93
+ this.href = parsed.href;
94
+ this.origin = parsed.origin;
95
+ this.password = parsed.password;
96
+ this.pathname = parsed.pathname;
97
+ this.port = parsed.port;
98
+ this.protocol = parsed.protocol;
99
+ this.search = parsed.search;
100
+ this.username = parsed.username;
57
101
  }
58
102
  },
59
103
  origin: {
@@ -64,31 +108,57 @@ function createURLClass(context, stateMap) {
64
108
  password: {
65
109
  get() {
66
110
  return this.password;
111
+ },
112
+ set(value) {
113
+ this.password = value;
114
+ rebuildURLHref(this);
67
115
  }
68
116
  },
69
117
  pathname: {
70
118
  get() {
71
119
  return this.pathname;
120
+ },
121
+ set(value) {
122
+ this.pathname = value.startsWith("/") ? value : `/${value}`;
123
+ rebuildURLHref(this);
72
124
  }
73
125
  },
74
126
  port: {
75
127
  get() {
76
128
  return this.port;
129
+ },
130
+ set(value) {
131
+ this.port = value;
132
+ this.host = value ? `${this.hostname}:${value}` : this.hostname;
133
+ rebuildURLHref(this);
77
134
  }
78
135
  },
79
136
  protocol: {
80
137
  get() {
81
138
  return this.protocol;
139
+ },
140
+ set(value) {
141
+ this.protocol = value.endsWith(":") ? value : `${value}:`;
142
+ this.origin = `${this.protocol}//${this.host}`;
143
+ rebuildURLHref(this);
82
144
  }
83
145
  },
84
146
  search: {
85
147
  get() {
86
148
  return this.search;
149
+ },
150
+ set(value) {
151
+ this.search = value && !value.startsWith("?") ? `?${value}` : value;
152
+ rebuildURLHref(this);
87
153
  }
88
154
  },
89
155
  username: {
90
156
  get() {
91
157
  return this.username;
158
+ },
159
+ set(value) {
160
+ this.username = value;
161
+ rebuildURLHref(this);
92
162
  }
93
163
  }
94
164
  },
@@ -98,9 +168,6 @@ function createURLClass(context, stateMap) {
98
168
  },
99
169
  toJSON() {
100
170
  return this.href;
101
- },
102
- __getSearch__() {
103
- return this.search;
104
171
  }
105
172
  },
106
173
  staticMethods: {
@@ -119,18 +186,42 @@ function createURLClass(context, stateMap) {
119
186
  }
120
187
  });
121
188
  }
122
- function addURLSearchParamsGetter(context) {
189
+ function addURLSearchParamsLinkage(context) {
123
190
  const result = context.evalCode(`
124
191
  (function() {
125
- const searchParamsCache = new Map();
126
-
127
192
  Object.defineProperty(URL.prototype, 'searchParams', {
128
193
  get: function() {
129
- const instanceId = this.__instanceId__;
130
- if (!searchParamsCache.has(instanceId)) {
131
- searchParamsCache.set(instanceId, new URLSearchParams(this.__getSearch__()));
194
+ // Cache the URLSearchParams instance on first access
195
+ if (!this._cachedSearchParams) {
196
+ const url = this;
197
+ const params = new URLSearchParams(this.search);
198
+
199
+ // Wrap mutating methods to sync back to URL
200
+ const originalSet = params.set.bind(params);
201
+ const originalAppend = params.append.bind(params);
202
+ const originalDelete = params.delete.bind(params);
203
+ const originalSort = params.sort.bind(params);
204
+
205
+ params.set = function(name, value) {
206
+ originalSet(name, value);
207
+ url.search = this.toString();
208
+ };
209
+ params.append = function(name, value) {
210
+ originalAppend(name, value);
211
+ url.search = this.toString();
212
+ };
213
+ params.delete = function(name, value) {
214
+ originalDelete(name, value);
215
+ url.search = this.toString();
216
+ };
217
+ params.sort = function() {
218
+ originalSort();
219
+ url.search = this.toString();
220
+ };
221
+
222
+ this._cachedSearchParams = params;
132
223
  }
133
- return searchParamsCache.get(instanceId);
224
+ return this._cachedSearchParams;
134
225
  },
135
226
  enumerable: true,
136
227
  configurable: true
@@ -140,13 +231,15 @@ function addURLSearchParamsGetter(context) {
140
231
  if (result.error) {
141
232
  const err = context.dump(result.error);
142
233
  result.error.dispose();
143
- throw new Error(`Failed to add searchParams getter: ${JSON.stringify(err)}`);
234
+ throw new Error(`Failed to setup URL/URLSearchParams linkage: ${JSON.stringify(err)}`);
144
235
  }
145
236
  result.value.dispose();
146
237
  }
238
+ var addURLSearchParamsGetter = addURLSearchParamsLinkage;
147
239
  export {
148
240
  createURLClass,
241
+ addURLSearchParamsLinkage,
149
242
  addURLSearchParamsGetter
150
243
  };
151
244
 
152
- //# debugId=8408820A4441CF3264756E2164756E21
245
+ //# debugId=3CB02D6BB183083C64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/url.ts"],
4
4
  "sourcesContent": [
5
- "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"./types.mjs\";\nimport { defineClass } from \"./class-builder.mjs\";\n\n/**\n * Internal state for URL\n */\nexport interface URLState {\n hash: string;\n host: string;\n hostname: string;\n href: string;\n origin: string;\n password: string;\n pathname: string;\n port: string;\n protocol: string;\n search: string;\n username: string;\n}\n\n/**\n * Create the URL class for QuickJS\n *\n * Note: The searchParams property is added separately via evalCode\n * after this class is registered, as it needs to return a URLSearchParams instance.\n */\nexport function createURLClass(\n context: QuickJSContext,\n stateMap: StateMap\n): QuickJSHandle {\n return defineClass<URLState>(context, stateMap, {\n name: \"URL\",\n construct: (args) => {\n const urlString = args[0];\n const base = args[1];\n\n if (urlString === undefined) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only 0 present.\");\n }\n\n let parsed: globalThis.URL;\n try {\n if (base !== undefined) {\n // Handle base URL\n const baseStr = typeof base === \"object\" && base !== null && \"href\" in base\n ? (base as URLState).href\n : String(base);\n parsed = new globalThis.URL(String(urlString), baseStr);\n } else {\n parsed = new globalThis.URL(String(urlString));\n }\n } catch (e) {\n throw new TypeError(`Failed to construct 'URL': Invalid URL`);\n }\n\n return {\n hash: parsed.hash,\n host: parsed.host,\n hostname: parsed.hostname,\n href: parsed.href,\n origin: parsed.origin,\n password: parsed.password,\n pathname: parsed.pathname,\n port: parsed.port,\n protocol: parsed.protocol,\n search: parsed.search,\n username: parsed.username,\n };\n },\n properties: {\n hash: {\n get(this: URLState) {\n return this.hash;\n },\n },\n host: {\n get(this: URLState) {\n return this.host;\n },\n },\n hostname: {\n get(this: URLState) {\n return this.hostname;\n },\n },\n href: {\n get(this: URLState) {\n return this.href;\n },\n },\n origin: {\n get(this: URLState) {\n return this.origin;\n },\n },\n password: {\n get(this: URLState) {\n return this.password;\n },\n },\n pathname: {\n get(this: URLState) {\n return this.pathname;\n },\n },\n port: {\n get(this: URLState) {\n return this.port;\n },\n },\n protocol: {\n get(this: URLState) {\n return this.protocol;\n },\n },\n search: {\n get(this: URLState) {\n return this.search;\n },\n },\n username: {\n get(this: URLState) {\n return this.username;\n },\n },\n },\n methods: {\n toString(this: URLState): string {\n return this.href;\n },\n toJSON(this: URLState): string {\n return this.href;\n },\n // Private method to get search for URLSearchParams creation\n __getSearch__(this: URLState): string {\n return this.search;\n },\n },\n staticMethods: {\n canParse(url: unknown, base?: unknown): boolean {\n try {\n if (base !== undefined) {\n new globalThis.URL(String(url), String(base));\n } else {\n new globalThis.URL(String(url));\n }\n return true;\n } catch {\n return false;\n }\n },\n },\n });\n}\n\n/**\n * Add searchParams getter to URL prototype using evalCode\n * This must be called after both URL and URLSearchParams are registered as globals\n */\nexport function addURLSearchParamsGetter(context: QuickJSContext): void {\n // Use a WeakMap-like pattern with a Map keyed by instance ID\n // Each URL instance will cache its URLSearchParams\n const result = context.evalCode(`\n (function() {\n const searchParamsCache = new Map();\n\n Object.defineProperty(URL.prototype, 'searchParams', {\n get: function() {\n const instanceId = this.__instanceId__;\n if (!searchParamsCache.has(instanceId)) {\n searchParamsCache.set(instanceId, new URLSearchParams(this.__getSearch__()));\n }\n return searchParamsCache.get(instanceId);\n },\n enumerable: true,\n configurable: true\n });\n })();\n `);\n\n if (result.error) {\n const err = context.dump(result.error);\n result.error.dispose();\n throw new Error(`Failed to add searchParams getter: ${JSON.stringify(err)}`);\n }\n result.value.dispose();\n}\n"
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"./types.mjs\";\nimport { defineClass } from \"./class-builder.mjs\";\n\n/**\n * Internal state for URL\n */\nexport interface URLState {\n hash: string;\n host: string;\n hostname: string;\n href: string;\n origin: string;\n password: string;\n pathname: string;\n port: string;\n protocol: string;\n search: string;\n username: string;\n}\n\n/**\n * Helper to rebuild the href from URL components\n */\nfunction rebuildURLHref(state: URLState): void {\n // Build userinfo part\n let userinfo = \"\";\n if (state.username) {\n userinfo = state.password\n ? `${state.username}:${state.password}@`\n : `${state.username}@`;\n }\n\n // Build the href\n state.href = `${state.protocol}//${userinfo}${state.host}${state.pathname}${state.search}${state.hash}`;\n\n // Update origin\n state.origin = `${state.protocol}//${state.host}`;\n}\n\n/**\n * Create the URL class for QuickJS\n *\n * Note: The searchParams property is added separately via evalCode\n * after this class is registered, as it needs to return a URLSearchParams instance.\n */\nexport function createURLClass(\n context: QuickJSContext,\n stateMap: StateMap\n): QuickJSHandle {\n return defineClass<URLState>(context, stateMap, {\n name: \"URL\",\n construct: (args) => {\n const urlInput = args[0];\n const base = args[1];\n\n if (urlInput === undefined) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only 0 present.\");\n }\n\n // Handle URL object as first argument (extract href)\n const urlString = typeof urlInput === \"object\" && urlInput !== null && \"href\" in urlInput\n ? (urlInput as URLState).href\n : String(urlInput);\n\n let parsed: globalThis.URL;\n try {\n if (base !== undefined) {\n // Handle base URL\n const baseStr = typeof base === \"object\" && base !== null && \"href\" in base\n ? (base as URLState).href\n : String(base);\n parsed = new globalThis.URL(urlString, baseStr);\n } else {\n parsed = new globalThis.URL(urlString);\n }\n } catch (e) {\n throw new TypeError(`Failed to construct 'URL': Invalid URL`);\n }\n\n return {\n hash: parsed.hash,\n host: parsed.host,\n hostname: parsed.hostname,\n href: parsed.href,\n origin: parsed.origin,\n password: parsed.password,\n pathname: parsed.pathname,\n port: parsed.port,\n protocol: parsed.protocol,\n search: parsed.search,\n username: parsed.username,\n };\n },\n properties: {\n hash: {\n get(this: URLState) {\n return this.hash;\n },\n set(this: URLState, value: string) {\n this.hash = value.startsWith(\"#\") ? value : `#${value}`;\n rebuildURLHref(this);\n },\n },\n host: {\n get(this: URLState) {\n return this.host;\n },\n set(this: URLState, value: string) {\n // Parse host into hostname and port\n const colonIndex = value.lastIndexOf(\":\");\n if (colonIndex > -1 && !value.includes(\"]\", colonIndex)) {\n this.hostname = value.slice(0, colonIndex);\n this.port = value.slice(colonIndex + 1);\n } else {\n this.hostname = value;\n this.port = \"\";\n }\n this.host = value;\n rebuildURLHref(this);\n },\n },\n hostname: {\n get(this: URLState) {\n return this.hostname;\n },\n set(this: URLState, value: string) {\n this.hostname = value;\n this.host = this.port ? `${value}:${this.port}` : value;\n rebuildURLHref(this);\n },\n },\n href: {\n get(this: URLState) {\n return this.href;\n },\n set(this: URLState, value: string) {\n // Parse the new href and update all properties\n const parsed = new globalThis.URL(value);\n this.hash = parsed.hash;\n this.host = parsed.host;\n this.hostname = parsed.hostname;\n this.href = parsed.href;\n this.origin = parsed.origin;\n this.password = parsed.password;\n this.pathname = parsed.pathname;\n this.port = parsed.port;\n this.protocol = parsed.protocol;\n this.search = parsed.search;\n this.username = parsed.username;\n },\n },\n origin: {\n get(this: URLState) {\n return this.origin;\n },\n // origin is read-only per spec\n },\n password: {\n get(this: URLState) {\n return this.password;\n },\n set(this: URLState, value: string) {\n this.password = value;\n rebuildURLHref(this);\n },\n },\n pathname: {\n get(this: URLState) {\n return this.pathname;\n },\n set(this: URLState, value: string) {\n this.pathname = value.startsWith(\"/\") ? value : `/${value}`;\n rebuildURLHref(this);\n },\n },\n port: {\n get(this: URLState) {\n return this.port;\n },\n set(this: URLState, value: string) {\n this.port = value;\n this.host = value ? `${this.hostname}:${value}` : this.hostname;\n rebuildURLHref(this);\n },\n },\n protocol: {\n get(this: URLState) {\n return this.protocol;\n },\n set(this: URLState, value: string) {\n this.protocol = value.endsWith(\":\") ? value : `${value}:`;\n // Update origin\n this.origin = `${this.protocol}//${this.host}`;\n rebuildURLHref(this);\n },\n },\n search: {\n get(this: URLState) {\n return this.search;\n },\n set(this: URLState, value: string) {\n this.search = value && !value.startsWith(\"?\") ? `?${value}` : value;\n rebuildURLHref(this);\n },\n },\n username: {\n get(this: URLState) {\n return this.username;\n },\n set(this: URLState, value: string) {\n this.username = value;\n rebuildURLHref(this);\n },\n },\n },\n methods: {\n toString(this: URLState): string {\n return this.href;\n },\n toJSON(this: URLState): string {\n return this.href;\n },\n },\n staticMethods: {\n canParse(url: unknown, base?: unknown): boolean {\n try {\n if (base !== undefined) {\n new globalThis.URL(String(url), String(base));\n } else {\n new globalThis.URL(String(url));\n }\n return true;\n } catch {\n return false;\n }\n },\n },\n });\n}\n\n/**\n * Add searchParams getter to URL prototype using evalCode\n * This must be called after both URL and URLSearchParams are registered as globals\n *\n * The getter creates a URLSearchParams instance on first access and wraps its\n * mutating methods (set, append, delete, sort) to sync changes back to the URL.\n * This eliminates cross-module coupling by keeping all sync logic in JavaScript.\n */\nexport function addURLSearchParamsLinkage(context: QuickJSContext): void {\n const result = context.evalCode(`\n (function() {\n Object.defineProperty(URL.prototype, 'searchParams', {\n get: function() {\n // Cache the URLSearchParams instance on first access\n if (!this._cachedSearchParams) {\n const url = this;\n const params = new URLSearchParams(this.search);\n\n // Wrap mutating methods to sync back to URL\n const originalSet = params.set.bind(params);\n const originalAppend = params.append.bind(params);\n const originalDelete = params.delete.bind(params);\n const originalSort = params.sort.bind(params);\n\n params.set = function(name, value) {\n originalSet(name, value);\n url.search = this.toString();\n };\n params.append = function(name, value) {\n originalAppend(name, value);\n url.search = this.toString();\n };\n params.delete = function(name, value) {\n originalDelete(name, value);\n url.search = this.toString();\n };\n params.sort = function() {\n originalSort();\n url.search = this.toString();\n };\n\n this._cachedSearchParams = params;\n }\n return this._cachedSearchParams;\n },\n enumerable: true,\n configurable: true\n });\n })();\n `);\n\n if (result.error) {\n const err = context.dump(result.error);\n result.error.dispose();\n throw new Error(`Failed to setup URL/URLSearchParams linkage: ${JSON.stringify(err)}`);\n }\n result.value.dispose();\n}\n\n/**\n * @deprecated Use addURLSearchParamsLinkage instead\n */\nexport const addURLSearchParamsGetter = addURLSearchParamsLinkage;\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "8408820A4441CF3264756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "3CB02D6BB183083C64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -43,3 +43,35 @@ export declare function getInstanceId(value: unknown): number | undefined;
43
43
  * Get the class name from an unmarshalled value if it's a defineClass instance
44
44
  */
45
45
  export declare function getClassName(value: unknown): string | undefined;
46
+ /**
47
+ * Interface for typed class instance with specific class name
48
+ */
49
+ export interface TypedClassInstance<T extends string> extends DefineClassInstance {
50
+ __className__: T;
51
+ }
52
+ /**
53
+ * Create a type guard for a specific class name
54
+ *
55
+ * @example
56
+ * const isRequest = createClassTypeGuard<"Request">("Request");
57
+ * if (isRequest(value)) {
58
+ * // value is TypedClassInstance<"Request">
59
+ * }
60
+ */
61
+ export declare function createClassTypeGuard<T extends string>(className: T): (value: unknown) => value is TypedClassInstance<T>;
62
+ /**
63
+ * Pre-built type guard for Request instances
64
+ */
65
+ export declare const isUnmarshalledRequest: (value: unknown) => value is TypedClassInstance<"Request">;
66
+ /**
67
+ * Pre-built type guard for Response instances
68
+ */
69
+ export declare const isUnmarshalledResponse: (value: unknown) => value is TypedClassInstance<"Response">;
70
+ /**
71
+ * Pre-built type guard for Headers instances
72
+ */
73
+ export declare const isUnmarshalledHeaders: (value: unknown) => value is TypedClassInstance<"Headers">;
74
+ /**
75
+ * Pre-built type guard for FormData instances
76
+ */
77
+ export declare const isUnmarshalledFormData: (value: unknown) => value is TypedClassInstance<"FormData">;