@ricsam/isolate-test-utils 0.1.15 → 0.1.16

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.
@@ -4,38 +4,59 @@ var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ function __accessProp(key) {
8
+ return this[key];
9
+ }
10
+ var __toESMCache_node;
11
+ var __toESMCache_esm;
7
12
  var __toESM = (mod, isNodeMode, target) => {
13
+ var canCache = mod != null && typeof mod === "object";
14
+ if (canCache) {
15
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
+ var cached = cache.get(mod);
17
+ if (cached)
18
+ return cached;
19
+ }
8
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
9
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
22
  for (let key of __getOwnPropNames(mod))
11
23
  if (!__hasOwnProp.call(to, key))
12
24
  __defProp(to, key, {
13
- get: () => mod[key],
25
+ get: __accessProp.bind(mod, key),
14
26
  enumerable: true
15
27
  });
28
+ if (canCache)
29
+ cache.set(mod, to);
16
30
  return to;
17
31
  };
18
- var __moduleCache = /* @__PURE__ */ new WeakMap;
19
32
  var __toCommonJS = (from) => {
20
- var entry = __moduleCache.get(from), desc;
33
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
21
34
  if (entry)
22
35
  return entry;
23
36
  entry = __defProp({}, "__esModule", { value: true });
24
- if (from && typeof from === "object" || typeof from === "function")
25
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
- get: () => from[key],
27
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
- }));
37
+ if (from && typeof from === "object" || typeof from === "function") {
38
+ for (var key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(entry, key))
40
+ __defProp(entry, key, {
41
+ get: __accessProp.bind(from, key),
42
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
43
+ });
44
+ }
29
45
  __moduleCache.set(from, entry);
30
46
  return entry;
31
47
  };
48
+ var __moduleCache;
49
+ var __returnValue = (v) => v;
50
+ function __exportSetter(name, newValue) {
51
+ this[name] = __returnValue.bind(null, newValue);
52
+ }
32
53
  var __export = (target, all) => {
33
54
  for (var name in all)
34
55
  __defProp(target, name, {
35
56
  get: all[name],
36
57
  enumerable: true,
37
58
  configurable: true,
38
- set: (newValue) => all[name] = () => newValue
59
+ set: __exportSetter.bind(all, name)
39
60
  });
40
61
  };
41
62
 
@@ -63,4 +84,4 @@ async function createFetchTestContext() {
63
84
  };
64
85
  }
65
86
 
66
- //# debugId=3DD19E03E10A99CD64756E2164756E21
87
+ //# debugId=180828DA356D40DD64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type ivm from \"isolated-vm\";\nimport type { TestContext } from \"./index.cjs\";\nimport ivmModule from \"isolated-vm\";\nimport { setupFetch, clearAllInstanceState } from \"@ricsam/isolate-fetch\";\n\nexport interface FetchTestContext extends TestContext {\n // Context with fetch APIs set up\n}\n\n/**\n * Create a test context with fetch APIs set up (Headers, Request, Response, FormData, fetch)\n */\nexport async function createFetchTestContext(): Promise<FetchTestContext> {\n const isolate = new ivmModule.Isolate();\n const context = await isolate.createContext();\n\n clearAllInstanceState();\n\n const fetchHandle = await setupFetch(context);\n\n return {\n isolate,\n context,\n dispose() {\n fetchHandle.dispose();\n context.release();\n isolate.dispose();\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEsB,IAAtB;AACkD,IAAlD;AASA,eAAsB,sBAAsB,GAA8B;AAAA,EACxE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAE5C,2CAAsB;AAAA,EAEtB,MAAM,cAAc,MAAM,gCAAW,OAAO;AAAA,EAE5C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,YAAY,QAAQ;AAAA,MACpB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;",
8
- "debugId": "3DD19E03E10A99CD64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEsB,IAAtB;AACkD,IAAlD;AASA,eAAsB,sBAAsB,GAA8B;AAAA,EACxE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAE5C,2CAAsB;AAAA,EAEtB,MAAM,cAAc,MAAM,gCAAW,OAAO;AAAA,EAE5C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,YAAY,QAAQ;AAAA,MACpB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;",
8
+ "debugId": "180828DA356D40DD64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -4,38 +4,59 @@ var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ function __accessProp(key) {
8
+ return this[key];
9
+ }
10
+ var __toESMCache_node;
11
+ var __toESMCache_esm;
7
12
  var __toESM = (mod, isNodeMode, target) => {
13
+ var canCache = mod != null && typeof mod === "object";
14
+ if (canCache) {
15
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
+ var cached = cache.get(mod);
17
+ if (cached)
18
+ return cached;
19
+ }
8
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
9
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
22
  for (let key of __getOwnPropNames(mod))
11
23
  if (!__hasOwnProp.call(to, key))
12
24
  __defProp(to, key, {
13
- get: () => mod[key],
25
+ get: __accessProp.bind(mod, key),
14
26
  enumerable: true
15
27
  });
28
+ if (canCache)
29
+ cache.set(mod, to);
16
30
  return to;
17
31
  };
18
- var __moduleCache = /* @__PURE__ */ new WeakMap;
19
32
  var __toCommonJS = (from) => {
20
- var entry = __moduleCache.get(from), desc;
33
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
21
34
  if (entry)
22
35
  return entry;
23
36
  entry = __defProp({}, "__esModule", { value: true });
24
- if (from && typeof from === "object" || typeof from === "function")
25
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
- get: () => from[key],
27
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
- }));
37
+ if (from && typeof from === "object" || typeof from === "function") {
38
+ for (var key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(entry, key))
40
+ __defProp(entry, key, {
41
+ get: __accessProp.bind(from, key),
42
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
43
+ });
44
+ }
29
45
  __moduleCache.set(from, entry);
30
46
  return entry;
31
47
  };
48
+ var __moduleCache;
49
+ var __returnValue = (v) => v;
50
+ function __exportSetter(name, newValue) {
51
+ this[name] = __returnValue.bind(null, newValue);
52
+ }
32
53
  var __export = (target, all) => {
33
54
  for (var name in all)
34
55
  __defProp(target, name, {
35
56
  get: all[name],
36
57
  enumerable: true,
37
58
  configurable: true,
38
- set: (newValue) => all[name] = () => newValue
59
+ set: __exportSetter.bind(all, name)
39
60
  });
40
61
  };
41
62
 
@@ -70,4 +91,4 @@ async function createFsTestContext() {
70
91
  };
71
92
  }
72
93
 
73
- //# debugId=0F152B9CFB40E7B764756E2164756E21
94
+ //# debugId=26A9A393C839F24964756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type ivm from \"isolated-vm\";\nimport { MockFileSystem } from \"./mock-fs.cjs\";\nimport ivmModule from \"isolated-vm\";\nimport { setupFs } from \"@ricsam/isolate-fs\";\nimport { clearAllInstanceState } from \"@ricsam/isolate-core\";\nimport { setupCore } from \"@ricsam/isolate-core\";\n\nexport interface FsTestContext {\n isolate: ivm.Isolate;\n context: ivm.Context;\n mockFs: MockFileSystem;\n dispose(): void;\n}\n\n/**\n * Create a test context with file system APIs set up using a mock file system.\n *\n * @example\n * const ctx = await createFsTestContext();\n *\n * // Set up initial files\n * ctx.mockFs.setFile(\"/test.txt\", \"Hello, World!\");\n *\n * // Use file system APIs in the isolate\n * const result = await ctx.context.eval(`\n * (async () => {\n * const root = await navigator.storage.getDirectory();\n * const fileHandle = await root.getFileHandle(\"test.txt\");\n * const file = await fileHandle.getFile();\n * return await file.text();\n * })()\n * `, { promise: true });\n *\n * ctx.dispose();\n */\nexport async function createFsTestContext(): Promise<FsTestContext> {\n const isolate = new ivmModule.Isolate();\n const context = await isolate.createContext();\n\n // Clear any previous instance state\n clearAllInstanceState();\n\n // Create mock file system\n const mockFs = new MockFileSystem();\n\n // Setup core APIs (required for Blob, File, streams)\n const coreHandle = await setupCore(context);\n\n // Setup file system APIs with mock handler\n const fsHandle = await setupFs(context, { getDirectory: async () => mockFs });\n\n return {\n isolate,\n context,\n mockFs,\n dispose() {\n fsHandle.dispose();\n coreHandle.dispose();\n context.release();\n isolate.dispose();\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAC+B,IAA/B;AACsB,IAAtB;AACwB,IAAxB;AACsC,IAAtC;AAC0B,IAA1B;AA8BA,eAAsB,mBAAmB,GAA2B;AAAA,EAClE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAG5C,0CAAsB;AAAA,EAGtB,MAAM,SAAS,IAAI;AAAA,EAGnB,MAAM,aAAa,MAAM,+BAAU,OAAO;AAAA,EAG1C,MAAM,WAAW,MAAM,0BAAQ,SAAS,EAAE,cAAc,YAAY,OAAO,CAAC;AAAA,EAE5E,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;",
8
- "debugId": "0F152B9CFB40E7B764756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAC+B,IAA/B;AACsB,IAAtB;AACwB,IAAxB;AACsC,IAAtC;AAC0B,IAA1B;AA8BA,eAAsB,mBAAmB,GAA2B;AAAA,EAClE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAG5C,0CAAsB;AAAA,EAGtB,MAAM,SAAS,IAAI;AAAA,EAGnB,MAAM,aAAa,MAAM,+BAAU,OAAO;AAAA,EAG1C,MAAM,WAAW,MAAM,0BAAQ,SAAS,EAAE,cAAc,YAAY,OAAO,CAAC;AAAA,EAE5E,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;",
8
+ "debugId": "26A9A393C839F24964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -4,38 +4,59 @@ var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ function __accessProp(key) {
8
+ return this[key];
9
+ }
10
+ var __toESMCache_node;
11
+ var __toESMCache_esm;
7
12
  var __toESM = (mod, isNodeMode, target) => {
13
+ var canCache = mod != null && typeof mod === "object";
14
+ if (canCache) {
15
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
+ var cached = cache.get(mod);
17
+ if (cached)
18
+ return cached;
19
+ }
8
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
9
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
22
  for (let key of __getOwnPropNames(mod))
11
23
  if (!__hasOwnProp.call(to, key))
12
24
  __defProp(to, key, {
13
- get: () => mod[key],
25
+ get: __accessProp.bind(mod, key),
14
26
  enumerable: true
15
27
  });
28
+ if (canCache)
29
+ cache.set(mod, to);
16
30
  return to;
17
31
  };
