@ricsam/quickjs-fetch 0.2.0 → 0.2.2

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 (47) hide show
  1. package/dist/cjs/abort-controller.cjs +212 -0
  2. package/dist/cjs/abort-controller.cjs.map +10 -0
  3. package/dist/cjs/fetch.cjs +199 -0
  4. package/dist/cjs/fetch.cjs.map +10 -0
  5. package/dist/cjs/form-data.cjs +289 -0
  6. package/dist/cjs/form-data.cjs.map +10 -0
  7. package/dist/cjs/handle.cjs +248 -0
  8. package/dist/cjs/handle.cjs.map +10 -0
  9. package/dist/cjs/headers.cjs +196 -0
  10. package/dist/cjs/headers.cjs.map +10 -0
  11. package/dist/cjs/index.cjs +5 -5
  12. package/dist/cjs/index.cjs.map +2 -2
  13. package/dist/cjs/package.json +1 -1
  14. package/dist/cjs/request.cjs +315 -0
  15. package/dist/cjs/request.cjs.map +10 -0
  16. package/dist/cjs/response.cjs +315 -0
  17. package/dist/cjs/response.cjs.map +10 -0
  18. package/dist/cjs/serve.cjs +182 -0
  19. package/dist/cjs/serve.cjs.map +10 -0
  20. package/dist/cjs/setup.cjs +119 -0
  21. package/dist/cjs/setup.cjs.map +10 -0
  22. package/dist/cjs/types.cjs +26 -0
  23. package/dist/cjs/types.cjs.map +9 -0
  24. package/dist/mjs/abort-controller.mjs +181 -0
  25. package/dist/mjs/abort-controller.mjs.map +10 -0
  26. package/dist/mjs/fetch.mjs +168 -0
  27. package/dist/mjs/fetch.mjs.map +10 -0
  28. package/dist/mjs/form-data.mjs +258 -0
  29. package/dist/mjs/form-data.mjs.map +10 -0
  30. package/dist/mjs/handle.mjs +217 -0
  31. package/dist/mjs/handle.mjs.map +10 -0
  32. package/dist/mjs/headers.mjs +165 -0
  33. package/dist/mjs/headers.mjs.map +10 -0
  34. package/dist/mjs/index.mjs +5 -5
  35. package/dist/mjs/index.mjs.map +2 -2
  36. package/dist/mjs/package.json +1 -1
  37. package/dist/mjs/request.mjs +284 -0
  38. package/dist/mjs/request.mjs.map +10 -0
  39. package/dist/mjs/response.mjs +284 -0
  40. package/dist/mjs/response.mjs.map +10 -0
  41. package/dist/mjs/serve.mjs +151 -0
  42. package/dist/mjs/serve.mjs.map +10 -0
  43. package/dist/mjs/setup.mjs +92 -0
  44. package/dist/mjs/setup.mjs.map +10 -0
  45. package/dist/mjs/types.mjs +3 -0
  46. package/dist/mjs/types.mjs.map +9 -0
  47. package/package.json +2 -2
