@ricsam/isolate 0.1.0 → 0.1.2

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 (240) hide show
  1. package/README.md +254 -0
  2. package/dist/cjs/bridge/diagnostics.cjs +2 -2
  3. package/dist/cjs/bridge/diagnostics.cjs.map +1 -1
  4. package/dist/cjs/bridge/legacy-adapters.cjs +2 -2
  5. package/dist/cjs/bridge/legacy-adapters.cjs.map +1 -1
  6. package/dist/cjs/bridge/request-context.cjs +2 -2
  7. package/dist/cjs/bridge/request-context.cjs.map +1 -1
  8. package/dist/cjs/bridge/runtime-bindings.cjs +2 -2
  9. package/dist/cjs/bridge/runtime-bindings.cjs.map +1 -1
  10. package/dist/cjs/browser/browser-runtime.cjs +2 -2
  11. package/dist/cjs/browser/browser-runtime.cjs.map +1 -1
  12. package/dist/cjs/daemon.cjs +2 -2
  13. package/dist/cjs/daemon.cjs.map +1 -1
  14. package/dist/cjs/files/index.cjs +2 -2
  15. package/dist/cjs/files/index.cjs.map +1 -1
  16. package/dist/cjs/host/create-isolate-host.cjs +4 -4
  17. package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
  18. package/dist/cjs/host/index.cjs +2 -2
  19. package/dist/cjs/host/index.cjs.map +1 -1
  20. package/dist/cjs/index.cjs +2 -2
  21. package/dist/cjs/index.cjs.map +1 -1
  22. package/dist/cjs/internal/client/connection.cjs +2 -2
  23. package/dist/cjs/internal/client/connection.cjs.map +1 -1
  24. package/dist/cjs/internal/client/index.cjs +2 -2
  25. package/dist/cjs/internal/client/index.cjs.map +1 -1
  26. package/dist/cjs/internal/client/types.cjs +2 -2
  27. package/dist/cjs/internal/client/types.cjs.map +1 -1
  28. package/dist/cjs/internal/console/index.cjs +2 -2
  29. package/dist/cjs/internal/console/index.cjs.map +1 -1
  30. package/dist/cjs/internal/console/utils.cjs +2 -2
  31. package/dist/cjs/internal/console/utils.cjs.map +1 -1
  32. package/dist/cjs/internal/core/index.cjs +2 -2
  33. package/dist/cjs/internal/core/index.cjs.map +1 -1
  34. package/dist/cjs/internal/crypto/index.cjs +2 -2
  35. package/dist/cjs/internal/crypto/index.cjs.map +1 -1
  36. package/dist/cjs/internal/daemon/callback-fs-handler.cjs +2 -2
  37. package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +1 -1
  38. package/dist/cjs/internal/daemon/connection.cjs +2 -2
  39. package/dist/cjs/internal/daemon/connection.cjs.map +1 -1
  40. package/dist/cjs/internal/daemon/daemon.cjs +2 -2
  41. package/dist/cjs/internal/daemon/daemon.cjs.map +1 -1
  42. package/dist/cjs/internal/daemon/index.cjs +2 -2
  43. package/dist/cjs/internal/daemon/index.cjs.map +1 -1
  44. package/dist/cjs/internal/daemon/runtime-pool.cjs +2 -2
  45. package/dist/cjs/internal/daemon/runtime-pool.cjs.map +1 -1
  46. package/dist/cjs/internal/daemon/types.cjs +2 -2
  47. package/dist/cjs/internal/daemon/types.cjs.map +1 -1
  48. package/dist/cjs/internal/encoding/index.cjs +2 -2
  49. package/dist/cjs/internal/encoding/index.cjs.map +1 -1
  50. package/dist/cjs/internal/fetch/consistency/origins.cjs +2 -2
  51. package/dist/cjs/internal/fetch/consistency/origins.cjs.map +1 -1
  52. package/dist/cjs/internal/fetch/index.cjs +2 -2
  53. package/dist/cjs/internal/fetch/index.cjs.map +1 -1
  54. package/dist/cjs/internal/fetch/stream-state.cjs +2 -2
  55. package/dist/cjs/internal/fetch/stream-state.cjs.map +1 -1
  56. package/dist/cjs/internal/fs/index.cjs +2 -2
  57. package/dist/cjs/internal/fs/index.cjs.map +1 -1
  58. package/dist/cjs/internal/fs/node-adapter.cjs +2 -2
  59. package/dist/cjs/internal/fs/node-adapter.cjs.map +1 -1
  60. package/dist/cjs/internal/module-loader/bundle.cjs +2 -2
  61. package/dist/cjs/internal/module-loader/bundle.cjs.map +1 -1
  62. package/dist/cjs/internal/module-loader/index.cjs +2 -2
  63. package/dist/cjs/internal/module-loader/index.cjs.map +1 -1
  64. package/dist/cjs/internal/module-loader/mappings.cjs +2 -2
  65. package/dist/cjs/internal/module-loader/mappings.cjs.map +1 -1
  66. package/dist/cjs/internal/module-loader/resolve.cjs +2 -2
  67. package/dist/cjs/internal/module-loader/resolve.cjs.map +1 -1
  68. package/dist/cjs/internal/module-loader/strip-types.cjs +2 -2
  69. package/dist/cjs/internal/module-loader/strip-types.cjs.map +1 -1
  70. package/dist/cjs/internal/path/index.cjs +2 -2
  71. package/dist/cjs/internal/path/index.cjs.map +1 -1
  72. package/dist/cjs/internal/playwright/client.cjs +2 -2
  73. package/dist/cjs/internal/playwright/client.cjs.map +1 -1
  74. package/dist/cjs/internal/playwright/handler.cjs +2 -2
  75. package/dist/cjs/internal/playwright/handler.cjs.map +1 -1
  76. package/dist/cjs/internal/playwright/index.cjs +2 -2
  77. package/dist/cjs/internal/playwright/index.cjs.map +1 -1
  78. package/dist/cjs/internal/playwright/types.cjs +2 -2
  79. package/dist/cjs/internal/playwright/types.cjs.map +1 -1
  80. package/dist/cjs/internal/protocol/codec.cjs +2 -2
  81. package/dist/cjs/internal/protocol/codec.cjs.map +1 -1
  82. package/dist/cjs/internal/protocol/framing.cjs +2 -2
  83. package/dist/cjs/internal/protocol/framing.cjs.map +1 -1
  84. package/dist/cjs/internal/protocol/index.cjs +2 -2
  85. package/dist/cjs/internal/protocol/index.cjs.map +1 -1
  86. package/dist/cjs/internal/protocol/marshalValue.cjs +2 -2
  87. package/dist/cjs/internal/protocol/marshalValue.cjs.map +1 -1
  88. package/dist/cjs/internal/protocol/serialization.cjs +2 -2
  89. package/dist/cjs/internal/protocol/serialization.cjs.map +1 -1
  90. package/dist/cjs/internal/protocol/types.cjs +2 -2
  91. package/dist/cjs/internal/protocol/types.cjs.map +1 -1
  92. package/dist/cjs/internal/runtime/index.cjs +2 -2
  93. package/dist/cjs/internal/runtime/index.cjs.map +1 -1
  94. package/dist/cjs/internal/server/index.cjs +2 -2
  95. package/dist/cjs/internal/server/index.cjs.map +1 -1
  96. package/dist/cjs/internal/test-environment/index.cjs +2 -2
  97. package/dist/cjs/internal/test-environment/index.cjs.map +1 -1
  98. package/dist/cjs/internal/timers/index.cjs +2 -2
  99. package/dist/cjs/internal/timers/index.cjs.map +1 -1
  100. package/dist/cjs/internal/transform/index.cjs +2 -2
  101. package/dist/cjs/internal/transform/index.cjs.map +1 -1
  102. package/dist/cjs/internal/typecheck/index.cjs +2 -2
  103. package/dist/cjs/internal/typecheck/index.cjs.map +1 -1
  104. package/dist/cjs/internal/typecheck/isolate-types.cjs +2 -2
  105. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +1 -1
  106. package/dist/cjs/internal/typecheck/typecheck.cjs +2 -2
  107. package/dist/cjs/internal/typecheck/typecheck.cjs.map +1 -1
  108. package/dist/cjs/modules/index.cjs +11 -4
  109. package/dist/cjs/modules/index.cjs.map +3 -3
  110. package/dist/cjs/package.json +1 -1
  111. package/dist/cjs/runtime/script-runtime.cjs +2 -2
  112. package/dist/cjs/runtime/script-runtime.cjs.map +1 -1
  113. package/dist/cjs/server/app-server.cjs +2 -2
  114. package/dist/cjs/server/app-server.cjs.map +1 -1
  115. package/dist/cjs/testing/integration-helpers.cjs +2 -2
  116. package/dist/cjs/testing/integration-helpers.cjs.map +1 -1
  117. package/dist/cjs/typecheck/index.cjs +2 -2
  118. package/dist/cjs/typecheck/index.cjs.map +1 -1
  119. package/dist/cjs/types.cjs +2 -2
  120. package/dist/cjs/types.cjs.map +1 -1
  121. package/dist/mjs/bridge/diagnostics.mjs +2 -2
  122. package/dist/mjs/bridge/diagnostics.mjs.map +1 -1
  123. package/dist/mjs/bridge/legacy-adapters.mjs +2 -2
  124. package/dist/mjs/bridge/legacy-adapters.mjs.map +1 -1
  125. package/dist/mjs/bridge/request-context.mjs +2 -2
  126. package/dist/mjs/bridge/request-context.mjs.map +1 -1
  127. package/dist/mjs/bridge/runtime-bindings.mjs +2 -2
  128. package/dist/mjs/bridge/runtime-bindings.mjs.map +1 -1
  129. package/dist/mjs/browser/browser-runtime.mjs +2 -2
  130. package/dist/mjs/browser/browser-runtime.mjs.map +1 -1
  131. package/dist/mjs/daemon.mjs +2 -2
  132. package/dist/mjs/daemon.mjs.map +1 -1
  133. package/dist/mjs/files/index.mjs +2 -2
  134. package/dist/mjs/files/index.mjs.map +1 -1
  135. package/dist/mjs/host/create-isolate-host.mjs +3 -3
  136. package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
  137. package/dist/mjs/host/index.mjs +2 -2
  138. package/dist/mjs/host/index.mjs.map +1 -1
  139. package/dist/mjs/index.mjs +2 -2
  140. package/dist/mjs/index.mjs.map +1 -1
  141. package/dist/mjs/internal/client/connection.mjs +2 -2
  142. package/dist/mjs/internal/client/connection.mjs.map +1 -1
  143. package/dist/mjs/internal/client/index.mjs +2 -2
  144. package/dist/mjs/internal/client/index.mjs.map +1 -1
  145. package/dist/mjs/internal/client/types.mjs +1 -1
  146. package/dist/mjs/internal/client/types.mjs.map +1 -1
  147. package/dist/mjs/internal/console/index.mjs +2 -2
  148. package/dist/mjs/internal/console/index.mjs.map +1 -1
  149. package/dist/mjs/internal/console/utils.mjs +2 -2
  150. package/dist/mjs/internal/console/utils.mjs.map +1 -1
  151. package/dist/mjs/internal/core/index.mjs +2 -2
  152. package/dist/mjs/internal/core/index.mjs.map +1 -1
  153. package/dist/mjs/internal/crypto/index.mjs +2 -2
  154. package/dist/mjs/internal/crypto/index.mjs.map +1 -1
  155. package/dist/mjs/internal/daemon/callback-fs-handler.mjs +2 -2
  156. package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +1 -1
  157. package/dist/mjs/internal/daemon/connection.mjs +2 -2
  158. package/dist/mjs/internal/daemon/connection.mjs.map +1 -1
  159. package/dist/mjs/internal/daemon/daemon.mjs +2 -2
  160. package/dist/mjs/internal/daemon/daemon.mjs.map +1 -1
  161. package/dist/mjs/internal/daemon/index.mjs +2 -2
  162. package/dist/mjs/internal/daemon/index.mjs.map +1 -1
  163. package/dist/mjs/internal/daemon/runtime-pool.mjs +2 -2
  164. package/dist/mjs/internal/daemon/runtime-pool.mjs.map +1 -1
  165. package/dist/mjs/internal/daemon/types.mjs +1 -1
  166. package/dist/mjs/internal/daemon/types.mjs.map +1 -1
  167. package/dist/mjs/internal/encoding/index.mjs +2 -2
  168. package/dist/mjs/internal/encoding/index.mjs.map +1 -1
  169. package/dist/mjs/internal/fetch/consistency/origins.mjs +2 -2
  170. package/dist/mjs/internal/fetch/consistency/origins.mjs.map +1 -1
  171. package/dist/mjs/internal/fetch/index.mjs +2 -2
  172. package/dist/mjs/internal/fetch/index.mjs.map +1 -1
  173. package/dist/mjs/internal/fetch/stream-state.mjs +2 -2
  174. package/dist/mjs/internal/fetch/stream-state.mjs.map +1 -1
  175. package/dist/mjs/internal/fs/index.mjs +2 -2
  176. package/dist/mjs/internal/fs/index.mjs.map +1 -1
  177. package/dist/mjs/internal/fs/node-adapter.mjs +2 -2
  178. package/dist/mjs/internal/fs/node-adapter.mjs.map +1 -1
  179. package/dist/mjs/internal/module-loader/bundle.mjs +2 -2
  180. package/dist/mjs/internal/module-loader/bundle.mjs.map +1 -1
  181. package/dist/mjs/internal/module-loader/index.mjs +2 -2
  182. package/dist/mjs/internal/module-loader/index.mjs.map +1 -1
  183. package/dist/mjs/internal/module-loader/mappings.mjs +2 -2
  184. package/dist/mjs/internal/module-loader/mappings.mjs.map +1 -1
  185. package/dist/mjs/internal/module-loader/resolve.mjs +2 -2
  186. package/dist/mjs/internal/module-loader/resolve.mjs.map +1 -1
  187. package/dist/mjs/internal/module-loader/strip-types.mjs +2 -2
  188. package/dist/mjs/internal/module-loader/strip-types.mjs.map +1 -1
  189. package/dist/mjs/internal/path/index.mjs +2 -2
  190. package/dist/mjs/internal/path/index.mjs.map +1 -1
  191. package/dist/mjs/internal/playwright/client.mjs +2 -2
  192. package/dist/mjs/internal/playwright/client.mjs.map +1 -1
  193. package/dist/mjs/internal/playwright/handler.mjs +2 -2
  194. package/dist/mjs/internal/playwright/handler.mjs.map +1 -1
  195. package/dist/mjs/internal/playwright/index.mjs +2 -2
  196. package/dist/mjs/internal/playwright/index.mjs.map +1 -1
  197. package/dist/mjs/internal/playwright/types.mjs +2 -2
  198. package/dist/mjs/internal/playwright/types.mjs.map +1 -1
  199. package/dist/mjs/internal/protocol/codec.mjs +2 -2
  200. package/dist/mjs/internal/protocol/codec.mjs.map +1 -1
  201. package/dist/mjs/internal/protocol/framing.mjs +2 -2
  202. package/dist/mjs/internal/protocol/framing.mjs.map +1 -1
  203. package/dist/mjs/internal/protocol/index.mjs +2 -2
  204. package/dist/mjs/internal/protocol/index.mjs.map +1 -1
  205. package/dist/mjs/internal/protocol/marshalValue.mjs +2 -2
  206. package/dist/mjs/internal/protocol/marshalValue.mjs.map +1 -1
  207. package/dist/mjs/internal/protocol/serialization.mjs +2 -2
  208. package/dist/mjs/internal/protocol/serialization.mjs.map +1 -1
  209. package/dist/mjs/internal/protocol/types.mjs +2 -2
  210. package/dist/mjs/internal/protocol/types.mjs.map +1 -1
  211. package/dist/mjs/internal/runtime/index.mjs +2 -2
  212. package/dist/mjs/internal/runtime/index.mjs.map +1 -1
  213. package/dist/mjs/internal/server/index.mjs +2 -2
  214. package/dist/mjs/internal/server/index.mjs.map +1 -1
  215. package/dist/mjs/internal/test-environment/index.mjs +2 -2
  216. package/dist/mjs/internal/test-environment/index.mjs.map +1 -1
  217. package/dist/mjs/internal/timers/index.mjs +2 -2
  218. package/dist/mjs/internal/timers/index.mjs.map +1 -1
  219. package/dist/mjs/internal/transform/index.mjs +2 -2
  220. package/dist/mjs/internal/transform/index.mjs.map +1 -1
  221. package/dist/mjs/internal/typecheck/index.mjs +2 -2
  222. package/dist/mjs/internal/typecheck/index.mjs.map +1 -1
  223. package/dist/mjs/internal/typecheck/isolate-types.mjs +2 -2
  224. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +1 -1
  225. package/dist/mjs/internal/typecheck/typecheck.mjs +2 -2
  226. package/dist/mjs/internal/typecheck/typecheck.mjs.map +1 -1
  227. package/dist/mjs/modules/index.mjs +11 -4
  228. package/dist/mjs/modules/index.mjs.map +3 -3
  229. package/dist/mjs/package.json +1 -1
  230. package/dist/mjs/runtime/script-runtime.mjs +2 -2
  231. package/dist/mjs/runtime/script-runtime.mjs.map +1 -1
  232. package/dist/mjs/server/app-server.mjs +2 -2
  233. package/dist/mjs/server/app-server.mjs.map +1 -1
  234. package/dist/mjs/testing/integration-helpers.mjs +2 -2
  235. package/dist/mjs/testing/integration-helpers.mjs.map +1 -1
  236. package/dist/mjs/typecheck/index.mjs +2 -2
  237. package/dist/mjs/typecheck/index.mjs.map +1 -1
  238. package/dist/mjs/types.mjs +1 -1
  239. package/dist/mjs/types.mjs.map +1 -1
  240. package/package.json +46 -38