18
- var __moduleCache = /* @__PURE__ */ new WeakMap;
19
32
  var __toCommonJS = (from) => {
20
- var entry = __moduleCache.get(from), desc;
33
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
21
34
  if (entry)
22
35
  return entry;
23
36
  entry = __defProp({}, "__esModule", { value: true });
24
- if (from && typeof from === "object" || typeof from === "function")
25
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
- get: () => from[key],
27
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
- }));
37
+ if (from && typeof from === "object" || typeof from === "function") {
38
+ for (var key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(entry, key))
40
+ __defProp(entry, key, {
41
+ get: __accessProp.bind(from, key),
42
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
43
+ });
44
+ }
29
45
  __moduleCache.set(from, entry);
30
46
  return entry;
31
47
  };
48
+ var __moduleCache;
49
+ var __returnValue = (v) => v;
50
+ function __exportSetter(name, newValue) {
51
+ this[name] = __returnValue.bind(null, newValue);
52
+ }
32
53
  var __export = (target, all) => {
33
54
  for (var name in all)
34
55
  __defProp(target, name, {
35
56
  get: all[name],
36
57
  enumerable: true,
37
58
  configurable: true,
38
- set: (newValue) => all[name] = () => newValue
59
+ set: __exportSetter.bind(all, name)
39
60
  });
40
61
  };
41
62
 
@@ -118,4 +139,4 @@ async function injectGlobals(context, values) {
118
139
  }
119
140
  }
120
141
 
121
- //# debugId=927FD9D4B2821C8964756E2164756E21
142
+ //# debugId=858BA7A1050606F964756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type ivm from \"isolated-vm\";\nimport ivmModule from \"isolated-vm\";\nimport { setupCore } from \"@ricsam/isolate-core\";\nimport { MockFileSystem } from \"./mock-fs.cjs\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface TestContext {\n isolate: ivm.Isolate;\n context: ivm.Context;\n dispose(): void;\n}\n\nexport interface TestResult<T> {\n result: T;\n logs: Array<{ level: string; args: unknown[] }>;\n}\n\n// ============================================================================\n// Context Creation\n// ============================================================================\n\n/**\n * Create a basic test context for isolated-vm tests.\n * This creates a bare context without any APIs set up.\n */\nexport async function createTestContext(): Promise<TestContext> {\n const isolate = new ivmModule.Isolate();\n const context = await isolate.createContext();\n\n return {\n isolate,\n context,\n dispose() {\n context.release();\n isolate.dispose();\n },\n };\n}\n\n/**\n * Create a test context with core APIs set up (Blob, File, URL, streams, etc.)\n */\nexport async function createCoreTestContext(): Promise<TestContext> {\n const isolate = new ivmModule.Isolate();\n const context = await isolate.createContext();\n const coreHandle = await setupCore(context);\n\n return {\n isolate,\n context,\n dispose() {\n coreHandle.dispose();\n context.release();\n isolate.dispose();\n },\n };\n}\n\n// ============================================================================\n// Code Evaluation Helpers\n// ============================================================================\n\n/**\n * Synchronously evaluate code and return typed result.\n * Use this for simple expressions that don't involve promises.\n *\n * @example\n * const result = evalCode<number>(ctx.context, \"1 + 1\");\n * // result === 2\n */\nexport function evalCode<T = unknown>(context: ivm.Context, code: string): T {\n return context.evalSync(code) as T;\n}\n\n/**\n * Asynchronously evaluate code that may return promises.\n * Automatically wraps code to handle promise resolution.\n *\n * @example\n * const result = await evalCodeAsync<string>(ctx.context, `\n * (async () => {\n * return \"hello\";\n * })()\n * `);\n */\nexport async function evalCodeAsync<T = unknown>(\n context: ivm.Context,\n code: string\n): Promise<T> {\n return (await context.eval(code, { promise: true })) as T;\n}\n\n/**\n * Evaluate code and return the result as JSON (for complex objects).\n * Useful when you need to extract structured data from the isolate.\n *\n * @example\n * const data = evalCodeJson<{ name: string }>(ctx.context, `\n * JSON.stringify({ name: \"test\" })\n * `);\n */\nexport function evalCodeJson<T = unknown>(context: ivm.Context, code: string): T {\n const jsonString = context.evalSync(code) as string;\n return JSON.parse(jsonString) as T;\n}\n\n/**\n * Evaluate async code and return the result as JSON (for complex objects).\n *\n * @example\n * const data = await evalCodeJsonAsync<{ status: number }>(ctx.context, `\n * (async () => {\n * const response = await fetch(\"...\");\n * return JSON.stringify({ status: response.status });\n * })()\n * `);\n */\nexport async function evalCodeJsonAsync<T = unknown>(\n context: ivm.Context,\n code: string\n): Promise<T> {\n const jsonString = (await context.eval(code, { promise: true })) as string;\n return JSON.parse(jsonString) as T;\n}\n\n/**\n * Inject values into the isolate's global scope before running code.\n *\n * @example\n * await injectGlobals(ctx.context, {\n * testInput: \"hello\",\n * testConfig: { debug: true }\n * });\n * const result = evalCode<string>(ctx.context, \"testInput\");\n */\nexport async function injectGlobals(\n context: ivm.Context,\n values: Record<string, unknown>\n): Promise<void> {\n const global = context.global;\n\n for (const [key, value] of Object.entries(values)) {\n if (typeof value === \"function\") {\n global.setSync(key, new ivmModule.Callback(value as (...args: unknown[]) => unknown));\n } else if (typeof value === \"object\" && value !== null) {\n // For objects, serialize as JSON and inject\n context.evalSync(`globalThis.${key} = ${JSON.stringify(value)}`);\n } else {\n // For primitives, set directly\n global.setSync(key, value);\n }\n }\n}\n\n// ============================================================================\n// Exports from other modules\n// ============================================================================\n\nexport { MockFileSystem } from \"./mock-fs.cjs\";\nexport { createFsTestContext } from \"./fs-context.cjs\";\nexport type { FsTestContext } from \"./fs-context.cjs\";\nexport { createRuntimeTestContext } from \"./runtime-context.cjs\";\nexport type { RuntimeTestContext } from \"./runtime-context.cjs\";\nexport { startIntegrationServer } from \"./server.cjs\";\nexport type { IntegrationServer } from \"./server.cjs\";\nexport { runTestCode } from \"./native-input-test.cjs\";\nexport type { TestRunner, TestRuntime } from \"./native-input-test.cjs\";\nexport { createFetchTestContext } from \"./fetch-context.cjs\";\nexport type { FetchTestContext } from \"./fetch-context.cjs\";\n\n// Re-export useful types\nexport type { FileSystemHandler } from \"@ricsam/isolate-fs\";\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACsB,IAAtB;AAC0B,IAA1B;AA+J+B,IAA/B;AACoC,IAApC;AAEyC,IAAzC;AAEuC,IAAvC;AAE4B,IAA5B;AAEuC,IAAvC;AA9IA,eAAsB,iBAAiB,GAAyB;AAAA,EAC9D,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAE5C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;AAMF,eAAsB,qBAAqB,GAAyB;AAAA,EAClE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAC5C,MAAM,aAAa,MAAM,8BAAU,OAAO;AAAA,EAE1C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;AAeK,SAAS,QAAqB,CAAC,SAAsB,MAAiB;AAAA,EAC3E,OAAO,QAAQ,SAAS,IAAI;AAAA;AAc9B,eAAsB,aAA0B,CAC9C,SACA,MACY;AAAA,EACZ,OAAQ,MAAM,QAAQ,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA;AAY7C,SAAS,YAAyB,CAAC,SAAsB,MAAiB;AAAA,EAC/E,MAAM,aAAa,QAAQ,SAAS,IAAI;AAAA,EACxC,OAAO,KAAK,MAAM,UAAU;AAAA;AAc9B,eAAsB,iBAA8B,CAClD,SACA,MACY;AAAA,EACZ,MAAM,aAAc,MAAM,QAAQ,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA,EAC9D,OAAO,KAAK,MAAM,UAAU;AAAA;AAa9B,eAAsB,aAAa,CACjC,SACA,QACe;AAAA,EACf,MAAM,SAAS,QAAQ;AAAA,EAEvB,YAAY,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACjD,IAAI,OAAO,UAAU,YAAY;AAAA,MAC7B,OAAO,QAAQ,KAAK,IAAI,2BAAU,SAAS,KAAwC,CAAC;AAAA,IACxF,EAAO,SAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,MAEtD,QAAQ,SAAS,cAAc,SAAS,KAAK,UAAU,KAAK,GAAG;AAAA,IACjE,EAAO;AAAA,MAEL,OAAO,QAAQ,KAAK,KAAK;AAAA;AAAA,EAE7B;AAAA;",
8
- "debugId": "927FD9D4B2821C8964756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACsB,IAAtB;AAC0B,IAA1B;AA+J+B,IAA/B;AACoC,IAApC;AAEyC,IAAzC;AAEuC,IAAvC;AAE4B,IAA5B;AAEuC,IAAvC;AA9IA,eAAsB,iBAAiB,GAAyB;AAAA,EAC9D,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAE5C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;AAMF,eAAsB,qBAAqB,GAAyB;AAAA,EAClE,MAAM,UAAU,IAAI,2BAAU;AAAA,EAC9B,MAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,EAC5C,MAAM,aAAa,MAAM,8BAAU,OAAO;AAAA,EAE1C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,GAAG;AAAA,MACR,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA;AAeK,SAAS,QAAqB,CAAC,SAAsB,MAAiB;AAAA,EAC3E,OAAO,QAAQ,SAAS,IAAI;AAAA;AAc9B,eAAsB,aAA0B,CAC9C,SACA,MACY;AAAA,EACZ,OAAQ,MAAM,QAAQ,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA;AAY7C,SAAS,YAAyB,CAAC,SAAsB,MAAiB;AAAA,EAC/E,MAAM,aAAa,QAAQ,SAAS,IAAI;AAAA,EACxC,OAAO,KAAK,MAAM,UAAU;AAAA;AAc9B,eAAsB,iBAA8B,CAClD,SACA,MACY;AAAA,EACZ,MAAM,aAAc,MAAM,QAAQ,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA,EAC9D,OAAO,KAAK,MAAM,UAAU;AAAA;AAa9B,eAAsB,aAAa,CACjC,SACA,QACe;AAAA,EACf,MAAM,SAAS,QAAQ;AAAA,EAEvB,YAAY,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACjD,IAAI,OAAO,UAAU,YAAY;AAAA,MAC7B,OAAO,QAAQ,KAAK,IAAI,2BAAU,SAAS,KAAwC,CAAC;AAAA,IACxF,EAAO,SAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,MAEtD,QAAQ,SAAS,cAAc,SAAS,KAAK,UAAU,KAAK,GAAG;AAAA,IACjE,EAAO;AAAA,MAEL,OAAO,QAAQ,KAAK,KAAK;AAAA;AAAA,EAE7B;AAAA;",
8
+ "debugId": "858BA7A1050606F964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -209,4 +219,4 @@ class MockFileSystem {
209
219
  }
