@ricsam/isolate 0.0.1 → 0.1.0

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 (299) hide show
  1. package/dist/cjs/bridge/diagnostics.cjs +58 -0
  2. package/dist/cjs/bridge/diagnostics.cjs.map +10 -0
  3. package/dist/cjs/bridge/legacy-adapters.cjs +242 -0
  4. package/dist/cjs/bridge/legacy-adapters.cjs.map +10 -0
  5. package/dist/cjs/bridge/request-context.cjs +59 -0
  6. package/dist/cjs/bridge/request-context.cjs.map +10 -0
  7. package/dist/cjs/bridge/runtime-bindings.cjs +367 -0
  8. package/dist/cjs/bridge/runtime-bindings.cjs.map +10 -0
  9. package/dist/cjs/browser/browser-runtime.cjs +157 -0
  10. package/dist/cjs/browser/browser-runtime.cjs.map +10 -0
  11. package/dist/cjs/daemon.cjs +91 -0
  12. package/dist/cjs/daemon.cjs.map +10 -0
  13. package/dist/cjs/files/index.cjs +140 -0
  14. package/dist/cjs/files/index.cjs.map +10 -0
  15. package/dist/cjs/host/create-isolate-host.cjs +235 -0
  16. package/dist/cjs/host/create-isolate-host.cjs.map +10 -0
  17. package/dist/cjs/host/index.cjs +47 -0
  18. package/dist/cjs/host/index.cjs.map +10 -0
  19. package/dist/cjs/index.cjs +55 -0
  20. package/dist/cjs/index.cjs.map +10 -0
  21. package/dist/cjs/internal/client/connection.cjs +1919 -0
  22. package/dist/cjs/internal/client/connection.cjs.map +10 -0
  23. package/dist/cjs/internal/client/index.cjs +48 -0
  24. package/dist/cjs/internal/client/index.cjs.map +10 -0
  25. package/dist/cjs/internal/client/types.cjs +30 -0
  26. package/dist/cjs/internal/client/types.cjs.map +9 -0
  27. package/dist/cjs/internal/console/index.cjs +506 -0
  28. package/dist/cjs/internal/console/index.cjs.map +10 -0
  29. package/dist/cjs/internal/console/utils.cjs +70 -0
  30. package/dist/cjs/internal/console/utils.cjs.map +10 -0
  31. package/dist/cjs/internal/core/index.cjs +2745 -0
  32. package/dist/cjs/internal/core/index.cjs.map +10 -0
  33. package/dist/cjs/internal/crypto/index.cjs +470 -0
  34. package/dist/cjs/internal/crypto/index.cjs.map +10 -0
  35. package/dist/cjs/internal/daemon/callback-fs-handler.cjs +355 -0
  36. package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +10 -0
  37. package/dist/cjs/internal/daemon/connection.cjs +1952 -0
  38. package/dist/cjs/internal/daemon/connection.cjs.map +10 -0
  39. package/dist/cjs/internal/daemon/daemon.cjs +98 -0
  40. package/dist/cjs/internal/daemon/daemon.cjs.map +10 -0
  41. package/dist/cjs/internal/daemon/index.cjs +145 -0
  42. package/dist/cjs/internal/daemon/index.cjs.map +10 -0
  43. package/dist/cjs/internal/daemon/runtime-pool.cjs +106 -0
  44. package/dist/cjs/internal/daemon/runtime-pool.cjs.map +10 -0
  45. package/dist/cjs/internal/daemon/types.cjs +30 -0
  46. package/dist/cjs/internal/daemon/types.cjs.map +9 -0
  47. package/dist/cjs/internal/encoding/index.cjs +419 -0
  48. package/dist/cjs/internal/encoding/index.cjs.map +10 -0
  49. package/dist/cjs/internal/fetch/consistency/origins.cjs +598 -0
  50. package/dist/cjs/internal/fetch/consistency/origins.cjs.map +10 -0
  51. package/dist/cjs/internal/fetch/index.cjs +2640 -0
  52. package/dist/cjs/internal/fetch/index.cjs.map +10 -0
  53. package/dist/cjs/internal/fetch/stream-state.cjs +256 -0
  54. package/dist/cjs/internal/fetch/stream-state.cjs.map +10 -0
  55. package/dist/cjs/internal/fs/index.cjs +847 -0
  56. package/dist/cjs/internal/fs/index.cjs.map +10 -0
  57. package/dist/cjs/internal/fs/node-adapter.cjs +254 -0
  58. package/dist/cjs/internal/fs/node-adapter.cjs.map +10 -0
  59. package/dist/cjs/internal/module-loader/bundle.cjs +482 -0
  60. package/dist/cjs/internal/module-loader/bundle.cjs.map +10 -0
  61. package/dist/cjs/internal/module-loader/index.cjs +240 -0
  62. package/dist/cjs/internal/module-loader/index.cjs.map +10 -0
  63. package/dist/cjs/internal/module-loader/mappings.cjs +120 -0
  64. package/dist/cjs/internal/module-loader/mappings.cjs.map +10 -0
  65. package/dist/cjs/internal/module-loader/resolve.cjs +177 -0
  66. package/dist/cjs/internal/module-loader/resolve.cjs.map +10 -0
  67. package/dist/cjs/internal/module-loader/strip-types.cjs +236 -0
  68. package/dist/cjs/internal/module-loader/strip-types.cjs.map +10 -0
  69. package/dist/cjs/internal/path/index.cjs +503 -0
  70. package/dist/cjs/internal/path/index.cjs.map +10 -0
  71. package/dist/cjs/internal/playwright/client.cjs +49 -0
  72. package/dist/cjs/internal/playwright/client.cjs.map +10 -0
  73. package/dist/cjs/internal/playwright/handler.cjs +1416 -0
  74. package/dist/cjs/internal/playwright/handler.cjs.map +10 -0
  75. package/dist/cjs/internal/playwright/index.cjs +1289 -0
  76. package/dist/cjs/internal/playwright/index.cjs.map +10 -0
  77. package/dist/cjs/internal/playwright/types.cjs +47 -0
  78. package/dist/cjs/internal/playwright/types.cjs.map +10 -0
  79. package/dist/cjs/internal/protocol/codec.cjs +510 -0
  80. package/dist/cjs/internal/protocol/codec.cjs.map +10 -0
  81. package/dist/cjs/internal/protocol/framing.cjs +141 -0
  82. package/dist/cjs/internal/protocol/framing.cjs.map +10 -0
  83. package/dist/cjs/internal/protocol/index.cjs +110 -0
  84. package/dist/cjs/internal/protocol/index.cjs.map +10 -0
  85. package/dist/cjs/internal/protocol/marshalValue.cjs +518 -0
  86. package/dist/cjs/internal/protocol/marshalValue.cjs.map +10 -0
  87. package/dist/cjs/internal/protocol/serialization.cjs +109 -0
  88. package/dist/cjs/internal/protocol/serialization.cjs.map +10 -0
  89. package/dist/cjs/internal/protocol/types.cjs +181 -0
  90. package/dist/cjs/internal/protocol/types.cjs.map +10 -0
  91. package/dist/cjs/internal/runtime/index.cjs +1235 -0
  92. package/dist/cjs/internal/runtime/index.cjs.map +10 -0
  93. package/dist/cjs/internal/server/index.cjs +223 -0
  94. package/dist/cjs/internal/server/index.cjs.map +10 -0
  95. package/dist/cjs/internal/test-environment/index.cjs +1415 -0
  96. package/dist/cjs/internal/test-environment/index.cjs.map +10 -0
  97. package/dist/cjs/internal/timers/index.cjs +200 -0
  98. package/dist/cjs/internal/timers/index.cjs.map +10 -0
  99. package/dist/cjs/internal/transform/index.cjs +361 -0
  100. package/dist/cjs/internal/transform/index.cjs.map +10 -0
  101. package/dist/cjs/internal/typecheck/index.cjs +60 -0
  102. package/dist/cjs/internal/typecheck/index.cjs.map +10 -0
  103. package/dist/cjs/internal/typecheck/isolate-types.cjs +2614 -0
  104. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +10 -0
  105. package/dist/cjs/internal/typecheck/typecheck.cjs +131 -0
  106. package/dist/cjs/internal/typecheck/typecheck.cjs.map +10 -0
  107. package/dist/cjs/modules/index.cjs +160 -0
  108. package/dist/cjs/modules/index.cjs.map +10 -0
  109. package/dist/cjs/package.json +5 -0
  110. package/dist/cjs/runtime/script-runtime.cjs +97 -0
  111. package/dist/cjs/runtime/script-runtime.cjs.map +10 -0
  112. package/dist/cjs/server/app-server.cjs +158 -0
  113. package/dist/cjs/server/app-server.cjs.map +10 -0
  114. package/dist/cjs/testing/integration-helpers.cjs +127 -0
  115. package/dist/cjs/testing/integration-helpers.cjs.map +10 -0
  116. package/dist/cjs/typecheck/index.cjs +96 -0
  117. package/dist/cjs/typecheck/index.cjs.map +10 -0
  118. package/dist/cjs/types.cjs +30 -0
  119. package/dist/cjs/types.cjs.map +9 -0
  120. package/dist/mjs/bridge/diagnostics.mjs +18 -0
  121. package/dist/mjs/bridge/diagnostics.mjs.map +10 -0
  122. package/dist/mjs/bridge/legacy-adapters.mjs +178 -0
  123. package/dist/mjs/bridge/legacy-adapters.mjs.map +10 -0
  124. package/dist/mjs/bridge/request-context.mjs +19 -0
  125. package/dist/mjs/bridge/request-context.mjs.map +10 -0
  126. package/dist/mjs/bridge/runtime-bindings.mjs +303 -0
  127. package/dist/mjs/bridge/runtime-bindings.mjs.map +10 -0
  128. package/dist/mjs/browser/browser-runtime.mjs +93 -0
  129. package/dist/mjs/browser/browser-runtime.mjs.map +10 -0
  130. package/dist/mjs/daemon.mjs +91 -0
  131. package/dist/mjs/daemon.mjs.map +10 -0
  132. package/dist/mjs/files/index.mjs +76 -0
  133. package/dist/mjs/files/index.mjs.map +10 -0
  134. package/dist/mjs/host/create-isolate-host.mjs +171 -0
  135. package/dist/mjs/host/create-isolate-host.mjs.map +10 -0
  136. package/dist/mjs/host/index.mjs +7 -0
  137. package/dist/mjs/host/index.mjs.map +10 -0
  138. package/dist/mjs/index.mjs +15 -0
  139. package/dist/mjs/index.mjs.map +10 -0
  140. package/dist/mjs/internal/client/connection.mjs +1872 -0
  141. package/dist/mjs/internal/client/connection.mjs.map +10 -0
  142. package/dist/mjs/internal/client/index.mjs +8 -0
  143. package/dist/mjs/internal/client/index.mjs.map +10 -0
  144. package/dist/mjs/internal/client/types.mjs +2 -0
  145. package/dist/mjs/internal/client/types.mjs.map +9 -0
  146. package/dist/mjs/internal/console/index.mjs +442 -0
  147. package/dist/mjs/internal/console/index.mjs.map +10 -0
  148. package/dist/mjs/internal/console/utils.mjs +30 -0
  149. package/dist/mjs/internal/console/utils.mjs.map +10 -0
  150. package/dist/mjs/internal/core/index.mjs +2681 -0
  151. package/dist/mjs/internal/core/index.mjs.map +10 -0
  152. package/dist/mjs/internal/crypto/index.mjs +406 -0
  153. package/dist/mjs/internal/crypto/index.mjs.map +10 -0
  154. package/dist/mjs/internal/daemon/callback-fs-handler.mjs +315 -0
  155. package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +10 -0
  156. package/dist/mjs/internal/daemon/connection.mjs +1931 -0
  157. package/dist/mjs/internal/daemon/connection.mjs.map +10 -0
  158. package/dist/mjs/internal/daemon/daemon.mjs +98 -0
  159. package/dist/mjs/internal/daemon/daemon.mjs.map +10 -0
  160. package/dist/mjs/internal/daemon/index.mjs +105 -0
  161. package/dist/mjs/internal/daemon/index.mjs.map +10 -0
  162. package/dist/mjs/internal/daemon/runtime-pool.mjs +66 -0
  163. package/dist/mjs/internal/daemon/runtime-pool.mjs.map +10 -0
  164. package/dist/mjs/internal/daemon/types.mjs +2 -0
  165. package/dist/mjs/internal/daemon/types.mjs.map +9 -0
  166. package/dist/mjs/internal/encoding/index.mjs +379 -0
  167. package/dist/mjs/internal/encoding/index.mjs.map +10 -0
  168. package/dist/mjs/internal/fetch/consistency/origins.mjs +558 -0
  169. package/dist/mjs/internal/fetch/consistency/origins.mjs.map +10 -0
  170. package/dist/mjs/internal/fetch/index.mjs +2580 -0
  171. package/dist/mjs/internal/fetch/index.mjs.map +10 -0
  172. package/dist/mjs/internal/fetch/stream-state.mjs +216 -0
  173. package/dist/mjs/internal/fetch/stream-state.mjs.map +10 -0
  174. package/dist/mjs/internal/fs/index.mjs +783 -0
  175. package/dist/mjs/internal/fs/index.mjs.map +10 -0
  176. package/dist/mjs/internal/fs/node-adapter.mjs +190 -0
  177. package/dist/mjs/internal/fs/node-adapter.mjs.map +10 -0
  178. package/dist/mjs/internal/module-loader/bundle.mjs +418 -0
  179. package/dist/mjs/internal/module-loader/bundle.mjs.map +10 -0
  180. package/dist/mjs/internal/module-loader/index.mjs +185 -0
  181. package/dist/mjs/internal/module-loader/index.mjs.map +10 -0
  182. package/dist/mjs/internal/module-loader/mappings.mjs +80 -0
  183. package/dist/mjs/internal/module-loader/mappings.mjs.map +10 -0
  184. package/dist/mjs/internal/module-loader/resolve.mjs +113 -0
  185. package/dist/mjs/internal/module-loader/resolve.mjs.map +10 -0
  186. package/dist/mjs/internal/module-loader/strip-types.mjs +172 -0
  187. package/dist/mjs/internal/module-loader/strip-types.mjs.map +10 -0
  188. package/dist/mjs/internal/path/index.mjs +463 -0
  189. package/dist/mjs/internal/path/index.mjs.map +10 -0
  190. package/dist/mjs/internal/playwright/client.mjs +13 -0
  191. package/dist/mjs/internal/playwright/client.mjs.map +10 -0
  192. package/dist/mjs/internal/playwright/handler.mjs +1378 -0
  193. package/dist/mjs/internal/playwright/handler.mjs.map +10 -0
  194. package/dist/mjs/internal/playwright/index.mjs +1234 -0
  195. package/dist/mjs/internal/playwright/index.mjs.map +10 -0
  196. package/dist/mjs/internal/playwright/types.mjs +7 -0
  197. package/dist/mjs/internal/playwright/types.mjs.map +10 -0
  198. package/dist/mjs/internal/protocol/codec.mjs +470 -0
  199. package/dist/mjs/internal/protocol/codec.mjs.map +10 -0
  200. package/dist/mjs/internal/protocol/framing.mjs +101 -0
  201. package/dist/mjs/internal/protocol/framing.mjs.map +10 -0
  202. package/dist/mjs/internal/protocol/index.mjs +98 -0
  203. package/dist/mjs/internal/protocol/index.mjs.map +10 -0
  204. package/dist/mjs/internal/protocol/marshalValue.mjs +494 -0
  205. package/dist/mjs/internal/protocol/marshalValue.mjs.map +10 -0
  206. package/dist/mjs/internal/protocol/serialization.mjs +69 -0
  207. package/dist/mjs/internal/protocol/serialization.mjs.map +10 -0
  208. package/dist/mjs/internal/protocol/types.mjs +141 -0
  209. package/dist/mjs/internal/protocol/types.mjs.map +10 -0
  210. package/dist/mjs/internal/runtime/index.mjs +1198 -0
  211. package/dist/mjs/internal/runtime/index.mjs.map +10 -0
  212. package/dist/mjs/internal/server/index.mjs +183 -0
  213. package/dist/mjs/internal/server/index.mjs.map +10 -0
  214. package/dist/mjs/internal/test-environment/index.mjs +1351 -0
  215. package/dist/mjs/internal/test-environment/index.mjs.map +10 -0
  216. package/dist/mjs/internal/timers/index.mjs +136 -0
  217. package/dist/mjs/internal/timers/index.mjs.map +10 -0
  218. package/dist/mjs/internal/transform/index.mjs +321 -0
  219. package/dist/mjs/internal/transform/index.mjs.map +10 -0
  220. package/dist/mjs/internal/typecheck/index.mjs +35 -0
  221. package/dist/mjs/internal/typecheck/index.mjs.map +10 -0
  222. package/dist/mjs/internal/typecheck/isolate-types.mjs +2574 -0
  223. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +10 -0
  224. package/dist/mjs/internal/typecheck/typecheck.mjs +91 -0
  225. package/dist/mjs/internal/typecheck/typecheck.mjs.map +10 -0
  226. package/dist/mjs/modules/index.mjs +96 -0
  227. package/dist/mjs/modules/index.mjs.map +10 -0
  228. package/dist/mjs/package.json +5 -0
  229. package/dist/mjs/runtime/script-runtime.mjs +57 -0
  230. package/dist/mjs/runtime/script-runtime.mjs.map +10 -0
  231. package/dist/mjs/server/app-server.mjs +118 -0
  232. package/dist/mjs/server/app-server.mjs.map +10 -0
  233. package/dist/mjs/testing/integration-helpers.mjs +63 -0
  234. package/dist/mjs/testing/integration-helpers.mjs.map +10 -0
  235. package/dist/mjs/typecheck/index.mjs +56 -0
  236. package/dist/mjs/typecheck/index.mjs.map +10 -0
  237. package/dist/mjs/types.mjs +2 -0
  238. package/dist/mjs/types.mjs.map +9 -0
  239. package/dist/types/bridge/diagnostics.d.ts +12 -0
  240. package/dist/types/bridge/legacy-adapters.d.ts +14 -0
  241. package/dist/types/bridge/request-context.d.ts +10 -0
  242. package/dist/types/bridge/runtime-bindings.d.ts +14 -0
  243. package/dist/types/browser/browser-runtime.d.ts +3 -0
  244. package/dist/types/daemon.d.ts +2 -0
  245. package/dist/types/files/index.d.ts +5 -0
  246. package/dist/types/host/create-isolate-host.d.ts +2 -0
  247. package/dist/types/host/index.d.ts +1 -0
  248. package/dist/types/index.d.ts +5 -0
  249. package/dist/types/internal/client/connection.d.ts +9 -0
  250. package/dist/types/internal/client/index.d.ts +8 -0
  251. package/dist/types/internal/client/types.d.ts +198 -0
  252. package/dist/types/internal/console/index.d.ts +108 -0
  253. package/dist/types/internal/console/utils.d.ts +27 -0
  254. package/dist/types/internal/core/index.d.ts +119 -0
  255. package/dist/types/internal/crypto/index.d.ts +18 -0
  256. package/dist/types/internal/daemon/callback-fs-handler.d.ts +28 -0
  257. package/dist/types/internal/daemon/connection.d.ts +9 -0
  258. package/dist/types/internal/daemon/daemon.d.ts +2 -0
  259. package/dist/types/internal/daemon/index.d.ts +14 -0
  260. package/dist/types/internal/daemon/runtime-pool.d.ts +16 -0
  261. package/dist/types/internal/daemon/types.d.ts +211 -0
  262. package/dist/types/internal/encoding/index.d.ts +21 -0
  263. package/dist/types/internal/fetch/consistency/origins.d.ts +179 -0
  264. package/dist/types/internal/fetch/index.d.ts +93 -0
  265. package/dist/types/internal/fetch/stream-state.d.ts +65 -0
  266. package/dist/types/internal/fs/index.d.ts +70 -0
  267. package/dist/types/internal/fs/node-adapter.d.ts +24 -0
  268. package/dist/types/internal/module-loader/bundle.d.ts +33 -0
  269. package/dist/types/internal/module-loader/index.d.ts +30 -0
  270. package/dist/types/internal/module-loader/mappings.d.ts +47 -0
  271. package/dist/types/internal/module-loader/resolve.d.ts +26 -0
  272. package/dist/types/internal/module-loader/strip-types.d.ts +19 -0
  273. package/dist/types/internal/path/index.d.ts +23 -0
  274. package/dist/types/internal/playwright/client.d.ts +7 -0
  275. package/dist/types/internal/playwright/handler.d.ts +44 -0
  276. package/dist/types/internal/playwright/index.d.ts +14 -0
  277. package/dist/types/internal/playwright/types.d.ts +145 -0
  278. package/dist/types/internal/protocol/codec.d.ts +242 -0
  279. package/dist/types/internal/protocol/framing.d.ts +89 -0
  280. package/dist/types/internal/protocol/index.d.ts +10 -0
  281. package/dist/types/internal/protocol/marshalValue.d.ts +79 -0
  282. package/dist/types/internal/protocol/serialization.d.ts +23 -0
  283. package/dist/types/internal/protocol/types.d.ts +996 -0
  284. package/dist/types/internal/runtime/index.d.ts +200 -0
  285. package/dist/types/internal/server/index.d.ts +42 -0
  286. package/dist/types/internal/test-environment/index.d.ts +112 -0
  287. package/dist/types/internal/timers/index.d.ts +22 -0
  288. package/dist/types/internal/transform/index.d.ts +36 -0
  289. package/dist/types/internal/typecheck/index.d.ts +7 -0
  290. package/dist/types/internal/typecheck/isolate-types.d.ts +94 -0
  291. package/dist/types/internal/typecheck/typecheck.d.ts +148 -0
  292. package/dist/types/modules/index.d.ts +2 -0
  293. package/dist/types/runtime/script-runtime.d.ts +6 -0
  294. package/dist/types/server/app-server.d.ts +3 -0
  295. package/dist/types/testing/integration-helpers.d.ts +9 -0
  296. package/dist/types/typecheck/index.d.ts +8 -0
  297. package/dist/types/types.d.ts +233 -0
  298. package/package.json +74 -6
  299. package/README.md +0 -45
