@nimbus-sh/worker 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 (408) hide show
  1. package/README.md +219 -0
  2. package/dist/_shared/bytes.d.ts +18 -0
  3. package/dist/_shared/bytes.d.ts.map +1 -0
  4. package/dist/_shared/bytes.js +17 -0
  5. package/dist/_shared/cache-stats.d.ts +146 -0
  6. package/dist/_shared/cache-stats.d.ts.map +1 -0
  7. package/dist/_shared/cache-stats.js +162 -0
  8. package/dist/_shared/exports-resolver.d.ts +76 -0
  9. package/dist/_shared/exports-resolver.d.ts.map +1 -0
  10. package/dist/_shared/exports-resolver.js +284 -0
  11. package/dist/_shared/install-phase.d.ts +47 -0
  12. package/dist/_shared/install-phase.d.ts.map +1 -0
  13. package/dist/_shared/install-phase.js +1 -0
  14. package/dist/_shared/real-node-imports.d.ts +38 -0
  15. package/dist/_shared/real-node-imports.d.ts.map +1 -0
  16. package/dist/_shared/real-node-imports.js +46 -0
  17. package/dist/_shared/retry.d.ts +93 -0
  18. package/dist/_shared/retry.d.ts.map +1 -0
  19. package/dist/_shared/retry.js +161 -0
  20. package/dist/_shared/session-id.d.ts +39 -0
  21. package/dist/_shared/session-id.d.ts.map +1 -0
  22. package/dist/_shared/session-id.js +127 -0
  23. package/dist/_shared/session-router.d.ts +104 -0
  24. package/dist/_shared/session-router.d.ts.map +1 -0
  25. package/dist/_shared/session-router.js +165 -0
  26. package/dist/_shared/w7-frame.d.ts +93 -0
  27. package/dist/_shared/w7-frame.d.ts.map +1 -0
  28. package/dist/_shared/w7-frame.js +402 -0
  29. package/dist/auth/index.d.ts +16 -0
  30. package/dist/auth/index.d.ts.map +1 -0
  31. package/dist/auth/index.js +15 -0
  32. package/dist/auth/middleware.d.ts +85 -0
  33. package/dist/auth/middleware.d.ts.map +1 -0
  34. package/dist/auth/middleware.js +150 -0
  35. package/dist/auth/token.d.ts +96 -0
  36. package/dist/auth/token.d.ts.map +1 -0
  37. package/dist/auth/token.js +226 -0
  38. package/dist/auth/types.d.ts +141 -0
  39. package/dist/auth/types.d.ts.map +1 -0
  40. package/dist/auth/types.js +114 -0
  41. package/dist/bindings/d1.d.ts +102 -0
  42. package/dist/bindings/d1.d.ts.map +1 -0
  43. package/dist/bindings/d1.js +549 -0
  44. package/dist/bindings/kv.d.ts +82 -0
  45. package/dist/bindings/kv.d.ts.map +1 -0
  46. package/dist/bindings/kv.js +290 -0
  47. package/dist/bindings/r2.d.ts +137 -0
  48. package/dist/bindings/r2.d.ts.map +1 -0
  49. package/dist/bindings/r2.js +379 -0
  50. package/dist/cirrus-npm-cjs.generated.d.ts +17 -0
  51. package/dist/cirrus-npm-cjs.generated.d.ts.map +1 -0
  52. package/dist/cirrus-npm-cjs.generated.js +41 -0
  53. package/dist/cirrus-plugin-react.generated.d.ts +34 -0
  54. package/dist/cirrus-plugin-react.generated.d.ts.map +1 -0
  55. package/dist/cirrus-plugin-react.generated.js +33 -0
  56. package/dist/constants.d.ts +34 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +116 -0
  59. package/dist/esbuild-wasm-bundle.generated.d.ts +41 -0
  60. package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -0
  61. package/dist/esbuild-wasm-bundle.generated.js +40 -0
  62. package/dist/facets/cirrus-real.d.ts +147 -0
  63. package/dist/facets/cirrus-real.d.ts.map +1 -0
  64. package/dist/facets/cirrus-real.js +981 -0
  65. package/dist/facets/inner-do-registry.d.ts +41 -0
  66. package/dist/facets/inner-do-registry.d.ts.map +1 -0
  67. package/dist/facets/inner-do-registry.js +51 -0
  68. package/dist/facets/manager.d.ts +314 -0
  69. package/dist/facets/manager.d.ts.map +1 -0
  70. package/dist/facets/manager.js +2681 -0
  71. package/dist/facets/process.d.ts +318 -0
  72. package/dist/facets/process.d.ts.map +1 -0
  73. package/dist/facets/process.js +567 -0
  74. package/dist/facets/real-vite-fs-shim.d.ts +151 -0
  75. package/dist/facets/real-vite-fs-shim.d.ts.map +1 -0
  76. package/dist/facets/real-vite-fs-shim.js +1279 -0
  77. package/dist/facets/real-vite-hmr.d.ts +142 -0
  78. package/dist/facets/real-vite-hmr.d.ts.map +1 -0
  79. package/dist/facets/real-vite-hmr.js +476 -0
  80. package/dist/facets/vite-dev-server.d.ts +293 -0
  81. package/dist/facets/vite-dev-server.d.ts.map +1 -0
  82. package/dist/facets/vite-dev-server.js +2580 -0
  83. package/dist/facets/wasm-swap-registry.d.ts +261 -0
  84. package/dist/facets/wasm-swap-registry.d.ts.map +1 -0
  85. package/dist/facets/wasm-swap-registry.js +551 -0
  86. package/dist/facets/ws-terminal.d.ts +107 -0
  87. package/dist/facets/ws-terminal.d.ts.map +1 -0
  88. package/dist/facets/ws-terminal.js +207 -0
  89. package/dist/git/commands.d.ts +13 -0
  90. package/dist/git/commands.d.ts.map +1 -0
  91. package/dist/git/commands.js +633 -0
  92. package/dist/git/network-facet.d.ts +61 -0
  93. package/dist/git/network-facet.d.ts.map +1 -0
  94. package/dist/git/network-facet.js +700 -0
  95. package/dist/git-bundle.generated.d.ts +16 -0
  96. package/dist/git-bundle.generated.d.ts.map +1 -0
  97. package/dist/git-bundle.generated.js +15 -0
  98. package/dist/index.d.ts +41 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +73 -0
  101. package/dist/loaders/child-process/spawn-facet.d.ts +90 -0
  102. package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -0
  103. package/dist/loaders/child-process/spawn-facet.js +103 -0
  104. package/dist/loaders/child-process/spawn-pool.d.ts +110 -0
  105. package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -0
  106. package/dist/loaders/child-process/spawn-pool.js +161 -0
  107. package/dist/loaders/fanout-pool.d.ts +195 -0
  108. package/dist/loaders/fanout-pool.d.ts.map +1 -0
  109. package/dist/loaders/fanout-pool.js +326 -0
  110. package/dist/loaders/generated-workers.d.ts +26 -0
  111. package/dist/loaders/generated-workers.d.ts.map +1 -0
  112. package/dist/loaders/generated-workers.js +25 -0
  113. package/dist/loaders/index.d.ts +15 -0
  114. package/dist/loaders/index.d.ts.map +1 -0
  115. package/dist/loaders/index.js +13 -0
  116. package/dist/loaders/loader-pool.d.ts +273 -0
  117. package/dist/loaders/loader-pool.d.ts.map +1 -0
  118. package/dist/loaders/loader-pool.js +624 -0
  119. package/dist/loaders/npm-resolve-preamble.d.ts +34 -0
  120. package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -0
  121. package/dist/loaders/npm-resolve-preamble.js +237 -0
  122. package/dist/loaders/pre-bundle-preamble.d.ts +41 -0
  123. package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -0
  124. package/dist/loaders/pre-bundle-preamble.js +114 -0
  125. package/dist/loaders/vendor/codegen.d.ts +24 -0
  126. package/dist/loaders/vendor/codegen.d.ts.map +1 -0
  127. package/dist/loaders/vendor/codegen.js +44 -0
  128. package/dist/loaders/vendor/errors.d.ts +24 -0
  129. package/dist/loaders/vendor/errors.d.ts.map +1 -0
  130. package/dist/loaders/vendor/errors.js +46 -0
  131. package/dist/loaders/vendor/index.d.ts +16 -0
  132. package/dist/loaders/vendor/index.d.ts.map +1 -0
  133. package/dist/loaders/vendor/index.js +11 -0
  134. package/dist/loaders/vendor/pool.d.ts +88 -0
  135. package/dist/loaders/vendor/pool.d.ts.map +1 -0
  136. package/dist/loaders/vendor/pool.js +353 -0
  137. package/dist/loaders/vendor/primitives.d.ts +11 -0
  138. package/dist/loaders/vendor/primitives.d.ts.map +1 -0
  139. package/dist/loaders/vendor/primitives.js +33 -0
  140. package/dist/loaders/vendor/serialize.d.ts +3 -0
  141. package/dist/loaders/vendor/serialize.d.ts.map +1 -0
  142. package/dist/loaders/vendor/serialize.js +25 -0
  143. package/dist/loaders/vendor/types.d.ts +60 -0
  144. package/dist/loaders/vendor/types.d.ts.map +1 -0
  145. package/dist/loaders/vendor/types.js +4 -0
  146. package/dist/npm/cache.d.ts +136 -0
  147. package/dist/npm/cache.d.ts.map +1 -0
  148. package/dist/npm/cache.js +429 -0
  149. package/dist/npm/install-batch-facet.d.ts +129 -0
  150. package/dist/npm/install-batch-facet.d.ts.map +1 -0
  151. package/dist/npm/install-batch-facet.js +598 -0
  152. package/dist/npm/install-facet.d.ts +29 -0
  153. package/dist/npm/install-facet.d.ts.map +1 -0
  154. package/dist/npm/install-facet.js +9 -0
  155. package/dist/npm/installer.d.ts +239 -0
  156. package/dist/npm/installer.d.ts.map +1 -0
  157. package/dist/npm/installer.js +2022 -0
  158. package/dist/npm/npx-install.d.ts +74 -0
  159. package/dist/npm/npx-install.d.ts.map +1 -0
  160. package/dist/npm/npx-install.js +302 -0
  161. package/dist/npm/pre-bundle-facet.d.ts +168 -0
  162. package/dist/npm/pre-bundle-facet.d.ts.map +1 -0
  163. package/dist/npm/pre-bundle-facet.js +653 -0
  164. package/dist/npm/r2-cache.d.ts +286 -0
  165. package/dist/npm/r2-cache.d.ts.map +1 -0
  166. package/dist/npm/r2-cache.js +506 -0
  167. package/dist/npm/resolve-facet.d.ts +202 -0
  168. package/dist/npm/resolve-facet.d.ts.map +1 -0
  169. package/dist/npm/resolve-facet.js +833 -0
  170. package/dist/npm/resolve-one-facet.d.ts +204 -0
  171. package/dist/npm/resolve-one-facet.d.ts.map +1 -0
  172. package/dist/npm/resolve-one-facet.js +437 -0
  173. package/dist/npm/resolver.d.ts +109 -0
  174. package/dist/npm/resolver.d.ts.map +1 -0
  175. package/dist/npm/resolver.js +899 -0
  176. package/dist/npm/tarball-stream.d.ts +85 -0
  177. package/dist/npm/tarball-stream.d.ts.map +1 -0
  178. package/dist/npm/tarball-stream.js +205 -0
  179. package/dist/npm/tarball.d.ts +51 -0
  180. package/dist/npm/tarball.d.ts.map +1 -0
  181. package/dist/npm/tarball.js +185 -0
  182. package/dist/observability/diag-counters.d.ts +292 -0
  183. package/dist/observability/diag-counters.d.ts.map +1 -0
  184. package/dist/observability/diag-counters.js +302 -0
  185. package/dist/observability/heap-estimate.d.ts +166 -0
  186. package/dist/observability/heap-estimate.d.ts.map +1 -0
  187. package/dist/observability/heap-estimate.js +192 -0
  188. package/dist/observability/heavy-alloc-coord.d.ts +95 -0
  189. package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
  190. package/dist/observability/heavy-alloc-coord.js +149 -0
  191. package/dist/observability/oom-classify.d.ts +56 -0
  192. package/dist/observability/oom-classify.d.ts.map +1 -0
  193. package/dist/observability/oom-classify.js +118 -0
  194. package/dist/observability/oom-discriminator.d.ts +192 -0
  195. package/dist/observability/oom-discriminator.d.ts.map +1 -0
  196. package/dist/observability/oom-discriminator.js +233 -0
  197. package/dist/real-vite-bundle.generated.d.ts +46 -0
  198. package/dist/real-vite-bundle.generated.d.ts.map +1 -0
  199. package/dist/real-vite-bundle.generated.js +53 -0
  200. package/dist/replica/routing.d.ts +171 -0
  201. package/dist/replica/routing.d.ts.map +1 -0
  202. package/dist/replica/routing.js +288 -0
  203. package/dist/replica/suspension.d.ts +36 -0
  204. package/dist/replica/suspension.d.ts.map +1 -0
  205. package/dist/replica/suspension.js +49 -0
  206. package/dist/router/index.d.ts +156 -0
  207. package/dist/router/index.d.ts.map +1 -0
  208. package/dist/router/index.js +220 -0
  209. package/dist/runtime/assets-loader.d.ts +71 -0
  210. package/dist/runtime/assets-loader.d.ts.map +1 -0
  211. package/dist/runtime/assets-loader.js +128 -0
  212. package/dist/runtime/barrel-detect.d.ts +46 -0
  213. package/dist/runtime/barrel-detect.d.ts.map +1 -0
  214. package/dist/runtime/barrel-detect.js +73 -0
  215. package/dist/runtime/barrel-synthesizer.d.ts +181 -0
  216. package/dist/runtime/barrel-synthesizer.d.ts.map +1 -0
  217. package/dist/runtime/barrel-synthesizer.js +541 -0
  218. package/dist/runtime/bun-repl.d.ts +46 -0
  219. package/dist/runtime/bun-repl.d.ts.map +1 -0
  220. package/dist/runtime/bun-repl.js +326 -0
  221. package/dist/runtime/bun-runner.d.ts +66 -0
  222. package/dist/runtime/bun-runner.d.ts.map +1 -0
  223. package/dist/runtime/bun-runner.js +219 -0
  224. package/dist/runtime/clang-runner.d.ts +38 -0
  225. package/dist/runtime/clang-runner.d.ts.map +1 -0
  226. package/dist/runtime/clang-runner.js +1033 -0
  227. package/dist/runtime/comment-strip.d.ts +37 -0
  228. package/dist/runtime/comment-strip.d.ts.map +1 -0
  229. package/dist/runtime/comment-strip.js +74 -0
  230. package/dist/runtime/esbuild-service.d.ts +201 -0
  231. package/dist/runtime/esbuild-service.d.ts.map +1 -0
  232. package/dist/runtime/esbuild-service.js +1444 -0
  233. package/dist/runtime/esbuild-wasm-bytes.d.ts +87 -0
  234. package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -0
  235. package/dist/runtime/esbuild-wasm-bytes.js +131 -0
  236. package/dist/runtime/framework-detect.d.ts +71 -0
  237. package/dist/runtime/framework-detect.d.ts.map +1 -0
  238. package/dist/runtime/framework-detect.js +178 -0
  239. package/dist/runtime/long-running-handle.d.ts +133 -0
  240. package/dist/runtime/long-running-handle.d.ts.map +1 -0
  241. package/dist/runtime/long-running-handle.js +192 -0
  242. package/dist/runtime/node-repl.d.ts +36 -0
  243. package/dist/runtime/node-repl.d.ts.map +1 -0
  244. package/dist/runtime/node-repl.js +293 -0
  245. package/dist/runtime/node-runner.d.ts +111 -0
  246. package/dist/runtime/node-runner.d.ts.map +1 -0
  247. package/dist/runtime/node-runner.js +194 -0
  248. package/dist/runtime/node-shims.d.ts +24 -0
  249. package/dist/runtime/node-shims.d.ts.map +1 -0
  250. package/dist/runtime/node-shims.js +3019 -0
  251. package/dist/runtime/package-manager.d.ts +118 -0
  252. package/dist/runtime/package-manager.d.ts.map +1 -0
  253. package/dist/runtime/package-manager.js +420 -0
  254. package/dist/runtime/port-registry.d.ts +80 -0
  255. package/dist/runtime/port-registry.d.ts.map +1 -0
  256. package/dist/runtime/port-registry.js +166 -0
  257. package/dist/runtime/process-logs-api.d.ts +102 -0
  258. package/dist/runtime/process-logs-api.d.ts.map +1 -0
  259. package/dist/runtime/process-logs-api.js +253 -0
  260. package/dist/runtime/process-logs.d.ts +311 -0
  261. package/dist/runtime/process-logs.d.ts.map +1 -0
  262. package/dist/runtime/process-logs.js +656 -0
  263. package/dist/runtime/process-table.d.ts +65 -0
  264. package/dist/runtime/process-table.d.ts.map +1 -0
  265. package/dist/runtime/process-table.js +107 -0
  266. package/dist/runtime/project-detect.d.ts +21 -0
  267. package/dist/runtime/project-detect.d.ts.map +1 -0
  268. package/dist/runtime/project-detect.js +46 -0
  269. package/dist/runtime/python-repl.d.ts +66 -0
  270. package/dist/runtime/python-repl.d.ts.map +1 -0
  271. package/dist/runtime/python-repl.js +563 -0
  272. package/dist/runtime/python-runner.d.ts +50 -0
  273. package/dist/runtime/python-runner.d.ts.map +1 -0
  274. package/dist/runtime/python-runner.js +870 -0
  275. package/dist/runtime/repl-session.d.ts +160 -0
  276. package/dist/runtime/repl-session.d.ts.map +1 -0
  277. package/dist/runtime/repl-session.js +393 -0
  278. package/dist/runtime/require-resolver.d.ts +52 -0
  279. package/dist/runtime/require-resolver.d.ts.map +1 -0
  280. package/dist/runtime/require-resolver.js +690 -0
  281. package/dist/runtime/router-basename.d.ts +36 -0
  282. package/dist/runtime/router-basename.d.ts.map +1 -0
  283. package/dist/runtime/router-basename.js +310 -0
  284. package/dist/runtime/ruby-repl.d.ts +43 -0
  285. package/dist/runtime/ruby-repl.d.ts.map +1 -0
  286. package/dist/runtime/ruby-repl.js +229 -0
  287. package/dist/runtime/ruby-runner.d.ts +62 -0
  288. package/dist/runtime/ruby-runner.d.ts.map +1 -0
  289. package/dist/runtime/ruby-runner.js +737 -0
  290. package/dist/runtime/runtime-catalog.d.ts +99 -0
  291. package/dist/runtime/runtime-catalog.d.ts.map +1 -0
  292. package/dist/runtime/runtime-catalog.js +183 -0
  293. package/dist/runtime/runtime-registry.d.ts +136 -0
  294. package/dist/runtime/runtime-registry.d.ts.map +1 -0
  295. package/dist/runtime/runtime-registry.js +318 -0
  296. package/dist/runtime/streams.d.ts +13 -0
  297. package/dist/runtime/streams.d.ts.map +1 -0
  298. package/dist/runtime/streams.js +402 -0
  299. package/dist/runtime/wasi-instance.d.ts +190 -0
  300. package/dist/runtime/wasi-instance.d.ts.map +1 -0
  301. package/dist/runtime/wasi-instance.js +2044 -0
  302. package/dist/runtime/wasm-runner.d.ts +117 -0
  303. package/dist/runtime/wasm-runner.d.ts.map +1 -0
  304. package/dist/runtime/wasm-runner.js +705 -0
  305. package/dist/session/bindings.d.ts +168 -0
  306. package/dist/session/bindings.d.ts.map +1 -0
  307. package/dist/session/bindings.js +524 -0
  308. package/dist/session/ctx-exports.d.ts +16 -0
  309. package/dist/session/ctx-exports.d.ts.map +1 -0
  310. package/dist/session/ctx-exports.js +22 -0
  311. package/dist/session/diag.d.ts +62 -0
  312. package/dist/session/diag.d.ts.map +1 -0
  313. package/dist/session/diag.js +118 -0
  314. package/dist/session/fs-watch.d.ts +132 -0
  315. package/dist/session/fs-watch.d.ts.map +1 -0
  316. package/dist/session/fs-watch.js +255 -0
  317. package/dist/session/helpers.d.ts +150 -0
  318. package/dist/session/helpers.d.ts.map +1 -0
  319. package/dist/session/helpers.js +472 -0
  320. package/dist/session/hibernation.d.ts +145 -0
  321. package/dist/session/hibernation.d.ts.map +1 -0
  322. package/dist/session/hibernation.js +385 -0
  323. package/dist/session/init-phases.d.ts +87 -0
  324. package/dist/session/init-phases.d.ts.map +1 -0
  325. package/dist/session/init-phases.js +137 -0
  326. package/dist/session/init.d.ts +46 -0
  327. package/dist/session/init.d.ts.map +1 -0
  328. package/dist/session/init.js +3579 -0
  329. package/dist/session/keys.d.ts +56 -0
  330. package/dist/session/keys.d.ts.map +1 -0
  331. package/dist/session/keys.js +55 -0
  332. package/dist/session/nimbus-session.d.ts +434 -0
  333. package/dist/session/nimbus-session.d.ts.map +1 -0
  334. package/dist/session/nimbus-session.js +1084 -0
  335. package/dist/session/programmatic.d.ts +105 -0
  336. package/dist/session/programmatic.d.ts.map +1 -0
  337. package/dist/session/programmatic.js +326 -0
  338. package/dist/session/replica-routes.d.ts +68 -0
  339. package/dist/session/replica-routes.d.ts.map +1 -0
  340. package/dist/session/replica-routes.js +77 -0
  341. package/dist/session/routes.d.ts +29 -0
  342. package/dist/session/routes.d.ts.map +1 -0
  343. package/dist/session/routes.js +1331 -0
  344. package/dist/session/rpc.d.ts +323 -0
  345. package/dist/session/rpc.d.ts.map +1 -0
  346. package/dist/session/rpc.js +808 -0
  347. package/dist/session/state-store.d.ts +210 -0
  348. package/dist/session/state-store.d.ts.map +1 -0
  349. package/dist/session/state-store.js +459 -0
  350. package/dist/session/supervisor-rpc.d.ts +269 -0
  351. package/dist/session/supervisor-rpc.d.ts.map +1 -0
  352. package/dist/session/supervisor-rpc.js +437 -0
  353. package/dist/session/ws-hibernation-config.d.ts +64 -0
  354. package/dist/session/ws-hibernation-config.d.ts.map +1 -0
  355. package/dist/session/ws-hibernation-config.js +89 -0
  356. package/dist/session/ws.d.ts +95 -0
  357. package/dist/session/ws.d.ts.map +1 -0
  358. package/dist/session/ws.js +395 -0
  359. package/dist/shell/features.d.ts +410 -0
  360. package/dist/shell/features.d.ts.map +1 -0
  361. package/dist/shell/features.js +1885 -0
  362. package/dist/shell/unix-commands.d.ts +15 -0
  363. package/dist/shell/unix-commands.d.ts.map +1 -0
  364. package/dist/shell/unix-commands.js +3703 -0
  365. package/dist/stubs/lifo-ui.d.ts +10 -0
  366. package/dist/stubs/lifo-ui.d.ts.map +1 -0
  367. package/dist/stubs/lifo-ui.js +1 -0
  368. package/dist/tailwind-play.generated.d.ts +19 -0
  369. package/dist/tailwind-play.generated.d.ts.map +1 -0
  370. package/dist/tailwind-play.generated.js +18 -0
  371. package/dist/vfs/dev-provider.d.ts +64 -0
  372. package/dist/vfs/dev-provider.d.ts.map +1 -0
  373. package/dist/vfs/dev-provider.js +191 -0
  374. package/dist/vfs/events.d.ts +51 -0
  375. package/dist/vfs/events.d.ts.map +1 -0
  376. package/dist/vfs/events.js +127 -0
  377. package/dist/vfs/path.d.ts +30 -0
  378. package/dist/vfs/path.d.ts.map +1 -0
  379. package/dist/vfs/path.js +41 -0
  380. package/dist/vfs/seed-project.d.ts +62 -0
  381. package/dist/vfs/seed-project.d.ts.map +1 -0
  382. package/dist/vfs/seed-project.js +1045 -0
  383. package/dist/vfs/sqlite-vfs.d.ts +435 -0
  384. package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
  385. package/dist/vfs/sqlite-vfs.js +1670 -0
  386. package/dist/vfs/symlink-registry.d.ts +64 -0
  387. package/dist/vfs/symlink-registry.d.ts.map +1 -0
  388. package/dist/vfs/symlink-registry.js +137 -0
  389. package/dist/wrangler/nimbus-wrangler.d.ts +157 -0
  390. package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -0
  391. package/dist/wrangler/nimbus-wrangler.js +931 -0
  392. package/package.json +77 -0
  393. package/public/_assets/cirrus-plugin-react.bundle.js +70740 -0
  394. package/public/_assets/esbuild-0.24.2.wasm +0 -0
  395. package/public/_assets/real-vite-bundle.js +101478 -0
  396. package/public/_assets/rollup.wasm +0 -0
  397. package/public/favicon.svg +8 -0
  398. package/public/index.html +565 -0
  399. package/public/s/index.html +2379 -0
  400. package/scripts/bundle-esbuild-wasm.mjs +244 -0
  401. package/scripts/bundle-facet-workers.mjs +137 -0
  402. package/scripts/bundle-git.mjs +118 -0
  403. package/scripts/bundle-npm-cjs.mjs +363 -0
  404. package/scripts/bundle-plugin-react.mjs +480 -0
  405. package/scripts/bundle-real-vite.mjs +959 -0
  406. package/scripts/bundle-runtime.mjs +600 -0
  407. package/scripts/bundle-tailwind-play.mjs +130 -0
  408. package/scripts/patch-lifo-ui.mjs +131 -0
