@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
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "type": "module"
5
5
  }
@@ -0,0 +1,47 @@
1
+ // src/playwright.ts
2
+ import {
3
+ createPlaywrightFactoryHandler,
4
+ getPlaywrightHandlerMetadata
5
+ } from "./internal/playwright/client.mjs";
6
+ import {
7
+ DEFAULT_PLAYWRIGHT_HANDLER_META,
8
+ PLAYWRIGHT_HANDLER_META
9
+ } from "./internal/playwright/types.mjs";
10
+ import {
11
+ createPlaywrightHandler,
12
+ defaultPlaywrightHandler,
13
+ getDefaultPlaywrightHandlerMetadata,
14
+ getPlaywrightHandlerMetadata as getPlaywrightHandlerMetadata2
15
+ } from "./internal/playwright/client.mjs";
16
+ function createPlaywrightSessionHandler(options = {}) {
17
+ const handler = createPlaywrightFactoryHandler({
18
+ timeout: options.timeout,
19
+ createContext: options.createContext,
20
+ createPage: options.createPage,
21
+ readFile: options.readFile,
22
+ writeFile: options.writeFile,
23
+ evaluatePredicate: options.evaluatePredicate
24
+ });
25
+ const metadata = getPlaywrightHandlerMetadata(handler);
26
+ if (!metadata?.collector) {
27
+ throw new Error("Playwright session handler metadata is unavailable for the generated handler.");
28
+ }
29
+ return {
30
+ handler,
31
+ getCollectedData: () => metadata.collector.getCollectedData(),
32
+ getTrackedResources: () => metadata.collector.getTrackedResources(),
33
+ clearCollectedData: () => metadata.collector.clearCollectedData(),
34
+ onEvent: (callback) => metadata.collector.onEvent(callback)
35
+ };
36
+ }
37
+ export {
38
+ getPlaywrightHandlerMetadata2 as getPlaywrightHandlerMetadata,
39
+ getDefaultPlaywrightHandlerMetadata,
40
+ defaultPlaywrightHandler,
41
+ createPlaywrightSessionHandler,
42
+ createPlaywrightHandler,
43
+ PLAYWRIGHT_HANDLER_META,
44
+ DEFAULT_PLAYWRIGHT_HANDLER_META
45
+ };
46
+
47
+ //# debugId=33EE7EC7A3131B1264756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/playwright.ts"],
4
+ "sourcesContent": [
5
+ "import {\n createPlaywrightFactoryHandler,\n getPlaywrightHandlerMetadata,\n type PlaywrightCallback,\n} from \"./internal/playwright/client.mjs\";\nimport type {\n CollectedData,\n PlaywrightEvent,\n PlaywrightFileData,\n PlaywrightOperation,\n PlaywrightResult,\n} from \"./internal/protocol/index.mjs\";\n\nexport type PlaywrightSessionHandlerCallback = PlaywrightCallback;\n\nexport interface CreatePlaywrightSessionHandlerOptions<\n TContext = unknown,\n TPage = unknown,\n TContextOptions = unknown,\n> {\n timeout?: number;\n createContext?: (\n options?: TContextOptions,\n ) => Promise<TContext> | TContext;\n createPage?: (context: TContext) => Promise<TPage> | TPage;\n readFile?: (\n filePath: string,\n ) => Promise<PlaywrightFileData> | PlaywrightFileData;\n writeFile?: (\n filePath: string,\n data: Buffer,\n ) => Promise<void> | void;\n evaluatePredicate?: (predicateId: number, data: unknown) => boolean;\n}\n\nexport interface PlaywrightSessionHandler {\n handler: PlaywrightSessionHandlerCallback;\n getCollectedData(): CollectedData;\n getTrackedResources(): { contexts: string[]; pages: string[] };\n clearCollectedData(): void;\n onEvent(callback: (event: PlaywrightEvent) => void): () => void;\n}\n\nexport {\n DEFAULT_PLAYWRIGHT_HANDLER_META,\n PLAYWRIGHT_HANDLER_META,\n} from \"./internal/playwright/types.mjs\";\n\nexport type {\n BrowserConsoleLogEntry,\n DefaultPlaywrightHandler,\n DefaultPlaywrightHandlerMetadata,\n DefaultPlaywrightHandlerOptions,\n NetworkRequestInfo,\n NetworkResponseInfo,\n PageErrorInfo,\n PlaywrightCollector,\n PlaywrightHandlerMetadata,\n PlaywrightHandle,\n RequestFailureInfo,\n} from \"./internal/playwright/client.mjs\";\n\nexport type {\n CollectedData,\n PlaywrightEvent,\n PlaywrightFileData,\n PlaywrightOperation,\n PlaywrightResult,\n};\n\nexport {\n createPlaywrightHandler,\n defaultPlaywrightHandler,\n getDefaultPlaywrightHandlerMetadata,\n getPlaywrightHandlerMetadata,\n} from \"./internal/playwright/client.mjs\";\n\nexport function createPlaywrightSessionHandler<\n TContext = unknown,\n TPage = unknown,\n TContextOptions = unknown,\n>(\n options: CreatePlaywrightSessionHandlerOptions<\n TContext,\n TPage,\n TContextOptions\n > = {},\n): PlaywrightSessionHandler {\n const handler = createPlaywrightFactoryHandler({\n timeout: options.timeout,\n createContext: options.createContext,\n createPage: options.createPage,\n readFile: options.readFile,\n writeFile: options.writeFile,\n evaluatePredicate: options.evaluatePredicate,\n } as Parameters<typeof createPlaywrightFactoryHandler>[0]);\n const metadata = getPlaywrightHandlerMetadata(handler);\n\n if (!metadata?.collector) {\n throw new Error(\n \"Playwright session handler metadata is unavailable for the generated handler.\",\n );\n }\n\n return {\n handler: handler as (\n op: PlaywrightOperation,\n ) => Promise<PlaywrightResult>,\n getCollectedData: () => metadata.collector.getCollectedData(),\n getTrackedResources: () => metadata.collector.getTrackedResources(),\n clearCollectedData: () => metadata.collector.clearCollectedData(),\n onEvent: (callback) => metadata.collector.onEvent(callback),\n };\n}\n"
6
+ ],
7
+ "mappings": ";AAAA;AAAA;AAAA;AAAA;AA2CA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA,kCAIE;AAAA;AAGK,SAAS,8BAIf,CACC,UAII,CAAC,GACqB;AAAA,EAC1B,MAAM,UAAU,+BAA+B;AAAA,IAC7C,SAAS,QAAQ;AAAA,IACjB,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,IACpB,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,mBAAmB,QAAQ;AAAA,EAC7B,CAAyD;AAAA,EACzD,MAAM,WAAW,6BAA6B,OAAO;AAAA,EAErD,IAAI,CAAC,UAAU,WAAW;AAAA,IACxB,MAAM,IAAI,MACR,+EACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IAGA,kBAAkB,MAAM,SAAS,UAAU,iBAAiB;AAAA,IAC5D,qBAAqB,MAAM,SAAS,UAAU,oBAAoB;AAAA,IAClE,oBAAoB,MAAM,SAAS,UAAU,mBAAmB;AAAA,IAChE,SAAS,CAAC,aAAa,SAAS,UAAU,QAAQ,QAAQ;AAAA,EAC5D;AAAA;",
8
+ "debugId": "33EE7EC7A3131B1264756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,143 @@
1
+ // src/runtime/namespaced-runtime.ts
2
+ import {
3
+ createBrowserDiagnostics
4
+ } from "../bridge/diagnostics.mjs";
5
+ import { isBenignDisposeError } from "../internal/client/index.mjs";
6
+ function createStateError(state, reason) {
7
+ if (state === "invalidated") {
8
+ const error2 = new Error(reason && reason.length > 0 ? `Namespaced runtime is no longer available: ${reason}` : "Namespaced runtime is no longer available.");
9
+ error2.name = "NamespacedRuntimeInvalidatedError";
10
+ return error2;
11
+ }
12
+ const error = new Error("Namespaced runtime has already been disposed.");
13
+ error.name = "NamespacedRuntimeDisposedError";
14
+ return error;
15
+ }
16
+ function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
17
+ let state = "active";
18
+ let lastRun;
19
+ let invalidationReason;
20
+ let released = false;
21
+ const subscriptions = new Set;
22
+ const release = () => {
23
+ if (released) {
24
+ return;
25
+ }
26
+ released = true;
27
+ for (const unsubscribe of subscriptions) {
28
+ unsubscribe();
29
+ }
30
+ subscriptions.clear();
31
+ options?.onRelease?.();
32
+ };
33
+ const ensureActive = () => {
34
+ if (state !== "active") {
35
+ throw createStateError(state, invalidationReason);
36
+ }
37
+ };
38
+ return {
39
+ async eval(code, evalOptions) {
40
+ ensureActive();
41
+ diagnostics.lifecycleState = "active";
42
+ try {
43
+ await runtime.eval(code, {
44
+ filename: evalOptions?.filename,
45
+ executionTimeout: evalOptions?.executionTimeout
46
+ });
47
+ } catch (error) {
48
+ diagnostics.lastError = error instanceof Error ? error.message : String(error);
49
+ throw error;
50
+ } finally {
51
+ diagnostics.lifecycleState = "idle";
52
+ }
53
+ },
54
+ async runTests(code, runOptions) {
55
+ ensureActive();
56
+ diagnostics.lifecycleState = "active";
57
+ try {
58
+ await runtime.testEnvironment.reset();
59
+ await runtime.eval(code, {
60
+ filename: runOptions?.filename,
61
+ executionTimeout: runOptions?.timeoutMs
62
+ });
63
+ lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);
64
+ return lastRun;
65
+ } catch (error) {
66
+ diagnostics.lastError = error instanceof Error ? error.message : String(error);
67
+ throw error;
68
+ } finally {
69
+ diagnostics.lifecycleState = "idle";
70
+ }
71
+ },
72
+ async diagnostics() {
73
+ ensureActive();
74
+ const runtimeDiagnostics = {
75
+ ...diagnostics,
76
+ reused: runtime.reused
77
+ };
78
+ const collectedData = options?.hasBrowser ? runtime.playwright.getCollectedData() : undefined;
79
+ const trackedResources = options?.hasBrowser ? runtime.playwright.getTrackedResources() : undefined;
80
+ return {
81
+ runtime: runtimeDiagnostics,
82
+ browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined,
83
+ test: {
84
+ enabled: true,
85
+ registeredTests: await runtime.testEnvironment.getTestCount(),
86
+ lastRun
87
+ }
88
+ };
89
+ },
90
+ async dispose(disposeOptions) {
91
+ if (state === "invalidated" || state === "disposed") {
92
+ release();
93
+ return;
94
+ }
95
+ state = "disposed";
96
+ diagnostics.lifecycleState = "disposing";
97
+ try {
98
+ options?.abortBindings?.(disposeOptions?.reason);
99
+ await runtime.dispose(disposeOptions);
100
+ } catch (error) {
101
+ if (!isBenignDisposeError(error)) {
102
+ diagnostics.lastError = error instanceof Error ? error.message : String(error);
103
+ throw error;
104
+ }
105
+ } finally {
106
+ diagnostics.lifecycleState = "idle";
107
+ release();
108
+ }
109
+ },
110
+ invalidate(reason) {
111
+ if (state === "disposed" || state === "invalidated") {
112
+ release();
113
+ return;
114
+ }
115
+ state = "invalidated";
116
+ invalidationReason = reason;
117
+ diagnostics.lifecycleState = "idle";
118
+ options?.abortBindings?.(reason);
119
+ release();
120
+ },
121
+ events: {
122
+ on: (event, handler) => {
123
+ ensureActive();
124
+ const unsubscribe = runtime.on(event, handler);
125
+ subscriptions.add(unsubscribe);
126
+ return () => {
127
+ if (subscriptions.delete(unsubscribe)) {
128
+ unsubscribe();
129
+ }
130
+ };
131
+ },
132
+ emit: async (event, payload) => {
133
+ ensureActive();
134
+ runtime.emit(event, payload);
135
+ }
136
+ }
137
+ };
138
+ }
139
+ export {
140
+ createNamespacedRuntimeAdapter
141
+ };
142
+
143
+ //# debugId=92EF09126B0797AF64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/runtime/namespaced-runtime.ts"],
4
+ "sourcesContent": [
5
+ "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.mjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): void;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void;\n onRelease?: () => void;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "92EF09126B0797AF64756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,4 +1,7 @@
1
1
  // src/runtime/script-runtime.ts
2
+ import {
3
+ createBrowserDiagnostics
4
+ } from "../bridge/diagnostics.mjs";
2
5
  import { isBenignDisposeError } from "../internal/client/index.mjs";
3
6
  function createScriptRuntimeAdapter(runtime, diagnostics, options) {
4
7
  return {
@@ -31,22 +34,23 @@ function createScriptRuntimeAdapter(runtime, diagnostics, options) {
31
34
  diagnostics.lifecycleState = "idle";
32
35
  }
33
36
  },
34
- diagnostics: async () => ({
35
- ...diagnostics,
36
- reused: runtime.reused
37
- }),
37
+ diagnostics: async () => {
38
+ const runtimeDiagnostics = {
39
+ ...diagnostics,
40
+ reused: runtime.reused
41
+ };
42
+ const collectedData = options?.hasBrowser ? runtime.playwright.getCollectedData() : undefined;
43
+ const trackedResources = options?.hasBrowser ? runtime.playwright.getTrackedResources() : undefined;
44
+ return {
45
+ runtime: runtimeDiagnostics,
46
+ browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined
47
+ };
48
+ },
38
49
  events: {
39
50
  on: (event, handler) => runtime.on(event, handler),
40
51
  emit: async (event, payload) => {
41
52
  runtime.emit(event, payload);
42
53
  }
43
- },
44
- tests: {
45
- run: async (testOptions) => await runtime.testEnvironment.runTests(testOptions?.timeoutMs),
46
- hasTests: async () => await runtime.testEnvironment.hasTests(),
47
- reset: async () => {
48
- await runtime.testEnvironment.reset();
49
- }
50
54
  }
51
55
  };
52
56
  }