package/README.md ADDED
@@ -0,0 +1,254 @@
1
+ # @ricsam/isolate
2
+
3
+ `@ricsam/isolate` is a runtime-centric JavaScript sandbox built on [`isolated-vm`](https://github.com/nicknisi/isolated-vm). It gives you a single host API for running isolated code with web-style capabilities such as `fetch`, files, streams, server handlers, module loading, and Playwright-backed browser tests.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm add @ricsam/isolate isolated-vm
9
+ ```
10
+
11
+ Install Playwright when you want browser runtimes:
12
+
13
+ ```bash
14
+ npm add playwright
15
+ ```
16
+
17
+ ## What You Get
18
+
19
+ `@ricsam/isolate` exports a small top-level API:
20
+
21
+ - `createIsolateHost()` to start, connect to, and manage isolate-backed runtimes
22
+ - `createModuleResolver()` to provide virtual modules, source trees, mounted `node_modules`, and fallback resolution
23
+ - `createFileBindings()` to expose a rooted file API to sandboxed code
24
+ - `getTypeProfile()`, `typecheck()`, and `formatTypecheckErrors()` for sandbox-aware TypeScript tooling
25
+
26
+ The host can create three runtime styles:
27
+
28
+ - `host.createRuntime()` for scripts, agents, and ad hoc execution
29
+ - `host.createAppServer()` for `serve()`-based request handlers
30
+ - `host.createBrowserRuntime()` for Playwright-backed execution
31
+
32
+ ## Host Bindings
33
+
34
+ Each runtime is configured through `bindings`, which describe how sandboxed code talks to the host:
35
+
36
+ - `console` forwards runtime and browser console output
37
+ - `fetch` handles outbound HTTP requests from the sandbox
38
+ - `files` exposes a safe, root-scoped filesystem
39
+ - `modules` resolves virtual modules, source trees, and mounted packages
40
+ - `tools` exposes async host functions and async iterators
41
+
42
+ Every host callback receives a `HostCallContext` with an `AbortSignal`, runtime identity, resource identity, and request metadata.
43
+
44
+ ## Quick Start
45
+
46
+ ```ts
47
+ import {
48
+ createFileBindings,
49
+ createIsolateHost,
50
+ createModuleResolver,
51
+ } from "@ricsam/isolate";
52
+
53
+ const host = await createIsolateHost({
54
+ daemon: {
55
+ socketPath: "/tmp/isolate.sock",
56
+ },
57
+ });
58
+
59
+ const runtime = await host.createRuntime({
60
+ bindings: {
61
+ console: {
62
+ onEntry(entry) {
63
+ if (entry.type === "output") {
64
+ console.log(entry.stdout);
65
+ }
66
+ },
67
+ },
68
+ fetch: async (request) => await fetch(request),
69
+ files: createFileBindings({
70
+ root: process.cwd(),
71
+ allowWrite: true,
72
+ }),
73
+ modules: createModuleResolver()
74
+ .virtual(
75
+ "@/env",
76
+ `export const mode = "sandbox";`,
77
+ { filename: "env.ts", resolveDir: "/app" },
78
+ )
79
+ .virtual(
80
+ "/app/main.ts",
81
+ `
82
+ import { mode } from "@/env";
83
+
84
+ const response = await fetch("https://example.com");
85
+ console.log("mode:", mode);
86
+ console.log("status:", response.status);
87
+ console.log(await greet("isolate"));
88
+ `,
89
+ { filename: "main.ts", resolveDir: "/app" },
90
+ ),
91
+ tools: {
92
+ greet: async (name: string) => `hello ${name}`,
93
+ },
94
+ },
95
+ });
96
+
97
+ try {
98
+ await runtime.eval(`import "/app/main.ts";`, { filename: "/app/entry.ts" });
99
+ } finally {
100
+ await runtime.dispose();
101
+ await host.close();
102
+ }
103
+ ```
104
+
105
+ ## App Servers
106
+
107
+ `createAppServer()` is the long-lived server-oriented API. It boots a runtime around an entry module that calls `serve()` and then lets the host dispatch requests into it.
108
+
109
+ ```ts
110
+ import { createIsolateHost, createModuleResolver } from "@ricsam/isolate";
111
+
112
+ const host = await createIsolateHost();
113
+ const server = await host.createAppServer({
114
+ key: "example/server",
115
+ entry: "/server.ts",
116
+ bindings: {
117
+ modules: createModuleResolver().virtual(
118
+ "/server.ts",
119
+ `
120
+ serve({
121
+ fetch(request) {
122
+ return Response.json({
123
+ pathname: new URL(request.url).pathname,
124
+ });
125
+ },
126
+ });
127
+ `,
128
+ ),
129
+ },
130
+ });
131
+
132
+ const result = await server.handle(new Request("http://localhost/hello"));
133
+ if (result.type === "response") {
134
+ console.log(await result.response.json());
135
+ }
136
+
137
+ await server.dispose();
138
+ await host.close();
139
+ ```
140
+
141
+ `server.handle()` returns either a normal HTTP response or WebSocket upgrade metadata. The `server.ws` helpers let the host continue an upgraded connection by sending open, message, close, and error events back into the runtime.
142
+
143
+ ## Browser Runtimes
144
+
145
+ `createBrowserRuntime()` runs sandboxed code against a Playwright page while keeping the host in control of file access, diagnostics, and browser event collection.
146
+
147
+ ```ts
148
+ import { chromium } from "playwright";
149
+ import { createIsolateHost } from "@ricsam/isolate";
150
+
151
+ const browser = await chromium.launch();
152
+ const context = await browser.newContext();
153
+ const page = await context.newPage();
154
+
155
+ const host = await createIsolateHost();
156
+ const runtime = await host.createBrowserRuntime({
157
+ key: "example/browser",
158
+ bindings: {},
159
+ features: { tests: true },
160
+ browser: {
161
+ page,
162
+ captureConsole: true,
163
+ },
164
+ });
165
+
166
+ const result = await runtime.run(
167
+ `
168
+ test("loads a page", async () => {
169
+ await page.goto("https://example.com");
170
+ await expect(page).toHaveTitle(/Example Domain/);
171
+ });
172
+ `,
173
+ {
174
+ filename: "/browser-test.ts",
175
+ asTestSuite: true,
176
+ timeoutMs: 10_000,
177
+ },
178
+ );
179
+
180
+ console.log(result.tests);
181
+
182
+ await runtime.dispose();
183
+ await context.close();
184
+ await browser.close();
185
+ await host.close();
186
+ ```
187
+
188
+ ## Module Resolution
189
+
190
+ `createModuleResolver()` is a fluent builder. You can mix and match:
191
+
192
+ - `virtual(specifier, source, options)` for inline modules
193
+ - `virtualFile(specifier, filePath, options)` for a host file mapped to a virtual specifier
194
+ - `sourceTree(prefix, loader)` for lazy source loading under a virtual path
195
+ - `mountNodeModules(virtualMount, hostPath)` for package resolution from a real `node_modules`
196
+ - `fallback(loader)` for custom last-resort resolution
197
+
198
+ ## File Bindings
199
+
200
+ `createFileBindings({ root, allowWrite })` creates a filesystem bridge that stays inside the configured root directory. Attempts to escape that root are rejected, and write operations are disabled unless `allowWrite` is set to `true`.
201
+
202
+ ## Typechecking
203
+
204
+ The typecheck helpers let you validate sandbox code against supported capability profiles before executing it.
205
+
206
+ ```ts
207
+ import {
208
+ formatTypecheckErrors,
209
+ getTypeProfile,
210
+ typecheck,
211
+ } from "@ricsam/isolate";
212
+
213
+ const profile = getTypeProfile({
214
+ profile: "browser-test",
215
+ capabilities: ["files"],
216
+ });
217
+
218
+ console.log(profile.include);
219
+
220
+ const result = typecheck({
221
+ code: "page.goto('/')",
222
+ profile: "browser-test",
223
+ });
224
+
225
+ if (!result.success) {
226
+ console.error(formatTypecheckErrors(result.errors));
227
+ }
228
+ ```
229
+
230
+ Built-in profiles:
231
+
232
+ - `backend`
233
+ - `agent`
234
+ - `browser-test`
235
+
236
+ Capabilities can extend a profile with `fetch`, `files`, `tests`, `browser`, `tools`, `console`, `encoding`, and `timers`.
237
+
238
+ ## Daemon CLI
239
+
240
+ The package also exposes an `isolate-daemon` binary:
241
+
242
+ ```bash
243
+ isolate-daemon --socket /tmp/isolate.sock
244
+ ```
245
+
246
+ By default, `createIsolateHost()` will auto-start a daemon when needed. You can also point the host at an already-running daemon with `daemon.socketPath`, or disable auto-start with `daemon.autoStart: false`.
247
+
248
+ ## Development
249
+
250
+ ```bash
251
+ npm run build
252
+ npm run typecheck
253
+ npm test
254
+ ```
@@ -36,7 +36,7 @@ var __export = (target, all) => {
36
36
  });
37
37
  };
38
38
 
39
- // packages/isolate/src/bridge/diagnostics.ts
39
+ // src/bridge/diagnostics.ts
40
40
  var exports_diagnostics = {};
41
41
  __export(exports_diagnostics, {
42
42
  createRuntimeDiagnostics: () => createRuntimeDiagnostics
@@ -55,4 +55,4 @@ function createRuntimeDiagnostics() {
55
55
  };
56
56
  }
57
57
 
58
- //# debugId=608C1D5B69339C8564756E2164756E21
58
+ //# debugId=40FF8D24B6369A0D64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import type { RuntimeDiagnostics } from \"../types.cjs\";\n\nexport interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {\n activeRequests: number;\n activeResources: number;\n pendingFiles: number;\n pendingFetches: number;\n pendingModules: number;\n pendingTools: number;\n streamCount: number;\n lifecycleState: \"idle\" | \"active\" | \"reloading\" | \"disposing\";\n}\n\nexport function createRuntimeDiagnostics(): MutableRuntimeDiagnostics {\n return {\n activeRequests: 0,\n activeResources: 0,\n pendingFiles: 0,\n pendingFetches: 0,\n pendingModules: 0,\n pendingTools: 0,\n streamCount: 0,\n lifecycleState: \"idle\",\n };\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,SAAS,wBAAwB,GAA8B;AAAA,EACpE,OAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,gBAAgB;AAAA,EAClB;AAAA;",
8
- "debugId": "608C1D5B69339C8564756E2164756E21",
8
+ "debugId": "40FF8D24B6369A0D64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -60,7 +60,7 @@ var __export = (target, all) => {
60
60
  });
61
61
  };
62
62
 
63
- // packages/isolate/src/bridge/legacy-adapters.ts
63
+ // src/bridge/legacy-adapters.ts
64
64
  var exports_legacy_adapters = {};
65
65
  __export(exports_legacy_adapters, {
66
66
  tryResolveModule: () => tryResolveModule,
@@ -239,4 +239,4 @@ async function normalizeExplicitModuleResult(specifier, result, fallbackResolveD
239
239
  return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);
240
240
  }
241
241
 
242
- //# debugId=159F6A6EF18B687664756E2164756E21
242
+ //# debugId=D5F0F03020F4D4CD64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.cjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.cjs\";\nimport { getRequestContext } from \"./request-context.cjs\";\nimport type { HostBindings, HostCallContext, ModuleResolveResult, ModuleResolver, ModuleSource, ToolHandler } from \"../types.cjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.cjs\";\n\nfunction createHostCallContext(\n runtimeId: string,\n signal: AbortSignal,\n resourceId: string,\n): HostCallContext {\n const requestContext = getRequestContext();\n return {\n signal,\n runtimeId,\n requestId: requestContext.requestId,\n resourceId,\n metadata: requestContext.metadata,\n };\n}\n\nasync function normalizeModuleResolveResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n const resolved = await result;\n if (resolved == null) {\n return null;\n }\n\n if (typeof resolved === \"string\") {\n const filename = path.posix.basename(specifier) || \"__virtual_module__.js\";\n const resolveDir = specifier.startsWith(\"/\")\n ? path.posix.dirname(specifier)\n : fallbackResolveDir ?? \"/\";\n return {\n code: resolved,\n filename,\n resolveDir,\n };\n }\n\n return {\n static: resolved.static,\n filename: resolved.filename,\n resolveDir: resolved.resolveDir,\n code: resolved.code,\n };\n}\n\nfunction isAsyncGeneratorFunction(handler: ToolHandler): boolean {\n return handler.constructor.name === \"AsyncGeneratorFunction\";\n}\n\nexport function createLegacyRuntimeOptions(\n bindings: HostBindings,\n getRuntimeId: () => string,\n diagnostics: MutableRuntimeDiagnostics,\n): RuntimeOptions {\n const moduleLoader = createLegacyModuleLoader(bindings.modules, getRuntimeId, diagnostics);\n\n return {\n console: bindings.console?.onEntry\n ? {\n onEntry: (entry) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `console:${crypto.randomUUID()}`);\n bindings.console?.onEntry?.(entry, context);\n },\n }\n : undefined,\n fetch: bindings.fetch\n ? async (url, init) => {\n diagnostics.pendingFetches += 1;\n diagnostics.activeResources += 1;\n try {\n const request = new Request(url, {\n method: init.method,\n headers: init.headers,\n body: init.rawBody ? init.rawBody.slice(0) : null,\n });\n const context = createHostCallContext(getRuntimeId(), init.signal, `fetch:${crypto.randomUUID()}`);\n return await bindings.fetch!(request, context);\n } finally {\n diagnostics.pendingFetches -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n fs: bindings.files\n ? {\n readFile: bindings.files.readFile\n ? async (filePath: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:read:${crypto.randomUUID()}`);\n return await bindings.files!.readFile!(filePath, context);\n }\n : undefined,\n writeFile: bindings.files.writeFile\n ? async (filePath: string, data: ArrayBuffer) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:write:${crypto.randomUUID()}`);\n return await bindings.files!.writeFile!(filePath, data, context);\n }\n : undefined,\n unlink: bindings.files.unlink\n ? async (filePath: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:unlink:${crypto.randomUUID()}`);\n return await bindings.files!.unlink!(filePath, context);\n }\n : undefined,\n readdir: bindings.files.readdir\n ? async (dirPath: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:readdir:${crypto.randomUUID()}`);\n return await bindings.files!.readdir!(dirPath, context);\n }\n : undefined,\n mkdir: bindings.files.mkdir\n ? async (dirPath: string, options?: { recursive?: boolean }) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:mkdir:${crypto.randomUUID()}`);\n return await bindings.files!.mkdir!(dirPath, options, context);\n }\n : undefined,\n rmdir: bindings.files.rmdir\n ? async (dirPath: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:rmdir:${crypto.randomUUID()}`);\n return await bindings.files!.rmdir!(dirPath, context);\n }\n : undefined,\n stat: bindings.files.stat\n ? async (filePath: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:stat:${crypto.randomUUID()}`);\n return await bindings.files!.stat!(filePath, context);\n }\n : undefined,\n rename: bindings.files.rename\n ? async (from: string, to: string) => {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `files:rename:${crypto.randomUUID()}`);\n return await bindings.files!.rename!(from, to, context);\n }\n : undefined,\n }\n : undefined,\n moduleLoader,\n customFunctions: bindings.tools\n ? Object.fromEntries(\n Object.entries(bindings.tools).map(([name, handler]) => {\n if (isAsyncGeneratorFunction(handler)) {\n return [\n name,\n {\n type: \"asyncIterator\" as const,\n fn: (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `tool:${name}:${crypto.randomUUID()}`);\n const iterator = handler(...args, context) as AsyncGenerator<unknown, unknown, unknown>;\n return (async function* () {\n try {\n yield* iterator;\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n })();\n },\n },\n ];\n }\n\n return [\n name,\n {\n type: \"async\" as const,\n fn: async (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `tool:${name}:${crypto.randomUUID()}`);\n return await handler(...args, context);\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n },\n },\n ];\n }),\n )\n : undefined,\n };\n}\n\nfunction createLegacyModuleLoader(\n resolver: ModuleResolver | undefined,\n getRuntimeId: () => string,\n diagnostics: MutableRuntimeDiagnostics,\n): ModuleLoaderCallback | undefined {\n if (!resolver) {\n return undefined;\n }\n\n return async (specifier, importer) => {\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(getRuntimeId(), AbortSignal.abort(), `module:${crypto.randomUUID()}`);\n const result = await resolver.resolve(specifier, importer, context);\n return result;\n } finally {\n diagnostics.activeResources -= 1;\n }\n };\n}\n\nexport function createMappedNodeModulesLoader(mappings: Array<{ from: string; to: string }>): ModuleLoaderCallback | undefined {\n if (mappings.length === 0) {\n return undefined;\n }\n throw new Error(\"createMappedNodeModulesLoader is no longer used directly; call createModuleResolver().mountNodeModules() instead.\");\n}\n\nexport async function tryResolveModule(\n resolver: ModuleResolver | undefined,\n specifier: string,\n importer: { path: string; resolveDir: string },\n context: HostCallContext,\n): Promise<ModuleSource | null> {\n if (!resolver) {\n return null;\n }\n return normalizeModuleResolveResult(specifier, resolver.resolve(specifier, importer, context), importer.resolveDir);\n}\n\nexport async function normalizeExplicitModuleResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "159F6A6EF18B687664756E2164756E21",
8
+ "debugId": "D5F0F03020F4D4CD64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -36,7 +36,7 @@ var __export = (target, all) => {
36
36
  });
37
37
  };
38
38
 
39
- // packages/isolate/src/bridge/request-context.ts
39
+ // src/bridge/request-context.ts
40
40
  var exports_request_context = {};
41
41
  __export(exports_request_context, {
42
42
  withRequestContext: () => withRequestContext,
@@ -56,4 +56,4 @@ function getRequestContext() {
56
56
  return requestContextStorage.getStore() ?? { metadata: {} };
57
57
  }
58
58
 
59
- //# debugId=07E8C67E8F8AA63464756E2164756E21
59
+ //# debugId=28CFA6CD346AB89564756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nconst requestContextStorage = new AsyncLocalStorage<{\n requestId?: string;\n metadata: Record<string, string>;\n signal?: AbortSignal;\n}>();\n\nexport function withRequestContext<T>(\n context: { requestId?: string; metadata?: Record<string, string>; signal?: AbortSignal },\n fn: () => Promise<T>,\n): Promise<T> {\n return requestContextStorage.run(\n {\n requestId: context.requestId,\n metadata: context.metadata ?? {},\n signal: context.signal,\n },\n fn,\n );\n}\n\nexport function getRequestContext(): {\n requestId?: string;\n metadata: Record<string, string>;\n signal?: AbortSignal;\n} {\n return requestContextStorage.getStore() ?? { metadata: {} };\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAkC,IAAlC;AAEA,IAAM,wBAAwB,IAAI;AAM3B,SAAS,kBAAqB,CACnC,SACA,IACY;AAAA,EACZ,OAAO,sBAAsB,IAC3B;AAAA,IACE,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,QAAQ,QAAQ;AAAA,EAClB,GACA,EACF;AAAA;AAGK,SAAS,iBAAiB,GAI/B;AAAA,EACA,OAAO,sBAAsB,SAAS,KAAK,EAAE,UAAU,CAAC,EAAE;AAAA;",
8
- "debugId": "07E8C67E8F8AA63464756E2164756E21",
8
+ "debugId": "28CFA6CD346AB89564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -60,7 +60,7 @@ var __export = (target, all) => {
60
60
  });
61
61
  };
62
62
 
63
- // packages/isolate/src/bridge/runtime-bindings.ts
63
+ // src/bridge/runtime-bindings.ts
64
64
  var exports_runtime_bindings = {};
65
65
  __export(exports_runtime_bindings, {
66
66
  tryResolveModule: () => tryResolveModule,
@@ -364,4 +364,4 @@ async function normalizeExplicitModuleResult(specifier, result, fallbackResolveD
364
364
  return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);
365
365
  }
366
366
 
367
- //# debugId=B6915C5A7476524264756E2164756E21
367
+ //# debugId=D27BEABC8CB87D9964756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.cjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.cjs\";\nimport { getRequestContext } from \"./request-context.cjs\";\nimport type {\n HostBindings,\n HostCallContext,\n ModuleResolveResult,\n ModuleResolver,\n ModuleSource,\n ToolHandler,\n} from \"../types.cjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.cjs\";\n\nexport interface RuntimeBindingsAdapter {\n runtimeOptions: RuntimeOptions;\n abort(reason?: unknown): void;\n reset(reason?: unknown): void;\n}\n\nfunction createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n\n const error = new Error(\n typeof reason === \"string\" ? reason : \"The operation was aborted\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction createAbortSignalComposer() {\n const controllers = new Set<AbortController>();\n\n const compose = (...signals: Array<AbortSignal | undefined>): AbortSignal => {\n const activeSignals = signals.filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n\n if (activeSignals.length === 0) {\n return AbortSignal.abort(createAbortError());\n }\n\n const aborted = activeSignals.find((signal) => signal.aborted);\n if (aborted) {\n return AbortSignal.abort(aborted.reason ?? createAbortError());\n }\n\n if (activeSignals.length === 1) {\n return activeSignals[0]!;\n }\n\n const controller = new AbortController();\n controllers.add(controller);\n\n const cleanup = () => {\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n controllers.delete(controller);\n };\n\n const onAbort = (event: Event) => {\n cleanup();\n const signal = event.target as AbortSignal | null;\n controller.abort(signal?.reason ?? createAbortError());\n };\n\n for (const signal of activeSignals) {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n controller.signal.addEventListener(\"abort\", cleanup, { once: true });\n\n return controller.signal;\n };\n\n const abortAll = (reason?: unknown) => {\n const error = createAbortError(reason);\n for (const controller of controllers) {\n if (!controller.signal.aborted) {\n controller.abort(error);\n }\n }\n controllers.clear();\n };\n\n return { compose, abortAll };\n}\n\nfunction createHostCallContextFactory(getRuntimeId: () => string) {\n let runtimeController = new AbortController();\n const composedSignals = createAbortSignalComposer();\n\n const createHostCallContext = (\n resourceId: string,\n baseSignal?: AbortSignal,\n ): HostCallContext => {\n const requestContext = getRequestContext();\n const ownerSignal = requestContext.signal ?? runtimeController.signal;\n const signal = baseSignal\n ? composedSignals.compose(ownerSignal, baseSignal)\n : ownerSignal;\n\n return {\n signal,\n runtimeId: getRuntimeId(),\n requestId: requestContext.requestId,\n resourceId,\n metadata: requestContext.metadata,\n };\n };\n\n const abort = (reason?: unknown) => {\n if (!runtimeController.signal.aborted) {\n runtimeController.abort(createAbortError(reason));\n }\n composedSignals.abortAll(reason);\n };\n\n const reset = (reason?: unknown) => {\n abort(reason);\n runtimeController = new AbortController();\n };\n\n return { createHostCallContext, abort, reset };\n}\n\nasync function normalizeModuleResolveResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n const resolved = await result;\n if (resolved == null) {\n return null;\n }\n\n if (typeof resolved === \"string\") {\n const filename = path.posix.basename(specifier) || \"__virtual_module__.js\";\n const resolveDir = specifier.startsWith(\"/\")\n ? path.posix.dirname(specifier)\n : fallbackResolveDir ?? \"/\";\n return {\n code: resolved,\n filename,\n resolveDir,\n };\n }\n\n return {\n static: resolved.static,\n filename: resolved.filename,\n resolveDir: resolved.resolveDir,\n code: resolved.code,\n };\n}\n\nfunction isAsyncGeneratorFunction(handler: ToolHandler): boolean {\n return handler.constructor.name === \"AsyncGeneratorFunction\";\n}\n\nexport function createRuntimeBindingsAdapter(\n bindings: HostBindings,\n getRuntimeId: () => string,\n diagnostics: MutableRuntimeDiagnostics,\n): RuntimeBindingsAdapter {\n const contextFactory = createHostCallContextFactory(getRuntimeId);\n const moduleLoader = createModuleLoader(\n bindings.modules,\n contextFactory.createHostCallContext,\n diagnostics,\n );\n\n return {\n runtimeOptions: {\n console: bindings.console?.onEntry\n ? {\n onEntry: (entry) => {\n const context = contextFactory.createHostCallContext(\n `console:${crypto.randomUUID()}`,\n );\n bindings.console?.onEntry?.(entry, context);\n },\n }\n : undefined,\n fetch: bindings.fetch\n ? async (url, init) => {\n diagnostics.pendingFetches += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `fetch:${crypto.randomUUID()}`,\n init.signal,\n );\n const request = new Request(url, {\n method: init.method,\n headers: init.headers,\n body: init.rawBody ? init.rawBody.slice(0) : null,\n signal: context.signal,\n });\n return await bindings.fetch!(request, context);\n } finally {\n diagnostics.pendingFetches -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n fs: bindings.files\n ? {\n readFile: bindings.files.readFile\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:read:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readFile!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n writeFile: bindings.files.writeFile\n ? async (filePath: string, data: ArrayBuffer) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:write:${crypto.randomUUID()}`,\n );\n return await bindings.files!.writeFile!(filePath, data, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n unlink: bindings.files.unlink\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:unlink:${crypto.randomUUID()}`,\n );\n return await bindings.files!.unlink!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n readdir: bindings.files.readdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:readdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n mkdir: bindings.files.mkdir\n ? async (dirPath: string, options?: { recursive?: boolean }) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:mkdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.mkdir!(dirPath, options, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rmdir: bindings.files.rmdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rmdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rmdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n stat: bindings.files.stat\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:stat:${crypto.randomUUID()}`,\n );\n return await bindings.files!.stat!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rename: bindings.files.rename\n ? async (from: string, to: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rename:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rename!(from, to, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n }\n : undefined,\n moduleLoader,\n customFunctions: bindings.tools\n ? Object.fromEntries(\n Object.entries(bindings.tools).map(([name, handler]) => {\n if (isAsyncGeneratorFunction(handler)) {\n return [\n name,\n {\n type: \"asyncIterator\" as const,\n fn: (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n const context = contextFactory.createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n const iterator = handler(\n ...args,\n context,\n ) as AsyncGenerator<unknown, unknown, unknown>;\n return (async function* () {\n try {\n yield* iterator;\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n })();\n },\n },\n ];\n }\n\n return [\n name,\n {\n type: \"async\" as const,\n fn: async (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n return await handler(...args, context);\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n },\n },\n ];\n }),\n )\n : undefined,\n },\n abort: contextFactory.abort,\n reset: contextFactory.reset,\n };\n}\n\nfunction createModuleLoader(\n resolver: ModuleResolver | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n diagnostics: MutableRuntimeDiagnostics,\n): ModuleLoaderCallback | undefined {\n if (!resolver) {\n return undefined;\n }\n\n return async (specifier, importer) => {\n diagnostics.pendingModules += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(`module:${crypto.randomUUID()}`);\n return await resolver.resolve(specifier, importer, context);\n } finally {\n diagnostics.pendingModules -= 1;\n diagnostics.activeResources -= 1;\n }\n };\n}\n\nexport async function tryResolveModule(\n resolver: ModuleResolver | undefined,\n specifier: string,\n importer: { path: string; resolveDir: string },\n context: HostCallContext,\n): Promise<ModuleSource | null> {\n if (!resolver) {\n return null;\n }\n return normalizeModuleResolveResult(\n specifier,\n resolver.resolve(specifier, importer, context),\n importer.resolveDir,\n );\n}\n\nexport async function normalizeExplicitModuleResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "B6915C5A7476524264756E2164756E21",
8
+ "debugId": "D27BEABC8CB87D9964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -60,7 +60,7 @@ var __export = (target, all) => {
60
60
  });
61
61
  };
