@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,136 @@
1
+ export interface RegistryCacheEntry {
2
+ name: string;
3
+ version: string;
4
+ tarballUrl: string;
5
+ integrity: string;
6
+ depsJson: string;
7
+ /**
8
+ * JSON-encoded REQUIRED peerDependencies (X.5-F R2).
9
+ *
10
+ * Optional peers — those marked `peerDependenciesMeta.<name>.optional
11
+ * === true` in the source packument — are filtered out before this
12
+ * field is written. Storing only the required subset means downstream
13
+ * lockfile-validity checks can ask "is this peer in the tree?"
14
+ * without having to consult the meta field again.
15
+ *
16
+ * Defaults to '{}' for entries written by pre-X.5-F builds (the
17
+ * column was added via ALTER TABLE, see ensureSchema).
18
+ */
19
+ peerDepsJson?: string;
20
+ exportsJson: string;
21
+ main: string;
22
+ moduleField: string;
23
+ binJson: string;
24
+ fetchedAt: number;
25
+ }
26
+ export interface TarballCacheFile {
27
+ relPath: string;
28
+ data: Uint8Array;
29
+ size: number;
30
+ }
31
+ export interface LockfileEntry {
32
+ name: string;
33
+ resolvedVer: string;
34
+ integrity: string;
35
+ depsJson: string;
36
+ hoistedPath: string;
37
+ }
38
+ export interface EsmBundleEntry {
39
+ specifier: string;
40
+ bundleHash: string;
41
+ esmCode: string;
42
+ builtAt: number;
43
+ inputHash: string;
44
+ }
45
+ export declare class NpmCache {
46
+ private sql;
47
+ private initialized;
48
+ constructor(sql: SqlStorage);
49
+ ensureSchema(): void;
50
+ /** Get cached registry metadata for a specific name@version.
51
+ *
52
+ * L1 observability: bumps cache-stats L1.packument hit/miss. Bytes
53
+ * on hit = approximate size of the deserialized RegistryCacheEntry,
54
+ * computed as sum of major-string lengths (depsJson + peerDepsJson +
55
+ * exportsJson + binJson + a few tens of bytes overhead). This is a
56
+ * good proxy for "how much L1 data did we save fetching" — not the
57
+ * exact SQLite blob byte count (which would require a separate
58
+ * SELECT). */
59
+ getRegistryEntry(name: string, version: string): RegistryCacheEntry | null;
60
+ /**
61
+ * Bulk read of cached registry entries — used by the resolver-facet
62
+ * dispatcher to pre-load cached metadata it can ship across to the
63
+ * facet at phase start. Caller passes a hard cap; we LIMIT in SQL so
64
+ * a pathologically warm cache doesn't OOM the supervisor reading its
65
+ * own cache.
66
+ *
67
+ * Order: most-recently-fetched first, so when the cap truncates we
68
+ * keep the freshest entries (most likely to satisfy current ranges).
69
+ */
70
+ dumpRegistryEntries(maxRows: number): RegistryCacheEntry[];
71
+ /** Get all cached versions for a package name. */
72
+ getRegistryVersions(name: string): RegistryCacheEntry[];
73
+ /** Store registry metadata for a resolved package version. */
74
+ putRegistryEntry(entry: RegistryCacheEntry): void;
75
+ /**
76
+ * Bulk-write registry entries in ONE call. Used by the resolver-facet
77
+ * to flush a wave of resolved packages back to the supervisor in a
78
+ * single RPC round-trip; one-RPC-per-entry across ~456 transitive
79
+ * deps would multiply RPC overhead by 100×.
80
+ *
81
+ * Each row is one prepared statement; we loop rather than building a
82
+ * giant multi-row INSERT because workerd's SqlStorage `.exec()` is
83
+ * already transaction-batched at the storage layer when called within
84
+ * the same DO event loop turn (no explicit BEGIN/COMMIT needed for
85
+ * atomicity of the batch — see Cloudflare DO SQLite docs). If a
86
+ * single row fails (malformed data), it's logged and the rest still
87
+ * commit; resolver correctness depends on cache being best-effort.
88
+ */
89
+ putRegistryEntries(entries: RegistryCacheEntry[]): {
90
+ written: number;
91
+ failed: number;
92
+ };
93
+ /** Check if a package version's files are cached. */
94
+ hasTarballCache(name: string, version: string): boolean;
95
+ /** Get all cached files for a package version.
96
+ *
97
+ * L1 observability: hit when rows > 0; miss when empty. Bytes on
98
+ * hit = sum of file sizes from the SIZE column (cheaper than
99
+ * measuring blob lengths after decode; SIZE is the source-of-truth
100
+ * stored at write time). */
101
+ getTarballFiles(name: string, version: string): TarballCacheFile[];
102
+ /** Max individual file size for tarball cache (DO SQLite blob limit). */
103
+ static readonly MAX_CACHEABLE_FILE = 1000000;
104
+ /** Max total package size for tarball cache. */
105
+ static readonly MAX_CACHEABLE_PACKAGE = 5000000;
106
+ /**
107
+ * Store extracted tarball files for a package version.
108
+ * Skips packages that exceed the SQLite blob size limit (SQLITE_TOOBIG).
109
+ * Large packages (date-fns, lucide-react) will be re-fetched on reinstall.
110
+ */
111
+ putTarballFiles(name: string, version: string, files: Map<string, Uint8Array>, ctx?: DurableObjectState): void;
112
+ /** Count cached files for a package version. */
113
+ getTarballFileCount(name: string, version: string): number;
114
+ /** Read the lockfile for a project. Returns null if not found. */
115
+ readLockfile(projectPath: string): Map<string, LockfileEntry> | null;
116
+ /** Write/overwrite the lockfile for a project. Atomic via transaction. */
117
+ writeLockfile(projectPath: string, entries: Map<string, LockfileEntry>, ctx?: DurableObjectState): void;
118
+ /** Delete lockfile for a project (e.g., after package.json changes). */
119
+ deleteLockfile(projectPath: string): void;
120
+ /** Get a pre-bundled ESM module. */
121
+ getEsmBundle(specifier: string): EsmBundleEntry | null;
122
+ /** Store a pre-bundled ESM module. */
123
+ putEsmBundle(entry: EsmBundleEntry): void;
124
+ /** Delete a pre-bundled ESM module (e.g., after package update). */
125
+ deleteEsmBundle(specifier: string): void;
126
+ /** Delete all ESM bundles (e.g., after full reinstall). */
127
+ clearEsmBundles(): void;
128
+ getStats(): {
129
+ registryEntries: number;
130
+ cachedPackages: number;
131
+ cachedFiles: number;
132
+ lockfileProjects: number;
133
+ esmBundles: number;
134
+ };
135
+ }
136
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/npm/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,429 @@
1
+ /**
2
+ * npm-cache.ts — SQLite-backed package cache for Nimbus npm v2.
3
+ *
4
+ * Four tables:
5
+ * 1. pkg_registry_cache — packument metadata (avoids re-fetching full JSON)
6
+ * 2. pkg_tarball_cache — extracted file contents per name@version
7
+ * 3. pkg_lockfile — resolved dependency graph per project
8
+ * 4. pkg_esm_bundles — pre-bundled ESM for /@modules/ serving
9
+ *
10
+ * All tables live in the same DO SQLite as the VFS. Schema is created lazily
11
+ * on first use (not at VFS init, to avoid penalizing sessions that don't npm install).
12
+ *
13
+ * L1 cache observability (cache-observability wave):
14
+ * getRegistryEntry / getTarballFiles bump per-tier counters via
15
+ * src/_shared/cache-stats.ts. Hit = row(s) returned with size > 0;
16
+ * miss = empty result set. Callers fall through to L2/L3/L4 on miss.
17
+ */
18
+ import { recordHit as _l1RecordHit, recordMiss as _l1RecordMiss } from '../_shared/cache-stats.js';
19
+ // ── NpmCache ────────────────────────────────────────────────────────────
20
+ export class NpmCache {
21
+ sql;
22
+ initialized = false;
23
+ constructor(sql) {
24
+ this.sql = sql;
25
+ }
26
+ // ── Schema ────────────────────────────────────────────────────────────
27
+ ensureSchema() {
28
+ if (this.initialized)
29
+ return;
30
+ this.sql.exec(`CREATE TABLE IF NOT EXISTS pkg_registry_cache (
31
+ name TEXT NOT NULL,
32
+ version TEXT NOT NULL,
33
+ tarball_url TEXT NOT NULL,
34
+ integrity TEXT NOT NULL DEFAULT '',
35
+ deps_json TEXT NOT NULL DEFAULT '{}',
36
+ peer_deps_json TEXT NOT NULL DEFAULT '{}',
37
+ exports_json TEXT NOT NULL DEFAULT '{}',
38
+ main TEXT NOT NULL DEFAULT '',
39
+ module_field TEXT NOT NULL DEFAULT '',
40
+ bin_json TEXT NOT NULL DEFAULT '{}',
41
+ fetched_at INTEGER NOT NULL DEFAULT 0,
42
+ PRIMARY KEY (name, version)
43
+ )`);
44
+ // X.5-F R2: peer_deps_json column added in this wave. Older tenants
45
+ // have a registry cache table without it — ALTER TABLE adds it
46
+ // with the same NOT NULL DEFAULT '{}' the CREATE specifies. SQLite
47
+ // ignores ADD COLUMN if the column already exists in newer setups
48
+ // — except it doesn't, it errors. So we probe via PRAGMA first.
49
+ let hasPeerCol = false;
50
+ try {
51
+ const cols = [...this.sql.exec(`PRAGMA table_info(pkg_registry_cache)`)];
52
+ hasPeerCol = cols.some((r) => String(r.name) === 'peer_deps_json');
53
+ }
54
+ catch { /* PRAGMA failed — fall through and ATTEMPT, swallow on error */ }
55
+ if (!hasPeerCol) {
56
+ try {
57
+ this.sql.exec(`ALTER TABLE pkg_registry_cache ADD COLUMN peer_deps_json TEXT NOT NULL DEFAULT '{}'`);
58
+ }
59
+ catch (e) {
60
+ // Race or pre-existing — non-fatal; the column might already
61
+ // exist if the CREATE just ran above on a fresh tenant.
62
+ const msg = e?.message || String(e);
63
+ if (!/duplicate column/i.test(msg)) {
64
+ console.error('[npm-cache] peer_deps_json migration failed:', msg);
65
+ }
66
+ }
67
+ }
68
+ this.sql.exec(`CREATE TABLE IF NOT EXISTS pkg_tarball_cache (
69
+ name TEXT NOT NULL,
70
+ version TEXT NOT NULL,
71
+ rel_path TEXT NOT NULL,
72
+ data BLOB NOT NULL,
73
+ size INTEGER NOT NULL DEFAULT 0,
74
+ PRIMARY KEY (name, version, rel_path)
75
+ )`);
76
+ this.sql.exec(`CREATE INDEX IF NOT EXISTS idx_pkg_tarball_nv ON pkg_tarball_cache(name, version)`);
77
+ this.sql.exec(`CREATE TABLE IF NOT EXISTS pkg_lockfile (
78
+ project_path TEXT NOT NULL,
79
+ name TEXT NOT NULL,
80
+ resolved_ver TEXT NOT NULL,
81
+ integrity TEXT NOT NULL DEFAULT '',
82
+ deps_json TEXT NOT NULL DEFAULT '{}',
83
+ hoisted_path TEXT NOT NULL DEFAULT '',
84
+ PRIMARY KEY (project_path, name)
85
+ )`);
86
+ this.sql.exec(`CREATE TABLE IF NOT EXISTS pkg_esm_bundles (
87
+ specifier TEXT PRIMARY KEY,
88
+ bundle_hash TEXT NOT NULL,
89
+ esm_code TEXT NOT NULL,
90
+ built_at INTEGER NOT NULL DEFAULT 0,
91
+ input_hash TEXT NOT NULL DEFAULT ''
92
+ )`);
93
+ this.initialized = true;
94
+ }
95
+ // ── Registry cache ────────────────────────────────────────────────────
96
+ /** Get cached registry metadata for a specific name@version.
97
+ *
98
+ * L1 observability: bumps cache-stats L1.packument hit/miss. Bytes
99
+ * on hit = approximate size of the deserialized RegistryCacheEntry,
100
+ * computed as sum of major-string lengths (depsJson + peerDepsJson +
101
+ * exportsJson + binJson + a few tens of bytes overhead). This is a
102
+ * good proxy for "how much L1 data did we save fetching" — not the
103
+ * exact SQLite blob byte count (which would require a separate
104
+ * SELECT). */
105
+ getRegistryEntry(name, version) {
106
+ this.ensureSchema();
107
+ const rows = [...this.sql.exec(`SELECT name, version, tarball_url, integrity, deps_json, peer_deps_json, exports_json, main, module_field, bin_json, fetched_at
108
+ FROM pkg_registry_cache WHERE name = ? AND version = ?`, name, version)];
109
+ if (rows.length === 0) {
110
+ _l1RecordMiss('L1', 'packument');
111
+ return null;
112
+ }
113
+ const r = rows[0];
114
+ const entry = {
115
+ name: String(r.name),
116
+ version: String(r.version),
117
+ tarballUrl: String(r.tarball_url),
118
+ integrity: String(r.integrity),
119
+ depsJson: String(r.deps_json),
120
+ peerDepsJson: String(r.peer_deps_json ?? '{}'),
121
+ exportsJson: String(r.exports_json),
122
+ main: String(r.main),
123
+ moduleField: String(r.module_field),
124
+ binJson: String(r.bin_json),
125
+ fetchedAt: Number(r.fetched_at),
126
+ };
127
+ // Approximate hit-bytes: sum of variable-length string fields.
128
+ // The fixed-cost fields (name, version, integrity, etc.) add ~150
129
+ // bytes on average; the variable fields can be tens of KB for
130
+ // packages with large exports maps. Skip the constant overhead so
131
+ // bytes correlates with the dominant cost.
132
+ const bytes = entry.depsJson.length +
133
+ entry.peerDepsJson.length +
134
+ entry.exportsJson.length +
135
+ entry.binJson.length;
136
+ _l1RecordHit('L1', 'packument', bytes);
137
+ return entry;
138
+ }
139
+ /**
140
+ * Bulk read of cached registry entries — used by the resolver-facet
141
+ * dispatcher to pre-load cached metadata it can ship across to the
142
+ * facet at phase start. Caller passes a hard cap; we LIMIT in SQL so
143
+ * a pathologically warm cache doesn't OOM the supervisor reading its
144
+ * own cache.
145
+ *
146
+ * Order: most-recently-fetched first, so when the cap truncates we
147
+ * keep the freshest entries (most likely to satisfy current ranges).
148
+ */
149
+ dumpRegistryEntries(maxRows) {
150
+ this.ensureSchema();
151
+ const rows = [...this.sql.exec(`SELECT name, version, tarball_url, integrity, deps_json, peer_deps_json, exports_json, main, module_field, bin_json, fetched_at
152
+ FROM pkg_registry_cache ORDER BY fetched_at DESC LIMIT ?`, maxRows)];
153
+ return rows.map((r) => ({
154
+ name: String(r.name),
155
+ version: String(r.version),
156
+ tarballUrl: String(r.tarball_url),
157
+ integrity: String(r.integrity),
158
+ depsJson: String(r.deps_json),
159
+ peerDepsJson: String(r.peer_deps_json ?? '{}'),
160
+ exportsJson: String(r.exports_json),
161
+ main: String(r.main),
162
+ moduleField: String(r.module_field),
163
+ binJson: String(r.bin_json),
164
+ fetchedAt: Number(r.fetched_at),
165
+ }));
166
+ }
167
+ /** Get all cached versions for a package name. */
168
+ getRegistryVersions(name) {
169
+ this.ensureSchema();
170
+ const rows = [...this.sql.exec(`SELECT name, version, tarball_url, integrity, deps_json, peer_deps_json, exports_json, main, module_field, bin_json, fetched_at
171
+ FROM pkg_registry_cache WHERE name = ?`, name)];
172
+ return rows.map(r => ({
173
+ name: String(r.name),
174
+ version: String(r.version),
175
+ tarballUrl: String(r.tarball_url),
176
+ integrity: String(r.integrity),
177
+ depsJson: String(r.deps_json),
178
+ peerDepsJson: String(r.peer_deps_json ?? '{}'),
179
+ exportsJson: String(r.exports_json),
180
+ main: String(r.main),
181
+ moduleField: String(r.module_field),
182
+ binJson: String(r.bin_json),
183
+ fetchedAt: Number(r.fetched_at),
184
+ }));
185
+ }
186
+ /** Store registry metadata for a resolved package version. */
187
+ putRegistryEntry(entry) {
188
+ this.ensureSchema();
189
+ this.sql.exec(`INSERT OR REPLACE INTO pkg_registry_cache
190
+ (name, version, tarball_url, integrity, deps_json, peer_deps_json, exports_json, main, module_field, bin_json, fetched_at)
191
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, entry.name, entry.version, entry.tarballUrl, entry.integrity, entry.depsJson, entry.peerDepsJson || '{}', entry.exportsJson, entry.main, entry.moduleField, entry.binJson, entry.fetchedAt);
192
+ }
193
+ /**
194
+ * Bulk-write registry entries in ONE call. Used by the resolver-facet
195
+ * to flush a wave of resolved packages back to the supervisor in a
196
+ * single RPC round-trip; one-RPC-per-entry across ~456 transitive
197
+ * deps would multiply RPC overhead by 100×.
198
+ *
199
+ * Each row is one prepared statement; we loop rather than building a
200
+ * giant multi-row INSERT because workerd's SqlStorage `.exec()` is
201
+ * already transaction-batched at the storage layer when called within
202
+ * the same DO event loop turn (no explicit BEGIN/COMMIT needed for
203
+ * atomicity of the batch — see Cloudflare DO SQLite docs). If a
204
+ * single row fails (malformed data), it's logged and the rest still
205
+ * commit; resolver correctness depends on cache being best-effort.
206
+ */
207
+ putRegistryEntries(entries) {
208
+ this.ensureSchema();
209
+ let written = 0;
210
+ let failed = 0;
211
+ for (const entry of entries) {
212
+ try {
213
+ this.sql.exec(`INSERT OR REPLACE INTO pkg_registry_cache
214
+ (name, version, tarball_url, integrity, deps_json, peer_deps_json, exports_json, main, module_field, bin_json, fetched_at)
215
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, entry.name, entry.version, entry.tarballUrl, entry.integrity, entry.depsJson, entry.peerDepsJson || '{}', entry.exportsJson, entry.main, entry.moduleField, entry.binJson, entry.fetchedAt);
216
+ written++;
217
+ }
218
+ catch (e) {
219
+ console.error(`[npm-cache] bulk putRegistryEntry failed for ${entry.name}@${entry.version}:`, e?.message);
220
+ failed++;
221
+ }
222
+ }
223
+ return { written, failed };
224
+ }
225
+ // ── Tarball cache ─────────────────────────────────────────────────────
226
+ /** Check if a package version's files are cached. */
227
+ hasTarballCache(name, version) {
228
+ this.ensureSchema();
229
+ const rows = [...this.sql.exec(`SELECT 1 FROM pkg_tarball_cache WHERE name = ? AND version = ? LIMIT 1`, name, version)];
230
+ return rows.length > 0;
231
+ }
232
+ /** Get all cached files for a package version.
233
+ *
234
+ * L1 observability: hit when rows > 0; miss when empty. Bytes on
235
+ * hit = sum of file sizes from the SIZE column (cheaper than
236
+ * measuring blob lengths after decode; SIZE is the source-of-truth
237
+ * stored at write time). */
238
+ getTarballFiles(name, version) {
239
+ this.ensureSchema();
240
+ const rows = [...this.sql.exec(`SELECT rel_path, data, size FROM pkg_tarball_cache WHERE name = ? AND version = ?`, name, version)];
241
+ if (rows.length === 0) {
242
+ _l1RecordMiss('L1', 'tarball');
243
+ return [];
244
+ }
245
+ const out = rows.map(r => ({
246
+ relPath: String(r.rel_path),
247
+ data: blobToUint8Array(r.data),
248
+ size: Number(r.size),
249
+ }));
250
+ let totalBytes = 0;
251
+ for (const f of out)
252
+ totalBytes += f.size;
253
+ _l1RecordHit('L1', 'tarball', totalBytes);
254
+ return out;
255
+ }
256
+ /** Max individual file size for tarball cache (DO SQLite blob limit). */
257
+ static MAX_CACHEABLE_FILE = 1_000_000; // 1MB
258
+ /** Max total package size for tarball cache. */
259
+ static MAX_CACHEABLE_PACKAGE = 5_000_000; // 5MB
260
+ /**
261
+ * Store extracted tarball files for a package version.
262
+ * Skips packages that exceed the SQLite blob size limit (SQLITE_TOOBIG).
263
+ * Large packages (date-fns, lucide-react) will be re-fetched on reinstall.
264
+ */
265
+ putTarballFiles(name, version, files, ctx) {
266
+ this.ensureSchema();
267
+ // Check total package size — skip caching if too large
268
+ let totalSize = 0;
269
+ for (const [, data] of files)
270
+ totalSize += data.length;
271
+ if (totalSize > NpmCache.MAX_CACHEABLE_PACKAGE) {
272
+ console.log(`[npm-cache] skipping cache for ${name}@${version} (${(totalSize / 1e6).toFixed(1)}MB > 5MB limit)`);
273
+ return;
274
+ }
275
+ // Filter out individual files that exceed the blob limit
276
+ const entries = [...files.entries()].filter(([relPath, data]) => {
277
+ if (data.length > NpmCache.MAX_CACHEABLE_FILE) {
278
+ console.log(`[npm-cache] skipping large file ${relPath} (${(data.length / 1e6).toFixed(1)}MB)`);
279
+ return false;
280
+ }
281
+ return true;
282
+ });
283
+ if (entries.length === 0)
284
+ return;
285
+ const doTx = (fn) => {
286
+ if (ctx?.storage?.transactionSync) {
287
+ ctx.storage.transactionSync(fn);
288
+ }
289
+ else {
290
+ fn();
291
+ }
292
+ };
293
+ doTx(() => {
294
+ // Delete old entries for this package version (if re-caching)
295
+ this.sql.exec(`DELETE FROM pkg_tarball_cache WHERE name = ? AND version = ?`, name, version);
296
+ // Batch insert: DO SQLite has a low bind-parameter limit (~100 vars).
297
+ // 5 columns per row → max 19 rows per statement (19×5=95).
298
+ const BATCH = 19;
299
+ for (let i = 0; i < entries.length; i += BATCH) {
300
+ const batch = entries.slice(i, i + BATCH);
301
+ const placeholders = batch.map(() => '(?,?,?,?,?)').join(',');
302
+ const values = [];
303
+ for (const [relPath, data] of batch) {
304
+ values.push(name, version, relPath, data, data.length);
305
+ }
306
+ this.sql.exec(`INSERT INTO pkg_tarball_cache (name, version, rel_path, data, size) VALUES ${placeholders}`, ...values);
307
+ }
308
+ });
309
+ }
310
+ /** Count cached files for a package version. */
311
+ getTarballFileCount(name, version) {
312
+ this.ensureSchema();
313
+ const rows = [...this.sql.exec(`SELECT COUNT(*) as cnt FROM pkg_tarball_cache WHERE name = ? AND version = ?`, name, version)];
314
+ return rows.length > 0 ? Number(rows[0].cnt) : 0;
315
+ }
316
+ // ── Lockfile ──────────────────────────────────────────────────────────
317
+ /** Read the lockfile for a project. Returns null if not found. */
318
+ readLockfile(projectPath) {
319
+ this.ensureSchema();
320
+ const rows = [...this.sql.exec(`SELECT name, resolved_ver, integrity, deps_json, hoisted_path
321
+ FROM pkg_lockfile WHERE project_path = ?`, projectPath)];
322
+ if (rows.length === 0)
323
+ return null;
324
+ const result = new Map();
325
+ for (const r of rows) {
326
+ result.set(String(r.name), {
327
+ name: String(r.name),
328
+ resolvedVer: String(r.resolved_ver),
329
+ integrity: String(r.integrity),
330
+ depsJson: String(r.deps_json),
331
+ hoistedPath: String(r.hoisted_path),
332
+ });
333
+ }
334
+ return result;
335
+ }
336
+ /** Write/overwrite the lockfile for a project. Atomic via transaction. */
337
+ writeLockfile(projectPath, entries, ctx) {
338
+ this.ensureSchema();
339
+ const doTx = (fn) => {
340
+ if (ctx?.storage?.transactionSync) {
341
+ ctx.storage.transactionSync(fn);
342
+ }
343
+ else {
344
+ fn();
345
+ }
346
+ };
347
+ doTx(() => {
348
+ // Clear existing lockfile for this project
349
+ this.sql.exec(`DELETE FROM pkg_lockfile WHERE project_path = ?`, projectPath);
350
+ // Batch insert: DO SQLite ~100 var limit. 6 cols → max 16 rows (16×6=96).
351
+ const entryList = [...entries.values()];
352
+ const BATCH = 16;
353
+ for (let i = 0; i < entryList.length; i += BATCH) {
354
+ const batch = entryList.slice(i, i + BATCH);
355
+ const placeholders = batch.map(() => '(?,?,?,?,?,?)').join(',');
356
+ const values = [];
357
+ for (const e of batch) {
358
+ values.push(projectPath, e.name, e.resolvedVer, e.integrity, e.depsJson, e.hoistedPath);
359
+ }
360
+ this.sql.exec(`INSERT INTO pkg_lockfile (project_path, name, resolved_ver, integrity, deps_json, hoisted_path) VALUES ${placeholders}`, ...values);
361
+ }
362
+ });
363
+ }
364
+ /** Delete lockfile for a project (e.g., after package.json changes). */
365
+ deleteLockfile(projectPath) {
366
+ this.ensureSchema();
367
+ this.sql.exec(`DELETE FROM pkg_lockfile WHERE project_path = ?`, projectPath);
368
+ }
369
+ // ── ESM bundles ───────────────────────────────────────────────────────
370
+ /** Get a pre-bundled ESM module. */
371
+ getEsmBundle(specifier) {
372
+ this.ensureSchema();
373
+ const rows = [...this.sql.exec(`SELECT specifier, bundle_hash, esm_code, built_at, input_hash
374
+ FROM pkg_esm_bundles WHERE specifier = ?`, specifier)];
375
+ if (rows.length === 0)
376
+ return null;
377
+ const r = rows[0];
378
+ return {
379
+ specifier: String(r.specifier),
380
+ bundleHash: String(r.bundle_hash),
381
+ esmCode: String(r.esm_code),
382
+ builtAt: Number(r.built_at),
383
+ inputHash: String(r.input_hash),
384
+ };
385
+ }
386
+ /** Store a pre-bundled ESM module. */
387
+ putEsmBundle(entry) {
388
+ this.ensureSchema();
389
+ this.sql.exec(`INSERT OR REPLACE INTO pkg_esm_bundles (specifier, bundle_hash, esm_code, built_at, input_hash)
390
+ VALUES (?, ?, ?, ?, ?)`, entry.specifier, entry.bundleHash, entry.esmCode, entry.builtAt, entry.inputHash);
391
+ }
392
+ /** Delete a pre-bundled ESM module (e.g., after package update). */
393
+ deleteEsmBundle(specifier) {
394
+ this.ensureSchema();
395
+ this.sql.exec(`DELETE FROM pkg_esm_bundles WHERE specifier = ?`, specifier);
396
+ }
397
+ /** Delete all ESM bundles (e.g., after full reinstall). */
398
+ clearEsmBundles() {
399
+ this.ensureSchema();
400
+ this.sql.exec(`DELETE FROM pkg_esm_bundles`);
401
+ }
402
+ // ── Stats ─────────────────────────────────────────────────────────────
403
+ getStats() {
404
+ this.ensureSchema();
405
+ const reg = [...this.sql.exec(`SELECT COUNT(*) as cnt FROM pkg_registry_cache`)];
406
+ const pkgs = [...this.sql.exec(`SELECT COUNT(DISTINCT name || '@' || version) as cnt FROM pkg_tarball_cache`)];
407
+ const files = [...this.sql.exec(`SELECT COUNT(*) as cnt FROM pkg_tarball_cache`)];
408
+ const locks = [...this.sql.exec(`SELECT COUNT(DISTINCT project_path) as cnt FROM pkg_lockfile`)];
409
+ const esm = [...this.sql.exec(`SELECT COUNT(*) as cnt FROM pkg_esm_bundles`)];
410
+ return {
411
+ registryEntries: Number(reg[0]?.cnt ?? 0),
412
+ cachedPackages: Number(pkgs[0]?.cnt ?? 0),
413
+ cachedFiles: Number(files[0]?.cnt ?? 0),
414
+ lockfileProjects: Number(locks[0]?.cnt ?? 0),
415
+ esmBundles: Number(esm[0]?.cnt ?? 0),
416
+ };
417
+ }
418
+ }
419
+ // ── Helpers ──────────────────────────────────────────────────────────────
420
+ function blobToUint8Array(blob) {
421
+ if (blob instanceof Uint8Array)
422
+ return blob;
423
+ if (blob instanceof ArrayBuffer)
424
+ return new Uint8Array(blob);
425
+ if (ArrayBuffer.isView(blob)) {
426
+ return new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength);
427
+ }
428
+ return new Uint8Array(0);
429
+ }