@@ -54,4 +58,4 @@ export {
54
58
  createScriptRuntimeAdapter
55
59
  };
56
60
 
57
- //# debugId=4BAA53DA5512D03B64756E2164756E21
61
+ //# debugId=0BFA104EB05B457464756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/runtime/script-runtime.ts"],
4
4
  "sourcesContent": [
5
- "import type { MutableRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { ScriptRuntime } from \"../types.mjs\";\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: { onBeforeDispose?: (reason?: string) => void },\n): ScriptRuntime {\n return {\n async eval(code, evalOptions) {\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => ({\n ...diagnostics,\n reused: runtime.reused,\n }),\n events: {\n on: (event, handler) => runtime.on(event, handler),\n emit: async (event, payload) => {\n runtime.emit(event, payload);\n },\n },\n tests: {\n run: async (testOptions) => await runtime.testEnvironment.runTests(testOptions?.timeoutMs),\n hasTests: async () => await runtime.testEnvironment.hasTests(),\n reset: async () => {\n await runtime.testEnvironment.reset();\n },\n },\n };\n}\n"
5
+ "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { ScriptRuntime } from \"../types.mjs\";\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n onBeforeDispose?: (reason?: string) => void;\n },\n): ScriptRuntime {\n return {\n async eval(code, evalOptions) {\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n events: {\n on: (event, handler) => runtime.on(event, handler),\n emit: async (event, payload) => {\n runtime.emit(event, payload);\n },\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";AACA;AAGO,SAAS,0BAA0B,CACxC,SACA,aACA,SACe;AAAA,EACf,OAAO;AAAA,SACC,KAAI,CAAC,MAAM,aAAa;AAAA,MAC5B,MAAM,oBAAoB,OAAO,gBAAgB,WAC7C,EAAE,UAAU,YAAY,IACxB;AAAA,MACJ,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,mBAAmB;AAAA,UAC7B,kBAAkB,mBAAmB;AAAA,QACvC,CAAC;AAAA,QACD,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,SAAS,kBAAkB,gBAAgB,MAAM;AAAA,QACjD,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,qBAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,aAAa,aAAa;AAAA,SACrB;AAAA,MACH,QAAQ,QAAQ;AAAA,IAClB;AAAA,IACA,QAAQ;AAAA,MACN,IAAI,CAAC,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;AAAA,MACjD,MAAM,OAAO,OAAO,YAAY;AAAA,QAC9B,QAAQ,KAAK,OAAO,OAAO;AAAA;AAAA,IAE/B;AAAA,IACA,OAAO;AAAA,MACL,KAAK,OAAO,gBAAgB,MAAM,QAAQ,gBAAgB,SAAS,aAAa,SAAS;AAAA,MACzF,UAAU,YAAY,MAAM,QAAQ,gBAAgB,SAAS;AAAA,MAC7D,OAAO,YAAY;AAAA,QACjB,MAAM,QAAQ,gBAAgB,MAAM;AAAA;AAAA,IAExC;AAAA,EACF;AAAA;",
8
- "debugId": "4BAA53DA5512D03B64756E2164756E21",
7
+ "mappings": ";AAAA;AAAA;AAAA;AAIA;AAGO,SAAS,0BAA0B,CACxC,SACA,aACA,SAIe;AAAA,EACf,OAAO;AAAA,SACC,KAAI,CAAC,MAAM,aAAa;AAAA,MAC5B,MAAM,oBAAoB,OAAO,gBAAgB,WAC7C,EAAE,UAAU,YAAY,IACxB;AAAA,MACJ,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,mBAAmB;AAAA,UAC7B,kBAAkB,mBAAmB;AAAA,QACvC,CAAC;AAAA,QACD,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,SAAS,kBAAkB,gBAAgB,MAAM;AAAA,QACjD,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,qBAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,aAAa,YAAY;AAAA,MACvB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,SAAS,aAC3B,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,SAAS,aAC9B,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,yBAAyB,eAAe,gBAAgB,IACxD;AAAA,MACN;AAAA;AAAA,IAEF,QAAQ;AAAA,MACN,IAAI,CAAC,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;AAAA,MACjD,MAAM,OAAO,OAAO,YAAY;AAAA,QAC9B,QAAQ,KAAK,OAAO,OAAO;AAAA;AAAA,IAE/B;AAAA,EACF;AAAA;",
8
+ "debugId": "0BFA104EB05B457464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,78 @@
1
+ // src/runtime/test-runtime.ts
2
+ import {
3
+ createBrowserDiagnostics,
4
+ createRuntimeDiagnostics
5
+ } from "../bridge/diagnostics.mjs";
6
+ import {
7
+ createRuntimeBindingsAdapter
8
+ } from "../bridge/runtime-bindings.mjs";
9
+ import { isBenignDisposeError } from "../internal/client/index.mjs";
10
+ async function createTestRuntimeAdapter(createRuntime, options, adapterOptions) {
11
+ const diagnostics = createRuntimeDiagnostics();
12
+ let runtimeId = options.key ?? "test-runtime";
13
+ const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, adapterOptions);
14
+ const runtime = await createRuntime({
15
+ ...bindingsAdapter.runtimeOptions,
16
+ cwd: options.cwd,
17
+ memoryLimitMB: options.memoryLimitMB,
18
+ executionTimeout: options.executionTimeout,
19
+ testEnvironment: true
20
+ });
21
+ runtimeId = runtime.id;
22
+ let lastRun;
23
+ return {
24
+ async run(code, runOptions) {
25
+ diagnostics.lifecycleState = "active";
26
+ try {
27
+ await runtime.testEnvironment.reset();
28
+ await runtime.eval(code, {
29
+ filename: runOptions?.filename,
30
+ executionTimeout: runOptions?.timeoutMs
31
+ });
32
+ lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);
33
+ return lastRun;
34
+ } catch (error) {
35
+ diagnostics.lastError = error instanceof Error ? error.message : String(error);
36
+ throw error;
37
+ } finally {
38
+ diagnostics.lifecycleState = "idle";
39
+ }
40
+ },
41
+ async diagnostics() {
42
+ const runtimeDiagnostics = {
43
+ ...diagnostics,
44
+ reused: runtime.reused
45
+ };
46
+ const collectedData = options.bindings.browser ? runtime.playwright.getCollectedData() : undefined;
47
+ const trackedResources = options.bindings.browser ? runtime.playwright.getTrackedResources() : undefined;
48
+ return {
49
+ runtime: runtimeDiagnostics,
50
+ browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined,
51
+ test: {
52
+ enabled: true,
53
+ registeredTests: await runtime.testEnvironment.getTestCount(),
54
+ lastRun
55
+ }
56
+ };
57
+ },
58
+ async dispose(disposeOptions) {
59
+ diagnostics.lifecycleState = "disposing";
60
+ try {
61
+ bindingsAdapter.abort(disposeOptions?.reason);
62
+ await runtime.dispose(disposeOptions);
63
+ } catch (error) {
64
+ if (!isBenignDisposeError(error)) {
65
+ diagnostics.lastError = error instanceof Error ? error.message : String(error);
66
+ throw error;
67
+ }
68
+ } finally {
69
+ diagnostics.lifecycleState = "idle";
70
+ }
71
+ }
72
+ };
73
+ }
74
+ export {
75
+ createTestRuntimeAdapter
76
+ };
77
+
78
+ //# debugId=5E07E630DF3B621F64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/runtime/test-runtime.ts"],
4
+ "sourcesContent": [
5
+ "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.mjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.mjs\";\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"test-runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: true,\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n\n return {\n async run(code, runOptions) {\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n };\n}\n"
6
+ ],
7
+ "mappings": ";AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AAOA,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,yBAAyB;AAAA,EAC7C,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,MAAM,kBAAkB,6BACtB,QAAQ,UACR,MAAM,WACN,aACA,cACF;AAAA,EACA,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB;AAAA,EACnB,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EAEJ,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,yBAAyB,eAAe,gBAAgB,IACxD;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA;AAAA,SAEI,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,QAC5C,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,qBAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,EAGnC;AAAA;",
8
+ "debugId": "5E07E630DF3B621F64756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,16 +1,21 @@
1
1
  // src/server/app-server.ts