@@ -0,0 +1,541 @@
1
+ /**
2
+ * barrel-synthesizer.ts — generate synthetic entry files for "barrel"
3
+ * packages so they tree-shake cleanly through esbuild.
4
+ *
5
+ * Why this exists
6
+ * ───────────────
7
+ * Some npm packages ship as a "barrel" — a single index file that
8
+ * re-exports hundreds or thousands of named exports, each living in
9
+ * its own source file. Examples observed in the wild:
10
+ *
11
+ * lucide-react@0.460: ~3940 files (~1500 icons × 2 entry forms)
12
+ * @phosphor-icons/react: thousands of icon components
13
+ * react-icons: thousands of icons across icon families
14
+ * @mui/icons-material: thousands of Material icons
15
+ * @heroicons/react: hundreds of icons (split by style)
16
+ *
17
+ * Bundling the whole barrel as if it were a normal browser module OOMs
18
+ * esbuild's WASM facet — the compiler tries to ingest the entire
19
+ * source tree into one ESM output. We previously fell back to
20
+ * `https://esm.sh/<pkg>?deps=react@<v>,react-dom@<v>` (commit fc17847)
21
+ * which violated the 100% edge contract: every preview load fetched
22
+ * tree-shaken bytes from a third-party CDN.
23
+ *
24
+ * The fix is structural. Instead of bundling `import * from 'pkg'`,
25
+ * we scan the user's source code for the SET of named imports the
26
+ * project actually uses
27
+ *
28
+ * import { Home, FileText, Zap } from 'lucide-react'
29
+ *
30
+ * and synthesize a tiny entry module
31
+ *
32
+ * export { Home, FileText, Zap } from 'lucide-react';
33
+ *
34
+ * which esbuild bundles in milliseconds because reachability prunes
35
+ * everything else. The output is small (5–20 KiB for typical icon
36
+ * sets) and ships from our edge.
37
+ *
38
+ * Generality
39
+ * ──────────
40
+ * This is NOT lucide-react-specific. Any barrel package whose author
41
+ * marked `sideEffects: false` (or whose individual icon files are
42
+ * side-effect-free) works automatically — esbuild's tree-shake takes
43
+ * care of selecting the actually-used exports. Packages without
44
+ * sideEffects: false may still tree-shake because esbuild's static
45
+ * analysis of `export { X } from './x.js'` is conservative-correct.
46
+ *
47
+ * Failure mode
48
+ * ────────────
49
+ * If the scanner can't enumerate the set (dynamic imports, computed
50
+ * member access like `Icons[name]`, etc.), the synthesizer returns
51
+ * null and the caller MUST hard-error. NO CDN fallback. The user
52
+ * sees a clear remediation: "add a static import for the
53
+ * dynamically-referenced icon."
54
+ */
55
+ import { packageNameFromSpecifier } from './barrel-detect.js';
56
+ /**
57
+ * Static-import scanner. Walks the user's source tree under projDir
58
+ * and extracts named-import sets. Returns a map keyed by package name.
59
+ *
60
+ * Recognized syntax:
61
+ * import { A } from 'pkg'
62
+ * import { A, B } from 'pkg'
63
+ * import { A as X, B as Y } from 'pkg'
64
+ * import D, { A } from 'pkg' // only A is captured (D is default)
65
+ *
66
+ * NOT recognized (intentional — these can't be statically tree-shaken):
67
+ * import * as M from 'pkg' — caller must bundle whole pkg
68
+ * import('pkg') — dynamic; runtime resolution
69
+ * const { A } = require('pkg') — CJS at runtime
70
+ *
71
+ * The scanner is intentionally conservative-text-based. We do NOT
72
+ * parse a full AST — that would require shipping acorn or esbuild's
73
+ * parser at runtime in the supervisor. The regex covers the >99% case
74
+ * for browser source code in TS/JS/JSX/TSX.
75
+ *
76
+ * Costs: O(files × content_length). For Mossaic (199 source files,
77
+ * ~150 KiB total source) this is single-digit ms.
78
+ */
79
+ export function scanNamedImports(vfs, projDir) {
80
+ const result = new Map();
81
+ const scanExts = new Set(['.ts', '.tsx', '.jsx', '.js', '.mjs']);
82
+ const add = (pkgName, name) => {
83
+ let set = result.get(pkgName);
84
+ if (!set) {
85
+ set = new Set();
86
+ result.set(pkgName, set);
87
+ }
88
+ set.add(name);
89
+ };
90
+ // Match `import { ... } from 'spec'` and `import D, { ... } from 'spec'`.
91
+ // Non-greedy to handle multiple imports per file. The `[^"']*?` after
92
+ // the closing brace tolerates whitespace + the optional `from`.
93
+ // Captures:
94
+ // 1: the named-import body (between { and })
95
+ // 2: the specifier
96
+ const namedImportRe = /import\s+(?:[A-Za-z_$][\w$]*\s*,\s*)?\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
97
+ const walk = (dir, depth) => {
98
+ if (depth > 6)
99
+ return;
100
+ let entries;
101
+ try {
102
+ entries = vfs.readdir(dir);
103
+ }
104
+ catch {
105
+ return;
106
+ }
107
+ for (const entry of entries) {
108
+ if (entry.name === 'node_modules' || entry.name === '.git' ||
109
+ entry.name === 'dist' || entry.name === 'build')
110
+ continue;
111
+ const path = dir + '/' + entry.name;
112
+ if (entry.type === 'directory') {
113
+ walk(path, depth + 1);
114
+ continue;
115
+ }
116
+ const dot = entry.name.lastIndexOf('.');
117
+ if (dot < 0)
118
+ continue;
119
+ const ext = entry.name.substring(dot);
120
+ if (!scanExts.has(ext))
121
+ continue;
122
+ let code;
123
+ try {
124
+ code = vfs.readFileString(path);
125
+ }
126
+ catch {
127
+ continue;
128
+ }
129
+ let m;
130
+ while ((m = namedImportRe.exec(code)) !== null) {
131
+ const body = m[1];
132
+ const specRaw = m[2];
133
+ // Skip relative + builtin imports: only bare package specifiers.
134
+ if (specRaw.startsWith('.') || specRaw.startsWith('/') || specRaw.startsWith('node:'))
135
+ continue;
136
+ // Skip subpath imports — the user is opting into per-file
137
+ // resolution; esbuild bundles the specific file directly.
138
+ const pkgName = packageNameFromSpecifier(specRaw);
139
+ if (specRaw !== pkgName)
140
+ continue;
141
+ // Parse the named-import body. Each item is one of:
142
+ // X
143
+ // X as Y
144
+ // "X" as Y (TS bracket-import, rare)
145
+ // We capture the SOURCE name (the export name on the package),
146
+ // NOT the local alias.
147
+ for (const partRaw of body.split(',')) {
148
+ const part = partRaw.trim();
149
+ if (!part)
150
+ continue;
151
+ const asMatch = part.match(/^([A-Za-z_$][\w$]*)\s+as\s+[A-Za-z_$][\w$]*$/);
152
+ if (asMatch) {
153
+ add(pkgName, asMatch[1]);
154
+ continue;
155
+ }
156
+ // Plain identifier — capture as-is. Reject anything that's not
157
+ // a clean JS identifier (e.g. comments, type-only imports).
158
+ if (/^[A-Za-z_$][\w$]*$/.test(part)) {
159
+ add(pkgName, part);
160
+ }
161
+ else if (/^type\s+([A-Za-z_$][\w$]*)/.test(part)) {
162
+ // `import { type Foo } from 'pkg'` — capture, esbuild will
163
+ // strip type-only imports during bundle.
164
+ const tm = part.match(/^type\s+([A-Za-z_$][\w$]*)/);
165
+ if (tm)
166
+ add(pkgName, tm[1]);
167
+ }
168
+ // Anything else (e.g. "default as X") is non-named; skip.
169
+ }
170
+ }
171
+ }
172
+ };
173
+ walk(projDir, 0);
174
+ return result;
175
+ }
176
+ export function buildSyntheticEntry(vfs, nmDir, pkgName, names) {
177
+ if (names.size === 0)
178
+ return null;
179
+ const indexPath = findPackageEsmEntry(vfs, nmDir, pkgName);
180
+ if (!indexPath)
181
+ return null;
182
+ const indexCode = (() => {
183
+ try {
184
+ return vfs.readFileString(indexPath);
185
+ }
186
+ catch {
187
+ return null;
188
+ }
189
+ })();
190
+ if (!indexCode)
191
+ return null;
192
+ const exportMap = new Map();
193
+ // Match an entire `export { ... } from '...';` block.
194
+ const reExport = /export\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']\s*;?/g;
195
+ let m;
196
+ while ((m = reExport.exec(indexCode)) !== null) {
197
+ const body = m[1];
198
+ const path = m[2];
199
+ if (!path.startsWith('.'))
200
+ continue; // only relative re-exports
201
+ for (const partRaw of body.split(',')) {
202
+ const part = partRaw.trim();
203
+ if (!part)
204
+ continue;
205
+ // `default as X`
206
+ const defAs = part.match(/^default\s+as\s+([A-Za-z_$][\w$]*)$/);
207
+ if (defAs) {
208
+ exportMap.set(defAs[1], { path, sourceName: 'default', isDefault: true });
209
+ continue;
210
+ }
211
+ // `X as Y`
212
+ const renamed = part.match(/^([A-Za-z_$][\w$]*)\s+as\s+([A-Za-z_$][\w$]*)$/);
213
+ if (renamed) {
214
+ exportMap.set(renamed[2], { path, sourceName: renamed[1], isDefault: false });
215
+ continue;
216
+ }
217
+ // `X`
218
+ if (/^[A-Za-z_$][\w$]*$/.test(part)) {
219
+ exportMap.set(part, { path, sourceName: part, isDefault: false });
220
+ continue;
221
+ }
222
+ // `default` (default re-export with no rename) is rare; skip.
223
+ }
224
+ }
225
+ // Primitives wave (P6) — `export * from './x.js'` support.
226
+ //
227
+ // Many barrel packages (date-fns, several utility libraries, some
228
+ // icon kits) use `export *` aggregation instead of per-name
229
+ // re-exports. The original synthesizer ignored these → exportMap
230
+ // stayed empty → /preview/@modules/<pkg> 500'd with "synthetic
231
+ // entry generation returned null".
232
+ //
233
+ // Strategy: harvest each `export *` source's own top-level export
234
+ // declarations once, and inject them into the same exportMap with
235
+ // `sourceName === exportedName`. This is not a full ESM resolver
236
+ // (we don't follow nested `export *` chains), but it covers the
237
+ // common case where the file at the end of the chain has explicit
238
+ // `export function X` / `export const X` / `export class X` /
239
+ // `export { X }` declarations — which matches every barrel
240
+ // observed in the wild.
241
+ //
242
+ // Cap on the number of `export *` sources we walk so a pathological
243
+ // barrel-of-barrels can't blow the synthesizer's budget.
244
+ const indexDirForStar = indexPath.substring(0, indexPath.lastIndexOf('/'));
245
+ const reExportStar = /export\s*\*\s*from\s*["']([^"']+)["']\s*;?/g;
246
+ const STAR_SOURCE_CAP = 1500; // date-fns has ~290; well within cap
247
+ let starSourcesWalked = 0;
248
+ let s;
249
+ while ((s = reExportStar.exec(indexCode)) !== null && starSourcesWalked < STAR_SOURCE_CAP) {
250
+ const path = s[1];
251
+ if (!path.startsWith('.'))
252
+ continue;
253
+ starSourcesWalked++;
254
+ const fullPath = normalizeJoin(indexDirForStar, path);
255
+ let starCode;
256
+ try {
257
+ starCode = vfs.readFileString(fullPath);
258
+ }
259
+ catch {
260
+ starCode = null;
261
+ }
262
+ if (!starCode)
263
+ continue;
264
+ // Harvest top-level exports from the source file. Order of patterns:
265
+ // 1. `export { X, Y as Z } from "..."` (re-export from elsewhere)
266
+ // 2. `export { X, Y as Z };` (re-export of locally-bound names)
267
+ // 3. `export function|class|const|let|var X` (declaration)
268
+ // We do NOT walk transitive `export *` chains; that's the
269
+ // budget cap in exchange for simplicity. esbuild handles the
270
+ // actual resolution at bundle time anyway — we only need enough
271
+ // entries in the map to MATCH the user's named imports.
272
+ const reInnerNamed = /export\s*\{([^}]+)\}\s*(?:from\s*["'][^"']+["'])?\s*;?/g;
273
+ let im;
274
+ while ((im = reInnerNamed.exec(starCode)) !== null) {
275
+ for (const partRaw of im[1].split(',')) {
276
+ const part = partRaw.trim();
277
+ if (!part)
278
+ continue;
279
+ const renamed = part.match(/^([A-Za-z_$][\w$]*)\s+as\s+([A-Za-z_$][\w$]*)$/);
280
+ if (renamed) {
281
+ if (!exportMap.has(renamed[2])) {
282
+ exportMap.set(renamed[2], { path, sourceName: renamed[2], isDefault: false });
283
+ }
284
+ continue;
285
+ }
286
+ if (/^[A-Za-z_$][\w$]*$/.test(part)) {
287
+ if (!exportMap.has(part)) {
288
+ exportMap.set(part, { path, sourceName: part, isDefault: false });
289
+ }
290
+ }
291
+ }
292
+ }
293
+ // Top-level declarations — `export function X`, `export class X`,
294
+ // `export const X`, `export let X`, `export var X`. Async, generator
295
+ // and TS modifiers (default, abstract) handled by the prefix opt-out.
296
+ const reDecl = /export\s+(?:async\s+)?(?:function\*?|class|const|let|var)\s+([A-Za-z_$][\w$]*)/g;
297
+ let dm;
298
+ while ((dm = reDecl.exec(starCode)) !== null) {
299
+ const name = dm[1];
300
+ if (!exportMap.has(name)) {
301
+ exportMap.set(name, { path, sourceName: name, isDefault: false });
302
+ }
303
+ }
304
+ }
305
+ if (exportMap.size === 0)
306
+ return null;
307
+ // Match user's requested names against the map. Build per-file
308
+ // groupings so the synthetic entry has one re-export per source
309
+ // file (smaller text, cleaner tree-shake graph).
310
+ const indexDir = indexPath.substring(0, indexPath.lastIndexOf('/'));
311
+ const grouped = new Map();
312
+ let matched = 0;
313
+ for (const name of names) {
314
+ const ref = exportMap.get(name);
315
+ if (!ref)
316
+ continue;
317
+ matched++;
318
+ // Resolve relative path against indexDir, then strip the
319
+ // package's nmDir prefix so we can build a `pkgName/...` import.
320
+ const fullPath = normalizeJoin(indexDir, ref.path);
321
+ let arr = grouped.get(fullPath);
322
+ if (!arr) {
323
+ arr = [];
324
+ grouped.set(fullPath, arr);
325
+ }
326
+ arr.push({ exportedName: name, sourceName: ref.sourceName, isDefault: ref.isDefault });
327
+ }
328
+ if (matched === 0)
329
+ return null;
330
+ // Emit per-file re-export lines. Use `pkgName/<rel-from-pkg-root>`
331
+ // so esbuild's resolver follows the package's exports field if any.
332
+ const pkgRoot = nmDir + '/' + pkgName;
333
+ const sortedFiles = [...grouped.keys()].sort();
334
+ const lines = [
335
+ `// AUTO-GENERATED synthetic entry for ${pkgName}`,
336
+ `// ${matched} of ${names.size} requested names matched the parsed barrel.`,
337
+ `// esbuild tree-shakes the rest of the package away.`,
338
+ ];
339
+ if (matched < names.size) {
340
+ const missing = [...names].filter(n => !exportMap.has(n));
341
+ lines.push(`// MISSING (not found in barrel index): ${missing.sort().join(', ')}`);
342
+ }
343
+ const referencedFiles = [];
344
+ for (const filePath of sortedFiles) {
345
+ let relFromPkg = filePath.startsWith(pkgRoot + '/')
346
+ ? filePath.substring(pkgRoot.length + 1)
347
+ : filePath;
348
+ // Use the package-rooted form so esbuild's resolver respects
349
+ // the package's exports/main fields. Strip leading slash.
350
+ const importSpec = pkgName + '/' + relFromPkg;
351
+ const items = grouped.get(filePath);
352
+ // Sort items for determinism.
353
+ items.sort((a, b) => a.exportedName.localeCompare(b.exportedName));
354
+ const memberLines = items.map(i => {
355
+ if (i.isDefault)
356
+ return `default as ${i.exportedName}`;
357
+ if (i.sourceName === i.exportedName)
358
+ return i.exportedName;
359
+ return `${i.sourceName} as ${i.exportedName}`;
360
+ });
361
+ lines.push(`export { ${memberLines.join(', ')} } from ${JSON.stringify(importSpec)};`);
362
+ referencedFiles.push(filePath);
363
+ }
364
+ return {
365
+ code: lines.join('\n') + '\n',
366
+ referencedFiles,
367
+ };
368
+ }
369
+ /**
370
+ * Build a SCOPED slice for a synthetic-entry bundle: include only
371
+ * the files the synthetic entry directly references (+ their
372
+ * transitive imports walked via static analysis), plus the package
373
+ * root's `package.json` (esbuild's resolver reads it for exports/main
374
+ * fields). This bypasses the standard `walkDir` over the whole
375
+ * package, which for icon-libraries with thousands of files can
376
+ * exceed the 28 MiB slice cap.
377
+ *
378
+ * Caller still appends the synthetic entry file itself to the slice
379
+ * (we don't include it here because it lives in a synthetic
380
+ * directory the caller already manages).
381
+ *
382
+ * Returns the list of `SliceEntry`-shaped objects to push into the
383
+ * existing slice, plus the total bytes added (for cap-tracking).
384
+ *
385
+ * `transitiveCap`: how many files we'll walk in total. Bounded so a
386
+ * pathological barrel-of-barrels can't blow the cap. Default 800,
387
+ * which empirically covers icon-libraries with up to ~400 imported
388
+ * icons (each pulling 1-2 transitive shared utility files).
389
+ */
390
+ export function buildScopedSliceForSynthetic(vfs, nmDir, pkgName, referencedFiles, transitiveCap = 800) {
391
+ const entries = [];
392
+ let totalBytes = 0;
393
+ const visited = new Set();
394
+ const dirSet = new Set();
395
+ const pkgRoot = nmDir + '/' + pkgName;
396
+ const addDir = (d) => {
397
+ if (dirSet.has(d) || !d)
398
+ return;
399
+ dirSet.add(d);
400
+ entries.push({ path: '/' + d.replace(/^\/+/, ''), isDir: true });
401
+ };
402
+ // Always include the package root + its package.json. esbuild's
403
+ // resolver reads package.json for sideEffects, exports, main, etc.
404
+ addDir(pkgRoot);
405
+ const pkgJsonPath = pkgRoot + '/package.json';
406
+ if (vfs.exists(pkgJsonPath) && !vfs.isDirectory(pkgJsonPath)) {
407
+ try {
408
+ const bytes = vfs.readFile(pkgJsonPath);
409
+ entries.push({ path: '/' + pkgJsonPath.replace(/^\/+/, ''), bytes, isDir: false });
410
+ totalBytes += bytes.length + pkgJsonPath.length;
411
+ visited.add(pkgJsonPath);
412
+ }
413
+ catch { }
414
+ }
415
+ // Walker: BFS over referenced files + their relative imports.
416
+ const queue = [...referencedFiles];
417
+ while (queue.length > 0 && visited.size < transitiveCap) {
418
+ const filePath = queue.shift();
419
+ if (visited.has(filePath))
420
+ continue;
421
+ visited.add(filePath);
422
+ if (!vfs.exists(filePath) || vfs.isDirectory(filePath))
423
+ continue;
424
+ let bytes;
425
+ try {
426
+ bytes = vfs.readFile(filePath);
427
+ }
428
+ catch {
429
+ continue;
430
+ }
431
+ // Track parent dirs so esbuild's plugin's dirSet has them.
432
+ const slash = filePath.lastIndexOf('/');
433
+ if (slash > 0)
434
+ addDir(filePath.substring(0, slash));
435
+ entries.push({ path: '/' + filePath.replace(/^\/+/, ''), bytes, isDir: false });
436
+ totalBytes += bytes.length + filePath.length;
437
+ // Parse relative imports and queue them. Same regex as
438
+ // scanNamedImports but with relative-path predicate.
439
+ const text = new TextDecoder().decode(bytes);
440
+ const importRe = /(?:from\s+|import\s*\(?\s*)["'](\.\.?\/[^"']+)["']/g;
441
+ let m;
442
+ while ((m = importRe.exec(text)) !== null) {
443
+ const rel = m[1];
444
+ const dir = filePath.substring(0, slash > 0 ? slash : 0);
445
+ const candidate = normalizeJoin(dir, rel);
446
+ // Try with extensions (.js, .mjs, no-ext-as-dir/index.js).
447
+ for (const ext of ['', '.js', '.mjs', '.cjs', '.jsx']) {
448
+ const tryPath = candidate + ext;
449
+ if (!visited.has(tryPath) && vfs.exists(tryPath) && !vfs.isDirectory(tryPath)) {
450
+ queue.push(tryPath);
451
+ break;
452
+ }
453
+ }
454
+ // Also try as directory with index.js.
455
+ const idx = candidate + '/index.js';
456
+ if (!visited.has(idx) && vfs.exists(idx) && !vfs.isDirectory(idx)) {
457
+ queue.push(idx);
458
+ }
459
+ }
460
+ }
461
+ return { entries, totalBytes };
462
+ }
463
+ /**
464
+ * Resolve the package's main ESM entry file path (preferring the
465
+ * `module` field, then `main`). Returns null if the package isn't
466
+ * installed or doesn't expose a JS entry.
467
+ */
468
+ function findPackageEsmEntry(vfs, nmDir, pkgName) {
469
+ const pkgRoot = nmDir + '/' + pkgName;
470
+ const pkgJsonPath = pkgRoot + '/package.json';
471
+ if (!vfs.exists(pkgJsonPath))
472
+ return null;
473
+ let pkg;
474
+ try {
475
+ pkg = JSON.parse(vfs.readFileString(pkgJsonPath));
476
+ }
477
+ catch {
478
+ return null;
479
+ }
480
+ // Prefer module (ESM), then main.
481
+ const candidates = [];
482
+ if (typeof pkg.module === 'string')
483
+ candidates.push(pkg.module);
484
+ if (typeof pkg.main === 'string')
485
+ candidates.push(pkg.main);
486
+ // Some packages publish `exports` field with a default condition
487
+ // pointing at ESM; try that as a tiebreaker.
488
+ if (pkg.exports && typeof pkg.exports === 'object') {
489
+ const root = pkg.exports['.'] || pkg.exports;
490
+ if (root && typeof root === 'object') {
491
+ const m = root.import || root.module || root.default;
492
+ if (typeof m === 'string')
493
+ candidates.unshift(m);
494
+ }
495
+ else if (typeof root === 'string') {
496
+ candidates.unshift(root);
497
+ }
498
+ }
499
+ for (const rel of candidates) {
500
+ const clean = rel.replace(/^\.\//, '');
501
+ const abs = pkgRoot + '/' + clean;
502
+ if (vfs.exists(abs) && !vfs.isDirectory(abs))
503
+ return abs;
504
+ // Try with index.js if rel is a directory.
505
+ const idx = abs + '/index.js';
506
+ if (vfs.exists(idx))
507
+ return idx;
508
+ }
509
+ return null;
510
+ }
511
+ /**
512
+ * Normalize-join two paths: `dir + '/' + rel`, resolving `.` and `..`
513
+ * segments. Used when the barrel-index references siblings via
514
+ * relative paths like `./icons/house.js`.
515
+ */
516
+ function normalizeJoin(dir, rel) {
517
+ const stack = dir.split('/').filter(Boolean);
518
+ for (const seg of rel.split('/')) {
519
+ if (seg === '.' || seg === '')
520
+ continue;
521
+ if (seg === '..')
522
+ stack.pop();
523
+ else
524
+ stack.push(seg);
525
+ }
526
+ return (dir.startsWith('/') ? '/' : '') + stack.join('/');
527
+ }
528
+ /**
529
+ * VFS path where synthetic entries are written. Lives under the
530
+ * project's node_modules in a Nimbus-private namespace so package
531
+ * managers don't collide with real package directories.
532
+ *
533
+ * Format: <projDir>/node_modules/.nimbus-synthetic/<safeName>.entry.js
534
+ *
535
+ * Safe name = pkgName with '@' and '/' replaced by '__' so scoped
536
+ * packages produce a valid filesystem path.
537
+ */
538
+ export function syntheticEntryPath(projDir, pkgName) {
539
+ const safe = pkgName.replace(/[@/]/g, '__');
540
+ return projDir + '/node_modules/.nimbus-synthetic/' + safe + '.entry.js';
541
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * bun-repl.ts — Bun REPL adapter.
3
+ *
4
+ * Bun is native (workerd nodejs_compat) — no facet-bootstrap like
5
+ * Pyodide. We dispatch eval through a long-lived child-facet that
6
+ * holds a vm.Context across submits, so user-defined variables /
7
+ * functions / imports persist.
8
+ *
9
+ * Design:
10
+ * - One child-facet per REPL session (NimbusLoaderPool with
11
+ * concurrency=1, omitSupervisor=true).
12
+ * - Facet-side: globalThis.__nimbus_bun_ctx caches a vm.createContext()
13
+ * dict; each push() runs vm.runInContext(line, ctx) and returns
14
+ * {stdout, stderr, isIncomplete, isExit}.
15
+ * - Continuation detection: probe parse via `new Function(...code)`
16
+ * wrapped in try/catch — recoverable SyntaxError patterns
17
+ * (per Node's repl.Recoverable shape) → incomplete.
18
+ * - Expression displayhook: vm.runInContext returns the last
19
+ * expression value; if !== undefined, util.inspect(value) → stdout.
20
+ * - Exit: override process.exit inside the context to throw a
21
+ * sentinel; catch sentinel → kind:'exit'.
22
+ *
23
+ * NOT supported in v1 (deferred):
24
+ * - Top-level await at the REPL prompt (Bun supports this natively
25
+ * but vm.runInContext doesn't unwrap top-level await — would need
26
+ * vm.SourceTextModule or evaluation pre-wrap).
27
+ * - Ctrl-C mid-execution (no SIGINT plumbing across facet boundary).
28
+ * - Tab-completion.
29
+ *
30
+ * No setTimeout / sleep / retry / defensive-catch on hot paths. Errors
31
+ * thrown by vm bubble up; we surface them as stderr via the runtime
32
+ * stderr capture.
33
+ */
34
+ import type { FacetManager } from '../facets/manager.js';
35
+ import type { WebSocketTerminal } from '../facets/ws-terminal.js';
36
+ export interface BunReplDeps {
37
+ facetMgr: FacetManager;
38
+ terminal: WebSocketTerminal;
39
+ }
40
+ /**
41
+ * Top-level wrapper: builds a Bun REPL adapter, drives a ReplSession
42
+ * to completion, returns the exit code. Called from the bun factory's
43
+ * wrapper in init.ts when `bun` is invoked with no args.
44
+ */
45
+ export declare function runBunRepl(deps: BunReplDeps): Promise<number>;
46
+ //# sourceMappingURL=bun-repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun-repl.d.ts","sourceRoot":"","sources":["../../src/runtime/bun-repl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAiTD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAInE"}