210
220
  }
211
221
 
212
- //# debugId=0DD8C7C4EEEFD3AA64756E2164756E21
222
+ //# debugId=E17D990EE14221EC64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { FileSystemHandler } from \"@ricsam/isolate-fs\";\n\n/**\n * In-memory file system implementation for testing.\n * Implements the FileSystemHandler interface from @ricsam/isolate-fs.\n */\nexport class MockFileSystem implements FileSystemHandler {\n files = new Map<\n string,\n { data: Uint8Array; lastModified: number; type: string }\n >();\n directories = new Set<string>([\"/\"]);\n\n async getFileHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void> {\n const exists = this.files.has(path);\n if (!exists && !options?.create) {\n throw new Error(\"[NotFoundError]File not found: \" + path);\n }\n if (this.directories.has(path)) {\n throw new Error(\"[TypeMismatchError]Path is a directory: \" + path);\n }\n if (!exists && options?.create) {\n this.files.set(path, {\n data: new Uint8Array(0),\n lastModified: Date.now(),\n type: \"\",\n });\n }\n }\n\n async getDirectoryHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void> {\n const exists = this.directories.has(path);\n if (!exists && !options?.create) {\n throw new Error(\"[NotFoundError]Directory not found: \" + path);\n }\n if (this.files.has(path)) {\n throw new Error(\"[TypeMismatchError]Path is a file: \" + path);\n }\n if (!exists && options?.create) {\n this.directories.add(path);\n }\n }\n\n async removeEntry(\n path: string,\n options?: { recursive?: boolean }\n ): Promise<void> {\n if (this.files.has(path)) {\n this.files.delete(path);\n return;\n }\n\n if (this.directories.has(path)) {\n const prefix = path === \"/\" ? \"/\" : path + \"/\";\n const hasChildren =\n [...this.files.keys()].some((p) => p.startsWith(prefix)) ||\n [...this.directories].some((p) => p !== path && p.startsWith(prefix));\n\n if (hasChildren && !options?.recursive) {\n throw new Error(\"[InvalidModificationError]Directory not empty: \" + path);\n }\n\n for (const p of this.files.keys()) {\n if (p.startsWith(prefix)) {\n this.files.delete(p);\n }\n }\n for (const p of this.directories) {\n if (p.startsWith(prefix) || p === path) {\n this.directories.delete(p);\n }\n }\n return;\n }\n\n throw new Error(\"[NotFoundError]Entry not found: \" + path);\n }\n\n async readDirectory(\n path: string\n ): Promise<Array<{ name: string; kind: \"file\" | \"directory\" }>> {\n if (!this.directories.has(path)) {\n throw new Error(\"[NotFoundError]Directory not found: \" + path);\n }\n\n const prefix = path === \"/\" ? \"/\" : path + \"/\";\n const entries: Array<{ name: string; kind: \"file\" | \"directory\" }> = [];\n const seen = new Set<string>();\n\n for (const p of this.files.keys()) {\n if (p.startsWith(prefix)) {\n const rest = p.slice(prefix.length);\n const name = rest.split(\"/\")[0];\n if (name && !rest.includes(\"/\") && !seen.has(name)) {\n seen.add(name);\n entries.push({ name, kind: \"file\" });\n }\n }\n }\n\n for (const p of this.directories) {\n if (p !== path && p.startsWith(prefix)) {\n const rest = p.slice(prefix.length);\n const name = rest.split(\"/\")[0];\n if (name && !rest.includes(\"/\") && !seen.has(name)) {\n seen.add(name);\n entries.push({ name, kind: \"directory\" });\n }\n }\n }\n\n return entries;\n }\n\n async readFile(\n path: string\n ): Promise<{ data: Uint8Array; size: number; lastModified: number; type: string }> {\n const file = this.files.get(path);\n if (!file) {\n throw new Error(\"[NotFoundError]File not found: \" + path);\n }\n return {\n data: file.data,\n size: file.data.length,\n lastModified: file.lastModified,\n type: file.type,\n };\n }\n\n async writeFile(\n path: string,\n data: Uint8Array,\n position?: number\n ): Promise<void> {\n const existing = this.files.get(path);\n if (!existing) {\n throw new Error(\"[NotFoundError]File not found: \" + path);\n }\n\n if (position !== undefined && position > 0) {\n const newSize = Math.max(existing.data.length, position + data.length);\n const newData = new Uint8Array(newSize);\n newData.set(existing.data);\n newData.set(data, position);\n existing.data = newData;\n } else if (position === 0) {\n const newSize = Math.max(existing.data.length, data.length);\n const newData = new Uint8Array(newSize);\n newData.set(existing.data);\n newData.set(data, 0);\n existing.data = newData;\n } else {\n existing.data = data;\n }\n existing.lastModified = Date.now();\n }\n\n async truncateFile(path: string, size: number): Promise<void> {\n const file = this.files.get(path);\n if (!file) {\n throw new Error(\"[NotFoundError]File not found: \" + path);\n }\n if (size < file.data.length) {\n file.data = file.data.slice(0, size);\n } else if (size > file.data.length) {\n const newData = new Uint8Array(size);\n newData.set(file.data);\n file.data = newData;\n }\n file.lastModified = Date.now();\n }\n\n async getFileMetadata(\n path: string\n ): Promise<{ size: number; lastModified: number; type: string }> {\n const file = this.files.get(path);\n if (!file) {\n throw new Error(\"[NotFoundError]File not found: \" + path);\n }\n return {\n size: file.data.length,\n lastModified: file.lastModified,\n type: file.type,\n };\n }\n\n // Test helper methods\n\n /**\n * Reset the mock file system to its initial state (empty, with only root directory)\n */\n reset(): void {\n this.files.clear();\n this.directories.clear();\n this.directories.add(\"/\");\n }\n\n /**\n * Convenience method to set a file with string or binary content\n */\n setFile(path: string, content: string | Uint8Array, type?: string): void {\n const data =\n typeof content === \"string\"\n ? new TextEncoder().encode(content)\n : content;\n this.files.set(path, {\n data,\n lastModified: Date.now(),\n type: type ?? \"\",\n });\n }\n\n /**\n * Get file content as Uint8Array, or undefined if not found\n */\n getFile(path: string): Uint8Array | undefined {\n return this.files.get(path)?.data;\n }\n\n /**\n * Get file content as string, or undefined if not found\n */\n getFileAsString(path: string): string | undefined {\n const data = this.getFile(path);\n if (!data) return undefined;\n return new TextDecoder().decode(data);\n }\n\n /**\n * Create a directory (and any necessary parent directories)\n */\n createDirectory(path: string): void {\n const parts = path.split(\"/\").filter(Boolean);\n let current = \"\";\n for (const part of parts) {\n current += \"/\" + part;\n this.directories.add(current);\n }\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "0DD8C7C4EEEFD3AA64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "E17D990EE14221EC64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -4,38 +4,59 @@ var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ function __accessProp(key) {
8
+ return this[key];
9
+ }
10
+ var __toESMCache_node;
11
+ var __toESMCache_esm;
7
12
  var __toESM = (mod, isNodeMode, target) => {
13
+ var canCache = mod != null && typeof mod === "object";
14
+ if (canCache) {
15
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
+ var cached = cache.get(mod);
17
+ if (cached)
18
+ return cached;
19
+ }
8
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
9
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
22
  for (let key of __getOwnPropNames(mod))
11
23
  if (!__hasOwnProp.call(to, key))
12
24
  __defProp(to, key, {
13
- get: () => mod[key],
25
+ get: __accessProp.bind(mod, key),
14
26
  enumerable: true
15
27
  });
28
+ if (canCache)
29
+ cache.set(mod, to);
16
30
  return to;
17
31
  };
