@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.
- package/dist/cjs/class-builder.cjs +42 -5
- package/dist/cjs/class-builder.cjs.map +3 -3
- package/dist/cjs/class-helpers.cjs +16 -2
- package/dist/cjs/class-helpers.cjs.map +3 -3
- package/dist/cjs/coerce.cjs +320 -0
- package/dist/cjs/coerce.cjs.map +10 -0
- package/dist/cjs/file.cjs +2 -1
- package/dist/cjs/file.cjs.map +3 -3
- package/dist/cjs/index.cjs +18 -2
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/unmarshal.cjs +105 -6
- package/dist/cjs/unmarshal.cjs.map +3 -3
- package/dist/cjs/url.cjs +109 -16
- package/dist/cjs/url.cjs.map +3 -3
- package/dist/mjs/class-builder.mjs +42 -5
- package/dist/mjs/class-builder.mjs.map +3 -3
- package/dist/mjs/class-helpers.mjs +16 -2
- package/dist/mjs/class-helpers.mjs.map +3 -3
- package/dist/mjs/coerce.mjs +292 -0
- package/dist/mjs/coerce.mjs.map +10 -0
- package/dist/mjs/file.mjs +2 -1
- package/dist/mjs/file.mjs.map +3 -3
- package/dist/mjs/index.mjs +36 -5
- package/dist/mjs/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/unmarshal.mjs +105 -6
- package/dist/mjs/unmarshal.mjs.map +3 -3
- package/dist/mjs/url.mjs +109 -16
- package/dist/mjs/url.mjs.map +3 -3
- package/dist/types/class-helpers.d.ts +32 -0
- package/dist/types/coerce.d.ts +98 -0
- package/dist/types/index.d.ts +5 -3
- package/dist/types/url.d.ts +9 -1
- package/package.json +1 -1
package/dist/mjs/unmarshal.mjs
CHANGED
|
@@ -220,11 +220,110 @@ function unmarshal(context, handle, options = {}) {
|
|
|
220
220
|
instanceIdHandle.dispose();
|
|
221
221
|
const metadata = getInstanceMetadata(instanceId);
|
|
222
222
|
if (metadata) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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=
|
|
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": "
|
|
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
|
|
16
|
+
const urlInput = args[0];
|
|
9
17
|
const base = args[1];
|
|
10
|
-
if (
|
|
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(
|
|
26
|
+
parsed = new globalThis.URL(urlString, baseStr);
|
|
18
27
|
} else {
|
|
19
|
-
parsed = new globalThis.URL(
|
|
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
|
|
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
|
-
|
|
130
|
-
if (!
|
|
131
|
-
|
|
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
|
|
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
|
|
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=
|
|
245
|
+
//# debugId=3CB02D6BB183083C64756E2164756E21
|
package/dist/mjs/url.mjs.map
CHANGED
|
@@ -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
|
|
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": ";;AAEA;
|
|
8
|
-
"debugId": "
|
|
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">;
|