@volter/browser-python 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/command.d.ts +13 -1
- package/dist/command.d.ts.map +1 -1
- package/dist/command.js +79 -11
- package/dist/command.js.map +1 -1
- package/dist/filesystem.d.ts +9 -0
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +29 -0
- package/dist/filesystem.js.map +1 -1
- package/dist/host.d.ts +31 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +76 -0
- package/dist/host.js.map +1 -0
- package/dist/pack-filesystem.d.ts +22 -0
- package/dist/pack-filesystem.d.ts.map +1 -0
- package/dist/pack-filesystem.js +252 -0
- package/dist/pack-filesystem.js.map +1 -0
- package/dist/package-manager.d.ts +14 -0
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +58 -3
- package/dist/package-manager.js.map +1 -1
- package/dist/process-host.d.ts +13 -2
- package/dist/process-host.d.ts.map +1 -1
- package/dist/process-host.js +45 -8
- package/dist/process-host.js.map +1 -1
- package/dist/protocol.d.ts +28 -4
- package/dist/protocol.d.ts.map +1 -1
- package/dist/pyodide-artifacts.d.ts +22 -0
- package/dist/pyodide-artifacts.d.ts.map +1 -0
- package/dist/pyodide-artifacts.js +40 -0
- package/dist/pyodide-artifacts.js.map +1 -0
- package/dist/pyodide-runtime.d.ts +10 -2
- package/dist/pyodide-runtime.d.ts.map +1 -1
- package/dist/pyodide-runtime.js +23 -13
- package/dist/pyodide-runtime.js.map +1 -1
- package/dist/server-host.d.ts +2 -2
- package/dist/server-host.d.ts.map +1 -1
- package/dist/server-host.js +4 -4
- package/dist/server-host.js.map +1 -1
- package/dist/subprocess-bridge.d.ts +6 -2
- package/dist/subprocess-bridge.d.ts.map +1 -1
- package/dist/subprocess-bridge.js +9 -8
- package/dist/subprocess-bridge.js.map +1 -1
- package/dist/worker.js +147 -20
- package/dist/worker.js.map +1 -1
- package/dist/wsgi-bridge.d.ts.map +1 -1
- package/dist/wsgi-bridge.js +3 -0
- package/dist/wsgi-bridge.js.map +1 -1
- package/package.json +21 -7
package/README.md
CHANGED
|
@@ -5,7 +5,8 @@ The Pyodide execution engine for Browser Substrate. It registers `python`,
|
|
|
5
5
|
the browser workspace coherent across its worker boundary.
|
|
6
6
|
|
|
7
7
|
Supported application paths include scripts, `python -c`, hash-resolved
|
|
8
|
-
Micropip installs
|
|
8
|
+
Micropip installs (an in-tab install: a stopgap W32 ends, after which a
|
|
9
|
+
project's Python dependencies arrive as packs prepared on the machine), static HTTP servers, Flask/WSGI, ASGI HTTP streaming and
|
|
9
10
|
WebSockets, lifecycle events, SQLite file coherence, and routed subprocesses.
|
|
10
11
|
Virtual servers use the same port and sandbox bridge as Node and WALI; they do
|
|
11
12
|
not open a host-machine listener.
|
package/dist/command.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
2
|
import type { BrowserProcessResult, BrowserProcessRunOptions } from "@volter/browser-runtime/browser-process.js";
|
|
3
3
|
import type { PythonServerAttachment } from "./protocol.js";
|
|
4
4
|
import type { BrowserWorkerLike } from "@volter/browser-runtime/cross-origin-worker.js";
|
|
@@ -8,6 +8,8 @@ export interface BrowserPythonCommandOptions {
|
|
|
8
8
|
server: PythonServerAttachment;
|
|
9
9
|
onFilesystemCommit?(filesystem: BrowserFileSystem): void | Promise<void>;
|
|
10
10
|
createWorker?(): Promise<BrowserWorkerLike>;
|
|
11
|
+
/** An https index, or on a host an absolute directory, the pinned Pyodide loads from. */
|
|
12
|
+
runtimeIndexUrl?: string;
|
|
11
13
|
/** Enables SAB-backed file coherence and subprocess calls for same-origin workers. */
|
|
12
14
|
sharedMemoryChannels?: boolean;
|
|
13
15
|
network?: {
|
|
@@ -21,11 +23,21 @@ export declare class BrowserPythonCommand {
|
|
|
21
23
|
private readonly filesystem;
|
|
22
24
|
private readonly options;
|
|
23
25
|
private filesystemCommitTail;
|
|
26
|
+
/**
|
|
27
|
+
* A worker already booting Pyodide for the next run, which finds an
|
|
28
|
+
* interpreter loaded and unused instead of loading one: every `python`
|
|
29
|
+
* started a worker and booted Pyodide from nothing (ADR-0042).
|
|
30
|
+
*/
|
|
31
|
+
private standby;
|
|
32
|
+
private standbyTimer;
|
|
24
33
|
private readonly nativeFetch;
|
|
25
34
|
private activeFetches;
|
|
26
35
|
private networkBytes;
|
|
27
36
|
constructor(filesystem: BrowserFileSystem, options: BrowserPythonCommandOptions);
|
|
28
37
|
run: (argv: readonly string[], options?: BrowserProcessRunOptions) => Promise<BrowserProcessResult>;
|
|
38
|
+
private createWorker;
|
|
39
|
+
/** The standby, or a new worker; either way the next run's standby starts booting now. */
|
|
40
|
+
private takeWorker;
|
|
29
41
|
private applyResult;
|
|
30
42
|
private persistFilesystem;
|
|
31
43
|
private handleNetwork;
|
package/dist/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AACA,OAAO,EAA8D,KAAK,iBAAiB,EAAkC,MAAM,+CAA+C,CAAC;AAMnL,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAoB,sBAAsB,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAYxF,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,kBAAkB,CAAC,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,YAAY,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AASD,oFAAoF;AACpF,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,oBAAoB,CAAoC;IAChE;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;gBAGN,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,2BAA2B;IAGvD,GAAG,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,wBAA6B,KAAG,OAAO,CAAC,oBAAoB,CAAC,CAmH1G;IAEF,OAAO,CAAC,YAAY;IAMpB,0FAA0F;IAC1F,OAAO,CAAC,UAAU;YAwBJ,WAAW;YASX,iBAAiB;YAMjB,aAAa;IAwD3B,OAAO,CAAC,cAAc;CAMvB"}
|
package/dist/command.js
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { requireProcessFilesystemPolicySupport } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
|
|
2
|
+
import { localBrowserFileSystemStore, readBrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
|
|
3
|
+
import { applyProcessFilesystemPatch, patchedSnapshot, } from "@volter/browser-runtime/browser-process-filesystem.js";
|
|
2
4
|
import { assertManagedPythonRequest } from "./pyodide-runtime.js";
|
|
3
5
|
import { createBrowserFileLockChannel, sharedBrowserFileLockCoordinator, } from "@volter/browser-runtime/browser-file-locks.js";
|
|
4
6
|
import { createBrowserFileCoherenceChannel, sharedBrowserFileCoherenceCoordinator, } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
7
|
+
import { pageWorker } from "@volter/browser-runtime/page-workers.js";
|
|
8
|
+
/**
|
|
9
|
+
* How long a worker booted for the next `python` waits for it. A standby is
|
|
10
|
+
* started only once a container has run Python, so a container that never
|
|
11
|
+
* does pays nothing; one that stops running it gives the memory back.
|
|
12
|
+
*/
|
|
13
|
+
const STANDBY_IDLE_MS = 30_000;
|
|
5
14
|
/** Runs CPython/Pyodide in a worker against the shared project and process host. */
|
|
6
15
|
export class BrowserPythonCommand {
|
|
7
16
|
filesystem;
|
|
8
17
|
options;
|
|
9
18
|
filesystemCommitTail = Promise.resolve();
|
|
19
|
+
/**
|
|
20
|
+
* A worker already booting Pyodide for the next run, which finds an
|
|
21
|
+
* interpreter loaded and unused instead of loading one: every `python`
|
|
22
|
+
* started a worker and booted Pyodide from nothing (ADR-0042).
|
|
23
|
+
*/
|
|
24
|
+
standby;
|
|
25
|
+
standbyTimer;
|
|
10
26
|
nativeFetch = globalThis.fetch.bind(globalThis);
|
|
11
27
|
activeFetches = 0;
|
|
12
28
|
networkBytes = 0;
|
|
@@ -15,16 +31,14 @@ export class BrowserPythonCommand {
|
|
|
15
31
|
this.options = options;
|
|
16
32
|
}
|
|
17
33
|
run = async (argv, options = {}) => {
|
|
34
|
+
requireProcessFilesystemPolicySupport(options.filesystemPolicy, undefined);
|
|
18
35
|
if (options.signal?.aborted)
|
|
19
36
|
return Promise.resolve({ stdout: "", stderr: "", exitCode: 130 });
|
|
20
37
|
const stdin = await collectStdin(options);
|
|
21
38
|
if (options.signal?.aborted)
|
|
22
39
|
return { stdout: "", stderr: "", exitCode: 130 };
|
|
23
|
-
const worker = this.
|
|
24
|
-
? await this.options.createWorker()
|
|
25
|
-
: new Worker(new URL("./worker.js", import.meta.url), { type: "module", name: "browser-python" });
|
|
40
|
+
const worker = await this.takeWorker();
|
|
26
41
|
const channel = new MessageChannel();
|
|
27
|
-
const releaseServer = this.options.server.attach(channel.port1);
|
|
28
42
|
const sharedMemoryChannels = this.options.sharedMemoryChannels !== false;
|
|
29
43
|
const lockOwner = sharedMemoryChannels ? `python:${crypto.randomUUID()}` : undefined;
|
|
30
44
|
const lockChannel = sharedMemoryChannels ? createBrowserFileLockChannel() : undefined;
|
|
@@ -33,8 +47,24 @@ export class BrowserPythonCommand {
|
|
|
33
47
|
const coherenceChannel = sharedMemoryChannels ? createBrowserFileCoherenceChannel() : undefined;
|
|
34
48
|
const releaseFileCoherence = coherenceChannel
|
|
35
49
|
? sharedBrowserFileCoherenceCoordinator.attach(coherenceChannel.server, this.filesystem, () => this.persistFilesystem()) : undefined;
|
|
36
|
-
|
|
50
|
+
// A page over a worker's store sends the worker to the store, not the
|
|
51
|
+
// tree: the worker reads what the program opens, and the page keeps a
|
|
52
|
+
// metadata snapshot to tell what changed.
|
|
53
|
+
const store = localBrowserFileSystemStore(this.filesystem);
|
|
54
|
+
// What the page has written must be in the store before the worker
|
|
55
|
+
// opens it, or the worker's first look at the tree is behind the
|
|
56
|
+
// snapshot the page keeps to tell what the program changed.
|
|
57
|
+
if (store)
|
|
58
|
+
await this.filesystem.flush?.();
|
|
59
|
+
const before = await readBrowserFileSystemSnapshot(this.filesystem, "/", store ? { metadataRoots: ["/workspace"] } : {});
|
|
37
60
|
let synchronized = before;
|
|
61
|
+
// The tree as the worker holds it. The worker's reports are against it,
|
|
62
|
+
// and so are the changes a child of this program leaves behind: what
|
|
63
|
+
// crosses either way is the difference, never the tree.
|
|
64
|
+
const releaseServer = this.options.server.attach(channel.port1, {
|
|
65
|
+
base: () => synchronized,
|
|
66
|
+
advance: (patch) => { synchronized = patchedSnapshot(synchronized, patch); },
|
|
67
|
+
});
|
|
38
68
|
let commitQueue = Promise.resolve();
|
|
39
69
|
let stdout = "";
|
|
40
70
|
let stderr = "";
|
|
@@ -75,11 +105,13 @@ export class BrowserPythonCommand {
|
|
|
75
105
|
void this.handleNetwork(worker, message);
|
|
76
106
|
return;
|
|
77
107
|
}
|
|
78
|
-
if (!("
|
|
108
|
+
if (!("patch" in message))
|
|
79
109
|
return;
|
|
110
|
+
// The worker reports what changed since its last report; the page
|
|
111
|
+
// keeps the snapshot that report was against.
|
|
80
112
|
const previous = synchronized;
|
|
81
|
-
synchronized = message.
|
|
82
|
-
commitQueue = commitQueue.then(() => this.applyResult(previous, message.
|
|
113
|
+
synchronized = patchedSnapshot(previous, message.patch);
|
|
114
|
+
commitQueue = commitQueue.then(() => this.applyResult(previous, message.patch));
|
|
83
115
|
if (message.type === "commit") {
|
|
84
116
|
void commitQueue.then(() => worker.postMessage({ type: "commit-ack", commitId: message.commitId }), (cause) => worker.postMessage({
|
|
85
117
|
type: "commit-ack",
|
|
@@ -106,7 +138,9 @@ export class BrowserPythonCommand {
|
|
|
106
138
|
cwd: options.cwd ?? this.options.cwd ?? "/workspace",
|
|
107
139
|
env: { ...this.options.env, ...options.env },
|
|
108
140
|
filesystem: before,
|
|
141
|
+
...(store ? { store: { projectId: store } } : {}),
|
|
109
142
|
stdinBase64: encodeBase64(stdin),
|
|
143
|
+
...(this.options.runtimeIndexUrl ? { runtimeIndexUrl: this.options.runtimeIndexUrl } : {}),
|
|
110
144
|
serverPort: channel.port2,
|
|
111
145
|
...(lockChannel && lockOwner ? { fileLocks: { channel: lockChannel.client, owner: lockOwner } } : {}),
|
|
112
146
|
...(coherenceChannel ? { fileCoherence: coherenceChannel.client } : {}),
|
|
@@ -118,9 +152,41 @@ export class BrowserPythonCommand {
|
|
|
118
152
|
]);
|
|
119
153
|
});
|
|
120
154
|
};
|
|
121
|
-
|
|
155
|
+
createWorker() {
|
|
156
|
+
return this.options.createWorker
|
|
157
|
+
? this.options.createWorker()
|
|
158
|
+
: Promise.resolve(pageWorker(new Worker(new URL("./worker.js", import.meta.url), { type: "module", name: "browser-python" })));
|
|
159
|
+
}
|
|
160
|
+
/** The standby, or a new worker; either way the next run's standby starts booting now. */
|
|
161
|
+
takeWorker() {
|
|
162
|
+
const ready = this.standby;
|
|
163
|
+
this.standby = undefined;
|
|
164
|
+
if (this.standbyTimer !== undefined)
|
|
165
|
+
clearTimeout(this.standbyTimer);
|
|
166
|
+
const worker = ready ?? this.createWorker();
|
|
167
|
+
const next = this.createWorker().then((standby) => {
|
|
168
|
+
// Booting fetches the runtime through the page, as a run's worker does.
|
|
169
|
+
standby.onmessage = (event) => {
|
|
170
|
+
const message = event.data;
|
|
171
|
+
if (message.type === "network-request")
|
|
172
|
+
void this.handleNetwork(standby, message);
|
|
173
|
+
};
|
|
174
|
+
standby.postMessage({ type: "prepare", ...(this.options.runtimeIndexUrl ? { runtimeIndexUrl: this.options.runtimeIndexUrl } : {}) });
|
|
175
|
+
return standby;
|
|
176
|
+
});
|
|
177
|
+
void next.catch(() => undefined);
|
|
178
|
+
this.standby = next;
|
|
179
|
+
this.standbyTimer = setTimeout(() => {
|
|
180
|
+
if (this.standby !== next)
|
|
181
|
+
return;
|
|
182
|
+
this.standby = undefined;
|
|
183
|
+
void next.then((standby) => standby.terminate(), () => undefined);
|
|
184
|
+
}, STANDBY_IDLE_MS);
|
|
185
|
+
return worker;
|
|
186
|
+
}
|
|
187
|
+
async applyResult(before, patch) {
|
|
122
188
|
const commit = this.filesystemCommitTail.then(async () => {
|
|
123
|
-
applyProcessFilesystemPatch(this.filesystem,
|
|
189
|
+
applyProcessFilesystemPatch(this.filesystem, patch, before);
|
|
124
190
|
await this.options.onFilesystemCommit?.(this.filesystem);
|
|
125
191
|
});
|
|
126
192
|
this.filesystemCommitTail = commit.catch(() => undefined);
|
|
@@ -181,6 +247,8 @@ export class BrowserPythonCommand {
|
|
|
181
247
|
}, [body]);
|
|
182
248
|
}
|
|
183
249
|
catch (cause) {
|
|
250
|
+
// A refused or failed request is visible on the page, not only as a Python exception.
|
|
251
|
+
console.warn(`Browser Python request to ${message.url} failed: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
184
252
|
worker.postMessage({
|
|
185
253
|
type: "network-error",
|
|
186
254
|
requestId: message.requestId,
|
package/dist/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,8DAA8D,CAAC;AACrH,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAA0D,MAAM,+CAA+C,CAAC;AACnL,OAAO,EACL,2BAA2B,EAC3B,eAAe,GAEhB,MAAM,uDAAuD,CAAC;AAO/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,iCAAiC,EACjC,qCAAqC,GACtC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAmBrE;;;;GAIG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,oFAAoF;AACpF,MAAM,OAAO,oBAAoB;IAcZ;IACA;IAdX,oBAAoB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAChE;;;;OAIG;IACK,OAAO,CAAyC;IAChD,YAAY,CAA4C;IAC/C,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,aAAa,GAAG,CAAC,CAAC;IAClB,YAAY,GAAG,CAAC,CAAC;IAEzB,YACmB,UAA6B,EAC7B,OAAoC;QADpC,eAAU,GAAV,UAAU,CAAmB;QAC7B,YAAO,GAAP,OAAO,CAA6B;IACpD,CAAC;IAEJ,GAAG,GAAG,KAAK,EAAE,IAAuB,EAAE,UAAoC,EAAE,EAAiC,EAAE;QAC7G,qCAAqC,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/F,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,KAAK,CAAC;QACzE,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,gBAAgB,GAAG,WAAW,IAAI,SAAS;YAC/C,CAAC,CAAC,gCAAgC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,MAAM,oBAAoB,GAAG,gBAAgB;YAC3C,CAAC,CAAC,qCAAqC,CAAC,MAAM,CAC5C,gBAAgB,CAAC,MAAM,EACvB,IAAI,CAAC,UAAU,EACf,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC/B,CAAC,CAAC,CAAC,SAAS,CAAC;QAChB,sEAAsE;QACtE,sEAAsE;QACtE,0CAA0C;QAC1C,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,mEAAmE;QACnE,iEAAiE;QACjE,4DAA4D;QAC5D,IAAI,KAAK;YAAE,MAAO,IAAI,CAAC,UAA8C,CAAC,KAAK,EAAE,EAAE,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzH,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,wEAAwE;QACxE,qEAAqE;QACrE,wDAAwD;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;YAC9D,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;YACxB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SAC7E,CAAC,CAAC;QACH,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,YAAuD,CAAC;YAC5D,MAAM,MAAM,GAAG,CAAC,MAA4B,EAAQ,EAAE;gBACpD,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,YAAY,KAAK,SAAS;oBAAE,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3D,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,aAAa,EAAE,CAAC;gBAChB,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,oBAAoB,EAAE,EAAE,CAAC;gBACzB,gBAAgB,EAAE,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,GAAS,EAAE;gBACvB,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACrF,CAAC,CAAC;YACF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,SAAS,GAAG,CAAC,KAAmB,EAAQ,EAAE;gBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAA2B,CAAC;gBAClD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;oBAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACtG,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;oBAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACtG,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACvC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;oBAAE,OAAO;gBAClC,kEAAkE;gBAClE,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC;gBAC9B,YAAY,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,KAAK,WAAW,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAC5E,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;wBAC5B,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBACtC,KAAK,WAAW,CAAC,IAAI,CACnB,GAAG,EAAE;oBACH,IAAI,CAAC,QAAQ;wBAAE,MAAM,CAAC;4BACpB,MAAM;4BACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;4BAC9D,QAAQ,EAAE,OAAO,CAAC,QAAQ;yBAC3B,CAAC,CAAC;gBACL,CAAC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAClF,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACzG,MAAM,OAAO,GAAqB;gBAChC,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;gBACf,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,YAAY;gBACpD,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;gBAC5C,UAAU,EAAE,MAAM;gBAClB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1F,UAAU,EAAE,OAAO,CAAC,KAAK;gBACzB,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrG,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,oBAAoB;aACrB,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU;gBAC7C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;YAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;IACnI,CAAC;IAED,0FAA0F;IAClF,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChD,wEAAwE;YACxE,OAAO,CAAC,SAAS,GAAG,CAAC,KAAmB,EAAQ,EAAE;gBAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAA2B,CAAC;gBAClD,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB;oBAAE,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpF,CAAC,CAAC;YACF,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrI,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,OAAO;YAClC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC,EAAE,eAAe,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAiC,EAAE,KAAoC;QAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvD,2BAA2B,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,MAAM,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,MAAyB,EACzB,OAAkE;QAElE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC5F,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC;YACtE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;YACxE,IAAI,IAAI,CAAC,aAAa,IAAI,kBAAkB;gBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;YACxB,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;oBACrC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,WAAW,EAAE,MAAM;oBACnB,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;YAAC,CAAC;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC;mBACrD,cAAc,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC;gBACjB,IAAI,EAAE,kBAAkB;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI;aACL,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sFAAsF;YACtF,OAAO,CAAC,IAAI,CAAC,6BAA6B,OAAO,CAAC,GAAG,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3H,MAAM,CAAC,WAAW,CAAC;gBACjB,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,OAAe;QACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;IAC7B,CAAC;CACF;AAED,KAAK,UAAU,YAAY,CAAC,OAAiC;IAC3D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;YAC3B,IAAI,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAAC,CAAC;IACtF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;QACjE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAChI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/filesystem.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
|
+
import { type BrowserProcessFileSystem, type BrowserProcessFilesystemPatch } from "@volter/browser-runtime/browser-process-filesystem.js";
|
|
2
3
|
import { type PyodideFileSystem } from "./pyodide-runtime.js";
|
|
4
|
+
/**
|
|
5
|
+
* Pyodide's filesystem behind the reconciliation every browser runtime
|
|
6
|
+
* adapter shares, so a child's changes land here exactly as the page lands
|
|
7
|
+
* what the program wrote: same ordering, same conflict rule.
|
|
8
|
+
*/
|
|
9
|
+
export declare function pythonProcessFileSystem(fs: PyodideFileSystem): BrowserProcessFileSystem;
|
|
10
|
+
/** What a child changed, applied to this realm's tree against the base the page measured from. */
|
|
11
|
+
export declare function applyPythonProcessPatch(fs: PyodideFileSystem, patch: BrowserProcessFilesystemPatch, base: BrowserFileSystemSnapshot): void;
|
|
3
12
|
export declare function restorePythonSnapshot(fs: PyodideFileSystem, value: BrowserFileSystemSnapshot): void;
|
|
4
13
|
export declare function snapshotPythonFilesystem(fs: PyodideFileSystem, original: BrowserFileSystemSnapshot): BrowserFileSystemSnapshot;
|
|
5
14
|
export declare function absolutePythonPath(path: string, cwd: string): string;
|
package/dist/filesystem.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EACnC,MAAM,uDAAuD,CAAC;AAE/D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIhF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,GAAG,wBAAwB,CAgBvF;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,6BAA6B,EACpC,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAEN;AAID,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAkBnG;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,yBAAyB,CAM9H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAkD;AAEtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMtD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAGtD"}
|
package/dist/filesystem.js
CHANGED
|
@@ -1,4 +1,33 @@
|
|
|
1
|
+
import { applyProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
|
|
1
2
|
import { PYTHON_WORKSPACE } from "./pyodide-runtime.js";
|
|
3
|
+
const S_IFDIR = 0o040000;
|
|
4
|
+
/**
|
|
5
|
+
* Pyodide's filesystem behind the reconciliation every browser runtime
|
|
6
|
+
* adapter shares, so a child's changes land here exactly as the page lands
|
|
7
|
+
* what the program wrote: same ordering, same conflict rule.
|
|
8
|
+
*/
|
|
9
|
+
export function pythonProcessFileSystem(fs) {
|
|
10
|
+
return {
|
|
11
|
+
existsSync: (path) => fs.analyzePath(path).exists,
|
|
12
|
+
statSync: (path) => {
|
|
13
|
+
const stat = fs.stat(path);
|
|
14
|
+
const directory = (stat.mode & 0o170000) === S_IFDIR;
|
|
15
|
+
return { isDirectory: () => directory, ...(typeof stat.size === "number" ? { size: stat.size } : {}), ...pythonMetadata(stat) };
|
|
16
|
+
},
|
|
17
|
+
readFile: (path) => Promise.resolve(fs.readFile(path)),
|
|
18
|
+
writeFileSync: (path, data) => fs.writeFile(path, typeof data === "string" ? new TextEncoder().encode(data) : data),
|
|
19
|
+
mkdirSync: (path) => fs.mkdirTree(path),
|
|
20
|
+
unlinkSync: (path) => fs.unlink(path),
|
|
21
|
+
rmdirSync: (path) => fs.rmdir(path),
|
|
22
|
+
chmodSync: (path, mode) => fs.chmod(path, mode),
|
|
23
|
+
utimesSync: (path, atime, mtime) => fs.utime(path, msOf(atime), msOf(mtime)),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** What a child changed, applied to this realm's tree against the base the page measured from. */
|
|
27
|
+
export function applyPythonProcessPatch(fs, patch, base) {
|
|
28
|
+
applyProcessFilesystemPatch(pythonProcessFileSystem(fs), patch, base);
|
|
29
|
+
}
|
|
30
|
+
function msOf(time) { return time instanceof Date ? time.getTime() : time; }
|
|
2
31
|
export function restorePythonSnapshot(fs, value) {
|
|
3
32
|
clearTree(fs, PYTHON_WORKSPACE);
|
|
4
33
|
fs.mkdirTree(PYTHON_WORKSPACE);
|
package/dist/filesystem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
|
package/dist/host.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
|
+
import type { BrowserServerBridge } from "@volter/browser-runtime/browser-http.js";
|
|
3
|
+
import type { BrowserRuntime } from "@volter/browser-runtime/browser-runtime.js";
|
|
4
|
+
import { BrowserPythonCommand } from "./command.js";
|
|
5
|
+
import { BrowserPythonServerHost } from "./server-host.js";
|
|
6
|
+
export interface HostPythonOptions {
|
|
7
|
+
/** Where the pinned Pyodide is kept; defaults to `~/.cache/browser-substrate/pyodide`. */
|
|
8
|
+
cacheDirectory?: string;
|
|
9
|
+
cwd?: string;
|
|
10
|
+
env?: Readonly<Record<string, string>>;
|
|
11
|
+
}
|
|
12
|
+
export interface HostPython {
|
|
13
|
+
command: BrowserPythonCommand;
|
|
14
|
+
server: BrowserPythonServerHost;
|
|
15
|
+
/** The directory the lane loads Pyodide from. */
|
|
16
|
+
indexUrl: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Registers `python`, `pip`, and `uvicorn` on a host runtime, backed by the
|
|
20
|
+
* same worker script the tab runs. The worker surface must already be in the
|
|
21
|
+
* process; without it the host cannot start a lane worker and says which
|
|
22
|
+
* import supplies one.
|
|
23
|
+
*/
|
|
24
|
+
export declare function installHostPython(runtime: BrowserRuntime, filesystem: BrowserFileSystem, ports: BrowserServerBridge, options?: HostPythonOptions): Promise<HostPython>;
|
|
25
|
+
/**
|
|
26
|
+
* The pinned Pyodide as a directory: `<cache>/<version>/`, each file fetched
|
|
27
|
+
* from the published index once, checked against its pin, and written whole.
|
|
28
|
+
* A file already present is checked again rather than trusted.
|
|
29
|
+
*/
|
|
30
|
+
export declare function materializePyodide(cacheDirectory: string): Promise<string>;
|
|
31
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAwBrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhF"}
|
package/dist/host.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// The Python lane on a Node host. The tab's own worker script and command run
|
|
2
|
+
// unchanged; what a host adds is the worker surface (`--import
|
|
3
|
+
// @volter/browser-host-node/host-loader.js`) and the pinned Pyodide on disk,
|
|
4
|
+
// since Pyodide's Node loader reads its index from a filesystem. Every file is
|
|
5
|
+
// checked against its pin as it is written, and a directory that does not
|
|
6
|
+
// verify is not used.
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { BrowserPythonCommand } from "./command.js";
|
|
12
|
+
import { PYODIDE_ARTIFACTS, PYODIDE_INDEX, PYODIDE_VERSION, pyodideDigest } from "./pyodide-artifacts.js";
|
|
13
|
+
import { BrowserPythonServerHost } from "./server-host.js";
|
|
14
|
+
import { pageWorker } from "@volter/browser-runtime/page-workers.js";
|
|
15
|
+
const COMMANDS = ["python", "python3", "pip", "pip3", "uvicorn", "gunicorn"];
|
|
16
|
+
const PACKAGE_HOSTS = ["pypi.org", "files.pythonhosted.org"];
|
|
17
|
+
/**
|
|
18
|
+
* Registers `python`, `pip`, and `uvicorn` on a host runtime, backed by the
|
|
19
|
+
* same worker script the tab runs. The worker surface must already be in the
|
|
20
|
+
* process; without it the host cannot start a lane worker and says which
|
|
21
|
+
* import supplies one.
|
|
22
|
+
*/
|
|
23
|
+
export async function installHostPython(runtime, filesystem, ports, options = {}) {
|
|
24
|
+
if (typeof globalThis.Worker === "undefined") {
|
|
25
|
+
throw new Error("The host has no worker surface for the Python lane; run node with --import @volter/browser-host-node/host-loader.js.");
|
|
26
|
+
}
|
|
27
|
+
const directory = await materializePyodide(options.cacheDirectory ?? join(homedir(), ".cache", "browser-substrate", "pyodide"));
|
|
28
|
+
const indexUrl = `${directory}/`;
|
|
29
|
+
const server = new BrowserPythonServerHost(filesystem, ports, runtime.processHost, runtime.webSockets);
|
|
30
|
+
const workerUrl = new URL("./worker.js", import.meta.url);
|
|
31
|
+
const command = new BrowserPythonCommand(filesystem, {
|
|
32
|
+
cwd: options.cwd ?? "/workspace",
|
|
33
|
+
env: options.env ?? { HOME: "/home/user", PATH: "/usr/local/bin:/usr/bin:/bin", TERM: "xterm-256color" },
|
|
34
|
+
server,
|
|
35
|
+
createWorker: () => Promise.resolve(pageWorker(new Worker(workerUrl, { type: "module", name: "browser-python" }))),
|
|
36
|
+
runtimeIndexUrl: indexUrl,
|
|
37
|
+
sharedMemoryChannels: false,
|
|
38
|
+
network: {
|
|
39
|
+
authorize: (url) => runtime.policy.assertEgress("python", url, "https"),
|
|
40
|
+
maxConnections: runtime.policy.limits.maxEgressConnections,
|
|
41
|
+
maxBytes: runtime.policy.limits.maxEgressBytes,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
for (const name of COMMANDS)
|
|
45
|
+
runtime.registerProgram(name, command.run);
|
|
46
|
+
for (const hostname of PACKAGE_HOSTS)
|
|
47
|
+
runtime.policy.grantEgress({ program: "python", hostname, protocol: "https" });
|
|
48
|
+
return { command, server, indexUrl };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The pinned Pyodide as a directory: `<cache>/<version>/`, each file fetched
|
|
52
|
+
* from the published index once, checked against its pin, and written whole.
|
|
53
|
+
* A file already present is checked again rather than trusted.
|
|
54
|
+
*/
|
|
55
|
+
export async function materializePyodide(cacheDirectory) {
|
|
56
|
+
const directory = join(cacheDirectory, PYODIDE_VERSION);
|
|
57
|
+
mkdirSync(directory, { recursive: true });
|
|
58
|
+
for (const artifact of PYODIDE_ARTIFACTS) {
|
|
59
|
+
const path = join(directory, artifact.file);
|
|
60
|
+
if (existsSync(path) && await pyodideDigest(new Uint8Array(readFileSync(path))) === artifact.integrity)
|
|
61
|
+
continue;
|
|
62
|
+
const response = await fetch(`${PYODIDE_INDEX}${artifact.file}`);
|
|
63
|
+
if (!response.ok)
|
|
64
|
+
throw new Error(`Pyodide ${PYODIDE_VERSION} ${artifact.file} answered ${response.status} from ${PYODIDE_INDEX}.`);
|
|
65
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
66
|
+
const digest = await pyodideDigest(bytes);
|
|
67
|
+
if (digest !== artifact.integrity) {
|
|
68
|
+
throw new Error(`Pyodide ${PYODIDE_VERSION} ${artifact.file} is ${digest}, not the pinned ${artifact.integrity}; the host refuses it.`);
|
|
69
|
+
}
|
|
70
|
+
const staging = `${path}.${randomUUID()}.part`;
|
|
71
|
+
writeFileSync(staging, bytes);
|
|
72
|
+
renameSync(staging, path);
|
|
73
|
+
}
|
|
74
|
+
return directory;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
|
+
import type { PackStore } from "@volter/browser-runtime/browser-pack-store.js";
|
|
3
|
+
import { type PyodideFileSystem } from "./pyodide-runtime.js";
|
|
4
|
+
/** What the program changed under the workspace: written files, and paths removed. */
|
|
5
|
+
export interface PackWorkspaceChanges {
|
|
6
|
+
dirty: Set<string>;
|
|
7
|
+
removed: Set<string>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Mounts the store's workspace at Pyodide's workspace path. Returns the
|
|
11
|
+
* record of changes the snapshot reads, or undefined when this Pyodide
|
|
12
|
+
* exposes no filesystem to mount over, in which case the caller restores
|
|
13
|
+
* a snapshot the old way.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mountPackWorkspace(filesystem: PyodideFileSystem, store: PackStore): PackWorkspaceChanges | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* The workspace as the page reconciles it: metadata for every entry, and
|
|
18
|
+
* bytes only for what the program wrote. Entries outside the workspace are
|
|
19
|
+
* the page's own, carried through from the snapshot it sent.
|
|
20
|
+
*/
|
|
21
|
+
export declare function snapshotPackWorkspace(filesystem: PyodideFileSystem, changes: PackWorkspaceChanges, original: BrowserFileSystemSnapshot): BrowserFileSystemSnapshot;
|
|
22
|
+
//# sourceMappingURL=pack-filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-filesystem.d.ts","sourceRoot":"","sources":["../src/pack-filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAE/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAyDhF,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAqLpH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,yBAAyB,CAmBlK"}
|