@@ -0,0 +1,108 @@
1
+ import ivm from "isolated-vm";
2
+ /**
3
+ * Console entry types for structured console output.
4
+ * Each entry type captures the specific data needed to render like DevTools.
5
+ * Output is pre-formatted as stdout strings (like Node.js console) inside the sandbox.
6
+ */
7
+ export type ConsoleEntry = {
8
+ type: "output";
9
+ level: "log" | "warn" | "error" | "info" | "debug";
10
+ stdout: string;
11
+ groupDepth: number;
12
+ } | {
13
+ /** Browser console output (from Playwright page, not sandbox) */
14
+ type: "browserOutput";
15
+ level: string;
16
+ stdout: string;
17
+ location?: {
18
+ url?: string;
19
+ lineNumber?: number;
20
+ columnNumber?: number;
21
+ };
22
+ timestamp: number;
23
+ } | {
24
+ type: "dir";
25
+ stdout: string;
26
+ groupDepth: number;
27
+ } | {
28
+ type: "table";
29
+ stdout: string;
30
+ groupDepth: number;
31
+ } | {
32
+ type: "time";
33
+ label: string;
34
+ duration: number;
35
+ groupDepth: number;
36
+ } | {
37
+ type: "timeLog";
38
+ label: string;
39
+ duration: number;
40
+ stdout: string;
41
+ groupDepth: number;
42
+ } | {
43
+ type: "count";
44
+ label: string;
45
+ count: number;
46
+ groupDepth: number;
47
+ } | {
48
+ type: "countReset";
49
+ label: string;
50
+ groupDepth: number;
51
+ } | {
52
+ type: "assert";
53
+ stdout: string;
54
+ groupDepth: number;
55
+ } | {
56
+ type: "group";
57
+ label: string;
58
+ collapsed: boolean;
59
+ groupDepth: number;
60
+ } | {
61
+ type: "groupEnd";
62
+ groupDepth: number;
63
+ } | {
64
+ type: "clear";
65
+ } | {
66
+ type: "trace";
67
+ stdout: string;
68
+ stack: string;
69
+ groupDepth: number;
70
+ };
71
+ /**
72
+ * Console options with a single structured callback.
73
+ */
74
+ export interface ConsoleOptions {
75
+ /**
76
+ * Callback invoked for each console operation.
77
+ * Receives a structured entry with all data needed to render the output.
78
+ */
79
+ onEntry?: (entry: ConsoleEntry) => void;
80
+ }
81
+ /**
82
+ * Console handle for accessing internal state.
83
+ */
84
+ export interface ConsoleHandle {
85
+ dispose(): void;
86
+ reset(): void;
87
+ getTimers(): Map<string, number>;
88
+ getCounters(): Map<string, number>;
89
+ getGroupDepth(): number;
90
+ }
91
+ /**
92
+ * Setup console API in an isolated-vm context
93
+ *
94
+ * Injects console.log, console.warn, console.error, console.info, console.debug,
95
+ * console.trace, console.dir, console.table, console.time, console.timeEnd,
96
+ * console.timeLog, console.count, console.countReset, console.group,
97
+ * console.groupCollapsed, console.groupEnd, console.clear, console.assert
98
+ *
99
+ * @example
100
+ * const handle = await setupConsole(context, {
101
+ * onEntry: (entry) => {
102
+ * if (entry.type === 'output') {
103
+ * console.log(`[${entry.level}]`, ...entry.args);
104
+ * }
105
+ * }
106
+ * });
107
+ */
108
+ export declare function setupConsole(context: ivm.Context, options?: ConsoleOptions): Promise<ConsoleHandle>;
@@ -0,0 +1,27 @@
1
+ import type { ConsoleOptions } from "./index.ts";
2
+ /**
3
+ * Simple console callback interface for basic usage.
4
+ */
5
+ export interface SimpleConsoleCallbacks {
6
+ log?: (message: string) => void;
7
+ warn?: (message: string) => void;
8
+ error?: (message: string) => void;
9
+ info?: (message: string) => void;
10
+ debug?: (message: string) => void;
11
+ }
12
+ /**
13
+ * Helper to create ConsoleOptions from simple callbacks.
14
+ * Routes log-level outputs to the appropriate callback and handles assertions.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const runtime = await createRuntime({
19
+ * console: simpleConsoleHandler({
20
+ * log: (msg) => console.log('[sandbox]', msg),
21
+ * warn: (msg) => console.warn('[sandbox]', msg),
22
+ * error: (msg) => console.error('[sandbox]', msg),
23
+ * })
24
+ * });
25
+ * ```
26
+ */
27
+ export declare function simpleConsoleHandler(callbacks: SimpleConsoleCallbacks): ConsoleOptions;
@@ -0,0 +1,119 @@
1
+ import ivm from "isolated-vm";
2
+ export type { Isolate, Context, Reference } from "isolated-vm";
3
+ /**
4
+ * Clear all instance state (for testing)
5
+ */
6
+ export declare function clearAllInstanceState(): void;
7
+ /**
8
+ * Cleanup all handles created during unmarshalling for a context
9
+ */
10
+ export declare function cleanupUnmarshaledHandles(context: ivm.Context): void;
11
+ export interface MarshalOptions {
12
+ maxDepth?: number;
13
+ }
14
+ export interface UnmarshalOptions {
15
+ maxDepth?: number;
16
+ }
17
+ /**
18
+ * Marshal a JavaScript value to an isolated-vm Reference.
19
+ * Converts host values into values that can be used inside the isolate.
20
+ */
21
+ export declare function marshal(context: ivm.Context, value: unknown, options?: MarshalOptions): ivm.Reference;
22
+ /**
23
+ * Unmarshal an isolated-vm Reference or value to a JavaScript value.
24
+ * Converts isolate values back to host values.
25
+ */
26
+ export declare function unmarshal(context: ivm.Context, value: ivm.Reference | unknown, options?: UnmarshalOptions): unknown;
27
+ /**
28
+ * Scope for managing reference lifecycle
29
+ */
30
+ export interface Scope {
31
+ /**
32
+ * Track a reference for automatic cleanup when scope exits
33
+ */
34
+ manage<T extends ivm.Reference>(ref: T): T;
35
+ /**
36
+ * Marshal a value and track the resulting reference
37
+ */
38
+ marshal(value: unknown, options?: MarshalOptions): ivm.Reference;
39
+ }
40
+ /**
41
+ * Execute a synchronous callback with automatic reference cleanup.
42
+ * All references tracked via scope.manage() will be released when the scope exits.
43
+ */
44
+ export declare function withScope<T>(context: ivm.Context, callback: (scope: Scope) => T): T;
45
+ /**
46
+ * Execute an async callback with automatic reference cleanup.
47
+ * All references tracked via scope.manage() will be released when the scope exits.
48
+ */
49
+ export declare function withScopeAsync<T>(context: ivm.Context, callback: (scope: Scope) => Promise<T>): Promise<T>;
50
+ /**
51
+ * Define a synchronous function that can be called from the isolate.
52
+ * Arguments are automatically unmarshalled, return values are automatically marshalled.
53
+ */
54
+ export declare function defineFunction(context: ivm.Context, name: string, fn: (...args: unknown[]) => unknown): ivm.Reference;
55
+ /**
56
+ * Define an async function that can be called from the isolate.
57
+ * Uses ivm.Reference.apply with promise transfer so isolate code can truly await
58
+ * host work without blocking the isolate thread.
59
+ */
60
+ export declare function defineAsyncFunction(context: ivm.Context, name: string, fn: (...args: unknown[]) => Promise<unknown>): ivm.Reference;
61
+ export interface PropertyDescriptor<TState = unknown> {
62
+ get?: (state: TState) => unknown;
63
+ set?: (state: TState, value: unknown) => void;
64
+ value?: unknown;
65
+ writable?: boolean;
66
+ enumerable?: boolean;
67
+ configurable?: boolean;
68
+ }
69
+ export interface ClassDefinition<TState extends object = object> {
70
+ name: string;
71
+ construct?: (args: unknown[]) => TState;
72
+ methods?: Record<string, {
73
+ fn: (state: TState, ...args: unknown[]) => unknown;
74
+ async?: boolean;
75
+ }>;
76
+ properties?: Record<string, PropertyDescriptor<TState>>;
77
+ staticMethods?: Record<string, {
78
+ fn: (...args: unknown[]) => unknown;
79
+ async?: boolean;
80
+ }>;
81
+ staticProperties?: Record<string, unknown>;
82
+ extends?: string;
83
+ }
84
+ /**
85
+ * Define a class that can be instantiated in the isolate.
86
+ * Instance state is stored on the host side, accessed via unique IDs.
87
+ */
88
+ export declare function defineClass<TState extends object = object>(context: ivm.Context, definition: ClassDefinition<TState>): ivm.Reference;
89
+ export interface SetupCoreOptions {
90
+ /** Whether to inject TextEncoder/TextDecoder */
91
+ textEncoding?: boolean;
92
+ /** Whether to inject URL/URLSearchParams */
93
+ url?: boolean;
94
+ /** Whether to inject Blob/File */
95
+ blob?: boolean;
96
+ /** Whether to inject Streams */
97
+ streams?: boolean;
98
+ /** Whether to inject DOMParser and DOM constructors */
99
+ domParser?: boolean;
100
+ }
101
+ export interface CoreHandle {
102
+ dispose(): void;
103
+ }
104
+ /**
105
+ * Setup core APIs in an isolated-vm context.
106
+ *
107
+ * Injects the following globals:
108
+ * - ReadableStream, WritableStream, TransformStream
109
+ * - ReadableStreamDefaultReader, WritableStreamDefaultWriter
110
+ * - Blob
111
+ * - File
112
+ * - DOMException
113
+ * - DOMParser
114
+ * - Node, Document, DocumentFragment, DocumentType, Element, Attr, Text, Comment
115
+ * - Event, EventTarget, CustomEvent
116
+ * - URL, URLSearchParams
117
+ * - TextEncoder, TextDecoder
118
+ */
119
+ export declare function setupCore(context: ivm.Context, options?: SetupCoreOptions): Promise<CoreHandle>;
@@ -0,0 +1,18 @@
1
+ import ivm from "isolated-vm";
2
+ export interface CryptoHandle {
3
+ dispose(): void;
4
+ }
5
+ /**
6
+ * Setup Web Crypto API in an isolated-vm context
7
+ *
8
+ * Provides crypto.getRandomValues and crypto.randomUUID
9
+ *
10
+ * @example
11
+ * const handle = await setupCrypto(context);
12
+ * await context.eval(`
13
+ * const uuid = crypto.randomUUID();
14
+ * const array = new Uint8Array(16);
15
+ * crypto.getRandomValues(array);
16
+ * `);
17
+ */
18
+ export declare function setupCrypto(context: ivm.Context): Promise<CryptoHandle>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Callback-based FileSystemHandler adapter.
3
+ *
4
+ * Adapts simple client callbacks (readFile, writeFile, etc.) to the
5
+ * FileSystemHandler interface used by ../fs/index.ts.
6
+ */
7
+ import type { FileSystemHandler } from "../fs/index.ts";
8
+ import type { ConnectionState, CallbackContext } from "./types.ts";
9
+ interface InvokeClientCallback {
10
+ (connection: ConnectionState, callbackId: number, args: unknown[], options?: {
11
+ signal?: AbortSignal;
12
+ }): Promise<unknown>;
13
+ }
14
+ interface CallbackFsHandlerOptions {
15
+ connection: ConnectionState;
16
+ callbackContext: CallbackContext;
17
+ invokeClientCallback: InvokeClientCallback;
18
+ basePath?: string;
19
+ getSignal?: () => AbortSignal | undefined;
20
+ }
21
+ /**
22
+ * Create a FileSystemHandler that invokes client callbacks.
23
+ *
24
+ * Maps WHATWG FileSystem API operations to simple POSIX-like callbacks.
25
+ * Uses callbackContext for dynamic callback ID lookup to support runtime reuse.
26
+ */
27
+ export declare function createCallbackFileSystemHandler(options: CallbackFsHandlerOptions): FileSystemHandler;
28
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Connection handling for the isolate daemon.
3
+ */
4
+ import type { Socket } from "node:net";
5
+ import type { DaemonState } from "./types.ts";
6
+ /**
7
+ * Handle a new client connection.
8
+ */
9
+ export declare function handleConnection(socket: Socket, state: DaemonState): void;
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ./index.ts
3
+ *
4
+ * Node.js daemon for running isolated-vm runtimes accessible via IPC.
5
+ */
6
+ import type { DaemonOptions, DaemonHandle, DaemonStats } from "./types.ts";
7
+ export type { DaemonOptions, DaemonHandle, DaemonStats };
8
+ /**
9
+ * Start the isolate daemon.
10
+ *
11
+ * @param options - Daemon configuration options
12
+ * @returns Handle to control the daemon
13
+ */
14
+ export declare function startDaemon(options?: DaemonOptions): Promise<DaemonHandle>;
@@ -0,0 +1,16 @@
1
+ import type { DaemonState, DaemonStats, IsolateInstance } from "./types.ts";
2
+ export interface RuntimePoolSnapshot {
3
+ activeIsolates: number;
4
+ pooledIsolates: number;
5
+ trackedIsolates: number;
6
+ activeConnections: number;
7
+ maxIsolates: number;
8
+ namespacedIsolates: number;
9
+ poisonedIsolates: number;
10
+ }
11
+ type RuntimePoolState = Pick<DaemonState, "isolates" | "connections" | "options">;
12
+ export declare function collectRuntimePoolSnapshot(state: RuntimePoolState): RuntimePoolSnapshot;
13
+ export declare function createDaemonStats(state: DaemonState): DaemonStats;
14
+ export declare function formatRuntimePoolSnapshot(snapshot: RuntimePoolSnapshot): string;
15
+ export declare function formatRuntimeLabel(instance: Pick<IsolateInstance, "isolateId" | "namespaceId">): string;
16
+ export {};
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Internal types for the isolate daemon.
3
+ */
4
+ import type { Socket } from "node:net";
5
+ import type { RuntimeHandle } from "../runtime/index.ts";
6
+ import type { CallbackRegistration } from "../protocol/index.ts";
7
+ /**
8
+ * Options for starting the daemon.
9
+ */
10
+ export interface DaemonOptions {
11
+ /** Unix socket path (preferred) */
12
+ socketPath?: string;
13
+ /** TCP host (fallback) */
14
+ host?: string;
15
+ /** TCP port (fallback) */
16
+ port?: number;
17
+ /** Maximum number of isolates */
18
+ maxIsolates?: number;
19
+ /** Default memory limit for isolates in megabytes */
20
+ defaultMemoryLimitMB?: number;
21
+ }
22
+ /**
23
+ * Handle returned by startDaemon.
24
+ */
25
+ export interface DaemonHandle {
26
+ /** Close the daemon and all connections */
27
+ close(): Promise<void>;
28
+ /** Get daemon statistics */
29
+ getStats(): DaemonStats;
30
+ /** Socket path or address the daemon is listening on */
31
+ address: string;
32
+ }
33
+ /**
34
+ * Daemon statistics.
35
+ */
36
+ export interface DaemonStats {
37
+ /** Currently owned runtimes that are not soft-disposed */
38
+ activeIsolates: number;
39
+ /** Soft-disposed namespaced runtimes kept in the reuse pool */
40
+ pooledIsolates: number;
41
+ /** Total runtimes tracked by the daemon (counts toward maxIsolates) */
42
+ trackedIsolates: number;
43
+ activeConnections: number;
44
+ totalIsolatesCreated: number;
45
+ totalRequestsProcessed: number;
46
+ }
47
+ /**
48
+ * Internal state for a single isolate instance.
49
+ */
50
+ export interface IsolateInstance {
51
+ isolateId: string;
52
+ runtime: RuntimeHandle;
53
+ ownerConnection: Socket | null;
54
+ callbacks: Map<number, CallbackRegistration>;
55
+ createdAt: number;
56
+ lastActivity: number;
57
+ runtimeAbortController?: AbortController;
58
+ /** Functions returned by custom function calls (callable from isolate) */
59
+ returnedCallbacks?: Map<number, Function>;
60
+ /** Promises returned by custom function calls (resolvable from isolate) */
61
+ returnedPromises?: Map<number, Promise<unknown>>;
62
+ /** Async iterators returned by custom function calls (iterable from isolate) */
63
+ returnedIterators?: Map<number, AsyncIterator<unknown>>;
64
+ /** Next ID for daemon-local callback registration (starts at high number to avoid conflicts) */
65
+ nextLocalCallbackId?: number;
66
+ /** Namespace ID for pooling/reuse (if set, runtime is cached on dispose) */
67
+ namespaceId?: string;
68
+ /** Whether this runtime is soft-deleted (disposed but cached for reuse) */
69
+ isDisposed: boolean;
70
+ /** Whether runtime hit unrecoverable module-linking state and must not be reused */
71
+ isPoisoned: boolean;
72
+ /** Timestamp when runtime was disposed (for LRU eviction) */
73
+ disposedAt?: number;
74
+ /** Mutable context for callbacks - allows updating callback IDs/connection on reuse */
75
+ callbackContext?: CallbackContext;
76
+ /** In-flight test run (for result forwarding across reconnections) */
77
+ pendingTestRun?: {
78
+ promise: Promise<unknown>;
79
+ };
80
+ }
81
+ /**
82
+ * Mutable context for callbacks that can be updated on runtime reuse.
83
+ * This allows closures to reference current callback IDs instead of captured values.
84
+ */
85
+ export interface CallbackContext {
86
+ /** Current connection state (updated on reuse) */
87
+ connection: ConnectionState | null;
88
+ /** Console onEntry callback ID */
89
+ consoleOnEntry?: number;
90
+ /** Fetch callback ID */
91
+ fetch?: number;
92
+ /** Module loader callback ID */
93
+ moduleLoader?: number;
94
+ /** testEnvironment.onEvent callback ID */
95
+ testEnvironmentOnEvent?: number;
96
+ /** Playwright callback IDs */
97
+ playwright: {
98
+ handlerCallbackId?: number;
99
+ onBrowserConsoleLogCallbackId?: number;
100
+ onNetworkRequestCallbackId?: number;
101
+ onNetworkResponseCallbackId?: number;
102
+ };
103
+ /** FS callback IDs by name */
104
+ fs: {
105
+ readFile?: number;
106
+ writeFile?: number;
107
+ stat?: number;
108
+ readdir?: number;
109
+ unlink?: number;
110
+ mkdir?: number;
111
+ rmdir?: number;
112
+ };
113
+ /** Custom function callback IDs by name */
114
+ custom: Map<string, number>;
115
+ /** Reconnection promise — set when connection drops, resolved when a new connection arrives */
116
+ reconnectionPromise?: {
117
+ promise: Promise<ConnectionState>;
118
+ resolve: (conn: ConnectionState) => void;
119
+ reject: (err: Error) => void;
120
+ timeoutId: ReturnType<typeof setTimeout>;
121
+ };
122
+ }
123
+ /**
124
+ * Pending request waiting for response.
125
+ */
126
+ export interface PendingRequest {
127
+ resolve: (result: unknown) => void;
128
+ reject: (error: Error) => void;
129
+ /** Optional cleanup hook (e.g. remove listeners, clear timeout) */
130
+ cleanup?: () => void;
131
+ /** Optional metadata for callback requests */
132
+ callbackId?: number;
133
+ }
134
+ /**
135
+ * Stream session for tracking active streams.
136
+ */
137
+ export interface StreamSession {
138
+ streamId: number;
139
+ direction: "upload" | "download";
140
+ requestId: number;
141
+ state: "active" | "closing" | "closed";
142
+ bytesTransferred: number;
143
+ credit: number;
144
+ creditResolver?: () => void;
145
+ cancelReader?: () => void;
146
+ }
147
+ /**
148
+ * Stream receiver for collecting uploaded stream chunks.
149
+ */
150
+ export interface StreamReceiver {
151
+ streamId: number;
152
+ requestId: number;
153
+ chunks: Uint8Array[];
154
+ totalBytes: number;
155
+ resolve: (body: Uint8Array) => void;
156
+ reject: (error: Error) => void;
157
+ }
158
+ /**
159
+ * Callback stream receiver for streaming fetch callback responses.
160
+ * Receives streamed response body from client for fetch callbacks.
161
+ */
162
+ export interface CallbackStreamReceiver {
163
+ streamId: number;
164
+ requestId: number;
165
+ metadata: {
166
+ status: number;
167
+ statusText: string;
168
+ headers: [string, string][];
169
+ };
170
+ controller: ReadableStreamDefaultController<Uint8Array>;
171
+ state: "active" | "closed" | "errored";
172
+ pendingChunks: Uint8Array[];
173
+ error?: Error;
174
+ pullResolvers: Array<() => void>;
175
+ controllerFinalized: boolean;
176
+ }
177
+ /**
178
+ * Internal state for a client connection.
179
+ */
180
+ export interface ConnectionState {
181
+ socket: Socket;
182
+ isolates: Set<string>;
183
+ pendingRequests: Map<number, PendingRequest>;
184
+ pendingCallbacks: Map<number, PendingRequest>;
185
+ nextRequestId: number;
186
+ nextCallbackId: number;
187
+ nextStreamId: number;
188
+ /** Active download streams (daemon sending to client) */
189
+ activeStreams: Map<number, StreamSession>;
190
+ /** Active upload stream receivers (client sending to daemon) */
191
+ streamReceivers: Map<number, StreamReceiver>;
192
+ /** Active callback stream receivers (for streaming fetch callback responses) */
193
+ callbackStreamReceivers: Map<number, CallbackStreamReceiver>;
194
+ /** Abort controllers for in-flight DISPATCH_REQUEST calls keyed by requestId */
195
+ dispatchAbortControllers: Map<number, AbortController>;
196
+ /** Request IDs aborted before DISPATCH_REQUEST was registered */
197
+ earlyAbortedDispatches: Set<number>;
198
+ }
199
+ /**
200
+ * Global daemon state.
201
+ */
202
+ export interface DaemonState {
203
+ isolates: Map<string, IsolateInstance>;
204
+ connections: Map<Socket, ConnectionState>;
205
+ stats: DaemonStats;
206
+ options: Required<DaemonOptions>;
207
+ /** Index of namespaced runtimes by namespace ID for fast lookup */
208
+ namespacedRuntimes: Map<string, IsolateInstance>;
209
+ /** Track in-flight namespace creations to prevent thundering herd */
210
+ namespacedCreatesInFlight: Set<string>;
211
+ }
@@ -0,0 +1,21 @@
1
+ import type ivm from "isolated-vm";
2
+ export interface EncodingHandle {
3
+ dispose(): void;
4
+ }
5
+ /**
6
+ * Setup encoding APIs in an isolated-vm context
7
+ *
8
+ * Injects:
9
+ * - atob/btoa for Base64 encoding/decoding
10
+ * - Buffer class for binary data handling (utf8, base64, hex)
11
+ *
12
+ * @example
13
+ * const handle = await setupEncoding(context);
14
+ * await context.eval(`
15
+ * const encoded = btoa("hello");
16
+ * const decoded = atob(encoded);
17
+ * const buf = Buffer.from("hello");
18
+ * const hex = buf.toString("hex");
19
+ * `);
20
+ */
21
+ export declare function setupEncoding(context: ivm.Context): Promise<EncodingHandle>;