18
- var __moduleCache = /* @__PURE__ */ new WeakMap;
19
32
  var __toCommonJS = (from) => {
20
- var entry = __moduleCache.get(from), desc;
33
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
21
34
  if (entry)
22
35
  return entry;
23
36
  entry = __defProp({}, "__esModule", { value: true });
24
- if (from && typeof from === "object" || typeof from === "function")
25
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
26
- get: () => from[key],
27
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
28
- }));
37
+ if (from && typeof from === "object" || typeof from === "function") {
38
+ for (var key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(entry, key))
40
+ __defProp(entry, key, {
41
+ get: __accessProp.bind(from, key),
42
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
43
+ });
44
+ }
29
45
  __moduleCache.set(from, entry);
30
46
  return entry;
31
47
  };
48
+ var __moduleCache;
49
+ var __returnValue = (v) => v;
50
+ function __exportSetter(name, newValue) {
51
+ this[name] = __returnValue.bind(null, newValue);
52
+ }
32
53
  var __export = (target, all) => {
33
54
  for (var name in all)
34
55
  __defProp(target, name, {
35
56
  get: all[name],
36
57
  enumerable: true,
37
58
  configurable: true,
38
- set: (newValue) => all[name] = () => newValue
59
+ set: __exportSetter.bind(all, name)
39
60
  });
40
61
  };
41
62
 
@@ -344,4 +365,4 @@ function unmarshalFromJson(value) {
344
365
  return value;
345
366
  }
346
367
 
