@isolated-vm/experimental 0.0.9 → 0.0.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.
Files changed (151) hide show
  1. package/addon/CMakeLists.txt +1 -1
  2. package/addon/handle/local_of.cc +149 -0
  3. package/addon/handle/types.cc +8 -137
  4. package/addon/handle/value_of.cc +82 -27
  5. package/addon/support/callback_info.cc +5 -5
  6. package/addon/support/callback_storage.cc +2 -2
  7. package/addon/support/free_function.cc +3 -3
  8. package/addon/support/initialize.cc +5 -5
  9. package/addon/transfer/accept.cc +104 -72
  10. package/addon/transfer/visit.cc +97 -54
  11. package/addon/value/array.cc +6 -6
  12. package/addon/value/array_buffer.cc +27 -18
  13. package/addon/value/function.cc +5 -5
  14. package/addon/value/function.h.cc +5 -5
  15. package/addon/value/object.cc +3 -3
  16. package/addon/value/primitive.cc +36 -36
  17. package/addon/value/prototype.cc +7 -7
  18. package/addon/value/record.cc +20 -20
  19. package/addon/value/value.cc +1 -1
  20. package/addon/value/vector.cc +9 -9
  21. package/backend/backend.d.cts +9 -9
  22. package/dist/frontend/agent.d.ts +1 -0
  23. package/dist/frontend/agent.d.ts.map +1 -1
  24. package/dist/frontend/agent.js.map +1 -1
  25. package/dist/frontend/module.d.ts +1 -1
  26. package/dist/frontend/module.d.ts.map +1 -1
  27. package/dist/frontend/module.js.map +1 -1
  28. package/dist/frontend/realm.d.ts +1 -1
  29. package/dist/frontend/realm.d.ts.map +1 -1
  30. package/dist/frontend/reference.d.ts +3 -3
  31. package/dist/frontend/reference.d.ts.map +1 -1
  32. package/dist/test/00.agent/00.prerequisites.d.ts +2 -0
  33. package/dist/test/00.agent/00.prerequisites.d.ts.map +1 -0
  34. package/dist/test/00.agent/00.prerequisites.js +25 -0
  35. package/dist/test/00.agent/00.prerequisites.js.map +1 -0
  36. package/dist/test/00.agent/10.clock.d.ts +2 -0
  37. package/dist/test/00.agent/10.clock.d.ts.map +1 -0
  38. package/dist/test/{00.datetime.js → 00.agent/10.clock.js} +8 -8
  39. package/dist/test/00.agent/10.clock.js.map +1 -0
  40. package/dist/test/00.agent/10.random.d.ts +2 -0
  41. package/dist/test/00.agent/10.random.d.ts.map +1 -0
  42. package/dist/test/{00.random.js → 00.agent/10.random.js} +4 -4
  43. package/dist/test/00.agent/10.random.js.map +1 -0
  44. package/dist/test/10.transfer/00.primitives.d.ts +2 -0
  45. package/dist/test/10.transfer/00.primitives.d.ts.map +1 -0
  46. package/dist/test/10.transfer/00.primitives.js +54 -0
  47. package/dist/test/10.transfer/00.primitives.js.map +1 -0
  48. package/dist/test/10.transfer/10.array_buffer.d.ts +2 -0
  49. package/dist/test/10.transfer/10.array_buffer.d.ts.map +1 -0
  50. package/dist/test/{20.array_buffer.js → 10.transfer/10.array_buffer.js} +69 -64
  51. package/dist/test/10.transfer/10.array_buffer.js.map +1 -0
  52. package/dist/test/10.transfer/90.regressions.d.ts +2 -0
  53. package/dist/test/10.transfer/90.regressions.d.ts.map +1 -0
  54. package/dist/test/10.transfer/90.regressions.js +72 -0
  55. package/dist/test/10.transfer/90.regressions.js.map +1 -0
  56. package/dist/test/20.intrinsics/00.script.d.ts +2 -0
  57. package/dist/test/20.intrinsics/00.script.d.ts.map +1 -0
  58. package/dist/test/{10.script.js → 20.intrinsics/00.script.js} +32 -7
  59. package/dist/test/20.intrinsics/00.script.js.map +1 -0
  60. package/dist/test/20.intrinsics/05.global.d.ts.map +1 -0
  61. package/dist/test/{05.global.js → 20.intrinsics/05.global.js} +5 -5
  62. package/dist/test/20.intrinsics/05.global.js.map +1 -0
  63. package/dist/test/20.intrinsics/10.reference.d.ts.map +1 -0
  64. package/dist/test/{10.reference.js → 20.intrinsics/10.reference.js} +73 -27
  65. package/dist/test/20.intrinsics/10.reference.js.map +1 -0
  66. package/dist/test/20.intrinsics/20.module.d.ts +2 -0
  67. package/dist/test/20.intrinsics/20.module.d.ts.map +1 -0
  68. package/dist/test/{10.module.js → 20.intrinsics/20.module.js} +70 -39
  69. package/dist/test/20.intrinsics/20.module.js.map +1 -0
  70. package/dist/test/50.features/50.timers.d.ts.map +1 -0
  71. package/dist/test/{50.timers.js → 50.features/50.timers.js} +8 -8
  72. package/dist/test/50.features/50.timers.js.map +1 -0
  73. package/dist/test/50.features/90.i18n.d.ts +2 -0
  74. package/dist/test/50.features/90.i18n.d.ts.map +1 -0
  75. package/dist/test/{99.i18n.js → 50.features/90.i18n.js} +6 -6
  76. package/dist/test/50.features/90.i18n.js.map +1 -0
  77. package/dist/test/90.isolation/00.dispose.d.ts +1 -1
  78. package/dist/test/90.isolation/00.dispose.d.ts.map +1 -1
  79. package/dist/test/90.isolation/00.dispose.js +23 -5
  80. package/dist/test/90.isolation/00.dispose.js.map +1 -1
  81. package/dist/test/90.isolation/10.memory.d.ts +2 -0
  82. package/dist/test/90.isolation/10.memory.d.ts.map +1 -0
  83. package/dist/test/90.isolation/10.memory.js +51 -0
  84. package/dist/test/90.isolation/10.memory.js.map +1 -0
  85. package/dist/test/fixtures.js +2 -2
  86. package/dist/test/fixtures.js.map +1 -1
  87. package/dist/test/glob.d.ts +2 -0
  88. package/dist/test/glob.d.ts.map +1 -0
  89. package/dist/test/glob.js +11 -0
  90. package/dist/test/glob.js.map +1 -0
  91. package/dist/tsconfig.tsbuildinfo +1 -1
  92. package/dist/utility/completion.d.ts +2 -1
  93. package/dist/utility/completion.d.ts.map +1 -1
  94. package/dist/utility/completion.js +4 -0
  95. package/dist/utility/completion.js.map +1 -1
  96. package/frontend/agent.ts +1 -0
  97. package/frontend/module.ts +1 -1
  98. package/frontend/realm.ts +4 -1
  99. package/frontend/reference.ts +3 -3
  100. package/package.json +13 -13
  101. package/test/00.agent/00.prerequisites.ts +12 -0
  102. package/test/{00.datetime.ts → 00.agent/10.clock.ts} +7 -7
  103. package/test/{00.random.ts → 00.agent/10.random.ts} +3 -3
  104. package/test/10.transfer/00.primitives.ts +47 -0
  105. package/test/{20.array_buffer.ts → 10.transfer/10.array_buffer.ts} +40 -35
  106. package/test/10.transfer/90.regressions.ts +38 -0
  107. package/test/{10.script.ts → 20.intrinsics/00.script.ts} +21 -6
  108. package/test/{05.global.ts → 20.intrinsics/05.global.ts} +5 -5
  109. package/test/20.intrinsics/10.reference.ts +111 -0
  110. package/test/{10.module.ts → 20.intrinsics/20.module.ts} +39 -17
  111. package/test/{50.timers.ts → 50.features/50.timers.ts} +8 -8
  112. package/test/{99.i18n.ts → 50.features/90.i18n.ts} +5 -5
  113. package/test/90.isolation/00.dispose.ts +12 -5
  114. package/test/90.isolation/10.memory.ts +28 -0
  115. package/test/fixtures.ts +4 -4
  116. package/test/glob.ts +11 -0
  117. package/utility/completion.ts +6 -1
  118. package/addon/handle/bound_value.cc +0 -45
  119. package/dist/test/00.datetime.d.ts +0 -2
  120. package/dist/test/00.datetime.d.ts.map +0 -1
  121. package/dist/test/00.datetime.js.map +0 -1
  122. package/dist/test/00.random.d.ts +0 -2
  123. package/dist/test/00.random.d.ts.map +0 -1
  124. package/dist/test/00.random.js.map +0 -1
  125. package/dist/test/00.transfer.d.ts +0 -2
  126. package/dist/test/00.transfer.d.ts.map +0 -1
  127. package/dist/test/00.transfer.js +0 -168
  128. package/dist/test/00.transfer.js.map +0 -1
  129. package/dist/test/05.global.d.ts.map +0 -1
  130. package/dist/test/05.global.js.map +0 -1
  131. package/dist/test/10.module.d.ts +0 -2
  132. package/dist/test/10.module.d.ts.map +0 -1
  133. package/dist/test/10.module.js.map +0 -1
  134. package/dist/test/10.reference.d.ts.map +0 -1
  135. package/dist/test/10.reference.js.map +0 -1
  136. package/dist/test/10.script.d.ts +0 -2
  137. package/dist/test/10.script.d.ts.map +0 -1
  138. package/dist/test/10.script.js.map +0 -1
  139. package/dist/test/20.array_buffer.d.ts +0 -2
  140. package/dist/test/20.array_buffer.d.ts.map +0 -1
  141. package/dist/test/20.array_buffer.js.map +0 -1
  142. package/dist/test/50.timers.d.ts.map +0 -1
  143. package/dist/test/50.timers.js.map +0 -1
  144. package/dist/test/99.i18n.d.ts +0 -2
  145. package/dist/test/99.i18n.d.ts.map +0 -1
  146. package/dist/test/99.i18n.js.map +0 -1
  147. package/test/00.transfer.ts +0 -134
  148. package/test/10.reference.ts +0 -82
  149. /package/dist/test/{05.global.d.ts → 20.intrinsics/05.global.d.ts} +0 -0
  150. /package/dist/test/{10.reference.d.ts → 20.intrinsics/10.reference.d.ts} +0 -0
  151. /package/dist/test/{50.timers.d.ts → 50.features/50.timers.d.ts} +0 -0
