@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.
- package/README.md +219 -0
- package/dist/_shared/bytes.d.ts +18 -0
- package/dist/_shared/bytes.d.ts.map +1 -0
- package/dist/_shared/bytes.js +17 -0
- package/dist/_shared/cache-stats.d.ts +146 -0
- package/dist/_shared/cache-stats.d.ts.map +1 -0
- package/dist/_shared/cache-stats.js +162 -0
- package/dist/_shared/exports-resolver.d.ts +76 -0
- package/dist/_shared/exports-resolver.d.ts.map +1 -0
- package/dist/_shared/exports-resolver.js +284 -0
- package/dist/_shared/install-phase.d.ts +47 -0
- package/dist/_shared/install-phase.d.ts.map +1 -0
- package/dist/_shared/install-phase.js +1 -0
- package/dist/_shared/real-node-imports.d.ts +38 -0
- package/dist/_shared/real-node-imports.d.ts.map +1 -0
- package/dist/_shared/real-node-imports.js +46 -0
- package/dist/_shared/retry.d.ts +93 -0
- package/dist/_shared/retry.d.ts.map +1 -0
- package/dist/_shared/retry.js +161 -0
- package/dist/_shared/session-id.d.ts +39 -0
- package/dist/_shared/session-id.d.ts.map +1 -0
- package/dist/_shared/session-id.js +127 -0
- package/dist/_shared/session-router.d.ts +104 -0
- package/dist/_shared/session-router.d.ts.map +1 -0
- package/dist/_shared/session-router.js +165 -0
- package/dist/_shared/w7-frame.d.ts +93 -0
- package/dist/_shared/w7-frame.d.ts.map +1 -0
- package/dist/_shared/w7-frame.js +402 -0
- package/dist/auth/index.d.ts +16 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/middleware.d.ts +85 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +150 -0
- package/dist/auth/token.d.ts +96 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +226 -0
- package/dist/auth/types.d.ts +141 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +114 -0
- package/dist/bindings/d1.d.ts +102 -0
- package/dist/bindings/d1.d.ts.map +1 -0
- package/dist/bindings/d1.js +549 -0
- package/dist/bindings/kv.d.ts +82 -0
- package/dist/bindings/kv.d.ts.map +1 -0
- package/dist/bindings/kv.js +290 -0
- package/dist/bindings/r2.d.ts +137 -0
- package/dist/bindings/r2.d.ts.map +1 -0
- package/dist/bindings/r2.js +379 -0
- package/dist/cirrus-npm-cjs.generated.d.ts +17 -0
- package/dist/cirrus-npm-cjs.generated.d.ts.map +1 -0
- package/dist/cirrus-npm-cjs.generated.js +41 -0
- package/dist/cirrus-plugin-react.generated.d.ts +34 -0
- package/dist/cirrus-plugin-react.generated.d.ts.map +1 -0
- package/dist/cirrus-plugin-react.generated.js +33 -0
- package/dist/constants.d.ts +34 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +116 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts +41 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -0
- package/dist/esbuild-wasm-bundle.generated.js +40 -0
- package/dist/facets/cirrus-real.d.ts +147 -0
- package/dist/facets/cirrus-real.d.ts.map +1 -0
- package/dist/facets/cirrus-real.js +981 -0
- package/dist/facets/inner-do-registry.d.ts +41 -0
- package/dist/facets/inner-do-registry.d.ts.map +1 -0
- package/dist/facets/inner-do-registry.js +51 -0
- package/dist/facets/manager.d.ts +314 -0
- package/dist/facets/manager.d.ts.map +1 -0
- package/dist/facets/manager.js +2681 -0
- package/dist/facets/process.d.ts +318 -0
- package/dist/facets/process.d.ts.map +1 -0
- package/dist/facets/process.js +567 -0
- package/dist/facets/real-vite-fs-shim.d.ts +151 -0
- package/dist/facets/real-vite-fs-shim.d.ts.map +1 -0
- package/dist/facets/real-vite-fs-shim.js +1279 -0
- package/dist/facets/real-vite-hmr.d.ts +142 -0
- package/dist/facets/real-vite-hmr.d.ts.map +1 -0
- package/dist/facets/real-vite-hmr.js +476 -0
- package/dist/facets/vite-dev-server.d.ts +293 -0
- package/dist/facets/vite-dev-server.d.ts.map +1 -0
- package/dist/facets/vite-dev-server.js +2580 -0
- package/dist/facets/wasm-swap-registry.d.ts +261 -0
- package/dist/facets/wasm-swap-registry.d.ts.map +1 -0
- package/dist/facets/wasm-swap-registry.js +551 -0
- package/dist/facets/ws-terminal.d.ts +107 -0
- package/dist/facets/ws-terminal.d.ts.map +1 -0
- package/dist/facets/ws-terminal.js +207 -0
- package/dist/git/commands.d.ts +13 -0
- package/dist/git/commands.d.ts.map +1 -0
- package/dist/git/commands.js +633 -0
- package/dist/git/network-facet.d.ts +61 -0
- package/dist/git/network-facet.d.ts.map +1 -0
- package/dist/git/network-facet.js +700 -0
- package/dist/git-bundle.generated.d.ts +16 -0
- package/dist/git-bundle.generated.d.ts.map +1 -0
- package/dist/git-bundle.generated.js +15 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/loaders/child-process/spawn-facet.d.ts +90 -0
- package/dist/loaders/child-process/spawn-facet.d.ts.map +1 -0
- package/dist/loaders/child-process/spawn-facet.js +103 -0
- package/dist/loaders/child-process/spawn-pool.d.ts +110 -0
- package/dist/loaders/child-process/spawn-pool.d.ts.map +1 -0
- package/dist/loaders/child-process/spawn-pool.js +161 -0
- package/dist/loaders/fanout-pool.d.ts +195 -0
- package/dist/loaders/fanout-pool.d.ts.map +1 -0
- package/dist/loaders/fanout-pool.js +326 -0
- package/dist/loaders/generated-workers.d.ts +26 -0
- package/dist/loaders/generated-workers.d.ts.map +1 -0
- package/dist/loaders/generated-workers.js +25 -0
- package/dist/loaders/index.d.ts +15 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +13 -0
- package/dist/loaders/loader-pool.d.ts +273 -0
- package/dist/loaders/loader-pool.d.ts.map +1 -0
- package/dist/loaders/loader-pool.js +624 -0
- package/dist/loaders/npm-resolve-preamble.d.ts +34 -0
- package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -0
- package/dist/loaders/npm-resolve-preamble.js +237 -0
- package/dist/loaders/pre-bundle-preamble.d.ts +41 -0
- package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -0
- package/dist/loaders/pre-bundle-preamble.js +114 -0
- package/dist/loaders/vendor/codegen.d.ts +24 -0
- package/dist/loaders/vendor/codegen.d.ts.map +1 -0
- package/dist/loaders/vendor/codegen.js +44 -0
- package/dist/loaders/vendor/errors.d.ts +24 -0
- package/dist/loaders/vendor/errors.d.ts.map +1 -0
- package/dist/loaders/vendor/errors.js +46 -0
- package/dist/loaders/vendor/index.d.ts +16 -0
- package/dist/loaders/vendor/index.d.ts.map +1 -0
- package/dist/loaders/vendor/index.js +11 -0
- package/dist/loaders/vendor/pool.d.ts +88 -0
- package/dist/loaders/vendor/pool.d.ts.map +1 -0
- package/dist/loaders/vendor/pool.js +353 -0
- package/dist/loaders/vendor/primitives.d.ts +11 -0
- package/dist/loaders/vendor/primitives.d.ts.map +1 -0
- package/dist/loaders/vendor/primitives.js +33 -0
- package/dist/loaders/vendor/serialize.d.ts +3 -0
- package/dist/loaders/vendor/serialize.d.ts.map +1 -0
- package/dist/loaders/vendor/serialize.js +25 -0
- package/dist/loaders/vendor/types.d.ts +60 -0
- package/dist/loaders/vendor/types.d.ts.map +1 -0
- package/dist/loaders/vendor/types.js +4 -0
- package/dist/npm/cache.d.ts +136 -0
- package/dist/npm/cache.d.ts.map +1 -0
- package/dist/npm/cache.js +429 -0
- package/dist/npm/install-batch-facet.d.ts +129 -0
- package/dist/npm/install-batch-facet.d.ts.map +1 -0
- package/dist/npm/install-batch-facet.js +598 -0
- package/dist/npm/install-facet.d.ts +29 -0
- package/dist/npm/install-facet.d.ts.map +1 -0
- package/dist/npm/install-facet.js +9 -0
- package/dist/npm/installer.d.ts +239 -0
- package/dist/npm/installer.d.ts.map +1 -0
- package/dist/npm/installer.js +2022 -0
- package/dist/npm/npx-install.d.ts +74 -0
- package/dist/npm/npx-install.d.ts.map +1 -0
- package/dist/npm/npx-install.js +302 -0
- package/dist/npm/pre-bundle-facet.d.ts +168 -0
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -0
- package/dist/npm/pre-bundle-facet.js +653 -0
- package/dist/npm/r2-cache.d.ts +286 -0
- package/dist/npm/r2-cache.d.ts.map +1 -0
- package/dist/npm/r2-cache.js +506 -0
- package/dist/npm/resolve-facet.d.ts +202 -0
- package/dist/npm/resolve-facet.d.ts.map +1 -0
- package/dist/npm/resolve-facet.js +833 -0
- package/dist/npm/resolve-one-facet.d.ts +204 -0
- package/dist/npm/resolve-one-facet.d.ts.map +1 -0
- package/dist/npm/resolve-one-facet.js +437 -0
- package/dist/npm/resolver.d.ts +109 -0
- package/dist/npm/resolver.d.ts.map +1 -0
- package/dist/npm/resolver.js +899 -0
- package/dist/npm/tarball-stream.d.ts +85 -0
- package/dist/npm/tarball-stream.d.ts.map +1 -0
- package/dist/npm/tarball-stream.js +205 -0
- package/dist/npm/tarball.d.ts +51 -0
- package/dist/npm/tarball.d.ts.map +1 -0
- package/dist/npm/tarball.js +185 -0
- package/dist/observability/diag-counters.d.ts +292 -0
- package/dist/observability/diag-counters.d.ts.map +1 -0
- package/dist/observability/diag-counters.js +302 -0
- package/dist/observability/heap-estimate.d.ts +166 -0
- package/dist/observability/heap-estimate.d.ts.map +1 -0
- package/dist/observability/heap-estimate.js +192 -0
- package/dist/observability/heavy-alloc-coord.d.ts +95 -0
- package/dist/observability/heavy-alloc-coord.d.ts.map +1 -0
- package/dist/observability/heavy-alloc-coord.js +149 -0
- package/dist/observability/oom-classify.d.ts +56 -0
- package/dist/observability/oom-classify.d.ts.map +1 -0
- package/dist/observability/oom-classify.js +118 -0
- package/dist/observability/oom-discriminator.d.ts +192 -0
- package/dist/observability/oom-discriminator.d.ts.map +1 -0
- package/dist/observability/oom-discriminator.js +233 -0
- package/dist/real-vite-bundle.generated.d.ts +46 -0
- package/dist/real-vite-bundle.generated.d.ts.map +1 -0
- package/dist/real-vite-bundle.generated.js +53 -0
- package/dist/replica/routing.d.ts +171 -0
- package/dist/replica/routing.d.ts.map +1 -0
- package/dist/replica/routing.js +288 -0
- package/dist/replica/suspension.d.ts +36 -0
- package/dist/replica/suspension.d.ts.map +1 -0
- package/dist/replica/suspension.js +49 -0
- package/dist/router/index.d.ts +156 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +220 -0
- package/dist/runtime/assets-loader.d.ts +71 -0
- package/dist/runtime/assets-loader.d.ts.map +1 -0
- package/dist/runtime/assets-loader.js +128 -0
- package/dist/runtime/barrel-detect.d.ts +46 -0
- package/dist/runtime/barrel-detect.d.ts.map +1 -0
- package/dist/runtime/barrel-detect.js +73 -0
- package/dist/runtime/barrel-synthesizer.d.ts +181 -0
- package/dist/runtime/barrel-synthesizer.d.ts.map +1 -0
- package/dist/runtime/barrel-synthesizer.js +541 -0
- package/dist/runtime/bun-repl.d.ts +46 -0
- package/dist/runtime/bun-repl.d.ts.map +1 -0
- package/dist/runtime/bun-repl.js +326 -0
- package/dist/runtime/bun-runner.d.ts +66 -0
- package/dist/runtime/bun-runner.d.ts.map +1 -0
- package/dist/runtime/bun-runner.js +219 -0
- package/dist/runtime/clang-runner.d.ts +38 -0
- package/dist/runtime/clang-runner.d.ts.map +1 -0
- package/dist/runtime/clang-runner.js +1033 -0
- package/dist/runtime/comment-strip.d.ts +37 -0
- package/dist/runtime/comment-strip.d.ts.map +1 -0
- package/dist/runtime/comment-strip.js +74 -0
- package/dist/runtime/esbuild-service.d.ts +201 -0
- package/dist/runtime/esbuild-service.d.ts.map +1 -0
- package/dist/runtime/esbuild-service.js +1444 -0
- package/dist/runtime/esbuild-wasm-bytes.d.ts +87 -0
- package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -0
- package/dist/runtime/esbuild-wasm-bytes.js +131 -0
- package/dist/runtime/framework-detect.d.ts +71 -0
- package/dist/runtime/framework-detect.d.ts.map +1 -0
- package/dist/runtime/framework-detect.js +178 -0
- package/dist/runtime/long-running-handle.d.ts +133 -0
- package/dist/runtime/long-running-handle.d.ts.map +1 -0
- package/dist/runtime/long-running-handle.js +192 -0
- package/dist/runtime/node-repl.d.ts +36 -0
- package/dist/runtime/node-repl.d.ts.map +1 -0
- package/dist/runtime/node-repl.js +293 -0
- package/dist/runtime/node-runner.d.ts +111 -0
- package/dist/runtime/node-runner.d.ts.map +1 -0
- package/dist/runtime/node-runner.js +194 -0
- package/dist/runtime/node-shims.d.ts +24 -0
- package/dist/runtime/node-shims.d.ts.map +1 -0
- package/dist/runtime/node-shims.js +3019 -0
- package/dist/runtime/package-manager.d.ts +118 -0
- package/dist/runtime/package-manager.d.ts.map +1 -0
- package/dist/runtime/package-manager.js +420 -0
- package/dist/runtime/port-registry.d.ts +80 -0
- package/dist/runtime/port-registry.d.ts.map +1 -0
- package/dist/runtime/port-registry.js +166 -0
- package/dist/runtime/process-logs-api.d.ts +102 -0
- package/dist/runtime/process-logs-api.d.ts.map +1 -0
- package/dist/runtime/process-logs-api.js +253 -0
- package/dist/runtime/process-logs.d.ts +311 -0
- package/dist/runtime/process-logs.d.ts.map +1 -0
- package/dist/runtime/process-logs.js +656 -0
- package/dist/runtime/process-table.d.ts +65 -0
- package/dist/runtime/process-table.d.ts.map +1 -0
- package/dist/runtime/process-table.js +107 -0
- package/dist/runtime/project-detect.d.ts +21 -0
- package/dist/runtime/project-detect.d.ts.map +1 -0
- package/dist/runtime/project-detect.js +46 -0
- package/dist/runtime/python-repl.d.ts +66 -0
- package/dist/runtime/python-repl.d.ts.map +1 -0
- package/dist/runtime/python-repl.js +563 -0
- package/dist/runtime/python-runner.d.ts +50 -0
- package/dist/runtime/python-runner.d.ts.map +1 -0
- package/dist/runtime/python-runner.js +870 -0
- package/dist/runtime/repl-session.d.ts +160 -0
- package/dist/runtime/repl-session.d.ts.map +1 -0
- package/dist/runtime/repl-session.js +393 -0
- package/dist/runtime/require-resolver.d.ts +52 -0
- package/dist/runtime/require-resolver.d.ts.map +1 -0
- package/dist/runtime/require-resolver.js +690 -0
- package/dist/runtime/router-basename.d.ts +36 -0
- package/dist/runtime/router-basename.d.ts.map +1 -0
- package/dist/runtime/router-basename.js +310 -0
- package/dist/runtime/ruby-repl.d.ts +43 -0
- package/dist/runtime/ruby-repl.d.ts.map +1 -0
- package/dist/runtime/ruby-repl.js +229 -0
- package/dist/runtime/ruby-runner.d.ts +62 -0
- package/dist/runtime/ruby-runner.d.ts.map +1 -0
- package/dist/runtime/ruby-runner.js +737 -0
- package/dist/runtime/runtime-catalog.d.ts +99 -0
- package/dist/runtime/runtime-catalog.d.ts.map +1 -0
- package/dist/runtime/runtime-catalog.js +183 -0
- package/dist/runtime/runtime-registry.d.ts +136 -0
- package/dist/runtime/runtime-registry.d.ts.map +1 -0
- package/dist/runtime/runtime-registry.js +318 -0
- package/dist/runtime/streams.d.ts +13 -0
- package/dist/runtime/streams.d.ts.map +1 -0
- package/dist/runtime/streams.js +402 -0
- package/dist/runtime/wasi-instance.d.ts +190 -0
- package/dist/runtime/wasi-instance.d.ts.map +1 -0
- package/dist/runtime/wasi-instance.js +2044 -0
- package/dist/runtime/wasm-runner.d.ts +117 -0
- package/dist/runtime/wasm-runner.d.ts.map +1 -0
- package/dist/runtime/wasm-runner.js +705 -0
- package/dist/session/bindings.d.ts +168 -0
- package/dist/session/bindings.d.ts.map +1 -0
- package/dist/session/bindings.js +524 -0
- package/dist/session/ctx-exports.d.ts +16 -0
- package/dist/session/ctx-exports.d.ts.map +1 -0
- package/dist/session/ctx-exports.js +22 -0
- package/dist/session/diag.d.ts +62 -0
- package/dist/session/diag.d.ts.map +1 -0
- package/dist/session/diag.js +118 -0
- package/dist/session/fs-watch.d.ts +132 -0
- package/dist/session/fs-watch.d.ts.map +1 -0
- package/dist/session/fs-watch.js +255 -0
- package/dist/session/helpers.d.ts +150 -0
- package/dist/session/helpers.d.ts.map +1 -0
- package/dist/session/helpers.js +472 -0
- package/dist/session/hibernation.d.ts +145 -0
- package/dist/session/hibernation.d.ts.map +1 -0
- package/dist/session/hibernation.js +385 -0
- package/dist/session/init-phases.d.ts +87 -0
- package/dist/session/init-phases.d.ts.map +1 -0
- package/dist/session/init-phases.js +137 -0
- package/dist/session/init.d.ts +46 -0
- package/dist/session/init.d.ts.map +1 -0
- package/dist/session/init.js +3579 -0
- package/dist/session/keys.d.ts +56 -0
- package/dist/session/keys.d.ts.map +1 -0
- package/dist/session/keys.js +55 -0
- package/dist/session/nimbus-session.d.ts +434 -0
- package/dist/session/nimbus-session.d.ts.map +1 -0
- package/dist/session/nimbus-session.js +1084 -0
- package/dist/session/programmatic.d.ts +105 -0
- package/dist/session/programmatic.d.ts.map +1 -0
- package/dist/session/programmatic.js +326 -0
- package/dist/session/replica-routes.d.ts +68 -0
- package/dist/session/replica-routes.d.ts.map +1 -0
- package/dist/session/replica-routes.js +77 -0
- package/dist/session/routes.d.ts +29 -0
- package/dist/session/routes.d.ts.map +1 -0
- package/dist/session/routes.js +1331 -0
- package/dist/session/rpc.d.ts +323 -0
- package/dist/session/rpc.d.ts.map +1 -0
- package/dist/session/rpc.js +808 -0
- package/dist/session/state-store.d.ts +210 -0
- package/dist/session/state-store.d.ts.map +1 -0
- package/dist/session/state-store.js +459 -0
- package/dist/session/supervisor-rpc.d.ts +269 -0
- package/dist/session/supervisor-rpc.d.ts.map +1 -0
- package/dist/session/supervisor-rpc.js +437 -0
- package/dist/session/ws-hibernation-config.d.ts +64 -0
- package/dist/session/ws-hibernation-config.d.ts.map +1 -0
- package/dist/session/ws-hibernation-config.js +89 -0
- package/dist/session/ws.d.ts +95 -0
- package/dist/session/ws.d.ts.map +1 -0
- package/dist/session/ws.js +395 -0
- package/dist/shell/features.d.ts +410 -0
- package/dist/shell/features.d.ts.map +1 -0
- package/dist/shell/features.js +1885 -0
- package/dist/shell/unix-commands.d.ts +15 -0
- package/dist/shell/unix-commands.d.ts.map +1 -0
- package/dist/shell/unix-commands.js +3703 -0
- package/dist/stubs/lifo-ui.d.ts +10 -0
- package/dist/stubs/lifo-ui.d.ts.map +1 -0
- package/dist/stubs/lifo-ui.js +1 -0
- package/dist/tailwind-play.generated.d.ts +19 -0
- package/dist/tailwind-play.generated.d.ts.map +1 -0
- package/dist/tailwind-play.generated.js +18 -0
- package/dist/vfs/dev-provider.d.ts +64 -0
- package/dist/vfs/dev-provider.d.ts.map +1 -0
- package/dist/vfs/dev-provider.js +191 -0
- package/dist/vfs/events.d.ts +51 -0
- package/dist/vfs/events.d.ts.map +1 -0
- package/dist/vfs/events.js +127 -0
- package/dist/vfs/path.d.ts +30 -0
- package/dist/vfs/path.d.ts.map +1 -0
- package/dist/vfs/path.js +41 -0
- package/dist/vfs/seed-project.d.ts +62 -0
- package/dist/vfs/seed-project.d.ts.map +1 -0
- package/dist/vfs/seed-project.js +1045 -0
- package/dist/vfs/sqlite-vfs.d.ts +435 -0
- package/dist/vfs/sqlite-vfs.d.ts.map +1 -0
- package/dist/vfs/sqlite-vfs.js +1670 -0
- package/dist/vfs/symlink-registry.d.ts +64 -0
- package/dist/vfs/symlink-registry.d.ts.map +1 -0
- package/dist/vfs/symlink-registry.js +137 -0
- package/dist/wrangler/nimbus-wrangler.d.ts +157 -0
- package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -0
- package/dist/wrangler/nimbus-wrangler.js +931 -0
- package/package.json +77 -0
- package/public/_assets/cirrus-plugin-react.bundle.js +70740 -0
- package/public/_assets/esbuild-0.24.2.wasm +0 -0
- package/public/_assets/real-vite-bundle.js +101478 -0
- package/public/_assets/rollup.wasm +0 -0
- package/public/favicon.svg +8 -0
- package/public/index.html +565 -0
- package/public/s/index.html +2379 -0
- package/scripts/bundle-esbuild-wasm.mjs +244 -0
- package/scripts/bundle-facet-workers.mjs +137 -0
- package/scripts/bundle-git.mjs +118 -0
- package/scripts/bundle-npm-cjs.mjs +363 -0
- package/scripts/bundle-plugin-react.mjs +480 -0
- package/scripts/bundle-real-vite.mjs +959 -0
- package/scripts/bundle-runtime.mjs +600 -0
- package/scripts/bundle-tailwind-play.mjs +130 -0
- package/scripts/patch-lifo-ui.mjs +131 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolve-one-facet.ts — F-2 frontier-coordinator per-package task body.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists
|
|
5
|
+
* ───────────────
|
|
6
|
+
* F-2 (cleanup-not-done wave) replaces the single resolve-facet that
|
|
7
|
+
* runs the WHOLE BFS in one isolate with a frontier-coordinator at the
|
|
8
|
+
* supervisor that submits each layer of N packages as N independent
|
|
9
|
+
* fanout tasks. This file is the per-task body — one packument fetch +
|
|
10
|
+
* version pick + edge-extraction.
|
|
11
|
+
*
|
|
12
|
+
* Each task runs inside a Worker Loader isolate (NimbusFanoutPool routes
|
|
13
|
+
* automatically: <5 = in-DO, ≥5 = peer-DO). The isolate is short-lived;
|
|
14
|
+
* task body has its own ~128 MiB envelope. Parallelism = layer width
|
|
15
|
+
* (capped at 32 by NimbusFanoutPool's MAX_PEER_FANOUT).
|
|
16
|
+
*
|
|
17
|
+
* Stability invariants (cloudflare-parallel serialises via fn.toString)
|
|
18
|
+
* ───────────────────────────────────────────────────────────────────
|
|
19
|
+
* - No `this` references.
|
|
20
|
+
* - No closure capture other than args + preamble names.
|
|
21
|
+
* - All helpers (semver, exports, skip-list, registry decisions) are
|
|
22
|
+
* accessed via bare identifiers from the preamble:
|
|
23
|
+
*
|
|
24
|
+
* SHOULD_SKIP_PACKAGE(name, frameworkAware) → boolean
|
|
25
|
+
* SHOULD_SWAP(name) → { from, to } | null
|
|
26
|
+
* SHOULD_WARN_SKIP_TRANSITIVE(name) → { from, reason } | null
|
|
27
|
+
* SHOULD_REJECT_FAIL(name) → { from, reason, suggest? } | null
|
|
28
|
+
* PARSE_SEMVER(v) → [maj, min, patch] | null
|
|
29
|
+
* COMPARE_SEMVER(a, b) → number
|
|
30
|
+
* RESOLVE_VERSION(versions, range) → string | null
|
|
31
|
+
*
|
|
32
|
+
* What the task does NOT do (supervisor responsibility)
|
|
33
|
+
* ─────────────────────────────────────────────────────
|
|
34
|
+
* - Edge extraction: the supervisor pulls deps/peerDeps/optionalDeps
|
|
35
|
+
* out of the returned `pkg` and decides what goes in layer N+1.
|
|
36
|
+
* - Cycle detection: the supervisor maintains the `seen` set across
|
|
37
|
+
* layers. The task only sees one (name, range) per call.
|
|
38
|
+
* - X.5-drizzle best-effort tagging: the supervisor maintains the
|
|
39
|
+
* bestEffortNames set; the task returns the `pkg` raw and the
|
|
40
|
+
* supervisor decides whether a downstream reject silent-skips or
|
|
41
|
+
* propagates.
|
|
42
|
+
* - X.5-F top-level handling: the supervisor maintains topLevelNames.
|
|
43
|
+
* `topLevel` is passed in per task so SKIP_PACKAGES bypass works.
|
|
44
|
+
*
|
|
45
|
+
* What the task DOES do
|
|
46
|
+
* ─────────────────────
|
|
47
|
+
* 1. Apply SKIP_PACKAGES filter (unless `topLevel`).
|
|
48
|
+
* 2. Apply W6 swap / warn-skip / reject-fail registry policy.
|
|
49
|
+
* 3. Try in-task cache from `cachedHit` (one entry shipped from
|
|
50
|
+
* supervisor's NpmCache).
|
|
51
|
+
* 4. R2 packument cache race (250 ms timeout) via env.SUPERVISOR
|
|
52
|
+
* bindings.
|
|
53
|
+
* 5. Fetch packument with retry/backoff if no cache hit.
|
|
54
|
+
* 6. Pick version via preamble's RESOLVE_VERSION.
|
|
55
|
+
* 7. Materialise ResolvedPackage shape (versionToResolved-style).
|
|
56
|
+
* 8. Stage cache writes for this version + top-5 recent versions
|
|
57
|
+
* (mirrors resolve-facet.ts:580). Returns them in `cacheWrites`
|
|
58
|
+
* so the supervisor can flush in one batched RPC.
|
|
59
|
+
* 9. Return {pkg, deps, peerDeps, optionalDeps, allPeerDependencies,
|
|
60
|
+
* cacheWrites, messages, events, packumentBytesDecoded,
|
|
61
|
+
* packumentSource, error?}.
|
|
62
|
+
*/
|
|
63
|
+
import type { ResolvedPackage } from './resolver.js';
|
|
64
|
+
import type { FacetCachedEntry, FacetRegistryEvent } from './resolve-facet.js';
|
|
65
|
+
/**
|
|
66
|
+
* Argument shape: ONE package's resolution work.
|
|
67
|
+
*
|
|
68
|
+
* cachedHit (optional): a FacetCachedEntry the supervisor already has
|
|
69
|
+
* for this name. The task uses it to short-circuit the fetch when
|
|
70
|
+
* it satisfies the requested range. If null/missing, the task fetches
|
|
71
|
+
* the packument directly (or hits the R2 packument cache via the
|
|
72
|
+
* env binding).
|
|
73
|
+
*/
|
|
74
|
+
export interface ResolveOneSpec {
|
|
75
|
+
name: string;
|
|
76
|
+
range: string;
|
|
77
|
+
/**
|
|
78
|
+
* Pre-shipped cache entries for THIS name only. Bounded to ≤16 (top
|
|
79
|
+
* versions) so the per-task RPC payload stays small. The task picks
|
|
80
|
+
* the best version that satisfies range.
|
|
81
|
+
*/
|
|
82
|
+
cachedEntries: FacetCachedEntry[];
|
|
83
|
+
/**
|
|
84
|
+
* X.5-F R1: when true, this package was either user-typed OR a
|
|
85
|
+
* required peer-dep enqueued by the supervisor. Bypasses
|
|
86
|
+
* SKIP_PACKAGES. The supervisor decides the flag at enqueue time.
|
|
87
|
+
*/
|
|
88
|
+
topLevel: boolean;
|
|
89
|
+
/** Same X.5-G G1 semantics as resolve-facet.ts. */
|
|
90
|
+
isOptional: boolean;
|
|
91
|
+
/** W11 framework-aware skip. */
|
|
92
|
+
frameworkAware: boolean;
|
|
93
|
+
/** Per-fetch timeout (ms). Default 15_000. */
|
|
94
|
+
fetchTimeoutMs: number;
|
|
95
|
+
/** Retries for transient failures. Default 3. */
|
|
96
|
+
retries: number;
|
|
97
|
+
}
|
|
98
|
+
export interface ResolveOneResult {
|
|
99
|
+
/** Resolved package, or null if a registry policy filtered it out. */
|
|
100
|
+
pkg: ResolvedPackage | null;
|
|
101
|
+
/**
|
|
102
|
+
* Edge sets that the supervisor uses to build layer N+1.
|
|
103
|
+
* Empty when pkg === null.
|
|
104
|
+
*/
|
|
105
|
+
deps: Record<string, string>;
|
|
106
|
+
peerDeps: Record<string, string>;
|
|
107
|
+
optionalDeps: Record<string, string>;
|
|
108
|
+
allPeerDependencies: Record<string, string>;
|
|
109
|
+
/**
|
|
110
|
+
* Cache writes the task is asking the supervisor to flush. Includes
|
|
111
|
+
* the resolved version + up to 5 recent versions seen in the
|
|
112
|
+
* packument (mirrors resolve-facet.ts:580). Empty for cache-hit-
|
|
113
|
+
* only resolutions.
|
|
114
|
+
*/
|
|
115
|
+
cacheWrites: any[];
|
|
116
|
+
/** [npm] log lines, forwarded by the supervisor. */
|
|
117
|
+
messages: string[];
|
|
118
|
+
/** W6.5 telemetry events to emitRegistryEvent. */
|
|
119
|
+
events: FacetRegistryEvent[];
|
|
120
|
+
/**
|
|
121
|
+
* Diagnostic: how many bytes the task fetched/decoded. Folded into
|
|
122
|
+
* supervisor's facetCounters for parity with resolve-facet.ts.
|
|
123
|
+
*/
|
|
124
|
+
packumentBytesDecoded: number;
|
|
125
|
+
packumentSource: 'cache-hit' | 'r2-cache' | 'network' | 'skipped';
|
|
126
|
+
/**
|
|
127
|
+
* cache-obs-2: per-tier cache events captured during this resolve.
|
|
128
|
+
*
|
|
129
|
+
* Each entry records a single L2/L3/L4 hit-or-miss observed when
|
|
130
|
+
* fetching the packument. L2/L3 events flow from the supervisor RPC
|
|
131
|
+
* return (getCachedPackument.events). L4 events are pushed when the
|
|
132
|
+
* resolver itself fetches from registry.npmjs.org.
|
|
133
|
+
*
|
|
134
|
+
* Folded into the DO-side cache-stats singleton by installer.ts via
|
|
135
|
+
* recordCacheStatEvents on the resolveTree-via-facet return path
|
|
136
|
+
* (same pattern as recordR2RaceCounters).
|
|
137
|
+
*
|
|
138
|
+
* Optional in the type to keep the wire compatible with older
|
|
139
|
+
* resolver-facet bundles; default to [] when consumed supervisor-side.
|
|
140
|
+
*/
|
|
141
|
+
cacheStatEvents?: Array<{
|
|
142
|
+
kind: 'hit';
|
|
143
|
+
tier: 'L2' | 'L3' | 'L4';
|
|
144
|
+
cacheKind: 'packument';
|
|
145
|
+
bytes: number;
|
|
146
|
+
} | {
|
|
147
|
+
kind: 'miss';
|
|
148
|
+
tier: 'L2' | 'L3' | 'L4';
|
|
149
|
+
cacheKind: 'packument';
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* W6 reject. The supervisor inspects this and either propagates
|
|
153
|
+
* (regular path) or silent-skips (X.5-drizzle best-effort path) —
|
|
154
|
+
* the task doesn't see bestEffortNames.
|
|
155
|
+
*/
|
|
156
|
+
error?: {
|
|
157
|
+
type: 'w6-reject';
|
|
158
|
+
from: string;
|
|
159
|
+
reason: string;
|
|
160
|
+
suggest?: string;
|
|
161
|
+
} | {
|
|
162
|
+
type: 'fetch-exhausted';
|
|
163
|
+
message: string;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Per-package fanout task body. Serialised via fn.toString() and
|
|
168
|
+
* dispatched by NimbusFanoutPool.submitMany — see installer.ts
|
|
169
|
+
* resolveTreeViaFanout.
|
|
170
|
+
*
|
|
171
|
+
* Function signature MUST be `(spec, env)` so NimbusFanoutPool's
|
|
172
|
+
* submitMany invocation `fn(item, env)` lines up.
|
|
173
|
+
*
|
|
174
|
+
* `env` is the loader-isolate env supplied by NimbusFanoutPool.
|
|
175
|
+
* `env.SUPERVISOR` is the supervisor-rpc binding (putRegistryEntries,
|
|
176
|
+
* getCachedPackument, putCachedPackument).
|
|
177
|
+
*/
|
|
178
|
+
export declare const resolveOnePackumentInFacet: (spec: ResolveOneSpec, env: {
|
|
179
|
+
SUPERVISOR: {
|
|
180
|
+
getCachedPackument?: (name: string) => Promise<{
|
|
181
|
+
json: string;
|
|
182
|
+
ageMs: number;
|
|
183
|
+
expired: boolean;
|
|
184
|
+
} | null | {
|
|
185
|
+
cached: {
|
|
186
|
+
json: string;
|
|
187
|
+
ageMs: number;
|
|
188
|
+
expired: boolean;
|
|
189
|
+
} | null;
|
|
190
|
+
events: Array<{
|
|
191
|
+
kind: "hit";
|
|
192
|
+
tier: string;
|
|
193
|
+
cacheKind: string;
|
|
194
|
+
bytes: number;
|
|
195
|
+
} | {
|
|
196
|
+
kind: "miss";
|
|
197
|
+
tier: string;
|
|
198
|
+
cacheKind: string;
|
|
199
|
+
}>;
|
|
200
|
+
}>;
|
|
201
|
+
putCachedPackument?: (name: string, json: string) => Promise<boolean>;
|
|
202
|
+
};
|
|
203
|
+
}) => Promise<ResolveOneResult>;
|
|
204
|
+
//# sourceMappingURL=resolve-one-facet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-one-facet.d.ts","sourceRoot":"","sources":["../../src/npm/resolve-one-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAClE;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,KAAK,CACnB;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAChF;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,WAAW,CAAA;KAAE,CACrE,CAAC;IACF;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9H;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,GACrC,MAAM,cAAc,EACpB,KAAK;IACH,UAAU,EAAE;QAIV,kBAAkB,CAAC,EAAE,CACnB,IAAI,EAAE,MAAM,KACT,OAAO,CACR;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,GACjD,IAAI,GACJ;YACE,MAAM,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,OAAO,CAAA;aAAE,GAAG,IAAI,CAAC;YACjE,MAAM,EAAE,KAAK,CACT;gBAAE,IAAI,EAAE,KAAK,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAC/D;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CACpD,CAAC;SACH,CACJ,CAAC;QACF,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KACvE,CAAC;CACH,KACA,OAAO,CAAC,gBAAgB,CAmV1B,CAAC"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolve-one-facet.ts — F-2 frontier-coordinator per-package task body.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists
|
|
5
|
+
* ───────────────
|
|
6
|
+
* F-2 (cleanup-not-done wave) replaces the single resolve-facet that
|
|
7
|
+
* runs the WHOLE BFS in one isolate with a frontier-coordinator at the
|
|
8
|
+
* supervisor that submits each layer of N packages as N independent
|
|
9
|
+
* fanout tasks. This file is the per-task body — one packument fetch +
|
|
10
|
+
* version pick + edge-extraction.
|
|
11
|
+
*
|
|
12
|
+
* Each task runs inside a Worker Loader isolate (NimbusFanoutPool routes
|
|
13
|
+
* automatically: <5 = in-DO, ≥5 = peer-DO). The isolate is short-lived;
|
|
14
|
+
* task body has its own ~128 MiB envelope. Parallelism = layer width
|
|
15
|
+
* (capped at 32 by NimbusFanoutPool's MAX_PEER_FANOUT).
|
|
16
|
+
*
|
|
17
|
+
* Stability invariants (cloudflare-parallel serialises via fn.toString)
|
|
18
|
+
* ───────────────────────────────────────────────────────────────────
|
|
19
|
+
* - No `this` references.
|
|
20
|
+
* - No closure capture other than args + preamble names.
|
|
21
|
+
* - All helpers (semver, exports, skip-list, registry decisions) are
|
|
22
|
+
* accessed via bare identifiers from the preamble:
|
|
23
|
+
*
|
|
24
|
+
* SHOULD_SKIP_PACKAGE(name, frameworkAware) → boolean
|
|
25
|
+
* SHOULD_SWAP(name) → { from, to } | null
|
|
26
|
+
* SHOULD_WARN_SKIP_TRANSITIVE(name) → { from, reason } | null
|
|
27
|
+
* SHOULD_REJECT_FAIL(name) → { from, reason, suggest? } | null
|
|
28
|
+
* PARSE_SEMVER(v) → [maj, min, patch] | null
|
|
29
|
+
* COMPARE_SEMVER(a, b) → number
|
|
30
|
+
* RESOLVE_VERSION(versions, range) → string | null
|
|
31
|
+
*
|
|
32
|
+
* What the task does NOT do (supervisor responsibility)
|
|
33
|
+
* ─────────────────────────────────────────────────────
|
|
34
|
+
* - Edge extraction: the supervisor pulls deps/peerDeps/optionalDeps
|
|
35
|
+
* out of the returned `pkg` and decides what goes in layer N+1.
|
|
36
|
+
* - Cycle detection: the supervisor maintains the `seen` set across
|
|
37
|
+
* layers. The task only sees one (name, range) per call.
|
|
38
|
+
* - X.5-drizzle best-effort tagging: the supervisor maintains the
|
|
39
|
+
* bestEffortNames set; the task returns the `pkg` raw and the
|
|
40
|
+
* supervisor decides whether a downstream reject silent-skips or
|
|
41
|
+
* propagates.
|
|
42
|
+
* - X.5-F top-level handling: the supervisor maintains topLevelNames.
|
|
43
|
+
* `topLevel` is passed in per task so SKIP_PACKAGES bypass works.
|
|
44
|
+
*
|
|
45
|
+
* What the task DOES do
|
|
46
|
+
* ─────────────────────
|
|
47
|
+
* 1. Apply SKIP_PACKAGES filter (unless `topLevel`).
|
|
48
|
+
* 2. Apply W6 swap / warn-skip / reject-fail registry policy.
|
|
49
|
+
* 3. Try in-task cache from `cachedHit` (one entry shipped from
|
|
50
|
+
* supervisor's NpmCache).
|
|
51
|
+
* 4. R2 packument cache race (250 ms timeout) via env.SUPERVISOR
|
|
52
|
+
* bindings.
|
|
53
|
+
* 5. Fetch packument with retry/backoff if no cache hit.
|
|
54
|
+
* 6. Pick version via preamble's RESOLVE_VERSION.
|
|
55
|
+
* 7. Materialise ResolvedPackage shape (versionToResolved-style).
|
|
56
|
+
* 8. Stage cache writes for this version + top-5 recent versions
|
|
57
|
+
* (mirrors resolve-facet.ts:580). Returns them in `cacheWrites`
|
|
58
|
+
* so the supervisor can flush in one batched RPC.
|
|
59
|
+
* 9. Return {pkg, deps, peerDeps, optionalDeps, allPeerDependencies,
|
|
60
|
+
* cacheWrites, messages, events, packumentBytesDecoded,
|
|
61
|
+
* packumentSource, error?}.
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* Per-package fanout task body. Serialised via fn.toString() and
|
|
65
|
+
* dispatched by NimbusFanoutPool.submitMany — see installer.ts
|
|
66
|
+
* resolveTreeViaFanout.
|
|
67
|
+
*
|
|
68
|
+
* Function signature MUST be `(spec, env)` so NimbusFanoutPool's
|
|
69
|
+
* submitMany invocation `fn(item, env)` lines up.
|
|
70
|
+
*
|
|
71
|
+
* `env` is the loader-isolate env supplied by NimbusFanoutPool.
|
|
72
|
+
* `env.SUPERVISOR` is the supervisor-rpc binding (putRegistryEntries,
|
|
73
|
+
* getCachedPackument, putCachedPackument).
|
|
74
|
+
*/
|
|
75
|
+
export const resolveOnePackumentInFacet = async function resolveOnePackumentInFacet(spec, env) {
|
|
76
|
+
const messages = [];
|
|
77
|
+
const events = [];
|
|
78
|
+
const cacheWrites = [];
|
|
79
|
+
// cache-obs-2: per-resolve cache events. Filled by the L2/L3 path
|
|
80
|
+
// (spliced from supervisor RPC return.events) and the L4 path
|
|
81
|
+
// (post-network-fetch). Threaded through `out()` into the result.
|
|
82
|
+
const cacheStatEvents = [];
|
|
83
|
+
const out = (pkg, bytes, source, error) => ({
|
|
84
|
+
pkg,
|
|
85
|
+
deps: pkg?.dependencies ?? {},
|
|
86
|
+
peerDeps: pkg?.peerDependencies ?? {},
|
|
87
|
+
optionalDeps: pkg?.optionalDependencies ?? {},
|
|
88
|
+
allPeerDependencies: pkg?.__allPeerDependencies ?? {},
|
|
89
|
+
cacheWrites,
|
|
90
|
+
messages,
|
|
91
|
+
events,
|
|
92
|
+
packumentBytesDecoded: bytes,
|
|
93
|
+
packumentSource: source,
|
|
94
|
+
cacheStatEvents,
|
|
95
|
+
error,
|
|
96
|
+
});
|
|
97
|
+
// 1. SKIP_PACKAGES gate.
|
|
98
|
+
// @ts-ignore — preamble.
|
|
99
|
+
if (!spec.topLevel && SHOULD_SKIP_PACKAGE(spec.name, !!spec.frameworkAware)) {
|
|
100
|
+
return out(null, 0, 'skipped');
|
|
101
|
+
}
|
|
102
|
+
// 2. W6 registry policy.
|
|
103
|
+
let effName = spec.name;
|
|
104
|
+
// @ts-ignore — preamble.
|
|
105
|
+
const __swap = SHOULD_SWAP(spec.name);
|
|
106
|
+
if (__swap) {
|
|
107
|
+
messages.push(`[npm] \x1b[33m[swap]\x1b[0m ${__swap.from} → ${__swap.to}`);
|
|
108
|
+
events.push({ type: 'swap', from: __swap.from, to: __swap.to, ctx: 'transitive' });
|
|
109
|
+
effName = __swap.to;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// @ts-ignore — preamble.
|
|
113
|
+
const __warn = SHOULD_WARN_SKIP_TRANSITIVE(spec.name);
|
|
114
|
+
if (__warn) {
|
|
115
|
+
messages.push(`[npm] \x1b[33m[skip]\x1b[0m ${__warn.from} — ${__warn.reason}`);
|
|
116
|
+
events.push({ type: 'transitive-skip', from: __warn.from, reason: __warn.reason });
|
|
117
|
+
return out(null, 0, 'skipped');
|
|
118
|
+
}
|
|
119
|
+
// @ts-ignore — preamble.
|
|
120
|
+
const __fail = SHOULD_REJECT_FAIL(spec.name);
|
|
121
|
+
if (__fail) {
|
|
122
|
+
events.push({
|
|
123
|
+
type: 'reject',
|
|
124
|
+
from: __fail.from,
|
|
125
|
+
reason: __fail.reason,
|
|
126
|
+
suggest: __fail.suggest,
|
|
127
|
+
ctx: 'transitive',
|
|
128
|
+
});
|
|
129
|
+
return out(null, 0, 'skipped', {
|
|
130
|
+
type: 'w6-reject',
|
|
131
|
+
from: __fail.from,
|
|
132
|
+
reason: __fail.reason,
|
|
133
|
+
suggest: __fail.suggest,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// 3. cachedHit fast-path.
|
|
138
|
+
const cached = (() => {
|
|
139
|
+
const entries = spec.cachedEntries || [];
|
|
140
|
+
if (entries.length === 0)
|
|
141
|
+
return null;
|
|
142
|
+
const cleanRange = (spec.range || '').replace(/^[~^>=<\s]+/, '');
|
|
143
|
+
if (/^\d+\.\d+\.\d+$/.test(cleanRange)) {
|
|
144
|
+
const exact = entries.find((e) => e.name === effName && e.version === cleanRange);
|
|
145
|
+
if (exact)
|
|
146
|
+
return exact;
|
|
147
|
+
}
|
|
148
|
+
const candidates = entries.filter((e) => e.name === effName);
|
|
149
|
+
if (candidates.length === 0)
|
|
150
|
+
return null;
|
|
151
|
+
const versions = candidates.map((e) => e.version);
|
|
152
|
+
// @ts-ignore — preamble.
|
|
153
|
+
const picked = RESOLVE_VERSION(versions, spec.range);
|
|
154
|
+
if (!picked)
|
|
155
|
+
return null;
|
|
156
|
+
return candidates.find((e) => e.version === picked) || null;
|
|
157
|
+
})();
|
|
158
|
+
if (cached) {
|
|
159
|
+
let deps = {}, peers = {}, exp = null, bin = {};
|
|
160
|
+
try {
|
|
161
|
+
deps = JSON.parse(cached.depsJson);
|
|
162
|
+
}
|
|
163
|
+
catch { }
|
|
164
|
+
try {
|
|
165
|
+
peers = cached.peerDepsJson ? JSON.parse(cached.peerDepsJson) : {};
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
try {
|
|
169
|
+
exp = JSON.parse(cached.exportsJson);
|
|
170
|
+
}
|
|
171
|
+
catch { }
|
|
172
|
+
try {
|
|
173
|
+
bin = JSON.parse(cached.binJson);
|
|
174
|
+
}
|
|
175
|
+
catch { }
|
|
176
|
+
const pkgFromCache = {
|
|
177
|
+
name: cached.name,
|
|
178
|
+
version: cached.version,
|
|
179
|
+
tarballUrl: cached.tarballUrl,
|
|
180
|
+
integrity: cached.integrity,
|
|
181
|
+
dependencies: deps,
|
|
182
|
+
peerDependencies: Object.keys(peers).length > 0 ? peers : undefined,
|
|
183
|
+
exports: exp,
|
|
184
|
+
main: cached.main,
|
|
185
|
+
module: cached.moduleField,
|
|
186
|
+
bin,
|
|
187
|
+
};
|
|
188
|
+
return out(pkgFromCache, 0, 'cache-hit');
|
|
189
|
+
}
|
|
190
|
+
// 4 + 5. R2 race + network fetch.
|
|
191
|
+
const NPM_REGISTRY = 'https://registry.npmjs.org';
|
|
192
|
+
const safeName = effName.startsWith('@')
|
|
193
|
+
? '@' + encodeURIComponent(effName.slice(1))
|
|
194
|
+
: encodeURIComponent(effName);
|
|
195
|
+
const url = NPM_REGISTRY + '/' + safeName;
|
|
196
|
+
const R2_RACE_MS = 250;
|
|
197
|
+
const totalRetries = Math.max(0, spec.retries ?? 3);
|
|
198
|
+
const fetchTimeoutMs = spec.fetchTimeoutMs ?? 15_000;
|
|
199
|
+
// [W4 + cache-obs-2] R2 race. Adapts to either supervisor return
|
|
200
|
+
// shape: v1 bare `{json, ageMs, expired} | null` OR v2 envelope
|
|
201
|
+
// `{ cached, events }`.
|
|
202
|
+
let packumentText = null;
|
|
203
|
+
let packumentSource = 'network';
|
|
204
|
+
if (env?.SUPERVISOR && typeof env.SUPERVISOR.getCachedPackument === 'function') {
|
|
205
|
+
try {
|
|
206
|
+
const r2P = Promise.race([
|
|
207
|
+
env.SUPERVISOR.getCachedPackument(effName),
|
|
208
|
+
new Promise((rs) => setTimeout(() => rs(null), R2_RACE_MS)),
|
|
209
|
+
]).catch(() => null);
|
|
210
|
+
const r2Raw = await r2P;
|
|
211
|
+
// Adapt to BOTH shapes.
|
|
212
|
+
let cachedEntry = null;
|
|
213
|
+
if (r2Raw && typeof r2Raw === 'object') {
|
|
214
|
+
if ('cached' in r2Raw && 'events' in r2Raw) {
|
|
215
|
+
// v2 envelope
|
|
216
|
+
cachedEntry = r2Raw.cached;
|
|
217
|
+
// Splice supervisor's L2/L3 events into our accumulator.
|
|
218
|
+
const supEvents = r2Raw.events;
|
|
219
|
+
if (Array.isArray(supEvents)) {
|
|
220
|
+
for (const e of supEvents) {
|
|
221
|
+
if (!e || (e.kind !== 'hit' && e.kind !== 'miss'))
|
|
222
|
+
continue;
|
|
223
|
+
if (e.tier !== 'L2' && e.tier !== 'L3')
|
|
224
|
+
continue;
|
|
225
|
+
if (e.cacheKind !== 'packument')
|
|
226
|
+
continue;
|
|
227
|
+
if (e.kind === 'hit') {
|
|
228
|
+
cacheStatEvents.push({
|
|
229
|
+
kind: 'hit',
|
|
230
|
+
tier: e.tier,
|
|
231
|
+
cacheKind: 'packument',
|
|
232
|
+
bytes: typeof e.bytes === 'number' ? e.bytes : 0,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
cacheStatEvents.push({ kind: 'miss', tier: e.tier, cacheKind: 'packument' });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if ('json' in r2Raw) {
|
|
242
|
+
// v1 bare shape
|
|
243
|
+
cachedEntry = r2Raw;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (cachedEntry && !cachedEntry.expired && cachedEntry.json) {
|
|
247
|
+
packumentText = cachedEntry.json;
|
|
248
|
+
packumentSource = 'r2-cache';
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch { /* best-effort, fall through */ }
|
|
252
|
+
}
|
|
253
|
+
if (packumentText === null) {
|
|
254
|
+
const BACKOFF = [500, 1500, 4500];
|
|
255
|
+
let lastErr;
|
|
256
|
+
for (let attempt = 0; attempt <= totalRetries; attempt++) {
|
|
257
|
+
try {
|
|
258
|
+
const ctl = new AbortController();
|
|
259
|
+
const t = setTimeout(() => ctl.abort(), fetchTimeoutMs);
|
|
260
|
+
let resp;
|
|
261
|
+
try {
|
|
262
|
+
resp = await fetch(url, { headers: { Accept: 'application/json' }, signal: ctl.signal });
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
clearTimeout(t);
|
|
266
|
+
}
|
|
267
|
+
if (resp.ok) {
|
|
268
|
+
packumentText = await resp.text();
|
|
269
|
+
// cache-obs-2: record the L4 hit. byte count is the
|
|
270
|
+
// packument JSON length (authoritative, post-read).
|
|
271
|
+
cacheStatEvents.push({
|
|
272
|
+
kind: 'hit',
|
|
273
|
+
tier: 'L4',
|
|
274
|
+
cacheKind: 'packument',
|
|
275
|
+
bytes: packumentText.length,
|
|
276
|
+
});
|
|
277
|
+
// [W4] Best-effort R2 write-back. Awaited per W4-plan §11.
|
|
278
|
+
if (env?.SUPERVISOR && typeof env.SUPERVISOR.putCachedPackument === 'function') {
|
|
279
|
+
try {
|
|
280
|
+
await env.SUPERVISOR.putCachedPackument(effName, packumentText);
|
|
281
|
+
}
|
|
282
|
+
catch { /* swallow */ }
|
|
283
|
+
}
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
if (resp.status >= 400 && resp.status < 500) {
|
|
287
|
+
// 4xx — package or version doesn't exist. Treat as null.
|
|
288
|
+
messages.push(`[resolve-one] ${effName}: HTTP ${resp.status}`);
|
|
289
|
+
return out(null, 0, 'network');
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
await resp.body?.cancel();
|
|
293
|
+
}
|
|
294
|
+
catch { }
|
|
295
|
+
lastErr = new Error('HTTP ' + resp.status);
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
lastErr = e;
|
|
299
|
+
}
|
|
300
|
+
if (attempt < totalRetries) {
|
|
301
|
+
const base = BACKOFF[Math.min(attempt, BACKOFF.length - 1)];
|
|
302
|
+
const jitter = Math.round(base + (Math.random() * 2 - 1) * base * 0.25);
|
|
303
|
+
await new Promise((r) => setTimeout(r, Math.max(0, jitter)));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (packumentText === null) {
|
|
307
|
+
messages.push(`[resolve-one] ${effName}: fetch exhausted: ${lastErr?.message ?? lastErr}`);
|
|
308
|
+
return out(null, 0, 'network', { type: 'fetch-exhausted', message: String(lastErr?.message ?? lastErr) });
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const bytes = packumentText.length;
|
|
312
|
+
let data;
|
|
313
|
+
try {
|
|
314
|
+
data = JSON.parse(packumentText);
|
|
315
|
+
}
|
|
316
|
+
catch (e) {
|
|
317
|
+
messages.push(`[resolve-one] ${effName}: malformed packument: ${e?.message ?? e}`);
|
|
318
|
+
return out(null, bytes, packumentSource);
|
|
319
|
+
}
|
|
320
|
+
if (!data || !data.versions) {
|
|
321
|
+
return out(null, bytes, packumentSource);
|
|
322
|
+
}
|
|
323
|
+
// 6. Pick version.
|
|
324
|
+
let version = null;
|
|
325
|
+
if (spec.range && data.versions[spec.range])
|
|
326
|
+
version = spec.range;
|
|
327
|
+
if (!version && spec.range && spec.range !== 'latest') {
|
|
328
|
+
const allVersions = Object.keys(data.versions);
|
|
329
|
+
// @ts-ignore — preamble.
|
|
330
|
+
version = RESOLVE_VERSION(allVersions, spec.range);
|
|
331
|
+
}
|
|
332
|
+
if (!version) {
|
|
333
|
+
version = data['dist-tags']?.[spec.range] || data['dist-tags']?.latest || null;
|
|
334
|
+
}
|
|
335
|
+
if (!version || !data.versions[version]) {
|
|
336
|
+
messages.push(`[resolve-one] ${effName}: no version satisfies ${spec.range}`);
|
|
337
|
+
return out(null, bytes, packumentSource);
|
|
338
|
+
}
|
|
339
|
+
// 7. Materialise ResolvedPackage.
|
|
340
|
+
const vData = data.versions[version];
|
|
341
|
+
const versionToResolved = (v) => {
|
|
342
|
+
const binField = v.bin || {};
|
|
343
|
+
const bin = typeof binField === 'string'
|
|
344
|
+
? { [String(v.name).split('/').pop()]: binField }
|
|
345
|
+
: binField;
|
|
346
|
+
let peerDependencies;
|
|
347
|
+
let allPeers;
|
|
348
|
+
const peers = v.peerDependencies;
|
|
349
|
+
if (peers && typeof peers === 'object') {
|
|
350
|
+
const meta = v.peerDependenciesMeta;
|
|
351
|
+
const required = {};
|
|
352
|
+
const all = {};
|
|
353
|
+
for (const [n, r] of Object.entries(peers)) {
|
|
354
|
+
if (typeof r !== 'string')
|
|
355
|
+
continue;
|
|
356
|
+
all[n] = r;
|
|
357
|
+
if (meta && meta[n] && meta[n].optional === true)
|
|
358
|
+
continue;
|
|
359
|
+
required[n] = r;
|
|
360
|
+
}
|
|
361
|
+
if (Object.keys(required).length > 0)
|
|
362
|
+
peerDependencies = required;
|
|
363
|
+
if (Object.keys(all).length > 0)
|
|
364
|
+
allPeers = all;
|
|
365
|
+
}
|
|
366
|
+
const optionalDependencies = v.optionalDependencies && typeof v.optionalDependencies === 'object'
|
|
367
|
+
? Object.fromEntries(Object.entries(v.optionalDependencies).filter(([, r]) => typeof r === 'string'))
|
|
368
|
+
: undefined;
|
|
369
|
+
const resolvedOut = {
|
|
370
|
+
name: v.name,
|
|
371
|
+
version: v.version,
|
|
372
|
+
tarballUrl: v.dist?.tarball || '',
|
|
373
|
+
integrity: v.dist?.integrity || v.dist?.shasum || '',
|
|
374
|
+
dependencies: v.dependencies || {},
|
|
375
|
+
peerDependencies,
|
|
376
|
+
optionalDependencies,
|
|
377
|
+
os: Array.isArray(v.os) ? v.os : undefined,
|
|
378
|
+
cpu: Array.isArray(v.cpu) ? v.cpu : undefined,
|
|
379
|
+
libc: Array.isArray(v.libc) ? v.libc : undefined,
|
|
380
|
+
exports: v.exports ?? null,
|
|
381
|
+
main: v.main || '',
|
|
382
|
+
module: v.module || '',
|
|
383
|
+
bin,
|
|
384
|
+
};
|
|
385
|
+
if (allPeers)
|
|
386
|
+
resolvedOut.__allPeerDependencies = allPeers;
|
|
387
|
+
return resolvedOut;
|
|
388
|
+
};
|
|
389
|
+
const pkg = versionToResolved(vData);
|
|
390
|
+
// 8. Stage cache writes.
|
|
391
|
+
cacheWrites.push({
|
|
392
|
+
name: pkg.name,
|
|
393
|
+
version: pkg.version,
|
|
394
|
+
tarballUrl: pkg.tarballUrl,
|
|
395
|
+
integrity: pkg.integrity,
|
|
396
|
+
depsJson: JSON.stringify(pkg.dependencies),
|
|
397
|
+
peerDepsJson: JSON.stringify(pkg.peerDependencies ?? {}),
|
|
398
|
+
exportsJson: JSON.stringify(pkg.exports ?? {}),
|
|
399
|
+
main: pkg.main,
|
|
400
|
+
moduleField: pkg.module,
|
|
401
|
+
binJson: JSON.stringify(pkg.bin),
|
|
402
|
+
fetchedAt: Date.now(),
|
|
403
|
+
});
|
|
404
|
+
// Top-5 sibling versions, mirrors resolve-facet.ts:580.
|
|
405
|
+
const sorted = Object.keys(data.versions)
|
|
406
|
+
// @ts-ignore — preamble.
|
|
407
|
+
.map((v) => ({ v, p: PARSE_SEMVER(v) }))
|
|
408
|
+
.filter((x) => x.p !== null)
|
|
409
|
+
// @ts-ignore — preamble.
|
|
410
|
+
.sort((a, b) => COMPARE_SEMVER(b.p, a.p));
|
|
411
|
+
for (let i = 0; i < Math.min(5, sorted.length); i++) {
|
|
412
|
+
const otherVer = sorted[i].v;
|
|
413
|
+
if (otherVer === pkg.version)
|
|
414
|
+
continue;
|
|
415
|
+
const otherData = data.versions[otherVer];
|
|
416
|
+
if (!otherData)
|
|
417
|
+
continue;
|
|
418
|
+
try {
|
|
419
|
+
const otherPkg = versionToResolved(otherData);
|
|
420
|
+
cacheWrites.push({
|
|
421
|
+
name: otherPkg.name,
|
|
422
|
+
version: otherPkg.version,
|
|
423
|
+
tarballUrl: otherPkg.tarballUrl,
|
|
424
|
+
integrity: otherPkg.integrity,
|
|
425
|
+
depsJson: JSON.stringify(otherPkg.dependencies),
|
|
426
|
+
peerDepsJson: JSON.stringify(otherPkg.peerDependencies ?? {}),
|
|
427
|
+
exportsJson: JSON.stringify(otherPkg.exports ?? {}),
|
|
428
|
+
main: otherPkg.main,
|
|
429
|
+
moduleField: otherPkg.module,
|
|
430
|
+
binJson: JSON.stringify(otherPkg.bin),
|
|
431
|
+
fetchedAt: Date.now(),
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
catch { /* skip malformed */ }
|
|
435
|
+
}
|
|
436
|
+
return out(pkg, bytes, packumentSource);
|
|
437
|
+
};
|