347
- //# debugId=7D8A3E21B94E7B5B64756E2164756E21
368
+ //# debugId=ABCB529F4120B9D164756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import ivm from \"isolated-vm\";\n\nexport interface TestRuntime {\n logs: Record<string, unknown>;\n result: unknown;\n}\n\nexport interface TestRunner {\n input(inputs: Record<string, unknown>): TestRuntime;\n}\n\n/**\n * Run isolate code with native objects as input and capture logs\n *\n * This utility allows testing whether native objects passed INTO the isolate\n * behave like isolate instances. It converts native web API classes (Headers,\n * Request, Response, URL, Blob, File, FormData) to their isolate equivalents\n * before executing the test code.\n *\n * @example\n * const runtime = runTestCode(ctx.context, `\n * const headers = testingInput.headers;\n * log(\"instanceof\", headers instanceof Headers);\n * log(\"contentType\", headers.get(\"content-type\"));\n * `).input({\n * headers: new Headers({ \"content-type\": \"application/json\" })\n * });\n *\n * expect(runtime.logs.instanceof).toBe(true);\n * expect(runtime.logs.contentType).toBe(\"application/json\");\n */\nexport function runTestCode(context: ivm.Context, code: string): TestRunner {\n return {\n input(inputs: Record<string, unknown>): TestRuntime {\n const logs: Record<string, unknown> = {};\n\n // Setup log capture - log(tag, value) stores as logs[tag] = value\n // Values are unmarshalled back to native types for bidirectional testing\n const logCallback = new ivm.Callback(\n (tag: string, valueJson: string) => {\n const value = JSON.parse(valueJson);\n logs[tag] = unmarshalFromJson(value);\n }\n );\n context.global.setSync(\"__log_callback__\", logCallback);\n\n // Create a wrapper log function that serializes values\n context.evalSync(`\n globalThis.log = function(tag, value) {\n __log_callback__(tag, JSON.stringify(__serializeForLog__(value)));\n };\n\n globalThis.__serializeForLog__ = function(value) {\n if (typeof Headers !== 'undefined' && value instanceof Headers) {\n const pairs = [];\n for (const [k, v] of value) pairs.push([k, v]);\n return { __type__: 'Headers', pairs };\n }\n if (typeof Request !== 'undefined' && value instanceof Request) {\n const headers = [];\n for (const [k, v] of value.headers) headers.push([k, v]);\n return {\n __type__: 'Request',\n url: value.url,\n method: value.method,\n headers,\n mode: value.mode,\n credentials: value.credentials,\n cache: value.cache,\n redirect: value.redirect,\n referrer: value.referrer,\n referrerPolicy: value.referrerPolicy,\n integrity: value.integrity,\n };\n }\n if (typeof Response !== 'undefined' && value instanceof Response) {\n const headers = [];\n for (const [k, v] of value.headers) headers.push([k, v]);\n return {\n __type__: 'Response',\n status: value.status,\n statusText: value.statusText,\n ok: value.ok,\n headers,\n type: value.type,\n redirected: value.redirected,\n url: value.url,\n };\n }\n if (typeof FormData !== 'undefined' && value instanceof FormData) {\n const entries = [];\n for (const [k, v] of value) {\n if (typeof File !== 'undefined' && v instanceof File) {\n entries.push([k, { __type__: 'File', name: v.name, type: v.type, lastModified: v.lastModified }]);\n } else {\n entries.push([k, v]);\n }\n }\n return { __type__: 'FormData', entries };\n }\n if (value instanceof URL) {\n return { __type__: 'URL', href: value.href };\n }\n if (value instanceof File) {\n return { __type__: 'File', name: value.name, type: value.type, lastModified: value.lastModified };\n }\n if (value instanceof Blob) {\n return { __type__: 'Blob', type: value.type, size: value.size };\n }\n if (Array.isArray(value)) {\n return value.map(v => __serializeForLog__(v));\n }\n if (value && typeof value === 'object' && value.constructor === Object) {\n const result = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = __serializeForLog__(v);\n }\n return result;\n }\n return value;\n };\n `);\n\n // Marshal inputs with special handling for native web API classes\n marshalInputs(context, inputs);\n\n // Run the code\n let returnValue: unknown = undefined;\n try {\n returnValue = context.evalSync(code);\n } catch (error) {\n // Clean up before re-throwing\n context.evalSync(`\n delete globalThis.testingInput;\n delete globalThis.log;\n delete globalThis.__log_callback__;\n delete globalThis.__serializeForLog__;\n `);\n throw error;\n }\n\n // Cleanup\n context.evalSync(`\n delete globalThis.testingInput;\n delete globalThis.log;\n delete globalThis.__log_callback__;\n delete globalThis.__serializeForLog__;\n `);\n\n return { logs, result: returnValue };\n },\n };\n}\n\n/**\n * Marshal inputs into the isolate, converting native web API classes\n */\nfunction marshalInputs(\n context: ivm.Context,\n inputs: Record<string, unknown>\n): void {\n // Create the testingInput object in the isolate\n context.evalSync(`globalThis.testingInput = {};`);\n\n for (const [key, value] of Object.entries(inputs)) {\n marshalValue(context, `testingInput.${key}`, value);\n }\n}\n\n/**\n * Marshal a single value into the isolate at the given path\n */\nfunction marshalValue(\n context: ivm.Context,\n path: string,\n value: unknown\n): void {\n // Check for native Headers\n if (value instanceof Headers) {\n const pairs: [string, string][] = [];\n value.forEach((v, k) => pairs.push([k, v]));\n const pairsJson = JSON.stringify(pairs);\n context.evalSync(`${path} = new Headers(${pairsJson});`);\n return;\n }\n\n // Check for native Request\n if (value instanceof Request) {\n // First marshal the headers\n const headerPairs: [string, string][] = [];\n value.headers.forEach((v, k) => headerPairs.push([k, v]));\n const headersJson = JSON.stringify(headerPairs);\n\n const urlJson = JSON.stringify(value.url);\n const methodJson = JSON.stringify(value.method);\n const modeJson = JSON.stringify(value.mode);\n const credentialsJson = JSON.stringify(value.credentials);\n const cacheJson = JSON.stringify(value.cache);\n const redirectJson = JSON.stringify(value.redirect);\n const referrerJson = JSON.stringify(value.referrer);\n const referrerPolicyJson = JSON.stringify(value.referrerPolicy);\n const integrityJson = JSON.stringify(value.integrity);\n\n context.evalSync(`\n ${path} = new Request(${urlJson}, {\n method: ${methodJson},\n headers: new Headers(${headersJson}),\n mode: ${modeJson},\n credentials: ${credentialsJson},\n cache: ${cacheJson},\n redirect: ${redirectJson},\n referrer: ${referrerJson},\n referrerPolicy: ${referrerPolicyJson},\n integrity: ${integrityJson},\n });\n `);\n return;\n }\n\n // Check for native Response\n if (value instanceof Response) {\n const headerPairs: [string, string][] = [];\n value.headers.forEach((v, k) => headerPairs.push([k, v]));\n const headersJson = JSON.stringify(headerPairs);\n\n const statusJson = JSON.stringify(value.status);\n const statusTextJson = JSON.stringify(value.statusText);\n\n context.evalSync(`\n ${path} = new Response(null, {\n status: ${statusJson},\n statusText: ${statusTextJson},\n headers: new Headers(${headersJson}),\n });\n `);\n return;\n }\n\n // Check for native FormData\n if (value instanceof FormData) {\n context.evalSync(`${path} = new FormData();`);\n\n for (const [key, entryValue] of value.entries()) {\n const keyJson = JSON.stringify(key);\n\n if (typeof entryValue !== \"string\") {\n const file = entryValue as File;\n const nameJson = JSON.stringify(file.name);\n const typeJson = JSON.stringify(file.type);\n const lastModifiedJson = JSON.stringify(file.lastModified);\n context.evalSync(`\n ${path}.append(${keyJson}, new File([], ${nameJson}, { type: ${typeJson}, lastModified: ${lastModifiedJson} }));\n `);\n } else {\n const valueJson = JSON.stringify(entryValue);\n context.evalSync(`${path}.append(${keyJson}, ${valueJson});`);\n }\n }\n return;\n }\n\n // Check for native URL\n if (value instanceof URL) {\n const hrefJson = JSON.stringify(value.href);\n context.evalSync(`${path} = new URL(${hrefJson});`);\n return;\n }\n\n // Check for native File (before Blob, since File extends Blob)\n if (value instanceof File) {\n const nameJson = JSON.stringify(value.name);\n const typeJson = JSON.stringify(value.type);\n const lastModifiedJson = JSON.stringify(value.lastModified);\n context.evalSync(\n `${path} = new File([], ${nameJson}, { type: ${typeJson}, lastModified: ${lastModifiedJson} });`\n );\n return;\n }\n\n // Check for native Blob\n if (value instanceof Blob) {\n const typeJson = JSON.stringify(value.type);\n context.evalSync(`${path} = new Blob([], { type: ${typeJson} });`);\n return;\n }\n\n // Handle arrays recursively\n if (Array.isArray(value)) {\n context.evalSync(`${path} = [];`);\n for (let i = 0; i < value.length; i++) {\n marshalValue(context, `${path}[${i}]`, value[i]);\n }\n return;\n }\n\n // Handle plain objects recursively\n if (value && typeof value === \"object\" && value.constructor === Object) {\n context.evalSync(`${path} = {};`);\n for (const [key, val] of Object.entries(value)) {\n // Use bracket notation for safe property access\n marshalValue(context, `${path}[${JSON.stringify(key)}]`, val);\n }\n return;\n }\n\n // For primitives, set directly via JSON\n const valueJson = JSON.stringify(value);\n context.evalSync(`${path} = ${valueJson};`);\n}\n\n/**\n * Unmarshal a value from JSON, converting special __type__ markers back to native instances\n */\nfunction unmarshalFromJson(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((v) => unmarshalFromJson(v));\n }\n\n if (typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n\n // Check for special type markers\n if (obj.__type__ === \"Headers\") {\n const pairs = obj.pairs as [string, string][];\n const headers = new Headers();\n for (const [k, v] of pairs) {\n headers.append(k, v);\n }\n return headers;\n }\n\n if (obj.__type__ === \"Request\") {\n const headers = new Headers();\n for (const [k, v] of obj.headers as [string, string][]) {\n headers.append(k, v);\n }\n return new Request(obj.url as string, {\n method: obj.method as string,\n headers,\n mode: obj.mode as Request[\"mode\"],\n credentials: obj.credentials as Request[\"credentials\"],\n cache: obj.cache as Request[\"cache\"],\n redirect: obj.redirect as Request[\"redirect\"],\n referrer: obj.referrer as string,\n referrerPolicy: obj.referrerPolicy as Request[\"referrerPolicy\"],\n integrity: obj.integrity as string,\n });\n }\n\n if (obj.__type__ === \"Response\") {\n const headers = new Headers();\n for (const [k, v] of obj.headers as [string, string][]) {\n headers.append(k, v);\n }\n return new Response(null, {\n status: obj.status as number,\n statusText: obj.statusText as string,\n headers,\n });\n }\n\n if (obj.__type__ === \"FormData\") {\n const formData = new FormData();\n for (const [k, v] of obj.entries as [string, unknown][]) {\n if (\n typeof v === \"object\" &&\n v !== null &&\n (v as Record<string, unknown>).__type__ === \"File\"\n ) {\n const fileObj = v as Record<string, unknown>;\n formData.append(\n k,\n new File([], fileObj.name as string, {\n type: fileObj.type as string,\n lastModified: fileObj.lastModified as number,\n })\n );\n } else {\n formData.append(k, v as string);\n }\n }\n return formData;\n }\n\n if (obj.__type__ === \"URL\") {\n return new URL(obj.href as string);\n }\n\n if (obj.__type__ === \"File\") {\n return new File([], obj.name as string, {\n type: obj.type as string,\n lastModified: obj.lastModified as number,\n });\n }\n\n if (obj.__type__ === \"Blob\") {\n return new Blob([], { type: obj.type as string });\n }\n\n // Plain object - recursively unmarshal properties\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n result[k] = unmarshalFromJson(v);\n }\n return result;\n }\n\n return value;\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "7D8A3E21B94E7B5B64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAgB,IAAhB;AA+BO,SAAS,WAAW,CAAC,SAAsB,MAA0B;AAAA,EAC1E,OAAO;AAAA,IACL,KAAK,CAAC,QAA8C;AAAA,MAClD,MAAM,OAAgC,CAAC;AAAA,MAIvC,MAAM,cAAc,IAAI,2BAAI,SAC1B,CAAC,KAAa,cAAsB;AAAA,QAClC,MAAM,QAAQ,KAAK,MAAM,SAAS;AAAA,QAClC,KAAK,OAAO,kBAAkB,KAAK;AAAA,OAEvC;AAAA,MACA,QAAQ,OAAO,QAAQ,oBAAoB,WAAW;AAAA,MAGtD,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA0EhB;AAAA,MAGD,cAAc,SAAS,MAAM;AAAA,MAG7B,IAAI,cAAuB;AAAA,MAC3B,IAAI;AAAA,QACF,cAAc,QAAQ,SAAS,IAAI;AAAA,QACnC,OAAO,OAAO;AAAA,QAEd,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAKhB;AAAA,QACD,MAAM;AAAA;AAAA,MAIR,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,OAKhB;AAAA,MAED,OAAO,EAAE,MAAM,QAAQ,YAAY;AAAA;AAAA,EAEvC;AAAA;AAMF,SAAS,aAAa,CACpB,SACA,QACM;AAAA,EAEN,QAAQ,SAAS,+BAA+B;AAAA,EAEhD,YAAY,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACjD,aAAa,SAAS,gBAAgB,OAAO,KAAK;AAAA,EACpD;AAAA;AAMF,SAAS,YAAY,CACnB,SACA,MACA,OACM;AAAA,EAEN,IAAI,iBAAiB,SAAS;AAAA,IAC5B,MAAM,QAA4B,CAAC;AAAA,IACnC,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IAC1C,MAAM,YAAY,KAAK,UAAU,KAAK;AAAA,IACtC,QAAQ,SAAS,GAAG,sBAAsB,aAAa;AAAA,IACvD;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,SAAS;AAAA,IAE5B,MAAM,cAAkC,CAAC;AAAA,IACzC,MAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACxD,MAAM,cAAc,KAAK,UAAU,WAAW;AAAA,IAE9C,MAAM,UAAU,KAAK,UAAU,MAAM,GAAG;AAAA,IACxC,MAAM,aAAa,KAAK,UAAU,MAAM,MAAM;AAAA,IAC9C,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,IAC1C,MAAM,kBAAkB,KAAK,UAAU,MAAM,WAAW;AAAA,IACxD,MAAM,YAAY,KAAK,UAAU,MAAM,KAAK;AAAA,IAC5C,MAAM,eAAe,KAAK,UAAU,MAAM,QAAQ;AAAA,IAClD,MAAM,eAAe,KAAK,UAAU,MAAM,QAAQ;AAAA,IAClD,MAAM,qBAAqB,KAAK,UAAU,MAAM,cAAc;AAAA,IAC9D,MAAM,gBAAgB,KAAK,UAAU,MAAM,SAAS;AAAA,IAEpD,QAAQ,SAAS;AAAA,QACb,sBAAsB;AAAA,kBACZ;AAAA,+BACa;AAAA,gBACf;AAAA,uBACO;AAAA,iBACN;AAAA,oBACG;AAAA,oBACA;AAAA,0BACM;AAAA,qBACL;AAAA;AAAA,KAEhB;AAAA,IACD;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,UAAU;AAAA,IAC7B,MAAM,cAAkC,CAAC;AAAA,IACzC,MAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACxD,MAAM,cAAc,KAAK,UAAU,WAAW;AAAA,IAE9C,MAAM,aAAa,KAAK,UAAU,MAAM,MAAM;AAAA,IAC9C,MAAM,iBAAiB,KAAK,UAAU,MAAM,UAAU;AAAA,IAEtD,QAAQ,SAAS;AAAA,QACb;AAAA,kBACU;AAAA,sBACI;AAAA,+BACS;AAAA;AAAA,KAE1B;AAAA,IACD;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,UAAU;AAAA,IAC7B,QAAQ,SAAS,GAAG,wBAAwB;AAAA,IAE5C,YAAY,KAAK,eAAe,MAAM,QAAQ,GAAG;AAAA,MAC/C,MAAM,UAAU,KAAK,UAAU,GAAG;AAAA,MAElC,IAAI,OAAO,eAAe,UAAU;AAAA,QAClC,MAAM,OAAO;AAAA,QACb,MAAM,WAAW,KAAK,UAAU,KAAK,IAAI;AAAA,QACzC,MAAM,WAAW,KAAK,UAAU,KAAK,IAAI;AAAA,QACzC,MAAM,mBAAmB,KAAK,UAAU,KAAK,YAAY;AAAA,QACzD,QAAQ,SAAS;AAAA,YACb,eAAe,yBAAyB,qBAAqB,2BAA2B;AAAA,SAC3F;AAAA,MACH,EAAO;AAAA,QACL,MAAM,aAAY,KAAK,UAAU,UAAU;AAAA,QAC3C,QAAQ,SAAS,GAAG,eAAe,YAAY,cAAa;AAAA;AAAA,IAEhE;AAAA,IACA;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,KAAK;AAAA,IACxB,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,IAC1C,QAAQ,SAAS,GAAG,kBAAkB,YAAY;AAAA,IAClD;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,MAAM;AAAA,IACzB,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,IAC1C,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,IAC1C,MAAM,mBAAmB,KAAK,UAAU,MAAM,YAAY;AAAA,IAC1D,QAAQ,SACN,GAAG,uBAAuB,qBAAqB,2BAA2B,sBAC5E;AAAA,IACA;AAAA,EACF;AAAA,EAGA,IAAI,iBAAiB,MAAM;AAAA,IACzB,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,IAC1C,QAAQ,SAAS,GAAG,+BAA+B,cAAc;AAAA,IACjE;AAAA,EACF;AAAA,EAGA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,QAAQ,SAAS,GAAG,YAAY;AAAA,IAChC,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,MACrC,aAAa,SAAS,GAAG,QAAQ,MAAM,MAAM,EAAE;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AAAA,EAGA,IAAI,SAAS,OAAO,UAAU,YAAY,MAAM,gBAAgB,QAAQ;AAAA,IACtE,QAAQ,SAAS,GAAG,YAAY;AAAA,IAChC,YAAY,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,MAE9C,aAAa,SAAS,GAAG,QAAQ,KAAK,UAAU,GAAG,MAAM,GAAG;AAAA,IAC9D;AAAA,IACA;AAAA,EACF;AAAA,EAGA,MAAM,YAAY,KAAK,UAAU,KAAK;AAAA,EACtC,QAAQ,SAAS,GAAG,UAAU,YAAY;AAAA;AAM5C,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,OAAO,MAAM,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;AAAA,EAC9C;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,MAAM;AAAA,IAGZ,IAAI,IAAI,aAAa,WAAW;AAAA,MAC9B,MAAM,QAAQ,IAAI;AAAA,MAClB,MAAM,UAAU,IAAI;AAAA,MACpB,YAAY,GAAG,MAAM,OAAO;AAAA,QAC1B,QAAQ,OAAO,GAAG,CAAC;AAAA,MACrB;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,IAAI,aAAa,WAAW;AAAA,MAC9B,MAAM,UAAU,IAAI;AAAA,MACpB,YAAY,GAAG,MAAM,IAAI,SAA+B;AAAA,QACtD,QAAQ,OAAO,GAAG,CAAC;AAAA,MACrB;AAAA,MACA,OAAO,IAAI,QAAQ,IAAI,KAAe;AAAA,QACpC,QAAQ,IAAI;AAAA,QACZ;AAAA,QACA,MAAM,IAAI;AAAA,QACV,aAAa,IAAI;AAAA,QACjB,OAAO,IAAI;AAAA,QACX,UAAU,IAAI;AAAA,QACd,UAAU,IAAI;AAAA,QACd,gBAAgB,IAAI;AAAA,QACpB,WAAW,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,IAAI,aAAa,YAAY;AAAA,MAC/B,MAAM,UAAU,IAAI;AAAA,MACpB,YAAY,GAAG,MAAM,IAAI,SAA+B;AAAA,QACtD,QAAQ,OAAO,GAAG,CAAC;AAAA,MACrB;AAAA,MACA,OAAO,IAAI,SAAS,MAAM;AAAA,QACxB,QAAQ,IAAI;AAAA,QACZ,YAAY,IAAI;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,IAAI,aAAa,YAAY;AAAA,MAC/B,MAAM,WAAW,IAAI;AAAA,MACrB,YAAY,GAAG,MAAM,IAAI,SAAgC;AAAA,QACvD,IACE,OAAO,MAAM,YACb,MAAM,QACL,EAA8B,aAAa,QAC5C;AAAA,UACA,MAAM,UAAU;AAAA,UAChB,SAAS,OACP,GACA,IAAI,KAAK,CAAC,GAAG,QAAQ,MAAgB;AAAA,YACnC,MAAM,QAAQ;AAAA,YACd,cAAc,QAAQ;AAAA,UACxB,CAAC,CACH;AAAA,QACF,EAAO;AAAA,UACL,SAAS,OAAO,GAAG,CAAW;AAAA;AAAA,MAElC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,IAAI,aAAa,OAAO;AAAA,MAC1B,OAAO,IAAI,IAAI,IAAI,IAAc;AAAA,IACnC;AAAA,IAEA,IAAI,IAAI,aAAa,QAAQ;AAAA,MAC3B,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,MAAgB;AAAA,QACtC,MAAM,IAAI;AAAA,QACV,cAAc,IAAI;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,IAAI,aAAa,QAAQ;AAAA,MAC3B,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,KAAe,CAAC;AAAA,IAClD;AAAA,IAGA,MAAM,SAAkC,CAAC;AAAA,IACzC,YAAY,GAAG,MAAM,OAAO,QAAQ,GAAG,GAAG;AAAA,MACxC,OAAO,KAAK,kBAAkB,CAAC;AAAA,IACjC;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;",
8
+ "debugId": "ABCB529F4120B9D164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate-test-utils",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "type": "commonjs"
5
5
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -94,4 +104,4 @@ async function createRuntimeTestContext(options) {
94
104
  };
