@volter/browser-python 0.1.0

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -0
  3. package/dist/asgi-bridge.d.ts +3 -0
  4. package/dist/asgi-bridge.d.ts.map +1 -0
  5. package/dist/asgi-bridge.js +307 -0
  6. package/dist/asgi-bridge.js.map +1 -0
  7. package/dist/command.d.ts +20 -0
  8. package/dist/command.d.ts.map +1 -0
  9. package/dist/command.js +154 -0
  10. package/dist/command.js.map +1 -0
  11. package/dist/filesystem.d.ts +9 -0
  12. package/dist/filesystem.d.ts.map +1 -0
  13. package/dist/filesystem.js +96 -0
  14. package/dist/filesystem.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/package-manager.d.ts +8 -0
  20. package/dist/package-manager.d.ts.map +1 -0
  21. package/dist/package-manager.js +103 -0
  22. package/dist/package-manager.js.map +1 -0
  23. package/dist/process-host.d.ts +27 -0
  24. package/dist/process-host.d.ts.map +1 -0
  25. package/dist/process-host.js +326 -0
  26. package/dist/process-host.js.map +1 -0
  27. package/dist/protocol.d.ts +169 -0
  28. package/dist/protocol.d.ts.map +1 -0
  29. package/dist/protocol.js +2 -0
  30. package/dist/protocol.js.map +1 -0
  31. package/dist/pyodide-runtime.d.ts +37 -0
  32. package/dist/pyodide-runtime.d.ts.map +1 -0
  33. package/dist/pyodide-runtime.js +13 -0
  34. package/dist/pyodide-runtime.js.map +1 -0
  35. package/dist/server-host.d.ts +21 -0
  36. package/dist/server-host.d.ts.map +1 -0
  37. package/dist/server-host.js +526 -0
  38. package/dist/server-host.js.map +1 -0
  39. package/dist/sqlite-coherence.d.ts +19 -0
  40. package/dist/sqlite-coherence.d.ts.map +1 -0
  41. package/dist/sqlite-coherence.js +167 -0
  42. package/dist/sqlite-coherence.js.map +1 -0
  43. package/dist/subprocess-bridge.d.ts +12 -0
  44. package/dist/subprocess-bridge.d.ts.map +1 -0
  45. package/dist/subprocess-bridge.js +407 -0
  46. package/dist/subprocess-bridge.js.map +1 -0
  47. package/dist/worker.d.ts +2 -0
  48. package/dist/worker.d.ts.map +1 -0
  49. package/dist/worker.js +251 -0
  50. package/dist/worker.js.map +1 -0
  51. package/dist/wsgi-bridge.d.ts +21 -0
  52. package/dist/wsgi-bridge.d.ts.map +1 -0
  53. package/dist/wsgi-bridge.js +268 -0
  54. package/dist/wsgi-bridge.js.map +1 -0
  55. package/package.json +23 -0
