@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
package/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # @nimbus-sh/worker
2
+
3
+ The Nimbus runtime — Durable Object + router + facet machinery — packaged
4
+ for embedding in any Cloudflare Workers project.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm install @nimbus-sh/worker
10
+ # or
11
+ bun add @nimbus-sh/worker
12
+ ```
13
+
14
+ ## Quickstart
15
+
16
+ `src/index.ts`:
17
+
18
+ ```ts
19
+ import {
20
+ NimbusSession,
21
+ SupervisorRPC,
22
+ NimbusAssetsRPC,
23
+ NimbusLoaderRPC,
24
+ NimbusLoadedWorker,
25
+ NimbusLoadedEntrypoint,
26
+ NimbusDurableObjectNamespace,
27
+ NimbusDOStub,
28
+ CirrusHmrRPC,
29
+ createNimbusHandler,
30
+ } from '@nimbus-sh/worker';
31
+
32
+ // Re-export the DO + every RPC class so wrangler's `class_name` lookup +
33
+ // `enable_ctx_exports` find them in your Worker's main-module exports.
34
+ export {
35
+ NimbusSession,
36
+ SupervisorRPC,
37
+ NimbusAssetsRPC,
38
+ NimbusLoaderRPC,
39
+ NimbusLoadedWorker,
40
+ NimbusLoadedEntrypoint,
41
+ NimbusDurableObjectNamespace,
42
+ NimbusDOStub,
43
+ CirrusHmrRPC,
44
+ };
45
+
46
+ export default createNimbusHandler();
47
+ ```
48
+
49
+ `wrangler.jsonc` (use `@nimbus-sh/config` to generate, or adapt
50
+ `apps/dogfood/wrangler.jsonc`):
51
+
52
+ ```jsonc
53
+ {
54
+ "name": "my-nimbus",
55
+ "main": "src/index.ts",
56
+ "compatibility_date": "2026-04-01",
57
+ "compatibility_flags": ["nodejs_compat"],
58
+ "placement": { "mode": "smart" },
59
+ "assets": {
60
+ "directory": "node_modules/@nimbus-sh/worker/public",
61
+ "binding": "ASSETS",
62
+ "run_worker_first": ["/s/*", "/new"]
63
+ },
64
+ "alias": {
65
+ "@lifo-sh/ui": "./node_modules/@nimbus-sh/worker/dist/stubs/lifo-ui.js",
66
+ "clean-git-ref": "clean-git-ref/lib/index.js",
67
+ "is-git-ref-name-valid": "is-git-ref-name-valid/index.js",
68
+ "crc-32": "crc-32",
69
+ "sha.js": "sha.js",
70
+ "pako": "pako", "pify": "pify", "diff": "diff", "diff3": "diff3",
71
+ "ignore": "ignore", "readable-stream": "readable-stream",
72
+ "simple-get": "simple-get", "minimisted": "minimisted"
73
+ },
74
+ "durable_objects": {
75
+ "bindings": [{ "name": "NIMBUS_SESSION", "class_name": "NimbusSession" }]
76
+ },
77
+ "migrations": [
78
+ { "tag": "nimbus-v1", "new_sqlite_classes": ["NimbusSession"] }
79
+ ],
80
+ "worker_loaders": [{ "binding": "LOADER" }],
81
+ "r2_buckets": [
82
+ { "binding": "NPM_TARBALL_CACHE", "bucket_name": "my-nimbus-npm-cache" },
83
+ { "binding": "NPM_PACKUMENT_CACHE", "bucket_name": "my-nimbus-npm-packument-cache" },
84
+ { "binding": "NIMBUS_RUNTIME_CACHE", "bucket_name": "nimbus-runtime-cache-public" }
85
+ ]
86
+ }
87
+ ```
88
+
89
+ Then:
90
+
91
+ ```bash
92
+ wrangler secret put JWT_SECRET # 32+ hex chars
93
+ wrangler deploy
94
+ ```
95
+
96
+ `JWT_SECRET` is required for token-enforced deployments. Legacy-public
97
+ single-tenant demos can set `NIMBUS_LEGACY_PUBLIC=1` and rely on URL
98
+ possession instead.
99
+
100
+ ## Composable API
101
+
102
+ `createNimbusHandler(options)` accepts:
103
+
104
+ ```ts
105
+ {
106
+ auth?: { mode?: 'auto' | 'enforce' | 'legacy'; legacyPublic?: boolean };
107
+ hooks?: {
108
+ onSessionStart?: (ctx) => void | Promise<void>;
109
+ onSessionEnd?: (ctx) => void | Promise<void>; // reserved v0.2
110
+ };
111
+ routes?: (request, env, ctx) => Response | null | Promise<Response | null>;
112
+ }
113
+ ```
114
+
115
+ ### Custom routes
116
+
117
+ Routes that return non-`null` short-circuit Nimbus's router. Use them
118
+ for a token-mint endpoint, `/healthz`, SDK smoke tests, or backend
119
+ sandbox jobs.
120
+
121
+ ```ts
122
+ import { issueNimbusToken } from '@nimbus-sh/sdk/token';
123
+
124
+ export default createNimbusHandler({
125
+ routes: async (req, env) => {
126
+ if (new URL(req.url).pathname === '/api/auth/mint' && req.method === 'POST') {
127
+ const { tenant, sub } = await req.json();
128
+ const token = await issueNimbusToken(env, { tn: tenant, sub });
129
+ return Response.json({ token });
130
+ }
131
+ return null;
132
+ },
133
+ });
134
+ ```
135
+
136
+ Programmatic sandbox route:
137
+
138
+ ```ts
139
+ import { Nimbus } from '@nimbus-sh/sdk/sandbox';
140
+
141
+ export default createNimbusHandler({
142
+ routes: async (req, env) => {
143
+ const url = new URL(req.url);
144
+ if (url.pathname === '/api/run-python') {
145
+ const nimbus = Nimbus.fromEnv(env, {
146
+ endpoint: url.origin,
147
+ sandboxes: {
148
+ default: {
149
+ root: '/home/user',
150
+ runtimes: { preinstall: ['python'], onDemand: true },
151
+ },
152
+ },
153
+ });
154
+ const box = nimbus.sandbox('api-job-1', { tenant: 'api', subject: 'python' });
155
+ const result = await box.runCode('print(2 + 2)', {
156
+ language: 'python',
157
+ install: 'ifMissing',
158
+ });
159
+ return Response.json(result);
160
+ }
161
+ return null;
162
+ },
163
+ });
164
+ ```
165
+
166
+ For long-running app servers, start an explicit long-running process and
167
+ expose the virtual port:
168
+
169
+ ```ts
170
+ await box.files.write('/home/user/app/server.js', serverSource);
171
+ await box.startProcess('node --watch /home/user/app/server.js');
172
+ const port = await box.ports.expose(3000);
173
+ ```
174
+
175
+ ### Hooks
176
+
177
+ ```ts
178
+ export default createNimbusHandler({
179
+ hooks: {
180
+ onSessionStart: ({ sessionId, tenantSegment, request }) => {
181
+ console.log(`[${tenantSegment}] session ${sessionId} attached from ${request.headers.get('cf-connecting-ip')}`);
182
+ },
183
+ },
184
+ });
185
+ ```
186
+
187
+ ### Auth modes
188
+
189
+ | Mode | Meaning |
190
+ |---|---|
191
+ | `'auto'` (default) | Verify token when `JWT_SECRET` is set AND `NIMBUS_LEGACY_PUBLIC` is unset. Otherwise legacy-public. |
192
+ | `'enforce'` | Always verify token; fail closed if `JWT_SECRET` is missing. |
193
+ | `'legacy'` | Never verify; all requests route to the single `legacy:public:_` tenant. Use only for single-tenant demos. |
194
+
195
+ ## Subpath exports
196
+
197
+ | Subpath | What |
198
+ |---|---|
199
+ | `@nimbus-sh/worker` | `NimbusSession`, `SupervisorRPC` + other RPC classes, `createNimbusHandler`, auth types. |
200
+ | `@nimbus-sh/worker/router` | `createNimbusHandler`, hooks types. |
201
+ | `@nimbus-sh/worker/auth` | HS256 JWT issue/verify, typed errors. |
202
+
203
+ ## Required bindings
204
+
205
+ Every binding is load-bearing — see `apps/dogfood/wrangler.jsonc` or
206
+ `@nimbus-sh/config` for the canonical set:
207
+
208
+ - `NIMBUS_SESSION` (Durable Object) — per-session SQLite state
209
+ - `LOADER` (Worker Loader) — dynamic-isolate spawning for npm + vite + facets
210
+ - `NPM_TARBALL_CACHE` + `NPM_PACKUMENT_CACHE` + `NIMBUS_RUNTIME_CACHE` (R2)
211
+ - `ASSETS` — serves the xterm shell + lazy-loaded WASM/JS blobs
212
+ - `JWT_SECRET` (secret) — HS256 signing key for token-enforced deployments
213
+
214
+ ## Status
215
+
216
+ v0.1 — first public release. SemVer not yet stable; expect breaking
217
+ changes through v0.x. Issues + PRs welcome.
218
+
219
+ MIT. © Ashish Kumar Singh + contributors.
@@ -0,0 +1,18 @@
1
+ /**
2
+ * _shared/bytes.ts — Singleton TextEncoder / TextDecoder.
3
+ *
4
+ * TextEncoder and TextDecoder for UTF-8 are stateless per the WHATWG
5
+ * Encoding spec, so a module-scope singleton is safe and saves the
6
+ * repeated allocation (which shows up in flame graphs of hot paths
7
+ * like sqlite-vfs writeFile and the WebSocket terminal frame decoder).
8
+ *
9
+ * Use these everywhere instead of `new TextEncoder()` / `new TextDecoder()`
10
+ * in the supervisor isolate. Facet-isolate code-strings (e.g. inside
11
+ * generateGitNetworkFacetCode) cannot import this module and must keep
12
+ * their inline allocations — those copies are justified.
13
+ */
14
+ /** Shared UTF-8 encoder. Stateless; safe to share across all callers. */
15
+ export declare const enc: TextEncoder;
16
+ /** Shared UTF-8 decoder. Stateless; safe to share across all callers. */
17
+ export declare const dec: TextDecoder;
18
+ //# sourceMappingURL=bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/_shared/bytes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,eAAO,MAAM,GAAG,aAAoB,CAAC;AAErC,yEAAyE;AACzE,eAAO,MAAM,GAAG,aAAoB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * _shared/bytes.ts — Singleton TextEncoder / TextDecoder.
3
+ *
4
+ * TextEncoder and TextDecoder for UTF-8 are stateless per the WHATWG
5
+ * Encoding spec, so a module-scope singleton is safe and saves the
6
+ * repeated allocation (which shows up in flame graphs of hot paths
7
+ * like sqlite-vfs writeFile and the WebSocket terminal frame decoder).
8
+ *
9
+ * Use these everywhere instead of `new TextEncoder()` / `new TextDecoder()`
10
+ * in the supervisor isolate. Facet-isolate code-strings (e.g. inside
11
+ * generateGitNetworkFacetCode) cannot import this module and must keep
12
+ * their inline allocations — those copies are justified.
13
+ */
14
+ /** Shared UTF-8 encoder. Stateless; safe to share across all callers. */
15
+ export const enc = new TextEncoder();
16
+ /** Shared UTF-8 decoder. Stateless; safe to share across all callers. */
17
+ export const dec = new TextDecoder();
@@ -0,0 +1,146 @@
1
+ /**
2
+ * cache-stats.ts — Per-tier hit/miss/bytes counters for the npm cache stack.
3
+ *
4
+ * Purpose
5
+ * ───────
6
+ * The supervisor (and its facets) make cache lookups at four tiers:
7
+ *
8
+ * L1 — per-DO SQLite (NpmCache) ~1 ms / file
9
+ * L2 — caches.default (per-colo) ~50-500 µs hit
10
+ * L3 — R2 (cross-tenant global) ~30-100 ms regional
11
+ * L4 — registry.npmjs.org origin ~100-300 ms cross-region
12
+ *
13
+ * Pre-cache-observability wave: hit/miss counters lived in
14
+ * src/observability/diag-counters.ts but only tracked the RPC-call
15
+ * boundary (`r2.tarballHit`, `r2.packumentMiss`), not per-tier. From
16
+ * prod we couldn't tell whether L2 hit-rate was 90% or 30%.
17
+ *
18
+ * This module adds per-tier × per-kind counters. SAME singleton-per-
19
+ * isolate pattern as diag-counters.ts so any supervisor code path can
20
+ * write to it and `/api/_diag/cache` reads it back.
21
+ *
22
+ * Why a separate module instead of extending diag-counters.ts:
23
+ * - Avoids touching diag-counters.ts (other waves may extend that
24
+ * file's R2 race counters; keeping these orthogonal makes rebases
25
+ * trivial).
26
+ * - The new shape (Tier × Kind grid) is structurally different from
27
+ * diag-counters' flat r2.* shape. Mixing them in one type would
28
+ * create awkward conditional types.
29
+ * - The new counters are exposed at /api/_diag/cache; diag-counters
30
+ * is exposed at /api/_diag/memory. Separate endpoints, separate
31
+ * modules.
32
+ *
33
+ * Lives in src/_shared/ so anyone (supervisor + future facet code) can
34
+ * import it without crossing the npm/, runtime/, facets/ boundaries
35
+ * that have wave-owners.
36
+ */
37
+ /**
38
+ * Tier in the cache stack. Each tier is checked in order from L1 (warmest,
39
+ * fastest) down to L4 (coldest, slowest origin). Cache writes typically
40
+ * "fill" lower numbers from higher numbers — an L4 fetch may writeback
41
+ * to L3 and L2, an L3 hit may writeback to L2, etc.
42
+ */
43
+ export type CacheTier = 'L1' | 'L2' | 'L3' | 'L4';
44
+ /**
45
+ * Kind of content cached. Each kind has its own size profile and eviction
46
+ * policy:
47
+ *
48
+ * tarball — gzipped tar bytes, immutable forever, 30 MiB cap on L3
49
+ * packument — registry metadata JSON, TTL-bounded (60 min post-P6),
50
+ * unbounded size in practice (~10 KB - 1 MB typical)
51
+ * asset — non-package binaries cached cross-tenant (esbuild.wasm,
52
+ * rolldown.wasm, etc.). Immutable forever, low churn.
53
+ */
54
+ export type CacheKind = 'tarball' | 'packument' | 'asset';
55
+ /**
56
+ * Per-(tier, kind) cell. A hit happened when we asked the tier "do you
57
+ * have <key>?" and it said yes (and returned bytes). A miss happened when
58
+ * we asked and it said no.
59
+ *
60
+ * `bytes` accumulates the size of HIT payloads only — misses have no
61
+ * bytes by definition. This means:
62
+ *
63
+ * bytes / hits = average hit payload size
64
+ *
65
+ * which is the metric operators care about for capacity planning.
66
+ */
67
+ export interface CacheCell {
68
+ hits: number;
69
+ misses: number;
70
+ /** Cumulative bytes returned on hits. Does NOT include miss "size" (0). */
71
+ bytes: number;
72
+ }
73
+ export interface CacheStatsSnapshot {
74
+ /** Tier × Kind grid. Each cell tracks hits, misses, bytes-on-hit. */
75
+ byTier: Record<CacheTier, Record<CacheKind, CacheCell>>;
76
+ /**
77
+ * Wall-clock ms at module load (when this isolate first received a
78
+ * request that imported this module). Stable across requests within
79
+ * the same isolate; resets on DO reboot (itself a useful signal).
80
+ */
81
+ startedAt: number;
82
+ /**
83
+ * Wall-clock ms at the most recent `reset()` call. Equals startedAt
84
+ * if reset() has never been called.
85
+ */
86
+ lastResetAt: number;
87
+ /**
88
+ * Derived hit-rate per (tier, kind), 0..1. Computed as
89
+ * hits / (hits + misses). NaN-safe: returns 0 when (hits + misses)
90
+ * is 0 so JSON serialisation stays clean. Mirrors the byTier shape
91
+ * exactly so consumers can ZIP the two structures with the same key
92
+ * paths.
93
+ */
94
+ hitRate: Record<CacheTier, Record<CacheKind, number>>;
95
+ }
96
+ /**
97
+ * Record a cache HIT at the given tier for the given kind.
98
+ *
99
+ * `bytes` is the size of the payload returned by the hit, in bytes.
100
+ * For packuments this is the JSON text length; for tarballs it's the
101
+ * gzipped tar byte length; for assets it's the asset bytes. The caller
102
+ * already has the size (post-fetch); passing it here is cheap.
103
+ *
104
+ * Pass 0 if the hit returned an empty payload (shouldn't happen in
105
+ * practice but the API tolerates it).
106
+ */
107
+ export declare function recordHit(tier: CacheTier, kind: CacheKind, bytes: number): void;
108
+ /**
109
+ * Record a cache MISS at the given tier for the given kind.
110
+ *
111
+ * Misses don't carry payload bytes. A miss at tier N typically means
112
+ * the caller will fall through to tier N+1; that downstream call will
113
+ * record its OWN hit or miss. So a single fetch flow naturally records
114
+ * a chain of misses ending in one hit at the tier that served the data.
115
+ *
116
+ * Example: cold fetch of `react@18.3.1` tarball records:
117
+ *
118
+ * recordMiss('L1', 'tarball');
119
+ * recordMiss('L2', 'tarball');
120
+ * recordMiss('L3', 'tarball');
121
+ * recordHit('L4', 'tarball', 12345); // bytes from registry response
122
+ *
123
+ * After the writeback path runs, the same key from a subsequent fetch
124
+ * would record:
125
+ *
126
+ * recordMiss('L1', 'tarball');
127
+ * recordHit('L2', 'tarball', 12345);
128
+ */
129
+ export declare function recordMiss(tier: CacheTier, kind: CacheKind): void;
130
+ /**
131
+ * Return a snapshot of current counters + derived hit-rates.
132
+ *
133
+ * The returned object is a fresh copy — caller-side mutations don't
134
+ * affect the singleton. Mirrors readDiagCounters() in diag-counters.ts.
135
+ */
136
+ export declare function snapshot(): CacheStatsSnapshot;
137
+ /**
138
+ * Zero all counters. Sets lastResetAt to now. Used by the
139
+ * `/api/_diag/cache/reset` endpoint to start a fresh measurement window.
140
+ *
141
+ * Does NOT clear startedAt — that remains the original module-load time
142
+ * so operators can tell "this isolate has been up for X but counters
143
+ * were reset at Y" (the gap is intentional vs an isolate reboot).
144
+ */
145
+ export declare function reset(): void;
146
+ //# sourceMappingURL=cache-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-stats.d.ts","sourceRoot":"","sources":["../../src/_shared/cache-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAyCD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAO/E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,kBAAkB,CAqB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAS5B"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * cache-stats.ts — Per-tier hit/miss/bytes counters for the npm cache stack.
3
+ *
4
+ * Purpose
5
+ * ───────
6
+ * The supervisor (and its facets) make cache lookups at four tiers:
7
+ *
8
+ * L1 — per-DO SQLite (NpmCache) ~1 ms / file
9
+ * L2 — caches.default (per-colo) ~50-500 µs hit
10
+ * L3 — R2 (cross-tenant global) ~30-100 ms regional
11
+ * L4 — registry.npmjs.org origin ~100-300 ms cross-region
12
+ *
13
+ * Pre-cache-observability wave: hit/miss counters lived in
14
+ * src/observability/diag-counters.ts but only tracked the RPC-call
15
+ * boundary (`r2.tarballHit`, `r2.packumentMiss`), not per-tier. From
16
+ * prod we couldn't tell whether L2 hit-rate was 90% or 30%.
17
+ *
18
+ * This module adds per-tier × per-kind counters. SAME singleton-per-
19
+ * isolate pattern as diag-counters.ts so any supervisor code path can
20
+ * write to it and `/api/_diag/cache` reads it back.
21
+ *
22
+ * Why a separate module instead of extending diag-counters.ts:
23
+ * - Avoids touching diag-counters.ts (other waves may extend that
24
+ * file's R2 race counters; keeping these orthogonal makes rebases
25
+ * trivial).
26
+ * - The new shape (Tier × Kind grid) is structurally different from
27
+ * diag-counters' flat r2.* shape. Mixing them in one type would
28
+ * create awkward conditional types.
29
+ * - The new counters are exposed at /api/_diag/cache; diag-counters
30
+ * is exposed at /api/_diag/memory. Separate endpoints, separate
31
+ * modules.
32
+ *
33
+ * Lives in src/_shared/ so anyone (supervisor + future facet code) can
34
+ * import it without crossing the npm/, runtime/, facets/ boundaries
35
+ * that have wave-owners.
36
+ */
37
+ const TIERS = ['L1', 'L2', 'L3', 'L4'];
38
+ const KINDS = ['tarball', 'packument', 'asset'];
39
+ function makeEmptyGrid() {
40
+ const grid = {};
41
+ for (const tier of TIERS) {
42
+ grid[tier] = {};
43
+ for (const kind of KINDS) {
44
+ grid[tier][kind] = { hits: 0, misses: 0, bytes: 0 };
45
+ }
46
+ }
47
+ return grid;
48
+ }
49
+ /**
50
+ * Module-scoped singleton. Lives for the lifetime of the isolate.
51
+ *
52
+ * Workerd may evict the isolate at any time (memory pressure, idle
53
+ * shutdown, code update); when that happens, counters reset to zero
54
+ * on the next request — itself diagnostic signal: counters all-zero
55
+ * immediately after a request means we just woke up from cold.
56
+ *
57
+ * startedAt lazy-init: workerd returns 0 for `Date.now()` at
58
+ * module-evaluation time because IO is gated until the first request.
59
+ * Initialize lazily on the first hit/miss/snapshot so the timestamp
60
+ * reflects actual module-first-touched-by-request time, not the
61
+ * sentinel 0 value.
62
+ */
63
+ const _grid = makeEmptyGrid();
64
+ let _startedAt = 0;
65
+ let _lastResetAt = 0;
66
+ function _ensureStartedAt() {
67
+ if (_startedAt === 0) {
68
+ const now = Date.now();
69
+ _startedAt = now;
70
+ _lastResetAt = now;
71
+ }
72
+ }
73
+ /**
74
+ * Record a cache HIT at the given tier for the given kind.
75
+ *
76
+ * `bytes` is the size of the payload returned by the hit, in bytes.
77
+ * For packuments this is the JSON text length; for tarballs it's the
78
+ * gzipped tar byte length; for assets it's the asset bytes. The caller
79
+ * already has the size (post-fetch); passing it here is cheap.
80
+ *
81
+ * Pass 0 if the hit returned an empty payload (shouldn't happen in
82
+ * practice but the API tolerates it).
83
+ */
84
+ export function recordHit(tier, kind, bytes) {
85
+ _ensureStartedAt();
86
+ const cell = _grid[tier][kind];
87
+ cell.hits++;
88
+ // Negative bytes is meaningless; coerce to 0. We trust the caller for
89
+ // accuracy but defend against accidental -1 sentinels.
90
+ cell.bytes += bytes > 0 ? bytes : 0;
91
+ }
92
+ /**
93
+ * Record a cache MISS at the given tier for the given kind.
94
+ *
95
+ * Misses don't carry payload bytes. A miss at tier N typically means
96
+ * the caller will fall through to tier N+1; that downstream call will
97
+ * record its OWN hit or miss. So a single fetch flow naturally records
98
+ * a chain of misses ending in one hit at the tier that served the data.
99
+ *
100
+ * Example: cold fetch of `react@18.3.1` tarball records:
101
+ *
102
+ * recordMiss('L1', 'tarball');
103
+ * recordMiss('L2', 'tarball');
104
+ * recordMiss('L3', 'tarball');
105
+ * recordHit('L4', 'tarball', 12345); // bytes from registry response
106
+ *
107
+ * After the writeback path runs, the same key from a subsequent fetch
108
+ * would record:
109
+ *
110
+ * recordMiss('L1', 'tarball');
111
+ * recordHit('L2', 'tarball', 12345);
112
+ */
113
+ export function recordMiss(tier, kind) {
114
+ _ensureStartedAt();
115
+ _grid[tier][kind].misses++;
116
+ }
117
+ /**
118
+ * Return a snapshot of current counters + derived hit-rates.
119
+ *
120
+ * The returned object is a fresh copy — caller-side mutations don't
121
+ * affect the singleton. Mirrors readDiagCounters() in diag-counters.ts.
122
+ */
123
+ export function snapshot() {
124
+ _ensureStartedAt();
125
+ // Deep copy so caller mutations don't leak back into the singleton.
126
+ const byTier = {};
127
+ const hitRate = {};
128
+ for (const tier of TIERS) {
129
+ byTier[tier] = {};
130
+ hitRate[tier] = {};
131
+ for (const kind of KINDS) {
132
+ const c = _grid[tier][kind];
133
+ byTier[tier][kind] = { hits: c.hits, misses: c.misses, bytes: c.bytes };
134
+ const lookups = c.hits + c.misses;
135
+ hitRate[tier][kind] = lookups === 0 ? 0 : c.hits / lookups;
136
+ }
137
+ }
138
+ return {
139
+ byTier,
140
+ startedAt: _startedAt,
141
+ lastResetAt: _lastResetAt,
142
+ hitRate,
143
+ };
144
+ }
145
+ /**
146
+ * Zero all counters. Sets lastResetAt to now. Used by the
147
+ * `/api/_diag/cache/reset` endpoint to start a fresh measurement window.
148
+ *
149
+ * Does NOT clear startedAt — that remains the original module-load time
150
+ * so operators can tell "this isolate has been up for X but counters
151
+ * were reset at Y" (the gap is intentional vs an isolate reboot).
152
+ */
153
+ export function reset() {
154
+ for (const tier of TIERS) {
155
+ for (const kind of KINDS) {
156
+ _grid[tier][kind].hits = 0;
157
+ _grid[tier][kind].misses = 0;
158
+ _grid[tier][kind].bytes = 0;
159
+ }
160
+ }
161
+ _lastResetAt = Date.now();
162
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * exports-resolver.ts — Single source of truth for `package.json#exports` /
3
+ * `package.json#imports` resolution per the Node.js spec.
4
+ *
5
+ * Used in three contexts:
6
+ *
7
+ * 1. Install-time supervisor (TS) — `src/npm-resolver.ts` re-exports the
8
+ * typed functions for tree resolution.
9
+ *
10
+ * 2. NimbusLoaderPool isolates (JS string) — `src/parallel/pre-bundle-preamble.ts`
11
+ * embeds `getExportsResolverJS()` as part of the pool preamble so the
12
+ * pre-bundle facet uses identical resolution semantics to the supervisor.
13
+ *
14
+ * 3. User-shell `node` runtime (JS string) — `src/node-shims.ts` embeds
15
+ * the same JS source so `require()` from inside a user's `node` script
16
+ * sees the same exports map as the install pipeline.
17
+ *
18
+ * Audit reference: audit/sections/03-resolver-gaps.md §3.1, §3.2.
19
+ *
20
+ * Spec features supported:
21
+ * - String shorthand: "exports": "./dist/index.mjs"
22
+ * - Subpath maps: { ".": "...", "./client": "..." }
23
+ * - Conditional maps (top-level): { "import": "...", "require": "..." }
24
+ * - Nested conditions: { ".": { "node": { "default": "..." } } }
25
+ * - Subpath wildcards: { "./*": "./dist/*.js" }
26
+ * - Array fallbacks: [ "./esm.js", "./cjs.js" ]
27
+ * - `imports` field (`#name`): same shape, same impl (re-uses resolveExports)
28
+ * - Null-target enforcement: { "./private/*": null } — returns null, blocks fallback
29
+ *
30
+ * Caller-controlled `conditions` lets the same impl serve:
31
+ * - install/ESM/browser → ['import', 'module', 'browser', 'default']
32
+ * - runtime CJS → ['require', 'node', 'default']
33
+ */
34
+ /** Default conditions for ESM/install/browser resolution. */
35
+ export declare const DEFAULT_ESM_CONDITIONS: string[];
36
+ /** Default conditions for CJS runtime resolution (user-shell node). */
37
+ export declare const DEFAULT_CJS_CONDITIONS: string[];
38
+ /**
39
+ * Resolve `package.json#exports` (or `#imports`) per Node spec.
40
+ *
41
+ * @param exportsField Raw value from package.json#exports or #imports
42
+ * @param subpath '.' for root, './foo' for subpath, '#name' for imports
43
+ * @param conditions Active conditions, in priority order
44
+ * @returns Relative path target string, or null if not found / forbidden
45
+ */
46
+ export declare function resolveExports(exportsField: any, subpath?: string, conditions?: string[]): string | null;
47
+ /**
48
+ * Resolve a package's entry-point file relative to its directory.
49
+ * Priority: exports → module → main → null.
50
+ * For non-root subpaths without an `exports` field, returns the subpath
51
+ * itself (caller probes filesystem with extension-list).
52
+ */
53
+ export declare function resolvePackageEntry(pkg: {
54
+ exports?: any;
55
+ module?: string;
56
+ main?: string;
57
+ }, subpath?: string, conditions?: string[]): string | null;
58
+ /**
59
+ * Returns the resolver source as plain JavaScript (no TypeScript syntax),
60
+ * suitable for embedding into a generated worker preamble or shim string.
61
+ *
62
+ * The emitted source declares three top-level functions in scope:
63
+ * - resolveExports(exports, subpath, conditions)
64
+ * - resolveConditionValue(target, conditions) (helper)
65
+ * - resolvePackageEntry(pkg, subpath, conditions)
66
+ *
67
+ * It also declares two arrays:
68
+ * - DEFAULT_ESM_CONDITIONS
69
+ * - DEFAULT_CJS_CONDITIONS
70
+ *
71
+ * This source must be byte-equivalent to the TS impl above (modulo type
72
+ * annotations and `export` keywords). Keep them in sync — there is one
73
+ * verification probe in audit/probes that compares parity.
74
+ */
75
+ export declare function getExportsResolverJS(): string;
76
+ //# sourceMappingURL=exports-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-resolver.d.ts","sourceRoot":"","sources":["../../src/_shared/exports-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,UAA6C,CAAC;AAEjF,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,UAAiC,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,GAAG,EACjB,OAAO,GAAE,MAAY,EACrB,UAAU,GAAE,MAAM,EAA2B,GAC5C,MAAM,GAAG,IAAI,CAkEf;AAwCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,OAAO,GAAE,MAAY,EACrB,UAAU,GAAE,MAAM,EAA2B,GAC5C,MAAM,GAAG,IAAI,CAqBf;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiG7C"}