isola-core 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.
@@ -0,0 +1,7 @@
1
+ import type { RuntimeName } from "./types.js";
2
+ export interface RuntimeConfig {
3
+ runtimePath: string;
4
+ runtimeLibDir?: string;
5
+ }
6
+ export declare function resolveRuntime(runtime: RuntimeName, version?: string): Promise<RuntimeConfig>;
7
+ //# sourceMappingURL=_runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_runtime.d.ts","sourceRoot":"","sources":["../src/_runtime.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAe9C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkCD,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolveRuntime = resolveRuntime;
37
+ const crypto = __importStar(require("node:crypto"));
38
+ const fs = __importStar(require("node:fs"));
39
+ const fsp = __importStar(require("node:fs/promises"));
40
+ const os = __importStar(require("node:os"));
41
+ const path = __importStar(require("node:path"));
42
+ const zlib = __importStar(require("node:zlib"));
43
+ const BUNDLE_FILES = {
44
+ python: "python.wasm",
45
+ js: "js.wasm",
46
+ };
47
+ const TARBALL_NAMES = {
48
+ python: "isola-python-runtime.tar.gz",
49
+ js: "isola-js-runtime.tar.gz",
50
+ };
51
+ const RELEASE_API = "https://api.github.com/repos/brian14708/isola/releases/tags/{version}";
52
+ function cacheBase() {
53
+ return process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), ".cache");
54
+ }
55
+ function pkgVersion() {
56
+ // Search upward from __dirname for the package's own package.json.
57
+ // At runtime __dirname is npm/dist/; during tests (vitest/vite) it is the
58
+ // source root, so we also check a nested npm/package.json as we walk up.
59
+ let dir = __dirname;
60
+ for (let i = 0; i < 4; i++) {
61
+ for (const candidate of [
62
+ path.join(dir, "package.json"),
63
+ path.join(dir, "npm", "package.json"),
64
+ ]) {
65
+ try {
66
+ const pkg = JSON.parse(fs.readFileSync(candidate, "utf-8"));
67
+ if (pkg.name === "isola-core")
68
+ return pkg.version;
69
+ }
70
+ catch { }
71
+ }
72
+ dir = path.dirname(dir);
73
+ }
74
+ throw new Error("could not determine isola-core version from package.json");
75
+ }
76
+ function versionTag(ver) {
77
+ if (ver.startsWith("v") || ver === "latest")
78
+ return ver;
79
+ return `v${ver}`;
80
+ }
81
+ async function resolveRuntime(runtime, version) {
82
+ const ver = version ?? pkgVersion();
83
+ const cacheDir = path.join(cacheBase(), "isola", "runtimes", `${runtime}-${ver}`);
84
+ const checkPath = path.join(cacheDir, "bin", BUNDLE_FILES[runtime]);
85
+ try {
86
+ await fsp.access(checkPath, fs.constants.F_OK);
87
+ return buildConfig(runtime, cacheDir);
88
+ }
89
+ catch {
90
+ // not cached, fall through to download
91
+ }
92
+ const tarballName = TARBALL_NAMES[runtime];
93
+ const expectedDigest = await fetchExpectedDigest(ver, tarballName);
94
+ const tarballBytes = await downloadTarball(ver, tarballName, expectedDigest);
95
+ await extractTarball(tarballBytes, cacheDir);
96
+ try {
97
+ await fsp.access(checkPath, fs.constants.F_OK);
98
+ }
99
+ catch {
100
+ throw new Error(`downloaded runtime is missing '${BUNDLE_FILES[runtime]}'`);
101
+ }
102
+ return buildConfig(runtime, cacheDir);
103
+ }
104
+ function buildConfig(runtime, cacheDir) {
105
+ if (runtime === "python") {
106
+ return {
107
+ runtimePath: path.join(cacheDir, "bin"),
108
+ runtimeLibDir: path.join(cacheDir, "lib"),
109
+ };
110
+ }
111
+ return { runtimePath: path.join(cacheDir, "bin") };
112
+ }
113
+ async function fetchExpectedDigest(version, tarballName) {
114
+ const url = RELEASE_API.replace("{version}", versionTag(version));
115
+ const resp = await fetch(url);
116
+ if (!resp.ok) {
117
+ throw new Error(`failed to fetch release info: ${resp.status} ${resp.statusText}`);
118
+ }
119
+ const release = (await resp.json());
120
+ for (const asset of release.assets ?? []) {
121
+ if (asset.name === tarballName) {
122
+ if (!asset.digest) {
123
+ throw new Error(`no digest found for asset '${tarballName}' in release ${version}`);
124
+ }
125
+ return asset.digest;
126
+ }
127
+ }
128
+ throw new Error(`asset '${tarballName}' not found in release ${version}`);
129
+ }
130
+ async function downloadTarball(version, tarballName, expectedDigest) {
131
+ const url = `https://github.com/brian14708/isola/releases/download/${versionTag(version)}/${tarballName}`;
132
+ const resp = await fetch(url);
133
+ if (!resp.ok) {
134
+ throw new Error(`failed to download tarball: ${resp.status} ${resp.statusText}`);
135
+ }
136
+ const data = Buffer.from(await resp.arrayBuffer());
137
+ const actual = `sha256:${crypto.createHash("sha256").update(data).digest("hex")}`;
138
+ if (actual !== expectedDigest) {
139
+ throw new Error(`digest mismatch for ${tarballName}: expected ${expectedDigest}, got ${actual}`);
140
+ }
141
+ return data;
142
+ }
143
+ async function extractTarball(data, dest) {
144
+ const tarData = await new Promise((resolve, reject) => {
145
+ zlib.gunzip(data, (err, result) => {
146
+ if (err)
147
+ reject(err);
148
+ else
149
+ resolve(result);
150
+ });
151
+ });
152
+ await fsp.mkdir(path.dirname(dest), { recursive: true });
153
+ const tmpDir = await fsp.mkdtemp(path.join(path.dirname(dest), `.${path.basename(dest)}-`));
154
+ try {
155
+ await parseTar(tarData, tmpDir);
156
+ try {
157
+ await fsp.rename(tmpDir, dest);
158
+ }
159
+ catch (err) {
160
+ const code = err.code;
161
+ if (code === "EEXIST" || code === "ENOTEMPTY") {
162
+ await fsp.rm(tmpDir, { recursive: true, force: true });
163
+ }
164
+ else {
165
+ throw err;
166
+ }
167
+ }
168
+ }
169
+ catch (err) {
170
+ await fsp.rm(tmpDir, { recursive: true, force: true });
171
+ throw err;
172
+ }
173
+ }
174
+ async function parseTar(data, dest) {
175
+ const BLOCK = 512;
176
+ let offset = 0;
177
+ while (offset + BLOCK <= data.length) {
178
+ const hdr = data.subarray(offset, offset + BLOCK);
179
+ offset += BLOCK;
180
+ if (hdr.every((b) => b === 0))
181
+ break;
182
+ const name = nullTerm(hdr, 0, 100);
183
+ const modeStr = nullTerm(hdr, 100, 108).trim();
184
+ const sizeStr = nullTerm(hdr, 124, 136).trim();
185
+ const typeFlag = String.fromCharCode(hdr[156]);
186
+ const linkName = nullTerm(hdr, 157, 257);
187
+ const prefix = nullTerm(hdr, 345, 500);
188
+ const fullName = prefix ? `${prefix}/${name}` : name;
189
+ const size = sizeStr ? parseInt(sizeStr, 8) : 0;
190
+ const fileData = data.subarray(offset, offset + size);
191
+ offset += Math.ceil(size / BLOCK) * BLOCK;
192
+ const stripped = stripFirstComponent(fullName);
193
+ if (!stripped)
194
+ continue;
195
+ const outPath = path.join(dest, stripped);
196
+ if (!outPath.startsWith(dest + path.sep)) {
197
+ throw new Error(`path traversal in archive: ${fullName}`);
198
+ }
199
+ if (typeFlag === "5" || (typeFlag === "\0" && name.endsWith("/"))) {
200
+ await fsp.mkdir(outPath, { recursive: true });
201
+ }
202
+ else if (typeFlag === "2") {
203
+ await fsp.mkdir(path.dirname(outPath), { recursive: true });
204
+ try {
205
+ await fsp.unlink(outPath);
206
+ }
207
+ catch { }
208
+ await fsp.symlink(linkName, outPath);
209
+ }
210
+ else if (typeFlag === "0" || typeFlag === "\0") {
211
+ await fsp.mkdir(path.dirname(outPath), { recursive: true });
212
+ await fsp.writeFile(outPath, fileData);
213
+ if (modeStr)
214
+ await fsp.chmod(outPath, parseInt(modeStr, 8) & 0o7777);
215
+ }
216
+ }
217
+ }
218
+ function nullTerm(buf, start, end) {
219
+ return buf.toString("utf8", start, end).replace(/\0.*$/, "");
220
+ }
221
+ function stripFirstComponent(p) {
222
+ const parts = p
223
+ .replace(/\\/g, "/")
224
+ .replace(/^\//, "")
225
+ .split("/")
226
+ .filter((s) => s.length > 0);
227
+ if (parts.length <= 1)
228
+ return null;
229
+ const rest = parts.slice(1);
230
+ if (rest.some((s) => s === "." || s === "..")) {
231
+ throw new Error(`invalid path in archive: ${p}`);
232
+ }
233
+ return rest.join(path.sep);
234
+ }
235
+ //# sourceMappingURL=_runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_runtime.js","sourceRoot":"","sources":["../src/_runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /* auto-generated by NAPI-RS */
2
+ /* eslint-disable */
3
+ export declare class ContextCore {
4
+ constructor()
5
+ configure(config: any): void
6
+ initializeTemplate(runtimePath: string, runtimeName?: string | undefined | null): Promise<void>
7
+ instantiate(): Promise<SandboxCore>
8
+ close(): void
9
+ }
10
+
11
+ export declare class SandboxCore {
12
+ configure(config: any): void
13
+ /**
14
+ * Set the output event callback: (kind: string, data: string | null) =>
15
+ * void
16
+ */
17
+ setCallback(callback: ((kind: string, data: string | null) => void) | null): void
18
+ /**
19
+ * Set the hostcall handler: (callType: string, payloadJson: string) =>
20
+ * Promise<string>
21
+ */
22
+ setHostcallHandler(handler: ((callType: string, payloadJson: string) => Promise<string>) | null): void
23
+ /**
24
+ * Set the HTTP handler: (method, url, headersJson, body) =>
25
+ * Promise<response>
26
+ */
27
+ setHttpHandler(handler: ((method: string, url: string, headersJson: string, body: Buffer | null) => Promise<{ status: number; headers?: Record<string, string>; body?: Buffer | null }>) | null): void
28
+ start(): Promise<void>
29
+ loadScript(code: string): Promise<void>
30
+ run(func: string, args: Array<WireArgument>): Promise<RunResult>
31
+ /** Run a function with a `StreamHandle` argument. */
32
+ runWithStream(func: string, jsonArgs: Array<[string | undefined | null, any]>, streamArg: StreamHandle, streamName?: string | undefined | null): Promise<RunResult>
33
+ close(): void
34
+ }
35
+
36
+ export declare class StreamHandle {
37
+ constructor(capacity?: number | undefined | null)
38
+ push(value: any): void
39
+ pushAsync(value: any): Promise<void>
40
+ end(): void
41
+ }
42
+
43
+ export interface JsHttpResponse {
44
+ status: number
45
+ headers?: Record<string, string>
46
+ body?: Buffer
47
+ }
48
+
49
+ export interface RunResult {
50
+ resultJson: Array<string>
51
+ finalJson?: string
52
+ stdout: Array<string>
53
+ stderr: Array<string>
54
+ logs: Array<string>
55
+ errors: Array<string>
56
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AA+GjC,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CAG1B;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAmC;;IAM1C,eAAe,CACnB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC;IAyB3B,KAAK,IAAI,IAAI;CAGd;AAMD,qBAAa,eAAe;IAEd,OAAO,CAAC,KAAK;IADzB,gBAAgB;gBACI,KAAK,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC;IAErD,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;CAuBzD;AAMD,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAAmC;IAEhD,gBAAgB;gBACJ,IAAI,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC;IAIlD,gBAAgB;IAChB,aAAa,CACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAClE,IAAI;IAaP,gBAAgB;IAChB,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAiBrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQ7D,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EAAE,GACf,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC;IAiFzC,KAAK,IAAI,IAAI;IAIP,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7C"}
package/dist/index.js ADDED
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Sandbox = exports.SandboxTemplate = exports.SandboxContext = exports.Arg = void 0;
4
+ exports.buildTemplate = buildTemplate;
5
+ const _runtime_js_1 = require("./_runtime.js");
6
+ // @ts-expect-error - napi bindings are generated at build time
7
+ const isola_js_1 = require("./isola.js");
8
+ var types_js_1 = require("./types.js");
9
+ Object.defineProperty(exports, "Arg", { enumerable: true, get: function () { return types_js_1.Arg; } });
10
+ function encodeArgs(args) {
11
+ if (!args)
12
+ return [];
13
+ return args.map((arg) => {
14
+ if (arg instanceof Object && "name" in arg && "value" in arg) {
15
+ const a = arg;
16
+ return ["json", a.name ?? null, a.value];
17
+ }
18
+ return ["json", null, arg];
19
+ });
20
+ }
21
+ function unpackTuple(raw) {
22
+ if (raw.length === 1 && Array.isArray(raw[0])) {
23
+ return raw[0];
24
+ }
25
+ return raw;
26
+ }
27
+ function parseEvent(kind, data) {
28
+ switch (kind) {
29
+ case "result":
30
+ return data != null
31
+ ? { type: "result", data: JSON.parse(data) }
32
+ : null;
33
+ case "end":
34
+ return {
35
+ type: "end",
36
+ data: data != null ? JSON.parse(data) : null,
37
+ };
38
+ case "stdout":
39
+ return data != null ? { type: "stdout", data } : null;
40
+ case "stderr":
41
+ return data != null ? { type: "stderr", data } : null;
42
+ case "error":
43
+ return data != null ? { type: "error", data } : null;
44
+ case "log":
45
+ return data != null ? { type: "log", data } : null;
46
+ default:
47
+ return null;
48
+ }
49
+ }
50
+ function eventKey(event) {
51
+ return `${event.type}:${JSON.stringify(event.data)}`;
52
+ }
53
+ function resultToEvents(result) {
54
+ const events = [];
55
+ for (const item of result.resultJson) {
56
+ events.push({
57
+ type: "result",
58
+ data: JSON.parse(item),
59
+ });
60
+ }
61
+ for (const message of result.stdout) {
62
+ events.push({ type: "stdout", data: message });
63
+ }
64
+ for (const message of result.stderr) {
65
+ events.push({ type: "stderr", data: message });
66
+ }
67
+ for (const message of result.logs) {
68
+ events.push({ type: "log", data: message });
69
+ }
70
+ for (const message of result.errors) {
71
+ events.push({ type: "error", data: message });
72
+ }
73
+ events.push({
74
+ type: "end",
75
+ data: result.finalJson !== undefined
76
+ ? JSON.parse(result.finalJson)
77
+ : null,
78
+ });
79
+ return events;
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // Top-level template helper
83
+ // ---------------------------------------------------------------------------
84
+ async function buildTemplate(runtime, options) {
85
+ const context = new SandboxContext();
86
+ return await context.compileTemplate(runtime, options);
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // SandboxContext
90
+ // ---------------------------------------------------------------------------
91
+ class SandboxContext {
92
+ _core;
93
+ constructor() {
94
+ this._core = new isola_js_1.ContextCore();
95
+ }
96
+ async compileTemplate(runtime, options) {
97
+ let runtimePath = options?.runtimePath;
98
+ let runtimeLibDir = options?.runtimeLibDir;
99
+ if (!runtimePath) {
100
+ const resolved = await (0, _runtime_js_1.resolveRuntime)(runtime, options?.version);
101
+ runtimePath = resolved.runtimePath;
102
+ runtimeLibDir ??= resolved.runtimeLibDir;
103
+ }
104
+ const patch = {};
105
+ if (options?.cacheDir !== undefined)
106
+ patch.cache_dir = options.cacheDir;
107
+ if (options?.maxMemory !== undefined)
108
+ patch.max_memory = options.maxMemory;
109
+ if (options?.prelude !== undefined)
110
+ patch.prelude = options.prelude;
111
+ if (runtimeLibDir !== undefined)
112
+ patch.runtime_lib_dir = runtimeLibDir;
113
+ if (options?.mounts !== undefined)
114
+ patch.mounts = options.mounts;
115
+ if (options?.env !== undefined)
116
+ patch.env = options.env;
117
+ if (Object.keys(patch).length > 0) {
118
+ this._core.configure(patch);
119
+ }
120
+ await this._core.initializeTemplate(runtimePath, runtime);
121
+ return new SandboxTemplate(this._core);
122
+ }
123
+ close() {
124
+ this._core.close();
125
+ }
126
+ }
127
+ exports.SandboxContext = SandboxContext;
128
+ // ---------------------------------------------------------------------------
129
+ // SandboxTemplate
130
+ // ---------------------------------------------------------------------------
131
+ class SandboxTemplate {
132
+ _core;
133
+ /** @internal */
134
+ constructor(_core) {
135
+ this._core = _core;
136
+ }
137
+ async create(options) {
138
+ const core = await this._core.instantiate();
139
+ const sandbox = new Sandbox(core);
140
+ const configPatch = {};
141
+ if (options?.maxMemory !== undefined)
142
+ configPatch.max_memory = options.maxMemory;
143
+ if (options?.mounts !== undefined)
144
+ configPatch.mounts = options.mounts;
145
+ if (options?.env !== undefined)
146
+ configPatch.env = options.env;
147
+ if (Object.keys(configPatch).length > 0) {
148
+ core.configure(configPatch);
149
+ }
150
+ if (options?.hostcalls) {
151
+ sandbox._setHostcalls(options.hostcalls);
152
+ }
153
+ if (options?.httpHandler) {
154
+ sandbox._setHttpHandler(options.httpHandler);
155
+ }
156
+ return sandbox;
157
+ }
158
+ }
159
+ exports.SandboxTemplate = SandboxTemplate;
160
+ // ---------------------------------------------------------------------------
161
+ // Sandbox
162
+ // ---------------------------------------------------------------------------
163
+ class Sandbox {
164
+ _core;
165
+ /** @internal */
166
+ constructor(core) {
167
+ this._core = core;
168
+ }
169
+ /** @internal */
170
+ _setHostcalls(hostcalls) {
171
+ this._core.setHostcallHandler(async (...raw) => {
172
+ const [callType, payloadJson] = unpackTuple(raw);
173
+ const handler = hostcalls[callType];
174
+ if (!handler)
175
+ throw new Error(`unsupported hostcall: ${callType}`);
176
+ const payload = JSON.parse(payloadJson);
177
+ const result = await handler(payload);
178
+ return JSON.stringify(result);
179
+ });
180
+ }
181
+ /** @internal */
182
+ _setHttpHandler(handler) {
183
+ this._core.setHttpHandler(async (...raw) => {
184
+ const [method, url, headersJson, body] = unpackTuple(raw);
185
+ const headers = JSON.parse(headersJson);
186
+ const req = { method, url, headers, body };
187
+ const resp = await handler(req);
188
+ return {
189
+ status: resp.status,
190
+ headers: resp.headers,
191
+ body: resp.body ?? null,
192
+ };
193
+ });
194
+ }
195
+ async start() {
196
+ await this._core.start();
197
+ }
198
+ async loadScript(code) {
199
+ await this._core.loadScript(code);
200
+ }
201
+ async run(name, args) {
202
+ const encoded = encodeArgs(args);
203
+ const result = await this._core.run(name, encoded);
204
+ return result.finalJson
205
+ ? JSON.parse(result.finalJson)
206
+ : null;
207
+ }
208
+ async *runStream(name, args) {
209
+ const queue = [];
210
+ const emitted = new Map();
211
+ let resolve = null;
212
+ let done = false;
213
+ let sawErrorEvent = false;
214
+ let runResult = null;
215
+ let runError = null;
216
+ const wake = () => {
217
+ if (resolve) {
218
+ resolve();
219
+ resolve = null;
220
+ }
221
+ };
222
+ const pushEvent = (event) => {
223
+ queue.push(event);
224
+ emitted.set(eventKey(event), (emitted.get(eventKey(event)) ?? 0) + 1);
225
+ if (event.type === "error") {
226
+ sawErrorEvent = true;
227
+ }
228
+ wake();
229
+ };
230
+ this._core.setCallback((...raw) => {
231
+ const [kind, data] = unpackTuple(raw);
232
+ const event = parseEvent(kind, data);
233
+ if (event) {
234
+ pushEvent(event);
235
+ }
236
+ });
237
+ const encoded = encodeArgs(args);
238
+ const runPromise = this._core
239
+ .run(name, encoded)
240
+ .then((result) => {
241
+ runResult = result;
242
+ })
243
+ .catch((err) => {
244
+ runError = err;
245
+ })
246
+ .finally(() => {
247
+ setImmediate(() => {
248
+ done = true;
249
+ wake();
250
+ });
251
+ });
252
+ try {
253
+ while (true) {
254
+ while (queue.length > 0) {
255
+ // biome-ignore lint/style/noNonNullAssertion: length checked above
256
+ yield queue.shift();
257
+ }
258
+ if (done)
259
+ break;
260
+ await new Promise((r) => {
261
+ resolve = r;
262
+ });
263
+ }
264
+ await runPromise;
265
+ if (runResult) {
266
+ const remaining = new Map(emitted);
267
+ for (const event of resultToEvents(runResult)) {
268
+ const key = eventKey(event);
269
+ const count = remaining.get(key) ?? 0;
270
+ if (count > 0) {
271
+ remaining.set(key, count - 1);
272
+ continue;
273
+ }
274
+ yield event;
275
+ }
276
+ }
277
+ if (runError && !sawErrorEvent) {
278
+ throw runError;
279
+ }
280
+ }
281
+ finally {
282
+ this._core.setCallback(null);
283
+ }
284
+ }
285
+ close() {
286
+ this._core.close();
287
+ }
288
+ async [Symbol.asyncDispose]() {
289
+ this.close();
290
+ }
291
+ }
292
+ exports.Sandbox = Sandbox;
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
Binary file