@ricsam/isolate 0.1.8 → 0.1.11
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 +172 -18
- package/dist/cjs/bridge/diagnostics.cjs +37 -2
- package/dist/cjs/bridge/diagnostics.cjs.map +3 -3
- package/dist/cjs/bridge/runtime-bindings.cjs +203 -51
- package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
- package/dist/cjs/bridge/sandbox-isolate.cjs +365 -0
- package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
- package/dist/cjs/host/create-isolate-host.cjs +51 -25
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/nested-host-controller.cjs +311 -0
- package/dist/cjs/host/nested-host-controller.cjs.map +10 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/internal/browser-source.cjs +91 -0
- package/dist/cjs/internal/browser-source.cjs.map +10 -0
- package/dist/cjs/internal/client/connection.cjs +152 -172
- package/dist/cjs/internal/client/connection.cjs.map +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +3 -3
- package/dist/cjs/internal/daemon/connection.cjs +129 -4
- package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
- package/dist/cjs/internal/encoding/index.cjs +27 -4
- package/dist/cjs/internal/encoding/index.cjs.map +3 -3
- package/dist/cjs/internal/fetch/index.cjs +2 -7
- package/dist/cjs/internal/fetch/index.cjs.map +3 -3
- package/dist/cjs/internal/module-loader/bundle.cjs +128 -1
- package/dist/cjs/internal/module-loader/bundle.cjs.map +3 -3
- package/dist/cjs/internal/playwright/client.cjs +4 -2
- package/dist/cjs/internal/playwright/client.cjs.map +3 -3
- package/dist/cjs/internal/playwright/handler.cjs +298 -25
- package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
- package/dist/cjs/internal/playwright/index.cjs +54 -8
- package/dist/cjs/internal/playwright/index.cjs.map +3 -3
- package/dist/cjs/internal/playwright/types.cjs +3 -1
- package/dist/cjs/internal/playwright/types.cjs.map +3 -3
- package/dist/cjs/internal/protocol/codec.cjs +16 -5
- package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
- package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
- package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
- package/dist/cjs/internal/protocol/types.cjs.map +2 -2
- package/dist/cjs/internal/runtime/index.cjs +377 -22
- package/dist/cjs/internal/runtime/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/index.cjs +2 -1
- package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/isolate-types.cjs +186 -13
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
- package/dist/cjs/modules/index.cjs +6 -1
- package/dist/cjs/modules/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/runtime/script-runtime.cjs +14 -12
- package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
- package/dist/cjs/runtime/test-runtime.cjs +113 -0
- package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
- package/dist/cjs/server/app-server.cjs +16 -9
- package/dist/cjs/server/app-server.cjs.map +3 -3
- package/dist/cjs/typecheck/index.cjs +2 -1
- package/dist/cjs/typecheck/index.cjs.map +3 -3
- package/dist/mjs/bridge/diagnostics.mjs +37 -2
- package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
- package/dist/mjs/bridge/runtime-bindings.mjs +206 -51
- package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
- package/dist/mjs/bridge/sandbox-isolate.mjs +325 -0
- package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
- package/dist/mjs/host/create-isolate-host.mjs +53 -25
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/nested-host-controller.mjs +275 -0
- package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
- package/dist/mjs/index.mjs.map +1 -1
- package/dist/mjs/internal/browser-source.mjs +51 -0
- package/dist/mjs/internal/browser-source.mjs.map +10 -0
- package/dist/mjs/internal/client/connection.mjs +154 -173
- package/dist/mjs/internal/client/connection.mjs.map +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
- package/dist/mjs/internal/daemon/connection.mjs +129 -4
- package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
- package/dist/mjs/internal/encoding/index.mjs +27 -4
- package/dist/mjs/internal/encoding/index.mjs.map +3 -3
- package/dist/mjs/internal/fetch/index.mjs +2 -7
- package/dist/mjs/internal/fetch/index.mjs.map +3 -3
- package/dist/mjs/internal/module-loader/bundle.mjs +129 -2
- package/dist/mjs/internal/module-loader/bundle.mjs.map +3 -3
- package/dist/mjs/internal/playwright/client.mjs +7 -3
- package/dist/mjs/internal/playwright/client.mjs.map +3 -3
- package/dist/mjs/internal/playwright/handler.mjs +300 -26
- package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
- package/dist/mjs/internal/playwright/index.mjs +59 -9
- package/dist/mjs/internal/playwright/index.mjs.map +3 -3
- package/dist/mjs/internal/playwright/types.mjs +3 -1
- package/dist/mjs/internal/playwright/types.mjs.map +3 -3
- package/dist/mjs/internal/protocol/codec.mjs +16 -5
- package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
- package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
- package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
- package/dist/mjs/internal/protocol/types.mjs.map +2 -2
- package/dist/mjs/internal/runtime/index.mjs +377 -22
- package/dist/mjs/internal/runtime/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/index.mjs +3 -1
- package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/isolate-types.mjs +186 -13
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
- package/dist/mjs/modules/index.mjs +6 -1
- package/dist/mjs/modules/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/runtime/script-runtime.mjs +16 -12
- package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
- package/dist/mjs/runtime/test-runtime.mjs +78 -0
- package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
- package/dist/mjs/server/app-server.mjs +23 -11
- package/dist/mjs/server/app-server.mjs.map +3 -3
- package/dist/mjs/typecheck/index.mjs +2 -1
- package/dist/mjs/typecheck/index.mjs.map +3 -3
- package/dist/types/bridge/diagnostics.d.ts +6 -1
- package/dist/types/bridge/runtime-bindings.d.ts +5 -1
- package/dist/types/bridge/sandbox-isolate.d.ts +15 -0
- package/dist/types/host/nested-host-controller.d.ts +11 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal/browser-source.d.ts +11 -0
- package/dist/types/internal/client/types.d.ts +5 -0
- package/dist/types/internal/daemon/types.d.ts +0 -2
- package/dist/types/internal/playwright/client.d.ts +2 -2
- package/dist/types/internal/playwright/handler.d.ts +27 -4
- package/dist/types/internal/playwright/index.d.ts +2 -2
- package/dist/types/internal/playwright/types.d.ts +33 -1
- package/dist/types/internal/protocol/codec.d.ts +12 -2
- package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
- package/dist/types/internal/protocol/types.d.ts +25 -1
- package/dist/types/internal/runtime/index.d.ts +5 -0
- package/dist/types/internal/typecheck/index.d.ts +1 -1
- package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
- package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
- package/dist/types/runtime/script-runtime.d.ts +2 -1
- package/dist/types/runtime/test-runtime.d.ts +4 -0
- package/dist/types/server/app-server.d.ts +2 -1
- package/dist/types/types.d.ts +33 -33
- package/package.json +3 -3
- package/dist/cjs/browser/browser-runtime.cjs +0 -157
- package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
- package/dist/mjs/browser/browser-runtime.mjs +0 -93
- package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
- package/dist/types/browser/browser-runtime.d.ts +0 -3
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// src/host/nested-host-controller.ts
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import {
|
|
4
|
+
createBrowserSourceFromUnknown,
|
|
5
|
+
isDefaultBrowserDescriptor,
|
|
6
|
+
requireBrowserSource
|
|
7
|
+
} from "../internal/browser-source.mjs";
|
|
8
|
+
function toRequest(serialized) {
|
|
9
|
+
return new Request(serialized.url, {
|
|
10
|
+
method: serialized.method ?? "GET",
|
|
11
|
+
headers: serialized.headers,
|
|
12
|
+
body: serialized.body ? new Uint8Array(serialized.body) : null
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function normalizeBindings(bindings, defaultBrowserSource) {
|
|
16
|
+
const normalized = {
|
|
17
|
+
console: bindings?.console,
|
|
18
|
+
fetch: bindings?.fetch,
|
|
19
|
+
files: bindings?.files,
|
|
20
|
+
modules: bindings?.modules,
|
|
21
|
+
tools: bindings?.tools
|
|
22
|
+
};
|
|
23
|
+
if (!bindings || !("browser" in bindings) || bindings.browser === undefined) {
|
|
24
|
+
return normalized;
|
|
25
|
+
}
|
|
26
|
+
if (isDefaultBrowserDescriptor(bindings.browser)) {
|
|
27
|
+
normalized.browser = requireBrowserSource(defaultBrowserSource, "Nested browser bindings");
|
|
28
|
+
return normalized;
|
|
29
|
+
}
|
|
30
|
+
const browserSource = createBrowserSourceFromUnknown(bindings.browser);
|
|
31
|
+
if (!browserSource) {
|
|
32
|
+
throw new Error("Nested browser bindings must use the sandbox browser handle or expose createContext()/createPage().");
|
|
33
|
+
}
|
|
34
|
+
normalized.browser = browserSource;
|
|
35
|
+
return normalized;
|
|
36
|
+
}
|
|
37
|
+
function normalizeRuntimeOptions(options, defaultBrowserSource) {
|
|
38
|
+
return {
|
|
39
|
+
...options,
|
|
40
|
+
bindings: normalizeBindings(options.bindings, defaultBrowserSource)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function normalizeAppServerOptions(options, defaultBrowserSource) {
|
|
44
|
+
return {
|
|
45
|
+
...options,
|
|
46
|
+
bindings: normalizeBindings(options.bindings, defaultBrowserSource)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function toError(value) {
|
|
50
|
+
if (value instanceof Error) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
if (value && typeof value === "object" && "message" in value && typeof value.message === "string") {
|
|
54
|
+
const error = new Error(value.message);
|
|
55
|
+
if ("name" in value && typeof value.name === "string") {
|
|
56
|
+
error.name = value.name;
|
|
57
|
+
}
|
|
58
|
+
return error;
|
|
59
|
+
}
|
|
60
|
+
return new Error(String(value));
|
|
61
|
+
}
|
|
62
|
+
function createNestedHostBindings(factory, defaultBrowserSource) {
|
|
63
|
+
const hosts = new Map;
|
|
64
|
+
const resources = new Map;
|
|
65
|
+
const requireHost = (hostId) => {
|
|
66
|
+
const host = hosts.get(hostId);
|
|
67
|
+
if (!host || host.closed) {
|
|
68
|
+
throw new Error(`Nested host ${hostId} is not available.`);
|
|
69
|
+
}
|
|
70
|
+
return host;
|
|
71
|
+
};
|
|
72
|
+
const requireResource = (resourceId, expectedKind) => {
|
|
73
|
+
const resource = resources.get(resourceId);
|
|
74
|
+
if (!resource || resource.kind !== expectedKind) {
|
|
75
|
+
throw new Error(`Nested resource ${resourceId} is not available for ${expectedKind}.`);
|
|
76
|
+
}
|
|
77
|
+
return resource;
|
|
78
|
+
};
|
|
79
|
+
const unregisterResource = (resourceId) => {
|
|
80
|
+
const record = resources.get(resourceId);
|
|
81
|
+
if (!record) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const host = hosts.get(record.hostId);
|
|
85
|
+
if (host) {
|
|
86
|
+
if (record.kind === "appServer") {
|
|
87
|
+
host.serverIds.delete(resourceId);
|
|
88
|
+
} else {
|
|
89
|
+
host.runtimeIds.delete(resourceId);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (record.kind === "runtime") {
|
|
93
|
+
for (const unsubscribe of record.subscriptions.values()) {
|
|
94
|
+
unsubscribe();
|
|
95
|
+
}
|
|
96
|
+
record.subscriptions.clear();
|
|
97
|
+
}
|
|
98
|
+
resources.delete(resourceId);
|
|
99
|
+
};
|
|
100
|
+
const disposeResource = async (resourceId, options) => {
|
|
101
|
+
const record = resources.get(resourceId);
|
|
102
|
+
if (!record) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await record.resource.dispose(options);
|
|
107
|
+
} finally {
|
|
108
|
+
unregisterResource(resourceId);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
return {
|
|
112
|
+
async createHost() {
|
|
113
|
+
const hostId = randomUUID();
|
|
114
|
+
hosts.set(hostId, {
|
|
115
|
+
runtimeIds: new Set,
|
|
116
|
+
serverIds: new Set,
|
|
117
|
+
closed: false
|
|
118
|
+
});
|
|
119
|
+
return hostId;
|
|
120
|
+
},
|
|
121
|
+
async closeHost(hostId) {
|
|
122
|
+
const host = requireHost(hostId);
|
|
123
|
+
host.closed = true;
|
|
124
|
+
const resourceIds = [
|
|
125
|
+
...host.serverIds,
|
|
126
|
+
...host.runtimeIds
|
|
127
|
+
];
|
|
128
|
+
await Promise.allSettled(resourceIds.map(async (resourceId) => {
|
|
129
|
+
await disposeResource(resourceId, {
|
|
130
|
+
hard: true,
|
|
131
|
+
reason: "Nested isolate host closed"
|
|
132
|
+
});
|
|
133
|
+
}));
|
|
134
|
+
hosts.delete(hostId);
|
|
135
|
+
},
|
|
136
|
+
async diagnostics(hostId) {
|
|
137
|
+
const host = requireHost(hostId);
|
|
138
|
+
return {
|
|
139
|
+
runtimes: host.runtimeIds.size,
|
|
140
|
+
servers: host.serverIds.size,
|
|
141
|
+
connected: factory.isConnected()
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
async createResource(hostId, kind, rawOptions) {
|
|
145
|
+
const host = requireHost(hostId);
|
|
146
|
+
switch (kind) {
|
|
147
|
+
case "runtime": {
|
|
148
|
+
const options = normalizeRuntimeOptions(rawOptions, defaultBrowserSource);
|
|
149
|
+
const resource = await factory.createRuntime(options);
|
|
150
|
+
const resourceId = randomUUID();
|
|
151
|
+
resources.set(resourceId, {
|
|
152
|
+
kind,
|
|
153
|
+
hostId,
|
|
154
|
+
resource,
|
|
155
|
+
subscriptions: new Map
|
|
156
|
+
});
|
|
157
|
+
host.runtimeIds.add(resourceId);
|
|
158
|
+
return resourceId;
|
|
159
|
+
}
|
|
160
|
+
case "appServer": {
|
|
161
|
+
const options = normalizeAppServerOptions(rawOptions, defaultBrowserSource);
|
|
162
|
+
const resource = await factory.createAppServer(options);
|
|
163
|
+
const resourceId = randomUUID();
|
|
164
|
+
resources.set(resourceId, {
|
|
165
|
+
kind,
|
|
166
|
+
hostId,
|
|
167
|
+
resource
|
|
168
|
+
});
|
|
169
|
+
host.serverIds.add(resourceId);
|
|
170
|
+
return resourceId;
|
|
171
|
+
}
|
|
172
|
+
case "testRuntime": {
|
|
173
|
+
const options = normalizeRuntimeOptions(rawOptions, defaultBrowserSource);
|
|
174
|
+
const resource = await factory.createTestRuntime(options);
|
|
175
|
+
const resourceId = randomUUID();
|
|
176
|
+
resources.set(resourceId, {
|
|
177
|
+
kind,
|
|
178
|
+
hostId,
|
|
179
|
+
resource
|
|
180
|
+
});
|
|
181
|
+
host.runtimeIds.add(resourceId);
|
|
182
|
+
return resourceId;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
async callResource(kind, resourceId, method, args) {
|
|
187
|
+
const record = requireResource(resourceId, kind);
|
|
188
|
+
switch (kind) {
|
|
189
|
+
case "runtime": {
|
|
190
|
+
const runtimeRecord = record;
|
|
191
|
+
switch (method) {
|
|
192
|
+
case "eval":
|
|
193
|
+
await runtimeRecord.resource.eval(args[0], args[1] ?? undefined);
|
|
194
|
+
return;
|
|
195
|
+
case "dispose":
|
|
196
|
+
await disposeResource(resourceId, args[0] ?? {});
|
|
197
|
+
return;
|
|
198
|
+
case "diagnostics":
|
|
199
|
+
return await runtimeRecord.resource.diagnostics();
|
|
200
|
+
case "events.on": {
|
|
201
|
+
const subscriptionId = randomUUID();
|
|
202
|
+
const unsubscribe = runtimeRecord.resource.events.on(args[0], args[1]);
|
|
203
|
+
runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);
|
|
204
|
+
return subscriptionId;
|
|
205
|
+
}
|
|
206
|
+
case "events.off": {
|
|
207
|
+
const subscriptionId = args[0];
|
|
208
|
+
const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);
|
|
209
|
+
if (unsubscribe) {
|
|
210
|
+
unsubscribe();
|
|
211
|
+
runtimeRecord.subscriptions.delete(subscriptionId);
|
|
212
|
+
}
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
case "events.emit":
|
|
216
|
+
await runtimeRecord.resource.events.emit(args[0], args[1]);
|
|
217
|
+
return;
|
|
218
|
+
default:
|
|
219
|
+
throw new Error(`Unsupported nested runtime method: ${method}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
case "appServer": {
|
|
223
|
+
const server = record.resource;
|
|
224
|
+
switch (method) {
|
|
225
|
+
case "handle": {
|
|
226
|
+
const result = await server.handle(toRequest(args[0]), args[1] ?? undefined);
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
case "ws.open":
|
|
230
|
+
await server.ws.open(args[0]);
|
|
231
|
+
return;
|
|
232
|
+
case "ws.message":
|
|
233
|
+
await server.ws.message(args[0], args[1]);
|
|
234
|
+
return;
|
|
235
|
+
case "ws.close":
|
|
236
|
+
await server.ws.close(args[0], args[1], args[2]);
|
|
237
|
+
return;
|
|
238
|
+
case "ws.error":
|
|
239
|
+
await server.ws.error(args[0], toError(args[1]));
|
|
240
|
+
return;
|
|
241
|
+
case "reload":
|
|
242
|
+
await server.reload(args[0] ?? undefined);
|
|
243
|
+
return;
|
|
244
|
+
case "dispose":
|
|
245
|
+
await disposeResource(resourceId, args[0] ?? {});
|
|
246
|
+
return;
|
|
247
|
+
case "diagnostics":
|
|
248
|
+
return await server.diagnostics();
|
|
249
|
+
default:
|
|
250
|
+
throw new Error(`Unsupported nested app server method: ${method}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
case "testRuntime": {
|
|
254
|
+
const runtime = record.resource;
|
|
255
|
+
switch (method) {
|
|
256
|
+
case "run":
|
|
257
|
+
return await runtime.run(args[0], args[1] ?? undefined);
|
|
258
|
+
case "dispose":
|
|
259
|
+
await disposeResource(resourceId, args[0] ?? {});
|
|
260
|
+
return;
|
|
261
|
+
case "diagnostics":
|
|
262
|
+
return await runtime.diagnostics();
|
|
263
|
+
default:
|
|
264
|
+
throw new Error(`Unsupported nested test runtime method: ${method}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
export {
|
|
272
|
+
createNestedHostBindings
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
//# debugId=CB3802C66526968E64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/host/nested-host-controller.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.mjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n RequestResult,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\ninterface NestedHostFactory {\n createRuntime(options: CreateRuntimeOptions): Promise<ScriptRuntime>;\n createAppServer(options: CreateAppServerOptions): Promise<AppServer>;\n createTestRuntime(options: CreateTestRuntimeOptions): Promise<TestRuntime>;\n isConnected(): boolean;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord;\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch,\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n): CreateRuntimeOptions {\n return {\n ...options,\n bindings: normalizeBindings(options.bindings, defaultBrowserSource),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n): CreateAppServerOptions {\n return {\n ...options,\n bindings: normalizeBindings(options.bindings, defaultBrowserSource),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (record.kind === \"runtime\") {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n switch (kind) {\n case \"runtime\": {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createRuntime(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n }\n\n case \"appServer\": {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createAppServer(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n });\n host.serverIds.add(resourceId);\n return resourceId;\n }\n\n case \"testRuntime\": {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createTestRuntime(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n }\n }\n },\n async callResource(kind, resourceId, method, args) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n (args[1] as string | { filename?: string; executionTimeout?: number } | null) ??\n undefined,\n );\n return undefined;\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n args[1] as (payload: unknown) => void,\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const result = await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n ((args[1] as {\n requestId?: string;\n metadata?: Record<string, string>;\n } | null) ?? undefined),\n );\n return result;\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtime = (record as TestRuntimeResourceRecord).resource;\n switch (method) {\n case \"run\":\n return await runtime.run(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n }\n },\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "CB3802C66526968E64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
package/dist/mjs/index.mjs.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n
|
|
5
|
+
"export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n RequestResult,\n RuntimeResourceDiagnostics,\n RunResults,\n ScriptRuntime,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.mjs\";\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";AAAA;AACA;AACA;AACA;",
|
|
8
8
|
"debugId": "CB823D2BFBB00D8F64756E2164756E21",
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// src/internal/browser-source.ts
|
|
2
|
+
var ISOLATE_BROWSER_DESCRIPTOR_PROPERTY = "__isolateBrowserBinding";
|
|
3
|
+
var ISOLATE_BROWSER_DESCRIPTOR_VALUE = "default";
|
|
4
|
+
function isBrowserBindingLike(value) {
|
|
5
|
+
if (!value || typeof value !== "object") {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const candidate = value;
|
|
9
|
+
return typeof candidate.createContext === "function" || typeof candidate.createPage === "function";
|
|
10
|
+
}
|
|
11
|
+
function isDefaultBrowserDescriptor(value) {
|
|
12
|
+
return Boolean(value && typeof value === "object" && value[ISOLATE_BROWSER_DESCRIPTOR_PROPERTY] === ISOLATE_BROWSER_DESCRIPTOR_VALUE);
|
|
13
|
+
}
|
|
14
|
+
function createBrowserSourceFromBindings(browser) {
|
|
15
|
+
if (!browser) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
createContext: browser.createContext,
|
|
20
|
+
createPage: browser.createPage
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createBrowserSourceFromUnknown(browser) {
|
|
24
|
+
if (!isBrowserBindingLike(browser)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
return createBrowserSourceFromBindings(browser);
|
|
28
|
+
}
|
|
29
|
+
function requireBrowserSource(source, operation) {
|
|
30
|
+
if (!source?.createContext || !source.createPage) {
|
|
31
|
+
throw new Error(`${operation} requires a browser binding with createContext() and createPage().`);
|
|
32
|
+
}
|
|
33
|
+
return source;
|
|
34
|
+
}
|
|
35
|
+
function cloneBrowserDescriptor() {
|
|
36
|
+
return {
|
|
37
|
+
[ISOLATE_BROWSER_DESCRIPTOR_PROPERTY]: ISOLATE_BROWSER_DESCRIPTOR_VALUE
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
requireBrowserSource,
|
|
42
|
+
isDefaultBrowserDescriptor,
|
|
43
|
+
isBrowserBindingLike,
|
|
44
|
+
createBrowserSourceFromUnknown,
|
|
45
|
+
createBrowserSourceFromBindings,
|
|
46
|
+
cloneBrowserDescriptor,
|
|
47
|
+
ISOLATE_BROWSER_DESCRIPTOR_VALUE,
|
|
48
|
+
ISOLATE_BROWSER_DESCRIPTOR_PROPERTY
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
//# debugId=66402618D5F351F264756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/browser-source.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n HostBrowserBindings,\n} from \"../types.mjs\";\n\nexport const ISOLATE_BROWSER_DESCRIPTOR_PROPERTY = \"__isolateBrowserBinding\";\nexport const ISOLATE_BROWSER_DESCRIPTOR_VALUE = \"default\";\n\nexport interface BrowserSource extends HostBrowserBindings {}\n\nexport function isBrowserBindingLike(value: unknown): value is HostBrowserBindings {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.createContext === \"function\" ||\n typeof candidate.createPage === \"function\"\n );\n}\n\nexport function isDefaultBrowserDescriptor(value: unknown): boolean {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>)[ISOLATE_BROWSER_DESCRIPTOR_PROPERTY] ===\n ISOLATE_BROWSER_DESCRIPTOR_VALUE,\n );\n}\n\nexport function createBrowserSourceFromBindings(\n browser: HostBrowserBindings | undefined,\n): BrowserSource | undefined {\n if (!browser) {\n return undefined;\n }\n\n return {\n createContext: browser.createContext,\n createPage: browser.createPage,\n };\n}\n\nexport function createBrowserSourceFromUnknown(\n browser: unknown,\n): BrowserSource | undefined {\n if (!isBrowserBindingLike(browser)) {\n return undefined;\n }\n\n return createBrowserSourceFromBindings(browser);\n}\n\nexport function requireBrowserSource(\n source: BrowserSource | undefined,\n operation: string,\n): BrowserSource {\n if (!source?.createContext || !source.createPage) {\n throw new Error(\n `${operation} requires a browser binding with createContext() and createPage().`,\n );\n }\n return source;\n}\n\nexport function cloneBrowserDescriptor(): Record<string, string> {\n return {\n [ISOLATE_BROWSER_DESCRIPTOR_PROPERTY]: ISOLATE_BROWSER_DESCRIPTOR_VALUE,\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAIO,IAAM,sCAAsC;AAC5C,IAAM,mCAAmC;AAIzC,SAAS,oBAAoB,CAAC,OAA8C;AAAA,EACjF,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAAA,EAClB,OACE,OAAO,UAAU,kBAAkB,cACnC,OAAO,UAAU,eAAe;AAAA;AAI7B,SAAS,0BAA0B,CAAC,OAAyB;AAAA,EAClE,OAAO,QACL,SACE,OAAO,UAAU,YAChB,MAAkC,yCACjC,gCACN;AAAA;AAGK,SAAS,+BAA+B,CAC7C,SAC2B;AAAA,EAC3B,IAAI,CAAC,SAAS;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,EACtB;AAAA;AAGK,SAAS,8BAA8B,CAC5C,SAC2B;AAAA,EAC3B,IAAI,CAAC,qBAAqB,OAAO,GAAG;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,OAAO,gCAAgC,OAAO;AAAA;AAGzC,SAAS,oBAAoB,CAClC,QACA,WACe;AAAA,EACf,IAAI,CAAC,QAAQ,iBAAiB,CAAC,OAAO,YAAY;AAAA,IAChD,MAAM,IAAI,MACR,GAAG,6EACL;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,sBAAsB,GAA2B;AAAA,EAC/D,OAAO;AAAA,KACJ,sCAAsC;AAAA,EACzC;AAAA;",
|
|
8
|
+
"debugId": "66402618D5F351F264756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|