62
62
 
63
- // packages/isolate/src/browser/browser-runtime.ts
63
+ // src/browser/browser-runtime.ts
64
64
  var exports_browser_runtime = {};
65
65
  __export(exports_browser_runtime, {
66
66
  createBrowserRuntimeAdapter: () => createBrowserRuntimeAdapter
@@ -154,4 +154,4 @@ async function createBrowserRuntimeAdapter(createRuntime, options) {
154
154
  };
155
155
  }
156
156
 
157
- //# debugId=3E00DDDDAD28365E64756E2164756E21
157
+ //# debugId=4537F7187943AFB464756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import path from \"node:path\";\nimport { defaultPlaywrightHandler } from \"../internal/playwright/client.cjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.cjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.cjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.cjs\";\nimport type { BrowserRuntime, BrowserRuntimeDiagnostics, CreateBrowserRuntimeOptions } from \"../types.cjs\";\n\nfunction getMimeType(filePath: string): string {\n const ext = path.extname(filePath).toLowerCase();\n const mimeTypes: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".svg\": \"image/svg+xml\",\n \".pdf\": \"application/pdf\",\n \".txt\": \"text/plain\",\n \".html\": \"text/html\",\n \".css\": \"text/css\",\n \".js\": \"application/javascript\",\n \".json\": \"application/json\",\n };\n return mimeTypes[ext] ?? \"application/octet-stream\";\n}\n\nexport async function createBrowserRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateBrowserRuntimeOptions,\n): Promise<BrowserRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"browser-runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n );\n const readFile = options.browser.readFile\n ? async (filePath: string) => {\n const buffer = await options.browser.readFile!(filePath);\n return {\n name: path.basename(filePath),\n mimeType: getMimeType(filePath),\n buffer,\n };\n }\n : undefined;\n const playwrightHandler = defaultPlaywrightHandler(options.browser.page as never, {\n readFile,\n writeFile: options.browser.writeFile as never,\n createPage: options.browser.createPage as never,\n createContext: options.browser.createContext as never,\n });\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: options.features?.tests ?? false,\n playwright: {\n handler: playwrightHandler,\n console: options.browser.captureConsole ?? false,\n onEvent: options.browser.onEvent,\n },\n });\n runtimeId = runtime.id;\n const scriptRuntime = createScriptRuntimeAdapter(runtime, diagnostics, {\n onBeforeDispose: (reason) => bindingsAdapter.abort(reason),\n });\n\n return {\n async run(code, runOptions) {\n await scriptRuntime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n\n if (runOptions?.asTestSuite && (await runtime.testEnvironment.hasTests())) {\n return {\n tests: await runtime.testEnvironment.runTests(runOptions.timeoutMs),\n };\n }\n\n return {};\n },\n async diagnostics(): Promise<BrowserRuntimeDiagnostics> {\n const collectedData = runtime.playwright.getCollectedData();\n return {\n ...(await scriptRuntime.diagnostics()),\n browserConsoleLogs: collectedData.browserConsoleLogs.length,\n networkRequests: collectedData.networkRequests.length,\n networkResponses: collectedData.networkResponses.length,\n pageErrors: collectedData.pageErrors.length,\n requestFailures: collectedData.requestFailures.length,\n collectedData,\n };\n },\n dispose: async (disposeOptions) => {\n await scriptRuntime.dispose(disposeOptions);\n },\n };\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAiB,IAAjB;AACyC,IAAzC;AAEyC,IAAzC;AAC6C,IAA7C;AAC2C,IAA3C;AAGA,SAAS,WAAW,CAAC,UAA0B;AAAA,EAC7C,MAAM,MAAM,yBAAK,QAAQ,QAAQ,EAAE,YAAY;AAAA,EAC/C,MAAM,YAAoC;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,OAAO,UAAU,QAAQ;AAAA;AAG3B,eAAsB,2BAA2B,CAC/C,eACA,SACyB;AAAA,EACzB,MAAM,cAAc,4CAAyB;AAAA,EAC7C,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,WACF;AAAA,EACA,MAAM,WAAW,QAAQ,QAAQ,WAC7B,OAAO,aAAqB;AAAA,IAC1B,MAAM,SAAS,MAAM,QAAQ,QAAQ,SAAU,QAAQ;AAAA,IACvD,OAAO;AAAA,MACL,MAAM,yBAAK,SAAS,QAAQ;AAAA,MAC5B,UAAU,YAAY,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,MAEF;AAAA,EACJ,MAAM,oBAAoB,uCAAyB,QAAQ,QAAQ,MAAe;AAAA,IAChF;AAAA,IACA,WAAW,QAAQ,QAAQ;AAAA,IAC3B,YAAY,QAAQ,QAAQ;AAAA,IAC5B,eAAe,QAAQ,QAAQ;AAAA,EACjC,CAAC;AAAA,EACD,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB,QAAQ,UAAU,SAAS;AAAA,IAC5C,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS,QAAQ,QAAQ,kBAAkB;AAAA,MAC3C,SAAS,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACF,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EACpB,MAAM,gBAAgB,iDAA2B,SAAS,aAAa;AAAA,IACrE,iBAAiB,CAAC,WAAW,gBAAgB,MAAM,MAAM;AAAA,EAC3D,CAAC;AAAA,EAED,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,MAAM,cAAc,KAAK,MAAM;AAAA,QAC7B,UAAU,YAAY;AAAA,QACtB,kBAAkB,YAAY;AAAA,MAChC,CAAC;AAAA,MAED,IAAI,YAAY,eAAgB,MAAM,QAAQ,gBAAgB,SAAS,GAAI;AAAA,QACzE,OAAO;AAAA,UACL,OAAO,MAAM,QAAQ,gBAAgB,SAAS,WAAW,SAAS;AAAA,QACpE;AAAA,MACF;AAAA,MAEA,OAAO,CAAC;AAAA;AAAA,SAEJ,YAAW,GAAuC;AAAA,MACtD,MAAM,gBAAgB,QAAQ,WAAW,iBAAiB;AAAA,MAC1D,OAAO;AAAA,WACD,MAAM,cAAc,YAAY;AAAA,QACpC,oBAAoB,cAAc,mBAAmB;AAAA,QACrD,iBAAiB,cAAc,gBAAgB;AAAA,QAC/C,kBAAkB,cAAc,iBAAiB;AAAA,QACjD,YAAY,cAAc,WAAW;AAAA,QACrC,iBAAiB,cAAc,gBAAgB;AAAA,QAC/C;AAAA,MACF;AAAA;AAAA,IAEF,SAAS,OAAO,mBAAmB;AAAA,MACjC,MAAM,cAAc,QAAQ,cAAc;AAAA;AAAA,EAE9C;AAAA;",
8
- "debugId": "3E00DDDDAD28365E64756E2164756E21",
8
+ "debugId": "4537F7187943AFB464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // packages/isolate/src/daemon.ts
3
+ // src/daemon.ts
4
4
  var import_daemon = require("./internal/daemon/index.cjs");
5
5
  process.removeAllListeners("warning");
6
6
  process.on("warning", (warning) => {
@@ -88,4 +88,4 @@ main().catch((error) => {
88
88
  process.exit(1);
89
89
  });
90
90
 
91
- //# debugId=A3FECC3CB418FD2864756E2164756E21
91
+ //# debugId=80B56BA02F74D8AC64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "#!/usr/bin/env node\n\nprocess.removeAllListeners(\"warning\");\nprocess.on(\"warning\", (warning) => {\n if (\n warning.name === \"ExperimentalWarning\" &&\n warning.message.includes(\"stripTypeScriptTypes\")\n ) {\n return;\n }\n console.warn(warning);\n});\n\nimport { startDaemon, type DaemonOptions } from \"./internal/daemon/index.cjs\";\n\nfunction parseArgs(args: string[]): Partial<DaemonOptions> {\n const options: Partial<DaemonOptions> = {};\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n\n switch (arg) {\n case \"--socket\":\n index += 1;\n if (args[index]) {\n options.socketPath = args[index];\n }\n break;\n case \"--host\":\n index += 1;\n if (args[index]) {\n options.host = args[index];\n options.socketPath = undefined;\n }\n break;\n case \"--port\":\n index += 1;\n if (args[index]) {\n options.port = Number.parseInt(args[index]!, 10);\n options.socketPath = undefined;\n }\n break;\n case \"--max-isolates\":\n index += 1;\n if (args[index]) {\n options.maxIsolates = Number.parseInt(args[index]!, 10);\n }\n break;\n case \"--memory-limit\":\n index += 1;\n if (args[index]) {\n options.defaultMemoryLimitMB = Number.parseInt(args[index]!, 10);\n }\n break;\n case \"--help\":\n case \"-h\":\n console.log(`\nIsolate Daemon - Run isolated-vm runtimes accessible via IPC\n\nUsage:\n isolate-daemon [options]\n\nOptions:\n --socket <path> Unix socket path (default: /tmp/isolate-daemon.sock)\n --host <host> TCP host (default: 127.0.0.1, disables Unix socket)\n --port <port> TCP port (default: 47891, disables Unix socket)\n --max-isolates <n> Maximum isolates (default: 100)\n --memory-limit <mb> Default memory limit in MB (default: 128)\n --help, -h Show this help message\n`);\n process.exit(0);\n default:\n if (arg?.startsWith(\"-\")) {\n console.error(`Unknown option: ${arg}`);\n process.exit(1);\n }\n }\n }\n\n return options;\n}\n\nasync function main() {\n const daemon = await startDaemon(parseArgs(process.argv.slice(2)));\n const shutdown = async () => {\n console.log(\"\\nShutting down...\");\n await daemon.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n\nmain().catch((error) => {\n console.error(\"Failed to start daemon:\", error);\n process.exit(1);\n});\n"
6
6
  ],
7
7
  "mappings": ";;;AAagD,IAAhD;AAXA,QAAQ,mBAAmB,SAAS;AACpC,QAAQ,GAAG,WAAW,CAAC,YAAY;AAAA,EACjC,IACE,QAAQ,SAAS,yBACjB,QAAQ,QAAQ,SAAS,sBAAsB,GAC/C;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ,KAAK,OAAO;AAAA,CACrB;AAID,SAAS,SAAS,CAAC,MAAwC;AAAA,EACzD,MAAM,UAAkC,CAAC;AAAA,EAEzC,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACnD,MAAM,MAAM,KAAK;AAAA,IAEjB,QAAQ;AAAA,WACD;AAAA,QACH,SAAS;AAAA,QACT,IAAI,KAAK,QAAQ;AAAA,UACf,QAAQ,aAAa,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,WACG;AAAA,QACH,SAAS;AAAA,QACT,IAAI,KAAK,QAAQ;AAAA,UACf,QAAQ,OAAO,KAAK;AAAA,UACpB,QAAQ,aAAa;AAAA,QACvB;AAAA,QACA;AAAA,WACG;AAAA,QACH,SAAS;AAAA,QACT,IAAI,KAAK,QAAQ;AAAA,UACf,QAAQ,OAAO,OAAO,SAAS,KAAK,QAAS,EAAE;AAAA,UAC/C,QAAQ,aAAa;AAAA,QACvB;AAAA,QACA;AAAA,WACG;AAAA,QACH,SAAS;AAAA,QACT,IAAI,KAAK,QAAQ;AAAA,UACf,QAAQ,cAAc,OAAO,SAAS,KAAK,QAAS,EAAE;AAAA,QACxD;AAAA,QACA;AAAA,WACG;AAAA,QACH,SAAS;AAAA,QACT,IAAI,KAAK,QAAQ;AAAA,UACf,QAAQ,uBAAuB,OAAO,SAAS,KAAK,QAAS,EAAE;AAAA,QACjE;AAAA,QACA;AAAA,WACG;AAAA,WACA;AAAA,QACH,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAanB;AAAA,QACO,QAAQ,KAAK,CAAC;AAAA;AAAA,QAEd,IAAI,KAAK,WAAW,GAAG,GAAG;AAAA,UACxB,QAAQ,MAAM,mBAAmB,KAAK;AAAA,UACtC,QAAQ,KAAK,CAAC;AAAA,QAChB;AAAA;AAAA,EAEN;AAAA,EAEA,OAAO;AAAA;AAGT,eAAe,IAAI,GAAG;AAAA,EACpB,MAAM,SAAS,MAAM,0BAAY,UAAU,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,EACjE,MAAM,WAAW,YAAY;AAAA,IAC3B,QAAQ,IAAI;AAAA,iBAAoB;AAAA,IAChC,MAAM,OAAO,MAAM;AAAA,IACnB,QAAQ,KAAK,CAAC;AAAA;AAAA,EAGhB,QAAQ,GAAG,UAAU,QAAQ;AAAA,EAC7B,QAAQ,GAAG,WAAW,QAAQ;AAAA;AAGhC,KAAK,EAAE,MAAM,CAAC,UAAU;AAAA,EACtB,QAAQ,MAAM,2BAA2B,KAAK;AAAA,EAC9C,QAAQ,KAAK,CAAC;AAAA,CACf;",
8
- "debugId": "A3FECC3CB418FD2864756E2164756E21",
8
+ "debugId": "80B56BA02F74D8AC64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -60,7 +60,7 @@ var __export = (target, all) => {
60
60
  });