95
105
  }
96
106
 
97
- //# debugId=34C4CAD39363991D64756E2164756E21
107
+ //# debugId=D4000938287DB17C64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { MockFileSystem } from \"./mock-fs.cjs\";\nimport { createRuntime } from \"@ricsam/isolate-runtime\";\nimport { clearAllInstanceState } from \"@ricsam/isolate-core\";\n\nexport interface MockResponse {\n status?: number;\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport interface RuntimeTestContextOptions {\n /** Enable file system APIs with mock file system */\n fs?: boolean;\n}\n\nexport interface RuntimeTestContext {\n /** Execute code in the runtime (ES module mode, supports top-level await) */\n eval(code: string): Promise<void>;\n /** Clear all pending timers */\n clearTimers(): void;\n /** Dispatch an HTTP request to the serve() handler */\n dispatchRequest(request: Request): Promise<Response>;\n /** Dispose all resources */\n dispose(): Promise<void>;\n /** Captured console.log calls */\n logs: Array<{ level: string; stdout: string }>;\n /** Captured fetch calls */\n fetchCalls: Array<{ url: string; method: string; headers: [string, string][] }>;\n /** Set the mock response for the next fetch call */\n setMockResponse(response: MockResponse): void;\n /** Mock file system (only available if fs option is true) */\n mockFs: MockFileSystem;\n /**\n * Get a result from the isolate. Call `await setResult(value)` in your eval code\n * to pass a value back to the host.\n */\n getResult<T = unknown>(): T | undefined;\n /** Clear the stored result */\n clearResult(): void;\n}\n\n/**\n * Create a full runtime test context with all APIs set up.\n * Includes console logging capture, fetch mocking, and optionally file system.\n *\n * @example\n * const ctx = await createRuntimeTestContext({ fs: true });\n *\n * // Set up mock response for fetch\n * ctx.setMockResponse({ status: 200, body: '{\"data\": \"test\"}' });\n *\n * // Run code and pass result back via setResult\n * await ctx.eval(`\n * console.log(\"Starting fetch...\");\n * const response = await fetch(\"https://api.example.com/data\");\n * const data = await response.json();\n * console.log(\"Got data:\", data);\n * setResult(data);\n * `);\n *\n * // Get the result\n * console.log(ctx.getResult()); // { data: \"test\" }\n *\n * // Check logs\n * console.log(ctx.logs); // [{ level: \"log\", stdout: \"Starting fetch...\" }, ...]\n *\n * // Check fetch calls\n * console.log(ctx.fetchCalls); // [{ url: \"https://api.example.com/data\", method: \"GET\", ... }]\n *\n * await ctx.dispose();\n */\nexport async function createRuntimeTestContext(\n options?: RuntimeTestContextOptions\n): Promise<RuntimeTestContext> {\n const opts = options ?? {};\n\n // Clear any previous instance state\n clearAllInstanceState();\n\n // State for capturing logs and fetch calls\n const logs: Array<{ level: string; stdout: string }> = [];\n const fetchCalls: Array<{\n url: string;\n method: string;\n headers: [string, string][];\n }> = [];\n\n let mockResponse: MockResponse = { status: 200, body: \"\" };\n let storedResult: unknown = undefined;\n\n // Create mock file system\n const mockFs = new MockFileSystem();\n\n // Create runtime with configured handlers\n const runtime = await createRuntime({\n console: {\n onEntry: (entry) => {\n if (entry.type === \"output\") {\n logs.push({ level: entry.level, stdout: entry.stdout });\n } else if (entry.type === \"assert\") {\n logs.push({ level: \"error\", stdout: entry.stdout });\n }\n },\n },\n fetch: async (url: string, init) => {\n // Capture fetch call\n fetchCalls.push({\n url,\n method: init.method,\n headers: init.headers,\n });\n\n // Return mock response\n return new Response(mockResponse.body ?? \"\", {\n status: mockResponse.status ?? 200,\n headers: mockResponse.headers,\n });\n },\n fs: opts.fs ? { getDirectory: async () => mockFs } : undefined,\n customFunctions: {\n setResult: {\n fn: (value: unknown) => {\n storedResult = value;\n },\n type: 'sync',\n },\n },\n });\n\n return {\n eval: runtime.eval.bind(runtime),\n clearTimers: runtime.timers.clearAll.bind(runtime.timers),\n dispatchRequest: runtime.fetch.dispatchRequest.bind(runtime.fetch),\n dispose: runtime.dispose.bind(runtime),\n logs,\n fetchCalls,\n setMockResponse(response: MockResponse) {\n mockResponse = response;\n },\n mockFs,\n getResult<T = unknown>(): T | undefined {\n return storedResult as T | undefined;\n },\n clearResult() {\n storedResult = undefined;\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA+B,IAA/B;AAC8B,IAA9B;AACsC,IAAtC;AAqEA,eAAsB,wBAAwB,CAC5C,SAC6B;AAAA,EAC7B,MAAM,OAAO,WAAW,CAAC;AAAA,EAGzB,0CAAsB;AAAA,EAGtB,MAAM,OAAiD,CAAC;AAAA,EACxD,MAAM,aAID,CAAC;AAAA,EAEN,IAAI,eAA6B,EAAE,QAAQ,KAAK,MAAM,GAAG;AAAA,EACzD,IAAI,eAAwB;AAAA,EAG5B,MAAM,SAAS,IAAI;AAAA,EAGnB,MAAM,UAAU,MAAM,qCAAc;AAAA,IAClC,SAAS;AAAA,MACP,SAAS,CAAC,UAAU;AAAA,QAClB,IAAI,MAAM,SAAS,UAAU;AAAA,UAC3B,KAAK,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,QACxD,EAAO,SAAI,MAAM,SAAS,UAAU;AAAA,UAClC,KAAK,KAAK,EAAE,OAAO,SAAS,QAAQ,MAAM,OAAO,CAAC;AAAA,QACpD;AAAA;AAAA,IAEJ;AAAA,IACA,OAAO,OAAO,KAAa,SAAS;AAAA,MAElC,WAAW,KAAK;AAAA,QACd;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MAGD,OAAO,IAAI,SAAS,aAAa,QAAQ,IAAI;AAAA,QAC3C,QAAQ,aAAa,UAAU;AAAA,QAC/B,SAAS,aAAa;AAAA,MACxB,CAAC;AAAA;AAAA,IAEH,IAAI,KAAK,KAAK,EAAE,cAAc,YAAY,OAAO,IAAI;AAAA,IACrD,iBAAiB;AAAA,MACf,WAAW;AAAA,QACT,IAAI,CAAC,UAAmB;AAAA,UACtB,eAAe;AAAA;AAAA,QAEjB,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,MAAM,QAAQ,KAAK,KAAK,OAAO;AAAA,IAC/B,aAAa,QAAQ,OAAO,SAAS,KAAK,QAAQ,MAAM;AAAA,IACxD,iBAAiB,QAAQ,MAAM,gBAAgB,KAAK,QAAQ,KAAK;AAAA,IACjE,SAAS,QAAQ,QAAQ,KAAK,OAAO;AAAA,IACrC;AAAA,IACA;AAAA,IACA,eAAe,CAAC,UAAwB;AAAA,MACtC,eAAe;AAAA;AAAA,IAEjB;AAAA,IACA,SAAsB,GAAkB;AAAA,MACtC,OAAO;AAAA;AAAA,IAET,WAAW,GAAG;AAAA,MACZ,eAAe;AAAA;AAAA,EAEnB;AAAA;",
8
- "debugId": "34C4CAD39363991D64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA+B,IAA/B;AAC8B,IAA9B;AACsC,IAAtC;AAqEA,eAAsB,wBAAwB,CAC5C,SAC6B;AAAA,EAC7B,MAAM,OAAO,WAAW,CAAC;AAAA,EAGzB,0CAAsB;AAAA,EAGtB,MAAM,OAAiD,CAAC;AAAA,EACxD,MAAM,aAID,CAAC;AAAA,EAEN,IAAI,eAA6B,EAAE,QAAQ,KAAK,MAAM,GAAG;AAAA,EACzD,IAAI,eAAwB;AAAA,EAG5B,MAAM,SAAS,IAAI;AAAA,EAGnB,MAAM,UAAU,MAAM,qCAAc;AAAA,IAClC,SAAS;AAAA,MACP,SAAS,CAAC,UAAU;AAAA,QAClB,IAAI,MAAM,SAAS,UAAU;AAAA,UAC3B,KAAK,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,QACxD,EAAO,SAAI,MAAM,SAAS,UAAU;AAAA,UAClC,KAAK,KAAK,EAAE,OAAO,SAAS,QAAQ,MAAM,OAAO,CAAC;AAAA,QACpD;AAAA;AAAA,IAEJ;AAAA,IACA,OAAO,OAAO,KAAa,SAAS;AAAA,MAElC,WAAW,KAAK;AAAA,QACd;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MAGD,OAAO,IAAI,SAAS,aAAa,QAAQ,IAAI;AAAA,QAC3C,QAAQ,aAAa,UAAU;AAAA,QAC/B,SAAS,aAAa;AAAA,MACxB,CAAC;AAAA;AAAA,IAEH,IAAI,KAAK,KAAK,EAAE,cAAc,YAAY,OAAO,IAAI;AAAA,IACrD,iBAAiB;AAAA,MACf,WAAW;AAAA,QACT,IAAI,CAAC,UAAmB;AAAA,UACtB,eAAe;AAAA;AAAA,QAEjB,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,MAAM,QAAQ,KAAK,KAAK,OAAO;AAAA,IAC/B,aAAa,QAAQ,OAAO,SAAS,KAAK,QAAQ,MAAM;AAAA,IACxD,iBAAiB,QAAQ,MAAM,gBAAgB,KAAK,QAAQ,KAAK;AAAA,IACjE,SAAS,QAAQ,QAAQ,KAAK,OAAO;AAAA,IACrC;AAAA,IACA;AAAA,IACA,eAAe,CAAC,UAAwB;AAAA,MACtC,eAAe;AAAA;AAAA,IAEjB;AAAA,IACA,SAAsB,GAAkB;AAAA,MACtC,OAAO;AAAA;AAAA,IAET,WAAW,GAAG;AAAA,MACZ,eAAe;AAAA;AAAA,EAEnB;AAAA;",
8
+ "debugId": "D4000938287DB17C64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -106,4 +116,4 @@ async function startIntegrationServer(port) {
106
116
  };
