@ricsam/quickjs-core 0.0.1 → 0.2.1

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.
Files changed (79) hide show
  1. package/README.md +36 -43
  2. package/dist/cjs/blob.cjs +197 -0
  3. package/dist/cjs/blob.cjs.map +10 -0
  4. package/dist/cjs/class-builder.cjs +244 -0
  5. package/dist/cjs/class-builder.cjs.map +10 -0
  6. package/dist/cjs/dom-exception.cjs +95 -0
  7. package/dist/cjs/dom-exception.cjs.map +10 -0
  8. package/dist/cjs/file.cjs +234 -0
  9. package/dist/cjs/file.cjs.map +10 -0
  10. package/dist/cjs/function-builder.cjs +70 -0
  11. package/dist/cjs/function-builder.cjs.map +10 -0
  12. package/dist/cjs/index.cjs +143 -0
  13. package/dist/cjs/index.cjs.map +10 -0
  14. package/dist/cjs/marshal.cjs +191 -0
  15. package/dist/cjs/marshal.cjs.map +10 -0
  16. package/dist/cjs/package.json +5 -0
  17. package/dist/cjs/readable-stream.cjs +588 -0
  18. package/dist/cjs/readable-stream.cjs.map +10 -0
  19. package/dist/cjs/scope.cjs +76 -0
  20. package/dist/cjs/scope.cjs.map +10 -0
  21. package/dist/cjs/transform-stream.cjs +152 -0
  22. package/dist/cjs/transform-stream.cjs.map +10 -0
  23. package/dist/cjs/types.cjs +39 -0
  24. package/dist/cjs/types.cjs.map +10 -0
  25. package/dist/cjs/unmarshal.cjs +254 -0
  26. package/dist/cjs/unmarshal.cjs.map +10 -0
  27. package/dist/cjs/url-search-params.cjs +165 -0
  28. package/dist/cjs/url-search-params.cjs.map +10 -0
  29. package/dist/cjs/url.cjs +183 -0
  30. package/dist/cjs/url.cjs.map +10 -0
  31. package/dist/cjs/writable-stream.cjs +513 -0
  32. package/dist/cjs/writable-stream.cjs.map +10 -0
  33. package/dist/mjs/blob.mjs +166 -0
  34. package/dist/mjs/blob.mjs.map +10 -0
  35. package/dist/mjs/class-builder.mjs +213 -0
  36. package/dist/mjs/class-builder.mjs.map +10 -0
  37. package/dist/mjs/dom-exception.mjs +64 -0
  38. package/dist/mjs/dom-exception.mjs.map +10 -0
  39. package/dist/mjs/file.mjs +203 -0
  40. package/dist/mjs/file.mjs.map +10 -0
  41. package/dist/mjs/function-builder.mjs +39 -0
  42. package/dist/mjs/function-builder.mjs.map +10 -0
  43. package/dist/mjs/index.mjs +132 -0
  44. package/dist/mjs/index.mjs.map +10 -0
  45. package/dist/mjs/marshal.mjs +160 -0
  46. package/dist/mjs/marshal.mjs.map +10 -0
  47. package/dist/mjs/package.json +5 -0
  48. package/dist/mjs/readable-stream.mjs +557 -0
  49. package/dist/mjs/readable-stream.mjs.map +10 -0
  50. package/dist/mjs/scope.mjs +45 -0
  51. package/dist/mjs/scope.mjs.map +10 -0
  52. package/dist/mjs/transform-stream.mjs +121 -0
  53. package/dist/mjs/transform-stream.mjs.map +10 -0
  54. package/dist/mjs/types.mjs +8 -0
  55. package/dist/mjs/types.mjs.map +10 -0
  56. package/dist/mjs/unmarshal.mjs +223 -0
  57. package/dist/mjs/unmarshal.mjs.map +10 -0
  58. package/dist/mjs/url-search-params.mjs +134 -0
  59. package/dist/mjs/url-search-params.mjs.map +10 -0
  60. package/dist/mjs/url.mjs +152 -0
  61. package/dist/mjs/url.mjs.map +10 -0
  62. package/dist/mjs/writable-stream.mjs +482 -0
  63. package/dist/mjs/writable-stream.mjs.map +10 -0
  64. package/dist/types/blob.d.ts +19 -0
  65. package/dist/types/class-builder.d.ts +62 -0
  66. package/dist/types/dom-exception.d.ts +8 -0
  67. package/dist/types/file.d.ts +10 -0
  68. package/dist/types/function-builder.d.ts +23 -0
  69. package/dist/types/index.d.ts +45 -0
  70. package/dist/types/marshal.d.ts +30 -0
  71. package/dist/types/scope.d.ts +18 -0
  72. package/dist/types/streams/readable-stream.d.ts +18 -0
  73. package/dist/types/streams/transform-stream.d.ts +6 -0
  74. package/dist/types/streams/writable-stream.d.ts +14 -0
  75. package/dist/types/types.d.ts +83 -0
  76. package/dist/types/unmarshal.d.ts +14 -0
  77. package/dist/types/url-search-params.d.ts +12 -0
  78. package/dist/types/url.d.ts +30 -0
  79. package/package.json +50 -6