61
61
  };
62
62
 
63
- // packages/isolate/src/files/index.ts
63
+ // src/files/index.ts
64
64
  var exports_files = {};
65
65
  __export(exports_files, {
66
66
  createFileBindings: () => createFileBindings
@@ -137,4 +137,4 @@ function createFileBindings(options) {
137
137
  };
138
138
  }
139
139
 
140
- //# debugId=7ADE4E9E4F27A87864756E2164756E21
140
+ //# debugId=80D418D8F25B3F9C64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { FileBindings } from \"../types.cjs\";\n\nfunction resolveSafePath(root: string, requestedPath: string): string {\n const resolvedRoot = path.resolve(root);\n const resolvedPath = path.resolve(path.join(resolvedRoot, requestedPath));\n if (!resolvedPath.startsWith(`${resolvedRoot}${path.sep}`) && resolvedPath !== resolvedRoot) {\n throw new Error(`Access denied: ${requestedPath}`);\n }\n return resolvedPath;\n}\n\nexport function createFileBindings(options: {\n root: string;\n allowWrite?: boolean;\n}): FileBindings {\n const allowWrite = options.allowWrite ?? false;\n\n return {\n readFile: async (requestedPath) => {\n const safePath = resolveSafePath(options.root, requestedPath);\n const buffer = await fs.readFile(safePath);\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n },\n writeFile: async (requestedPath, data) => {\n if (!allowWrite) {\n throw new Error(\"Write access is disabled for these file bindings.\");\n }\n const safePath = resolveSafePath(options.root, requestedPath);\n await fs.mkdir(path.dirname(safePath), { recursive: true });\n await fs.writeFile(safePath, Buffer.from(data));\n },\n unlink: async (requestedPath) => {\n if (!allowWrite) {\n throw new Error(\"Write access is disabled for these file bindings.\");\n }\n const safePath = resolveSafePath(options.root, requestedPath);\n await fs.unlink(safePath);\n },\n readdir: async (requestedPath) => {\n const safePath = resolveSafePath(options.root, requestedPath);\n return await fs.readdir(safePath);\n },\n mkdir: async (requestedPath, mkdirOptions) => {\n if (!allowWrite) {\n throw new Error(\"Write access is disabled for these file bindings.\");\n }\n const safePath = resolveSafePath(options.root, requestedPath);\n await fs.mkdir(safePath, { recursive: mkdirOptions?.recursive ?? false });\n },\n rmdir: async (requestedPath) => {\n if (!allowWrite) {\n throw new Error(\"Write access is disabled for these file bindings.\");\n }\n const safePath = resolveSafePath(options.root, requestedPath);\n await fs.rmdir(safePath);\n },\n stat: async (requestedPath) => {\n const safePath = resolveSafePath(options.root, requestedPath);\n const stats = await fs.stat(safePath);\n return {\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n size: stats.size,\n };\n },\n rename: async (from, to) => {\n if (!allowWrite) {\n throw new Error(\"Write access is disabled for these file bindings.\");\n }\n const safeFrom = resolveSafePath(options.root, from);\n const safeTo = resolveSafePath(options.root, to);\n await fs.rename(safeFrom, safeTo);\n },\n };\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "7ADE4E9E4F27A87864756E2164756E21",
8
+ "debugId": "80D418D8F25B3F9C64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -60,7 +60,7 @@ var __export = (target, all) => {
60
60
  });