@@ -0,0 +1,526 @@
1
+ import { PythonChildProcessHost } from "./process-host.js";
2
+ const MAX_ACTIVE_REQUESTS = 32;
3
+ const MAX_REQUEST_BYTES = 16 * 1024 * 1024;
4
+ const MAX_RESPONSE_BYTES = 32 * 1024 * 1024;
5
+ const MAX_HEADERS = 100;
6
+ const MAX_HEADER_CHARS = 32 * 1024;
7
+ const REQUEST_TIMEOUT_MS = 30_000;
8
+ const MAX_WEBSOCKET_FRAME_BYTES = 1024 * 1024;
9
+ const HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u;
10
+ /** Registers static and WSGI-backed Python processes on the shared virtual port table. */
11
+ export class BrowserPythonServerHost {
12
+ filesystem;
13
+ bridge;
14
+ processHost;
15
+ webSocketRegistry;
16
+ nextWebSocketConnection = 1;
17
+ streamingServers = new Map();
18
+ constructor(filesystem, bridge, processHost, webSocketRegistry) {
19
+ this.filesystem = filesystem;
20
+ this.bridge = bridge;
21
+ this.processHost = processHost;
22
+ this.webSocketRegistry = webSocketRegistry;
23
+ }
24
+ handleStreamingRequest(port, method, url, headers, body, callbacks) {
25
+ return this.streamingServers.get(port)?.(method, url, headers, body, callbacks) ?? Promise.resolve(false);
26
+ }
27
+ attach(port) {
28
+ const registered = new Set();
29
+ const pending = new Map();
30
+ const pendingStreams = new Map();
31
+ let nextRequestId = 1;
32
+ const childProcesses = new PythonChildProcessHost(this.filesystem, this.processHost);
33
+ const webSockets = new Map();
34
+ const webSocketRegistrations = new Map();
35
+ let closed = false;
36
+ const send = (message) => {
37
+ if (!closed)
38
+ port.postMessage(message);
39
+ };
40
+ const dispatchPython = (application, method, url, headers, body) => {
41
+ if (closed)
42
+ return Promise.reject(new Error("Python server process exited."));
43
+ if (pending.size + pendingStreams.size >= MAX_ACTIVE_REQUESTS) {
44
+ return Promise.resolve(textResponse(503, "Service Unavailable", "Python server request concurrency exceeded.\n"));
45
+ }
46
+ const bytes = requestBytes(body);
47
+ if (bytes.byteLength > MAX_REQUEST_BYTES) {
48
+ return Promise.resolve(textResponse(413, "Payload Too Large", "Request body exceeds 16 MiB.\n"));
49
+ }
50
+ assertHeaders(headers);
51
+ const requestId = nextRequestId++;
52
+ return new Promise((resolve, reject) => {
53
+ const timeout = window.setTimeout(() => {
54
+ pending.delete(requestId);
55
+ reject(new Error("Python server request timed out."));
56
+ }, REQUEST_TIMEOUT_MS);
57
+ pending.set(requestId, { resolve, reject, timeout });
58
+ send({
59
+ type: "http-request",
60
+ requestId,
61
+ application,
62
+ method,
63
+ url,
64
+ headers,
65
+ bodyBase64: encode(bytes),
66
+ });
67
+ });
68
+ };
69
+ const dispatchStreaming = (method, url, headers, body, callbacks) => {
70
+ if (closed)
71
+ return Promise.reject(new Error("Python server process exited."));
72
+ if (pending.size + pendingStreams.size >= MAX_ACTIVE_REQUESTS) {
73
+ return Promise.reject(new Error("Python server request concurrency exceeded."));
74
+ }
75
+ const bytes = requestBytes(body);
76
+ if (bytes.byteLength > MAX_REQUEST_BYTES) {
77
+ return Promise.reject(new Error("Request body exceeds 16 MiB."));
78
+ }
79
+ assertHeaders(headers);
80
+ const requestId = nextRequestId++;
81
+ return new Promise((resolve, reject) => {
82
+ const timeout = window.setTimeout(() => {
83
+ const request = pendingStreams.get(requestId);
84
+ if (!request)
85
+ return;
86
+ pendingStreams.delete(requestId);
87
+ if (request.started) {
88
+ request.callbacks.end();
89
+ request.resolve(true);
90
+ }
91
+ else
92
+ request.reject(new Error("Python streaming response timed out."));
93
+ }, REQUEST_TIMEOUT_MS);
94
+ pendingStreams.set(requestId, { callbacks, resolve, reject, timeout, bytes: 0, started: false });
95
+ send({
96
+ type: "http-request",
97
+ requestId,
98
+ application: "asgi",
99
+ method,
100
+ url,
101
+ headers,
102
+ bodyBase64: encode(bytes),
103
+ streaming: true,
104
+ });
105
+ });
106
+ };
107
+ const openWebSocket = (path, protocols, handlers) => {
108
+ if (closed)
109
+ throw new Error("Python server process exited.");
110
+ if (webSockets.size >= MAX_ACTIVE_REQUESTS)
111
+ throw new Error("Python WebSocket concurrency exceeded.");
112
+ const connectionId = this.nextWebSocketConnection++;
113
+ webSockets.set(connectionId, { handlers, protocols });
114
+ send({ type: "websocket-open", connectionId, path, protocols: [...protocols] });
115
+ return {
116
+ send: (data) => {
117
+ if (!webSockets.has(connectionId))
118
+ throw new Error("Python WebSocket is closed.");
119
+ assertWebSocketData(data);
120
+ send({ type: "websocket-message", connectionId, data });
121
+ },
122
+ close: (code = 1000, reason = "") => {
123
+ if (webSockets.has(connectionId))
124
+ send({ type: "websocket-close", connectionId, code, reason });
125
+ },
126
+ abort: () => {
127
+ if (!webSockets.delete(connectionId))
128
+ return;
129
+ send({ type: "websocket-close", connectionId, code: 1006, reason: "" });
130
+ },
131
+ };
132
+ };
133
+ port.onmessage = (event) => {
134
+ const message = event.data;
135
+ if (message.type === "websocket-opened") {
136
+ const socket = webSockets.get(message.connectionId);
137
+ if (!socket)
138
+ return;
139
+ if (message.protocol && !socket.protocols.includes(message.protocol)) {
140
+ socket.handlers.error("Python ASGI app selected an unrequested WebSocket protocol.");
141
+ socket.handlers.close(1002, "Invalid subprotocol", false);
142
+ webSockets.delete(message.connectionId);
143
+ }
144
+ else
145
+ socket.handlers.open(message.protocol);
146
+ return;
147
+ }
148
+ if (message.type === "websocket-message") {
149
+ const socket = webSockets.get(message.connectionId);
150
+ if (!socket)
151
+ return;
152
+ try {
153
+ assertWebSocketData(message.data);
154
+ socket.handlers.message(message.data);
155
+ }
156
+ catch (cause) {
157
+ socket.handlers.error(cause instanceof Error ? cause.message : String(cause));
158
+ socket.handlers.close(1009, "Frame too large", false);
159
+ webSockets.delete(message.connectionId);
160
+ }
161
+ return;
162
+ }
163
+ if (message.type === "websocket-close") {
164
+ const socket = webSockets.get(message.connectionId);
165
+ if (!socket)
166
+ return;
167
+ webSockets.delete(message.connectionId);
168
+ try {
169
+ assertWebSocketClose(message.code, message.reason);
170
+ socket.handlers.close(message.code, message.reason, message.clean);
171
+ }
172
+ catch (cause) {
173
+ socket.handlers.error(cause instanceof Error ? cause.message : String(cause));
174
+ socket.handlers.close(1002, "Invalid close frame", false);
175
+ }
176
+ return;
177
+ }
178
+ if (message.type === "websocket-error") {
179
+ const socket = webSockets.get(message.connectionId);
180
+ if (!socket)
181
+ return;
182
+ socket.handlers.error(message.error);
183
+ return;
184
+ }
185
+ if (childProcesses.handles(message)) {
186
+ childProcesses.handle(message);
187
+ return;
188
+ }
189
+ if (message.type === "http-stream-start") {
190
+ const request = pendingStreams.get(message.requestId);
191
+ if (!request)
192
+ return;
193
+ try {
194
+ assertResponse(message.statusCode, message.statusMessage, message.headers);
195
+ request.callbacks.start(message.statusCode, message.statusMessage, message.headers);
196
+ request.started = true;
197
+ refreshStreamTimeout(request, message.requestId, pendingStreams);
198
+ }
199
+ catch (cause) {
200
+ failStream(message.requestId, request, pendingStreams, cause);
201
+ }
202
+ return;
203
+ }
204
+ if (message.type === "http-stream-chunk") {
205
+ const request = pendingStreams.get(message.requestId);
206
+ if (!request)
207
+ return;
208
+ try {
209
+ if (!request.started)
210
+ throw new Error("Python stream emitted a body before response start.");
211
+ const chunk = decode(message.bodyBase64);
212
+ request.bytes += chunk.byteLength;
213
+ if (request.bytes > MAX_RESPONSE_BYTES)
214
+ throw new Error("Python server response exceeds 32 MiB.");
215
+ request.callbacks.chunk(chunk);
216
+ refreshStreamTimeout(request, message.requestId, pendingStreams);
217
+ }
218
+ catch (cause) {
219
+ failStream(message.requestId, request, pendingStreams, cause);
220
+ }
221
+ return;
222
+ }
223
+ if (message.type === "http-stream-end") {
224
+ const request = pendingStreams.get(message.requestId);
225
+ if (!request)
226
+ return;
227
+ pendingStreams.delete(message.requestId);
228
+ clearTimeout(request.timeout);
229
+ if (!request.started)
230
+ request.reject(new Error("Python stream ended before response start."));
231
+ else {
232
+ request.callbacks.end();
233
+ request.resolve(true);
234
+ }
235
+ return;
236
+ }
237
+ if (message.type === "http-stream-error") {
238
+ const request = pendingStreams.get(message.requestId);
239
+ if (!request)
240
+ return;
241
+ failStream(message.requestId, request, pendingStreams, new Error(message.error));
242
+ return;
243
+ }
244
+ if (message.type === "http-response") {
245
+ const request = pending.get(message.requestId);
246
+ if (!request)
247
+ return;
248
+ pending.delete(message.requestId);
249
+ clearTimeout(request.timeout);
250
+ try {
251
+ if (message.error)
252
+ throw new Error(message.error);
253
+ const body = decode(message.bodyBase64);
254
+ if (body.byteLength > MAX_RESPONSE_BYTES)
255
+ throw new Error("Python server response exceeds 32 MiB.");
256
+ assertResponse(message.statusCode, message.statusMessage, message.headers);
257
+ request.resolve({
258
+ statusCode: message.statusCode,
259
+ statusMessage: message.statusMessage,
260
+ headers: message.headers,
261
+ body,
262
+ });
263
+ }
264
+ catch (cause) {
265
+ request.reject(cause);
266
+ }
267
+ return;
268
+ }
269
+ let result = 0;
270
+ if (!validPort(message.port) || this.bridge.getServerPorts().includes(message.port))
271
+ result = -98;
272
+ else {
273
+ try {
274
+ const handler = message.server === "static"
275
+ ? (method, url) => Promise.resolve(this.handleStatic(normalize(message.root), method, url))
276
+ : (method, url, headers, body) => dispatchPython(message.server, method, url, headers, body);
277
+ const server = {
278
+ listening: true,
279
+ address: () => ({ port: message.port, address: "0.0.0.0", family: "IPv4" }),
280
+ handleRequest: handler,
281
+ };
282
+ this.bridge.registerServer(server, message.port);
283
+ registered.add(message.port);
284
+ if (message.server === "asgi") {
285
+ this.streamingServers.set(message.port, dispatchStreaming);
286
+ if (this.webSocketRegistry) {
287
+ webSocketRegistrations.set(message.port, this.webSocketRegistry.register(message.port, {
288
+ open: (path, protocols, handlers) => openWebSocket(path, protocols, handlers),
289
+ }));
290
+ }
291
+ }
292
+ }
293
+ catch {
294
+ webSocketRegistrations.get(message.port)?.();
295
+ webSocketRegistrations.delete(message.port);
296
+ this.streamingServers.delete(message.port);
297
+ this.bridge.unregisterServer(message.port);
298
+ result = -98;
299
+ }
300
+ }
301
+ send({ type: "ack", requestId: message.requestId, result });
302
+ };
303
+ port.start();
304
+ return () => {
305
+ if (closed)
306
+ return;
307
+ closed = true;
308
+ for (const registeredPort of registered)
309
+ this.bridge.unregisterServer(registeredPort);
310
+ for (const registeredPort of registered)
311
+ this.streamingServers.delete(registeredPort);
312
+ for (const release of webSocketRegistrations.values())
313
+ release();
314
+ webSocketRegistrations.clear();
315
+ registered.clear();
316
+ for (const request of pending.values()) {
317
+ clearTimeout(request.timeout);
318
+ request.reject(new Error("Python server process exited."));
319
+ }
320
+ pending.clear();
321
+ for (const request of pendingStreams.values()) {
322
+ clearTimeout(request.timeout);
323
+ if (request.started) {
324
+ request.callbacks.end();
325
+ request.resolve(true);
326
+ }
327
+ else
328
+ request.reject(new Error("Python server process exited."));
329
+ }
330
+ pendingStreams.clear();
331
+ for (const socket of webSockets.values()) {
332
+ socket.handlers.error("Python server process exited.");
333
+ socket.handlers.close(1011, "Python server process exited", false);
334
+ }
335
+ webSockets.clear();
336
+ childProcesses.close();
337
+ port.close();
338
+ };
339
+ }
340
+ handleStatic(root, method, rawUrl) {
341
+ if (method !== "GET" && method !== "HEAD")
342
+ return textResponse(405, "Method Not Allowed", "Method not allowed\n");
343
+ let path;
344
+ try {
345
+ path = resolveUrlPath(root, rawUrl);
346
+ }
347
+ catch {
348
+ return textResponse(400, "Bad Request", "Bad request\n");
349
+ }
350
+ if (!this.filesystem.existsSync(path))
351
+ return textResponse(404, "Not Found", "File not found\n");
352
+ if (this.filesystem.statSync(path).isDirectory()) {
353
+ const index = path === "/" ? "/index.html" : `${path}/index.html`;
354
+ if (this.filesystem.existsSync(index) && this.filesystem.statSync(index).isFile())
355
+ path = index;
356
+ else
357
+ return directoryResponse(path, this.filesystem.readdirSync(path), method === "HEAD");
358
+ }
359
+ if (!this.filesystem.statSync(path).isFile())
360
+ return textResponse(404, "Not Found", "File not found\n");
361
+ const body = method === "HEAD" ? new Uint8Array() : this.filesystem.readFileSync(path);
362
+ return {
363
+ statusCode: 200,
364
+ statusMessage: "OK",
365
+ headers: {
366
+ "content-type": contentType(path),
367
+ "content-length": String(this.filesystem.statSync(path).size),
368
+ "cache-control": "no-store",
369
+ },
370
+ body,
371
+ };
372
+ }
373
+ }
374
+ function refreshStreamTimeout(request, requestId, pending) {
375
+ clearTimeout(request.timeout);
376
+ request.timeout = window.setTimeout(() => {
377
+ if (!pending.has(requestId))
378
+ return;
379
+ pending.delete(requestId);
380
+ if (request.started) {
381
+ request.callbacks.end();
382
+ request.resolve(true);
383
+ }
384
+ else
385
+ request.reject(new Error("Python streaming response timed out."));
386
+ }, REQUEST_TIMEOUT_MS);
387
+ }
388
+ function failStream(requestId, request, pending, cause) {
389
+ pending.delete(requestId);
390
+ clearTimeout(request.timeout);
391
+ if (request.started) {
392
+ request.callbacks.end();
393
+ request.resolve(true);
394
+ }
395
+ else
396
+ request.reject(cause);
397
+ }
398
+ function requestBytes(value) {
399
+ if (value === undefined || value === null)
400
+ return new Uint8Array();
401
+ if (typeof value === "string")
402
+ return new TextEncoder().encode(value);
403
+ if (value instanceof Uint8Array)
404
+ return Uint8Array.from(value);
405
+ if (value instanceof ArrayBuffer)
406
+ return new Uint8Array(value.slice(0));
407
+ throw new Error("Unsupported Python request body.");
408
+ }
409
+ function assertWebSocketData(data) {
410
+ const bytes = data.kind === "text"
411
+ ? new TextEncoder().encode(data.text).byteLength
412
+ : decode(data.base64).byteLength;
413
+ if (bytes > MAX_WEBSOCKET_FRAME_BYTES)
414
+ throw new Error("Python WebSocket frame exceeds 1 MiB.");
415
+ }
416
+ function assertWebSocketClose(code, reason) {
417
+ if (!Number.isInteger(code) || code < 1000 || code > 4999 || [1004, 1005, 1006, 1015].includes(code)) {
418
+ throw new Error("Invalid Python WebSocket close code.");
419
+ }
420
+ if (new TextEncoder().encode(reason).byteLength > 123)
421
+ throw new Error("Python WebSocket close reason is too large.");
422
+ }
423
+ function assertHeaders(headers) {
424
+ const entries = Object.entries(headers);
425
+ if (entries.length > MAX_HEADERS)
426
+ throw new Error("Python request has too many headers.");
427
+ let characters = 0;
428
+ for (const [name, value] of entries) {
429
+ if (!HEADER_NAME.test(name) || /[\u0000\r\n]/u.test(value))
430
+ throw new Error("Malformed Python request header.");
431
+ characters += name.length + value.length;
432
+ }
433
+ if (characters > MAX_HEADER_CHARS)
434
+ throw new Error("Python request headers are too large.");
435
+ }
436
+ function assertResponse(statusCode, statusMessage, headers) {
437
+ if (!Number.isInteger(statusCode) || statusCode < 100 || statusCode > 599 || /[\u0000\r\n]/u.test(statusMessage)) {
438
+ throw new Error("Malformed Python response status.");
439
+ }
440
+ const entries = Object.entries(headers);
441
+ if (entries.length > MAX_HEADERS)
442
+ throw new Error("Python response has too many headers.");
443
+ let characters = 0;
444
+ for (const [name, rawValue] of entries) {
445
+ const values = Array.isArray(rawValue) ? rawValue : [rawValue];
446
+ if (!HEADER_NAME.test(name) || values.some((value) => /[\u0000\r\n]/u.test(value))) {
447
+ throw new Error("Malformed Python response header.");
448
+ }
449
+ characters += name.length + values.reduce((total, value) => total + value.length, 0);
450
+ }
451
+ if (characters > MAX_HEADER_CHARS)
452
+ throw new Error("Python response headers are too large.");
453
+ }
454
+ function resolveUrlPath(root, rawUrl) {
455
+ const pathname = decodeURIComponent(new URL(rawUrl, "http://localhost").pathname);
456
+ if (pathname.includes("\0"))
457
+ throw new Error("Invalid path");
458
+ const path = normalize(`${root}/${pathname}`);
459
+ if (path !== root && !path.startsWith(`${root}/`))
460
+ throw new Error("Path escapes root");
461
+ return path;
462
+ }
463
+ function normalize(path) {
464
+ const parts = [];
465
+ for (const part of path.replaceAll("\\", "/").split("/")) {
466
+ if (!part || part === ".")
467
+ continue;
468
+ if (part === "..")
469
+ parts.pop();
470
+ else
471
+ parts.push(part);
472
+ }
473
+ return `/${parts.join("/")}`;
474
+ }
475
+ function directoryResponse(path, entries, head) {
476
+ const html = `<!doctype html><title>Directory listing for ${escapeHtml(path)}</title><h1>Directory listing for ${escapeHtml(path)}</h1><ul>${entries.sort()
477
+ .map((entry) => `<li><a href="${encodeURIComponent(entry)}">${escapeHtml(entry)}</a></li>`).join("")}</ul>`;
478
+ const bytes = new TextEncoder().encode(html);
479
+ return {
480
+ statusCode: 200,
481
+ statusMessage: "OK",
482
+ headers: { "content-type": "text/html; charset=utf-8", "content-length": String(bytes.byteLength), "cache-control": "no-store" },
483
+ body: head ? new Uint8Array() : bytes,
484
+ };
485
+ }
486
+ function textResponse(statusCode, statusMessage, body) {
487
+ const bytes = new TextEncoder().encode(body);
488
+ return {
489
+ statusCode,
490
+ statusMessage,
491
+ headers: { "content-type": "text/plain; charset=utf-8", "content-length": String(bytes.byteLength), "cache-control": "no-store" },
492
+ body: bytes,
493
+ };
494
+ }
495
+ function contentType(path) {
496
+ const extension = path.slice(path.lastIndexOf(".")).toLowerCase();
497
+ return {
498
+ ".css": "text/css; charset=utf-8",
499
+ ".html": "text/html; charset=utf-8",
500
+ ".js": "text/javascript; charset=utf-8",
501
+ ".json": "application/json; charset=utf-8",
502
+ ".mjs": "text/javascript; charset=utf-8",
503
+ ".png": "image/png",
504
+ ".svg": "image/svg+xml",
505
+ ".txt": "text/plain; charset=utf-8",
506
+ ".wasm": "application/wasm",
507
+ }[extension] ?? "application/octet-stream";
508
+ }
509
+ function escapeHtml(value) {
510
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;");
511
+ }
512
+ function validPort(port) {
513
+ return Number.isSafeInteger(port) && port > 0 && port <= 65_535;
514
+ }
515
+ function encode(value) {
516
+ let binary = "";
517
+ for (let offset = 0; offset < value.byteLength; offset += 0x8000) {
518
+ binary += String.fromCharCode(...value.subarray(offset, offset + 0x8000));
519
+ }
520
+ return btoa(binary);
521
+ }
522
+ function decode(value) {
523
+ const binary = atob(value);
524
+ return Uint8Array.from(binary, (character) => character.charCodeAt(0));
525
+ }
526
+ //# sourceMappingURL=server-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-host.js","sourceRoot":"","sources":["../src/server-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
2
+ import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
3
+ import type { PyodideFileSystem, PyodideRuntime } from "./pyodide-runtime.js";
4
+ /** Serializes unchanged CPython sqlite connections with every browser lane. */
5
+ export declare class PythonSqliteCoherence {
6
+ private readonly filesystem;
7
+ private readonly locks;
8
+ private readonly coherence;
9
+ private readonly counts;
10
+ private readonly owner;
11
+ constructor(filesystem: PyodideFileSystem, locks: BrowserFileLockClient, coherence: BrowserFileCoherenceClient, ownerPrefix: string);
12
+ install(pyodide: PyodideRuntime): Promise<unknown>;
13
+ releaseAll(): void;
14
+ private acquire;
15
+ private release;
16
+ private readLocal;
17
+ private writeLocal;
18
+ }
19
+ //# sourceMappingURL=sqlite-coherence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-coherence.d.ts","sourceRoot":"","sources":["../src/sqlite-coherence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAG3B,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE9E,+EAA+E;AAC/E,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAGZ,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,0BAA0B,EACtD,WAAW,EAAE,MAAM;IAKrB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlD,UAAU,IAAI,IAAI;IAOlB,OAAO,CAAC,OAAO;IAiCf,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;CAYnB"}