@@ -0,0 +1,95 @@
1
+ // @bun @bun-cjs
2
+ (function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
7
+ var __toCommonJS = (from) => {
8
+ var entry = __moduleCache.get(from), desc;
9
+ if (entry)
10
+ return entry;
11
+ entry = __defProp({}, "__esModule", { value: true });
12
+ if (from && typeof from === "object" || typeof from === "function")
13
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ }));
17
+ __moduleCache.set(from, entry);
18
+ return entry;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, {
23
+ get: all[name],
24
+ enumerable: true,
25
+ configurable: true,
26
+ set: (newValue) => all[name] = () => newValue
27
+ });
28
+ };
29
+
30
+ // packages/core/src/dom-exception.ts
31
+ var exports_dom_exception = {};
32
+ __export(exports_dom_exception, {
33
+ createDOMExceptionClass: () => createDOMExceptionClass
34
+ });
35
+ module.exports = __toCommonJS(exports_dom_exception);
36
+ var import_class_builder = require("./class-builder.ts");
37
+ var ERROR_CODES = {
38
+ IndexSizeError: 1,
39
+ HierarchyRequestError: 3,
40
+ WrongDocumentError: 4,
41
+ InvalidCharacterError: 5,
42
+ NoModificationAllowedError: 7,
43
+ NotFoundError: 8,
44
+ NotSupportedError: 9,
45
+ InvalidStateError: 11,
46
+ SyntaxError: 12,
47
+ InvalidModificationError: 13,
48
+ NamespaceError: 14,
49
+ InvalidAccessError: 15,
50
+ TypeMismatchError: 17,
51
+ SecurityError: 18,
52
+ NetworkError: 19,
53
+ AbortError: 20,
54
+ URLMismatchError: 21,
55
+ QuotaExceededError: 22,
56
+ TimeoutError: 23,
57
+ InvalidNodeTypeError: 24,
58
+ DataCloneError: 25
59
+ };
60
+ function createDOMExceptionClass(context, stateMap) {
61
+ return import_class_builder.defineClass(context, stateMap, {
62
+ name: "DOMException",
63
+ construct: (args) => {
64
+ const message = args[0] !== undefined ? String(args[0]) : "";
65
+ const name = args[1] !== undefined ? String(args[1]) : "Error";
66
+ const code = ERROR_CODES[name] ?? 0;
67
+ return { message, name, code };
68
+ },
69
+ properties: {
70
+ message: {
71
+ get() {
72
+ return this.message;
73
+ }
74
+ },
75
+ name: {
76
+ get() {
77
+ return this.name;
78
+ }
79
+ },
80
+ code: {
81
+ get() {
82
+ return this.code;
83
+ }
84
+ }
85
+ },
86
+ methods: {
87
+ toString() {
88
+ return `${this.name}: ${this.message}`;
89
+ }
90
+ }
91
+ });
92
+ }
93
+ })
94
+
95
+ //# debugId=882F3FF59958D4A764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/dom-exception.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"./types.ts\";\nimport { defineClass } from \"./class-builder.ts\";\n\nexport interface DOMExceptionState {\n message: string;\n name: string;\n code: number;\n}\n\n// Standard DOMException error codes\nconst ERROR_CODES: Record<string, number> = {\n IndexSizeError: 1,\n HierarchyRequestError: 3,\n WrongDocumentError: 4,\n InvalidCharacterError: 5,\n NoModificationAllowedError: 7,\n NotFoundError: 8,\n NotSupportedError: 9,\n InvalidStateError: 11,\n SyntaxError: 12,\n InvalidModificationError: 13,\n NamespaceError: 14,\n InvalidAccessError: 15,\n TypeMismatchError: 17,\n SecurityError: 18,\n NetworkError: 19,\n AbortError: 20,\n URLMismatchError: 21,\n QuotaExceededError: 22,\n TimeoutError: 23,\n InvalidNodeTypeError: 24,\n DataCloneError: 25,\n};\n\nexport function createDOMExceptionClass(\n context: QuickJSContext,\n stateMap: StateMap\n): QuickJSHandle {\n return defineClass<DOMExceptionState>(context, stateMap, {\n name: \"DOMException\",\n construct: (args) => {\n const message = args[0] !== undefined ? String(args[0]) : \"\";\n const name = args[1] !== undefined ? String(args[1]) : \"Error\";\n const code = ERROR_CODES[name] ?? 0;\n return { message, name, code };\n },\n properties: {\n message: {\n get(this: DOMExceptionState) {\n return this.message;\n },\n },\n name: {\n get(this: DOMExceptionState) {\n return this.name;\n },\n },\n code: {\n get(this: DOMExceptionState) {\n return this.code;\n },\n },\n },\n methods: {\n toString(this: DOMExceptionState) {\n return `${this.name}: ${this.message}`;\n },\n },\n });\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE4B,IAA5B;AASA,IAAM,cAAsC;AAAA,EAC1C,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,gBAAgB;AAClB;AAEO,SAAS,uBAAuB,CACrC,SACA,UACe;AAAA,EACf,OAAO,iCAA+B,SAAS,UAAU;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,SAAS;AAAA,MACnB,MAAM,UAAU,KAAK,OAAO,YAAY,OAAO,KAAK,EAAE,IAAI;AAAA,MAC1D,MAAM,OAAO,KAAK,OAAO,YAAY,OAAO,KAAK,EAAE,IAAI;AAAA,MACvD,MAAM,OAAO,YAAY,SAAS;AAAA,MAClC,OAAO,EAAE,SAAS,MAAM,KAAK;AAAA;AAAA,IAE/B,YAAY;AAAA,MACV,SAAS;AAAA,QACP,GAAG,GAA0B;AAAA,UAC3B,OAAO,KAAK;AAAA;AAAA,MAEhB;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,GAA0B;AAAA,UAC3B,OAAO,KAAK;AAAA;AAAA,MAEhB;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,GAA0B;AAAA,UAC3B,OAAO,KAAK;AAAA;AAAA,MAEhB;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,QAAQ,GAA0B;AAAA,QAChC,OAAO,GAAG,KAAK,SAAS,KAAK;AAAA;AAAA,IAEjC;AAAA,EACF,CAAC;AAAA;",
8
+ "debugId": "882F3FF59958D4A764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,234 @@
1
+ // @bun @bun-cjs
2
+ (function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
7
+ var __toCommonJS = (from) => {
8
+ var entry = __moduleCache.get(from), desc;
9
+ if (entry)
10
+ return entry;
11
+ entry = __defProp({}, "__esModule", { value: true });
12
+ if (from && typeof from === "object" || typeof from === "function")
13
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ }));
17
+ __moduleCache.set(from, entry);
18
+ return entry;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, {
23
+ get: all[name],
24
+ enumerable: true,
25
+ configurable: true,
26
+ set: (newValue) => all[name] = () => newValue
27
+ });
28
+ };
29
+
30
+ // packages/core/src/file.ts
31
+ var exports_file = {};
32
+ __export(exports_file, {
33
+ createFileClass: () => createFileClass,
34
+ createFile: () => createFile
35
+ });
36
+ module.exports = __toCommonJS(exports_file);
37
+ var import_class_builder = require("./class-builder.ts");
38
+ function normalizeParts(parts) {
39
+ const result = [];
40
+ for (const part of parts) {
41
+ if (typeof part === "string") {
42
+ result.push(new TextEncoder().encode(part));
43
+ } else if (part instanceof Uint8Array) {
44
+ result.push(part);
45
+ } else if (part instanceof ArrayBuffer) {
46
+ result.push(new Uint8Array(part));
47
+ } else if (ArrayBuffer.isView(part)) {
48
+ result.push(new Uint8Array(part.buffer, part.byteOffset, part.byteLength));
49
+ } else if (part && typeof part === "object") {
50
+ if ("byteLength" in part && typeof part.byteLength === "number") {
51
+ try {
52
+ result.push(new Uint8Array(part));
53
+ } catch {
54
+ if ("buffer" in part && "byteOffset" in part) {
55
+ const view = part;
56
+ try {
57
+ result.push(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
58
+ } catch {}
59
+ }
60
+ }
61
+ } else if ("parts" in part) {
62
+ const blobParts = part.parts;
63
+ result.push(...blobParts);
64
+ }
65
+ }
66
+ }
67
+ return result;
68
+ }
69
+ function concatenateParts(parts) {
70
+ const totalLength = parts.reduce((sum, part) => sum + part.length, 0);
71
+ const result = new Uint8Array(totalLength);
72
+ let offset = 0;
73
+ for (const part of parts) {
74
+ result.set(part, offset);
75
+ offset += part.length;
76
+ }
77
+ return result;
78
+ }
79
+ function createFileClass(context, stateMap, _blobClass) {
80
+ return import_class_builder.defineClass(context, stateMap, {
81
+ name: "File",
82
+ construct: (args) => {
83
+ const fileBits = args[0];
84
+ const fileName = args[1];
85
+ const options = args[2];
86
+ const parts = fileBits ? normalizeParts(fileBits) : [];
87
+ const size = parts.reduce((sum, part) => sum + part.length, 0);
88
+ const type = options?.type ?? "";
89
+ const lastModified = options?.lastModified ?? Date.now();
90
+ return {
91
+ parts,
92
+ type,
93
+ size,
94
+ name: String(fileName),
95
+ lastModified,
96
+ webkitRelativePath: ""
97
+ };
98
+ },
99
+ properties: {
100
+ size: {
101
+ get() {
102
+ return this.size;
103
+ }
104
+ },
105
+ type: {
106
+ get() {
107
+ return this.type;
108
+ }
109
+ },
110
+ name: {
111
+ get() {
112
+ return this.name;
113
+ }
114
+ },
115
+ lastModified: {
116
+ get() {
117
+ return this.lastModified;
118
+ }
119
+ },
120
+ webkitRelativePath: {
121
+ get() {
122
+ return this.webkitRelativePath;
123
+ }
124
+ }
125
+ },
126
+ methods: {
127
+ async text() {
128
+ const data = concatenateParts(this.parts);
129
+ return new TextDecoder().decode(data);
130
+ },
131
+ async arrayBuffer() {
132
+ const data = concatenateParts(this.parts);
133
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
134
+ },
135
+ async bytes() {
136
+ return concatenateParts(this.parts);
137
+ },
138
+ slice(start, end, contentType) {
139
+ const data = concatenateParts(this.parts);
140
+ const startIndex = typeof start === "number" ? start : 0;
141
+ const endIndex = typeof end === "number" ? end : data.length;
142
+ const sliced = data.slice(startIndex, endIndex);
143
+ return {
144
+ parts: [sliced],
145
+ type: typeof contentType === "string" ? contentType : this.type,
146
+ size: sliced.length
147
+ };
148
+ },
149
+ stream() {
150
+ const data = concatenateParts(this.parts);
151
+ let offset = 0;
152
+ const chunkSize = 65536;
153
+ return {
154
+ pull: (controller) => {
155
+ if (offset >= data.length) {
156
+ controller.close();
157
+ return;
158
+ }
159
+ const chunk = data.slice(offset, Math.min(offset + chunkSize, data.length));
160
+ offset += chunk.length;
161
+ controller.enqueue(chunk);
162
+ }
163
+ };
164
+ }
165
+ }
166
+ });
167
+ }
168
+ function createFile(context, stateMap, parts, name, options) {
169
+ const FileConstructor = context.getProp(context.global, "File");
170
+ const partsHandle = context.newArray();
171
+ for (let i = 0;i < parts.length; i++) {
172
+ const part = parts[i];
173
+ let partHandle;
174
+ if (typeof part === "string") {
175
+ partHandle = context.newString(part);
176
+ } else if (part instanceof ArrayBuffer) {
177
+ partHandle = context.newArrayBuffer(part);
178
+ } else if (part instanceof Uint8Array) {
179
+ partHandle = context.newArrayBuffer(part.buffer.slice(part.byteOffset, part.byteOffset + part.byteLength));
180
+ } else if (part instanceof Blob) {
181
+ partHandle = context.newString("[Blob]");
182
+ } else {
183
+ partHandle = context.newString(String(part));
184
+ }
185
+ context.setProp(partsHandle, i, partHandle);
186
+ partHandle.dispose();
187
+ }
188
+ const nameHandle = context.newString(name);
189
+ const optionsHandle = context.newObject();
190
+ if (options?.type) {
191
+ const typeHandle = context.newString(options.type);
192
+ context.setProp(optionsHandle, "type", typeHandle);
193
+ typeHandle.dispose();
194
+ }
195
+ if (options?.lastModified !== undefined) {
196
+ const lastModifiedHandle = context.newNumber(options.lastModified);
197
+ context.setProp(optionsHandle, "lastModified", lastModifiedHandle);
198
+ lastModifiedHandle.dispose();
199
+ }
200
+ FileConstructor.dispose();
201
+ context.setProp(context.global, "__tempFileParts__", partsHandle);
202
+ context.setProp(context.global, "__tempFileName__", nameHandle);
203
+ context.setProp(context.global, "__tempFileOptions__", optionsHandle);
204
+ partsHandle.dispose();
205
+ nameHandle.dispose();
206
+ optionsHandle.dispose();
207
+ const result = context.evalCode("new File(__tempFileParts__, __tempFileName__, __tempFileOptions__)");
208
+ const cleanup1 = context.evalCode("delete globalThis.__tempFileParts__");
209
+ const cleanup2 = context.evalCode("delete globalThis.__tempFileName__");
210
+ const cleanup3 = context.evalCode("delete globalThis.__tempFileOptions__");
211
+ if (cleanup1.error)
212
+ cleanup1.error.dispose();
213
+ else
214
+ cleanup1.value.dispose();
215
+ if (cleanup2.error)
216
+ cleanup2.error.dispose();
217
+ else
218
+ cleanup2.value.dispose();
219
+ if (cleanup3.error)
220
+ cleanup3.error.dispose();
221
+ else
222
+ cleanup3.value.dispose();
223
+ if (result.error) {
224
+ const msgHandle = context.getProp(result.error, "message");
225
+ const errorMsg = context.dump(msgHandle);
226
+ msgHandle.dispose();
227
+ result.error.dispose();
228
+ throw new Error(`Failed to create File: ${errorMsg}`);
229
+ }
230
+ return result.value;
231
+ }
232
+ })
233
+
234
+ //# debugId=8FE650706EACE5BA64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/file.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"./types.ts\";\nimport { defineClass } from \"./class-builder.ts\";\n\ninterface FileInternalState {\n parts: Uint8Array[];\n type: string;\n size: number;\n name: string;\n lastModified: number;\n webkitRelativePath: string;\n}\n\n/**\n * Normalize file parts to Uint8Array\n * Handles various input types including cross-realm ArrayBuffer/Uint8Array\n */\nfunction normalizeParts(parts: unknown[]): Uint8Array[] {\n const result: Uint8Array[] = [];\n\n for (const part of parts) {\n if (typeof part === \"string\") {\n result.push(new TextEncoder().encode(part));\n } else if (part instanceof Uint8Array) {\n result.push(part);\n } else if (part instanceof ArrayBuffer) {\n result.push(new Uint8Array(part));\n } else if (ArrayBuffer.isView(part)) {\n result.push(new Uint8Array(part.buffer, part.byteOffset, part.byteLength));\n } else if (part && typeof part === \"object\") {\n // Handle cross-realm or duck-typed ArrayBuffer-like objects\n if (\"byteLength\" in part && typeof (part as ArrayBuffer).byteLength === \"number\") {\n try {\n // Try as ArrayBuffer\n result.push(new Uint8Array(part as ArrayBuffer));\n } catch {\n // If that fails, try as TypedArray-like with buffer property\n if (\"buffer\" in part && \"byteOffset\" in part) {\n const view = part as ArrayBufferView;\n try {\n result.push(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\n } catch {\n // Skip invalid parts\n }\n }\n }\n } else if (\"parts\" in part) {\n // Another Blob-like object\n const blobParts = (part as { parts: Uint8Array[] }).parts;\n result.push(...blobParts);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Concatenate Uint8Arrays into a single Uint8Array\n */\nfunction concatenateParts(parts: Uint8Array[]): Uint8Array {\n const totalLength = parts.reduce((sum, part) => sum + part.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const part of parts) {\n result.set(part, offset);\n offset += part.length;\n }\n return result;\n}\n\n/**\n * Create the File class for QuickJS (extends Blob)\n */\nexport function createFileClass(\n context: QuickJSContext,\n stateMap: StateMap,\n _blobClass: QuickJSHandle\n): QuickJSHandle {\n return defineClass<FileInternalState>(context, stateMap, {\n name: \"File\",\n construct: (args) => {\n const fileBits = args[0] as unknown[] | undefined;\n const fileName = args[1] as string;\n const options = args[2] as { type?: string; lastModified?: number } | undefined;\n\n const parts = fileBits ? normalizeParts(fileBits) : [];\n const size = parts.reduce((sum, part) => sum + part.length, 0);\n const type = options?.type ?? \"\";\n const lastModified = options?.lastModified ?? Date.now();\n\n return {\n parts,\n type,\n size,\n name: String(fileName),\n lastModified,\n webkitRelativePath: \"\",\n };\n },\n properties: {\n size: {\n get(this: FileInternalState) {\n return this.size;\n },\n },\n type: {\n get(this: FileInternalState) {\n return this.type;\n },\n },\n name: {\n get(this: FileInternalState) {\n return this.name;\n },\n },\n lastModified: {\n get(this: FileInternalState) {\n return this.lastModified;\n },\n },\n webkitRelativePath: {\n get(this: FileInternalState) {\n return this.webkitRelativePath;\n },\n },\n },\n methods: {\n async text(this: FileInternalState): Promise<string> {\n const data = concatenateParts(this.parts);\n return new TextDecoder().decode(data);\n },\n async arrayBuffer(this: FileInternalState): Promise<ArrayBuffer> {\n const data = concatenateParts(this.parts);\n return data.buffer.slice(\n data.byteOffset,\n data.byteOffset + data.byteLength\n ) as ArrayBuffer;\n },\n async bytes(this: FileInternalState): Promise<Uint8Array> {\n return concatenateParts(this.parts);\n },\n slice(\n this: FileInternalState,\n start?: unknown,\n end?: unknown,\n contentType?: unknown\n ): object {\n const data = concatenateParts(this.parts);\n const startIndex = typeof start === \"number\" ? start : 0;\n const endIndex = typeof end === \"number\" ? end : data.length;\n const sliced = data.slice(startIndex, endIndex);\n\n // Return a Blob-like state (not a File, as per spec)\n return {\n parts: [sliced],\n type: typeof contentType === \"string\" ? contentType : this.type,\n size: sliced.length,\n };\n },\n stream(this: FileInternalState): object {\n const data = concatenateParts(this.parts);\n let offset = 0;\n const chunkSize = 65536; // 64KB chunks\n\n return {\n pull: (controller: { enqueue: (chunk: unknown) => void; close: () => void }) => {\n if (offset >= data.length) {\n controller.close();\n return;\n }\n\n const chunk = data.slice(offset, Math.min(offset + chunkSize, data.length));\n offset += chunk.length;\n controller.enqueue(chunk);\n },\n };\n },\n },\n });\n}\n\n/**\n * Create a File in QuickJS from host data\n */\nexport function createFile(\n context: QuickJSContext,\n stateMap: StateMap,\n parts: BlobPart[],\n name: string,\n options?: FilePropertyBag\n): QuickJSHandle {\n // Get the File constructor from global\n const FileConstructor = context.getProp(context.global, \"File\");\n\n // Marshal the parts\n const partsHandle = context.newArray();\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n let partHandle: QuickJSHandle;\n\n if (typeof part === \"string\") {\n partHandle = context.newString(part);\n } else if (part instanceof ArrayBuffer) {\n partHandle = context.newArrayBuffer(part);\n } else if (part instanceof Uint8Array) {\n partHandle = context.newArrayBuffer(\n part.buffer.slice(part.byteOffset, part.byteOffset + part.byteLength)\n );\n } else if (part instanceof Blob) {\n partHandle = context.newString(\"[Blob]\");\n } else {\n partHandle = context.newString(String(part));\n }\n\n context.setProp(partsHandle, i, partHandle);\n partHandle.dispose();\n }\n\n // Marshal name\n const nameHandle = context.newString(name);\n\n // Marshal options\n const optionsHandle = context.newObject();\n if (options?.type) {\n const typeHandle = context.newString(options.type);\n context.setProp(optionsHandle, \"type\", typeHandle);\n typeHandle.dispose();\n }\n if (options?.lastModified !== undefined) {\n const lastModifiedHandle = context.newNumber(options.lastModified);\n context.setProp(optionsHandle, \"lastModified\", lastModifiedHandle);\n lastModifiedHandle.dispose();\n }\n\n FileConstructor.dispose();\n\n // Set temporary globals for evalCode\n context.setProp(context.global, \"__tempFileParts__\", partsHandle);\n context.setProp(context.global, \"__tempFileName__\", nameHandle);\n context.setProp(context.global, \"__tempFileOptions__\", optionsHandle);\n partsHandle.dispose();\n nameHandle.dispose();\n optionsHandle.dispose();\n\n // Create File using evalCode with 'new' (callFunction doesn't work with constructors)\n const result = context.evalCode(\n \"new File(__tempFileParts__, __tempFileName__, __tempFileOptions__)\"\n );\n\n // Clean up temporary globals\n const cleanup1 = context.evalCode(\"delete globalThis.__tempFileParts__\");\n const cleanup2 = context.evalCode(\"delete globalThis.__tempFileName__\");\n const cleanup3 = context.evalCode(\"delete globalThis.__tempFileOptions__\");\n if (cleanup1.error) cleanup1.error.dispose();\n else cleanup1.value.dispose();\n if (cleanup2.error) cleanup2.error.dispose();\n else cleanup2.value.dispose();\n if (cleanup3.error) cleanup3.error.dispose();\n else cleanup3.value.dispose();\n\n if (result.error) {\n const msgHandle = context.getProp(result.error, \"message\");\n const errorMsg = context.dump(msgHandle);\n msgHandle.dispose();\n result.error.dispose();\n throw new Error(`Failed to create File: ${errorMsg}`);\n }\n\n return result.value;\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "8FE650706EACE5BA64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,70 @@
1
+ // @bun @bun-cjs
2
+ (function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
7
+ var __toCommonJS = (from) => {
8
+ var entry = __moduleCache.get(from), desc;
9
+ if (entry)
10
+ return entry;
11
+ entry = __defProp({}, "__esModule", { value: true });
12
+ if (from && typeof from === "object" || typeof from === "function")
13
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ }));
17
+ __moduleCache.set(from, entry);
18
+ return entry;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, {
23
+ get: all[name],
24
+ enumerable: true,
25
+ configurable: true,
26
+ set: (newValue) => all[name] = () => newValue
27
+ });
28
+ };
29
+
30
+ // packages/core/src/function-builder.ts
31
+ var exports_function_builder = {};
32
+ __export(exports_function_builder, {
33
+ defineFunction: () => defineFunction,
34
+ defineAsyncFunction: () => defineAsyncFunction
35
+ });
36
+ module.exports = __toCommonJS(exports_function_builder);
37
+ var import_unmarshal = require("./unmarshal.ts");
38
+ var import_marshal = require("./marshal.ts");
39
+ function defineFunction(context, name, fn) {
40
+ return context.newFunction(name, (...argHandles) => {
41
+ const args = argHandles.map((h) => import_unmarshal.unmarshal(context, h));
42
+ try {
43
+ const result = fn(...args);
44
+ return import_marshal.marshal(context, result);
45
+ } catch (error) {
46
+ throw context.newError(error instanceof Error ? error.message : String(error));
47
+ }
48
+ });
49
+ }
50
+ function defineAsyncFunction(context, name, fn) {
51
+ return context.newFunction(name, (...argHandles) => {
52
+ const args = argHandles.map((h) => import_unmarshal.unmarshal(context, h));
53
+ const deferred = context.newPromise();
54
+ fn(...args).then((result) => {
55
+ const resultHandle = import_marshal.marshal(context, result);
56
+ deferred.resolve(resultHandle);
57
+ resultHandle.dispose();
58
+ context.runtime.executePendingJobs();
59
+ }).catch((error) => {
60
+ const errorHandle = import_marshal.marshal(context, error instanceof Error ? { name: error.name, message: error.message } : { message: String(error) });
61
+ deferred.reject(errorHandle);
62
+ errorHandle.dispose();
63
+ context.runtime.executePendingJobs();
64
+ });
65
+ return deferred.handle;
66
+ });
67
+ }
68
+ })
69
+
70
+ //# debugId=EAB0CF68F3441C3864756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/function-builder.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport { unmarshal } from \"./unmarshal.ts\";\nimport { marshal } from \"./marshal.ts\";\n\n/**\n * Define a global function in the QuickJS context\n *\n * @returns Handle to the function (caller must manage disposal)\n *\n * @example\n * const logFn = defineFunction(context, \"log\", (...args) => {\n * console.log(\"[QuickJS]\", ...args);\n * });\n * context.setProp(context.global, \"log\", logFn);\n */\nexport function defineFunction(\n context: QuickJSContext,\n name: string,\n fn: (...args: unknown[]) => unknown\n): QuickJSHandle {\n return context.newFunction(name, (...argHandles) => {\n // Unmarshal arguments\n const args = argHandles.map((h) => unmarshal(context, h));\n\n try {\n // Call host function\n const result = fn(...args);\n\n // Marshal result\n return marshal(context, result);\n } catch (error) {\n // Throw error in QuickJS\n throw context.newError(\n error instanceof Error ? error.message : String(error)\n );\n }\n });\n}\n\n/**\n * Define an async function that returns a promise to QuickJS\n *\n * @example\n * const fetchFn = defineAsyncFunction(context, \"fetch\", async (url) => {\n * const response = await fetch(String(url));\n * return response.text();\n * });\n */\nexport function defineAsyncFunction(\n context: QuickJSContext,\n name: string,\n fn: (...args: unknown[]) => Promise<unknown>\n): QuickJSHandle {\n return context.newFunction(name, (...argHandles) => {\n // Unmarshal arguments\n const args = argHandles.map((h) => unmarshal(context, h));\n\n // Create a promise in QuickJS\n const deferred = context.newPromise();\n\n // Call the async function\n fn(...args)\n .then((result) => {\n const resultHandle = marshal(context, result);\n deferred.resolve(resultHandle);\n resultHandle.dispose();\n context.runtime.executePendingJobs();\n })\n .catch((error) => {\n const errorHandle = marshal(\n context,\n error instanceof Error\n ? { name: error.name, message: error.message }\n : { message: String(error) }\n );\n deferred.reject(errorHandle);\n errorHandle.dispose();\n context.runtime.executePendingJobs();\n });\n\n return deferred.handle;\n });\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAC0B,IAA1B;AACwB,IAAxB;AAaO,SAAS,cAAc,CAC5B,SACA,MACA,IACe;AAAA,EACf,OAAO,QAAQ,YAAY,MAAM,IAAI,eAAe;AAAA,IAElD,MAAM,OAAO,WAAW,IAAI,CAAC,MAAM,2BAAU,SAAS,CAAC,CAAC;AAAA,IAExD,IAAI;AAAA,MAEF,MAAM,SAAS,GAAG,GAAG,IAAI;AAAA,MAGzB,OAAO,uBAAQ,SAAS,MAAM;AAAA,MAC9B,OAAO,OAAO;AAAA,MAEd,MAAM,QAAQ,SACZ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA;AAAA,GAEH;AAAA;AAYI,SAAS,mBAAmB,CACjC,SACA,MACA,IACe;AAAA,EACf,OAAO,QAAQ,YAAY,MAAM,IAAI,eAAe;AAAA,IAElD,MAAM,OAAO,WAAW,IAAI,CAAC,MAAM,2BAAU,SAAS,CAAC,CAAC;AAAA,IAGxD,MAAM,WAAW,QAAQ,WAAW;AAAA,IAGpC,GAAG,GAAG,IAAI,EACP,KAAK,CAAC,WAAW;AAAA,MAChB,MAAM,eAAe,uBAAQ,SAAS,MAAM;AAAA,MAC5C,SAAS,QAAQ,YAAY;AAAA,MAC7B,aAAa,QAAQ;AAAA,MACrB,QAAQ,QAAQ,mBAAmB;AAAA,KACpC,EACA,MAAM,CAAC,UAAU;AAAA,MAChB,MAAM,cAAc,uBAClB,SACA,iBAAiB,QACb,EAAE,MAAM,MAAM,MAAM,SAAS,MAAM,QAAQ,IAC3C,EAAE,SAAS,OAAO,KAAK,EAAE,CAC/B;AAAA,MACA,SAAS,OAAO,WAAW;AAAA,MAC3B,YAAY,QAAQ;AAAA,MACpB,QAAQ,QAAQ,mBAAmB;AAAA,KACpC;AAAA,IAEH,OAAO,SAAS;AAAA,GACjB;AAAA;",
8
+ "debugId": "EAB0CF68F3441C3864756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,143 @@
1
+ // @bun @bun-cjs
2
+ (function(exports, require, module, __filename, __dirname) {var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
7
+ var __toCommonJS = (from) => {
8
+ var entry = __moduleCache.get(from), desc;
9
+ if (entry)
10
+ return entry;
11
+ entry = __defProp({}, "__esModule", { value: true });
12
+ if (from && typeof from === "object" || typeof from === "function")
13
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ }));
17
+ __moduleCache.set(from, entry);
18
+ return entry;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, {
23
+ get: all[name],
24
+ enumerable: true,
25
+ configurable: true,
26
+ set: (newValue) => all[name] = () => newValue
27
+ });
28
+ };
29
+
30
+ // packages/core/src/index.ts
31
+ var exports_src = {};
32
+ __export(exports_src, {
33
+ withScopeAsync: () => import_scope.withScopeAsync,
34
+ withScope: () => import_scope.withScope,
35
+ unmarshal: () => import_unmarshal.unmarshal,
36
+ setupCore: () => setupCore,
37
+ setState: () => import_class_builder2.setState,
38
+ setInstanceState: () => import_class_builder2.setInstanceState,
39
+ marshal: () => import_marshal.marshal,
40
+ isHandle: () => import_marshal.isHandle,
41
+ getState: () => import_class_builder2.getState,
42
+ getInstanceStateById: () => import_class_builder2.getInstanceStateById,
43
+ getInstanceState: () => import_class_builder2.getInstanceState,
44
+ getHandleType: () => import_marshal.getHandleType,
45
+ defineFunction: () => import_function_builder.defineFunction,
46
+ defineClass: () => import_class_builder2.defineClass,
47
+ defineAsyncFunction: () => import_function_builder.defineAsyncFunction,
48
+ createWritableStream: () => import_writable_stream2.createWritableStream,
49
+ createURLSearchParamsClass: () => import_url_search_params2.createURLSearchParamsClass,
50
+ createURLClass: () => import_url2.createURLClass,
51
+ createStateMap: () => import_class_builder2.createStateMap,
52
+ createReadableStream: () => import_readable_stream2.createReadableStream,
53
+ createFile: () => import_file2.createFile,
54
+ createBlob: () => import_blob2.createBlob,
55
+ consumeReadableStream: () => import_readable_stream2.consumeReadableStream,
56
+ clearAllInstanceState: () => import_class_builder2.clearAllInstanceState,
57
+ cleanupUnmarshaledHandles: () => import_unmarshal.cleanupUnmarshaledHandles,
58
+ cleanupInstanceState: () => import_class_builder2.cleanupInstanceState,
59
+ addURLSearchParamsGetter: () => import_url2.addURLSearchParamsGetter,
60
+ INTERNAL_STATE: () => import_types.INTERNAL_STATE
61
+ });
62
+ module.exports = __toCommonJS(exports_src);
63
+ var import_class_builder = require("./class-builder.ts");
64
+ var import_readable_stream = require("./streams/readable-stream.ts");
65
+ var import_writable_stream = require("./streams/writable-stream.ts");
66
+ var import_transform_stream = require("./streams/transform-stream.ts");
67
+ var import_blob = require("./blob.ts");
68
+ var import_file = require("./file.ts");
69
+ var import_dom_exception = require("./dom-exception.ts");
70
+ var import_url_search_params = require("./url-search-params.ts");
71
+ var import_url = require("./url.ts");
72
+ var import_types = require("./types.ts");
73
+ var import_scope = require("./scope.ts");
74
+ var import_marshal = require("./marshal.ts");
75
+ var import_unmarshal = require("./unmarshal.ts");
76
+ var import_function_builder = require("./function-builder.ts");
77
+ var import_class_builder2 = require("./class-builder.ts");
78
+ var import_readable_stream2 = require("./streams/readable-stream.ts");
79
+ var import_writable_stream2 = require("./streams/writable-stream.ts");
80
+ var import_blob2 = require("./blob.ts");
81
+ var import_file2 = require("./file.ts");
82
+ var import_url_search_params2 = require("./url-search-params.ts");
83
+ var import_url2 = require("./url.ts");
84
+ function setupCore(context, options) {
85
+ const stateMap = options?.stateMap ?? import_class_builder.createStateMap();
86
+ const handles = [];
87
+ const ReadableStreamDefaultReader = import_readable_stream.createReadableStreamDefaultReaderClass(context, stateMap);
88
+ context.setProp(context.global, "ReadableStreamDefaultReader", ReadableStreamDefaultReader);
89
+ ReadableStreamDefaultReader.dispose();
90
+ const readerClassRef = context.getProp(context.global, "ReadableStreamDefaultReader");
91
+ const ReadableStream = import_readable_stream.createReadableStreamClass(context, stateMap, readerClassRef);
92
+ readerClassRef.dispose();
93
+ context.setProp(context.global, "ReadableStream", ReadableStream);
94
+ ReadableStream.dispose();
95
+ const WritableStreamDefaultWriter = import_writable_stream.createWritableStreamDefaultWriterClass(context, stateMap);
96
+ context.setProp(context.global, "WritableStreamDefaultWriter", WritableStreamDefaultWriter);
97
+ WritableStreamDefaultWriter.dispose();
98
+ const writerClassRef = context.getProp(context.global, "WritableStreamDefaultWriter");
99
+ const WritableStream = import_writable_stream.createWritableStreamClass(context, stateMap, writerClassRef);
100
+ writerClassRef.dispose();
101
+ context.setProp(context.global, "WritableStream", WritableStream);
102
+ WritableStream.dispose();
103
+ const TransformStream = import_transform_stream.createTransformStreamClass(context, stateMap);
104
+ context.setProp(context.global, "TransformStream", TransformStream);
105
+ TransformStream.dispose();
106
+ const BlobClass = import_blob.createBlobClass(context, stateMap, (source) => import_readable_stream.createReadableStream(context, stateMap, source));
107
+ context.setProp(context.global, "Blob", BlobClass);
108
+ BlobClass.dispose();
109
+ const blobClassRef = context.getProp(context.global, "Blob");
110
+ const FileClass = import_file.createFileClass(context, stateMap, blobClassRef);
111
+ blobClassRef.dispose();
112
+ context.setProp(context.global, "File", FileClass);
113
+ FileClass.dispose();
114
+ const DOMExceptionClass = import_dom_exception.createDOMExceptionClass(context, stateMap);
115
+ context.setProp(context.global, "DOMException", DOMExceptionClass);
116
+ DOMExceptionClass.dispose();
117
+ const URLSearchParamsClass = import_url_search_params.createURLSearchParamsClass(context, stateMap);
118
+ context.setProp(context.global, "URLSearchParams", URLSearchParamsClass);
119
+ URLSearchParamsClass.dispose();
120
+ const urlSearchParamsIteratorResult = context.evalCode(`
121
+ URLSearchParams.prototype[Symbol.iterator] = function() {
122
+ return this.entries()[Symbol.iterator]();
123
+ };
124
+ `);
125
+ if (urlSearchParamsIteratorResult.error) {
126
+ urlSearchParamsIteratorResult.error.dispose();
127
+ } else {
128
+ urlSearchParamsIteratorResult.value.dispose();
129
+ }
130
+ const URLClass = import_url.createURLClass(context, stateMap);
131
+ context.setProp(context.global, "URL", URLClass);
132
+ URLClass.dispose();
133
+ import_url.addURLSearchParamsGetter(context);
134
+ return {
135
+ stateMap,
136
+ dispose() {
137
+ handles.length = 0;
138
+ }
139
+ };
140
+ }
141
+ })
142
+
143
+ //# debugId=FE2DEE7125C06AA764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { SetupCoreOptions, CoreHandle, StateMap } from \"./types.ts\";\nimport { createStateMap } from \"./class-builder.ts\";\nimport {\n createReadableStreamClass,\n createReadableStreamDefaultReaderClass,\n createReadableStream,\n} from \"./streams/readable-stream.ts\";\nimport {\n createWritableStreamClass,\n createWritableStreamDefaultWriterClass,\n} from \"./streams/writable-stream.ts\";\nimport { createTransformStreamClass } from \"./streams/transform-stream.ts\";\nimport { createBlobClass } from \"./blob.ts\";\nimport { createFileClass } from \"./file.ts\";\nimport { createDOMExceptionClass } from \"./dom-exception.ts\";\nimport { createURLSearchParamsClass } from \"./url-search-params.ts\";\nimport { createURLClass, addURLSearchParamsGetter } from \"./url.ts\";\n\n/**\n * Setup core APIs in a QuickJS context\n *\n * Injects the following globals:\n * - ReadableStream, WritableStream, TransformStream\n * - ReadableStreamDefaultReader, WritableStreamDefaultWriter\n * - Blob\n * - File\n * - DOMException\n * - URL, URLSearchParams\n *\n * @example\n * const handle = setupCore(context);\n *\n * context.evalCode(`\n * const blob = new Blob([\"hello\", \" \", \"world\"], { type: \"text/plain\" });\n * const text = await blob.text(); // \"hello world\"\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"chunk1\");\n * controller.enqueue(\"chunk2\");\n * controller.close();\n * }\n * });\n * `);\n */\nexport function setupCore(\n context: QuickJSContext,\n options?: SetupCoreOptions\n): CoreHandle {\n const stateMap = options?.stateMap ?? createStateMap();\n const handles: { name: string; handle: QuickJSHandle }[] = [];\n\n // Create ReadableStreamDefaultReader class first\n const ReadableStreamDefaultReader = createReadableStreamDefaultReaderClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"ReadableStreamDefaultReader\",\n ReadableStreamDefaultReader\n );\n ReadableStreamDefaultReader.dispose();\n\n // Create ReadableStream class\n const readerClassRef = context.getProp(context.global, \"ReadableStreamDefaultReader\");\n const ReadableStream = createReadableStreamClass(\n context,\n stateMap,\n readerClassRef\n );\n readerClassRef.dispose();\n context.setProp(context.global, \"ReadableStream\", ReadableStream);\n ReadableStream.dispose();\n\n // Create WritableStreamDefaultWriter class first\n const WritableStreamDefaultWriter = createWritableStreamDefaultWriterClass(\n context,\n stateMap\n );\n context.setProp(\n context.global,\n \"WritableStreamDefaultWriter\",\n WritableStreamDefaultWriter\n );\n WritableStreamDefaultWriter.dispose();\n\n // Create WritableStream class\n const writerClassRef = context.getProp(context.global, \"WritableStreamDefaultWriter\");\n const WritableStream = createWritableStreamClass(\n context,\n stateMap,\n writerClassRef\n );\n writerClassRef.dispose();\n context.setProp(context.global, \"WritableStream\", WritableStream);\n WritableStream.dispose();\n\n // Create TransformStream class\n const TransformStream = createTransformStreamClass(context, stateMap);\n context.setProp(context.global, \"TransformStream\", TransformStream);\n TransformStream.dispose();\n\n // Create Blob class with stream factory\n const BlobClass = createBlobClass(context, stateMap, (source) =>\n createReadableStream(context, stateMap, source)\n );\n context.setProp(context.global, \"Blob\", BlobClass);\n BlobClass.dispose();\n\n // Create File class (extends Blob)\n const blobClassRef = context.getProp(context.global, \"Blob\");\n const FileClass = createFileClass(context, stateMap, blobClassRef);\n blobClassRef.dispose();\n context.setProp(context.global, \"File\", FileClass);\n FileClass.dispose();\n\n // Create DOMException class\n const DOMExceptionClass = createDOMExceptionClass(context, stateMap);\n context.setProp(context.global, \"DOMException\", DOMExceptionClass);\n DOMExceptionClass.dispose();\n\n // Create URLSearchParams class\n const URLSearchParamsClass = createURLSearchParamsClass(context, stateMap);\n context.setProp(context.global, \"URLSearchParams\", URLSearchParamsClass);\n URLSearchParamsClass.dispose();\n\n // Add Symbol.iterator support for URLSearchParams\n const urlSearchParamsIteratorResult = context.evalCode(`\n URLSearchParams.prototype[Symbol.iterator] = function() {\n return this.entries()[Symbol.iterator]();\n };\n `);\n if (urlSearchParamsIteratorResult.error) {\n urlSearchParamsIteratorResult.error.dispose();\n } else {\n urlSearchParamsIteratorResult.value.dispose();\n }\n\n // Create URL class (depends on URLSearchParams)\n const URLClass = createURLClass(context, stateMap);\n context.setProp(context.global, \"URL\", URLClass);\n URLClass.dispose();\n\n // Add searchParams getter to URL that returns URLSearchParams instance\n addURLSearchParamsGetter(context);\n\n /**\n * @returns CoreHandle with shared stateMap and dispose method\n *\n * **dispose() behavior:**\n * - Clears internal handle tracking array\n * - Does NOT dispose globals (ReadableStream, Blob, etc.) - they are owned\n * by context.global and cleaned up by context.dispose()\n * - Call before context.dispose() to release internal references\n *\n * @see PATTERNS.md for implementation patterns\n */\n return {\n stateMap,\n dispose() {\n // Note: handles set on global (ReadableStream, Blob, etc.) are NOT disposed here\n // They are owned by the global object and will be cleaned up by context.dispose()\n // Disposing them before context disposal causes QuickJS GC assertion failures\n handles.length = 0;\n },\n };\n}\n\n// Re-export types\nexport type {\n Scope,\n MarshalOptions,\n UnmarshalOptions,\n PropertyDescriptor,\n ClassDefinition,\n StateMap,\n SetupCoreOptions,\n CoreHandle,\n QuickJSContext,\n QuickJSHandle,\n QuickJSRuntime,\n} from \"./types.ts\";\nexport { INTERNAL_STATE } from \"./types.ts\";\n\n// Re-export utilities\nexport { withScope, withScopeAsync } from \"./scope.ts\";\nexport { marshal, isHandle, getHandleType } from \"./marshal.ts\";\nexport { unmarshal, cleanupUnmarshaledHandles } from \"./unmarshal.ts\";\nexport { defineFunction, defineAsyncFunction } from \"./function-builder.ts\";\nexport {\n defineClass,\n createStateMap,\n getState,\n setState,\n getInstanceState,\n setInstanceState,\n getInstanceStateById,\n cleanupInstanceState,\n clearAllInstanceState,\n} from \"./class-builder.ts\";\n\n// Re-export stream utilities\nexport {\n createReadableStream,\n consumeReadableStream,\n} from \"./streams/readable-stream.ts\";\nexport { createWritableStream } from \"./streams/writable-stream.ts\";\n\n// Re-export Blob/File utilities\nexport { createBlob } from \"./blob.ts\";\nexport { createFile } from \"./file.ts\";\n\n// Re-export URL utilities\nexport { createURLSearchParamsClass } from \"./url-search-params.ts\";\nexport type { URLSearchParamsState } from \"./url-search-params.ts\";\nexport { createURLClass, addURLSearchParamsGetter } from \"./url.ts\";\nexport type { URLState } from \"./url.ts\";\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE+B,IAA/B;AAKO,IAJP;AAQO,IAHP;AAI2C,IAA3C;AACgC,IAAhC;AACgC,IAAhC;AACwC,IAAxC;AAC2C,IAA3C;AACyD,IAAzD;AAuK+B,IAA/B;AAG0C,IAA1C;AACiD,IAAjD;AACqD,IAArD;AACoD,IAApD;AAWO,IAVP;AAgBO,IAHP;AAIqC,IAArC;AAG2B,IAA3B;AAC2B,IAA3B;AAG2C,IAA3C;AAEyD,IAAzD;AA3KO,SAAS,SAAS,CACvB,SACA,SACY;AAAA,EACZ,MAAM,WAAW,SAAS,YAAY,oCAAe;AAAA,EACrD,MAAM,UAAqD,CAAC;AAAA,EAG5D,MAAM,8BAA8B,8DAClC,SACA,QACF;AAAA,EACA,QAAQ,QACN,QAAQ,QACR,+BACA,2BACF;AAAA,EACA,4BAA4B,QAAQ;AAAA,EAGpC,MAAM,iBAAiB,QAAQ,QAAQ,QAAQ,QAAQ,6BAA6B;AAAA,EACpF,MAAM,iBAAiB,iDACrB,SACA,UACA,cACF;AAAA,EACA,eAAe,QAAQ;AAAA,EACvB,QAAQ,QAAQ,QAAQ,QAAQ,kBAAkB,cAAc;AAAA,EAChE,eAAe,QAAQ;AAAA,EAGvB,MAAM,8BAA8B,8DAClC,SACA,QACF;AAAA,EACA,QAAQ,QACN,QAAQ,QACR,+BACA,2BACF;AAAA,EACA,4BAA4B,QAAQ;AAAA,EAGpC,MAAM,iBAAiB,QAAQ,QAAQ,QAAQ,QAAQ,6BAA6B;AAAA,EACpF,MAAM,iBAAiB,iDACrB,SACA,UACA,cACF;AAAA,EACA,eAAe,QAAQ;AAAA,EACvB,QAAQ,QAAQ,QAAQ,QAAQ,kBAAkB,cAAc;AAAA,EAChE,eAAe,QAAQ;AAAA,EAGvB,MAAM,kBAAkB,mDAA2B,SAAS,QAAQ;AAAA,EACpE,QAAQ,QAAQ,QAAQ,QAAQ,mBAAmB,eAAe;AAAA,EAClE,gBAAgB,QAAQ;AAAA,EAGxB,MAAM,YAAY,4BAAgB,SAAS,UAAU,CAAC,WACpD,4CAAqB,SAAS,UAAU,MAAM,CAChD;AAAA,EACA,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,SAAS;AAAA,EACjD,UAAU,QAAQ;AAAA,EAGlB,MAAM,eAAe,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,EAC3D,MAAM,YAAY,4BAAgB,SAAS,UAAU,YAAY;AAAA,EACjE,aAAa,QAAQ;AAAA,EACrB,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,SAAS;AAAA,EACjD,UAAU,QAAQ;AAAA,EAGlB,MAAM,oBAAoB,6CAAwB,SAAS,QAAQ;AAAA,EACnE,QAAQ,QAAQ,QAAQ,QAAQ,gBAAgB,iBAAiB;AAAA,EACjE,kBAAkB,QAAQ;AAAA,EAG1B,MAAM,uBAAuB,oDAA2B,SAAS,QAAQ;AAAA,EACzE,QAAQ,QAAQ,QAAQ,QAAQ,mBAAmB,oBAAoB;AAAA,EACvE,qBAAqB,QAAQ;AAAA,EAG7B,MAAM,gCAAgC,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,GAItD;AAAA,EACD,IAAI,8BAA8B,OAAO;AAAA,IACvC,8BAA8B,MAAM,QAAQ;AAAA,EAC9C,EAAO;AAAA,IACL,8BAA8B,MAAM,QAAQ;AAAA;AAAA,EAI9C,MAAM,WAAW,0BAAe,SAAS,QAAQ;AAAA,EACjD,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,QAAQ;AAAA,EAC/C,SAAS,QAAQ;AAAA,EAGjB,oCAAyB,OAAO;AAAA,EAahC,OAAO;AAAA,IACL;AAAA,IACA,OAAO,GAAG;AAAA,MAIR,QAAQ,SAAS;AAAA;AAAA,EAErB;AAAA;",
8
+ "debugId": "FE2DEE7125C06AA764756E2164756E21",
9
+ "names": []
10
+ }