61
61
  };
62
62
 
63
- // packages/isolate/src/host/create-isolate-host.ts
63
+ // src/host/create-isolate-host.ts
64
64
  var exports_create_isolate_host = {};
65
65
  __export(exports_create_isolate_host, {
66
66
  createIsolateHost: () => createIsolateHost
@@ -76,7 +76,7 @@ var import_browser_runtime = require("../browser/browser-runtime.cjs");
76
76
  var import_script_runtime = require("../runtime/script-runtime.cjs");
77
77
  var import_app_server = require("../server/app-server.cjs");
78
78
  function resolveDefaultDaemonEntrypoint() {
79
- const localPath = import_node_path.default.resolve("/home/runner/work/isolate/isolate/packages/isolate/src/host", "../daemon.ts");
79
+ const localPath = import_node_path.default.resolve("/home/runner/work/isolate/isolate/src/host", "../daemon.ts");
80
80
  if (import_node_fs.default.existsSync(localPath)) {
81
81
  return localPath;
82
82
  }
@@ -205,7 +205,7 @@ class HostImpl {
205
205
  }
206
206
  } catch {}
207
207
  const cli = entrypoint ? ["node", "--experimental-strip-types", entrypoint, "--socket", socketPath] : ["isolate-daemon", "--socket", socketPath];
208
- const cwd = this.options.daemon?.cwd ?? (entrypoint ? import_node_path.default.resolve("/home/runner/work/isolate/isolate/packages/isolate/src/host", "../../..") : process.cwd());
208
+ const cwd = this.options.daemon?.cwd ?? (entrypoint ? import_node_path.default.resolve("/home/runner/work/isolate/isolate/src/host", "../..") : process.cwd());
209
209
  this.daemonProcess = import_node_child_process.spawn(cli[0], cli.slice(1), {
210
210
  cwd,
211
211
  stdio: ["ignore", "pipe", "pipe"],
@@ -232,4 +232,4 @@ async function createIsolateHost(options) {
232
232
  return new HostImpl(options);
233
233
  }
234
234
 
235
- //# debugId=3B3183ABB82F66BC64756E2164756E21
235
+ //# debugId=C171316CAF8E438664756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/host/create-isolate-host.ts"],
4
4
  "sourcesContent": [
5
- "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.cjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.cjs\";\nimport { createBrowserRuntimeAdapter } from \"../browser/browser-runtime.cjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.cjs\";\nimport { createAppServerAdapter } from \"../server/app-server.cjs\";\nimport type { CreateBrowserRuntimeOptions, CreateIsolateHostOptions, CreateRuntimeOptions, IsolateHost } from \"../types.cjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\nclass HostImpl implements IsolateHost {\n private readonly options: CreateIsolateHostOptions;\n private daemonProcess: ChildProcess | null = null;\n private connection: DaemonConnection | null = null;\n private connectionPromise: Promise<DaemonConnection> | null = null;\n private readonly servers = new Set<object>();\n private readonly runtimes = new Set<object>();\n\n constructor(options?: CreateIsolateHostOptions) {\n this.options = options ?? {};\n }\n\n async createAppServer(options: CreateRuntimeOptions & { key: string; entry: string; entryFilename?: string; webSockets?: { onCommand?: (command: { type: \"message\" | \"close\"; connectionId: string; data?: string | ArrayBuffer; code?: number; reason?: string }) => void } }) {\n const server = await createAppServerAdapter(() => this.getConnection(), options);\n this.servers.add(server);\n return server;\n }\n\n async createRuntime(options: CreateRuntimeOptions) {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n );\n const runtime = await this.createRemoteRuntime(\n {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: options.features?.tests ?? false,\n },\n options.key,\n );\n runtimeId = runtime.id;\n const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {\n onBeforeDispose: (reason) => bindingsAdapter.abort(reason),\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n async createBrowserRuntime(options: CreateBrowserRuntimeOptions) {\n const browserRuntime = await createBrowserRuntimeAdapter(\n async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key),\n options,\n );\n this.runtimes.add(browserRuntime);\n return browserRuntime;\n }\n\n async diagnostics() {\n return {\n runtimes: this.runtimes.size,\n servers: this.servers.size,\n connected: this.connection?.isConnected() ?? false,\n };\n }\n\n async close(): Promise<void> {\n if (this.connection) {\n await this.connection.close().catch(() => {});\n }\n this.connection = null;\n this.connectionPromise = null;\n\n if (this.daemonProcess) {\n const process = this.daemonProcess;\n this.daemonProcess = null;\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n process.kill(\"SIGKILL\");\n resolve();\n }, 5000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGTERM\");\n });\n }\n }\n\n private async createRemoteRuntime(options: RuntimeOptions, key?: string): Promise<RemoteRuntime> {\n const connection = await this.getConnection();\n if (key) {\n return await connection.createNamespace(key).createRuntime(options);\n }\n return await connection.createRuntime(options);\n }\n\n private async getConnection(): Promise<DaemonConnection> {\n if (this.connection?.isConnected()) {\n return this.connection;\n }\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n await this.ensureDaemon();\n this.connection = await connect({\n socket: this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\",\n timeout: this.options.daemon?.timeoutMs ?? 5000,\n });\n return this.connection;\n })();\n\n return await this.connectionPromise.finally(() => {\n this.connectionPromise = null;\n });\n }\n\n private async ensureDaemon(): Promise<void> {\n if (this.connection?.isConnected()) {\n return;\n }\n\n if (this.options.daemon?.autoStart === false) {\n return;\n }\n\n if (this.daemonProcess) {\n return;\n }\n\n const socketPath = this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\";\n const entrypoint = this.options.daemon?.entrypoint ?? resolveDefaultDaemonEntrypoint();\n\n try {\n if (fs.existsSync(socketPath)) {\n fs.unlinkSync(socketPath);\n }\n } catch {\n // ignore stale socket cleanup failures\n }\n\n const cli = entrypoint\n ? [\"node\", \"--experimental-strip-types\", entrypoint, \"--socket\", socketPath]\n : [\"isolate-daemon\", \"--socket\", socketPath];\n const cwd = this.options.daemon?.cwd ?? (entrypoint ? path.resolve(import.meta.dirname, \"../../..\") : process.cwd());\n this.daemonProcess = spawn(cli[0]!, cli.slice(1), {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n NODE_OPTIONS: \"\",\n },\n });\n\n this.daemonProcess.stdout?.on(\"data\", (data: Buffer) => {\n console.log(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.stderr?.on(\"data\", (data: Buffer) => {\n console.error(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.on(\"exit\", () => {\n this.daemonProcess = null;\n this.connection = null;\n this.connectionPromise = null;\n });\n\n await waitForSocket(socketPath, this.options.daemon?.timeoutMs ?? 10_000);\n }\n}\n\nexport async function createIsolateHost(options?: CreateIsolateHostOptions): Promise<IsolateHost> {\n return new HostImpl(options);\n}\n"
5
+ "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.cjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.cjs\";\nimport { createBrowserRuntimeAdapter } from \"../browser/browser-runtime.cjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.cjs\";\nimport { createAppServerAdapter } from \"../server/app-server.cjs\";\nimport type { CreateBrowserRuntimeOptions, CreateIsolateHostOptions, CreateRuntimeOptions, IsolateHost } from \"../types.cjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\nclass HostImpl implements IsolateHost {\n private readonly options: CreateIsolateHostOptions;\n private daemonProcess: ChildProcess | null = null;\n private connection: DaemonConnection | null = null;\n private connectionPromise: Promise<DaemonConnection> | null = null;\n private readonly servers = new Set<object>();\n private readonly runtimes = new Set<object>();\n\n constructor(options?: CreateIsolateHostOptions) {\n this.options = options ?? {};\n }\n\n async createAppServer(options: CreateRuntimeOptions & { key: string; entry: string; entryFilename?: string; webSockets?: { onCommand?: (command: { type: \"message\" | \"close\"; connectionId: string; data?: string | ArrayBuffer; code?: number; reason?: string }) => void } }) {\n const server = await createAppServerAdapter(() => this.getConnection(), options);\n this.servers.add(server);\n return server;\n }\n\n async createRuntime(options: CreateRuntimeOptions) {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n );\n const runtime = await this.createRemoteRuntime(\n {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: options.features?.tests ?? false,\n },\n options.key,\n );\n runtimeId = runtime.id;\n const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {\n onBeforeDispose: (reason) => bindingsAdapter.abort(reason),\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n async createBrowserRuntime(options: CreateBrowserRuntimeOptions) {\n const browserRuntime = await createBrowserRuntimeAdapter(\n async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key),\n options,\n );\n this.runtimes.add(browserRuntime);\n return browserRuntime;\n }\n\n async diagnostics() {\n return {\n runtimes: this.runtimes.size,\n servers: this.servers.size,\n connected: this.connection?.isConnected() ?? false,\n };\n }\n\n async close(): Promise<void> {\n if (this.connection) {\n await this.connection.close().catch(() => {});\n }\n this.connection = null;\n this.connectionPromise = null;\n\n if (this.daemonProcess) {\n const process = this.daemonProcess;\n this.daemonProcess = null;\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n process.kill(\"SIGKILL\");\n resolve();\n }, 5000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGTERM\");\n });\n }\n }\n\n private async createRemoteRuntime(options: RuntimeOptions, key?: string): Promise<RemoteRuntime> {\n const connection = await this.getConnection();\n if (key) {\n return await connection.createNamespace(key).createRuntime(options);\n }\n return await connection.createRuntime(options);\n }\n\n private async getConnection(): Promise<DaemonConnection> {\n if (this.connection?.isConnected()) {\n return this.connection;\n }\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n await this.ensureDaemon();\n this.connection = await connect({\n socket: this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\",\n timeout: this.options.daemon?.timeoutMs ?? 5000,\n });\n return this.connection;\n })();\n\n return await this.connectionPromise.finally(() => {\n this.connectionPromise = null;\n });\n }\n\n private async ensureDaemon(): Promise<void> {\n if (this.connection?.isConnected()) {\n return;\n }\n\n if (this.options.daemon?.autoStart === false) {\n return;\n }\n\n if (this.daemonProcess) {\n return;\n }\n\n const socketPath = this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\";\n const entrypoint = this.options.daemon?.entrypoint ?? resolveDefaultDaemonEntrypoint();\n\n try {\n if (fs.existsSync(socketPath)) {\n fs.unlinkSync(socketPath);\n }\n } catch {\n // ignore stale socket cleanup failures\n }\n\n const cli = entrypoint\n ? [\"node\", \"--experimental-strip-types\", entrypoint, \"--socket\", socketPath]\n : [\"isolate-daemon\", \"--socket\", socketPath];\n const cwd = this.options.daemon?.cwd ?? (entrypoint ? path.resolve(import.meta.dirname, \"../..\") : process.cwd());\n this.daemonProcess = spawn(cli[0]!, cli.slice(1), {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n NODE_OPTIONS: \"\",\n },\n });\n\n this.daemonProcess.stdout?.on(\"data\", (data: Buffer) => {\n console.log(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.stderr?.on(\"data\", (data: Buffer) => {\n console.error(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.on(\"exit\", () => {\n this.daemonProcess = null;\n this.connection = null;\n this.connectionPromise = null;\n });\n\n await waitForSocket(socketPath, this.options.daemon?.timeoutMs ?? 10_000);\n }\n}\n\nexport async function createIsolateHost(options?: CreateIsolateHostOptions): Promise<IsolateHost> {\n return new HostImpl(options);\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "3B3183ABB82F66BC64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "C171316CAF8E438664756E2164756E21",
9
9
  "names": []
10
10
  }