@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,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/protocol/marshalValue.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Value marshalling for custom function arguments and return values.\n *\n * Provides type-preserving serialization for JavaScript types that would\n * otherwise lose fidelity when JSON stringified.\n */\n\nimport {\n type CallbackRef,\n type DateRef,\n type RegExpRef,\n type UndefinedRef,\n type BigIntRef,\n type Uint8ArrayRef,\n type RequestRef,\n type ResponseRef,\n type HeadersRef,\n type FileRef,\n type FormDataRef,\n type URLRef,\n type PromiseRef,\n type AsyncIteratorRef,\n type BlobRef,\n createCallbackRef,\n createDateRef,\n createRegExpRef,\n createUndefinedRef,\n createBigIntRef,\n createUint8ArrayRef,\n createRequestRef,\n createResponseRef,\n createHeadersRef,\n createFileRef,\n createFormDataRef,\n createURLRef,\n createPromiseRef,\n createAsyncIteratorRef,\n createBlobRef,\n} from \"./codec.mjs\";\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/**\n * Error thrown when a value cannot be marshalled.\n */\nexport class MarshalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MarshalError\";\n }\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\n/**\n * Context for marshalling values (host → isolate).\n */\nexport interface MarshalContext {\n /** Register a function callback and return its ID */\n registerCallback?: (fn: Function) => number;\n /** Register a Promise and return its ID */\n registerPromise?: (promise: Promise<unknown>) => number;\n /** Register an AsyncIterator and return its ID */\n registerIterator?: (iterator: AsyncIterator<unknown>) => number;\n /** Register a Blob and return its ID */\n registerBlob?: (blob: Blob) => number;\n}\n\n/**\n * Context for unmarshalling values (isolate → host).\n */\nexport interface UnmarshalContext {\n /** Get a callback function by ID */\n getCallback?: (id: number) => ((...args: unknown[]) => unknown) | undefined;\n /** Create a proxy Promise for a PromiseRef */\n createPromiseProxy?: (promiseId: number) => Promise<unknown>;\n /** Create a proxy AsyncIterator for an AsyncIteratorRef */\n createIteratorProxy?: (iteratorId: number) => AsyncIterator<unknown>;\n /** Get a Blob by ID */\n getBlob?: (blobId: number) => Blob | undefined;\n}\n\n// ============================================================================\n// Type Guards for Ref Types\n// ============================================================================\n\n/**\n * Type guard for PromiseRef values.\n */\nexport function isPromiseRef(value: unknown): value is { __type: \"PromiseRef\"; promiseId: number } {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __type?: string }).__type === 'PromiseRef'\n );\n}\n\n/**\n * Type guard for AsyncIteratorRef values.\n */\nexport function isAsyncIteratorRef(value: unknown): value is { __type: \"AsyncIteratorRef\"; iteratorId: number } {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __type?: string }).__type === 'AsyncIteratorRef'\n );\n}\n\n// ============================================================================\n// Supported Class Detection\n// ============================================================================\n\n/**\n * Set of class names that are supported for marshalling.\n */\nconst SUPPORTED_CLASSES = new Set([\n \"Date\",\n \"RegExp\",\n \"Request\",\n \"Response\",\n \"Headers\",\n \"File\",\n \"Blob\",\n \"FormData\",\n \"URL\",\n // Typed arrays are natively supported by msgpack\n \"Uint8Array\",\n \"Int8Array\",\n \"Uint16Array\",\n \"Int16Array\",\n \"Uint32Array\",\n \"Int32Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n \"ArrayBuffer\",\n \"DataView\",\n]);\n\n/**\n * Check if a value is a typed array.\n */\nfunction isTypedArray(value: unknown): value is ArrayBufferView {\n return (\n value instanceof Uint8Array ||\n value instanceof Int8Array ||\n value instanceof Uint16Array ||\n value instanceof Int16Array ||\n value instanceof Uint32Array ||\n value instanceof Int32Array ||\n value instanceof Float32Array ||\n value instanceof Float64Array ||\n value instanceof BigInt64Array ||\n value instanceof BigUint64Array ||\n value instanceof DataView\n );\n}\n\n/**\n * Check if a value is an async iterable (has Symbol.asyncIterator).\n */\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Symbol.asyncIterator in value &&\n typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] === \"function\"\n );\n}\n\n// ============================================================================\n// Marshalling (JavaScript → Refs)\n// ============================================================================\n\nconst MAX_DEPTH = 100;\n\n/**\n * Marshal a JavaScript value to a serializable format.\n *\n * Converts JavaScript types that lose fidelity when JSON stringified into\n * Ref objects that can be reconstructed on the other side.\n *\n * @param value - The value to marshal\n * @param ctx - Optional context for registering callbacks, promises, etc.\n * @param depth - Current recursion depth (used for circular reference detection)\n * @param seen - WeakSet of seen objects (for circular reference detection)\n * @returns The marshalled value (may be async for Request/Response/File/Blob/FormData)\n */\nexport async function marshalValue(\n value: unknown,\n ctx?: MarshalContext,\n depth: number = 0,\n seen: WeakSet<object> = new WeakSet()\n): Promise<unknown> {\n // Check depth limit\n if (depth > MAX_DEPTH) {\n throw new MarshalError(\n `Maximum marshalling depth (${MAX_DEPTH}) exceeded. Possible circular reference.`\n );\n }\n\n // Handle null\n if (value === null) {\n return null;\n }\n\n // Handle undefined\n if (value === undefined) {\n return createUndefinedRef();\n }\n\n // Handle primitives (pass through)\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n return value;\n }\n\n // Handle BigInt\n if (type === \"bigint\") {\n return createBigIntRef((value as bigint).toString());\n }\n\n // Handle functions\n if (type === \"function\") {\n if (!ctx?.registerCallback) {\n throw new MarshalError(\n \"Cannot marshal function: no registerCallback provided in context\"\n );\n }\n const callbackId = ctx.registerCallback(value as Function);\n return createCallbackRef(callbackId);\n }\n\n // Handle objects\n if (type === \"object\") {\n const obj = value as object;\n\n // Check for circular references\n if (seen.has(obj)) {\n throw new MarshalError(\n \"Cannot marshal value: circular reference detected\"\n );\n }\n\n // Handle Date\n if (obj instanceof Date) {\n return createDateRef(obj.getTime());\n }\n\n // Handle RegExp\n if (obj instanceof RegExp) {\n return createRegExpRef(obj.source, obj.flags);\n }\n\n // Handle URL\n if (obj instanceof URL) {\n return createURLRef(obj.href);\n }\n\n // Handle Headers\n if (typeof Headers !== \"undefined\" && obj instanceof Headers) {\n const pairs: [string, string][] = [];\n (obj as Headers).forEach((value, key) => {\n pairs.push([key, value]);\n });\n return createHeadersRef(pairs);\n }\n\n // Handle Uint8Array and ArrayBuffer - wrap in Uint8ArrayRef for JSON compatibility\n if (obj instanceof Uint8Array) {\n return createUint8ArrayRef(Array.from(obj));\n }\n if (obj instanceof ArrayBuffer) {\n return createUint8ArrayRef(Array.from(new Uint8Array(obj)));\n }\n\n // Handle other typed arrays (convert to Uint8ArrayRef)\n if (isTypedArray(obj)) {\n const u8 = new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n return createUint8ArrayRef(Array.from(u8));\n }\n\n // Handle Promise\n if (obj instanceof Promise) {\n if (!ctx?.registerPromise) {\n throw new MarshalError(\n \"Cannot marshal Promise: no registerPromise provided in context\"\n );\n }\n const promiseId = ctx.registerPromise(obj as Promise<unknown>);\n return createPromiseRef(promiseId);\n }\n\n // Handle AsyncIterable (must check before generic object)\n if (isAsyncIterable(obj)) {\n if (!ctx?.registerIterator) {\n throw new MarshalError(\n \"Cannot marshal AsyncIterable: no registerIterator provided in context\"\n );\n }\n const iterator = (obj as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const iteratorId = ctx.registerIterator(iterator);\n return createAsyncIteratorRef(iteratorId);\n }\n\n // Mark as seen for circular reference detection\n seen.add(obj);\n\n // Handle Request (async - need to read body)\n if (typeof Request !== \"undefined\" && obj instanceof Request) {\n const req = obj as Request;\n const headers: [string, string][] = [];\n req.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n let body: number[] | null = null;\n if (req.body) {\n // Clone the request to avoid consuming the body\n const cloned = req.clone();\n body = Array.from(new Uint8Array(await cloned.arrayBuffer()));\n }\n return createRequestRef(req.url, req.method, headers, body, {\n mode: req.mode,\n credentials: req.credentials,\n cache: req.cache,\n redirect: req.redirect,\n referrer: req.referrer,\n referrerPolicy: req.referrerPolicy,\n integrity: req.integrity,\n });\n }\n\n // Handle Response (async - need to read body)\n if (typeof Response !== \"undefined\" && obj instanceof Response) {\n const res = obj as Response;\n const headers: [string, string][] = [];\n res.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n let body: number[] | null = null;\n if (res.body) {\n // Clone the response to avoid consuming the body\n const cloned = res.clone();\n body = Array.from(new Uint8Array(await cloned.arrayBuffer()));\n }\n return createResponseRef(res.status, res.statusText, headers, body);\n }\n\n // Handle File (async - need to read data)\n if (typeof File !== \"undefined\" && obj instanceof File) {\n const file = obj as File;\n const data = Array.from(new Uint8Array(await file.arrayBuffer()));\n return createFileRef(file.name, file.type, file.lastModified, data);\n }\n\n // Handle Blob (async - need to read data, or use BlobRef if registerBlob provided)\n if (typeof Blob !== \"undefined\" && obj instanceof Blob) {\n const blob = obj as Blob;\n if (ctx?.registerBlob) {\n const blobId = ctx.registerBlob(blob);\n return createBlobRef(blobId, blob.size, blob.type);\n }\n // Inline the blob data as a FileRef without name\n const data = Array.from(new Uint8Array(await blob.arrayBuffer()));\n return createFileRef(\"\", blob.type, Date.now(), data);\n }\n\n // Handle FormData (async - entries may contain Files)\n if (typeof FormData !== \"undefined\" && obj instanceof FormData) {\n const fd = obj as FormData;\n const entries: [string, string | FileRef][] = [];\n for (const [key, value] of fd.entries()) {\n if (typeof value === \"string\") {\n entries.push([key, value]);\n } else {\n // File/Blob - cast to File for type safety\n const file = value as File;\n const data = Array.from(new Uint8Array(await file.arrayBuffer()));\n const fileRef = createFileRef(\n file.name ?? \"\",\n file.type,\n file.lastModified ?? Date.now(),\n data\n );\n entries.push([key, fileRef]);\n }\n }\n return createFormDataRef(entries);\n }\n\n // Handle arrays\n if (Array.isArray(obj)) {\n const result: unknown[] = [];\n for (const item of obj) {\n result.push(await marshalValue(item, ctx, depth + 1, seen));\n }\n return result;\n }\n\n // Handle plain objects\n const constructorName = obj.constructor?.name;\n if (constructorName && constructorName !== \"Object\") {\n if (!SUPPORTED_CLASSES.has(constructorName)) {\n throw new MarshalError(\n `Cannot marshal class instance of type \"${constructorName}\". ` +\n `Only plain objects and supported classes are allowed.`\n );\n }\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n result[key] = await marshalValue(\n (obj as Record<string, unknown>)[key],\n ctx,\n depth + 1,\n seen\n );\n }\n return result;\n }\n\n // Handle symbols (not serializable)\n if (type === \"symbol\") {\n throw new MarshalError(\"Cannot marshal Symbol values\");\n }\n\n // Unknown type\n throw new MarshalError(`Cannot marshal value of type \"${type}\"`);\n}\n\n/**\n * Synchronous marshal for values that don't require async operations.\n * Throws if the value contains Request, Response, File, Blob, or FormData.\n */\nexport function marshalValueSync(\n value: unknown,\n ctx?: MarshalContext,\n depth: number = 0,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n // Check depth limit\n if (depth > MAX_DEPTH) {\n throw new MarshalError(\n `Maximum marshalling depth (${MAX_DEPTH}) exceeded. Possible circular reference.`\n );\n }\n\n // Handle null\n if (value === null) {\n return null;\n }\n\n // Handle undefined\n if (value === undefined) {\n return createUndefinedRef();\n }\n\n // Handle primitives (pass through)\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n return value;\n }\n\n // Handle BigInt\n if (type === \"bigint\") {\n return createBigIntRef((value as bigint).toString());\n }\n\n // Handle functions\n if (type === \"function\") {\n if (!ctx?.registerCallback) {\n throw new MarshalError(\n \"Cannot marshal function: no registerCallback provided in context\"\n );\n }\n const callbackId = ctx.registerCallback(value as Function);\n return createCallbackRef(callbackId);\n }\n\n // Handle objects\n if (type === \"object\") {\n const obj = value as object;\n\n // Check for circular references\n if (seen.has(obj)) {\n throw new MarshalError(\n \"Cannot marshal value: circular reference detected\"\n );\n }\n\n // Handle Date\n if (obj instanceof Date) {\n return createDateRef(obj.getTime());\n }\n\n // Handle RegExp\n if (obj instanceof RegExp) {\n return createRegExpRef(obj.source, obj.flags);\n }\n\n // Handle URL\n if (obj instanceof URL) {\n return createURLRef(obj.href);\n }\n\n // Handle Headers\n if (typeof Headers !== \"undefined\" && obj instanceof Headers) {\n const pairs: [string, string][] = [];\n (obj as Headers).forEach((value, key) => {\n pairs.push([key, value]);\n });\n return createHeadersRef(pairs);\n }\n\n // Handle Uint8Array and ArrayBuffer - wrap in Uint8ArrayRef for JSON compatibility\n if (obj instanceof Uint8Array) {\n return createUint8ArrayRef(Array.from(obj));\n }\n if (obj instanceof ArrayBuffer) {\n return createUint8ArrayRef(Array.from(new Uint8Array(obj)));\n }\n\n // Handle other typed arrays (convert to Uint8ArrayRef)\n if (isTypedArray(obj)) {\n const u8 = new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n return createUint8ArrayRef(Array.from(u8));\n }\n\n // Handle Promise\n if (obj instanceof Promise) {\n if (!ctx?.registerPromise) {\n throw new MarshalError(\n \"Cannot marshal Promise: no registerPromise provided in context\"\n );\n }\n const promiseId = ctx.registerPromise(obj as Promise<unknown>);\n return createPromiseRef(promiseId);\n }\n\n // Handle AsyncIterable (must check before generic object)\n if (isAsyncIterable(obj)) {\n if (!ctx?.registerIterator) {\n throw new MarshalError(\n \"Cannot marshal AsyncIterable: no registerIterator provided in context\"\n );\n }\n const iterator = (obj as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const iteratorId = ctx.registerIterator(iterator);\n return createAsyncIteratorRef(iteratorId);\n }\n\n // Mark as seen for circular reference detection\n seen.add(obj);\n\n // Async types that can't be marshalled synchronously\n if (typeof Request !== \"undefined\" && obj instanceof Request) {\n throw new MarshalError(\n \"Cannot marshal Request synchronously. Use marshalValue() instead.\"\n );\n }\n if (typeof Response !== \"undefined\" && obj instanceof Response) {\n throw new MarshalError(\n \"Cannot marshal Response synchronously. Use marshalValue() instead.\"\n );\n }\n if (typeof File !== \"undefined\" && obj instanceof File) {\n throw new MarshalError(\n \"Cannot marshal File synchronously. Use marshalValue() instead.\"\n );\n }\n if (typeof Blob !== \"undefined\" && obj instanceof Blob) {\n throw new MarshalError(\n \"Cannot marshal Blob synchronously. Use marshalValue() instead.\"\n );\n }\n if (typeof FormData !== \"undefined\" && obj instanceof FormData) {\n throw new MarshalError(\n \"Cannot marshal FormData synchronously. Use marshalValue() instead.\"\n );\n }\n\n // Handle arrays\n if (Array.isArray(obj)) {\n return obj.map((item) => marshalValueSync(item, ctx, depth + 1, seen));\n }\n\n // Handle plain objects\n const constructorName = obj.constructor?.name;\n if (constructorName && constructorName !== \"Object\") {\n if (!SUPPORTED_CLASSES.has(constructorName)) {\n throw new MarshalError(\n `Cannot marshal class instance of type \"${constructorName}\". ` +\n `Only plain objects and supported classes are allowed.`\n );\n }\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n result[key] = marshalValueSync(\n (obj as Record<string, unknown>)[key],\n ctx,\n depth + 1,\n seen\n );\n }\n return result;\n }\n\n // Handle symbols (not serializable)\n if (type === \"symbol\") {\n throw new MarshalError(\"Cannot marshal Symbol values\");\n }\n\n // Unknown type\n throw new MarshalError(`Cannot marshal value of type \"${type}\"`);\n}\n\n// ============================================================================\n// Unmarshalling (Refs → JavaScript)\n// ============================================================================\n\n/**\n * Type guard for checking if a value is a Ref object.\n */\nfunction isRef(value: unknown): value is { __type: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"__type\" in value &&\n typeof (value as { __type: unknown }).__type === \"string\"\n );\n}\n\n/**\n * Unmarshal a serialized value back to JavaScript types.\n *\n * @param value - The value to unmarshal\n * @param ctx - Optional context for resolving callbacks, promises, etc.\n * @param depth - Current recursion depth\n * @returns The unmarshalled JavaScript value\n */\nexport function unmarshalValue(\n value: unknown,\n ctx?: UnmarshalContext,\n depth: number = 0\n): unknown {\n // Check depth limit\n if (depth > MAX_DEPTH) {\n throw new MarshalError(\n `Maximum unmarshalling depth (${MAX_DEPTH}) exceeded.`\n );\n }\n\n // Handle null\n if (value === null) {\n return null;\n }\n\n // Handle primitives (pass through)\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n return value;\n }\n\n // Handle Uint8Array (msgpack native support)\n if (value instanceof Uint8Array) {\n return value;\n }\n\n // Handle objects\n if (type === \"object\") {\n // Check if it's a Ref type\n if (isRef(value)) {\n const refType = value.__type;\n\n switch (refType) {\n case \"UndefinedRef\":\n return undefined;\n\n case \"DateRef\": {\n const ref = value as DateRef;\n return new Date(ref.timestamp);\n }\n\n case \"RegExpRef\": {\n const ref = value as RegExpRef;\n return new RegExp(ref.source, ref.flags);\n }\n\n case \"BigIntRef\": {\n const ref = value as BigIntRef;\n return BigInt(ref.value);\n }\n\n case \"Uint8ArrayRef\": {\n const ref = value as Uint8ArrayRef;\n return new Uint8Array(ref.data);\n }\n\n case \"URLRef\": {\n const ref = value as URLRef;\n return new URL(ref.href);\n }\n\n case \"HeadersRef\": {\n const ref = value as HeadersRef;\n return new Headers(ref.pairs);\n }\n\n case \"RequestRef\": {\n const ref = value as RequestRef;\n const body = ref.body ? new Uint8Array(ref.body) : null;\n const init: RequestInit = {\n method: ref.method,\n headers: ref.headers,\n body: body as BodyInit | null | undefined,\n };\n if (ref.mode) init.mode = ref.mode as RequestMode;\n if (ref.credentials) init.credentials = ref.credentials as RequestCredentials;\n if (ref.cache) init.cache = ref.cache as RequestCache;\n if (ref.redirect) init.redirect = ref.redirect as RequestRedirect;\n if (ref.referrer) init.referrer = ref.referrer;\n if (ref.referrerPolicy) init.referrerPolicy = ref.referrerPolicy as ReferrerPolicy;\n if (ref.integrity) init.integrity = ref.integrity;\n return new Request(ref.url, init);\n }\n\n case \"ResponseRef\": {\n const ref = value as ResponseRef;\n const body = ref.body ? new Uint8Array(ref.body) : null;\n return new Response(body as BodyInit | null | undefined, {\n status: ref.status,\n statusText: ref.statusText,\n headers: ref.headers,\n });\n }\n\n case \"FileRef\": {\n const ref = value as FileRef;\n const data = new Uint8Array(ref.data);\n // If no name, return as Blob\n if (!ref.name) {\n return new Blob([data as BlobPart], { type: ref.type });\n }\n return new File([data as BlobPart], ref.name, {\n type: ref.type,\n lastModified: ref.lastModified,\n });\n }\n\n case \"BlobRef\": {\n const ref = value as BlobRef;\n if (ctx?.getBlob) {\n const blob = ctx.getBlob(ref.blobId);\n if (blob) return blob;\n }\n // Can't reconstruct without the actual data\n throw new MarshalError(\n `Cannot unmarshal BlobRef: no getBlob provided or blob not found`\n );\n }\n\n case \"FormDataRef\": {\n const ref = value as FormDataRef;\n const fd = new FormData();\n for (const [key, entry] of ref.entries) {\n if (typeof entry === \"string\") {\n fd.append(key, entry);\n } else {\n // FileRef\n const file = unmarshalValue(entry, ctx, depth + 1) as File | Blob;\n fd.append(key, file);\n }\n }\n return fd;\n }\n\n case \"CallbackRef\": {\n const ref = value as CallbackRef;\n if (!ctx?.getCallback) {\n throw new MarshalError(\n `Cannot unmarshal CallbackRef: no getCallback provided`\n );\n }\n const callback = ctx.getCallback(ref.callbackId);\n if (!callback) {\n throw new MarshalError(\n `Cannot unmarshal CallbackRef: callback ${ref.callbackId} not found`\n );\n }\n return callback;\n }\n\n case \"PromiseRef\": {\n const ref = value as PromiseRef;\n if (!ctx?.createPromiseProxy) {\n throw new MarshalError(\n `Cannot unmarshal PromiseRef: no createPromiseProxy provided`\n );\n }\n return ctx.createPromiseProxy(ref.promiseId);\n }\n\n case \"AsyncIteratorRef\": {\n const ref = value as AsyncIteratorRef;\n if (!ctx?.createIteratorProxy) {\n throw new MarshalError(\n `Cannot unmarshal AsyncIteratorRef: no createIteratorProxy provided`\n );\n }\n const iterator = ctx.createIteratorProxy(ref.iteratorId);\n // Return as async iterable\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n };\n }\n\n default:\n // Unknown ref type, return as-is (might be handled by higher level)\n return value;\n }\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map((item) => unmarshalValue(item, ctx, depth + 1));\n }\n\n // Handle plain objects (recursively unmarshal values)\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n result[key] = unmarshalValue(obj[key], ctx, depth + 1);\n }\n return result;\n }\n\n // Pass through unknown types\n return value;\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "F523224B75C61A9764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,69 @@
1
+ // packages/isolate/src/internal/protocol/serialization.ts
2
+ function isNullBodyStatus(status) {
3
+ return status === 101 || status === 103 || status === 204 || status === 205 || status === 304;
4
+ }
5
+ async function serializeRequest(request) {
6
+ const headers = [];
7
+ request.headers.forEach((value, key) => {
8
+ headers.push([key, value]);
9
+ });
10
+ let body = null;
11
+ if (request.body) {
12
+ body = new Uint8Array(await request.arrayBuffer());
13
+ }
14
+ return {
15
+ method: request.method,
16
+ url: request.url,
17
+ headers,
18
+ body,
19
+ signalAborted: request.signal?.aborted ?? false
20
+ };
21
+ }
22
+ async function serializeResponse(response) {
23
+ const headers = [];
24
+ response.headers.forEach((value, key) => {
25
+ headers.push([key, value]);
26
+ });
27
+ let body = null;
28
+ if (response.body && !isNullBodyStatus(response.status)) {
29
+ body = new Uint8Array(await response.arrayBuffer());
30
+ }
31
+ return {
32
+ status: response.status,
33
+ statusText: response.statusText,
34
+ headers,
35
+ body
36
+ };
37
+ }
38
+ function deserializeRequest(data) {
39
+ let signal;
40
+ if (data.signalAborted !== undefined) {
41
+ const controller = new AbortController;
42
+ if (data.signalAborted) {
43
+ controller.abort();
44
+ }
45
+ signal = controller.signal;
46
+ }
47
+ return new Request(data.url, {
48
+ method: data.method,
49
+ headers: data.headers,
50
+ body: data.body,
51
+ signal
52
+ });
53
+ }
54
+ function deserializeResponse(data) {
55
+ const body = isNullBodyStatus(data.status) ? null : data.body;
56
+ return new Response(body, {
57
+ status: data.status,
58
+ statusText: data.statusText,
59
+ headers: data.headers
60
+ });
61
+ }
62
+ export {
63
+ serializeResponse,
64
+ serializeRequest,
65
+ deserializeResponse,
66
+ deserializeRequest
67
+ };
68
+
69
+ //# debugId=E1BA3C8566F78BAD64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/protocol/serialization.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Request/Response serialization utilities.\n *\n * Shared by both isolate-daemon and isolate-client for converting\n * between Web API Request/Response objects and serializable data.\n */\n\nimport type { SerializedRequest, SerializedResponse } from \"./types.mjs\";\n\nfunction isNullBodyStatus(status: number): boolean {\n return status === 101 || status === 103 || status === 204 || status === 205 || status === 304;\n}\n\n/**\n * Serialize a Request to a plain object for transmission over IPC.\n */\nexport async function serializeRequest(request: Request): Promise<SerializedRequest> {\n const headers: [string, string][] = [];\n request.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n\n let body: Uint8Array | null = null;\n if (request.body) {\n body = new Uint8Array(await request.arrayBuffer());\n }\n\n return {\n method: request.method,\n url: request.url,\n headers,\n body,\n signalAborted: request.signal?.aborted ?? false,\n };\n}\n\n/**\n * Serialize a Response to a plain object for transmission over IPC.\n */\nexport async function serializeResponse(response: Response): Promise<SerializedResponse> {\n const headers: [string, string][] = [];\n response.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n\n let body: Uint8Array | null = null;\n if (response.body && !isNullBodyStatus(response.status)) {\n body = new Uint8Array(await response.arrayBuffer());\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers,\n body,\n };\n}\n\n/**\n * Deserialize a plain object back into a Request.\n */\nexport function deserializeRequest(data: SerializedRequest): Request {\n let signal: AbortSignal | undefined;\n if (data.signalAborted !== undefined) {\n const controller = new AbortController();\n if (data.signalAborted) {\n controller.abort();\n }\n signal = controller.signal;\n }\n\n return new Request(data.url, {\n method: data.method,\n headers: data.headers,\n body: data.body as unknown as BodyInit | null | undefined,\n signal,\n });\n}\n\n/**\n * Deserialize a plain object back into a Response.\n */\nexport function deserializeResponse(data: SerializedResponse): Response {\n const body = isNullBodyStatus(data.status) ? null : data.body;\n return new Response(body as unknown as BodyInit | null, {\n status: data.status,\n statusText: data.statusText,\n headers: data.headers,\n });\n}\n"
6
+ ],
7
+ "mappings": ";AASA,SAAS,gBAAgB,CAAC,QAAyB;AAAA,EACjD,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW;AAAA;AAM5F,eAAsB,gBAAgB,CAAC,SAA8C;AAAA,EACnF,MAAM,UAA8B,CAAC;AAAA,EACrC,QAAQ,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAAA,IACtC,QAAQ,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,GAC1B;AAAA,EAED,IAAI,OAA0B;AAAA,EAC9B,IAAI,QAAQ,MAAM;AAAA,IAChB,OAAO,IAAI,WAAW,MAAM,QAAQ,YAAY,CAAC;AAAA,EACnD;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,QAAQ;AAAA,IAChB,KAAK,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA,eAAe,QAAQ,QAAQ,WAAW;AAAA,EAC5C;AAAA;AAMF,eAAsB,iBAAiB,CAAC,UAAiD;AAAA,EACvF,MAAM,UAA8B,CAAC;AAAA,EACrC,SAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAAA,IACvC,QAAQ,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,GAC1B;AAAA,EAED,IAAI,OAA0B;AAAA,EAC9B,IAAI,SAAS,QAAQ,CAAC,iBAAiB,SAAS,MAAM,GAAG;AAAA,IACvD,OAAO,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AAAA,EACpD;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,SAAS;AAAA,IACjB,YAAY,SAAS;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAAC,MAAkC;AAAA,EACnE,IAAI;AAAA,EACJ,IAAI,KAAK,kBAAkB,WAAW;AAAA,IACpC,MAAM,aAAa,IAAI;AAAA,IACvB,IAAI,KAAK,eAAe;AAAA,MACtB,WAAW,MAAM;AAAA,IACnB;AAAA,IACA,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,IAAI,QAAQ,KAAK,KAAK;AAAA,IAC3B,QAAQ,KAAK;AAAA,IACb,SAAS,KAAK;AAAA,IACd,MAAM,KAAK;AAAA,IACX;AAAA,EACF,CAAC;AAAA;AAMI,SAAS,mBAAmB,CAAC,MAAoC;AAAA,EACtE,MAAM,OAAO,iBAAiB,KAAK,MAAM,IAAI,OAAO,KAAK;AAAA,EACzD,OAAO,IAAI,SAAS,MAAoC;AAAA,IACtD,QAAQ,KAAK;AAAA,IACb,YAAY,KAAK;AAAA,IACjB,SAAS,KAAK;AAAA,EAChB,CAAC;AAAA;",
8
+ "debugId": "E1BA3C8566F78BAD64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,141 @@
1
+ // packages/isolate/src/internal/protocol/types.ts
2
+ var MessageType = {
3
+ CREATE_RUNTIME: 1,
4
+ DISPOSE_RUNTIME: 2,
5
+ EVAL: 3,
6
+ DISPATCH_REQUEST: 4,
7
+ DISPATCH_REQUEST_ABORT: 5,
8
+ WS_OPEN: 16,
9
+ WS_MESSAGE: 17,
10
+ WS_CLOSE: 18,
11
+ FETCH_GET_UPGRADE_REQUEST: 19,
12
+ FETCH_HAS_SERVE_HANDLER: 20,
13
+ FETCH_HAS_ACTIVE_CONNECTIONS: 21,
14
+ FETCH_WS_ERROR: 22,
15
+ TIMERS_CLEAR_ALL: 23,
16
+ CONSOLE_RESET: 24,
17
+ CONSOLE_GET_TIMERS: 25,
18
+ CONSOLE_GET_COUNTERS: 26,
19
+ CONSOLE_GET_GROUP_DEPTH: 27,
20
+ RUN_TESTS: 33,
21
+ RESET_TEST_ENV: 34,
22
+ HAS_TESTS: 35,
23
+ GET_TEST_COUNT: 36,
24
+ GET_COLLECTED_DATA: 51,
25
+ CLEAR_COLLECTED_DATA: 52,
26
+ RESPONSE_OK: 128,
27
+ RESPONSE_ERROR: 129,
28
+ RESPONSE_STREAM_START: 130,
29
+ RESPONSE_STREAM_CHUNK: 131,
30
+ RESPONSE_STREAM_END: 132,
31
+ CALLBACK_INVOKE: 144,
32
+ CALLBACK_RESPONSE: 145,
33
+ CALLBACK_STREAM_START: 146,
34
+ CALLBACK_STREAM_CHUNK: 147,
35
+ CALLBACK_STREAM_END: 148,
36
+ CALLBACK_STREAM_CANCEL: 149,
37
+ CALLBACK_ABORT: 150,
38
+ STREAM_PUSH: 160,
39
+ STREAM_PULL: 161,
40
+ STREAM_CLOSE: 162,
41
+ STREAM_ERROR: 163,
42
+ ISOLATE_EVENT: 192,
43
+ CLIENT_EVENT: 193,
44
+ PING: 240,
45
+ PONG: 241
46
+ };
47
+ var MessageTypeName = Object.fromEntries(Object.entries(MessageType).map(([k, v]) => [v, k]));
48
+ var ErrorCode = {
49
+ INVALID_MESSAGE: 1001,
50
+ UNKNOWN_MESSAGE_TYPE: 1002,
51
+ MISSING_REQUIRED_FIELD: 1003,
52
+ ISOLATE_NOT_FOUND: 2001,
53
+ ISOLATE_DISPOSED: 2002,
54
+ ISOLATE_MEMORY_LIMIT: 2003,
55
+ ISOLATE_TIMEOUT: 2004,
56
+ SCRIPT_ERROR: 3001,
57
+ CALLBACK_ERROR: 3002,
58
+ STREAM_NOT_FOUND: 4001,
59
+ STREAM_CLOSED: 4002,
60
+ CONNECTION_LOST: 5001
61
+ };
62
+ var IsolateEvents = {
63
+ WS_COMMAND: "ws:command",
64
+ WS_CLIENT_CONNECT: "ws:client-connect",
65
+ WS_CLIENT_SEND: "ws:client-send",
66
+ WS_CLIENT_CLOSE: "ws:client-close"
67
+ };
68
+ var ClientEvents = {
69
+ WS_CLIENT_OPENED: "ws:client-opened",
70
+ WS_CLIENT_MESSAGE: "ws:client-message",
71
+ WS_CLIENT_CLOSED: "ws:client-closed",
72
+ WS_CLIENT_ERROR: "ws:client-error"
73
+ };
74
+ function normalizeEntryFilename(filename) {
75
+ if (!filename || filename === "") {
76
+ return "/index.js";
77
+ }
78
+ if (filename.startsWith("../")) {
79
+ throw new Error(`Invalid entry filename "${filename}": cannot use "../" at the start. ` + `Use an absolute path like "/app.js" or a relative path like "./app.js".`);
80
+ }
81
+ const endsWithSlash = filename.endsWith("/");
82
+ let toNormalize;
83
+ if (filename.startsWith("/")) {
84
+ toNormalize = filename;
85
+ } else if (filename.startsWith("./")) {
86
+ toNormalize = "/" + filename.slice(2);
87
+ } else {
88
+ toNormalize = "/" + filename;
89
+ }
90
+ const normalized = normalizePosixPath(toNormalize, filename);
91
+ if (normalized === "/" || endsWithSlash) {
92
+ return normalized === "/" ? "/index.js" : normalized + "/index.js";
93
+ }
94
+ return normalized;
95
+ }
96
+ function normalizePosixPath(p, originalFilename) {
97
+ if (p === "")
98
+ return ".";
99
+ const isAbsolute = p.startsWith("/");
100
+ const segments = p.split("/").filter((s) => s !== "" && s !== ".");
101
+ const result = [];
102
+ let parentCount = 0;
103
+ for (const segment of segments) {
104
+ if (segment === "..") {
105
+ if (result.length > 0 && result[result.length - 1] !== "..") {
106
+ result.pop();
107
+ } else if (isAbsolute) {
108
+ parentCount++;
109
+ } else {
110
+ result.push("..");
111
+ }
112
+ } else {
113
+ result.push(segment);
114
+ }
115
+ }
116
+ if (isAbsolute && parentCount > 0 && result.length === 0) {}
117
+ const originalSegments = p.split("/").filter((s) => s !== "" && s !== ".");
118
+ let depth = 0;
119
+ for (const segment of originalSegments) {
120
+ if (segment === "..") {
121
+ depth--;
122
+ if (isAbsolute && depth < 0) {
123
+ throw new Error(`Invalid entry filename "${originalFilename}": path resolves above root directory.`);
124
+ }
125
+ } else {
126
+ depth++;
127
+ }
128
+ }
129
+ const normalized = result.join("/");
130
+ return isAbsolute ? "/" + normalized : normalized || ".";
131
+ }
132
+ export {
133
+ normalizeEntryFilename,
134
+ MessageTypeName,
135
+ MessageType,
136
+ IsolateEvents,
137
+ ErrorCode,
138
+ ClientEvents
139
+ };
140
+
141
+ //# debugId=548C82A71BA48D6B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/protocol/types.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Message types for the isolate daemon protocol.\n *\n * Frame format:\n * ┌──────────┬──────────┬─────────────────┐\n * │ Length │ Type │ Payload │\n * │ (4 bytes)│ (1 byte) │ (MessagePack) │\n * └──────────┴──────────┴─────────────────┘\n */\n\n// ============================================================================\n// Message Type Constants\n// ============================================================================\n\nexport const MessageType = {\n // Client → Daemon: Runtime management\n CREATE_RUNTIME: 0x01,\n DISPOSE_RUNTIME: 0x02,\n EVAL: 0x03,\n DISPATCH_REQUEST: 0x04,\n DISPATCH_REQUEST_ABORT: 0x05,\n\n // Client → Daemon: WebSocket operations\n WS_OPEN: 0x10,\n WS_MESSAGE: 0x11,\n WS_CLOSE: 0x12,\n\n // Client → Daemon: Handle operations\n FETCH_GET_UPGRADE_REQUEST: 0x13,\n FETCH_HAS_SERVE_HANDLER: 0x14,\n FETCH_HAS_ACTIVE_CONNECTIONS: 0x15,\n FETCH_WS_ERROR: 0x16,\n TIMERS_CLEAR_ALL: 0x17,\n CONSOLE_RESET: 0x18,\n CONSOLE_GET_TIMERS: 0x19,\n CONSOLE_GET_COUNTERS: 0x1a,\n CONSOLE_GET_GROUP_DEPTH: 0x1b,\n\n // Client → Daemon: Test environment\n RUN_TESTS: 0x21,\n RESET_TEST_ENV: 0x22,\n HAS_TESTS: 0x23,\n GET_TEST_COUNT: 0x24,\n\n // Client → Daemon: Playwright\n GET_COLLECTED_DATA: 0x33,\n CLEAR_COLLECTED_DATA: 0x34,\n\n // Daemon → Client: Responses\n RESPONSE_OK: 0x80,\n RESPONSE_ERROR: 0x81,\n RESPONSE_STREAM_START: 0x82,\n RESPONSE_STREAM_CHUNK: 0x83,\n RESPONSE_STREAM_END: 0x84,\n\n // Bidirectional: Callbacks\n CALLBACK_INVOKE: 0x90,\n CALLBACK_RESPONSE: 0x91,\n CALLBACK_STREAM_START: 0x92,\n CALLBACK_STREAM_CHUNK: 0x93,\n CALLBACK_STREAM_END: 0x94,\n CALLBACK_STREAM_CANCEL: 0x95,\n CALLBACK_ABORT: 0x96,\n\n // Bidirectional: Stream data\n STREAM_PUSH: 0xa0,\n STREAM_PULL: 0xa1,\n STREAM_CLOSE: 0xa2,\n STREAM_ERROR: 0xa3,\n\n // Bidirectional: Generic events\n ISOLATE_EVENT: 0xc0, // daemon → client\n CLIENT_EVENT: 0xc1, // client → daemon\n\n // Heartbeat\n PING: 0xf0,\n PONG: 0xf1,\n} as const;\n\nexport type MessageType = (typeof MessageType)[keyof typeof MessageType];\n\n/** Reverse lookup for message type names */\nexport const MessageTypeName: Record<number, string> = Object.fromEntries(\n Object.entries(MessageType).map(([k, v]) => [v, k])\n);\n\n// ============================================================================\n// Error Codes\n// ============================================================================\n\nexport const ErrorCode = {\n // Protocol errors\n INVALID_MESSAGE: 1001,\n UNKNOWN_MESSAGE_TYPE: 1002,\n MISSING_REQUIRED_FIELD: 1003,\n\n // Isolate errors\n ISOLATE_NOT_FOUND: 2001,\n ISOLATE_DISPOSED: 2002,\n ISOLATE_MEMORY_LIMIT: 2003,\n ISOLATE_TIMEOUT: 2004,\n\n // Execution errors\n SCRIPT_ERROR: 3001,\n CALLBACK_ERROR: 3002,\n\n // Stream errors\n STREAM_NOT_FOUND: 4001,\n STREAM_CLOSED: 4002,\n\n // Connection errors\n CONNECTION_LOST: 5001,\n} as const;\n\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n// ============================================================================\n// Base Message Interface\n// ============================================================================\n\nexport interface BaseMessage {\n /** Unique request ID for correlation */\n requestId: number;\n}\n\n// ============================================================================\n// Callback Registration\n// ============================================================================\n\n/** Custom function type indicator */\nexport type CustomFunctionType = 'sync' | 'async' | 'asyncIterator';\n\nexport interface CallbackRegistration {\n /** Unique ID for this callback */\n callbackId: number;\n /** Callback name (e.g., \"log\", \"warn\", \"fetch\") */\n name: string;\n /** Function type: sync, async, or asyncIterator */\n type: CustomFunctionType;\n}\n\nexport interface ConsoleCallbackRegistrations {\n onEntry?: CallbackRegistration;\n}\n\nexport interface FsCallbackRegistrations {\n readFile?: CallbackRegistration;\n writeFile?: CallbackRegistration;\n unlink?: CallbackRegistration;\n readdir?: CallbackRegistration;\n mkdir?: CallbackRegistration;\n rmdir?: CallbackRegistration;\n stat?: CallbackRegistration;\n rename?: CallbackRegistration;\n}\n\nexport interface CustomFunctionRegistrations {\n [name: string]: CallbackRegistration;\n}\n\n// ============================================================================\n// Playwright Callback Types\n// ============================================================================\n\n/**\n * Playwright operation sent from daemon to client via callback.\n * The client executes this operation on the real Page object.\n */\nexport interface PlaywrightOperation {\n type:\n | \"goto\"\n | \"reload\"\n | \"url\"\n | \"title\"\n | \"content\"\n | \"waitForSelector\"\n | \"waitForTimeout\"\n | \"waitForLoadState\"\n | \"evaluate\"\n | \"locatorAction\"\n | \"expectLocator\"\n | \"expectPage\"\n | \"request\"\n | \"goBack\"\n | \"goForward\"\n | \"waitForURL\"\n | \"waitForURLPredicate\"\n | \"waitForRequestStart\"\n | \"waitForRequestFinish\"\n | \"waitForRequestPredicateFinish\"\n | \"waitForResponseStart\"\n | \"waitForResponseFinish\"\n | \"waitForResponsePredicateFinish\"\n | \"clearCookies\"\n // Page-level operations\n | \"screenshot\"\n | \"setViewportSize\"\n | \"viewportSize\"\n | \"emulateMedia\"\n | \"setExtraHTTPHeaders\"\n | \"bringToFront\"\n | \"close\"\n | \"isClosed\"\n | \"pdf\"\n | \"pause\"\n | \"frames\"\n | \"mainFrame\"\n // Keyboard operations\n | \"keyboardType\"\n | \"keyboardPress\"\n | \"keyboardDown\"\n | \"keyboardUp\"\n | \"keyboardInsertText\"\n // Mouse operations\n | \"mouseMove\"\n | \"mouseClick\"\n | \"mouseDown\"\n | \"mouseUp\"\n | \"mouseWheel\"\n // Cookie operations\n | \"addCookies\"\n | \"cookies\"\n // Browser/Context lifecycle operations\n | \"newContext\"\n | \"newPage\"\n | \"closeContext\";\n args: unknown[];\n /** Target page ID (undefined = default page \"page_0\") */\n pageId?: string;\n /** Target context ID (undefined = default context \"ctx_0\") */\n contextId?: string;\n}\n\n/**\n * Result of a playwright operation.\n */\nexport type PlaywrightResult =\n | { ok: true; value?: unknown }\n | { ok: false; error: { name: string; message: string } };\n\n/**\n * Callback registrations for playwright operations.\n */\nexport interface PlaywrightCallbackRegistration {\n /** Callback ID for page operations */\n handlerCallbackId: number;\n /** If true, browser console logs are printed to stdout */\n console?: boolean;\n /** Optional callback for browser console log events (from the page, not sandbox) */\n onBrowserConsoleLogCallbackId?: number;\n /** Optional callback for network request events */\n onNetworkRequestCallbackId?: number;\n /** Optional callback for network response events */\n onNetworkResponseCallbackId?: number;\n}\n\n// ============================================================================\n// Runtime Callback Registrations\n// ============================================================================\n\nexport interface RuntimeCallbackRegistrations {\n console?: ConsoleCallbackRegistrations;\n fetch?: CallbackRegistration;\n fs?: FsCallbackRegistrations;\n moduleLoader?: CallbackRegistration;\n custom?: CustomFunctionRegistrations;\n playwright?: PlaywrightCallbackRegistration;\n}\n\n// ============================================================================\n// Client → Daemon Messages\n// ============================================================================\n\nexport interface TestEnvironmentCallbackRegistrations {\n /** Callback for test events */\n onEvent?: CallbackRegistration;\n}\n\nexport interface TestEnvironmentOptionsProtocol {\n /** Callback registrations for test events */\n callbacks?: TestEnvironmentCallbackRegistrations;\n /** Timeout for individual tests (ms) */\n testTimeout?: number;\n}\n\nexport interface PlaywrightOptionsProtocol {\n /** Default timeout for Playwright operations in ms */\n timeout?: number;\n}\n\nexport interface CreateRuntimeRequest extends BaseMessage {\n type: typeof MessageType.CREATE_RUNTIME;\n options: {\n memoryLimitMB?: number;\n executionTimeout?: number;\n callbacks?: RuntimeCallbackRegistrations;\n /** Current working directory for path.resolve(). Defaults to \"/\" */\n cwd?: string;\n /** Enable test environment (describe, it, expect, etc.) */\n testEnvironment?: boolean | TestEnvironmentOptionsProtocol;\n /** Playwright runtime options */\n playwright?: PlaywrightOptionsProtocol;\n /** Namespace ID for runtime pooling/reuse. If provided, runtime will be cached on dispose. */\n namespaceId?: string;\n };\n}\n\nexport interface DisposeRuntimeRequest extends BaseMessage {\n type: typeof MessageType.DISPOSE_RUNTIME;\n isolateId: string;\n /** When true, permanently delete the runtime instead of soft-deleting namespaced runtimes. */\n hard?: boolean;\n /** Optional caller-supplied reason for disposal, used for diagnostics/logging. */\n reason?: string;\n}\n\nexport interface EvalRequest extends BaseMessage {\n type: typeof MessageType.EVAL;\n isolateId: string;\n code: string;\n filename?: string;\n executionTimeout?: number;\n}\n\nexport interface SerializedRequest {\n method: string;\n url: string;\n headers: [string, string][];\n /** Inline body for small payloads */\n body?: Uint8Array | null;\n /** Stream reference for large/streaming bodies */\n bodyStreamId?: number;\n /** Whether the request signal was already aborted when serialized */\n signalAborted?: boolean;\n}\n\nexport interface DispatchRequestRequest extends BaseMessage {\n type: typeof MessageType.DISPATCH_REQUEST;\n isolateId: string;\n request: SerializedRequest;\n context?: {\n requestId?: string;\n metadata?: Record<string, string>;\n };\n}\n\n/**\n * Abort an in-flight DISPATCH_REQUEST.\n * This is fire-and-forget and does not produce a response.\n */\nexport interface DispatchRequestAbort {\n type: typeof MessageType.DISPATCH_REQUEST_ABORT;\n isolateId: string;\n /** requestId of the corresponding DISPATCH_REQUEST */\n targetRequestId: number;\n}\n\n// WebSocket messages\nexport interface WsOpenRequest extends BaseMessage {\n type: typeof MessageType.WS_OPEN;\n isolateId: string;\n connectionId: string;\n}\n\nexport interface WsMessageRequest extends BaseMessage {\n type: typeof MessageType.WS_MESSAGE;\n isolateId: string;\n connectionId: string;\n data: string | Uint8Array;\n}\n\nexport interface WsCloseRequest extends BaseMessage {\n type: typeof MessageType.WS_CLOSE;\n isolateId: string;\n connectionId: string;\n code: number;\n reason: string;\n}\n\n// Handle operation messages\nexport interface FetchGetUpgradeRequestRequest extends BaseMessage {\n type: typeof MessageType.FETCH_GET_UPGRADE_REQUEST;\n isolateId: string;\n}\n\nexport interface FetchHasServeHandlerRequest extends BaseMessage {\n type: typeof MessageType.FETCH_HAS_SERVE_HANDLER;\n isolateId: string;\n}\n\nexport interface FetchHasActiveConnectionsRequest extends BaseMessage {\n type: typeof MessageType.FETCH_HAS_ACTIVE_CONNECTIONS;\n isolateId: string;\n}\n\nexport interface FetchWsErrorRequest extends BaseMessage {\n type: typeof MessageType.FETCH_WS_ERROR;\n isolateId: string;\n connectionId: string;\n error: string;\n}\n\nexport interface TimersClearAllRequest extends BaseMessage {\n type: typeof MessageType.TIMERS_CLEAR_ALL;\n isolateId: string;\n}\n\nexport interface ConsoleResetRequest extends BaseMessage {\n type: typeof MessageType.CONSOLE_RESET;\n isolateId: string;\n}\n\nexport interface ConsoleGetTimersRequest extends BaseMessage {\n type: typeof MessageType.CONSOLE_GET_TIMERS;\n isolateId: string;\n}\n\nexport interface ConsoleGetCountersRequest extends BaseMessage {\n type: typeof MessageType.CONSOLE_GET_COUNTERS;\n isolateId: string;\n}\n\nexport interface ConsoleGetGroupDepthRequest extends BaseMessage {\n type: typeof MessageType.CONSOLE_GET_GROUP_DEPTH;\n isolateId: string;\n}\n\n// Test environment messages\nexport interface RunTestsRequest extends BaseMessage {\n type: typeof MessageType.RUN_TESTS;\n isolateId: string;\n timeout?: number;\n}\n\nexport interface ResetTestEnvRequest extends BaseMessage {\n type: typeof MessageType.RESET_TEST_ENV;\n isolateId: string;\n}\n\nexport interface HasTestsRequest extends BaseMessage {\n type: typeof MessageType.HAS_TESTS;\n isolateId: string;\n}\n\nexport interface GetTestCountRequest extends BaseMessage {\n type: typeof MessageType.GET_TEST_COUNT;\n isolateId: string;\n}\n\nexport interface GetCollectedDataRequest extends BaseMessage {\n type: typeof MessageType.GET_COLLECTED_DATA;\n isolateId: string;\n}\n\nexport interface ClearCollectedDataRequest extends BaseMessage {\n type: typeof MessageType.CLEAR_COLLECTED_DATA;\n isolateId: string;\n}\n\n// ============================================================================\n// Daemon → Client Messages\n// ============================================================================\n\nexport interface ResponseOk extends BaseMessage {\n type: typeof MessageType.RESPONSE_OK;\n data?: unknown;\n}\n\nexport interface ResponseError extends BaseMessage {\n type: typeof MessageType.RESPONSE_ERROR;\n code: ErrorCode;\n message: string;\n details?: {\n name: string;\n stack?: string;\n cause?: unknown;\n };\n}\n\nexport interface SerializedResponse {\n status: number;\n statusText: string;\n headers: [string, string][];\n /** Inline body for small payloads */\n body?: Uint8Array | null;\n /** Stream reference for large/streaming bodies */\n bodyStreamId?: number;\n}\n\nexport interface ResponseStreamStart extends BaseMessage {\n type: typeof MessageType.RESPONSE_STREAM_START;\n streamId: number;\n metadata?: {\n status?: number;\n statusText?: string;\n headers?: [string, string][];\n };\n}\n\nexport interface ResponseStreamChunk extends BaseMessage {\n type: typeof MessageType.RESPONSE_STREAM_CHUNK;\n streamId: number;\n chunk: Uint8Array;\n}\n\nexport interface ResponseStreamEnd extends BaseMessage {\n type: typeof MessageType.RESPONSE_STREAM_END;\n streamId: number;\n}\n\n// ============================================================================\n// Bidirectional: Callbacks\n// ============================================================================\n\nexport interface CallbackInvoke extends BaseMessage {\n type: typeof MessageType.CALLBACK_INVOKE;\n callbackId: number;\n args: unknown[];\n context?: {\n requestId?: string;\n metadata?: Record<string, string>;\n };\n}\n\nexport interface CallbackResponseMsg extends BaseMessage {\n type: typeof MessageType.CALLBACK_RESPONSE;\n result?: unknown;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n}\n\n/**\n * Start a streaming callback response (client → daemon).\n * Used when the callback returns a Response with a streaming body.\n */\nexport interface CallbackStreamStart extends BaseMessage {\n type: typeof MessageType.CALLBACK_STREAM_START;\n /** The stream ID for correlating chunks */\n streamId: number;\n /** Response metadata */\n metadata: {\n status: number;\n statusText: string;\n headers: [string, string][];\n /** Response URL (for network responses) */\n url?: string;\n };\n}\n\n/**\n * A chunk of streaming callback response data (client → daemon).\n */\nexport interface CallbackStreamChunk extends BaseMessage {\n type: typeof MessageType.CALLBACK_STREAM_CHUNK;\n /** The stream ID for correlation */\n streamId: number;\n /** The chunk data */\n chunk: Uint8Array;\n}\n\n/**\n * End of a streaming callback response (client → daemon).\n */\nexport interface CallbackStreamEnd extends BaseMessage {\n type: typeof MessageType.CALLBACK_STREAM_END;\n /** The stream ID for correlation */\n streamId: number;\n}\n\n/**\n * Cancel a streaming callback response (daemon → client).\n * Tells the client to stop reading the response body.\n */\nexport interface CallbackStreamCancel {\n type: typeof MessageType.CALLBACK_STREAM_CANCEL;\n /** The stream ID to cancel */\n streamId: number;\n}\n\n/**\n * Abort an in-flight callback invocation (daemon → client).\n * Tells the client to cancel the callback identified by targetRequestId.\n */\nexport interface CallbackAbort extends BaseMessage {\n type: typeof MessageType.CALLBACK_ABORT;\n /** requestId of the corresponding CALLBACK_INVOKE */\n targetRequestId: number;\n /** Optional reason for observability/debugging */\n reason?: string;\n}\n\n// ============================================================================\n// Bidirectional: Stream Data\n// ============================================================================\n\nexport interface StreamPush {\n type: typeof MessageType.STREAM_PUSH;\n streamId: number;\n chunk: Uint8Array;\n}\n\nexport interface StreamPull {\n type: typeof MessageType.STREAM_PULL;\n streamId: number;\n maxBytes: number;\n}\n\nexport interface StreamClose {\n type: typeof MessageType.STREAM_CLOSE;\n streamId: number;\n}\n\nexport interface StreamError {\n type: typeof MessageType.STREAM_ERROR;\n streamId: number;\n error: string;\n}\n\n// ============================================================================\n// Generic Events\n// ============================================================================\n\n/** Event name constants for isolate → client events */\nexport const IsolateEvents = {\n WS_COMMAND: \"ws:command\",\n WS_CLIENT_CONNECT: \"ws:client-connect\",\n WS_CLIENT_SEND: \"ws:client-send\",\n WS_CLIENT_CLOSE: \"ws:client-close\",\n} as const;\n\n/** Event name constants for client → daemon events */\nexport const ClientEvents = {\n WS_CLIENT_OPENED: \"ws:client-opened\",\n WS_CLIENT_MESSAGE: \"ws:client-message\",\n WS_CLIENT_CLOSED: \"ws:client-closed\",\n WS_CLIENT_ERROR: \"ws:client-error\",\n} as const;\n\n/** Generic event from daemon to client */\nexport interface IsolateEventMessage {\n type: typeof MessageType.ISOLATE_EVENT;\n isolateId: string;\n event: string;\n payload: unknown;\n}\n\n/** Generic event from client to daemon */\nexport interface ClientEventMessage {\n type: typeof MessageType.CLIENT_EVENT;\n isolateId: string;\n event: string;\n payload: unknown;\n}\n\n// Typed payloads for internal WS events (for type safety at usage sites)\n\nexport interface WsCommandPayload {\n type: \"message\" | \"close\";\n connectionId: string;\n data?: string | Uint8Array;\n code?: number;\n reason?: string;\n}\n\nexport interface WsClientConnectPayload {\n socketId: string;\n url: string;\n protocols?: string[];\n}\n\nexport interface WsClientSendPayload {\n socketId: string;\n data: string | Uint8Array;\n}\n\nexport interface WsClientClosePayload {\n socketId: string;\n code?: number;\n reason?: string;\n}\n\nexport interface WsClientOpenedPayload {\n socketId: string;\n protocol: string;\n extensions: string;\n}\n\nexport interface WsClientMessagePayload {\n socketId: string;\n data: string | Uint8Array;\n}\n\nexport interface WsClientClosedPayload {\n socketId: string;\n code: number;\n reason: string;\n wasClean: boolean;\n}\n\nexport interface WsClientErrorPayload {\n socketId: string;\n}\n\n/**\n * Unified playwright event type for the onEvent callback.\n */\nexport type PlaywrightEvent =\n | {\n type: \"browserConsoleLog\";\n level: string;\n stdout: string;\n location?: {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n timestamp: number;\n }\n | {\n type: \"pageError\";\n name: string;\n message: string;\n stack?: string;\n timestamp: number;\n }\n | {\n type: \"networkRequest\";\n requestId: string;\n url: string;\n method: string;\n headers: Record<string, string>;\n postData?: string;\n resourceType?: string;\n timestamp: number;\n }\n | {\n type: \"networkResponse\";\n requestId: string;\n url: string;\n status: number;\n statusText?: string;\n headers: Record<string, string>;\n resourceType?: string;\n timestamp: number;\n }\n | {\n type: \"requestFailure\";\n requestId: string;\n url: string;\n method: string;\n failureText: string;\n resourceType?: string;\n timestamp: number;\n };\n\n// ============================================================================\n// Heartbeat\n// ============================================================================\n\nexport interface PingMessage {\n type: typeof MessageType.PING;\n}\n\nexport interface PongMessage {\n type: typeof MessageType.PONG;\n}\n\n// ============================================================================\n// Union Types\n// ============================================================================\n\nexport type ClientMessage =\n | CreateRuntimeRequest\n | DisposeRuntimeRequest\n | EvalRequest\n | DispatchRequestRequest\n | DispatchRequestAbort\n | WsOpenRequest\n | WsMessageRequest\n | WsCloseRequest\n | FetchGetUpgradeRequestRequest\n | FetchHasServeHandlerRequest\n | FetchHasActiveConnectionsRequest\n | FetchWsErrorRequest\n | TimersClearAllRequest\n | ConsoleResetRequest\n | ConsoleGetTimersRequest\n | ConsoleGetCountersRequest\n | ConsoleGetGroupDepthRequest\n | RunTestsRequest\n | ResetTestEnvRequest\n | HasTestsRequest\n | GetTestCountRequest\n | GetCollectedDataRequest\n | ClearCollectedDataRequest\n | CallbackResponseMsg\n | CallbackStreamStart\n | CallbackStreamChunk\n | CallbackStreamEnd\n | CallbackStreamCancel\n | StreamPush\n | StreamPull\n | StreamClose\n | StreamError\n | ClientEventMessage\n | PingMessage;\n\nexport type DaemonMessage =\n | ResponseOk\n | ResponseError\n | ResponseStreamStart\n | ResponseStreamChunk\n | ResponseStreamEnd\n | CallbackInvoke\n | CallbackAbort\n | StreamPush\n | StreamPull\n | StreamClose\n | StreamError\n | IsolateEventMessage\n | PongMessage;\n\nexport type Message = ClientMessage | DaemonMessage;\n\n// ============================================================================\n// Shared Types (used by both isolate-runtime and isolate-client)\n// ============================================================================\n\n/**\n * Module loader callback type.\n * Called when the isolate imports a module dynamically.\n *\n * @param moduleName - The module specifier being imported\n * @param importer - Information about the importing module\n * @param importer.path - The resolved path of the importing module\n * @param importer.resolveDir - The directory to resolve relative imports from\n * @returns Object with code and resolveDir for the resolved module\n */\nexport type ModuleLoaderCallback = (\n moduleName: string,\n importer: { path: string; resolveDir: string }\n) => ModuleLoaderResult | Promise<ModuleLoaderResult>;\n\nexport interface ModuleLoaderResult {\n code: string;\n /** The filename for this module (basename only, no slashes). Combined with resolveDir to form the full path. */\n filename: string;\n resolveDir: string;\n /** Mark as static to preserve across namespace reuse (e.g. node_modules).\n * Static modules and their transitive deps should all be static. */\n static?: boolean;\n}\n\n/**\n * A custom function that can be called from within the isolate.\n */\nexport type CustomFunction<T extends any[] = unknown[]> = (...args: T) => unknown | Promise<unknown>;\n\n/**\n * An async generator function that can be consumed in the isolate via for await...of.\n */\nexport type CustomAsyncGeneratorFunction<T extends any[] = unknown[]> = (...args: T) => AsyncGenerator<unknown, unknown, unknown>;\n\n/**\n * Custom function definition with metadata.\n * Requires explicit `type` property to indicate function behavior.\n */\nexport interface CustomFunctionDefinition<T extends any[] = unknown[]> {\n /** The function implementation */\n fn: CustomFunction<T> | CustomAsyncGeneratorFunction<T>;\n /** Function type: 'sync', 'async', or 'asyncIterator' */\n type: CustomFunctionType;\n}\n\n/**\n * Custom functions to register in the runtime.\n * Each function must be defined with explicit type property.\n *\n * @example\n * ```typescript\n * customFunctions: {\n * // Sync function\n * getConfig: {\n * fn: () => ({ environment: \"production\" }),\n * type: 'sync',\n * },\n * // Async function\n * hashPassword: {\n * fn: async (password) => bcrypt.hash(password, 10),\n * type: 'async',\n * },\n * // Async iterator function\n * streamData: {\n * fn: async function* (options) {\n * for await (const chunk of someStream) {\n * yield chunk;\n * }\n * },\n * type: 'asyncIterator',\n * },\n * }\n * ```\n */\nexport type CustomFunctions<T extends Record<string, any[]> = Record<string, unknown[]>> = {\n [K in keyof T]: CustomFunctionDefinition<T[K]>;\n}\n\n/**\n * Console entry types for structured console output.\n * Each entry type captures the specific data needed to render like DevTools.\n * Output is pre-formatted as stdout strings (like Node.js console) inside the sandbox.\n */\nexport type ConsoleEntry =\n | {\n type: \"output\";\n level: \"log\" | \"warn\" | \"error\" | \"info\" | \"debug\";\n stdout: string;\n groupDepth: number;\n }\n | {\n /** Browser console output (from Playwright page, not sandbox) */\n type: \"browserOutput\";\n level: string;\n stdout: string;\n location?: {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n timestamp: number;\n }\n | { type: \"dir\"; stdout: string; groupDepth: number }\n | { type: \"table\"; stdout: string; groupDepth: number }\n | { type: \"time\"; label: string; duration: number; groupDepth: number }\n | {\n type: \"timeLog\";\n label: string;\n duration: number;\n stdout: string;\n groupDepth: number;\n }\n | { type: \"count\"; label: string; count: number; groupDepth: number }\n | { type: \"countReset\"; label: string; groupDepth: number }\n | { type: \"assert\"; stdout: string; groupDepth: number }\n | {\n type: \"group\";\n label: string;\n collapsed: boolean;\n groupDepth: number;\n }\n | { type: \"groupEnd\"; groupDepth: number }\n | { type: \"clear\" }\n | { type: \"trace\"; stdout: string; stack: string; groupDepth: number };\n\n/**\n * Console callback handlers with single structured callback.\n */\nexport interface ConsoleCallbacks {\n /**\n * Callback invoked for each console operation.\n * Receives a structured entry with all data needed to render the output.\n */\n onEntry?: (entry: ConsoleEntry) => void;\n}\n\n/**\n * Fetch request init type.\n */\nexport interface FetchRequestInit {\n method: string;\n headers: [string, string][];\n /** Raw body bytes - use this if you need direct access to the body data */\n rawBody: Uint8Array | null;\n /** Body ready for use with fetch() - same data as rawBody but typed as BodyInit */\n body: BodyInit | null;\n signal: AbortSignal;\n}\n\n/**\n * Fetch callback type.\n */\nexport type FetchCallback = (url: string, init: FetchRequestInit) => Response | Promise<Response>;\n\n/**\n * WebSocket callback type.\n * Called when isolate code creates an outbound WebSocket connection.\n * Return a WebSocket to proxy the connection, or null to block it.\n */\nexport type WebSocketCallback = (url: string, protocols: string[]) => WebSocket | Promise<WebSocket | null> | null;\n\n/**\n * File system callback handlers.\n */\nexport interface FileSystemCallbacks {\n readFile?: (path: string) => Promise<ArrayBuffer>;\n writeFile?: (path: string, data: ArrayBuffer) => Promise<void>;\n unlink?: (path: string) => Promise<void>;\n readdir?: (path: string) => Promise<string[]>;\n mkdir?: (path: string, options?: { recursive?: boolean }) => Promise<void>;\n rmdir?: (path: string) => Promise<void>;\n stat?: (\n path: string\n ) => Promise<{ isFile: boolean; isDirectory: boolean; size: number }>;\n rename?: (from: string, to: string) => Promise<void>;\n}\n\n/**\n * Options for dispatching a request.\n */\nexport interface DispatchOptions {\n /** AbortSignal to cancel the request */\n signal?: AbortSignal;\n /** Optional request identifier forwarded to host callbacks */\n requestId?: string;\n /** Optional metadata forwarded to host callbacks */\n metadata?: Record<string, string>;\n}\n\n/**\n * Options for eval() method.\n */\nexport interface EvalOptions {\n /** Filename for stack traces */\n filename?: string;\n /** Timeout for the full eval execution in milliseconds */\n executionTimeout?: number;\n}\n\n/**\n * Test environment options for createRuntime.\n */\nexport interface TestEnvironmentOptions {\n /** Receive test lifecycle events */\n onEvent?: (event: TestEvent) => void;\n /** Timeout for individual tests (ms) */\n testTimeout?: number;\n}\n\n/**\n * File data for setInputFiles operations.\n */\nexport interface PlaywrightFileData {\n /** File name */\n name: string;\n /** MIME type */\n mimeType: string;\n /** File contents as Buffer */\n buffer: Buffer;\n}\n\n/**\n * Options for Playwright integration.\n *\n * Public API is handler-first: host-specific page wiring should be done by\n * creating a handler (for example via `defaultPlaywrightHandler(page)`).\n */\nexport interface PlaywrightOptions {\n /** Handler callback for Playwright operations (required when playwright is enabled) */\n handler: (op: PlaywrightOperation) => Promise<PlaywrightResult>;\n /** Default timeout for operations in ms */\n timeout?: number;\n /** If true, browser console logs are routed through console handler (or printed to stdout if no handler) */\n console?: boolean;\n /** Unified event callback for all playwright events */\n onEvent?: (event: PlaywrightEvent) => void;\n}\n\n/**\n * Base runtime options shared between isolate-client and isolate-runtime.\n * Each package extends this with its own `fs` type.\n */\nexport interface BaseRuntimeOptions<T extends Record<string, any[]> = Record<string, unknown[]>> {\n /** Memory limit in megabytes (optional) */\n memoryLimitMB?: number;\n /** Timeout for the full eval/test execution in milliseconds */\n executionTimeout?: number;\n /** Console callback handlers */\n console?: ConsoleCallbacks;\n /** Fetch callback handler */\n fetch?: FetchCallback;\n /** WebSocket callback handler for outbound connections from isolate */\n webSocket?: WebSocketCallback;\n /** Module loader callback for resolving dynamic imports */\n moduleLoader?: ModuleLoaderCallback;\n /** Custom functions callable from within the isolate */\n customFunctions?: CustomFunctions<T>;\n /** Current working directory for path.resolve(). Defaults to \"/\" */\n cwd?: string;\n /** Enable test environment (describe, it, expect, etc.) */\n testEnvironment?: boolean | TestEnvironmentOptions;\n /** Playwright options (handler-first API) */\n playwright?: PlaywrightOptions;\n}\n\n// ============================================================================\n// Result Types (for responses)\n// ============================================================================\n\nexport interface CreateRuntimeResult {\n isolateId: string;\n /** True if runtime was reused from namespace pool */\n reused?: boolean;\n}\n\nexport interface EvalResult {\n value: unknown;\n}\n\nexport interface DispatchRequestResult {\n response: SerializedResponse;\n}\n\n// ============================================================================\n// Test Environment Types\n// ============================================================================\n\nexport interface SuiteInfo {\n name: string;\n /** Ancestry path: [\"outer\", \"inner\"] */\n path: string[];\n /** Full display name: \"outer > inner\" */\n fullName: string;\n /** Nesting depth (0 for root-level suites) */\n depth: number;\n}\n\nexport interface SuiteResult extends SuiteInfo {\n passed: number;\n failed: number;\n skipped: number;\n todo: number;\n duration: number;\n}\n\nexport interface TestInfo {\n name: string;\n /** Suite ancestry */\n suitePath: string[];\n /** Full display name: \"suite > test name\" */\n fullName: string;\n}\n\nexport interface TestError {\n message: string;\n stack?: string;\n /** For assertion failures */\n expected?: unknown;\n actual?: unknown;\n /** e.g., \"toBe\", \"toEqual\", \"toContain\" */\n matcherName?: string;\n}\n\nexport interface TestResult extends TestInfo {\n status: \"pass\" | \"fail\" | \"skip\" | \"todo\";\n duration: number;\n error?: TestError;\n}\n\nexport type TestEvent =\n | { type: \"runStart\"; testCount: number; suiteCount: number }\n | { type: \"suiteStart\"; suite: SuiteInfo }\n | { type: \"suiteEnd\"; suite: SuiteResult }\n | { type: \"testStart\"; test: TestInfo }\n | { type: \"testEnd\"; test: TestResult }\n | { type: \"runEnd\"; results: RunTestsResult };\n\nexport interface RunTestsResult {\n passed: number;\n failed: number;\n skipped: number;\n todo: number;\n total: number;\n duration: number;\n success: boolean;\n suites: SuiteResult[];\n tests: TestResult[];\n}\n\nexport interface PlaywrightTestResult {\n passed: number;\n failed: number;\n total: number;\n results: {\n name: string;\n passed: boolean;\n error?: string;\n duration: number;\n }[];\n}\n\nexport interface CollectedData {\n /** Browser console logs (from the page, not sandbox) */\n browserConsoleLogs: {\n level: string;\n stdout: string;\n location?: {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n timestamp: number;\n }[];\n pageErrors: {\n name: string;\n message: string;\n stack?: string;\n timestamp: number;\n }[];\n networkRequests: {\n requestId: string;\n url: string;\n method: string;\n headers: Record<string, string>;\n postData?: string;\n resourceType?: string;\n timestamp: number;\n }[];\n networkResponses: {\n requestId: string;\n url: string;\n status: number;\n headers: Record<string, string>;\n statusText?: string;\n resourceType?: string;\n timestamp: number;\n }[];\n requestFailures: {\n requestId: string;\n url: string;\n method: string;\n failureText: string;\n resourceType?: string;\n timestamp: number;\n }[];\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Normalize a filename to an absolute path for module resolution.\n *\n * Rules:\n * - undefined/empty/\"\" → \"/index.js\"\n * - Absolute paths (start with /) → normalized as-is\n * - Relative paths starting with \"./\" → converted to absolute from root\n * - Bare filenames (no leading ./ or /) → converted to absolute from root\n * - Paths starting with \"../\" → Error (can't resolve parent of root)\n * - Directory paths (\"/\" or \"./\") → append \"index.js\"\n *\n * @example\n * normalizeEntryFilename(undefined) // \"/index.js\"\n * normalizeEntryFilename(\"\") // \"/index.js\"\n * normalizeEntryFilename(\"app.js\") // \"/app.js\"\n * normalizeEntryFilename(\"./app.js\") // \"/app.js\"\n * normalizeEntryFilename(\"/app.js\") // \"/app.js\"\n * normalizeEntryFilename(\"./foo/bar.js\") // \"/foo/bar.js\"\n * normalizeEntryFilename(\"/\") // \"/index.js\"\n * normalizeEntryFilename(\"./\") // \"/index.js\"\n * normalizeEntryFilename(\"../app.js\") // throws Error\n *\n * @throws Error if the filename cannot be normalized (e.g., starts with \"../\")\n */\nexport function normalizeEntryFilename(filename: string | undefined): string {\n // Default to /index.js\n if (!filename || filename === \"\") {\n return \"/index.js\";\n }\n\n // Reject paths that try to go above root\n if (filename.startsWith(\"../\")) {\n throw new Error(\n `Invalid entry filename \"${filename}\": cannot use \"../\" at the start. ` +\n `Use an absolute path like \"/app.js\" or a relative path like \"./app.js\".`\n );\n }\n\n // Track if original path ends with / (indicates directory)\n const endsWithSlash = filename.endsWith(\"/\");\n\n let toNormalize: string;\n if (filename.startsWith(\"/\")) {\n // Already absolute\n toNormalize = filename;\n } else if (filename.startsWith(\"./\")) {\n // Relative from root: ./app.js → /app.js\n toNormalize = \"/\" + filename.slice(2);\n } else {\n // Bare filename: app.js → /app.js\n toNormalize = \"/\" + filename;\n }\n\n // Normalize path and check for escaping root\n const normalized = normalizePosixPath(toNormalize, filename);\n\n // Handle directory paths - append index.js\n if (normalized === \"/\" || endsWithSlash) {\n return normalized === \"/\" ? \"/index.js\" : normalized + \"/index.js\";\n }\n\n return normalized;\n}\n\n/**\n * Simple POSIX path normalization without external dependencies.\n * Handles . and .. segments, collapses multiple slashes.\n * Throws if path tries to escape above root.\n */\nfunction normalizePosixPath(p: string, originalFilename: string): string {\n if (p === \"\") return \".\";\n\n const isAbsolute = p.startsWith(\"/\");\n const segments = p.split(\"/\").filter(s => s !== \"\" && s !== \".\");\n const result: string[] = [];\n let parentCount = 0; // Track how many .. we've seen at root level\n\n for (const segment of segments) {\n if (segment === \"..\") {\n if (result.length > 0 && result[result.length - 1] !== \"..\") {\n result.pop();\n } else if (isAbsolute) {\n // For absolute paths, track attempts to go above root\n parentCount++;\n } else {\n result.push(\"..\");\n }\n } else {\n result.push(segment);\n }\n }\n\n // If we tried to go above root, throw an error\n if (isAbsolute && parentCount > 0 && result.length === 0) {\n // Only throw if we actually escaped (ended up at root after going above)\n // This catches cases like /foo/../../bar.js where we went above root\n }\n\n // Count segments before normalization to detect if we went above root\n const originalSegments = p.split(\"/\").filter(s => s !== \"\" && s !== \".\");\n let depth = 0;\n for (const segment of originalSegments) {\n if (segment === \"..\") {\n depth--;\n if (isAbsolute && depth < 0) {\n throw new Error(\n `Invalid entry filename \"${originalFilename}\": path resolves above root directory.`\n );\n }\n } else {\n depth++;\n }\n }\n\n const normalized = result.join(\"/\");\n return isAbsolute ? \"/\" + normalized : (normalized || \".\");\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "548C82A71BA48D6B64756E2164756E21",
9
+ "names": []
10
+ }