@ricsam/isolate 0.1.10 → 0.1.12

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 (140) hide show
  1. package/README.md +257 -18
  2. package/dist/cjs/bridge/diagnostics.cjs +37 -2
  3. package/dist/cjs/bridge/diagnostics.cjs.map +3 -3
  4. package/dist/cjs/bridge/runtime-bindings.cjs +230 -51
  5. package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
  6. package/dist/cjs/bridge/sandbox-isolate.cjs +464 -0
  7. package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
  8. package/dist/cjs/host/create-isolate-host.cjs +130 -25
  9. package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
  10. package/dist/cjs/host/nested-host-controller.cjs +369 -0
  11. package/dist/cjs/host/nested-host-controller.cjs.map +10 -0
  12. package/dist/cjs/index.cjs.map +1 -1
  13. package/dist/cjs/internal/browser-source.cjs +102 -0
  14. package/dist/cjs/internal/browser-source.cjs.map +10 -0
  15. package/dist/cjs/internal/client/connection.cjs +163 -172
  16. package/dist/cjs/internal/client/connection.cjs.map +3 -3
  17. package/dist/cjs/internal/daemon/callback-fs-handler.cjs +3 -3
  18. package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +3 -3
  19. package/dist/cjs/internal/daemon/connection.cjs +156 -13
  20. package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
  21. package/dist/cjs/internal/playwright/client.cjs +4 -2
  22. package/dist/cjs/internal/playwright/client.cjs.map +3 -3
  23. package/dist/cjs/internal/playwright/handler.cjs +298 -25
  24. package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
  25. package/dist/cjs/internal/playwright/index.cjs +54 -8
  26. package/dist/cjs/internal/playwright/index.cjs.map +3 -3
  27. package/dist/cjs/internal/playwright/types.cjs +3 -1
  28. package/dist/cjs/internal/playwright/types.cjs.map +3 -3
  29. package/dist/cjs/internal/protocol/codec.cjs +16 -5
  30. package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
  31. package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
  32. package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
  33. package/dist/cjs/internal/protocol/types.cjs +2 -1
  34. package/dist/cjs/internal/protocol/types.cjs.map +3 -3
  35. package/dist/cjs/internal/runtime/index.cjs +377 -22
  36. package/dist/cjs/internal/runtime/index.cjs.map +3 -3
  37. package/dist/cjs/internal/typecheck/index.cjs +2 -1
  38. package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
  39. package/dist/cjs/internal/typecheck/isolate-types.cjs +218 -13
  40. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
  41. package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
  42. package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
  43. package/dist/cjs/package.json +1 -1
  44. package/dist/cjs/playwright.cjs +76 -0
  45. package/dist/cjs/playwright.cjs.map +10 -0
  46. package/dist/cjs/runtime/namespaced-runtime.cjs +181 -0
  47. package/dist/cjs/runtime/namespaced-runtime.cjs.map +10 -0
  48. package/dist/cjs/runtime/script-runtime.cjs +14 -12
  49. package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
  50. package/dist/cjs/runtime/test-runtime.cjs +113 -0
  51. package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
  52. package/dist/cjs/server/app-server.cjs +16 -9
  53. package/dist/cjs/server/app-server.cjs.map +3 -3
  54. package/dist/cjs/typecheck/index.cjs +2 -1
  55. package/dist/cjs/typecheck/index.cjs.map +3 -3
  56. package/dist/mjs/bridge/diagnostics.mjs +37 -2
  57. package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
  58. package/dist/mjs/bridge/runtime-bindings.mjs +233 -51
  59. package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
  60. package/dist/mjs/bridge/sandbox-isolate.mjs +424 -0
  61. package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
  62. package/dist/mjs/host/create-isolate-host.mjs +132 -25
  63. package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
  64. package/dist/mjs/host/nested-host-controller.mjs +333 -0
  65. package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
  66. package/dist/mjs/index.mjs.map +1 -1
  67. package/dist/mjs/internal/browser-source.mjs +62 -0
  68. package/dist/mjs/internal/browser-source.mjs.map +10 -0
  69. package/dist/mjs/internal/client/connection.mjs +165 -173
  70. package/dist/mjs/internal/client/connection.mjs.map +3 -3
  71. package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
  72. package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
  73. package/dist/mjs/internal/daemon/connection.mjs +156 -13
  74. package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
  75. package/dist/mjs/internal/playwright/client.mjs +7 -3
  76. package/dist/mjs/internal/playwright/client.mjs.map +3 -3
  77. package/dist/mjs/internal/playwright/handler.mjs +300 -26
  78. package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
  79. package/dist/mjs/internal/playwright/index.mjs +59 -9
  80. package/dist/mjs/internal/playwright/index.mjs.map +3 -3
  81. package/dist/mjs/internal/playwright/types.mjs +3 -1
  82. package/dist/mjs/internal/playwright/types.mjs.map +3 -3
  83. package/dist/mjs/internal/protocol/codec.mjs +16 -5
  84. package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
  85. package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
  86. package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
  87. package/dist/mjs/internal/protocol/types.mjs +2 -1
  88. package/dist/mjs/internal/protocol/types.mjs.map +3 -3
  89. package/dist/mjs/internal/runtime/index.mjs +377 -22
  90. package/dist/mjs/internal/runtime/index.mjs.map +3 -3
  91. package/dist/mjs/internal/typecheck/index.mjs +3 -1
  92. package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
  93. package/dist/mjs/internal/typecheck/isolate-types.mjs +218 -13
  94. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
  95. package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
  96. package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
  97. package/dist/mjs/package.json +1 -1
  98. package/dist/mjs/playwright.mjs +47 -0
  99. package/dist/mjs/playwright.mjs.map +10 -0
  100. package/dist/mjs/runtime/namespaced-runtime.mjs +143 -0
  101. package/dist/mjs/runtime/namespaced-runtime.mjs.map +10 -0
  102. package/dist/mjs/runtime/script-runtime.mjs +16 -12
  103. package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
  104. package/dist/mjs/runtime/test-runtime.mjs +78 -0
  105. package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
  106. package/dist/mjs/server/app-server.mjs +23 -11
  107. package/dist/mjs/server/app-server.mjs.map +3 -3
  108. package/dist/mjs/typecheck/index.mjs +2 -1
  109. package/dist/mjs/typecheck/index.mjs.map +3 -3
  110. package/dist/types/bridge/diagnostics.d.ts +6 -1
  111. package/dist/types/bridge/runtime-bindings.d.ts +5 -1
  112. package/dist/types/bridge/sandbox-isolate.d.ts +21 -0
  113. package/dist/types/host/nested-host-controller.d.ts +15 -0
  114. package/dist/types/index.d.ts +1 -1
  115. package/dist/types/internal/browser-source.d.ts +10 -0
  116. package/dist/types/internal/client/types.d.ts +9 -0
  117. package/dist/types/internal/daemon/types.d.ts +0 -2
  118. package/dist/types/internal/playwright/client.d.ts +2 -2
  119. package/dist/types/internal/playwright/handler.d.ts +27 -4
  120. package/dist/types/internal/playwright/index.d.ts +2 -2
  121. package/dist/types/internal/playwright/types.d.ts +33 -1
  122. package/dist/types/internal/protocol/codec.d.ts +12 -2
  123. package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
  124. package/dist/types/internal/protocol/types.d.ts +33 -2
  125. package/dist/types/internal/runtime/index.d.ts +5 -0
  126. package/dist/types/internal/typecheck/index.d.ts +1 -1
  127. package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
  128. package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
  129. package/dist/types/playwright.d.ts +26 -0
  130. package/dist/types/runtime/namespaced-runtime.d.ts +11 -0
  131. package/dist/types/runtime/script-runtime.d.ts +2 -1
  132. package/dist/types/runtime/test-runtime.d.ts +4 -0
  133. package/dist/types/server/app-server.d.ts +2 -1
  134. package/dist/types/types.d.ts +75 -33
  135. package/package.json +8 -3
  136. package/dist/cjs/browser/browser-runtime.cjs +0 -157
  137. package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
  138. package/dist/mjs/browser/browser-runtime.mjs +0 -93
  139. package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
  140. package/dist/types/browser/browser-runtime.d.ts +0 -3