107
117
  }
108
118
 
109
- //# debugId=A81C39DF693539C664756E2164756E21
119
+ //# debugId=D2F4C84E5C9FABDB64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { createServer, type Server, type IncomingMessage, type ServerResponse } from \"node:http\";\n\nexport interface MockServerResponse {\n status?: number;\n body?: string;\n headers?: Record<string, string>;\n}\n\nexport interface RecordedRequest {\n method: string;\n path: string;\n headers: Record<string, string>;\n body?: string;\n}\n\nexport interface IntegrationServer {\n /** The base URL of the server (e.g., \"http://localhost:3000\") */\n url: string;\n /** The port the server is listening on */\n port: number;\n /** Close the server */\n close(): Promise<void>;\n /** Set the response for a specific path */\n setResponse(path: string, response: MockServerResponse): void;\n /** Set a default response for any unmatched path */\n setDefaultResponse(response: MockServerResponse): void;\n /** Get all recorded requests */\n getRequests(): RecordedRequest[];\n /** Clear all recorded requests */\n clearRequests(): void;\n /** Clear all configured responses */\n clearResponses(): void;\n}\n\n/**\n * Start an HTTP server for integration tests.\n * Useful for testing fetch operations against a real server.\n *\n * @example\n * const server = await startIntegrationServer();\n *\n * server.setResponse(\"/api/data\", {\n * status: 200,\n * body: JSON.stringify({ message: \"Hello\" }),\n * headers: { \"Content-Type\": \"application/json\" }\n * });\n *\n * // In your test\n * const response = await fetch(`${server.url}/api/data`);\n * const data = await response.json();\n *\n * // Check what requests were made\n * const requests = server.getRequests();\n * console.log(requests[0].path); // \"/api/data\"\n *\n * await server.close();\n */\nexport async function startIntegrationServer(\n port?: number\n): Promise<IntegrationServer> {\n const responses = new Map<string, MockServerResponse>();\n const requests: RecordedRequest[] = [];\n let defaultResponse: MockServerResponse = { status: 404, body: \"Not Found\" };\n\n const server: Server = createServer(\n async (req: IncomingMessage, res: ServerResponse) => {\n const path = req.url ?? \"/\";\n const method = req.method ?? \"GET\";\n\n // Read request body\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk as Buffer);\n }\n const body = chunks.length > 0 ? Buffer.concat(chunks).toString() : undefined;\n\n // Record the request\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(req.headers)) {\n if (typeof value === \"string\") {\n headers[key] = value;\n } else if (Array.isArray(value)) {\n headers[key] = value.join(\", \");\n }\n }\n requests.push({ method, path, headers, body });\n\n // Find and send response\n const mockResponse = responses.get(path) ?? defaultResponse;\n\n res.statusCode = mockResponse.status ?? 200;\n\n if (mockResponse.headers) {\n for (const [key, value] of Object.entries(mockResponse.headers)) {\n res.setHeader(key, value);\n }\n }\n\n res.end(mockResponse.body ?? \"\");\n }\n );\n\n // Find an available port\n const actualPort = await new Promise<number>((resolve, reject) => {\n server.listen(port ?? 0, () => {\n const address = server.address();\n if (address && typeof address === \"object\") {\n resolve(address.port);\n } else {\n reject(new Error(\"Failed to get server address\"));\n }\n });\n server.on(\"error\", reject);\n });\n\n return {\n url: `http://localhost:${actualPort}`,\n port: actualPort,\n\n async close() {\n return new Promise((resolve, reject) => {\n server.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n },\n\n setResponse(path: string, response: MockServerResponse) {\n responses.set(path, response);\n },\n\n setDefaultResponse(response: MockServerResponse) {\n defaultResponse = response;\n },\n\n getRequests() {\n return [...requests];\n },\n\n clearRequests() {\n requests.length = 0;\n },\n\n clearResponses() {\n responses.clear();\n defaultResponse = { status: 404, body: \"Not Found\" };\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAqF,IAArF;AAyDA,eAAsB,sBAAsB,CAC1C,MAC4B;AAAA,EAC5B,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,WAA8B,CAAC;AAAA,EACrC,IAAI,kBAAsC,EAAE,QAAQ,KAAK,MAAM,YAAY;AAAA,EAE3E,MAAM,SAAiB,8BACrB,OAAO,KAAsB,QAAwB;AAAA,IACnD,MAAM,OAAO,IAAI,OAAO;AAAA,IACxB,MAAM,SAAS,IAAI,UAAU;AAAA,IAG7B,MAAM,SAAmB,CAAC;AAAA,IAC1B,iBAAiB,SAAS,KAAK;AAAA,MAC7B,OAAO,KAAK,KAAe;AAAA,IAC7B;AAAA,IACA,MAAM,OAAO,OAAO,SAAS,IAAI,OAAO,OAAO,MAAM,EAAE,SAAS,IAAI;AAAA,IAGpE,MAAM,UAAkC,CAAC;AAAA,IACzC,YAAY,KAAK,UAAU,OAAO,QAAQ,IAAI,OAAO,GAAG;AAAA,MACtD,IAAI,OAAO,UAAU,UAAU;AAAA,QAC7B,QAAQ,OAAO;AAAA,MACjB,EAAO,SAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,QAC/B,QAAQ,OAAO,MAAM,KAAK,IAAI;AAAA,MAChC;AAAA,IACF;AAAA,IACA,SAAS,KAAK,EAAE,QAAQ,MAAM,SAAS,KAAK,CAAC;AAAA,IAG7C,MAAM,eAAe,UAAU,IAAI,IAAI,KAAK;AAAA,IAE5C,IAAI,aAAa,aAAa,UAAU;AAAA,IAExC,IAAI,aAAa,SAAS;AAAA,MACxB,YAAY,KAAK,UAAU,OAAO,QAAQ,aAAa,OAAO,GAAG;AAAA,QAC/D,IAAI,UAAU,KAAK,KAAK;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,aAAa,QAAQ,EAAE;AAAA,GAEnC;AAAA,EAGA,MAAM,aAAa,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAAA,IAChE,OAAO,OAAO,QAAQ,GAAG,MAAM;AAAA,MAC7B,MAAM,UAAU,OAAO,QAAQ;AAAA,MAC/B,IAAI,WAAW,OAAO,YAAY,UAAU;AAAA,QAC1C,QAAQ,QAAQ,IAAI;AAAA,MACtB,EAAO;AAAA,QACL,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAAA;AAAA,KAEnD;AAAA,IACD,OAAO,GAAG,SAAS,MAAM;AAAA,GAC1B;AAAA,EAED,OAAO;AAAA,IACL,KAAK,oBAAoB;AAAA,IACzB,MAAM;AAAA,SAEA,MAAK,GAAG;AAAA,MACZ,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,QACtC,OAAO,MAAM,CAAC,QAAQ;AAAA,UACpB,IAAI;AAAA,YAAK,OAAO,GAAG;AAAA,UACd;AAAA,oBAAQ;AAAA,SACd;AAAA,OACF;AAAA;AAAA,IAGH,WAAW,CAAC,MAAc,UAA8B;AAAA,MACtD,UAAU,IAAI,MAAM,QAAQ;AAAA;AAAA,IAG9B,kBAAkB,CAAC,UAA8B;AAAA,MAC/C,kBAAkB;AAAA;AAAA,IAGpB,WAAW,GAAG;AAAA,MACZ,OAAO,CAAC,GAAG,QAAQ;AAAA;AAAA,IAGrB,aAAa,GAAG;AAAA,MACd,SAAS,SAAS;AAAA;AAAA,IAGpB,cAAc,GAAG;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,kBAAkB,EAAE,QAAQ,KAAK,MAAM,YAAY;AAAA;AAAA,EAEvD;AAAA;",
8
- "debugId": "A81C39DF693539C664756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAqF,IAArF;AAyDA,eAAsB,sBAAsB,CAC1C,MAC4B;AAAA,EAC5B,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,WAA8B,CAAC;AAAA,EACrC,IAAI,kBAAsC,EAAE,QAAQ,KAAK,MAAM,YAAY;AAAA,EAE3E,MAAM,SAAiB,8BACrB,OAAO,KAAsB,QAAwB;AAAA,IACnD,MAAM,OAAO,IAAI,OAAO;AAAA,IACxB,MAAM,SAAS,IAAI,UAAU;AAAA,IAG7B,MAAM,SAAmB,CAAC;AAAA,IAC1B,iBAAiB,SAAS,KAAK;AAAA,MAC7B,OAAO,KAAK,KAAe;AAAA,IAC7B;AAAA,IACA,MAAM,OAAO,OAAO,SAAS,IAAI,OAAO,OAAO,MAAM,EAAE,SAAS,IAAI;AAAA,IAGpE,MAAM,UAAkC,CAAC;AAAA,IACzC,YAAY,KAAK,UAAU,OAAO,QAAQ,IAAI,OAAO,GAAG;AAAA,MACtD,IAAI,OAAO,UAAU,UAAU;AAAA,QAC7B,QAAQ,OAAO;AAAA,MACjB,EAAO,SAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,QAC/B,QAAQ,OAAO,MAAM,KAAK,IAAI;AAAA,MAChC;AAAA,IACF;AAAA,IACA,SAAS,KAAK,EAAE,QAAQ,MAAM,SAAS,KAAK,CAAC;AAAA,IAG7C,MAAM,eAAe,UAAU,IAAI,IAAI,KAAK;AAAA,IAE5C,IAAI,aAAa,aAAa,UAAU;AAAA,IAExC,IAAI,aAAa,SAAS;AAAA,MACxB,YAAY,KAAK,UAAU,OAAO,QAAQ,aAAa,OAAO,GAAG;AAAA,QAC/D,IAAI,UAAU,KAAK,KAAK;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,aAAa,QAAQ,EAAE;AAAA,GAEnC;AAAA,EAGA,MAAM,aAAa,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAAA,IAChE,OAAO,OAAO,QAAQ,GAAG,MAAM;AAAA,MAC7B,MAAM,UAAU,OAAO,QAAQ;AAAA,MAC/B,IAAI,WAAW,OAAO,YAAY,UAAU;AAAA,QAC1C,QAAQ,QAAQ,IAAI;AAAA,MACtB,EAAO;AAAA,QACL,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAAA;AAAA,KAEnD;AAAA,IACD,OAAO,GAAG,SAAS,MAAM;AAAA,GAC1B;AAAA,EAED,OAAO;AAAA,IACL,KAAK,oBAAoB;AAAA,IACzB,MAAM;AAAA,SAEA,MAAK,GAAG;AAAA,MACZ,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,QACtC,OAAO,MAAM,CAAC,QAAQ;AAAA,UACpB,IAAI;AAAA,YAAK,OAAO,GAAG;AAAA,UACd;AAAA,oBAAQ;AAAA,SACd;AAAA,OACF;AAAA;AAAA,IAGH,WAAW,CAAC,MAAc,UAA8B;AAAA,MACtD,UAAU,IAAI,MAAM,QAAQ;AAAA;AAAA,IAG9B,kBAAkB,CAAC,UAA8B;AAAA,MAC/C,kBAAkB;AAAA;AAAA,IAGpB,WAAW,GAAG;AAAA,MACZ,OAAO,CAAC,GAAG,QAAQ;AAAA;AAAA,IAGrB,aAAa,GAAG;AAAA,MACd,SAAS,SAAS;AAAA;AAAA,IAGpB,cAAc,GAAG;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,kBAAkB,EAAE,QAAQ,KAAK,MAAM,YAAY;AAAA;AAAA,EAEvD;AAAA;",
8
+ "debugId": "D2F4C84E5C9FABDB64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate-test-utils",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "type": "module"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ricsam/isolate-test-utils",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "main": "./dist/cjs/index.cjs",
5
5
  "types": "./dist/types/index.d.ts",
6
6
  "exports": {
@@ -25,9 +25,7 @@
25
25
  "test": "node --test --experimental-strip-types 'src/**/*.test.ts'",
26
26
  "typecheck": "tsc --noEmit"
27
27
  },
28
- "dependencies": {
29
- "isolated-vm": "^6"
30
- },
28
+ "dependencies": {},
31
29
  "peerDependencies": {
32
30
  "isolated-vm": "^6",
33
31
  "@ricsam/isolate-console": "*",