@@ -1,13 +1,13 @@
1
1
  import { __addDisposableResource, __disposeResources } from "tslib";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
- import * as ivm from "@isolated-vm/experimental";
5
- import { makeNullLinker } from "../utility/linker.js";
6
- import { expectComplete, expectThrow } from "./fixtures.js";
4
+ import { Agent, expect } from "@isolated-vm/experimental";
5
+ import { expectComplete, expectThrow } from "@isolated-vm/experimental/test/fixtures";
6
+ import { makeNullLinker } from "@isolated-vm/experimental/utility/linker";
7
7
  await test("module linker", async () => {
8
8
  const env_1 = { stack: [], error: void 0, hasError: false };
9
9
  try {
10
- const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
10
+ const agent = __addDisposableResource(env_1, await Agent.create(), true);
11
11
  const realm = await agent.createRealm();
12
12
  const left = expectComplete(await agent.compileModule('import { right } from "right"; globalThis.right = right;'));
13
13
  const right = expectComplete(await agent.compileModule('export function right() { return "hello"; }'));
@@ -33,7 +33,7 @@ await test("module linker", async () => {
33
33
  await test("nested compilation in module linker", async () => {
34
34
  const env_2 = { stack: [], error: void 0, hasError: false };
35
35
  try {
36
- const agent = __addDisposableResource(env_2, await ivm.Agent.create(), true);
36
+ const agent = __addDisposableResource(env_2, await Agent.create(), true);
37
37
  const realm = await agent.createRealm();
38
38
  const left = expectComplete(await agent.compileModule('import "right";'));
39
39
  await left.link(realm, async () => expectComplete(await agent.compileModule("export {};")));
@@ -51,17 +51,17 @@ await test("nested compilation in module linker", async () => {
51
51
  await test("synthetic module capability", async () => {
52
52
  const env_3 = { stack: [], error: void 0, hasError: false };
53
53
  try {
54
- const agent = __addDisposableResource(env_3, await ivm.Agent.create(), true);
54
+ const agent = __addDisposableResource(env_3, await Agent.create(), true);
55
55
  const capabilityName = "isolated-vm:///capability";
56
56
  let didInvoke = false;
57
- const realm = await agent.createRealm();
58
- const capability = await realm.createCapability(() => ({
57
+ const realm = expect(await agent.createRealm());
58
+ const capability = expect(await realm.createCapability(() => ({
59
59
  default: (value1, value2) => {
60
60
  didInvoke = true;
61
61
  assert.equal(value1, "hello");
62
62
  assert.equal(value2, "world");
63
63
  },
64
- }), { origin: capabilityName });
64
+ }), { origin: capabilityName }));
65
65
  const left = expectComplete(await agent.compileModule(`
66
66
  import capability from ${JSON.stringify(capabilityName)};
67
67
  capability("hello", "world");
@@ -86,17 +86,17 @@ await test("synthetic module capability", async () => {
86
86
  await test("synthetic module with circular reference", async () => {
87
87
  const env_4 = { stack: [], error: void 0, hasError: false };
88
88
  try {
89
- const agent = __addDisposableResource(env_4, await ivm.Agent.create(), true);
89
+ const agent = __addDisposableResource(env_4, await Agent.create(), true);
90
90
  const capabilityName = "isolated-vm:///capability";
91
- const realm = await agent.createRealm();
92
- const capability = await realm.createCapability(() => ({
91
+ const realm = expect(await agent.createRealm());
92
+ const capability = expect(await realm.createCapability(() => ({
93
93
  default: (value1) => {
94
94
  // @ts-expect-error
95
95
  assert.strictEqual(value1.date1, value1.date2);
96
96
  // @ts-expect-error
97
97
  assert.strictEqual(value1.object, value1);
98
98
  },
99
- }), { origin: capabilityName });
99
+ }), { origin: capabilityName }));
100
100
  const left = expectComplete(await agent.compileModule(`
101
101
  import capability from ${JSON.stringify(capabilityName)};
102
102
  const date = new Date();
@@ -124,10 +124,41 @@ await test("synthetic module with circular reference", async () => {
124
124
  await result_4;
125
125
  }
126
126
  });
127
+ await test("synthetic module with data templates", async () => {
128
+ const env_5 = { stack: [], error: void 0, hasError: false };
129
+ try {
130
+ const agent = __addDisposableResource(env_5, await Agent.create(), true);
131
+ const capabilityName = "isolated-vm:///capability";
132
+ const realm = expect(await agent.createRealm());
133
+ const capability = expect(await realm.createCapability(() => ({
134
+ string: "string",
135
+ }), { origin: capabilityName }));
136
+ const entry = expectComplete(await agent.compileModule(`
137
+ import { string } from ${JSON.stringify(capabilityName)};
138
+ globalThis.result = JSON.stringify({ string });
139
+ `));
140
+ await entry.link(realm, () => capability);
141
+ await entry.evaluate(realm);
142
+ const global = expect(await realm.acquireGlobalObject());
143
+ const result = expect(await global.get("result"));
144
+ assert.equal(await result.copy(), JSON.stringify({
145
+ string: "string",
146
+ }));
147
+ }
148
+ catch (e_5) {
149
+ env_5.error = e_5;
150
+ env_5.hasError = true;
151
+ }
152
+ finally {
153
+ const result_5 = __disposeResources(env_5);
154
+ if (result_5)
155
+ await result_5;
156
+ }
157
+ });
127
158
  // TODO: This terminates the process. It should probably raise an async error, because there is no
128
159
  // promise.
129
160
  // await test("throw from synthetic module", async () => {
130
- // await using agent = await ivm.Agent.create();
161
+ // await using agent = await Agent.create();
131
162
  // const capabilityName = "isolated-vm:///capability";
132
163
  // const realm = await agent.createRealm();
133
164
  // const capability = await realm.createCapability(
@@ -148,29 +179,29 @@ await test("synthetic module with circular reference", async () => {
148
179
  // await left.evaluate(realm);
149
180
  // });
150
181
  await test("throw from linker", async () => {
151
- const env_5 = { stack: [], error: void 0, hasError: false };
182
+ const env_6 = { stack: [], error: void 0, hasError: false };
152
183
  try {
153
- const agent = __addDisposableResource(env_5, await ivm.Agent.create(), true);
184
+ const agent = __addDisposableResource(env_6, await Agent.create(), true);
154
185
  const realm = await agent.createRealm();
155
186
  const left = expectComplete(await agent.compileModule('import "right";'));
156
187
  await assert.rejects(left.link(realm, () => {
157
188
  throw new Error("linker error");
158
189
  }));
159
190
  }
160
- catch (e_5) {
161
- env_5.error = e_5;
162
- env_5.hasError = true;
191
+ catch (e_6) {
192
+ env_6.error = e_6;
193
+ env_6.hasError = true;
163
194
  }
164
195
  finally {
165
- const result_5 = __disposeResources(env_5);
166
- if (result_5)
167
- await result_5;
196
+ const result_6 = __disposeResources(env_6);
197
+ if (result_6)
198
+ await result_6;
168
199
  }
169
200
  });
170
201
  await test("throw from evaluation", async () => {
171
- const env_6 = { stack: [], error: void 0, hasError: false };
202
+ const env_7 = { stack: [], error: void 0, hasError: false };
172
203
  try {
173
- const agent = __addDisposableResource(env_6, await ivm.Agent.create(), true);
204
+ const agent = __addDisposableResource(env_7, await Agent.create(), true);
174
205
  const realm = await agent.createRealm();
175
206
  const module = expectComplete(await agent.compileModule('throw new Error("wow");', { origin: { name: "test:module" } }));
176
207
  await module.link(realm, makeNullLinker());
@@ -178,32 +209,32 @@ await test("throw from evaluation", async () => {
178
209
  assert.equal(error.message, "wow");
179
210
  assert.ok(error.stack?.includes("test:module"));
180
211
  }
181
- catch (e_6) {
182
- env_6.error = e_6;
183
- env_6.hasError = true;
212
+ catch (e_7) {
213
+ env_7.error = e_7;
214
+ env_7.hasError = true;
184
215
  }
185
216
  finally {
186
- const result_6 = __disposeResources(env_6);
187
- if (result_6)
188
- await result_6;
217
+ const result_7 = __disposeResources(env_7);
218
+ if (result_7)
219
+ await result_7;
189
220
  }
190
221
  });
191
222
  await test("missing imports", async () => {
192
- const env_7 = { stack: [], error: void 0, hasError: false };
223
+ const env_8 = { stack: [], error: void 0, hasError: false };
193
224
  try {
194
- const agent = __addDisposableResource(env_7, await ivm.Agent.create(), true);
225
+ const agent = __addDisposableResource(env_8, await Agent.create(), true);
195
226
  const realm = await agent.createRealm();
196
227
  const left = expectComplete(await agent.compileModule('import { nothing } from "right";'));
197
228
  await assert.rejects(left.link(realm, async () => expectComplete(await agent.compileModule("export {};"))));
198
229
  }
199
- catch (e_7) {
200
- env_7.error = e_7;
201
- env_7.hasError = true;
230
+ catch (e_8) {
231
+ env_8.error = e_8;
232
+ env_8.hasError = true;
202
233
  }
203
234
  finally {
204
- const result_7 = __disposeResources(env_7);
205
- if (result_7)
206
- await result_7;
235
+ const result_8 = __disposeResources(env_8);
236
+ if (result_8)
237
+ await result_8;
207
238
  }
208
239
  });
209
- //# sourceMappingURL=10.module.js.map
240
+ //# sourceMappingURL=20.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20.module.js","sourceRoot":"","sources":["../../../test/20.intrinsics/20.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"50.timers.d.ts","sourceRoot":"","sources":["../../../test/50.features/50.timers.ts"],"names":[],"mappings":""}
@@ -1,27 +1,27 @@
1
1
  import { __addDisposableResource, __disposeResources } from "tslib";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
- import * as ivm from "@isolated-vm/experimental";
4
+ import { Agent, expect } from "@isolated-vm/experimental";
5
+ import { expectComplete } from "@isolated-vm/experimental/test/fixtures";
5
6
  import { makeCompositeLinker, makeDirectResolver, makeFileSystemCompilationLoader, makeLinker, makeLocalResolver, makeStaticLoader } from "@isolated-vm/experimental/utility/linker";
6
- import { expectComplete } from "./fixtures.js";
7
7
  await test("setTimeout capability", async () => {
8
8
  const env_1 = { stack: [], error: void 0, hasError: false };
9
9
  try {
10
- const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
11
- const realm = await agent.createRealm();
10
+ const agent = __addDisposableResource(env_1, await Agent.create(), true);
11
+ const realm = expect(await agent.createRealm());
12
12
  const runTimers = expectComplete(await agent.compileScript("runTimers()"));
13
13
  const resolvers = Promise.withResolvers();
14
14
  const capabilities = makeStaticLoader({
15
- "isolated-vm:capability/timers": await realm.createCapability(() => ({
15
+ "isolated-vm:capability/timers": expect(await realm.createCapability(() => ({
16
16
  default: ( /*timeout*/) => {
17
17
  void async function () {
18
18
  await runTimers.run(realm);
19
19
  }();
20
20
  },
21
- }), { origin: "isolated-vm:capability/timers" }),
22
- "notify-test": await realm.createCapability(() => ({
21
+ }), { origin: "isolated-vm:capability/timers" })),
22
+ "notify-test": expect(await realm.createCapability(() => ({
23
23
  default: (message) => { resolvers.resolve(message); },
24
- }), { origin: "notify-test" }),
24
+ }), { origin: "notify-test" })),
25
25
  });
26
26
  const runtime = makeFileSystemCompilationLoader(agent);
27
27
  const linker = makeCompositeLinker(makeLinker(makeDirectResolver(), capabilities), makeLinker(makeLocalResolver(import.meta), runtime));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"50.timers.js","sourceRoot":"","sources":["../../../test/50.features/50.timers.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAErL,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;;;QAC9C,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,gBAAgB,CAAC;YACrC,+BAA+B,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,gBAAgB,CACnE,GAAG,EAAE,CAAC,CAAC;gBACN,OAAO,EAAE,EAAC,WAAW,EAAE,EAAE;oBACxB,KAAK,KAAK;wBACT,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC,EAAE,CAAC;gBACL,CAAC;aACD,CAAC,EACF,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAC9C,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,gBAAgB,CACjD,GAAG,EAAE,CAAC,CAAC;gBACN,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC9D,CAAC,EACF,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,mBAAmB,CACjC,UAAU,CAAC,kBAAkB,EAAE,EAAE,YAAY,CAAC,EAC9C,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC;;;;EAIvD,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;CAC/C,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=90.i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"90.i18n.d.ts","sourceRoot":"","sources":["../../../test/50.features/90.i18n.ts"],"names":[],"mappings":""}
@@ -1,12 +1,12 @@
1
1
  import { __addDisposableResource, __disposeResources } from "tslib";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
- import * as ivm from "@isolated-vm/experimental";
5
- import { unsafeEvalAsString } from "./fixtures.js";
4
+ import { Agent } from "@isolated-vm/experimental";
5
+ import { unsafeEvalAsString } from "@isolated-vm/experimental/test/fixtures";
6
6
  await test("localCompare", async () => {
7
7
  const env_1 = { stack: [], error: void 0, hasError: false };
8
8
  try {
9
- const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
9
+ const agent = __addDisposableResource(env_1, await Agent.create(), true);
10
10
  const result = await unsafeEvalAsString(agent, () => "a".localeCompare("b"));
11
11
  assert.equal(result, -1);
12
12
  }
@@ -23,7 +23,7 @@ await test("localCompare", async () => {
23
23
  await test("i18n locales", async () => {
24
24
  const env_2 = { stack: [], error: void 0, hasError: false };
25
25
  try {
26
- const agent = __addDisposableResource(env_2, await ivm.Agent.create(), true);
26
+ const agent = __addDisposableResource(env_2, await Agent.create(), true);
27
27
  const supported = await unsafeEvalAsString(agent, () => Intl.NumberFormat.supportedLocalesOf(["ar-EG", "fa-IR", "zh-Hans", "hi-IN", "th-TH", "km-KH"]));
28
28
  // no "km-KH"
29
29
  assert.deepEqual(supported, ["ar-EG", "fa-IR", "zh-Hans", "hi-IN", "th-TH"]);
@@ -41,7 +41,7 @@ await test("i18n locales", async () => {
41
41
  await test("i18n format", async () => {
42
42
  const env_3 = { stack: [], error: void 0, hasError: false };
43
43
  try {
44
- const agent = __addDisposableResource(env_3, await ivm.Agent.create(), true);
44
+ const agent = __addDisposableResource(env_3, await Agent.create(), true);
45
45
  const german = await unsafeEvalAsString(agent, () => new Intl.NumberFormat("de-DE").format(1234567.89));
46
46
  assert.equal(german, "1.234.567,89");
47
47
  }
@@ -55,4 +55,4 @@ await test("i18n format", async () => {
55
55
  await result_3;
56
56
  }
57
57
  });
58
- //# sourceMappingURL=99.i18n.js.map
58
+ //# sourceMappingURL=90.i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"90.i18n.js","sourceRoot":"","sources":["../../../test/50.features/90.i18n.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;;;QACrC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;CACzB,CAAC,CAAC;AAEH,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;;;QACrC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,CACtD,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC,CAAC,CAAC;QACnG,aAAa;QACb,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC,CAAC;;;;;;;;;;;CAC/E,CAAC,CAAC;AAEH,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;;;QACpC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;;;;;;;;;;;CACrC,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ import "@isolated-vm/experimental/test/fixtures";
2
2
  //# sourceMappingURL=00.dispose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"00.dispose.d.ts","sourceRoot":"","sources":["../../../test/90.isolation/00.dispose.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"00.dispose.d.ts","sourceRoot":"","sources":["../../../test/90.isolation/00.dispose.ts"],"names":[],"mappings":"AAGA,OAAO,yCAAyC,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { __addDisposableResource, __disposeResources } from "tslib";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
- import * as ivm from "@isolated-vm/experimental";
5
- import {} from "@isolated-vm/experimental/test/fixtures";
4
+ import { Agent, expectComplete } from "@isolated-vm/experimental";
5
+ import "@isolated-vm/experimental/test/fixtures";
6
6
  await test("dispose while running", async () => {
7
7
  const result = async function () {
8
8
  const env_1 = { stack: [], error: void 0, hasError: false };
9
9
  try {
10
- const agent = __addDisposableResource(env_1, await ivm.Agent.create(), true);
10
+ const agent = __addDisposableResource(env_1, await Agent.create(), true);
11
11
  const realm = await agent.createRealm();
12
- const script = ivm.expectComplete(await agent.compileScript("for(;;);"));
12
+ const script = expectComplete(await agent.compileScript("for(;;);"));
13
13
  // eslint-disable-next-line @typescript-eslint/return-await
14
14
  return script.run(realm);
15
15
  }
@@ -23,6 +23,24 @@ await test("dispose while running", async () => {
23
23
  await result_1;
24
24
  }
25
25
  }();
26
- assert.strictEqual(await result, undefined);
26
+ assert.strictEqual(await result, null);
27
+ });
28
+ await test("busy dispose", async () => {
29
+ const env_2 = { stack: [], error: void 0, hasError: false };
30
+ try {
31
+ const agent = __addDisposableResource(env_2, await Agent.create(), true);
32
+ const [dispose, realm] = await Promise.all([agent.disposeAsync(), agent.createRealm()]);
33
+ assert.strictEqual(dispose, undefined);
34
+ assert.strictEqual(realm, null);
35
+ }
36
+ catch (e_2) {
37
+ env_2.error = e_2;
38
+ env_2.hasError = true;
39
+ }
40
+ finally {
41
+ const result_2 = __disposeResources(env_2);
42
+ if (result_2)
43
+ await result_2;
44
+ }
27
45
  });
28
46
  //# sourceMappingURL=00.dispose.js.map
@@ -1 +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"}
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,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;IAC9C,MAAM,MAAM,GAAG,KAAK;;;YACnB,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YACrE,2DAA2D;YAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;;;;;;;;;;KACzB,EAAE,CAAC;IACJ,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;;;QACrC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,EAAE,OAAA,CAAC;QACzC,MAAM,CAAE,OAAO,EAAE,KAAK,CAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAE,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAE,CAAC,CAAC;QAC5F,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;;;;;;;;;;;CAChC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "@isolated-vm/experimental/test/fixtures";
2
+ //# sourceMappingURL=10.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"10.memory.d.ts","sourceRoot":"","sources":["../../../test/90.isolation/10.memory.ts"],"names":[],"mappings":"AAGA,OAAO,yCAAyC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { __addDisposableResource, __disposeResources } from "tslib";
2
+ import assert from "node:assert";
3
+ import { test } from "node:test";
4
+ import { Agent, expectComplete } from "@isolated-vm/experimental";
5
+ import "@isolated-vm/experimental/test/fixtures";
6
+ await test("memory limit", async () => {
7
+ const env_1 = { stack: [], error: void 0, hasError: false };
8
+ try {
9
+ const agent = __addDisposableResource(env_1, await Agent.create({ memoryLimitBytes: 128 << 20 }), true);
10
+ const realm = await agent.createRealm();
11
+ const sourceText = `const x = [];
12
+ for (;;) {
13
+ let a = 'a';
14
+ for(; a.length < 2**28;) a += a;
15
+ x.push(a);
16
+ }`;
17
+ const script = expectComplete(await agent.compileScript(sourceText));
18
+ const result = await script.run(realm);
19
+ assert.strictEqual(result, null);
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
+ await test("array spread", async () => {
32
+ const env_2 = { stack: [], error: void 0, hasError: false };
33
+ try {
34
+ const agent = __addDisposableResource(env_2, await Agent.create({ memoryLimitBytes: 128 << 20 }), true);
35
+ const realm = await agent.createRealm();
36
+ const sourceText = "[...'.'.repeat(5e7)]; undefined";
37
+ const script = expectComplete(await agent.compileScript(sourceText));
38
+ const result = await script.run(realm);
39
+ assert.strictEqual(result, null);
40
+ }
41
+ catch (e_2) {
42
+ env_2.error = e_2;
43
+ env_2.hasError = true;
44
+ }
45
+ finally {
46
+ const result_2 = __disposeResources(env_2);
47
+ if (result_2)
48
+ await result_2;
49
+ }
50
+ });
51
+ //# sourceMappingURL=10.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"10.memory.js","sourceRoot":"","sources":["../../../test/90.isolation/10.memory.ts"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;;;QACrC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,OAAA,CAAC;QACxE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,UAAU,GACjB;;;;;EAKE,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;;;;;;;;;CACjC,CAAC,CAAC;AAEH,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;;;QACrC,MAAY,KAAK,kCAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,OAAA,CAAC;QACxE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;;;;;;;;;CACjC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { afterEach } from "node:test";
2
- import { expectComplete } from "@isolated-vm/experimental/utility/completion";
2
+ import { expect, expectComplete } from "@isolated-vm/experimental/utility/completion";
3
3
  export { expectComplete, expectThrow } from "@isolated-vm/experimental/utility/completion";
4
4
  /** @internal */
5
5
  export function injectAssert(agent, realm) {
@@ -32,7 +32,7 @@ export function unsafeIIFEAsString(code) {
32
32
  }
33
33
  /** @internal */
34
34
  export async function unsafeEvalAsString(agent, code, ...args) {
35
- const realm = await agent.createRealm();
35
+ const realm = expect(await agent.createRealm());
36
36
  return unsafeEvalAsStringInRealm(agent, realm, code, ...args);
37
37
  }
38
38
  /** @internal */
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../test/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAEtF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3F,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,KAAmB;IAC7D,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,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,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,KAAmB,EACnB,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../test/glob.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { glob } from "node:fs/promises";
2
+ // Bun's `node:test` implementation is broken
3
+ // https://github.com/oven-sh/bun/issues/23077
4
+ // https://github.com/oven-sh/bun/issues/5090 (red herring)
5
+ const cwd = new URL(".", import.meta.url);
6
+ for await (const file of glob("**/*.ts", { cwd })) {
7
+ if (/^[0-9]{2}/.test(file)) {
8
+ await import(new URL(file, cwd).href);
9
+ }
10
+ }
11
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../test/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,6CAA6C;AAC7C,8CAA8C;AAC9C,2DAA2D;AAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACnD,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;AACF,CAAC"}