@@ -20,7 +20,8 @@ import {
20
20
  } from "../protocol/index.mjs";
21
21
  import {
22
22
  defaultPlaywrightHandler,
23
- getDefaultPlaywrightHandlerMetadata
23
+ getDefaultPlaywrightHandlerMetadata,
24
+ getPlaywrightHandlerMetadata
24
25
  } from "../playwright/client.mjs";
25
26
  var isolateWsCallbacks = new Map;
26
27
  var isolateClientWebSockets = new Map;
@@ -44,8 +45,13 @@ async function connect(options = {}) {
44
45
  callbackStreamReaders: new Map,
45
46
  activeCallbackInvocations: new Map,
46
47
  callbackAbortControllers: new Map,
48
+ clientIteratorSessions: new Map,
49
+ returnedPromiseRegistry: new Map,
50
+ returnedIteratorRegistry: new Map,
47
51
  closing: false,
48
- namespacedRuntimes: new Map
52
+ namespacedRuntimes: new Map,
53
+ nextClientIteratorId: 1,
54
+ nextReturnedRefId: 1
49
55
  };
50
56
  function setupSocket(sock) {
51
57
  const parser = createFrameParser();
@@ -89,6 +95,9 @@ async function connect(options = {}) {
89
95
  }
90
96
  state.callbackAbortControllers.clear();
91
97
  state.activeCallbackInvocations.clear();
98
+ state.clientIteratorSessions.clear();
99
+ state.returnedPromiseRegistry.clear();
100
+ state.returnedIteratorRegistry.clear();
92
101
  if (!state.closing && state.namespacedRuntimes.size > 0) {
93
102
  state.reconnecting = reconnect(state, options).catch(() => {
94
103
  state.namespacedRuntimes.clear();
@@ -197,6 +206,17 @@ async function connect(options = {}) {
197
206
  id,
198
207
  createRuntime: (runtimeOptions) => createRuntime(state, runtimeOptions, id)
199
208
  }),
209
+ disposeNamespace: async (id, options2) => {
210
+ state.namespacedRuntimes.delete(id);
211
+ const requestId = state.nextRequestId++;
212
+ const request = {
213
+ type: MessageType.DISPOSE_NAMESPACE,
214
+ requestId,
215
+ namespaceId: id,
216
+ reason: typeof options2?.reason === "string" && options2.reason.length > 0 ? options2.reason : undefined
217
+ };
218
+ await sendRequest(state, request);
219
+ },
200
220
  close: async () => {
201
221
  state.closing = true;
202
222
  state.connected = false;
@@ -609,145 +629,57 @@ async function createRuntime(state, options = {}, namespaceId) {
609
629
  callbacks.custom = registerCustomFunctions(state, options.customFunctions);
610
630
  }
611
631
  let playwrightHandler;
612
- const browserConsoleLogs = [];
613
- const pageErrors = [];
614
- const networkRequests = [];
615
- const networkResponses = [];
616
- const requestFailures = [];
617
- const pageListenerCleanups = [];
632
+ let getCollectedData = () => ({
633
+ browserConsoleLogs: [],
634
+ pageErrors: [],
635
+ networkRequests: [],
636
+ networkResponses: [],
637
+ requestFailures: []
638
+ });
639
+ let getTrackedResources = () => ({
640
+ contexts: [],
641
+ pages: []
642
+ });
643
+ let clearCollectedData = () => {};
644
+ const playwrightListenerCleanups = [];
618
645
  if (normalizedPlaywrightOptions) {
619
646
  playwrightHandler = normalizedPlaywrightOptions.handler;
620
647
  if (!playwrightHandler) {
621
648
  throw new Error("playwright.handler is required when using playwright options");
622
649
  }
623
- const page = getDefaultPlaywrightHandlerMetadata(playwrightHandler)?.page;
650
+ const handlerMetadata = getPlaywrightHandlerMetadata(playwrightHandler);
651
+ if (handlerMetadata) {
652
+ getCollectedData = () => handlerMetadata.collector.getCollectedData();
653
+ getTrackedResources = () => handlerMetadata.collector.getTrackedResources();
654
+ clearCollectedData = () => {
655
+ handlerMetadata.collector.clearCollectedData();
656
+ };
657
+ playwrightListenerCleanups.push(handlerMetadata.collector.onEvent((event) => {
658
+ if (normalizedPlaywrightOptions.onEvent) {
659
+ normalizedPlaywrightOptions.onEvent(event);
660
+ }
661
+ if (event.type === "browserConsoleLog") {
662
+ if (normalizedPlaywrightOptions.console && options.console?.onEntry) {
663
+ options.console.onEntry({
664
+ type: "browserOutput",
665
+ level: event.level,
666
+ stdout: event.stdout,
667
+ location: event.location,
668
+ timestamp: event.timestamp
669
+ });
670
+ } else if (normalizedPlaywrightOptions.console) {
671
+ const prefix = event.level === "error" ? "[browser:error]" : "[browser]";
672
+ console.log(prefix, event.stdout);
673
+ }
674
+ }
675
+ }));
676
+ }
624
677
  const handlerCallbackId = state.nextCallbackId++;
625
678
  state.callbacks.set(handlerCallbackId, async (opJson) => {
626
679
  const op = JSON.parse(opJson);
627
680
  const result2 = await playwrightHandler(op);
628
681
  return JSON.stringify(result2);
629
682
  });
630
- if (page) {
631
- const requestIds = new WeakMap;
632
- let nextRequestId = 1;
633
- const getRequestId = (request2) => {
634
- let requestId2 = requestIds.get(request2);
635
- if (!requestId2) {
636
- requestId2 = `req_${nextRequestId++}`;
637
- requestIds.set(request2, requestId2);
638
- }
639
- return requestId2;
640
- };
641
- const toLocation = (location) => {
642
- if (!location || !location.url && location.lineNumber == null && location.columnNumber == null) {
643
- return;
644
- }
645
- return {
646
- url: location.url || undefined,
647
- lineNumber: location.lineNumber != null ? location.lineNumber + 1 : undefined,
648
- columnNumber: location.columnNumber != null ? location.columnNumber + 1 : undefined
649
- };
650
- };
651
- const onConsole = (msg) => {
652
- const entry = {
653
- level: msg.type(),
654
- stdout: msg.text(),
655
- location: toLocation(msg.location()),
656
- timestamp: Date.now()
657
- };
658
- browserConsoleLogs.push(entry);
659
- if (normalizedPlaywrightOptions.onEvent) {
660
- normalizedPlaywrightOptions.onEvent({
661
- type: "browserConsoleLog",
662
- ...entry
663
- });
664
- }
665
- if (normalizedPlaywrightOptions.console && options.console?.onEntry) {
666
- options.console.onEntry({
667
- type: "browserOutput",
668
- ...entry
669
- });
670
- } else if (normalizedPlaywrightOptions.console) {
671
- const prefix = entry.level === "error" ? "[browser:error]" : "[browser]";
672
- console.log(prefix, entry.stdout);
673
- }
674
- };
675
- const onRequest = (request2) => {
676
- const info = {
677
- requestId: getRequestId(request2),
678
- url: request2.url(),
679
- method: request2.method(),
680
- headers: request2.headers(),
681
- postData: request2.postData() ?? undefined,
682
- resourceType: request2.resourceType(),
683
- timestamp: Date.now()
684
- };
685
- networkRequests.push(info);
686
- if (normalizedPlaywrightOptions.onEvent) {
687
- normalizedPlaywrightOptions.onEvent({
688
- type: "networkRequest",
689
- ...info
690
- });
691
- }
692
- };
693
- const onResponse = (response) => {
694
- const request2 = response.request();
695
- const info = {
696
- requestId: getRequestId(request2),
697
- url: response.url(),
698
- status: response.status(),
699
- statusText: response.statusText(),
700
- headers: response.headers(),
701
- resourceType: request2.resourceType(),
702
- timestamp: Date.now()
703
- };
704
- networkResponses.push(info);
705
- if (normalizedPlaywrightOptions.onEvent) {
706
- normalizedPlaywrightOptions.onEvent({
707
- type: "networkResponse",
708
- ...info
709
- });
710
- }
711
- };
712
- const onRequestFailed = (request2) => {
713
- const info = {
714
- requestId: getRequestId(request2),
715
- url: request2.url(),
716
- method: request2.method(),
717
- failureText: request2.failure()?.errorText || "request failed",
718
- resourceType: request2.resourceType(),
719
- timestamp: Date.now()
720
- };
721
- requestFailures.push(info);
722
- if (normalizedPlaywrightOptions.onEvent) {
723
- normalizedPlaywrightOptions.onEvent({
724
- type: "requestFailure",
725
- ...info
726
- });
727
- }
728
- };
729
- const onPageError = (error) => {
730
- const entry = {
731
- name: error.name,
732
- message: error.message,
733
- stack: error.stack,
734
- timestamp: Date.now()
735
- };
736
- pageErrors.push(entry);
737
- if (normalizedPlaywrightOptions.onEvent) {
738
- normalizedPlaywrightOptions.onEvent({
739
- type: "pageError",
740
- ...entry
741
- });
742
- }
743
- };
744
- page.on("console", onConsole);
745
- page.on("request", onRequest);
746
- page.on("response", onResponse);
747
- page.on("requestfailed", onRequestFailed);
748
- page.on("pageerror", onPageError);
749
- pageListenerCleanups.push(() => page.removeListener("console", onConsole), () => page.removeListener("request", onRequest), () => page.removeListener("response", onResponse), () => page.removeListener("requestfailed", onRequestFailed), () => page.removeListener("pageerror", onPageError));
750
- }
751
683
  callbacks.playwright = {
752
684
  handlerCallbackId,
753
685
  console: normalizedPlaywrightOptions.console && !options.console?.onEntry
@@ -778,7 +710,10 @@ async function createRuntime(state, options = {}, namespaceId) {
778
710
  testEnvironmentOption = true;
779
711
  }
780
712
  }
781
- const playwrightOption = normalizedPlaywrightOptions?.timeout !== undefined ? { timeout: normalizedPlaywrightOptions.timeout } : undefined;
713
+ const playwrightOption = normalizedPlaywrightOptions ? {
714
+ timeout: normalizedPlaywrightOptions.timeout,
715
+ hasDefaultPage: normalizedPlaywrightOptions.hasDefaultPage
716
+ } : undefined;
782
717
  const requestId = state.nextRequestId++;
783
718
  const request = {
784
719
  type: MessageType.CREATE_RUNTIME,
@@ -1089,23 +1024,19 @@ async function createRuntime(state, options = {}, namespaceId) {
1089
1024
  if (!playwrightEnabled) {
1090
1025
  throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
1091
1026
  }
1092
- return {
1093
- browserConsoleLogs: [...browserConsoleLogs],
1094
- pageErrors: [...pageErrors],
1095
- networkRequests: [...networkRequests],
1096
- networkResponses: [...networkResponses],
1097
- requestFailures: [...requestFailures]
1098
- };
1027
+ return getCollectedData();
1028
+ },
1029
+ getTrackedResources() {
1030
+ if (!playwrightEnabled) {
1031
+ throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
1032
+ }
1033
+ return getTrackedResources();
1099
1034
  },
1100
1035
  clearCollectedData() {
1101
1036
  if (!playwrightEnabled) {
1102
1037
  throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
1103
1038
  }
1104
- browserConsoleLogs.length = 0;
1105
- pageErrors.length = 0;
1106
- networkRequests.length = 0;
1107
- networkResponses.length = 0;
1108
- requestFailures.length = 0;
1039
+ clearCollectedData();
1109
1040
  }
1110
1041
  };
1111
1042
  return {
@@ -1160,7 +1091,7 @@ async function createRuntime(state, options = {}, namespaceId) {
1160
1091
  });
1161
1092
  },
1162
1093
  dispose: async (options2) => {
1163
- for (const cleanup of pageListenerCleanups) {
1094
+ for (const cleanup of playwrightListenerCleanups) {
1164
1095
  cleanup();
1165
1096
  }
1166
1097
  isolateWsCallbacks.delete(isolateId);
@@ -1404,10 +1335,6 @@ function registerModuleLoaderCallback(state, callback) {
1404
1335
  });
1405
1336
  return { callbackId, name: "moduleLoader", type: "async" };
1406
1337
  }
1407
- var clientIteratorSessions = new Map;
1408
- var nextClientIteratorId = 1;
1409
- var returnedPromiseRegistry = new Map;
1410
- var returnedIteratorRegistry = new Map;
1411
1338
  function registerCustomFunctions(state, customFunctions) {
1412
1339
  const registrations = {};
1413
1340
  const addCallbackIdsToRefs = (value) => {
@@ -1418,12 +1345,12 @@ function registerCustomFunctions(state, customFunctions) {
1418
1345
  const resolveCallbackId = state.nextCallbackId++;
1419
1346
  state.callbacks.set(resolveCallbackId, async (...args) => {
1420
1347
  const promiseId = args[0];
1421
- const promise = returnedPromiseRegistry.get(promiseId);
1348
+ const promise = state.returnedPromiseRegistry.get(promiseId);
1422
1349
  if (!promise) {
1423
1350
  throw new Error(`Promise ${promiseId} not found`);
1424
1351
  }
1425
1352
  const promiseResult = await promise;
1426
- returnedPromiseRegistry.delete(promiseId);
1353
+ state.returnedPromiseRegistry.delete(promiseId);
1427
1354
  const marshalledResult = await marshalValue(promiseResult, marshalCtx);
1428
1355
  return addCallbackIdsToRefs(marshalledResult);
1429
1356
  });
@@ -1436,13 +1363,13 @@ function registerCustomFunctions(state, customFunctions) {
1436
1363
  const nextCallbackId = state.nextCallbackId++;
1437
1364
  state.callbacks.set(nextCallbackId, async (...args) => {
1438
1365
  const iteratorId = args[0];
1439
- const iterator = returnedIteratorRegistry.get(iteratorId);
1366
+ const iterator = state.returnedIteratorRegistry.get(iteratorId);
1440
1367
  if (!iterator) {
1441
1368
  throw new Error(`Iterator ${iteratorId} not found`);
1442
1369
  }
1443
1370
  const iterResult = await iterator.next();
1444
1371
  if (iterResult.done) {
1445
- returnedIteratorRegistry.delete(iteratorId);
1372
+ state.returnedIteratorRegistry.delete(iteratorId);
1446
1373
  }
1447
1374
  const marshalledValue = await marshalValue(iterResult.value, marshalCtx);
1448
1375
  return {
@@ -1454,8 +1381,8 @@ function registerCustomFunctions(state, customFunctions) {
1454
1381
  state.callbacks.set(returnCallbackId, async (...args) => {
1455
1382
  const iteratorId = args[0];
1456
1383
  const returnValue = args[1];
1457
- const iterator = returnedIteratorRegistry.get(iteratorId);
1458
- returnedIteratorRegistry.delete(iteratorId);
1384
+ const iterator = state.returnedIteratorRegistry.get(iteratorId);
1385
+ state.returnedIteratorRegistry.delete(iteratorId);
1459
1386
  if (!iterator || !iterator.return) {
1460
1387
  return { done: true, value: undefined };
1461
1388
  }
@@ -1470,7 +1397,7 @@ function registerCustomFunctions(state, customFunctions) {
1470
1397
  state.callbacks.set(throwCallbackId, async (...args) => {
1471
1398
  const iteratorId = args[0];
1472
1399
  const errorValue = args[1];
1473
- const iterator = returnedIteratorRegistry.get(iteratorId);
1400
+ const iterator = state.returnedIteratorRegistry.get(iteratorId);
1474
1401
  if (!iterator) {
1475
1402
  throw new Error(`Iterator ${iteratorId} not found`);
1476
1403
  }
@@ -1481,7 +1408,7 @@ function registerCustomFunctions(state, customFunctions) {
1481
1408
  const thrownError = Object.assign(new Error(errorValue?.message ?? "Iterator throw()"), { name: errorValue?.name ?? "Error", stack: errorValue?.stack });
1482
1409
  const iterResult = await iterator.throw(thrownError);
1483
1410
  if (iterResult.done) {
1484
- returnedIteratorRegistry.delete(iteratorId);
1411
+ state.returnedIteratorRegistry.delete(iteratorId);
1485
1412
  }
1486
1413
  const marshalledValue = await marshalValue(iterResult.value, marshalCtx);
1487
1414
  return {
@@ -1489,7 +1416,7 @@ function registerCustomFunctions(state, customFunctions) {
1489
1416
  value: addCallbackIdsToRefs(marshalledValue)
1490
1417
  };
1491
1418
  } catch (error) {
1492
- returnedIteratorRegistry.delete(iteratorId);
1419
+ state.returnedIteratorRegistry.delete(iteratorId);
1493
1420
  throw error;
1494
1421
  }
1495
1422
  });
@@ -1520,13 +1447,13 @@ function registerCustomFunctions(state, customFunctions) {
1520
1447
  return returnedCallbackId;
1521
1448
  },
1522
1449
  registerPromise: (promise) => {
1523
- const promiseId = state.nextCallbackId++;
1524
- returnedPromiseRegistry.set(promiseId, promise);
1450
+ const promiseId = state.nextReturnedRefId++;
1451
+ state.returnedPromiseRegistry.set(promiseId, promise);
1525
1452
  return promiseId;
1526
1453
  },
1527
1454
  registerIterator: (iterator) => {
1528
- const iteratorId = state.nextCallbackId++;
1529
- returnedIteratorRegistry.set(iteratorId, iterator);
1455
+ const iteratorId = state.nextReturnedRefId++;
1456
+ state.returnedIteratorRegistry.set(iteratorId, iterator);
1530
1457
  return iteratorId;
1531
1458
  }
1532
1459
  };
@@ -1538,6 +1465,71 @@ function registerCustomFunctions(state, customFunctions) {
1538
1465
  return unmarshalValue(result, unmarshalCtx);
1539
1466
  };
1540
1467
  };
1468
+ unmarshalCtx.createPromiseProxy = (promiseId, ref) => {
1469
+ const resolveCallbackId = ref?.__resolveCallbackId;
1470
+ if (typeof resolveCallbackId !== "number") {
1471
+ throw new Error(`Promise ${promiseId} is missing a resolve callback`);
1472
+ }
1473
+ return (async () => {
1474
+ const result = await invokeDaemonCallback(state, resolveCallbackId, [promiseId]);
1475
+ return unmarshalValue(result, unmarshalCtx);
1476
+ })();
1477
+ };
1478
+ unmarshalCtx.createIteratorProxy = (iteratorId, ref) => {
1479
+ const nextCallbackId = ref?.__nextCallbackId;
1480
+ const returnCallbackId = ref?.__returnCallbackId;
1481
+ const throwCallbackId = ref?.__throwCallbackId;
1482
+ if (typeof nextCallbackId !== "number") {
1483
+ throw new Error(`Iterator ${iteratorId} is missing a next callback`);
1484
+ }
1485
+ const invokeIteratorCallback = async (callbackId, args, label) => {
1486
+ const result = await invokeDaemonCallback(state, callbackId, args);
1487
+ if (!result || typeof result !== "object" || !("done" in result)) {
1488
+ throw new Error(`${label} returned an invalid iterator result`);
1489
+ }
1490
+ return result;
1491
+ };
1492
+ return {
1493
+ [Symbol.asyncIterator]() {
1494
+ return this;
1495
+ },
1496
+ async next() {
1497
+ const result = await invokeIteratorCallback(nextCallbackId, [iteratorId], "Iterator next()");
1498
+ return {
1499
+ done: Boolean(result.done),
1500
+ value: unmarshalValue(result.value, unmarshalCtx)
1501
+ };
1502
+ },
1503
+ async return(value) {
1504
+ if (typeof returnCallbackId !== "number") {
1505
+ return { done: true, value };
1506
+ }
1507
+ const result = await invokeIteratorCallback(returnCallbackId, [iteratorId, value], "Iterator return()");
1508
+ return {
1509
+ done: result.done ?? true,
1510
+ value: unmarshalValue(result.value, unmarshalCtx)
1511
+ };
1512
+ },
1513
+ async throw(errorValue) {
1514
+ if (typeof throwCallbackId !== "number") {
1515
+ throw errorValue;
1516
+ }
1517
+ const serializedError = errorValue && typeof errorValue === "object" ? {
1518
+ message: errorValue.message,
1519
+ name: errorValue.name,
1520
+ stack: errorValue.stack
1521
+ } : {
1522
+ message: String(errorValue ?? "Iterator throw()"),
1523
+ name: "Error"
1524
+ };
1525
+ const result = await invokeIteratorCallback(throwCallbackId, [iteratorId, serializedError], "Iterator throw()");
1526
+ return {
1527
+ done: Boolean(result.done),
1528
+ value: unmarshalValue(result.value, unmarshalCtx)
1529
+ };
1530
+ }
1531
+ };
1532
+ };
1541
1533
  for (const [name, def] of Object.entries(customFunctions)) {
1542
1534
  if (def.type === "asyncIterator") {
1543
1535
  const startCallbackId = state.nextCallbackId++;
@@ -1545,8 +1537,8 @@ function registerCustomFunctions(state, customFunctions) {
1545
1537
  try {
1546
1538
  const fn = def.fn;
1547
1539
  const iterator = fn(...unmarshalValue(args, unmarshalCtx));
1548
- const iteratorId = nextClientIteratorId++;
1549
- clientIteratorSessions.set(iteratorId, { iterator });
1540
+ const iteratorId = state.nextClientIteratorId++;
1541
+ state.clientIteratorSessions.set(iteratorId, { iterator });
1550
1542
  return { iteratorId };
1551
1543
  } catch (error) {
1552
1544
  throw error;
@@ -1554,39 +1546,39 @@ function registerCustomFunctions(state, customFunctions) {
1554
1546
  });
1555
1547
  const nextCallbackId = state.nextCallbackId++;
1556
1548
  state.callbacks.set(nextCallbackId, async (iteratorId) => {
1557
- const session = clientIteratorSessions.get(iteratorId);
1549
+ const session = state.clientIteratorSessions.get(iteratorId);
1558
1550
  if (!session) {
1559
1551
  throw new Error(`Iterator session ${iteratorId} not found`);
1560
1552
  }
1561
1553
  try {
1562
1554
  const result = await session.iterator.next();
1563
1555
  if (result.done) {
1564
- clientIteratorSessions.delete(iteratorId);
1556
+ state.clientIteratorSessions.delete(iteratorId);
1565
1557
  }
1566
1558
  return { done: result.done, value: await marshalValue(result.value) };
1567
1559
  } catch (error) {
1568
- clientIteratorSessions.delete(iteratorId);
1560
+ state.clientIteratorSessions.delete(iteratorId);
1569
1561
  throw error;
1570
1562
  }
1571
1563
  });
1572
1564
  const returnCallbackId = state.nextCallbackId++;
1573
1565
  state.callbacks.set(returnCallbackId, async (iteratorId, value) => {
1574
- const session = clientIteratorSessions.get(iteratorId);
1566
+ const session = state.clientIteratorSessions.get(iteratorId);
1575
1567
  if (!session) {
1576
1568
  return { done: true, value: await marshalValue(undefined) };
1577
1569
  }
1578
1570
  try {
1579
1571
  const result = await session.iterator.return?.(value);
1580
- clientIteratorSessions.delete(iteratorId);
1572
+ state.clientIteratorSessions.delete(iteratorId);
1581
1573
  return { done: true, value: await marshalValue(result?.value) };
1582
1574
  } catch (error) {
1583
- clientIteratorSessions.delete(iteratorId);
1575
+ state.clientIteratorSessions.delete(iteratorId);
1584
1576
  throw error;
1585
1577
  }
1586
1578
  });
1587
1579
  const throwCallbackId = state.nextCallbackId++;
1588
1580
  state.callbacks.set(throwCallbackId, async (iteratorId, errorData) => {
1589
- const session = clientIteratorSessions.get(iteratorId);
1581
+ const session = state.clientIteratorSessions.get(iteratorId);
1590
1582
  if (!session) {
1591
1583
  throw new Error(`Iterator session ${iteratorId} not found`);
1592
1584
  }
@@ -1594,10 +1586,10 @@ function registerCustomFunctions(state, customFunctions) {
1594
1586
  const errInfo = errorData;
1595
1587
  const error = Object.assign(new Error(errInfo.message), { name: errInfo.name });
1596
1588
  const result = await session.iterator.throw?.(error);
1597
- clientIteratorSessions.delete(iteratorId);
1589
+ state.clientIteratorSessions.delete(iteratorId);
1598
1590
  return { done: result?.done ?? true, value: await marshalValue(result?.value) };
1599
1591
  } catch (error) {
1600
- clientIteratorSessions.delete(iteratorId);
1592
+ state.clientIteratorSessions.delete(iteratorId);
1601
1593
  throw error;
1602
1594
  }
1603
1595
  });
@@ -1922,4 +1914,4 @@ export {
1922
1914
  connect
1923
1915
  };
1924
1916
 
1925
- //# debugId=2E442D60377D54C564756E2164756E21
1917
+ //# debugId=C25497E94950531064756E2164756E21