@@ -0,0 +1,315 @@
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/fetch/src/globals/response.ts
31
+ var exports_response = {};
32
+ __export(exports_response, {
33
+ responseStateToNative: () => responseStateToNative,
34
+ createResponseStateFromNative: () => createResponseStateFromNative,
35
+ createResponseClass: () => createResponseClass,
36
+ addResponseStaticMethods: () => addResponseStaticMethods
37
+ });
38
+ module.exports = __toCommonJS(exports_response);
39
+ var import_quickjs_core = require("@ricsam/quickjs-core");
40
+ var import_headers = require("./headers.cjs");
41
+ var import_form_data = require("./form-data.cjs");
42
+ function createResponseClass(context, stateMap, createStream) {
43
+ const classHandle = import_quickjs_core.defineClass(context, stateMap, {
44
+ name: "Response",
45
+ construct: (args) => {
46
+ const bodyInit = args[0];
47
+ const init = args[1];
48
+ let body = null;
49
+ const status = init?.status ?? 200;
50
+ const statusText = init?.statusText ?? "";
51
+ let headersState = { headers: new Map };
52
+ if (bodyInit !== null && bodyInit !== undefined) {
53
+ if (typeof bodyInit === "string") {
54
+ body = new TextEncoder().encode(bodyInit);
55
+ } else if (bodyInit instanceof ArrayBuffer) {
56
+ body = new Uint8Array(bodyInit);
57
+ } else if (bodyInit instanceof Uint8Array) {
58
+ body = bodyInit;
59
+ } else if (bodyInit && typeof bodyInit === "object" && "parts" in bodyInit) {
60
+ const parts = bodyInit.parts;
61
+ const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
62
+ body = new Uint8Array(totalLength);
63
+ let offset = 0;
64
+ for (const part of parts) {
65
+ body.set(part, offset);
66
+ offset += part.length;
67
+ }
68
+ }
69
+ }
70
+ if (init?.headers) {
71
+ if (init.headers && typeof init.headers === "object" && "headers" in init.headers && init.headers.headers instanceof Map) {
72
+ headersState = {
73
+ headers: new Map(init.headers.headers)
74
+ };
75
+ } else {
76
+ headersState = { headers: new Map };
77
+ for (const [key, value] of Object.entries(init.headers)) {
78
+ headersState.headers.set(key.toLowerCase(), [String(value)]);
79
+ }
80
+ }
81
+ }
82
+ return {
83
+ status,
84
+ statusText,
85
+ headersState,
86
+ body,
87
+ bodyUsed: false,
88
+ url: "",
89
+ redirected: false,
90
+ type: init?._type ?? "default",
91
+ ok: status >= 200 && status < 300
92
+ };
93
+ },
94
+ properties: {
95
+ body: {
96
+ get() {
97
+ if (!this.body)
98
+ return null;
99
+ if (!createStream) {
100
+ return this.body;
101
+ }
102
+ const bodyData = this.body;
103
+ let offset = 0;
104
+ const chunkSize = 65536;
105
+ return createStream({
106
+ pull(controller) {
107
+ if (offset >= bodyData.length) {
108
+ controller.close();
109
+ return;
110
+ }
111
+ const chunk = bodyData.slice(offset, Math.min(offset + chunkSize, bodyData.length));
112
+ offset += chunk.length;
113
+ controller.enqueue(chunk);
114
+ }
115
+ });
116
+ }
117
+ },
118
+ bodyUsed: {
119
+ get() {
120
+ return this.bodyUsed;
121
+ }
122
+ },
123
+ headers: {
124
+ get() {
125
+ return import_headers.createHeadersLike(this.headersState);
126
+ }
127
+ },
128
+ ok: {
129
+ get() {
130
+ return this.ok;
131
+ }
132
+ },
133
+ redirected: {
134
+ get() {
135
+ return this.redirected;
136
+ }
137
+ },
138
+ status: {
139
+ get() {
140
+ return this.status;
141
+ }
142
+ },
143
+ statusText: {
144
+ get() {
145
+ return this.statusText;
146
+ }
147
+ },
148
+ type: {
149
+ get() {
150
+ return this.type;
151
+ }
152
+ },
153
+ url: {
154
+ get() {
155
+ return this.url;
156
+ }
157
+ }
158
+ },
159
+ methods: {
160
+ async arrayBuffer() {
161
+ if (this.bodyUsed) {
162
+ throw new TypeError("Body has already been consumed");
163
+ }
164
+ this.bodyUsed = true;
165
+ if (!this.body) {
166
+ return new ArrayBuffer(0);
167
+ }
168
+ return this.body.buffer.slice(this.body.byteOffset, this.body.byteOffset + this.body.byteLength);
169
+ },
170
+ async blob() {
171
+ if (this.bodyUsed) {
172
+ throw new TypeError("Body has already been consumed");
173
+ }
174
+ this.bodyUsed = true;
175
+ const contentType = this.headersState.headers.get("content-type")?.[0] || "";
176
+ return {
177
+ parts: this.body ? [this.body] : [],
178
+ type: contentType,
179
+ size: this.body?.length || 0
180
+ };
181
+ },
182
+ clone() {
183
+ if (this.bodyUsed) {
184
+ throw new TypeError("Body has already been consumed");
185
+ }
186
+ return {
187
+ ...this,
188
+ headersState: {
189
+ headers: new Map(this.headersState.headers)
190
+ },
191
+ body: this.body ? new Uint8Array(this.body) : null,
192
+ bodyUsed: false
193
+ };
194
+ },
195
+ async json() {
196
+ if (this.bodyUsed) {
197
+ throw new TypeError("Body has already been consumed");
198
+ }
199
+ this.bodyUsed = true;
200
+ if (!this.body) {
201
+ return JSON.parse("");
202
+ }
203
+ const text = new TextDecoder().decode(this.body);
204
+ return JSON.parse(text);
205
+ },
206
+ async text() {
207
+ if (this.bodyUsed) {
208
+ throw new TypeError("Body has already been consumed");
209
+ }
210
+ this.bodyUsed = true;
211
+ if (!this.body) {
212
+ return "";
213
+ }
214
+ return new TextDecoder().decode(this.body);
215
+ },
216
+ async formData() {
217
+ if (this.bodyUsed) {
218
+ throw new TypeError("Body has already been consumed");
219
+ }
220
+ this.bodyUsed = true;
221
+ if (!this.body) {
222
+ return { entries: [] };
223
+ }
224
+ const contentType = this.headersState.headers.get("content-type")?.[0] || "";
225
+ if (contentType.includes("multipart/form-data")) {
226
+ return import_form_data.parseMultipartFormData(this.body, contentType);
227
+ } else if (contentType.includes("application/x-www-form-urlencoded")) {
228
+ return import_form_data.parseUrlEncodedFormData(this.body);
229
+ }
230
+ throw new TypeError("Could not parse content as FormData");
231
+ }
232
+ }
233
+ });
234
+ return classHandle;
235
+ }
236
+ function addResponseStaticMethods(context) {
237
+ const staticMethodsCode = `
238
+ Response.error = function() {
239
+ return new Response(null, { status: 0, _type: "error" });
240
+ };
241
+
242
+ Response.json = function(data, init = {}) {
243
+ const body = JSON.stringify(data);
244
+ // Merge content-type with any provided headers
245
+ const headers = Object.assign(
246
+ { "content-type": "application/json" },
247
+ init.headers || {}
248
+ );
249
+ return new Response(body, {
250
+ status: init.status ?? 200,
251
+ statusText: init.statusText ?? "",
252
+ headers: headers
253
+ });
254
+ };
255
+
256
+ Response.redirect = function(url, status = 302) {
257
+ return new Response(null, {
258
+ status: status,
259
+ headers: { "location": String(url) }
260
+ });
261
+ };
262
+ `;
263
+ const result = context.evalCode(staticMethodsCode);
264
+ if (result.error) {
265
+ result.error.dispose();
266
+ } else {
267
+ result.value.dispose();
268
+ }
269
+ }
270
+ function responseStateToNative(state) {
271
+ const body = state.body ?? state.body;
272
+ const status = state.status ?? 200;
273
+ const statusText = state.statusText ?? "";
274
+ let headersState;
275
+ if (state.headersState) {
276
+ headersState = state.headersState;
277
+ } else if (state.headers) {
278
+ const headers = state.headers;
279
+ if (headers.headers instanceof Map) {
280
+ headersState = { headers: headers.headers };
281
+ } else {
282
+ headersState = { headers: new Map };
283
+ }
284
+ } else {
285
+ headersState = { headers: new Map };
286
+ }
287
+ return new Response(body, {
288
+ status,
289
+ statusText,
290
+ headers: import_headers.headersStateToNative(headersState)
291
+ });
292
+ }
293
+ async function createResponseStateFromNative(response) {
294
+ const body = response.body ? new Uint8Array(await response.arrayBuffer()) : null;
295
+ const headersState = { headers: new Map };
296
+ response.headers.forEach((value, key) => {
297
+ const existing = headersState.headers.get(key.toLowerCase()) || [];
298
+ existing.push(value);
299
+ headersState.headers.set(key.toLowerCase(), existing);
300
+ });
301
+ return {
302
+ status: response.status,
303
+ statusText: response.statusText,
304
+ headersState,
305
+ body,
306
+ bodyUsed: false,
307
+ url: response.url,
308
+ redirected: response.redirected,
309
+ type: response.type,
310
+ ok: response.ok
311
+ };
312
+ }
313
+ })
314
+
315
+ //# debugId=BC433B9DCE41324164756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/globals/response.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"@ricsam/quickjs-core\";\nimport { defineClass } from \"@ricsam/quickjs-core\";\nimport type { ResponseState, HeadersState, FormDataState } from \"../types.cjs\";\nimport { headersStateToNative, createHeadersLike } from \"./headers.cjs\";\nimport { parseMultipartFormData, parseUrlEncodedFormData } from \"./form-data.cjs\";\n\n/**\n * Type for the stream factory function\n */\ntype StreamFactory = (source: UnderlyingSource) => QuickJSHandle;\n\n/**\n * Create the Response class for QuickJS\n */\nexport function createResponseClass(\n context: QuickJSContext,\n stateMap: StateMap,\n createStream?: StreamFactory\n): QuickJSHandle {\n const classHandle = defineClass<ResponseState>(context, stateMap, {\n name: \"Response\",\n construct: (args) => {\n const bodyInit = args[0];\n const init = args[1] as {\n status?: number;\n statusText?: string;\n headers?: object;\n _type?: string; // Internal: for Response.error() to set type\n } | undefined;\n\n let body: Uint8Array | null = null;\n const status = init?.status ?? 200;\n const statusText = init?.statusText ?? \"\";\n let headersState: HeadersState = { headers: new Map() };\n\n // Parse body\n if (bodyInit !== null && bodyInit !== undefined) {\n if (typeof bodyInit === \"string\") {\n body = new TextEncoder().encode(bodyInit);\n } else if (bodyInit instanceof ArrayBuffer) {\n body = new Uint8Array(bodyInit);\n } else if (bodyInit instanceof Uint8Array) {\n body = bodyInit;\n } else if (\n bodyInit &&\n typeof bodyInit === \"object\" &&\n \"parts\" in bodyInit\n ) {\n // Blob-like\n const parts = (bodyInit as { parts: Uint8Array[] }).parts;\n const totalLength = parts.reduce((sum, p) => sum + p.length, 0);\n body = new Uint8Array(totalLength);\n let offset = 0;\n for (const part of parts) {\n body.set(part, offset);\n offset += part.length;\n }\n }\n }\n\n // Parse headers\n if (init?.headers) {\n if (\n init.headers &&\n typeof init.headers === \"object\" &&\n \"headers\" in init.headers &&\n init.headers.headers instanceof Map\n ) {\n headersState = {\n headers: new Map((init.headers as HeadersState).headers),\n };\n } else {\n headersState = { headers: new Map() };\n for (const [key, value] of Object.entries(init.headers)) {\n headersState.headers.set(key.toLowerCase(), [String(value)]);\n }\n }\n }\n\n return {\n status,\n statusText,\n headersState,\n body,\n bodyUsed: false,\n url: \"\",\n redirected: false,\n type: init?._type ?? \"default\",\n ok: status >= 200 && status < 300,\n };\n },\n properties: {\n body: {\n get(this: ResponseState) {\n if (!this.body) return null;\n if (!createStream) {\n // Fallback: return raw body if no stream factory\n return this.body;\n }\n // Create a ReadableStream from the body data\n const bodyData = this.body;\n let offset = 0;\n const chunkSize = 65536; // 64KB chunks\n return createStream({\n pull(controller) {\n if (offset >= bodyData.length) {\n controller.close();\n return;\n }\n const chunk = bodyData.slice(offset, Math.min(offset + chunkSize, bodyData.length));\n offset += chunk.length;\n controller.enqueue(chunk);\n },\n });\n },\n },\n bodyUsed: {\n get(this: ResponseState) {\n return this.bodyUsed;\n },\n },\n headers: {\n get(this: ResponseState) {\n return createHeadersLike(this.headersState);\n },\n },\n ok: {\n get(this: ResponseState) {\n return this.ok;\n },\n },\n redirected: {\n get(this: ResponseState) {\n return this.redirected;\n },\n },\n status: {\n get(this: ResponseState) {\n return this.status;\n },\n },\n statusText: {\n get(this: ResponseState) {\n return this.statusText;\n },\n },\n type: {\n get(this: ResponseState) {\n return this.type;\n },\n },\n url: {\n get(this: ResponseState) {\n return this.url;\n },\n },\n },\n methods: {\n async arrayBuffer(this: ResponseState): Promise<ArrayBuffer> {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n this.bodyUsed = true;\n if (!this.body) {\n return new ArrayBuffer(0);\n }\n return this.body.buffer.slice(\n this.body.byteOffset,\n this.body.byteOffset + this.body.byteLength\n ) as ArrayBuffer;\n },\n async blob(this: ResponseState): Promise<object> {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n this.bodyUsed = true;\n const contentType =\n this.headersState.headers.get(\"content-type\")?.[0] || \"\";\n return {\n parts: this.body ? [this.body] : [],\n type: contentType,\n size: this.body?.length || 0,\n };\n },\n clone(this: ResponseState): ResponseState {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n return {\n ...this,\n headersState: {\n headers: new Map(this.headersState.headers),\n },\n body: this.body ? new Uint8Array(this.body) : null,\n bodyUsed: false,\n };\n },\n async json(this: ResponseState): Promise<unknown> {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n this.bodyUsed = true;\n if (!this.body) {\n return JSON.parse(\"\");\n }\n const text = new TextDecoder().decode(this.body);\n return JSON.parse(text);\n },\n async text(this: ResponseState): Promise<string> {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n this.bodyUsed = true;\n if (!this.body) {\n return \"\";\n }\n return new TextDecoder().decode(this.body);\n },\n async formData(this: ResponseState): Promise<FormDataState> {\n if (this.bodyUsed) {\n throw new TypeError(\"Body has already been consumed\");\n }\n this.bodyUsed = true;\n if (!this.body) {\n return { entries: [] };\n }\n\n const contentType = this.headersState.headers.get(\"content-type\")?.[0] || \"\";\n\n if (contentType.includes(\"multipart/form-data\")) {\n return parseMultipartFormData(this.body, contentType);\n } else if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n return parseUrlEncodedFormData(this.body);\n }\n\n throw new TypeError(\"Could not parse content as FormData\");\n },\n },\n });\n\n return classHandle;\n}\n\n/**\n * Add static methods to Response class after it's been set on global\n * This must be called after Response and Headers are available on global\n */\nexport function addResponseStaticMethods(context: QuickJSContext): void {\n const staticMethodsCode = `\n Response.error = function() {\n return new Response(null, { status: 0, _type: \"error\" });\n };\n\n Response.json = function(data, init = {}) {\n const body = JSON.stringify(data);\n // Merge content-type with any provided headers\n const headers = Object.assign(\n { \"content-type\": \"application/json\" },\n init.headers || {}\n );\n return new Response(body, {\n status: init.status ?? 200,\n statusText: init.statusText ?? \"\",\n headers: headers\n });\n };\n\n Response.redirect = function(url, status = 302) {\n return new Response(null, {\n status: status,\n headers: { \"location\": String(url) }\n });\n };\n `;\n const result = context.evalCode(staticMethodsCode);\n if (result.error) {\n result.error.dispose();\n } else {\n result.value.dispose();\n }\n}\n\n/**\n * Convert ResponseState (or unmarshalled Response object) to native Response\n */\nexport function responseStateToNative(state: ResponseState | Record<string, unknown>): Response {\n const body = (state as ResponseState).body ?? (state as Record<string, unknown>).body;\n const status = (state as ResponseState).status ?? 200;\n const statusText = (state as ResponseState).statusText ?? \"\";\n\n // Handle both headersState (internal) and headers (from getter)\n let headersState: HeadersState;\n if ((state as ResponseState).headersState) {\n headersState = (state as ResponseState).headersState;\n } else if ((state as Record<string, unknown>).headers) {\n // When unmarshalled, headers is the HeadersLike object from getter\n const headers = (state as Record<string, unknown>).headers as { headers?: Map<string, string[]> };\n if (headers.headers instanceof Map) {\n headersState = { headers: headers.headers };\n } else {\n headersState = { headers: new Map() };\n }\n } else {\n headersState = { headers: new Map() };\n }\n\n return new Response(body as BodyInit | null, {\n status,\n statusText,\n headers: headersStateToNative(headersState),\n });\n}\n\n/**\n * Create a ResponseState from a native Response\n */\nexport async function createResponseStateFromNative(\n response: Response\n): Promise<ResponseState> {\n const body = response.body\n ? new Uint8Array(await response.arrayBuffer())\n : null;\n\n const headersState: HeadersState = { headers: new Map() };\n response.headers.forEach((value, key) => {\n const existing = headersState.headers.get(key.toLowerCase()) || [];\n existing.push(value);\n headersState.headers.set(key.toLowerCase(), existing);\n });\n\n return {\n status: response.status,\n statusText: response.statusText,\n headersState,\n body,\n bodyUsed: false,\n url: response.url,\n redirected: response.redirected,\n type: response.type,\n ok: response.ok,\n };\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "BC433B9DCE41324164756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,182 @@
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/fetch/src/globals/serve.ts
31
+ var exports_serve = {};
32
+ __export(exports_serve, {
33
+ createServerWebSocketClass: () => createServerWebSocketClass,
34
+ createServerClass: () => createServerClass,
35
+ createServeFunction: () => createServeFunction
36
+ });
37
+ module.exports = __toCommonJS(exports_serve);
38
+ var import_quickjs_core = require("@ricsam/quickjs-core");
39
+ function createServerWebSocketClass(context, stateMap, onWebSocketCommand) {
40
+ return import_quickjs_core.defineClass(context, stateMap, {
41
+ name: "ServerWebSocket",
42
+ construct: (args) => {
43
+ const connectionId = String(args[0]);
44
+ const data = args[1];
45
+ return {
46
+ data,
47
+ readyState: 1,
48
+ connectionId,
49
+ wsHandle: null
50
+ };
51
+ },
52
+ properties: {
53
+ data: {
54
+ get() {
55
+ return this.data;
56
+ }
57
+ },
58
+ readyState: {
59
+ get() {
60
+ return this.readyState;
61
+ }
62
+ }
63
+ },
64
+ methods: {
65
+ send(message) {
66
+ if (this.readyState !== 1) {
67
+ throw new Error("WebSocket is not open");
68
+ }
69
+ let data;
70
+ if (typeof message === "string") {
71
+ data = message;
72
+ } else if (message instanceof ArrayBuffer) {
73
+ data = message;
74
+ } else if (message instanceof Uint8Array) {
75
+ data = message.buffer.slice(message.byteOffset, message.byteOffset + message.byteLength);
76
+ } else {
77
+ data = String(message);
78
+ }
79
+ onWebSocketCommand({
80
+ type: "message",
81
+ connectionId: this.connectionId,
82
+ data
83
+ });
84
+ },
85
+ close(code, reason) {
86
+ if (this.readyState === 3) {
87
+ return;
88
+ }
89
+ this.readyState = 2;
90
+ onWebSocketCommand({
91
+ type: "close",
92
+ connectionId: this.connectionId,
93
+ code: typeof code === "number" ? code : undefined,
94
+ reason: typeof reason === "string" ? reason : undefined
95
+ });
96
+ }
97
+ }
98
+ });
99
+ }
100
+ function createServerClass(context, stateMap, serveState) {
101
+ return import_quickjs_core.defineClass(context, stateMap, {
102
+ name: "Server",
103
+ construct: () => {
104
+ return { serveState };
105
+ },
106
+ methods: {
107
+ upgrade(_request, options) {
108
+ const data = options && typeof options === "object" && "data" in options ? options.data : undefined;
109
+ this.serveState.pendingUpgrade = {
110
+ requested: true,
111
+ data
112
+ };
113
+ return true;
114
+ }
115
+ }
116
+ });
117
+ }
118
+ function createServeFunction(context, stateMap, serveState) {
119
+ return context.newFunction("serve", (optionsHandle) => {
120
+ if (context.typeof(optionsHandle) !== "object") {
121
+ throw context.newError("serve requires an options object");
122
+ }
123
+ if (serveState.fetchHandler) {
124
+ serveState.fetchHandler.dispose();
125
+ serveState.fetchHandler = null;
126
+ }
127
+ const fetchHandle = context.getProp(optionsHandle, "fetch");
128
+ if (context.typeof(fetchHandle) === "function") {
129
+ serveState.fetchHandler = fetchHandle;
130
+ } else {
131
+ fetchHandle.dispose();
132
+ }
133
+ const websocketHandle = context.getProp(optionsHandle, "websocket");
134
+ if (context.typeof(websocketHandle) === "object") {
135
+ if (serveState.websocketHandlers.open) {
136
+ serveState.websocketHandlers.open.dispose();
137
+ serveState.websocketHandlers.open = undefined;
138
+ }
139
+ if (serveState.websocketHandlers.message) {
140
+ serveState.websocketHandlers.message.dispose();
141
+ serveState.websocketHandlers.message = undefined;
142
+ }
143
+ if (serveState.websocketHandlers.close) {
144
+ serveState.websocketHandlers.close.dispose();
145
+ serveState.websocketHandlers.close = undefined;
146
+ }
147
+ if (serveState.websocketHandlers.error) {
148
+ serveState.websocketHandlers.error.dispose();
149
+ serveState.websocketHandlers.error = undefined;
150
+ }
151
+ const openHandle = context.getProp(websocketHandle, "open");
152
+ if (context.typeof(openHandle) === "function") {
153
+ serveState.websocketHandlers.open = openHandle;
154
+ } else {
155
+ openHandle.dispose();
156
+ }
157
+ const messageHandle = context.getProp(websocketHandle, "message");
158
+ if (context.typeof(messageHandle) === "function") {
159
+ serveState.websocketHandlers.message = messageHandle;
160
+ } else {
161
+ messageHandle.dispose();
162
+ }
163
+ const closeHandle = context.getProp(websocketHandle, "close");
164
+ if (context.typeof(closeHandle) === "function") {
165
+ serveState.websocketHandlers.close = closeHandle;
166
+ } else {
167
+ closeHandle.dispose();
168
+ }
169
+ const errorHandle = context.getProp(websocketHandle, "error");
170
+ if (context.typeof(errorHandle) === "function") {
171
+ serveState.websocketHandlers.error = errorHandle;
172
+ } else {
173
+ errorHandle.dispose();
174
+ }
175
+ }
176
+ websocketHandle.dispose();
177
+ return context.undefined;
178
+ });
179
+ }
180
+ })
181
+
182
+ //# debugId=4D5C336D1FEB426664756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/globals/serve.ts"],
4
+ "sourcesContent": [
5
+ "import type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport type { StateMap } from \"@ricsam/quickjs-core\";\nimport { defineClass } from \"@ricsam/quickjs-core\";\nimport type { ServeState, ServerWebSocketState, WebSocketCommand } from \"../types.cjs\";\n\ninterface ServerState {\n serveState: ServeState;\n}\n\n/**\n * Create the ServerWebSocket class for QuickJS\n */\nexport function createServerWebSocketClass(\n context: QuickJSContext,\n stateMap: StateMap,\n onWebSocketCommand: (cmd: WebSocketCommand) => void\n): QuickJSHandle {\n return defineClass<ServerWebSocketState>(context, stateMap, {\n name: \"ServerWebSocket\",\n construct: (args) => {\n const connectionId = String(args[0]);\n const data = args[1];\n\n return {\n data,\n readyState: 1, // OPEN\n connectionId,\n wsHandle: null,\n };\n },\n properties: {\n data: {\n get(this: ServerWebSocketState) {\n return this.data;\n },\n },\n readyState: {\n get(this: ServerWebSocketState) {\n return this.readyState;\n },\n },\n },\n methods: {\n send(this: ServerWebSocketState, message: unknown) {\n if (this.readyState !== 1) {\n throw new Error(\"WebSocket is not open\");\n }\n\n let data: string | ArrayBuffer;\n if (typeof message === \"string\") {\n data = message;\n } else if (message instanceof ArrayBuffer) {\n data = message;\n } else if (message instanceof Uint8Array) {\n data = message.buffer.slice(\n message.byteOffset,\n message.byteOffset + message.byteLength\n ) as ArrayBuffer;\n } else {\n data = String(message);\n }\n\n onWebSocketCommand({\n type: \"message\",\n connectionId: this.connectionId,\n data,\n });\n },\n close(this: ServerWebSocketState, code?: unknown, reason?: unknown) {\n if (this.readyState === 3) {\n return; // Already closed\n }\n\n this.readyState = 2; // CLOSING\n\n onWebSocketCommand({\n type: \"close\",\n connectionId: this.connectionId,\n code: typeof code === \"number\" ? code : undefined,\n reason: typeof reason === \"string\" ? reason : undefined,\n });\n },\n },\n });\n}\n\n/**\n * Create the Server class for QuickJS\n */\nexport function createServerClass(\n context: QuickJSContext,\n stateMap: StateMap,\n serveState: ServeState\n): QuickJSHandle {\n return defineClass<ServerState>(context, stateMap, {\n name: \"Server\",\n construct: () => {\n return { serveState };\n },\n methods: {\n upgrade(\n this: ServerState,\n _request: unknown,\n options?: unknown\n ): boolean {\n const data =\n options && typeof options === \"object\" && \"data\" in options\n ? (options as { data: unknown }).data\n : undefined;\n\n this.serveState.pendingUpgrade = {\n requested: true,\n data,\n };\n\n return true;\n },\n },\n });\n}\n\n/**\n * Create the serve function for QuickJS\n * Uses context.newFunction instead of defineFunction to properly manage handle lifetimes\n */\nexport function createServeFunction(\n context: QuickJSContext,\n stateMap: StateMap,\n serveState: ServeState\n): QuickJSHandle {\n return context.newFunction(\"serve\", (optionsHandle) => {\n if (context.typeof(optionsHandle) !== \"object\") {\n throw context.newError(\"serve requires an options object\");\n }\n\n // Dispose previous handlers if any\n if (serveState.fetchHandler) {\n serveState.fetchHandler.dispose();\n serveState.fetchHandler = null;\n }\n\n // Get and store fetch handler - don't dispose, keep alive for later calls\n const fetchHandle = context.getProp(optionsHandle, \"fetch\");\n if (context.typeof(fetchHandle) === \"function\") {\n serveState.fetchHandler = fetchHandle;\n } else {\n fetchHandle.dispose();\n }\n\n // Get and store websocket handlers\n const websocketHandle = context.getProp(optionsHandle, \"websocket\");\n if (context.typeof(websocketHandle) === \"object\") {\n // Dispose previous handlers\n if (serveState.websocketHandlers.open) {\n serveState.websocketHandlers.open.dispose();\n serveState.websocketHandlers.open = undefined;\n }\n if (serveState.websocketHandlers.message) {\n serveState.websocketHandlers.message.dispose();\n serveState.websocketHandlers.message = undefined;\n }\n if (serveState.websocketHandlers.close) {\n serveState.websocketHandlers.close.dispose();\n serveState.websocketHandlers.close = undefined;\n }\n if (serveState.websocketHandlers.error) {\n serveState.websocketHandlers.error.dispose();\n serveState.websocketHandlers.error = undefined;\n }\n\n const openHandle = context.getProp(websocketHandle, \"open\");\n if (context.typeof(openHandle) === \"function\") {\n serveState.websocketHandlers.open = openHandle;\n } else {\n openHandle.dispose();\n }\n\n const messageHandle = context.getProp(websocketHandle, \"message\");\n if (context.typeof(messageHandle) === \"function\") {\n serveState.websocketHandlers.message = messageHandle;\n } else {\n messageHandle.dispose();\n }\n\n const closeHandle = context.getProp(websocketHandle, \"close\");\n if (context.typeof(closeHandle) === \"function\") {\n serveState.websocketHandlers.close = closeHandle;\n } else {\n closeHandle.dispose();\n }\n\n const errorHandle = context.getProp(websocketHandle, \"error\");\n if (context.typeof(errorHandle) === \"function\") {\n serveState.websocketHandlers.error = errorHandle;\n } else {\n errorHandle.dispose();\n }\n }\n websocketHandle.dispose();\n\n return context.undefined;\n });\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "4D5C336D1FEB426664756E2164756E21",
9
+ "names": []
10
+ }