2
2
  import { IsolateServer } from "../internal/server/index.mjs";
3
- import { createRuntimeDiagnostics } from "../bridge/diagnostics.mjs";
4
- import { createRuntimeBindingsAdapter } from "../bridge/runtime-bindings.mjs";
3
+ import {
4
+ createBrowserDiagnostics,
5
+ createRuntimeDiagnostics
6
+ } from "../bridge/diagnostics.mjs";
7
+ import {
8
+ createRuntimeBindingsAdapter
9
+ } from "../bridge/runtime-bindings.mjs";
5
10
  import { withRequestContext } from "../bridge/request-context.mjs";
6
- async function createAppServerAdapter(getConnection, options) {
11
+ async function createAppServerAdapter(getConnection, options, adapterOptions) {
7
12
  const diagnostics = createRuntimeDiagnostics();
8
13
  const server = new IsolateServer({
9
14
  namespaceId: options.key,
10
15
  getConnection
11
16
  });
12
17
  let runtimeId = options.key;
13
- const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics);
18
+ const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, adapterOptions);
14
19
  await server.start({
15
20
  entry: options.entry,
16
21
  entryFilename: options.entryFilename,
@@ -18,8 +23,7 @@ async function createAppServerAdapter(getConnection, options) {
18
23
  ...bindingsAdapter.runtimeOptions,
19
24
  cwd: options.cwd,
20
25
  memoryLimitMB: options.memoryLimitMB,
21
- executionTimeout: options.executionTimeout,
22
- testEnvironment: options.features?.tests ?? false
26
+ executionTimeout: options.executionTimeout
23
27
  },
24
28
  onWebSocketCommand: (command) => {
25
29
  options.webSockets?.onCommand?.(command);
@@ -107,14 +111,22 @@ async function createAppServerAdapter(getConnection, options) {
107
111
  diagnostics.lifecycleState = "idle";
108
112
  }
109
113
  },
110
- diagnostics: async () => ({
111
- ...diagnostics,
112
- reused: server.getRuntime()?.reused
113
- })
114
+ diagnostics: async () => {
115
+ const runtimeDiagnostics = {
116
+ ...diagnostics,
117
+ reused: server.getRuntime()?.reused
118
+ };
119
+ const collectedData = options.bindings.browser && server.getRuntime() ? server.getRuntime().playwright.getCollectedData() : undefined;
120
+ const trackedResources = options.bindings.browser && server.getRuntime() ? server.getRuntime().playwright.getTrackedResources() : undefined;
121
+ return {
122
+ runtime: runtimeDiagnostics,
123
+ browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined
124
+ };
125
+ }
114
126
  };
115
127
  }
