@isolated-vm/experimental 0.0.7 → 0.0.9
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/addon/resolve.js +2 -2
- package/backend/backend.cts +7 -0
- package/backend/backend.d.cts +87 -0
- package/backend/host.cts +41 -0
- package/backend/require.cts +17 -0
- package/dist/backend/backend.cjs +9 -0
- package/dist/backend/backend.cjs.map +1 -0
- package/dist/backend/backend.d.cts +2 -0
- package/dist/backend/backend.d.cts.map +1 -0
- package/dist/backend/host.cjs +41 -0
- package/dist/backend/host.cjs.map +1 -0
- package/dist/backend/host.d.cts +2 -0
- package/dist/backend/host.d.cts.map +1 -0
- package/dist/backend/require.cjs +19 -0
- package/dist/backend/require.cjs.map +1 -0
- package/dist/backend/require.d.cts +2 -0
- package/dist/backend/require.d.cts.map +1 -0
- package/dist/frontend/agent.d.ts +1 -2
- package/dist/frontend/agent.d.ts.map +1 -1
- package/dist/frontend/agent.js +2 -7
- package/dist/frontend/agent.js.map +1 -1
- package/dist/frontend/module.d.ts +1 -1
- package/dist/frontend/module.d.ts.map +1 -1
- package/dist/frontend/module.js +1 -1
- package/dist/frontend/module.js.map +1 -1
- package/dist/frontend/realm.d.ts +2 -2
- package/dist/frontend/realm.d.ts.map +1 -1
- package/dist/frontend/realm.js +2 -2
- package/dist/frontend/realm.js.map +1 -1
- package/dist/frontend/reference.d.ts +1 -1
- package/dist/frontend/reference.d.ts.map +1 -1
- package/dist/frontend/script.d.ts +1 -1
- package/dist/frontend/script.d.ts.map +1 -1
- package/dist/frontend/script.js +1 -1
- package/dist/frontend/script.js.map +1 -1
- package/dist/isolated-vm.d.ts +1 -1
- package/dist/isolated-vm.d.ts.map +1 -1
- package/dist/isolated-vm.js +1 -1
- package/dist/isolated-vm.js.map +1 -1
- package/dist/test/00.transfer.js +58 -26
- package/dist/test/00.transfer.js.map +1 -1
- package/dist/test/20.array_buffer.js +191 -81
- package/dist/test/20.array_buffer.js.map +1 -1
- package/dist/test/90.isolation/00.dispose.d.ts +2 -0
- package/dist/test/90.isolation/00.dispose.d.ts.map +1 -0
- package/dist/test/90.isolation/00.dispose.js +28 -0
- package/dist/test/90.isolation/00.dispose.js.map +1 -0
- package/dist/test/fixtures.js +0 -1
- package/dist/test/fixtures.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility/linker.js +1 -1
- package/dist/utility/linker.js.map +1 -1
- package/frontend/agent.ts +3 -9
- package/frontend/module.ts +1 -1
- package/frontend/realm.ts +2 -2
- package/frontend/reference.ts +1 -1
- package/frontend/script.ts +1 -1
- package/isolated-vm.ts +1 -1
- package/package.json +29 -15
- package/test/00.random.ts +1 -1
- package/test/00.transfer.ts +30 -22
- package/test/20.array_buffer.ts +43 -29
- package/test/90.isolation/00.dispose.ts +15 -0
- package/test/fixtures.ts +1 -1
- package/utility/linker.ts +1 -1
- package/backend/backend_v8.d.ts +0 -88
- package/backend/backend_v8.js +0 -18
- package/backend/specifier.ts +0 -20
- package/dist/backend/specifier.d.ts +0 -3
- package/dist/backend/specifier.d.ts.map +0 -1
- package/dist/backend/specifier.js +0 -21
- package/dist/backend/specifier.js.map +0 -1
|
@@ -3,31 +3,58 @@ import * as assert from "node:assert/strict";
|
|
|
3
3
|
import { describe, test } from "node:test";
|
|
4
4
|
import * as ivm from "@isolated-vm/experimental";
|
|
5
5
|
import { injectAssert, unsafeEvalAsString, unsafeEvalAsStringInRealm } from "./fixtures.js";
|
|
6
|
+
const hostSupportsSharedArraySupport =
|
|
6
7
|
// @ts-expect-error
|
|
7
|
-
|
|
8
|
+
process.isBun === undefined && process.versions.deno === undefined;
|
|
8
9
|
await describe("array buffer", async () => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
await describe("transfer out", async () => {
|
|
11
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
12
|
+
try {
|
|
13
|
+
const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
|
|
13
14
|
const ab = await unsafeEvalAsString(agent, () => {
|
|
14
15
|
const uint8 = new Uint8Array([1, 2, 3]);
|
|
15
16
|
return uint8.buffer;
|
|
16
17
|
});
|
|
17
18
|
const uint8 = new Uint8Array(ab);
|
|
18
19
|
assert.deepStrictEqual(uint8, new Uint8Array([1, 2, 3]));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
}
|
|
21
|
+
catch (e_1) {
|
|
22
|
+
env_1.error = e_1;
|
|
23
|
+
env_1.hasError = true;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
const result_1 = __disposeResources(env_1);
|
|
27
|
+
if (result_1)
|
|
28
|
+
await result_1;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (hostSupportsSharedArraySupport) {
|
|
32
|
+
await test("transfer out same reference", async () => {
|
|
33
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
34
|
+
try {
|
|
35
|
+
const agent = __addDisposableResource(env_2, await ivm.Agent.create(), true);
|
|
22
36
|
const ab = await unsafeEvalAsString(agent, () => {
|
|
23
37
|
// nb: also tests zero-length buffer
|
|
24
38
|
const ab = new ArrayBuffer(0);
|
|
25
39
|
return [ab, ab];
|
|
26
40
|
});
|
|
27
41
|
assert.strictEqual(ab[0], ab[1]);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
}
|
|
43
|
+
catch (e_2) {
|
|
44
|
+
env_2.error = e_2;
|
|
45
|
+
env_2.hasError = true;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
const result_2 = __disposeResources(env_2);
|
|
49
|
+
if (result_2)
|
|
50
|
+
await result_2;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
await test("transfer in", async () => {
|
|
55
|
+
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
56
|
+
try {
|
|
57
|
+
const agent = __addDisposableResource(env_3, await ivm.Agent.create(), true);
|
|
31
58
|
const realm = await agent.createRealm();
|
|
32
59
|
await injectAssert(agent, realm);
|
|
33
60
|
const global = await realm.acquireGlobalObject();
|
|
@@ -37,8 +64,21 @@ await describe("array buffer", async () => {
|
|
|
37
64
|
const uint8 = new Uint8Array(ab);
|
|
38
65
|
assert.deepStrictEqual([...uint8], [1, 2, 3]);
|
|
39
66
|
});
|
|
40
|
-
}
|
|
41
|
-
|
|
67
|
+
}
|
|
68
|
+
catch (e_3) {
|
|
69
|
+
env_3.error = e_3;
|
|
70
|
+
env_3.hasError = true;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
const result_3 = __disposeResources(env_3);
|
|
74
|
+
if (result_3)
|
|
75
|
+
await result_3;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
await test("transfer in same reference", async () => {
|
|
79
|
+
const env_4 = { stack: [], error: void 0, hasError: false };
|
|
80
|
+
try {
|
|
81
|
+
const agent = __addDisposableResource(env_4, await ivm.Agent.create(), true);
|
|
42
82
|
const realm = await agent.createRealm();
|
|
43
83
|
await injectAssert(agent, realm);
|
|
44
84
|
const global = await realm.acquireGlobalObject();
|
|
@@ -49,24 +89,24 @@ await describe("array buffer", async () => {
|
|
|
49
89
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
50
90
|
assert.strictEqual(abs[0], abs[1]);
|
|
51
91
|
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
92
|
+
}
|
|
93
|
+
catch (e_4) {
|
|
94
|
+
env_4.error = e_4;
|
|
95
|
+
env_4.hasError = true;
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
const result_4 = __disposeResources(env_4);
|
|
99
|
+
if (result_4)
|
|
100
|
+
await result_4;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
63
103
|
});
|
|
64
104
|
await describe("shared array buffer", async () => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
105
|
+
if (hostSupportsSharedArraySupport) {
|
|
106
|
+
await describe("transfer out", async () => {
|
|
107
|
+
const env_5 = { stack: [], error: void 0, hasError: false };
|
|
108
|
+
try {
|
|
109
|
+
const agent = __addDisposableResource(env_5, await ivm.Agent.create(), true);
|
|
70
110
|
const realm = await agent.createRealm();
|
|
71
111
|
const sab = await unsafeEvalAsStringInRealm(agent, realm, () => {
|
|
72
112
|
const sab = new SharedArrayBuffer(3);
|
|
@@ -87,66 +127,123 @@ await describe("shared array buffer", async () => {
|
|
|
87
127
|
return [...uint8];
|
|
88
128
|
});
|
|
89
129
|
assert.deepStrictEqual(next, [3, 2, 1]);
|
|
90
|
-
}
|
|
91
|
-
|
|
130
|
+
}
|
|
131
|
+
catch (e_5) {
|
|
132
|
+
env_5.error = e_5;
|
|
133
|
+
env_5.hasError = true;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
const result_5 = __disposeResources(env_5);
|
|
137
|
+
if (result_5)
|
|
138
|
+
await result_5;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
await test("transfer out same reference", async () => {
|
|
142
|
+
const env_6 = { stack: [], error: void 0, hasError: false };
|
|
143
|
+
try {
|
|
144
|
+
const agent = __addDisposableResource(env_6, await ivm.Agent.create(), true);
|
|
92
145
|
const ab = await unsafeEvalAsString(agent, () => {
|
|
93
146
|
// nb: also tests zero-length buffer
|
|
94
147
|
const sab = new SharedArrayBuffer(0);
|
|
95
148
|
return [sab, sab];
|
|
96
149
|
});
|
|
97
150
|
assert.strictEqual(ab[0], ab[1]);
|
|
98
|
-
}
|
|
99
|
-
|
|
151
|
+
}
|
|
152
|
+
catch (e_6) {
|
|
153
|
+
env_6.error = e_6;
|
|
154
|
+
env_6.hasError = true;
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
const result_6 = __disposeResources(env_6);
|
|
158
|
+
if (result_6)
|
|
159
|
+
await result_6;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
100
162
|
await test("transfer in", async () => {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
163
|
+
const env_7 = { stack: [], error: void 0, hasError: false };
|
|
164
|
+
try {
|
|
165
|
+
const agent = __addDisposableResource(env_7, await ivm.Agent.create(), true);
|
|
166
|
+
const realm = await agent.createRealm();
|
|
167
|
+
await injectAssert(agent, realm);
|
|
168
|
+
const global = await realm.acquireGlobalObject();
|
|
169
|
+
const sab = new SharedArrayBuffer(3);
|
|
170
|
+
const uint8 = new Uint8Array(sab);
|
|
171
|
+
uint8.set([1, 2, 3]);
|
|
172
|
+
await global.set("sab", sab);
|
|
173
|
+
await unsafeEvalAsStringInRealm(agent, realm, () => {
|
|
174
|
+
// @ts-expect-error
|
|
175
|
+
const uint8 = new Uint8Array(globalThis.sab);
|
|
176
|
+
assert.ok(uint8.buffer instanceof SharedArrayBuffer);
|
|
177
|
+
assert.deepStrictEqual([...uint8], [1, 2, 3]);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (e_7) {
|
|
181
|
+
env_7.error = e_7;
|
|
182
|
+
env_7.hasError = true;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
const result_7 = __disposeResources(env_7);
|
|
186
|
+
if (result_7)
|
|
187
|
+
await result_7;
|
|
188
|
+
}
|
|
113
189
|
});
|
|
114
|
-
|
|
190
|
+
}
|
|
191
|
+
await test("transfer in same reference", async () => {
|
|
192
|
+
const env_8 = { stack: [], error: void 0, hasError: false };
|
|
193
|
+
try {
|
|
194
|
+
const agent = __addDisposableResource(env_8, await ivm.Agent.create(), true);
|
|
115
195
|
const realm = await agent.createRealm();
|
|
116
196
|
await injectAssert(agent, realm);
|
|
117
197
|
const global = await realm.acquireGlobalObject();
|
|
118
|
-
const
|
|
119
|
-
await global.set("
|
|
198
|
+
const ab = new ArrayBuffer(0);
|
|
199
|
+
await global.set("abs", [ab, ab]);
|
|
120
200
|
await unsafeEvalAsStringInRealm(agent, realm, () => {
|
|
121
201
|
// @ts-expect-error
|
|
122
202
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
123
|
-
assert.strictEqual(
|
|
203
|
+
assert.strictEqual(`${abs[0]}`, "[object ArrayBuffer]");
|
|
204
|
+
// @ts-expect-error
|
|
205
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
206
|
+
assert.strictEqual(abs[0], abs[1]);
|
|
124
207
|
});
|
|
208
|
+
}
|
|
209
|
+
catch (e_8) {
|
|
210
|
+
env_8.error = e_8;
|
|
211
|
+
env_8.hasError = true;
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
const result_8 = __disposeResources(env_8);
|
|
215
|
+
if (result_8)
|
|
216
|
+
await result_8;
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
// TODO: deno fails when this is in the `describe` (??)
|
|
221
|
+
await test("transfer out", async () => {
|
|
222
|
+
const env_9 = { stack: [], error: void 0, hasError: false };
|
|
223
|
+
try {
|
|
224
|
+
const agent = __addDisposableResource(env_9, await ivm.Agent.create(), true);
|
|
225
|
+
const [uint8, uint8_copy] = await unsafeEvalAsString(agent, () => {
|
|
226
|
+
const uint8 = new Uint8Array([1, 2, 3]);
|
|
227
|
+
return [uint8, new Uint8Array(uint8.buffer)];
|
|
125
228
|
});
|
|
229
|
+
assert.deepStrictEqual(uint8, new Uint8Array([1, 2, 3]));
|
|
230
|
+
assert.strictEqual(uint8.buffer, uint8_copy.buffer);
|
|
126
231
|
}
|
|
127
|
-
catch (
|
|
128
|
-
|
|
129
|
-
|
|
232
|
+
catch (e_9) {
|
|
233
|
+
env_9.error = e_9;
|
|
234
|
+
env_9.hasError = true;
|
|
130
235
|
}
|
|
131
236
|
finally {
|
|
132
|
-
const
|
|
133
|
-
if (
|
|
134
|
-
await
|
|
237
|
+
const result_9 = __disposeResources(env_9);
|
|
238
|
+
if (result_9)
|
|
239
|
+
await result_9;
|
|
135
240
|
}
|
|
136
241
|
});
|
|
137
242
|
await describe("typed array", async () => {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const [uint8, uint8_copy] = await unsafeEvalAsString(agent, () => {
|
|
143
|
-
const uint8 = new Uint8Array([1, 2, 3]);
|
|
144
|
-
return [uint8, new Uint8Array(uint8.buffer)];
|
|
145
|
-
});
|
|
146
|
-
assert.deepStrictEqual(uint8, new Uint8Array([1, 2, 3]));
|
|
147
|
-
assert.strictEqual(uint8.buffer, uint8_copy.buffer);
|
|
148
|
-
});
|
|
149
|
-
await test("transfer in", async () => {
|
|
243
|
+
await test("transfer in", async () => {
|
|
244
|
+
const env_10 = { stack: [], error: void 0, hasError: false };
|
|
245
|
+
try {
|
|
246
|
+
const agent = __addDisposableResource(env_10, await ivm.Agent.create(), true);
|
|
150
247
|
const realm = await agent.createRealm();
|
|
151
248
|
await injectAssert(agent, realm);
|
|
152
249
|
const global = await realm.acquireGlobalObject();
|
|
@@ -158,9 +255,22 @@ await describe("typed array", async () => {
|
|
|
158
255
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
159
256
|
assert.deepStrictEqual([...globalThis.uint8], [1, 2, 3]);
|
|
160
257
|
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
258
|
+
}
|
|
259
|
+
catch (e_10) {
|
|
260
|
+
env_10.error = e_10;
|
|
261
|
+
env_10.hasError = true;
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
const result_10 = __disposeResources(env_10);
|
|
265
|
+
if (result_10)
|
|
266
|
+
await result_10;
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
if (hostSupportsSharedArraySupport) {
|
|
270
|
+
await test("shared transfer out", async () => {
|
|
271
|
+
const env_11 = { stack: [], error: void 0, hasError: false };
|
|
272
|
+
try {
|
|
273
|
+
const agent = __addDisposableResource(env_11, await ivm.Agent.create(), true);
|
|
164
274
|
const [shared_uint8, shared_uint8_copy] = await unsafeEvalAsString(agent, () => {
|
|
165
275
|
const sab = new SharedArrayBuffer(3);
|
|
166
276
|
const uint8 = new Uint8Array(sab);
|
|
@@ -170,17 +280,17 @@ await describe("typed array", async () => {
|
|
|
170
280
|
assert.ok(shared_uint8.buffer instanceof SharedArrayBuffer);
|
|
171
281
|
assert.deepStrictEqual(shared_uint8, new Uint8Array([1, 2, 3]));
|
|
172
282
|
assert.strictEqual(shared_uint8.buffer, shared_uint8_copy.buffer);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
283
|
+
}
|
|
284
|
+
catch (e_11) {
|
|
285
|
+
env_11.error = e_11;
|
|
286
|
+
env_11.hasError = true;
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
const result_11 = __disposeResources(env_11);
|
|
290
|
+
if (result_11)
|
|
291
|
+
await result_11;
|
|
292
|
+
}
|
|
293
|
+
});
|
|
184
294
|
}
|
|
185
295
|
});
|
|
186
296
|
//# sourceMappingURL=20.array_buffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"20.array_buffer.js","sourceRoot":"","sources":["../../test/20.array_buffer.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE5F,mBAAmB;AACnB,
|
|
1
|
+
{"version":3,"file":"20.array_buffer.js","sourceRoot":"","sources":["../../test/20.array_buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"00.dispose.d.ts","sourceRoot":"","sources":["../../../test/90.isolation/00.dispose.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { __addDisposableResource, __disposeResources } from "tslib";
|
|
2
|
+
import * as assert from "node:assert/strict";
|
|
3
|
+
import { test } from "node:test";
|
|
4
|
+
import * as ivm from "@isolated-vm/experimental";
|
|
5
|
+
import {} from "@isolated-vm/experimental/test/fixtures";
|
|
6
|
+
await test("dispose while running", async () => {
|
|
7
|
+
const result = async function () {
|
|
8
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
9
|
+
try {
|
|
10
|
+
const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
|
|
11
|
+
const realm = await agent.createRealm();
|
|
12
|
+
const script = ivm.expectComplete(await agent.compileScript("for(;;);"));
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/return-await
|
|
14
|
+
return script.run(realm);
|
|
15
|
+
}
|
|
16
|
+
catch (e_1) {
|
|
17
|
+
env_1.error = e_1;
|
|
18
|
+
env_1.hasError = true;
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
const result_1 = __disposeResources(env_1);
|
|
22
|
+
if (result_1)
|
|
23
|
+
await result_1;
|
|
24
|
+
}
|
|
25
|
+
}();
|
|
26
|
+
assert.strictEqual(await result, undefined);
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=00.dispose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"00.dispose.js","sourceRoot":"","sources":["../../../test/90.isolation/00.dispose.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAEzD,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;IAC9C,MAAM,MAAM,GAAG,KAAK;;;YACnB,MAAY,KAAK,kCAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YACzE,2DAA2D;YAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;;;;;;;;;;KACzB,EAAE,CAAC;IACJ,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
|
package/dist/test/fixtures.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { afterEach } from "node:test";
|
|
2
|
-
import { Agent, Realm } from "@isolated-vm/experimental";
|
|
3
2
|
import { expectComplete } from "@isolated-vm/experimental/utility/completion";
|
|
4
3
|
export { expectComplete, expectThrow } from "@isolated-vm/experimental/utility/completion";
|
|
5
4
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../test/fixtures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../test/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3F,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,KAAY;IACtD,OAAO,yBAAyB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG;YACd,EAAE,CAAC,KAAc,EAAE,OAAgB;gBAClC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YACD,eAAe,CAAC,MAAe,EAAE,QAAiB,EAAE,OAAgB;gBACnE,KAAK;gBACL,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzD,4EAA4E;oBAC5E,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,YAAY,MAAM,oBAAoB,QAAQ,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACF,CAAC;YACD,WAAW,CAAC,MAAe,EAAE,QAAiB,EAAE,OAAgB;gBAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAClC,4EAA4E;oBAC5E,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,YAAY,MAAM,sBAAsB,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;YACF,CAAC;SACD,CAAC;QACF,mBAAmB;QACnB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,kBAAkB,CACjC,IAAmB;IAEnB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,KAAY,EACZ,IAA6B,EAC7B,GAAG,IAAU;IAEb,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,yBAAyB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,KAAY,EACZ,KAAY,EACZ,IAA6B,EAC7B,GAAG,IAAU;IAEb,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACjI,OAAO,cAAc,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAS,CAAC;AACxD,CAAC;AAED,kFAAkF;AAClF,SAAS,CAAC,GAAG,EAAE;IACd,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;AACf,CAAC,CAAC,CAAC"}
|