@volter/tabnode 0.2.14-volter.88
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/LICENSE +22 -0
- package/README.md +78 -0
- package/THIRD-PARTY-NOTICES.md +12 -0
- package/dist/__sw__.js +526 -0
- package/dist/assets/runtime-worker-4MKaHFVb.js +75221 -0
- package/dist/assets/runtime-worker-4MKaHFVb.js.map +1 -0
- package/dist/code-transforms.d.ts +21 -0
- package/dist/code-transforms.d.ts.map +1 -0
- package/dist/config/cdn.d.ts +12 -0
- package/dist/config/cdn.d.ts.map +1 -0
- package/dist/create-runtime.d.ts +22 -0
- package/dist/create-runtime.d.ts.map +1 -0
- package/dist/host-globals.d.ts +62 -0
- package/dist/host-globals.d.ts.map +1 -0
- package/dist/index.cjs +36021 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +36020 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node-internals.d.ts +68 -0
- package/dist/node-internals.d.ts.map +1 -0
- package/dist/node-lib/binding/blob.d.ts +12 -0
- package/dist/node-lib/binding/blob.d.ts.map +1 -0
- package/dist/node-lib/binding/buffer.d.ts +144 -0
- package/dist/node-lib/binding/buffer.d.ts.map +1 -0
- package/dist/node-lib/binding/cares_wrap.d.ts +14 -0
- package/dist/node-lib/binding/cares_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/fds.d.ts +30 -0
- package/dist/node-lib/binding/fds.d.ts.map +1 -0
- package/dist/node-lib/binding/fs.d.ts +157 -0
- package/dist/node-lib/binding/fs.d.ts.map +1 -0
- package/dist/node-lib/binding/handles.d.ts +81 -0
- package/dist/node-lib/binding/handles.d.ts.map +1 -0
- package/dist/node-lib/binding/http_parser.d.ts +122 -0
- package/dist/node-lib/binding/http_parser.d.ts.map +1 -0
- package/dist/node-lib/binding/index.d.ts +3 -0
- package/dist/node-lib/binding/index.d.ts.map +1 -0
- package/dist/node-lib/binding/llhttp-wasm.d.ts +22 -0
- package/dist/node-lib/binding/llhttp-wasm.d.ts.map +1 -0
- package/dist/node-lib/binding/misc.d.ts +123 -0
- package/dist/node-lib/binding/misc.d.ts.map +1 -0
- package/dist/node-lib/binding/pipe_wrap.d.ts +84 -0
- package/dist/node-lib/binding/pipe_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/process_wrap.d.ts +173 -0
- package/dist/node-lib/binding/process_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/spawn_sync.d.ts +30 -0
- package/dist/node-lib/binding/spawn_sync.d.ts.map +1 -0
- package/dist/node-lib/binding/stream_wrap.d.ts +191 -0
- package/dist/node-lib/binding/stream_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/stubs.d.ts +23 -0
- package/dist/node-lib/binding/stubs.d.ts.map +1 -0
- package/dist/node-lib/binding/tcp_wrap.d.ts +98 -0
- package/dist/node-lib/binding/tcp_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/tty_wrap.d.ts +36 -0
- package/dist/node-lib/binding/tty_wrap.d.ts.map +1 -0
- package/dist/node-lib/binding/util.d.ts +126 -0
- package/dist/node-lib/binding/util.d.ts.map +1 -0
- package/dist/node-lib/binding/uv.d.ts +32 -0
- package/dist/node-lib/binding/uv.d.ts.map +1 -0
- package/dist/node-lib/binding/zlib-pako.d.ts +22 -0
- package/dist/node-lib/binding/zlib-pako.d.ts.map +1 -0
- package/dist/node-lib/binding/zlib.d.ts +38 -0
- package/dist/node-lib/binding/zlib.d.ts.map +1 -0
- package/dist/node-lib/buffer-module.d.ts +51 -0
- package/dist/node-lib/buffer-module.d.ts.map +1 -0
- package/dist/node-lib/child-process-module.d.ts +26 -0
- package/dist/node-lib/child-process-module.d.ts.map +1 -0
- package/dist/node-lib/events-module.d.ts +58 -0
- package/dist/node-lib/events-module.d.ts.map +1 -0
- package/dist/node-lib/fs-module.d.ts +5 -0
- package/dist/node-lib/fs-module.d.ts.map +1 -0
- package/dist/node-lib/http-bridge.d.ts +43 -0
- package/dist/node-lib/http-bridge.d.ts.map +1 -0
- package/dist/node-lib/http-module.d.ts +35 -0
- package/dist/node-lib/http-module.d.ts.map +1 -0
- package/dist/node-lib/internals/addresses.d.ts +40 -0
- package/dist/node-lib/internals/addresses.d.ts.map +1 -0
- package/dist/node-lib/internals/buffer-and-streams.d.ts +96 -0
- package/dist/node-lib/internals/buffer-and-streams.d.ts.map +1 -0
- package/dist/node-lib/internals/child-process.d.ts +27 -0
- package/dist/node-lib/internals/child-process.d.ts.map +1 -0
- package/dist/node-lib/internals/events-util.d.ts +83 -0
- package/dist/node-lib/internals/events-util.d.ts.map +1 -0
- package/dist/node-lib/internals/index.d.ts +2 -0
- package/dist/node-lib/internals/index.d.ts.map +1 -0
- package/dist/node-lib/internals/modules.d.ts +67 -0
- package/dist/node-lib/internals/modules.d.ts.map +1 -0
- package/dist/node-lib/internals/readline-access.d.ts +2 -0
- package/dist/node-lib/internals/readline-access.d.ts.map +1 -0
- package/dist/node-lib/internals/runtime.d.ts +150 -0
- package/dist/node-lib/internals/runtime.d.ts.map +1 -0
- package/dist/node-lib/internals/util.d.ts +33 -0
- package/dist/node-lib/internals/util.d.ts.map +1 -0
- package/dist/node-lib/lazy.d.ts +31 -0
- package/dist/node-lib/lazy.d.ts.map +1 -0
- package/dist/node-lib/load.d.ts +27 -0
- package/dist/node-lib/load.d.ts.map +1 -0
- package/dist/node-lib/module-hooks.d.ts +89 -0
- package/dist/node-lib/module-hooks.d.ts.map +1 -0
- package/dist/node-lib/net-module.d.ts +181 -0
- package/dist/node-lib/net-module.d.ts.map +1 -0
- package/dist/node-lib/node-versions.d.ts +27 -0
- package/dist/node-lib/node-versions.d.ts.map +1 -0
- package/dist/node-lib/public-modules.d.ts +2 -0
- package/dist/node-lib/public-modules.d.ts.map +1 -0
- package/dist/node-lib/require-hook.d.ts +15 -0
- package/dist/node-lib/require-hook.d.ts.map +1 -0
- package/dist/node-lib/small-modules.d.ts +16 -0
- package/dist/node-lib/small-modules.d.ts.map +1 -0
- package/dist/node-lib/sources.d.ts +4 -0
- package/dist/node-lib/sources.d.ts.map +1 -0
- package/dist/node-lib/stream-module.d.ts +77 -0
- package/dist/node-lib/stream-module.d.ts.map +1 -0
- package/dist/node-lib/timers.d.ts +19 -0
- package/dist/node-lib/timers.d.ts.map +1 -0
- package/dist/node-lib/util-module.d.ts +76 -0
- package/dist/node-lib/util-module.d.ts.map +1 -0
- package/dist/node-resolution.d.ts +50 -0
- package/dist/node-resolution.d.ts.map +1 -0
- package/dist/node-resolver.d.ts +7 -0
- package/dist/node-resolver.d.ts.map +1 -0
- package/dist/npm/index.d.ts +73 -0
- package/dist/npm/index.d.ts.map +1 -0
- package/dist/npm/registry.d.ts +111 -0
- package/dist/npm/registry.d.ts.map +1 -0
- package/dist/npm/resolver.d.ts +79 -0
- package/dist/npm/resolver.d.ts.map +1 -0
- package/dist/npm/tarball.d.ts +28 -0
- package/dist/npm/tarball.d.ts.map +1 -0
- package/dist/process-tokens.d.ts +77 -0
- package/dist/process-tokens.d.ts.map +1 -0
- package/dist/punycode-source.d.ts +3 -0
- package/dist/punycode-source.d.ts.map +1 -0
- package/dist/runtime-interface.d.ts +74 -0
- package/dist/runtime-interface.d.ts.map +1 -0
- package/dist/runtime.d.ts +144 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/server-bridge.d.ts +147 -0
- package/dist/server-bridge.d.ts.map +1 -0
- package/dist/shims/async_hooks.d.ts +50 -0
- package/dist/shims/async_hooks.d.ts.map +1 -0
- package/dist/shims/child_process.d.ts +104 -0
- package/dist/shims/child_process.d.ts.map +1 -0
- package/dist/shims/cluster.d.ts +52 -0
- package/dist/shims/cluster.d.ts.map +1 -0
- package/dist/shims/command-line.d.ts +43 -0
- package/dist/shims/command-line.d.ts.map +1 -0
- package/dist/shims/constants.d.ts +222 -0
- package/dist/shims/constants.d.ts.map +1 -0
- package/dist/shims/crypto-constants.d.ts +12 -0
- package/dist/shims/crypto-constants.d.ts.map +1 -0
- package/dist/shims/crypto.d.ts +144 -0
- package/dist/shims/crypto.d.ts.map +1 -0
- package/dist/shims/dgram.d.ts +34 -0
- package/dist/shims/dgram.d.ts.map +1 -0
- package/dist/shims/dns.d.ts +91 -0
- package/dist/shims/dns.d.ts.map +1 -0
- package/dist/shims/domain.d.ts +25 -0
- package/dist/shims/domain.d.ts.map +1 -0
- package/dist/shims/esbuild.d.ts +205 -0
- package/dist/shims/esbuild.d.ts.map +1 -0
- package/dist/shims/fs.d.ts +25 -0
- package/dist/shims/fs.d.ts.map +1 -0
- package/dist/shims/http2.d.ts +81 -0
- package/dist/shims/http2.d.ts.map +1 -0
- package/dist/shims/inspector.d.ts +25 -0
- package/dist/shims/inspector.d.ts.map +1 -0
- package/dist/shims/module.d.ts +22 -0
- package/dist/shims/module.d.ts.map +1 -0
- package/dist/shims/os.d.ts +159 -0
- package/dist/shims/os.d.ts.map +1 -0
- package/dist/shims/path.d.ts +52 -0
- package/dist/shims/path.d.ts.map +1 -0
- package/dist/shims/perf_hooks.d.ts +50 -0
- package/dist/shims/perf_hooks.d.ts.map +1 -0
- package/dist/shims/process.d.ts +226 -0
- package/dist/shims/process.d.ts.map +1 -0
- package/dist/shims/rollup.d.ts +71 -0
- package/dist/shims/rollup.d.ts.map +1 -0
- package/dist/shims/string_decoder.d.ts +41 -0
- package/dist/shims/string_decoder.d.ts.map +1 -0
- package/dist/shims/sync-child.d.ts +64 -0
- package/dist/shims/sync-child.d.ts.map +1 -0
- package/dist/shims/tls.d.ts +53 -0
- package/dist/shims/tls.d.ts.map +1 -0
- package/dist/shims/url.d.ts +84 -0
- package/dist/shims/url.d.ts.map +1 -0
- package/dist/shims/v8.d.ts +73 -0
- package/dist/shims/v8.d.ts.map +1 -0
- package/dist/shims/vfs-adapter.d.ts +126 -0
- package/dist/shims/vfs-adapter.d.ts.map +1 -0
- package/dist/shims/vm.d.ts +52 -0
- package/dist/shims/vm.d.ts.map +1 -0
- package/dist/shims/wasi.d.ts +78 -0
- package/dist/shims/wasi.d.ts.map +1 -0
- package/dist/shims/worker_threads.d.ts +66 -0
- package/dist/shims/worker_threads.d.ts.map +1 -0
- package/dist/shims/zlib-constants.d.ts +66 -0
- package/dist/shims/zlib-constants.d.ts.map +1 -0
- package/dist/shims/zlib.d.ts +102 -0
- package/dist/shims/zlib.d.ts.map +1 -0
- package/dist/transform.d.ts +24 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/types/package-json.d.ts +18 -0
- package/dist/types/package-json.d.ts.map +1 -0
- package/dist/utils/binary-encoding.d.ts +13 -0
- package/dist/utils/binary-encoding.d.ts.map +1 -0
- package/dist/utils/glob.d.ts +19 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/virtual-fs.d.ts +259 -0
- package/dist/virtual-fs.d.ts.map +1 -0
- package/dist/vite-plugin.cjs +50 -0
- package/dist/vite-plugin.cjs.map +1 -0
- package/dist/vite-plugin.d.ts +36 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.mjs +31 -0
- package/dist/vite-plugin.mjs.map +1 -0
- package/dist/worker/runtime-worker.d.ts +8 -0
- package/dist/worker/runtime-worker.d.ts.map +1 -0
- package/dist/worker-runtime.d.ts +50 -0
- package/dist/worker-runtime.d.ts.map +1 -0
- package/package.json +88 -0
- package/src/code-transforms.ts +560 -0
- package/src/config/cdn.ts +13 -0
- package/src/create-runtime.ts +89 -0
- package/src/host-globals.ts +121 -0
- package/src/index.ts +235 -0
- package/src/node-internals.ts +283 -0
- package/src/node-lib/LICENSE +47 -0
- package/src/node-lib/_http_agent.js +547 -0
- package/src/node-lib/_http_client.js +996 -0
- package/src/node-lib/_http_common.js +269 -0
- package/src/node-lib/_http_incoming.js +453 -0
- package/src/node-lib/_http_outgoing.js +1262 -0
- package/src/node-lib/_http_server.js +1230 -0
- package/src/node-lib/assert/strict.js +3 -0
- package/src/node-lib/assert.js +844 -0
- package/src/node-lib/binding/blob.ts +35 -0
- package/src/node-lib/binding/buffer.ts +465 -0
- package/src/node-lib/binding/cares_wrap.ts +57 -0
- package/src/node-lib/binding/fds.ts +80 -0
- package/src/node-lib/binding/fs.ts +857 -0
- package/src/node-lib/binding/handles.ts +187 -0
- package/src/node-lib/binding/http_parser.ts +536 -0
- package/src/node-lib/binding/index.ts +77 -0
- package/src/node-lib/binding/llhttp-wasm.ts +670 -0
- package/src/node-lib/binding/misc.ts +252 -0
- package/src/node-lib/binding/pipe_wrap.ts +166 -0
- package/src/node-lib/binding/process_wrap.ts +371 -0
- package/src/node-lib/binding/spawn_sync.ts +141 -0
- package/src/node-lib/binding/stream_wrap.ts +413 -0
- package/src/node-lib/binding/stubs.ts +19 -0
- package/src/node-lib/binding/tcp_wrap.ts +254 -0
- package/src/node-lib/binding/tty_wrap.ts +56 -0
- package/src/node-lib/binding/util.ts +274 -0
- package/src/node-lib/binding/uv.ts +102 -0
- package/src/node-lib/binding/zlib-pako.ts +50 -0
- package/src/node-lib/binding/zlib.ts +259 -0
- package/src/node-lib/buffer-module.ts +70 -0
- package/src/node-lib/buffer.js +1373 -0
- package/src/node-lib/child-process-module.ts +58 -0
- package/src/node-lib/child_process.js +1046 -0
- package/src/node-lib/constants.js +41 -0
- package/src/node-lib/diagnostics_channel.js +438 -0
- package/src/node-lib/events-module.ts +80 -0
- package/src/node-lib/events.js +1223 -0
- package/src/node-lib/fs-module.ts +43 -0
- package/src/node-lib/fs.js +3377 -0
- package/src/node-lib/http-bridge.ts +299 -0
- package/src/node-lib/http-module.ts +53 -0
- package/src/node-lib/http.js +198 -0
- package/src/node-lib/https.js +429 -0
- package/src/node-lib/internal/assert/assertion_error.js +417 -0
- package/src/node-lib/internal/assert/calltracker.js +153 -0
- package/src/node-lib/internal/assert/myers_diff.js +177 -0
- package/src/node-lib/internal/assert/utils.js +278 -0
- package/src/node-lib/internal/buffer.js +1120 -0
- package/src/node-lib/internal/child_process/serialization.js +169 -0
- package/src/node-lib/internal/child_process.js +1135 -0
- package/src/node-lib/internal/constants.js +56 -0
- package/src/node-lib/internal/deps/minimatch/index.js +1628 -0
- package/src/node-lib/internal/errors.js +1912 -0
- package/src/node-lib/internal/events/abort_listener.js +54 -0
- package/src/node-lib/internal/events/symbols.js +11 -0
- package/src/node-lib/internal/fixed_queue.js +119 -0
- package/src/node-lib/internal/freelist.js +30 -0
- package/src/node-lib/internal/fs/cp/cp-sync.js +242 -0
- package/src/node-lib/internal/fs/cp/cp.js +382 -0
- package/src/node-lib/internal/fs/dir.js +369 -0
- package/src/node-lib/internal/fs/glob.js +763 -0
- package/src/node-lib/internal/fs/promises.js +1312 -0
- package/src/node-lib/internal/fs/read/context.js +129 -0
- package/src/node-lib/internal/fs/recursive_watch.js +275 -0
- package/src/node-lib/internal/fs/rimraf.js +311 -0
- package/src/node-lib/internal/fs/streams.js +571 -0
- package/src/node-lib/internal/fs/sync_write_stream.js +49 -0
- package/src/node-lib/internal/fs/utils.js +987 -0
- package/src/node-lib/internal/fs/watchers.js +418 -0
- package/src/node-lib/internal/http.js +62 -0
- package/src/node-lib/internal/mime.js +389 -0
- package/src/node-lib/internal/modules/customization_hooks.js +406 -0
- package/src/node-lib/internal/net.js +95 -0
- package/src/node-lib/internal/querystring.js +119 -0
- package/src/node-lib/internal/readline/callbacks.js +132 -0
- package/src/node-lib/internal/readline/emitKeypressEvents.js +99 -0
- package/src/node-lib/internal/readline/interface.js +1418 -0
- package/src/node-lib/internal/readline/promises.js +144 -0
- package/src/node-lib/internal/readline/utils.js +405 -0
- package/src/node-lib/internal/socket_list.js +108 -0
- package/src/node-lib/internal/stream_base_commons.js +280 -0
- package/src/node-lib/internal/streams/add-abort-signal.js +60 -0
- package/src/node-lib/internal/streams/compose.js +257 -0
- package/src/node-lib/internal/streams/destroy.js +361 -0
- package/src/node-lib/internal/streams/duplex.js +203 -0
- package/src/node-lib/internal/streams/duplexify.js +379 -0
- package/src/node-lib/internal/streams/duplexpair.js +62 -0
- package/src/node-lib/internal/streams/end-of-stream.js +331 -0
- package/src/node-lib/internal/streams/from.js +208 -0
- package/src/node-lib/internal/streams/lazy_transform.js +57 -0
- package/src/node-lib/internal/streams/legacy.js +125 -0
- package/src/node-lib/internal/streams/operators.js +436 -0
- package/src/node-lib/internal/streams/passthrough.js +47 -0
- package/src/node-lib/internal/streams/pipeline.js +465 -0
- package/src/node-lib/internal/streams/readable.js +1762 -0
- package/src/node-lib/internal/streams/state.js +51 -0
- package/src/node-lib/internal/streams/transform.js +204 -0
- package/src/node-lib/internal/streams/utils.js +363 -0
- package/src/node-lib/internal/streams/writable.js +1163 -0
- package/src/node-lib/internal/tty.js +260 -0
- package/src/node-lib/internal/util/colors.js +40 -0
- package/src/node-lib/internal/util/comparisons.js +1028 -0
- package/src/node-lib/internal/util/debuglog.js +524 -0
- package/src/node-lib/internal/util/inspect.js +2535 -0
- package/src/node-lib/internal/util/parse_args/parse_args.js +412 -0
- package/src/node-lib/internal/util/parse_args/utils.js +197 -0
- package/src/node-lib/internal/util.js +1003 -0
- package/src/node-lib/internal/validators.js +654 -0
- package/src/node-lib/internals/addresses.ts +159 -0
- package/src/node-lib/internals/buffer-and-streams.ts +224 -0
- package/src/node-lib/internals/child-process.ts +64 -0
- package/src/node-lib/internals/events-util.ts +105 -0
- package/src/node-lib/internals/index.ts +66 -0
- package/src/node-lib/internals/modules.ts +117 -0
- package/src/node-lib/internals/readline-access.ts +16 -0
- package/src/node-lib/internals/runtime.ts +277 -0
- package/src/node-lib/internals/util.ts +98 -0
- package/src/node-lib/lazy.ts +158 -0
- package/src/node-lib/load.ts +390 -0
- package/src/node-lib/module-hooks.ts +281 -0
- package/src/node-lib/net-module.ts +248 -0
- package/src/node-lib/net.js +2540 -0
- package/src/node-lib/node-versions.ts +34 -0
- package/src/node-lib/os.js +356 -0
- package/src/node-lib/path.js +1694 -0
- package/src/node-lib/primordials.js +743 -0
- package/src/node-lib/public-modules.ts +109 -0
- package/src/node-lib/punycode.js +455 -0
- package/src/node-lib/querystring.js +484 -0
- package/src/node-lib/readline/promises.js +73 -0
- package/src/node-lib/readline.js +523 -0
- package/src/node-lib/require-hook.ts +27 -0
- package/src/node-lib/small-modules.ts +35 -0
- package/src/node-lib/sources.ts +200 -0
- package/src/node-lib/stream/promises.js +44 -0
- package/src/node-lib/stream-module.ts +101 -0
- package/src/node-lib/stream.js +152 -0
- package/src/node-lib/timers.ts +33 -0
- package/src/node-lib/tty.js +168 -0
- package/src/node-lib/util-module.ts +104 -0
- package/src/node-lib/util.js +689 -0
- package/src/node-lib/wasi.js +179 -0
- package/src/node-lib/zlib.js +1036 -0
- package/src/node-resolution.ts +241 -0
- package/src/node-resolver.ts +33 -0
- package/src/npm/index.ts +425 -0
- package/src/npm/registry.ts +235 -0
- package/src/npm/resolver.ts +589 -0
- package/src/npm/tarball.ts +246 -0
- package/src/process-tokens.ts +156 -0
- package/src/punycode-source.ts +6 -0
- package/src/runtime-interface.ts +85 -0
- package/src/runtime.ts +3073 -0
- package/src/server-bridge.ts +971 -0
- package/src/shims/async_hooks.ts +181 -0
- package/src/shims/child_process.ts +1591 -0
- package/src/shims/cluster.ts +79 -0
- package/src/shims/command-line.ts +79 -0
- package/src/shims/constants.ts +68 -0
- package/src/shims/crypto-constants.ts +11 -0
- package/src/shims/crypto.ts +1061 -0
- package/src/shims/dgram.ts +47 -0
- package/src/shims/dns.ts +185 -0
- package/src/shims/domain.ts +58 -0
- package/src/shims/esbuild.ts +1638 -0
- package/src/shims/fs.ts +82 -0
- package/src/shims/http2.ts +96 -0
- package/src/shims/inspector.ts +30 -0
- package/src/shims/module.ts +86 -0
- package/src/shims/os.ts +195 -0
- package/src/shims/path.ts +246 -0
- package/src/shims/perf_hooks.ts +92 -0
- package/src/shims/process.ts +804 -0
- package/src/shims/rollup.ts +149 -0
- package/src/shims/string_decoder.ts +396 -0
- package/src/shims/sync-child.ts +469 -0
- package/src/shims/tls.ts +94 -0
- package/src/shims/url.ts +217 -0
- package/src/shims/v8.ts +113 -0
- package/src/shims/vfs-adapter.ts +408 -0
- package/src/shims/vm.ts +132 -0
- package/src/shims/wasi.ts +1440 -0
- package/src/shims/worker_threads.ts +114 -0
- package/src/shims/zlib-constants.ts +65 -0
- package/src/shims/zlib.ts +228 -0
- package/src/transform.ts +324 -0
- package/src/types/external.d.ts +55 -0
- package/src/types/package-json.ts +17 -0
- package/src/types/pako-zlib.d.ts +30 -0
- package/src/types/sha.js.d.ts +14 -0
- package/src/utils/binary-encoding.ts +43 -0
- package/src/utils/glob.ts +54 -0
- package/src/utils/hash.ts +12 -0
- package/src/virtual-fs.ts +1048 -0
- package/src/vite-plugin.ts +76 -0
- package/src/worker/runtime-worker.ts +128 -0
- package/src/worker-runtime.ts +145 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Resolver
|
|
3
|
+
* Resolves full dependency tree with semver version constraints
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Registry, PackageVersion, encodePackageName } from './registry';
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
/**
|
|
10
|
+
* The lockfile the page read for the project being installed, name to the
|
|
11
|
+
* version it pinned. The engine builds its package manager itself, with no
|
|
12
|
+
* options of ours, so the page hands the records over through globals.
|
|
13
|
+
*/
|
|
14
|
+
// eslint-disable-next-line no-var
|
|
15
|
+
var __browserRuntimeLockfilePins: Map<string, string> | undefined;
|
|
16
|
+
/** Every version the lockfile recorded, by package name and then version. */
|
|
17
|
+
// eslint-disable-next-line no-var
|
|
18
|
+
var __browserRuntimeLockfileRecords: Map<string, Map<string, LockfileRecord>> | undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** One version as a lockfile wrote it down. */
|
|
22
|
+
export interface LockfileRecord {
|
|
23
|
+
resolved?: string;
|
|
24
|
+
dependencies?: Record<string, string>;
|
|
25
|
+
peerDependencies?: Record<string, string>;
|
|
26
|
+
peerDependenciesMeta?: Record<string, { optional?: boolean }>;
|
|
27
|
+
optionalDependencies?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ResolvedPackage {
|
|
31
|
+
name: string;
|
|
32
|
+
version: string;
|
|
33
|
+
tarballUrl: string;
|
|
34
|
+
dependencies: Record<string, string>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Every package at the top of the tree, plus, under `__nested`, the ones a
|
|
39
|
+
* dependent gets under its own `node_modules`, keyed by their placement.
|
|
40
|
+
*/
|
|
41
|
+
export interface ResolvedTree extends Map<string, ResolvedPackage> {
|
|
42
|
+
__nested?: Map<string, ResolvedPackage>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface ResolveOptions {
|
|
46
|
+
registry?: Registry;
|
|
47
|
+
includeDev?: boolean;
|
|
48
|
+
includeOptional?: boolean;
|
|
49
|
+
onProgress?: (message: string) => void;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface ResolveContext {
|
|
53
|
+
registry: Registry;
|
|
54
|
+
resolved: ResolvedTree;
|
|
55
|
+
resolving: Set<string>;
|
|
56
|
+
options: ResolveOptions;
|
|
57
|
+
/** A dependent's own `node_modules`, by placement; see `__browserRuntimeNest`. */
|
|
58
|
+
nested?: Map<string, ResolvedPackage>;
|
|
59
|
+
/** The dependencies of each root package chosen in the first pass, descended in the second. */
|
|
60
|
+
rootDeps?: Map<string, Record<string, string>>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Parse a semver version string into components
|
|
65
|
+
*/
|
|
66
|
+
function parseVersion(version: string): {
|
|
67
|
+
major: number;
|
|
68
|
+
minor: number;
|
|
69
|
+
patch: number;
|
|
70
|
+
prerelease?: string;
|
|
71
|
+
} | null {
|
|
72
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
|
|
73
|
+
if (!match) return null;
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
major: parseInt(match[1], 10),
|
|
77
|
+
minor: parseInt(match[2], 10),
|
|
78
|
+
patch: parseInt(match[3], 10),
|
|
79
|
+
prerelease: match[4],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Compare two semver versions
|
|
85
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
86
|
+
*/
|
|
87
|
+
function compareVersions(a: string, b: string): number {
|
|
88
|
+
const parsedA = parseVersion(a);
|
|
89
|
+
const parsedB = parseVersion(b);
|
|
90
|
+
|
|
91
|
+
if (!parsedA || !parsedB) {
|
|
92
|
+
return a.localeCompare(b);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (parsedA.major !== parsedB.major) {
|
|
96
|
+
return parsedA.major - parsedB.major;
|
|
97
|
+
}
|
|
98
|
+
if (parsedA.minor !== parsedB.minor) {
|
|
99
|
+
return parsedA.minor - parsedB.minor;
|
|
100
|
+
}
|
|
101
|
+
if (parsedA.patch !== parsedB.patch) {
|
|
102
|
+
return parsedA.patch - parsedB.patch;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Prerelease versions are lower than release versions
|
|
106
|
+
if (parsedA.prerelease && !parsedB.prerelease) return -1;
|
|
107
|
+
if (!parsedA.prerelease && parsedB.prerelease) return 1;
|
|
108
|
+
if (parsedA.prerelease && parsedB.prerelease) {
|
|
109
|
+
return parsedA.prerelease.localeCompare(parsedB.prerelease);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Check if a version satisfies a semver range
|
|
117
|
+
*/
|
|
118
|
+
function satisfies(version: string, range: string): boolean {
|
|
119
|
+
const parsed = parseVersion(version);
|
|
120
|
+
if (!parsed) return false;
|
|
121
|
+
|
|
122
|
+
// Skip prerelease versions unless explicitly requested
|
|
123
|
+
if (parsed.prerelease && !range.includes('-')) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
range = range.trim();
|
|
128
|
+
// A lone `=` or `v` before a whole version means that version: SvelteKit's tree
|
|
129
|
+
// pins `@oxc-project/types@=0.148.0`, which fell through every branch below.
|
|
130
|
+
range = range.replace(/^=\s*/, "").replace(/^v(?=\d)/, "");
|
|
131
|
+
range = range.replace(/(>=|<=|>|<|=)\s*(\d+)(\.\d+)?(?![.\d])/g, (__m: string, __op: string, __major: string, __minor: string | undefined) => __op + " " + __major + (__minor === void 0 ? ".0.0" : __minor + ".0"));
|
|
132
|
+
// Real packages also write partial caret/tilde ranges (`^1`, `~1.2`), which
|
|
133
|
+
// the whole-version branches below never matched.
|
|
134
|
+
const __browserRuntimePartialRange = range.match(/^([~^])(\d+)(?:\.(\d+))?(?:\.(\d+))?$/);
|
|
135
|
+
if (__browserRuntimePartialRange) {
|
|
136
|
+
const operator = __browserRuntimePartialRange[1];
|
|
137
|
+
const major = Number(__browserRuntimePartialRange[2]);
|
|
138
|
+
const hasMinor = __browserRuntimePartialRange[3] !== void 0;
|
|
139
|
+
const hasPatch = __browserRuntimePartialRange[4] !== void 0;
|
|
140
|
+
const minor = Number(__browserRuntimePartialRange[3] ?? 0);
|
|
141
|
+
const patch = Number(__browserRuntimePartialRange[4] ?? 0);
|
|
142
|
+
const lower = major + "." + minor + "." + patch;
|
|
143
|
+
let upper: string;
|
|
144
|
+
if (operator === "~") {
|
|
145
|
+
upper = hasMinor ? major + "." + (minor + 1) + ".0" : major + 1 + ".0.0";
|
|
146
|
+
} else if (major > 0 || !hasMinor) {
|
|
147
|
+
upper = major + 1 + ".0.0";
|
|
148
|
+
} else if (minor > 0 || !hasPatch) {
|
|
149
|
+
upper = "0." + (minor + 1) + ".0";
|
|
150
|
+
} else {
|
|
151
|
+
upper = "0.0." + (patch + 1);
|
|
152
|
+
}
|
|
153
|
+
return compareVersions(version, lower) >= 0 && compareVersions(version, upper) < 0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Exact version
|
|
157
|
+
if (/^\d+\.\d+\.\d+/.test(range) && !range.includes(' ')) {
|
|
158
|
+
const rangeMatch = range.match(/^(\d+\.\d+\.\d+(?:-[^\s]+)?)/);
|
|
159
|
+
if (rangeMatch) {
|
|
160
|
+
return compareVersions(version, rangeMatch[1]) === 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Latest or * - any version
|
|
165
|
+
if (range === '*' || range === 'latest' || range === '') {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Multiple ranges with ||
|
|
170
|
+
if (range.includes('||')) {
|
|
171
|
+
return range.split('||').some((r) => satisfies(version, r.trim()));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Range with hyphen: 1.0.0 - 2.0.0
|
|
175
|
+
if (range.includes(' - ')) {
|
|
176
|
+
const [min, max] = range.split(' - ').map((s) => s.trim());
|
|
177
|
+
return compareVersions(version, min) >= 0 && compareVersions(version, max) <= 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Compound ranges with operators: >= 2.1.2 < 3.0.0
|
|
181
|
+
// Parse all operators and versions from the range
|
|
182
|
+
const operatorMatches = range.match(/(>=|<=|>|<|=)?\s*(\d+\.\d+\.\d+(?:-[^\s]*)?)/g);
|
|
183
|
+
if (operatorMatches && operatorMatches.length > 1) {
|
|
184
|
+
return operatorMatches.every((match) => {
|
|
185
|
+
const m = match.match(/^(>=|<=|>|<|=)?\s*(\d+\.\d+\.\d+(?:-[^\s]*)?)$/);
|
|
186
|
+
if (!m) return true;
|
|
187
|
+
const op = m[1] || '=';
|
|
188
|
+
const ver = m[2];
|
|
189
|
+
switch (op) {
|
|
190
|
+
case '>=': return compareVersions(version, ver) >= 0;
|
|
191
|
+
case '<=': return compareVersions(version, ver) <= 0;
|
|
192
|
+
case '>': return compareVersions(version, ver) > 0;
|
|
193
|
+
case '<': return compareVersions(version, ver) < 0;
|
|
194
|
+
case '=': return compareVersions(version, ver) === 0;
|
|
195
|
+
default: return compareVersions(version, ver) === 0;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Caret range: ^1.2.3 means >=1.2.3 <2.0.0 (or <1.3.0 if major is 0)
|
|
201
|
+
if (range.startsWith('^')) {
|
|
202
|
+
const base = range.slice(1);
|
|
203
|
+
const baseParsed = parseVersion(base);
|
|
204
|
+
if (!baseParsed) return false;
|
|
205
|
+
|
|
206
|
+
if (parsed.major !== baseParsed.major) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (baseParsed.major === 0) {
|
|
211
|
+
// ^0.x.y is more restrictive
|
|
212
|
+
if (baseParsed.minor !== 0 && parsed.minor !== baseParsed.minor) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (baseParsed.minor === 0 && parsed.minor !== 0) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return compareVersions(version, base) >= 0;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Tilde range: ~1.2.3 means >=1.2.3 <1.3.0
|
|
224
|
+
if (range.startsWith('~')) {
|
|
225
|
+
const base = range.slice(1);
|
|
226
|
+
const baseParsed = parseVersion(base);
|
|
227
|
+
if (!baseParsed) return false;
|
|
228
|
+
|
|
229
|
+
if (parsed.major !== baseParsed.major || parsed.minor !== baseParsed.minor) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return compareVersions(version, base) >= 0;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Greater than or equal: >=1.2.3
|
|
237
|
+
if (range.startsWith('>=')) {
|
|
238
|
+
const base = range.slice(2).trim();
|
|
239
|
+
return compareVersions(version, base) >= 0;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Greater than: >1.2.3
|
|
243
|
+
if (range.startsWith('>')) {
|
|
244
|
+
const base = range.slice(1).trim();
|
|
245
|
+
return compareVersions(version, base) > 0;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Less than or equal: <=1.2.3
|
|
249
|
+
if (range.startsWith('<=')) {
|
|
250
|
+
const base = range.slice(2).trim();
|
|
251
|
+
return compareVersions(version, base) <= 0;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Less than: <1.2.3
|
|
255
|
+
if (range.startsWith('<')) {
|
|
256
|
+
const base = range.slice(1).trim();
|
|
257
|
+
return compareVersions(version, base) < 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// X-ranges: 1.x, 1.2.x, 1, 1.2
|
|
261
|
+
if (range.includes('x') || range.includes('X') || /^\d+$/.test(range) || /^\d+\.\d+$/.test(range)) {
|
|
262
|
+
const parts = range.replace(/[xX]/g, '').split('.').filter(Boolean);
|
|
263
|
+
|
|
264
|
+
if (parts.length === 1) {
|
|
265
|
+
return parsed.major === parseInt(parts[0], 10);
|
|
266
|
+
}
|
|
267
|
+
if (parts.length === 2) {
|
|
268
|
+
return (
|
|
269
|
+
parsed.major === parseInt(parts[0], 10) &&
|
|
270
|
+
parsed.minor === parseInt(parts[1], 10)
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Multiple conditions with space (AND) - handle simple cases
|
|
276
|
+
if (range.includes(' ')) {
|
|
277
|
+
const conditions = range.split(/\s+/).filter(Boolean);
|
|
278
|
+
return conditions.every((r) => satisfies(version, r));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Fallback: try exact match
|
|
282
|
+
return compareVersions(version, range) === 0;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Find the best matching version from available versions
|
|
287
|
+
*/
|
|
288
|
+
function findBestVersion(versions: string[], range: string): string | null {
|
|
289
|
+
// Sort versions in descending order
|
|
290
|
+
const sorted = [...versions].sort((a, b) => compareVersions(b, a));
|
|
291
|
+
|
|
292
|
+
// Find the first version that satisfies the range
|
|
293
|
+
for (const version of sorted) {
|
|
294
|
+
if (satisfies(version, range)) {
|
|
295
|
+
return version;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Resolve all dependencies for a package
|
|
304
|
+
*/
|
|
305
|
+
export async function resolveDependencies(
|
|
306
|
+
packageName: string,
|
|
307
|
+
versionRange: string = 'latest',
|
|
308
|
+
options: ResolveOptions = {}
|
|
309
|
+
): Promise<Map<string, ResolvedPackage>> {
|
|
310
|
+
const registry = options.registry || new Registry();
|
|
311
|
+
const context: ResolveContext = {
|
|
312
|
+
registry,
|
|
313
|
+
resolved: new Map(),
|
|
314
|
+
resolving: new Set(),
|
|
315
|
+
options,
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
await resolvePackage(packageName, versionRange, context);
|
|
319
|
+
|
|
320
|
+
context.resolved.__nested = context.nested;
|
|
321
|
+
return context.resolved;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Resolve dependencies from a package.json
|
|
326
|
+
*/
|
|
327
|
+
export async function resolveFromPackageJson(
|
|
328
|
+
packageJson: {
|
|
329
|
+
dependencies?: Record<string, string>;
|
|
330
|
+
devDependencies?: Record<string, string>;
|
|
331
|
+
},
|
|
332
|
+
options: ResolveOptions = {}
|
|
333
|
+
): Promise<Map<string, ResolvedPackage>> {
|
|
334
|
+
const registry = options.registry || new Registry();
|
|
335
|
+
const context: ResolveContext = {
|
|
336
|
+
registry,
|
|
337
|
+
resolved: new Map(),
|
|
338
|
+
resolving: new Set(),
|
|
339
|
+
options,
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
const deps = { ...packageJson.dependencies };
|
|
343
|
+
|
|
344
|
+
if (options.includeDev && packageJson.devDependencies) {
|
|
345
|
+
Object.assign(deps, packageJson.devDependencies);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// A lockfile names every version up front, so every manifest the walk will
|
|
349
|
+
// ask for is known before it starts. Asked for one at a time, each a
|
|
350
|
+
// registry round trip, a 700-package tree spent a hundred seconds on
|
|
351
|
+
// metadata before a single tarball arrived. With pins in hand they are
|
|
352
|
+
// fetched together, thirty-two at a time, into the registry client's cache;
|
|
353
|
+
// the walk then finds each one already there. A pin whose manifest cannot
|
|
354
|
+
// be fetched is left to the walk, which reports it.
|
|
355
|
+
const __pins = globalThis.__browserRuntimeLockfilePins;
|
|
356
|
+
if (__pins instanceof Map && __pins.size > 0) {
|
|
357
|
+
const __names = [...__pins.keys()];
|
|
358
|
+
for (let __index = 0; __index < __names.length; __index += 32) {
|
|
359
|
+
await Promise.all(__names.slice(__index, __index + 32).map((name3) => registry.getPackageManifest(name3).catch(() => void 0)));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// The root's own dependencies are chosen first, each at the best version
|
|
363
|
+
// its own range allows, and only then are their dependencies walked. Walked
|
|
364
|
+
// in one pass, a dependency's narrower range for a name the root also
|
|
365
|
+
// names was met first and the root's range accepted what it had chosen:
|
|
366
|
+
// one package asked `>=19 <19.3` of react and the root's `^19.2.4` took
|
|
367
|
+
// 19.2.8 while react-dom went to 19.3.0, which React refuses to run. npm
|
|
368
|
+
// gives the root its version and nests the dependent's.
|
|
369
|
+
context.rootDeps = new Map();
|
|
370
|
+
for (const [name, range] of Object.entries(deps)) {
|
|
371
|
+
await resolvePackage(name, range, context, undefined, "choose");
|
|
372
|
+
}
|
|
373
|
+
for (const [name, range] of Object.entries(deps)) {
|
|
374
|
+
await resolvePackage(name, range, context, undefined, "descend");
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
context.resolved.__nested = context.nested;
|
|
378
|
+
return context.resolved;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Two versions of one package in one tree. The engine installs one version
|
|
383
|
+
* per name, flat, and a dependent whose range the top of the tree does not
|
|
384
|
+
* satisfy got the wrong one: React Router's build found semver 6 where
|
|
385
|
+
* normalize-package-data wanted 7. A lockfile records every version; a range
|
|
386
|
+
* the top does not satisfy takes the highest recorded version that does,
|
|
387
|
+
* installed under the dependent's own `node_modules`, where Node's walk up
|
|
388
|
+
* finds it first, and its own dependencies resolve from there.
|
|
389
|
+
*/
|
|
390
|
+
async function __browserRuntimeNest(packageName: string, versionRange: string, context: ResolveContext, parentKey: string | undefined, registryName: string = packageName): Promise<void> {
|
|
391
|
+
const records = globalThis.__browserRuntimeLockfileRecords;
|
|
392
|
+
const versions = records instanceof Map ? records.get(packageName) : void 0;
|
|
393
|
+
if (!versions) return;
|
|
394
|
+
const candidates = [...versions.keys()].filter((version2) => satisfies(version2, versionRange)).sort((a, b) => compareVersions(b, a));
|
|
395
|
+
const version = candidates[0];
|
|
396
|
+
if (!version) return;
|
|
397
|
+
const nestedKey = parentKey ? `${parentKey}/node_modules/${packageName}` : packageName;
|
|
398
|
+
context.nested ??= new Map();
|
|
399
|
+
if (context.nested.has(nestedKey) || context.resolving.has(nestedKey)) return;
|
|
400
|
+
context.resolving.add(nestedKey);
|
|
401
|
+
try {
|
|
402
|
+
const doc = versions.get(version)!;
|
|
403
|
+
// The lockfile's own tarball where it recorded one; else the registry's place for the name the registry knows, which an alias differs from.
|
|
404
|
+
const tarballUrl = doc.resolved || `${context.registry.registryFor(registryName)}/${encodePackageName(registryName)}/-/${registryName.slice(registryName.lastIndexOf("/") + 1)}-${version}.tgz`;
|
|
405
|
+
context.nested.set(nestedKey, { name: packageName, version, tarballUrl, dependencies: doc.dependencies || {} });
|
|
406
|
+
const deps: Record<string, string> = {};
|
|
407
|
+
if (doc.peerDependencies) {
|
|
408
|
+
const meta = doc.peerDependenciesMeta || {};
|
|
409
|
+
for (const [name2, range] of Object.entries(doc.peerDependencies)) {
|
|
410
|
+
if (!(meta[name2] && meta[name2].optional)) deps[name2] = range;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
Object.assign(deps, doc.dependencies);
|
|
414
|
+
if (context.options.includeOptional && doc.optionalDependencies) Object.assign(deps, doc.optionalDependencies);
|
|
415
|
+
for (const [depName, depRange] of Object.entries(deps)) {
|
|
416
|
+
await resolvePackage(depName, depRange, context, nestedKey);
|
|
417
|
+
}
|
|
418
|
+
} finally {
|
|
419
|
+
context.resolving.delete(nestedKey);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Recursively resolve a single package and its dependencies
|
|
425
|
+
*/
|
|
426
|
+
async function resolvePackage(
|
|
427
|
+
packageName: string,
|
|
428
|
+
versionRange: string,
|
|
429
|
+
context: ResolveContext,
|
|
430
|
+
__parent?: string,
|
|
431
|
+
phase?: "choose" | "descend"
|
|
432
|
+
): Promise<void> {
|
|
433
|
+
// The second pass over a root dependency: its dependencies, chosen in the first.
|
|
434
|
+
if (phase === "descend") {
|
|
435
|
+
const chosen = context.rootDeps?.get(packageName);
|
|
436
|
+
if (!chosen) return;
|
|
437
|
+
context.rootDeps!.delete(packageName);
|
|
438
|
+
await descendInto(packageName, chosen, context);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
// `"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"` installs wrap-ansi under the name
|
|
442
|
+
// wrap-ansi-cjs; dependency trees lean on this shape, and the range was read
|
|
443
|
+
// as a whole version range. The registry is asked for the package the alias
|
|
444
|
+
// names, its version chosen by the range after the `@`, and the result
|
|
445
|
+
// recorded under the alias, which is where the code that imports it looks.
|
|
446
|
+
let __registryName = packageName;
|
|
447
|
+
if (typeof versionRange === "string" && versionRange.startsWith("npm:")) {
|
|
448
|
+
const __spec = versionRange.slice(4);
|
|
449
|
+
const __at = __spec.lastIndexOf("@");
|
|
450
|
+
__registryName = __at > 0 ? __spec.slice(0, __at) : __spec;
|
|
451
|
+
versionRange = __at > 0 ? __spec.slice(__at + 1) : "latest";
|
|
452
|
+
}
|
|
453
|
+
const { registry, resolved, resolving, options } = context;
|
|
454
|
+
|
|
455
|
+
// Create a key for this package request
|
|
456
|
+
const key = `${packageName}@${versionRange}`;
|
|
457
|
+
|
|
458
|
+
// Check if we're already resolving this (circular dependency)
|
|
459
|
+
if (resolving.has(key)) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// Check if we've already resolved a compatible version
|
|
464
|
+
if (resolved.has(packageName)) {
|
|
465
|
+
const existing = resolved.get(packageName)!;
|
|
466
|
+
if (satisfies(existing.version, versionRange)) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
await __browserRuntimeNest(packageName, versionRange, context, __parent, typeof __registryName === "string" ? __registryName : packageName);
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
resolving.add(key);
|
|
474
|
+
|
|
475
|
+
try {
|
|
476
|
+
options.onProgress?.(`Resolving ${packageName}@${versionRange}`);
|
|
477
|
+
|
|
478
|
+
// Fetch package manifest
|
|
479
|
+
const manifest = await registry.getPackageManifest(__registryName);
|
|
480
|
+
|
|
481
|
+
// Find best matching version
|
|
482
|
+
const versions = Object.keys(manifest.versions);
|
|
483
|
+
let targetVersion: string;
|
|
484
|
+
|
|
485
|
+
// A lockfile pins this walk. Where the page has read a lockfile for the
|
|
486
|
+
// project being installed, the version it recorded is taken instead of
|
|
487
|
+
// the best match for the range, so an install is the install the project
|
|
488
|
+
// recorded, whichever manager wrote it. A name the lockfile does not
|
|
489
|
+
// carry resolves by range, below, as before.
|
|
490
|
+
const __pinned = globalThis.__browserRuntimeLockfilePins;
|
|
491
|
+
const __pin = __pinned instanceof Map ? __pinned.get(__registryName) : void 0;
|
|
492
|
+
if (typeof __pin === "string" && manifest.versions[__pin]) {
|
|
493
|
+
const versionData2 = manifest.versions[__pin];
|
|
494
|
+
const resolvedPackage2: ResolvedPackage = {
|
|
495
|
+
name: packageName,
|
|
496
|
+
version: __pin,
|
|
497
|
+
tarballUrl: versionData2.dist.tarball,
|
|
498
|
+
dependencies: versionData2.dependencies || {}
|
|
499
|
+
};
|
|
500
|
+
resolved.set(packageName, resolvedPackage2);
|
|
501
|
+
const deps2: Record<string, string> = {};
|
|
502
|
+
if (versionData2.peerDependencies) {
|
|
503
|
+
const meta2 = versionData2.peerDependenciesMeta || {};
|
|
504
|
+
for (const [name3, range2] of Object.entries(versionData2.peerDependencies)) {
|
|
505
|
+
if (!(meta2[name3] == null ? void 0 : meta2[name3].optional)) deps2[name3] = range2;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
Object.assign(deps2, versionData2.dependencies);
|
|
509
|
+
if (options.includeOptional && versionData2.optionalDependencies) {
|
|
510
|
+
Object.assign(deps2, versionData2.optionalDependencies);
|
|
511
|
+
}
|
|
512
|
+
if (phase === "choose") context.rootDeps!.set(packageName, deps2);
|
|
513
|
+
else await descendInto(packageName, deps2, context);
|
|
514
|
+
// The top of the tree is the lockfile's pin; a dependent whose range
|
|
515
|
+
// it does not satisfy gets the version the lockfile recorded for it, nested.
|
|
516
|
+
if (!satisfies(__pin, versionRange)) await __browserRuntimeNest(packageName, versionRange, context, __parent, __registryName);
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
if (versionRange === 'latest' || versionRange === '*') {
|
|
521
|
+
targetVersion = manifest['dist-tags'].latest;
|
|
522
|
+
} else if (manifest['dist-tags'][versionRange]) {
|
|
523
|
+
targetVersion = manifest['dist-tags'][versionRange];
|
|
524
|
+
} else {
|
|
525
|
+
const best = findBestVersion(versions, versionRange);
|
|
526
|
+
if (!best) {
|
|
527
|
+
throw new Error(
|
|
528
|
+
`No matching version found for ${packageName}@${versionRange}`
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
targetVersion = best;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Get version metadata
|
|
535
|
+
const versionData = manifest.versions[targetVersion];
|
|
536
|
+
|
|
537
|
+
// Store resolved package
|
|
538
|
+
const resolvedPackage: ResolvedPackage = {
|
|
539
|
+
name: packageName,
|
|
540
|
+
version: targetVersion,
|
|
541
|
+
tarballUrl: versionData.dist.tarball,
|
|
542
|
+
dependencies: versionData.dependencies || {},
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
resolved.set(packageName, resolvedPackage);
|
|
546
|
+
|
|
547
|
+
// Resolve dependencies in parallel
|
|
548
|
+
// Include non-optional peerDependencies (npm v7+ behavior).
|
|
549
|
+
// Peer deps marked optional in peerDependenciesMeta are skipped.
|
|
550
|
+
const deps: Record<string, string> = {};
|
|
551
|
+
|
|
552
|
+
if (versionData.peerDependencies) {
|
|
553
|
+
const meta = versionData.peerDependenciesMeta || {};
|
|
554
|
+
for (const [name, range] of Object.entries(versionData.peerDependencies)) {
|
|
555
|
+
if (!meta[name]?.optional) {
|
|
556
|
+
deps[name] = range;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// Regular dependencies override peer deps
|
|
562
|
+
Object.assign(deps, versionData.dependencies);
|
|
563
|
+
|
|
564
|
+
if (options.includeOptional && versionData.optionalDependencies) {
|
|
565
|
+
Object.assign(deps, versionData.optionalDependencies);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (phase === "choose") context.rootDeps!.set(packageName, deps);
|
|
569
|
+
else await descendInto(packageName, deps, context);
|
|
570
|
+
} finally {
|
|
571
|
+
resolving.delete(key);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/** Resolves a package's dependencies, a few at a time. */
|
|
576
|
+
async function descendInto(packageName: string, deps: Record<string, string>, context: ResolveContext): Promise<void> {
|
|
577
|
+
const depEntries = Object.entries(deps);
|
|
578
|
+
if (depEntries.length === 0) return;
|
|
579
|
+
const CONCURRENCY = 8;
|
|
580
|
+
for (let i = 0; i < depEntries.length; i += CONCURRENCY) {
|
|
581
|
+
const batch = depEntries.slice(i, i + CONCURRENCY);
|
|
582
|
+
await Promise.all(
|
|
583
|
+
batch.map(([depName, depRange]) => resolvePackage(depName, depRange, context, packageName))
|
|
584
|
+
);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Export utilities for testing
|
|
589
|
+
export { parseVersion, compareVersions, satisfies, findBestVersion };
|