116
128
  export {
117
129
  createAppServerAdapter
118
130
  };
119
131
 
120
- //# debugId=5AA39498EBE5037464756E2164756E21
132
+ //# debugId=29818A94986CF11064756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/server/app-server.ts"],
4
4
  "sourcesContent": [
5
- "import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.mjs\";\nimport { withRequestContext } from \"../bridge/request-context.mjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.mjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: options.features?.tests ?? false,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => ({\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n }),\n };\n}\n"
5
+ "import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport { withRequestContext } from \"../bridge/request-context.mjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.mjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n };\n const collectedData = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n };\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "5AA39498EBE5037464756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "29818A94986CF11064756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -23,6 +23,7 @@ function getTypeProfile(input) {
23
23
  const capabilities = unique([...PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend, ...input?.capabilities ?? []]);
24
24
  const include = unique([
25
25
  "core",
26
+ "sandboxIsolate",
26
27
  ...capabilities.flatMap((capability) => CAPABILITY_MAP[capability])
27
28
  ]);
28
29
  return {
@@ -53,4 +54,4 @@ export {
53
54
  formatTypecheckErrors
54
55
  };
55
56
 
56
- //# debugId=8122D73A6144BD5264756E2164756E21
57
+ //# debugId=C5B5810EA74F39CD64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/typecheck/index.ts"],
4
4
  "sourcesContent": [
5
- "import { TYPE_DEFINITIONS, formatTypecheckErrors as formatLegacyTypecheckErrors, typecheckIsolateCode } from \"../internal/typecheck/index.mjs\";\nimport type { TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest } from \"../types.mjs\";\n\ntype IncludedType = \"core\" | \"fetch\" | \"fs\" | \"console\" | \"encoding\" | \"timers\" | \"testEnvironment\" | \"playwright\";\n\nconst CAPABILITY_MAP: Record<TypeCapability, IncludedType[]> = {\n fetch: [\"fetch\"],\n files: [\"fs\"],\n tests: [\"testEnvironment\"],\n browser: [\"playwright\"],\n tools: [],\n console: [\"console\"],\n encoding: [\"encoding\"],\n timers: [\"timers\"],\n};\n\nconst PROFILE_DEFAULTS: Record<TypeProfileName, TypeCapability[]> = {\n backend: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n agent: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n \"browser-test\": [\"console\", \"encoding\", \"fetch\", \"tests\", \"browser\", \"timers\"],\n};\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nexport function getTypeProfile(input?: {\n profile?: TypeProfileName;\n capabilities?: TypeCapability[];\n}): TypeProfile {\n const profile = input?.profile ?? \"backend\";\n const capabilities = unique([...(PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend), ...(input?.capabilities ?? [])]);\n const include: IncludedType[] = unique([\n \"core\",\n ...capabilities.flatMap((capability) => CAPABILITY_MAP[capability]),\n ]) as IncludedType[];\n\n return {\n profile,\n capabilities,\n include,\n files: include\n .map((key) => ({\n name: `isolate-${key}.d.ts`,\n content: TYPE_DEFINITIONS[key as keyof typeof TYPE_DEFINITIONS],\n }))\n .filter((entry) => Boolean(entry.content)) as Array<{ name: string; content: string }>,\n };\n}\n\nexport function typecheck(request: TypecheckRequest) {\n const profile = getTypeProfile({\n profile: request.profile,\n capabilities: request.capabilities,\n });\n\n return typecheckIsolateCode(request.code, {\n include: profile.include,\n libraryTypes: request.libraryTypes,\n compilerOptions: request.compilerOptions as never,\n });\n}\n\nexport const formatTypecheckErrors = formatLegacyTypecheckErrors;\n"
5
+ "import { TYPE_DEFINITIONS, formatTypecheckErrors as formatLegacyTypecheckErrors, typecheckIsolateCode } from \"../internal/typecheck/index.mjs\";\nimport type { TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest } from \"../types.mjs\";\n\ntype IncludedType =\n | \"core\"\n | \"sandboxIsolate\"\n | \"fetch\"\n | \"fs\"\n | \"console\"\n | \"encoding\"\n | \"timers\"\n | \"testEnvironment\"\n | \"playwright\";\n\nconst CAPABILITY_MAP: Record<TypeCapability, IncludedType[]> = {\n fetch: [\"fetch\"],\n files: [\"fs\"],\n tests: [\"testEnvironment\"],\n browser: [\"playwright\"],\n tools: [],\n console: [\"console\"],\n encoding: [\"encoding\"],\n timers: [\"timers\"],\n};\n\nconst PROFILE_DEFAULTS: Record<TypeProfileName, TypeCapability[]> = {\n backend: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n agent: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n \"browser-test\": [\"console\", \"encoding\", \"fetch\", \"tests\", \"browser\", \"timers\"],\n};\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nexport function getTypeProfile(input?: {\n profile?: TypeProfileName;\n capabilities?: TypeCapability[];\n}): TypeProfile {\n const profile = input?.profile ?? \"backend\";\n const capabilities = unique([...(PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend), ...(input?.capabilities ?? [])]);\n const include: IncludedType[] = unique([\n \"core\",\n \"sandboxIsolate\",\n ...capabilities.flatMap((capability) => CAPABILITY_MAP[capability]),\n ]) as IncludedType[];\n\n return {\n profile,\n capabilities,\n include,\n files: include\n .map((key) => ({\n name: `isolate-${key}.d.ts`,\n content: TYPE_DEFINITIONS[key as keyof typeof TYPE_DEFINITIONS],\n }))\n .filter((entry) => Boolean(entry.content)) as Array<{ name: string; content: string }>,\n };\n}\n\nexport function typecheck(request: TypecheckRequest) {\n const profile = getTypeProfile({\n profile: request.profile,\n capabilities: request.capabilities,\n });\n\n return typecheckIsolateCode(request.code, {\n include: profile.include,\n libraryTypes: request.libraryTypes,\n compilerOptions: request.compilerOptions as never,\n });\n}\n\nexport const formatTypecheckErrors = formatLegacyTypecheckErrors;\n"
6
6
  ],
7
- "mappings": ";AAAA,oDAA2B;AAK3B,IAAM,iBAAyD;AAAA,EAC7D,OAAO,CAAC,OAAO;AAAA,EACf,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,iBAAiB;AAAA,EACzB,SAAS,CAAC,YAAY;AAAA,EACtB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC,SAAS;AAAA,EACnB,UAAU,CAAC,UAAU;AAAA,EACrB,QAAQ,CAAC,QAAQ;AACnB;AAEA,IAAM,mBAA8D;AAAA,EAClE,SAAS,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EAC3D,OAAO,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EACzD,gBAAgB,CAAC,WAAW,YAAY,SAAS,SAAS,WAAW,QAAQ;AAC/E;AAEA,SAAS,MAAS,CAAC,QAAkB;AAAA,EACnC,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAAA;AAGrB,SAAS,cAAc,CAAC,OAGf;AAAA,EACd,MAAM,UAAU,OAAO,WAAW;AAAA,EAClC,MAAM,eAAe,OAAO,CAAC,GAAI,iBAAiB,YAAY,iBAAiB,SAAU,GAAI,OAAO,gBAAgB,CAAC,CAAE,CAAC;AAAA,EACxH,MAAM,UAA0B,OAAO;AAAA,IACrC;AAAA,IACA,GAAG,aAAa,QAAQ,CAAC,eAAe,eAAe,WAAW;AAAA,EACpE,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,QACJ,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,WAAW;AAAA,MACjB,SAAS,iBAAiB;AAAA,IAC5B,EAAE,EACD,OAAO,CAAC,UAAU,QAAQ,MAAM,OAAO,CAAC;AAAA,EAC7C;AAAA;AAGK,SAAS,SAAS,CAAC,SAA2B;AAAA,EACnD,MAAM,UAAU,eAAe;AAAA,IAC7B,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,EACxB,CAAC;AAAA,EAED,OAAO,qBAAqB,QAAQ,MAAM;AAAA,IACxC,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGI,IAAM,wBAAwB;",
8
- "debugId": "8122D73A6144BD5264756E2164756E21",
7
+ "mappings": ";AAAA,oDAA2B;AAc3B,IAAM,iBAAyD;AAAA,EAC7D,OAAO,CAAC,OAAO;AAAA,EACf,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,iBAAiB;AAAA,EACzB,SAAS,CAAC,YAAY;AAAA,EACtB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC,SAAS;AAAA,EACnB,UAAU,CAAC,UAAU;AAAA,EACrB,QAAQ,CAAC,QAAQ;AACnB;AAEA,IAAM,mBAA8D;AAAA,EAClE,SAAS,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EAC3D,OAAO,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EACzD,gBAAgB,CAAC,WAAW,YAAY,SAAS,SAAS,WAAW,QAAQ;AAC/E;AAEA,SAAS,MAAS,CAAC,QAAkB;AAAA,EACnC,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAAA;AAGrB,SAAS,cAAc,CAAC,OAGf;AAAA,EACd,MAAM,UAAU,OAAO,WAAW;AAAA,EAClC,MAAM,eAAe,OAAO,CAAC,GAAI,iBAAiB,YAAY,iBAAiB,SAAU,GAAI,OAAO,gBAAgB,CAAC,CAAE,CAAC;AAAA,EACxH,MAAM,UAA0B,OAAO;AAAA,IACrC;AAAA,IACA;AAAA,IACA,GAAG,aAAa,QAAQ,CAAC,eAAe,eAAe,WAAW;AAAA,EACpE,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,QACJ,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,WAAW;AAAA,MACjB,SAAS,iBAAiB;AAAA,IAC5B,EAAE,EACD,OAAO,CAAC,UAAU,QAAQ,MAAM,OAAO,CAAC;AAAA,EAC7C;AAAA;AAGK,SAAS,SAAS,CAAC,SAA2B;AAAA,EACnD,MAAM,UAAU,eAAe;AAAA,IAC7B,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,EACxB,CAAC;AAAA,EAED,OAAO,qBAAqB,QAAQ,MAAM;AAAA,IACxC,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGI,IAAM,wBAAwB;",
8
+ "debugId": "C5B5810EA74F39CD64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,5 @@
1
- import type { RuntimeDiagnostics } from "../types.ts";
1
+ import type { CollectedData } from "../internal/client/index.ts";
2
+ import type { BrowserDiagnostics, RuntimeDiagnostics } from "../types.ts";
2
3
  export interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {
3
4
  activeRequests: number;
4
5
  activeResources: number;
@@ -10,3 +11,7 @@ export interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {
10
11
  lifecycleState: "idle" | "active" | "reloading" | "disposing";
11
12
  }
12
13
  export declare function createRuntimeDiagnostics(): MutableRuntimeDiagnostics;
14
+ export declare function createBrowserDiagnostics(collectedData: CollectedData, trackedResources?: {
15
+ contexts: string[];
16
+ pages: string[];
17
+ }): BrowserDiagnostics;
@@ -1,4 +1,5 @@
1
1
  import type { RuntimeOptions } from "../internal/client/index.ts";
2
+ import { type NestedHostBindings } from "./sandbox-isolate.ts";
2
3
  import type { HostBindings, HostCallContext, ModuleResolveResult, ModuleResolver, ModuleSource } from "../types.ts";
3
4
  import type { MutableRuntimeDiagnostics } from "./diagnostics.ts";
4
5
  export interface RuntimeBindingsAdapter {
@@ -6,7 +7,10 @@ export interface RuntimeBindingsAdapter {
6
7
  abort(reason?: unknown): void;
7
8
  reset(reason?: unknown): void;
8
9
  }
9
- export declare function createRuntimeBindingsAdapter(bindings: HostBindings, getRuntimeId: () => string, diagnostics: MutableRuntimeDiagnostics): RuntimeBindingsAdapter;
10
+ export interface RuntimeBindingsAdapterOptions {
11
+ nestedHost?: NestedHostBindings;
12
+ }
13
+ export declare function createRuntimeBindingsAdapter(bindings: HostBindings, getRuntimeId: () => string, diagnostics: MutableRuntimeDiagnostics, options?: RuntimeBindingsAdapterOptions): RuntimeBindingsAdapter;
10
14
  export declare function tryResolveModule(resolver: ModuleResolver | undefined, specifier: string, importer: {
11
15
  path: string;
12
16
  resolveDir: string;
@@ -0,0 +1,21 @@
1
+ import type { CreateAppServerOptions, CreateNamespacedRuntimeOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, HostCallContext } from "../types.ts";
2
+ export declare const SANDBOX_ISOLATE_MODULE_SPECIFIER = "@ricsam/isolate";
3
+ export type NestedResourceKind = "runtime" | "appServer" | "testRuntime" | "namespacedRuntime";
4
+ export interface NestedHostBindings {
5
+ createHost(context: HostCallContext): Promise<string>;
6
+ closeHost(hostId: string, context: HostCallContext): Promise<void>;
7
+ diagnostics(hostId: string, context: HostCallContext): Promise<{
8
+ runtimes: number;
9
+ servers: number;
10
+ connected: boolean;
11
+ }>;
12
+ createResource(hostId: string, kind: NestedResourceKind, options: CreateRuntimeOptions | CreateAppServerOptions | CreateTestRuntimeOptions | {
13
+ key: string;
14
+ options: CreateNamespacedRuntimeOptions;
15
+ }, context: HostCallContext): Promise<string>;
16
+ disposeNamespace(hostId: string, key: string, options: {
17
+ reason?: string;
18
+ } | undefined, context: HostCallContext): Promise<void>;
19
+ callResource(kind: NestedResourceKind, resourceId: string, method: string, args: unknown[], context: HostCallContext): Promise<unknown>;
20
+ }
21
+ export declare const SANDBOX_ISOLATE_MODULE_SOURCE: string;