@socketsecurity/lib 6.0.5 → 6.0.7
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/CHANGELOG.md +43 -0
- package/dist/ai/discover.d.mts +2 -2
- package/dist/ai/discover.js +6 -4
- package/dist/ai/spawn.js +10 -6
- package/dist/ai/types.d.mts +18 -6
- package/dist/ai/worktree.d.mts +6 -6
- package/dist/ai/worktree.js +12 -7
- package/dist/ansi/strip.d.ts +1 -1
- package/dist/ansi/strip.js +0 -2
- package/dist/archives/_internal.js +7 -9
- package/dist/archives/extract.js +1 -1
- package/dist/archives/tar.js +6 -6
- package/dist/archives/zip.js +4 -6
- package/dist/argv/flag-predicates.d.ts +12 -12
- package/dist/argv/flag-predicates.js +17 -17
- package/dist/argv/flag-types.d.ts +18 -18
- package/dist/argv/flag-types.js +4 -4
- package/dist/argv/parse.d.ts +1 -1
- package/dist/arrays/_internal.js +11 -12
- package/dist/arrays/chunk.js +0 -1
- package/dist/arrays/join.d.ts +37 -3
- package/dist/arrays/join.js +43 -7
- package/dist/arrays/unique.js +0 -1
- package/dist/bin/_internal.d.ts +1 -1
- package/dist/bin/_internal.js +1 -1
- package/dist/bin/acorn-bindgen.cjs +769 -0
- package/dist/bin/acorn.wasm +0 -0
- package/dist/bin/exec.js +2 -3
- package/dist/bin/find.js +13 -13
- package/dist/bin/prim.cjs +39244 -0
- package/dist/bin/resolve.js +12 -13
- package/dist/bin/which.js +8 -8
- package/dist/cache/ttl/store.js +5 -5
- package/dist/checks/primordials-defaults.d.ts +3 -3
- package/dist/checks/primordials-defaults.js +3 -3
- package/dist/checks/primordials.js +4 -3
- package/dist/{bin → cli}/check-primordials.d.ts +11 -11
- package/dist/{bin → cli}/check-primordials.js +56 -52
- package/dist/{bin → cli}/check.js +6 -5
- package/dist/{bin → cli}/socket-lib.d.ts +1 -1
- package/dist/{bin → cli}/socket-lib.js +4 -4
- package/dist/colors/socket-palette.js +7 -9
- package/dist/compression/_internal.d.ts +12 -12
- package/dist/compression/_internal.js +20 -19
- package/dist/compression/brotli.d.ts +25 -25
- package/dist/compression/brotli.js +37 -44
- package/dist/compression/gzip.d.ts +23 -23
- package/dist/compression/gzip.js +44 -52
- package/dist/constants/agents.d.ts +3 -1
- package/dist/constants/agents.js +15 -11
- package/dist/constants/licenses.js +3 -3
- package/dist/constants/node.d.ts +23 -0
- package/dist/constants/node.js +47 -15
- package/dist/constants/packages.js +22 -28
- package/dist/constants/platform.d.ts +30 -3
- package/dist/constants/platform.js +72 -12
- package/dist/constants/runtime.d.ts +22 -0
- package/dist/constants/runtime.js +32 -0
- package/dist/constants/socket.js +1 -1
- package/dist/cover/code.js +8 -8
- package/dist/cover/formatters.js +5 -5
- package/dist/crypto/hash.d.ts +26 -1
- package/dist/crypto/hash.js +43 -12
- package/dist/debug/_internal.js +4 -6
- package/dist/debug/caller-info.js +2 -3
- package/dist/debug/namespace.d.ts +7 -0
- package/dist/debug/namespace.js +21 -12
- package/dist/debug/output.js +21 -24
- package/dist/debug/types.d.ts +4 -4
- package/dist/dlx/arborist.js +6 -6
- package/dist/dlx/binary-cache.js +14 -14
- package/dist/dlx/binary-download.d.ts +1 -1
- package/dist/dlx/binary-download.js +14 -13
- package/dist/dlx/binary-resolution.js +16 -14
- package/dist/dlx/binary-types.d.ts +5 -5
- package/dist/dlx/binary.js +5 -5
- package/dist/dlx/cache.js +1 -1
- package/dist/dlx/detect.d.ts +34 -25
- package/dist/dlx/detect.js +86 -77
- package/dist/dlx/dir.js +2 -2
- package/dist/dlx/firewall.d.ts +1 -1
- package/dist/dlx/lockfile.d.ts +19 -18
- package/dist/dlx/lockfile.js +16 -16
- package/dist/dlx/manifest.d.ts +6 -6
- package/dist/dlx/manifest.js +5 -5
- package/dist/dlx/package.d.ts +10 -10
- package/dist/dlx/package.js +16 -16
- package/dist/dlx/packages.js +4 -4
- package/dist/dlx/paths.js +7 -7
- package/dist/dlx/spec.js +1 -1
- package/dist/dlx/types.d.ts +28 -27
- package/dist/eco/cargo/parse-lockfile.d.ts +1 -1
- package/dist/eco/cargo/parse-lockfile.js +2 -2
- package/dist/eco/manifest/analyze-lockfile.js +2 -2
- package/dist/eco/manifest/detect-format.js +4 -4
- package/dist/eco/manifest/find-packages.js +2 -2
- package/dist/eco/manifest/get-package-versions.js +2 -2
- package/dist/eco/manifest/get-package.js +2 -2
- package/dist/eco/manifest/parse-lockfile.js +2 -2
- package/dist/eco/manifest/parse-manifest.js +2 -2
- package/dist/eco/manifest/parse.js +2 -2
- package/dist/eco/npm/npm/exec.js +2 -2
- package/dist/eco/npm/npm/flags.js +7 -12
- package/dist/eco/npm/npm/parse-lockfile.d.ts +14 -14
- package/dist/eco/npm/npm/parse-lockfile.js +3 -3
- package/dist/eco/npm/parse-package-json.js +3 -3
- package/dist/eco/npm/pnpm/exec.d.ts +1 -1
- package/dist/eco/npm/pnpm/exec.js +5 -5
- package/dist/eco/npm/pnpm/flags.js +0 -3
- package/dist/eco/npm/pnpm/parse-lockfile.d.ts +1 -1
- package/dist/eco/npm/pnpm/parse-lockfile.js +4 -4
- package/dist/eco/npm/script.js +9 -6
- package/dist/eco/npm/yarnpkg/yarn/exec.js +3 -3
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +2 -2
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +8 -8
- package/dist/effects/pulse-frames.d.ts +3 -1
- package/dist/effects/shimmer-keyframes.d.ts +1 -1
- package/dist/effects/shimmer-terminal.d.ts +1 -1
- package/dist/env/boolean.js +0 -1
- package/dist/env/ci.js +0 -1
- package/dist/env/debug.js +0 -1
- package/dist/env/github-status.d.ts +51 -0
- package/dist/env/github-status.js +90 -0
- package/dist/env/github.js +0 -8
- package/dist/env/home.js +0 -1
- package/dist/env/locale.js +0 -3
- package/dist/env/node-auth-token.js +0 -1
- package/dist/env/node-env.js +0 -1
- package/dist/env/node-version-managers.d.ts +53 -0
- package/dist/env/node-version-managers.js +90 -0
- package/dist/env/npm.js +0 -5
- package/dist/env/number.js +0 -1
- package/dist/env/package-manager.js +3 -6
- package/dist/env/path.js +0 -1
- package/dist/env/pre-commit.js +1 -2
- package/dist/env/rewire.d.ts +7 -6
- package/dist/env/rewire.js +15 -16
- package/dist/env/shell.js +0 -1
- package/dist/env/socket-cli.js +5 -18
- package/dist/env/socket-mcp.d.ts +114 -0
- package/dist/env/socket-mcp.js +146 -0
- package/dist/env/socket.d.ts +1 -109
- package/dist/env/socket.js +12 -166
- package/dist/env/string.js +0 -1
- package/dist/env/temp-dir.js +0 -3
- package/dist/env/term.js +0 -1
- package/dist/env/test.js +3 -6
- package/dist/env/windows.js +0 -4
- package/dist/env/xdg.js +0 -3
- package/dist/events/exit/_internal.d.ts +11 -9
- package/dist/events/exit/_internal.js +31 -35
- package/dist/events/exit/handler.js +3 -4
- package/dist/events/exit/intercept.js +4 -6
- package/dist/events/exit/lifecycle.js +16 -18
- package/dist/events/exit/signals.js +1 -2
- package/dist/events/exit/types.d.ts +6 -5
- package/dist/external/@npmcli/package-json.js +2 -2
- package/dist/external/@sinclair/typebox/value.js +5 -1
- package/dist/external/@sinclair/typebox.js +5 -1
- package/dist/external/@socketregistry/packageurl-js.js +27 -0
- package/dist/external/npm-pack.js +2 -2
- package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
- package/dist/external-tools/bazel/resolve.js +2 -1
- package/dist/external-tools/bazel/types.d.ts +1 -1
- package/dist/external-tools/cdxgen/from-vfs.js +1 -1
- package/dist/external-tools/cdxgen/resolve.js +2 -1
- package/dist/external-tools/cdxgen/types.d.ts +1 -1
- package/dist/external-tools/from-download.d.ts +1 -1
- package/dist/external-tools/from-download.js +1 -1
- package/dist/external-tools/from-pip-venv.d.ts +73 -0
- package/dist/external-tools/from-pip-venv.js +98 -0
- package/dist/external-tools/janus/asset-names.js +1 -1
- package/dist/external-tools/janus/from-download.js +3 -5
- package/dist/external-tools/janus/from-vfs.js +1 -1
- package/dist/external-tools/janus/resolve.js +2 -1
- package/dist/external-tools/janus/types.d.ts +1 -1
- package/dist/external-tools/jre/detect-platform-arch.d.ts +10 -6
- package/dist/external-tools/jre/detect-platform-arch.js +29 -14
- package/dist/external-tools/jre/from-download.js +2 -1
- package/dist/external-tools/jre/from-vfs.js +1 -1
- package/dist/external-tools/jre/resolve.js +2 -1
- package/dist/external-tools/jre/types.d.ts +1 -1
- package/dist/external-tools/manifest.d.ts +7 -7
- package/dist/external-tools/manifest.js +18 -16
- package/dist/external-tools/opengrep/from-vfs.js +1 -1
- package/dist/external-tools/opengrep/resolve.js +2 -1
- package/dist/external-tools/opengrep/types.d.ts +1 -1
- package/dist/external-tools/python/asset-names.d.ts +76 -0
- package/dist/external-tools/python/asset-names.js +104 -0
- package/dist/external-tools/python/dlx.d.ts +80 -0
- package/dist/external-tools/python/dlx.js +87 -0
- package/dist/external-tools/python/from-download.d.ts +53 -0
- package/dist/external-tools/python/from-download.js +68 -0
- package/dist/external-tools/python/from-path.d.ts +7 -0
- package/dist/external-tools/python/from-path.js +23 -0
- package/dist/external-tools/python/pin.d.ts +121 -0
- package/dist/external-tools/python/pin.js +173 -0
- package/dist/external-tools/python/pip-install.d.ts +75 -0
- package/dist/external-tools/python/pip-install.js +139 -0
- package/dist/external-tools/python/resolve.d.ts +42 -0
- package/dist/external-tools/python/resolve.js +58 -0
- package/dist/external-tools/python/types.d.ts +49 -0
- package/dist/external-tools/sbt/from-vfs.js +1 -1
- package/dist/external-tools/sbt/resolve.js +2 -1
- package/dist/external-tools/sbt/types.d.ts +1 -1
- package/dist/external-tools/skillspector/from-dlx.d.ts +24 -0
- package/dist/external-tools/skillspector/from-dlx.js +41 -0
- package/dist/external-tools/skillspector/from-path.d.ts +8 -0
- package/dist/external-tools/skillspector/from-path.js +30 -0
- package/dist/external-tools/skillspector/from-vfs.d.ts +8 -0
- package/dist/external-tools/skillspector/from-vfs.js +27 -0
- package/dist/external-tools/skillspector/resolve.d.ts +34 -0
- package/dist/external-tools/skillspector/resolve.js +53 -0
- package/dist/external-tools/skillspector/types.d.ts +24 -0
- package/dist/external-tools/skillspector/types.js +2 -0
- package/dist/external-tools/synp/from-download.js +2 -2
- package/dist/external-tools/synp/from-vfs.js +1 -1
- package/dist/external-tools/synp/resolve.js +2 -1
- package/dist/external-tools/trivy/from-vfs.js +1 -1
- package/dist/external-tools/trivy/resolve.js +2 -1
- package/dist/external-tools/trivy/types.d.ts +1 -1
- package/dist/external-tools/trufflehog/from-vfs.js +1 -1
- package/dist/external-tools/trufflehog/resolve.js +2 -1
- package/dist/external-tools/trufflehog/types.d.ts +1 -1
- package/dist/fs/_internal.d.ts +1 -1
- package/dist/fs/_internal.js +7 -7
- package/dist/fs/access.js +5 -9
- package/dist/fs/{path-cache.js → allowed-dirs-cache.js} +1 -1
- package/dist/fs/encoding.js +5 -7
- package/dist/fs/{find-up.js → find.js} +11 -13
- package/dist/fs/inspect.js +7 -13
- package/dist/fs/read-dir.js +7 -10
- package/dist/fs/read-file.js +8 -14
- package/dist/fs/read-json-cache.d.ts +6 -4
- package/dist/fs/read-json-cache.js +9 -6
- package/dist/fs/read-json.js +4 -6
- package/dist/fs/resolve-module.js +1 -1
- package/dist/fs/safe.d.ts +1 -1
- package/dist/fs/safe.js +12 -13
- package/dist/fs/unique.js +4 -5
- package/dist/fs/validate.js +1 -2
- package/dist/fs/write-json.js +4 -5
- package/dist/git/_internal.js +12 -11
- package/dist/git/changed.js +4 -4
- package/dist/git/repo.js +3 -3
- package/dist/git/staged.js +4 -4
- package/dist/git/unstaged.js +4 -4
- package/dist/github/ghsa.js +2 -2
- package/dist/github/refs-cache.d.ts +1 -1
- package/dist/github/refs-cache.js +5 -5
- package/dist/github/refs-rest.js +5 -5
- package/dist/github/{fetch.js → request.js} +13 -2
- package/dist/github/token.js +1 -1
- package/dist/github/types.d.ts +1 -1
- package/dist/globs/_internal.js +7 -9
- package/dist/globs/match.js +6 -7
- package/dist/globs/matcher.d.ts +3 -3
- package/dist/globs/matcher.js +12 -14
- package/dist/globs/stream.js +1 -2
- package/dist/globs/types.d.ts +24 -24
- package/dist/http-request/_internal.d.ts +1 -1
- package/dist/http-request/browser.js +21 -13
- package/dist/http-request/checksum-file.d.ts +55 -0
- package/dist/http-request/checksum-file.js +95 -0
- package/dist/http-request/download-types.d.ts +15 -23
- package/dist/http-request/download.js +4 -4
- package/dist/http-request/headers.d.ts +32 -3
- package/dist/http-request/headers.js +41 -13
- package/dist/http-request/request-attempt.js +38 -33
- package/dist/http-request/request-types.d.ts +7 -2
- package/dist/http-request/request.js +33 -16
- package/dist/http-request/response-reader.d.ts +12 -1
- package/dist/http-request/response-reader.js +22 -2
- package/dist/http-request/user-agent.js +3 -4
- package/dist/integrity.d.ts +86 -18
- package/dist/integrity.js +119 -30
- package/dist/ipc/directory.js +2 -2
- package/dist/ipc/paths.js +1 -1
- package/dist/ipc/write.js +1 -1
- package/dist/ipc-cli/get.js +12 -12
- package/dist/json/edit.js +13 -14
- package/dist/json/format.js +2 -2
- package/dist/json/parse.d.ts +1 -1
- package/dist/json/parse.js +3 -7
- package/dist/logger/_internal.d.ts +4 -4
- package/dist/logger/_internal.js +3 -3
- package/dist/logger/colors.js +4 -3
- package/dist/logger/console-methods.d.ts +132 -0
- package/dist/logger/console-methods.js +169 -0
- package/dist/logger/console.d.ts +12 -0
- package/dist/logger/console.js +42 -11
- package/dist/logger/indentation-methods.d.ts +81 -0
- package/dist/logger/indentation-methods.js +121 -0
- package/dist/logger/node.d.ts +16 -338
- package/dist/logger/node.js +75 -608
- package/dist/logger/options.d.ts +39 -0
- package/dist/logger/options.js +47 -0
- package/dist/logger/semantic-methods.d.ts +63 -0
- package/dist/logger/semantic-methods.js +108 -0
- package/dist/logger/stream-methods.d.ts +63 -0
- package/dist/logger/stream-methods.js +101 -0
- package/dist/logger/stream.d.ts +37 -0
- package/dist/logger/stream.js +42 -0
- package/dist/logger/symbols-builder.js +9 -9
- package/dist/logger/symbols.d.ts +2 -25
- package/dist/logger/symbols.js +53 -74
- package/dist/logger/types.d.ts +1 -1
- package/dist/memo/types.d.ts +6 -6
- package/dist/native-messaging/host.d.ts +20 -0
- package/dist/native-messaging/host.js +120 -0
- package/dist/native-messaging/index.d.ts +5 -0
- package/dist/native-messaging/index.js +22 -0
- package/dist/native-messaging/install.d.ts +60 -0
- package/dist/native-messaging/install.js +141 -0
- package/dist/native-messaging/rate-limit.d.ts +62 -0
- package/dist/native-messaging/rate-limit.js +115 -0
- package/dist/native-messaging/run.d.ts +10 -0
- package/dist/native-messaging/run.js +17 -0
- package/dist/node/async-hooks.js +4 -3
- package/dist/node/child-process.js +4 -3
- package/dist/node/crypto.js +4 -3
- package/dist/node/events.js +4 -3
- package/dist/node/fs-promises.js +4 -3
- package/dist/node/fs.js +4 -3
- package/dist/node/http.js +4 -3
- package/dist/node/https.js +4 -3
- package/dist/node/module.js +10 -6
- package/dist/node/os.js +4 -3
- package/dist/node/path.js +4 -3
- package/dist/node/timers-promises.js +4 -3
- package/dist/node/url.js +4 -3
- package/dist/node/util.js +4 -3
- package/dist/objects/getters.js +5 -7
- package/dist/objects/inspect.js +1 -4
- package/dist/objects/mutate.js +2 -3
- package/dist/objects/predicates.js +0 -4
- package/dist/objects/sort.js +3 -7
- package/dist/packages/edit-class.js +15 -16
- package/dist/packages/edit.js +12 -14
- package/dist/packages/exports.js +11 -17
- package/dist/packages/fetch.d.ts +16 -0
- package/dist/packages/fetch.js +81 -0
- package/dist/packages/find.d.ts +55 -0
- package/dist/packages/find.js +65 -0
- package/dist/packages/isolation.js +14 -14
- package/dist/packages/licenses.js +16 -16
- package/dist/packages/manifest.js +12 -15
- package/dist/packages/metadata-extensions.d.ts +14 -0
- package/dist/packages/metadata-extensions.js +43 -0
- package/dist/packages/normalize.js +5 -9
- package/dist/packages/provenance.d.ts +6 -0
- package/dist/packages/provenance.js +25 -18
- package/dist/packages/read.d.ts +29 -0
- package/dist/packages/read.js +66 -0
- package/dist/packages/specs.d.ts +48 -1
- package/dist/packages/specs.js +74 -11
- package/dist/packages/tarball.d.ts +24 -0
- package/dist/packages/tarball.js +79 -0
- package/dist/packages/types.d.ts +21 -20
- package/dist/packages/validation.js +0 -3
- package/dist/paths/_internal.d.ts +2 -1
- package/dist/paths/_internal.js +7 -19
- package/dist/paths/conversion.js +5 -9
- package/dist/paths/filenames.d.ts +0 -1
- package/dist/paths/filenames.js +0 -2
- package/dist/paths/normalize.js +6 -5
- package/dist/paths/packages.js +4 -7
- package/dist/paths/predicates.js +9 -16
- package/dist/paths/resolve.js +11 -14
- package/dist/paths/rewire.js +3 -3
- package/dist/paths/socket.js +16 -16
- package/dist/paths/walk.d.ts +1 -1
- package/dist/paths/walk.js +4 -4
- package/dist/perf/report.js +2 -2
- package/dist/perf/types.d.ts +1 -1
- package/dist/pkg-ext/data.js +1 -1
- package/dist/primordials/array.js +9 -9
- package/dist/primordials/date.js +2 -2
- package/dist/primordials/error.js +3 -3
- package/dist/primordials/headers.d.ts +10 -0
- package/dist/primordials/headers.js +23 -0
- package/dist/primordials/intl.d.ts +13 -0
- package/dist/primordials/intl.js +26 -0
- package/dist/primordials/math.js +33 -33
- package/dist/primordials/number.js +9 -9
- package/dist/primordials/object.js +5 -5
- package/dist/primordials/string.d.ts +2 -2
- package/dist/primordials/string.js +6 -6
- package/dist/primordials/symbol.js +3 -3
- package/dist/primordials/uncurry.js +9 -9
- package/dist/process/abort.js +3 -3
- package/dist/process/lock-manager.js +8 -8
- package/dist/process/spawn/_internal.js +6 -8
- package/dist/process/spawn/child.js +14 -14
- package/dist/process/spawn/errors.js +2 -4
- package/dist/process/spawn/kill-tree.d.ts +53 -0
- package/dist/process/spawn/kill-tree.js +85 -0
- package/dist/process/spawn/stdio.js +0 -1
- package/dist/process/spawn/types.d.ts +5 -5
- package/dist/process/transient.js +2 -2
- package/dist/promises/_internal.d.ts +2 -1
- package/dist/promises/_internal.js +2 -6
- package/dist/promises/iterate.js +12 -16
- package/dist/promises/options.js +3 -6
- package/dist/promises/retry.js +4 -5
- package/dist/promises/timers.d.ts +30 -0
- package/dist/promises/timers.js +48 -0
- package/dist/releases/github-archives.d.ts +6 -6
- package/dist/releases/github-archives.js +2 -2
- package/dist/releases/github-asset-url.d.ts +1 -1
- package/dist/releases/github-asset-url.js +5 -5
- package/dist/releases/github-downloads.d.ts +1 -1
- package/dist/releases/github-downloads.js +3 -3
- package/dist/releases/github-listing.d.ts +11 -2
- package/dist/releases/github-listing.js +20 -7
- package/dist/releases/github-retry-config.js +1 -1
- package/dist/releases/github-types.d.ts +6 -6
- package/dist/releases/socket-btm-binary-naming.d.ts +107 -0
- package/dist/releases/socket-btm-binary-naming.js +155 -0
- package/dist/releases/socket-btm.d.ts +8 -115
- package/dist/releases/socket-btm.js +16 -159
- package/dist/schema/types.d.ts +1 -1
- package/dist/sea/detect.js +6 -6
- package/dist/secrets/_internal.d.ts +2 -2
- package/dist/secrets/_internal.js +5 -4
- package/dist/secrets/compare.d.ts +45 -0
- package/dist/secrets/compare.js +61 -0
- package/dist/secrets/keychain.js +9 -6
- package/dist/secrets/linux.js +25 -23
- package/dist/secrets/macos.d.ts +1 -1
- package/dist/secrets/macos.js +18 -16
- package/dist/secrets/rc.d.ts +2 -2
- package/dist/secrets/rc.js +15 -10
- package/dist/secrets/socket-api-token.d.ts +4 -4
- package/dist/secrets/socket-api-token.js +18 -9
- package/dist/secrets/windows.js +21 -17
- package/dist/shadow/skip.js +2 -2
- package/dist/shell/parse.d.ts +108 -1
- package/dist/shell/parse.js +168 -2
- package/dist/smol/detect.js +9 -10
- package/dist/smol/http.js +6 -7
- package/dist/smol/https.js +6 -7
- package/dist/smol/manifest.d.ts +1 -1
- package/dist/smol/manifest.js +6 -7
- package/dist/smol/path.d.ts +1 -1
- package/dist/smol/path.js +7 -8
- package/dist/smol/primordial.d.ts +4 -0
- package/dist/smol/primordial.js +6 -7
- package/dist/smol/purl.d.ts +1 -1
- package/dist/smol/purl.js +7 -8
- package/dist/smol/versions.js +6 -7
- package/dist/smol/vfs.js +6 -7
- package/dist/sorts/_internal.js +6 -8
- package/dist/sorts/natural.js +10 -12
- package/dist/sorts/semver.js +1 -2
- package/dist/sorts/strings.js +0 -1
- package/dist/sorts/types.d.ts +1 -1
- package/dist/spinner/create-spinner-class.d.ts +38 -0
- package/dist/spinner/create-spinner-class.js +302 -0
- package/dist/spinner/default.js +8 -9
- package/dist/spinner/spinner-internals.d.ts +36 -0
- package/dist/spinner/spinner-internals.js +101 -0
- package/dist/spinner/spinner-shimmer-methods.d.ts +54 -0
- package/dist/spinner/spinner-shimmer-methods.js +143 -0
- package/dist/spinner/spinner-status-methods.d.ts +40 -0
- package/dist/spinner/spinner-status-methods.js +133 -0
- package/dist/spinner/spinner.d.ts +4 -5
- package/dist/spinner/spinner.js +18 -705
- package/dist/spinner/types.d.ts +3 -1
- package/dist/spinner/with.d.ts +10 -0
- package/dist/spinner/with.js +16 -2
- package/dist/stdio/divider.js +1 -1
- package/dist/stdio/footer.js +3 -3
- package/dist/stdio/header.js +4 -4
- package/dist/stdio/progress.js +5 -5
- package/dist/stdio/prompts.d.ts +5 -3
- package/dist/stdio/prompts.js +6 -7
- package/dist/stdio/stdout.js +3 -3
- package/dist/streams/parallel.js +3 -5
- package/dist/streams/transform.js +2 -3
- package/dist/strings/format.js +2 -6
- package/dist/strings/predicates.js +0 -2
- package/dist/strings/search.js +1 -2
- package/dist/strings/transform.js +0 -3
- package/dist/strings/width.js +9 -10
- package/dist/tables/bordered.js +4 -3
- package/dist/tables/padding.js +1 -1
- package/dist/tables/simple.js +8 -5
- package/dist/temporal/instant.js +4 -2
- package/dist/temporal/slots.js +7 -6
- package/dist/temporal/system.js +9 -9
- package/dist/themes/context.d.ts +3 -2
- package/dist/themes/context.js +4 -5
- package/dist/themes/themes.js +15 -15
- package/dist/themes/types.d.ts +3 -3
- package/dist/url/parse.js +0 -2
- package/dist/url/predicates.js +1 -2
- package/dist/url/search-params.js +3 -9
- package/dist/url/types.d.ts +5 -5
- package/dist/versions/_internal.js +3 -3
- package/dist/words/article.js +0 -1
- package/dist/words/capitalize.js +0 -1
- package/dist/words/pluralize.d.ts +24 -2
- package/dist/words/pluralize.js +47 -2
- package/dist/words/types.d.ts +25 -2
- package/package.json +289 -108
- package/dist/external-tools/uv/asset-names.d.ts +0 -36
- package/dist/external-tools/uv/asset-names.js +0 -70
- package/dist/external-tools/uv/from-download.d.ts +0 -17
- package/dist/external-tools/uv/from-download.js +0 -47
- package/dist/external-tools/uv/from-path.d.ts +0 -5
- package/dist/external-tools/uv/from-path.js +0 -22
- package/dist/external-tools/uv/from-vfs.d.ts +0 -7
- package/dist/external-tools/uv/from-vfs.js +0 -26
- package/dist/external-tools/uv/resolve.d.ts +0 -25
- package/dist/external-tools/uv/resolve.js +0 -52
- package/dist/external-tools/uv/types.d.ts +0 -24
- package/dist/http-request/checksums.d.ts +0 -69
- package/dist/http-request/checksums.js +0 -108
- package/dist/http-request/http-request.d.ts +0 -12
- package/dist/http-request/http-request.js +0 -11
- package/dist/packages/operations.d.ts +0 -113
- package/dist/packages/operations.js +0 -304
- package/dist/ssri/convert.d.ts +0 -48
- package/dist/ssri/convert.js +0 -69
- package/dist/ssri/parse.d.ts +0 -27
- package/dist/ssri/parse.js +0 -41
- package/dist/ssri/validate.d.ts +0 -41
- package/dist/ssri/validate.js +0 -56
- /package/dist/{bin → cli}/check.d.ts +0 -0
- /package/dist/external-tools/{uv → python}/types.js +0 -0
- /package/dist/fs/{path-cache.d.ts → allowed-dirs-cache.d.ts} +0 -0
- /package/dist/fs/{find-up.d.ts → find.d.ts} +0 -0
- /package/dist/github/{fetch.d.ts → request.d.ts} +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_constants_platform = require('../../constants/platform.js');
|
|
6
|
+
const require_primordials_object = require('../../primordials/object.js');
|
|
7
|
+
let node_process = require("node:process");
|
|
8
|
+
node_process = require_runtime.__toESM(node_process);
|
|
9
|
+
|
|
10
|
+
//#region src/external-tools/python/asset-names.ts
|
|
11
|
+
/**
|
|
12
|
+
* @file Python-build-standalone release asset mapping. Astral publishes
|
|
13
|
+
* per-platform CPython archives under
|
|
14
|
+
* https://github.com/astral-sh/python-build-standalone/releases/download/<tag>/.
|
|
15
|
+
* Asset name shape: `cpython-<version>+<tag>-<triple>-install_only.tar.gz`.
|
|
16
|
+
* The `install_only` flavor is a relocatable runtime (no build artifacts),
|
|
17
|
+
* extracted one directory deep (`python/bin/python3`).
|
|
18
|
+
*/
|
|
19
|
+
const PLATFORM_TRIPLES = require_primordials_object.ObjectFreeze({
|
|
20
|
+
__proto__: null,
|
|
21
|
+
"darwin-arm64": "aarch64-apple-darwin",
|
|
22
|
+
"darwin-x64": "x86_64-apple-darwin",
|
|
23
|
+
"linux-arm64": "aarch64-unknown-linux-gnu",
|
|
24
|
+
"linux-arm64-musl": "aarch64-unknown-linux-musl",
|
|
25
|
+
"linux-x64": "x86_64-unknown-linux-gnu",
|
|
26
|
+
"linux-x64-musl": "x86_64-unknown-linux-musl",
|
|
27
|
+
"win-arm64": "aarch64-pc-windows-msvc",
|
|
28
|
+
"win-x64": "x86_64-pc-windows-msvc"
|
|
29
|
+
});
|
|
30
|
+
const NODE_PLATFORM_TO_PY = require_primordials_object.ObjectFreeze({
|
|
31
|
+
__proto__: null,
|
|
32
|
+
darwin: "darwin",
|
|
33
|
+
linux: "linux",
|
|
34
|
+
win32: "win"
|
|
35
|
+
});
|
|
36
|
+
const NODE_ARCH_TO_PY = require_primordials_object.ObjectFreeze({
|
|
37
|
+
__proto__: null,
|
|
38
|
+
arm64: "arm64",
|
|
39
|
+
x64: "x64"
|
|
40
|
+
});
|
|
41
|
+
const RELEASE_BASE = "https://github.com/astral-sh/python-build-standalone/releases/download";
|
|
42
|
+
/**
|
|
43
|
+
* Python-build-standalone default pin — the fleet-canonical CPython build,
|
|
44
|
+
* matching socket-cli's `bundle-tools.json`. Consumers that don't pass their
|
|
45
|
+
* own pin resolve against this. Bump it like any dependency (soak-aware), in
|
|
46
|
+
* lockstep with socket-cli (drift-watch). The `checksums` map is keyed by asset
|
|
47
|
+
* filename so the download tier verifies the exact tarball per platform.
|
|
48
|
+
*/
|
|
49
|
+
const DEFAULT_PYTHON_PIN = require_primordials_object.ObjectFreeze({
|
|
50
|
+
__proto__: null,
|
|
51
|
+
version: "3.11.14",
|
|
52
|
+
tag: "20260203",
|
|
53
|
+
checksums: require_primordials_object.ObjectFreeze({
|
|
54
|
+
__proto__: null,
|
|
55
|
+
"cpython-3.11.14+20260203-aarch64-apple-darwin-install_only.tar.gz": "63e3352fefd3b6494f73f46f51c6581c57a7e0d98775e6e00229d14a67ec3ce9",
|
|
56
|
+
"cpython-3.11.14+20260203-aarch64-pc-windows-msvc-install_only.tar.gz": "cb7828c131a005da367f7dba3a561bed91619452de870e531ee03344b2ac346f",
|
|
57
|
+
"cpython-3.11.14+20260203-aarch64-unknown-linux-gnu-install_only.tar.gz": "7341a5a0acd65f2c7c7a228d8bafa6561d220ffed26293d6a02c15ae2ee86af5",
|
|
58
|
+
"cpython-3.11.14+20260203-aarch64-unknown-linux-musl-install_only.tar.gz": "f0e5988c108187b12eb4d53cbac33a499a8e38e1693104432e1faabbab14c664",
|
|
59
|
+
"cpython-3.11.14+20260203-x86_64-apple-darwin-install_only.tar.gz": "f3b63051a9b1ffb4f663d928ebaec4311435cb67f3bdfa5634953df93397f25e",
|
|
60
|
+
"cpython-3.11.14+20260203-x86_64-pc-windows-msvc-install_only.tar.gz": "d220beff465bdc97bf5874be8ffbf07278e5bdf9a064cab932b5d93b542e3e86",
|
|
61
|
+
"cpython-3.11.14+20260203-x86_64-unknown-linux-gnu-install_only.tar.gz": "67abde21b6e074b58c0f738f0c4802b23827a7d49707dcaf3ed4dadf572f3f37",
|
|
62
|
+
"cpython-3.11.14+20260203-x86_64-unknown-linux-musl-install_only.tar.gz": "290de5199a9647d4de4adcf13a79a7c59f060357853bf41fd6d1a69b4b5fd00c"
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* Resolve the current host to a python-build-standalone `platform-arch` key (a
|
|
67
|
+
* `PLATFORM_TRIPLES` key, e.g. `darwin-arm64`, `linux-x64-musl`, `win-x64`).
|
|
68
|
+
* Owns the python-build-standalone vocabulary end to end: Node's `win32`
|
|
69
|
+
* becomes `win`, and an Alpine host gets a `-musl` suffix so it resolves to the
|
|
70
|
+
* real musl triple (upstream ships both gnu and musl Linux builds). Returns
|
|
71
|
+
* `undefined` when the host platform/arch has no upstream prebuilt.
|
|
72
|
+
*
|
|
73
|
+
* Separate from `getJreArch` (jre/Adoptium vocabulary) and from the shared
|
|
74
|
+
* `getPlatformArch` — neither matches python-build-standalone's key set.
|
|
75
|
+
*/
|
|
76
|
+
function getPythonArch() {
|
|
77
|
+
/* c8 ignore start - depends on process.platform/arch + libc probe. */
|
|
78
|
+
const platform = NODE_PLATFORM_TO_PY[node_process.default.platform];
|
|
79
|
+
const arch = NODE_ARCH_TO_PY[node_process.default.arch];
|
|
80
|
+
if (!platform || !arch) return;
|
|
81
|
+
const key = `${platform}-${arch}${platform === "linux" && require_constants_platform.getLibc() === "musl" ? "-musl" : ""}`;
|
|
82
|
+
return PLATFORM_TRIPLES[key] ? key : void 0;
|
|
83
|
+
/* c8 ignore stop */
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Resolve the python-build-standalone download for a version + tag + platform.
|
|
87
|
+
* Returns the asset filename and URL, or `undefined` when the platform-arch has
|
|
88
|
+
* no upstream prebuilt.
|
|
89
|
+
*/
|
|
90
|
+
function pythonAsset(opts) {
|
|
91
|
+
const { tag, version } = opts;
|
|
92
|
+
const arch = opts.arch ?? getPythonArch();
|
|
93
|
+
const triple = arch ? PLATFORM_TRIPLES[arch] : void 0;
|
|
94
|
+
if (!triple) return;
|
|
95
|
+
return {
|
|
96
|
+
assetName: `cpython-${version}+${tag}-${triple}-install_only.tar.gz`,
|
|
97
|
+
url: `${RELEASE_BASE}/${tag}/cpython-${`${version}%2B${tag}`}-${triple}-install_only.tar.gz`
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
//#endregion
|
|
102
|
+
exports.DEFAULT_PYTHON_PIN = DEFAULT_PYTHON_PIN;
|
|
103
|
+
exports.getPythonArch = getPythonArch;
|
|
104
|
+
exports.pythonAsset = pythonAsset;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file One-call dlx convenience wrappers for python: resolve (or download) a
|
|
3
|
+
* CPython into the known dlx location, then run a pip primitive against it —
|
|
4
|
+
* so callers don't thread `pythonBin` by hand. Mirrors how `dlx/package.ts`'s
|
|
5
|
+
* `dlxPackage` wraps `downloadNpmPackage`. The dlx Python path is
|
|
6
|
+
* deterministic given the pin (`pythonCacheDir(version, tag, arch)` →
|
|
7
|
+
* `~/.socket/_dlx/python/...`), so the wrapper resolves to that known
|
|
8
|
+
* location and hands the interpreter path to the pip fn itself:
|
|
9
|
+
*
|
|
10
|
+
* - `dlxPipInstall({ python, spec })` → `resolvePython` + `downloadPipPackage`
|
|
11
|
+
* - `dlxPipPin({ python, spec })` → `resolvePython` + `resolvePipPackagePin`
|
|
12
|
+
* The lower-level primitives (`downloadPipPackage`, `resolvePipPackagePin`)
|
|
13
|
+
* keep `pythonBin` required — they're the interpreter-agnostic layer. Use
|
|
14
|
+
* them directly when you already hold an interpreter path; use these
|
|
15
|
+
* wrappers when you have a pin and want one call.
|
|
16
|
+
*/
|
|
17
|
+
import type { DownloadPipPackageResult } from './pip-install';
|
|
18
|
+
import type { PipPackagePin } from './pin';
|
|
19
|
+
import type { PythonBuildPin } from './types';
|
|
20
|
+
export interface DlxPipOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Python-build-standalone pin (version + tag + optional integrity). The dlx
|
|
23
|
+
* interpreter location is derived from this — that's why no `pythonBin` is
|
|
24
|
+
* needed. Omit `arch` to auto-detect the host.
|
|
25
|
+
*/
|
|
26
|
+
readonly python: PythonBuildPin & {
|
|
27
|
+
readonly arch?: string | undefined;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Prefer the downloaded dlx CPython over any PATH interpreter. Default false:
|
|
31
|
+
* a PATH `python3` wins when present, the dlx build is the fallback. Pass
|
|
32
|
+
* `true` for an exact, reproducible interpreter regardless of host Python.
|
|
33
|
+
*/
|
|
34
|
+
readonly preferDownload?: boolean | undefined;
|
|
35
|
+
}
|
|
36
|
+
export interface DlxPipInstallOptions extends DlxPipOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Optional sha256 hash of the top-level artifact, forwarded to
|
|
39
|
+
* `downloadPipPackage` (pip `--require-hashes`).
|
|
40
|
+
*/
|
|
41
|
+
readonly hash?: string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Pip install spec: `<pkg>==<version>` or `git+https://<url>@<sha>`.
|
|
44
|
+
*/
|
|
45
|
+
readonly spec: string;
|
|
46
|
+
}
|
|
47
|
+
export interface DlxPipPinOptions extends DlxPipOptions {
|
|
48
|
+
/**
|
|
49
|
+
* Pip spec to pin: `<pkg>==<version>` or `git+https://<url>@<sha>`.
|
|
50
|
+
*/
|
|
51
|
+
readonly spec: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Thrown when the python pin can't be resolved to an interpreter (no PATH
|
|
55
|
+
* Python and the download tier missed — e.g. unsupported host arch).
|
|
56
|
+
*/
|
|
57
|
+
export declare class DlxPythonUnavailableError extends Error {
|
|
58
|
+
constructor(message: string, options?: {
|
|
59
|
+
cause?: unknown | undefined;
|
|
60
|
+
} | undefined);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve (or download) the dlx CPython for `python`, then pip-install `spec`
|
|
64
|
+
* into a content-addressed dlx dir. One-call form of `resolvePython` +
|
|
65
|
+
* `downloadPipPackage`. The returned result includes the interpreter path used,
|
|
66
|
+
* so callers can run the tool: `spawn(pythonBin, ['-m', '<module>'], { env: {
|
|
67
|
+
* PYTHONPATH: packageDir } })`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function dlxPipInstall(opts: DlxPipInstallOptions): Promise<DownloadPipPackageResult & {
|
|
70
|
+
pythonBin: string;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve (or download) the dlx CPython for `python`, then generate a
|
|
74
|
+
* hash-pinned closure for `spec`. One-call form of `resolvePython` +
|
|
75
|
+
* `resolvePipPackagePin`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function dlxPipPin(opts: DlxPipPinOptions): Promise<PipPackagePin & {
|
|
78
|
+
pythonBin: string;
|
|
79
|
+
}>;
|
|
80
|
+
export declare function resolveOrThrow(opts: DlxPipOptions): Promise<string>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_external_tools_python_pip_install = require('./pip-install.js');
|
|
5
|
+
const require_external_tools_python_pin = require('./pin.js');
|
|
6
|
+
const require_external_tools_python_resolve = require('./resolve.js');
|
|
7
|
+
|
|
8
|
+
//#region src/external-tools/python/dlx.ts
|
|
9
|
+
/**
|
|
10
|
+
* @file One-call dlx convenience wrappers for python: resolve (or download) a
|
|
11
|
+
* CPython into the known dlx location, then run a pip primitive against it —
|
|
12
|
+
* so callers don't thread `pythonBin` by hand. Mirrors how `dlx/package.ts`'s
|
|
13
|
+
* `dlxPackage` wraps `downloadNpmPackage`. The dlx Python path is
|
|
14
|
+
* deterministic given the pin (`pythonCacheDir(version, tag, arch)` →
|
|
15
|
+
* `~/.socket/_dlx/python/...`), so the wrapper resolves to that known
|
|
16
|
+
* location and hands the interpreter path to the pip fn itself:
|
|
17
|
+
*
|
|
18
|
+
* - `dlxPipInstall({ python, spec })` → `resolvePython` + `downloadPipPackage`
|
|
19
|
+
* - `dlxPipPin({ python, spec })` → `resolvePython` + `resolvePipPackagePin`
|
|
20
|
+
* The lower-level primitives (`downloadPipPackage`, `resolvePipPackagePin`)
|
|
21
|
+
* keep `pythonBin` required — they're the interpreter-agnostic layer. Use
|
|
22
|
+
* them directly when you already hold an interpreter path; use these
|
|
23
|
+
* wrappers when you have a pin and want one call.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Thrown when the python pin can't be resolved to an interpreter (no PATH
|
|
27
|
+
* Python and the download tier missed — e.g. unsupported host arch).
|
|
28
|
+
*/
|
|
29
|
+
var DlxPythonUnavailableError = class extends Error {
|
|
30
|
+
constructor(message, options) {
|
|
31
|
+
super(message, options);
|
|
32
|
+
this.name = "DlxPythonUnavailableError";
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Resolve (or download) the dlx CPython for `python`, then pip-install `spec`
|
|
37
|
+
* into a content-addressed dlx dir. One-call form of `resolvePython` +
|
|
38
|
+
* `downloadPipPackage`. The returned result includes the interpreter path used,
|
|
39
|
+
* so callers can run the tool: `spawn(pythonBin, ['-m', '<module>'], { env: {
|
|
40
|
+
* PYTHONPATH: packageDir } })`.
|
|
41
|
+
*/
|
|
42
|
+
async function dlxPipInstall(opts) {
|
|
43
|
+
const pythonBin = await resolveOrThrow(opts);
|
|
44
|
+
return {
|
|
45
|
+
...await require_external_tools_python_pip_install.downloadPipPackage({
|
|
46
|
+
hash: opts.hash,
|
|
47
|
+
pythonBin,
|
|
48
|
+
spec: opts.spec
|
|
49
|
+
}),
|
|
50
|
+
pythonBin
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve (or download) the dlx CPython for `python`, then generate a
|
|
55
|
+
* hash-pinned closure for `spec`. One-call form of `resolvePython` +
|
|
56
|
+
* `resolvePipPackagePin`.
|
|
57
|
+
*/
|
|
58
|
+
async function dlxPipPin(opts) {
|
|
59
|
+
const pythonBin = await resolveOrThrow(opts);
|
|
60
|
+
return {
|
|
61
|
+
...await require_external_tools_python_pin.resolvePipPackagePin({
|
|
62
|
+
pythonBin,
|
|
63
|
+
spec: opts.spec
|
|
64
|
+
}),
|
|
65
|
+
pythonBin
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async function resolveOrThrow(opts) {
|
|
69
|
+
const { preferDownload, python } = opts;
|
|
70
|
+
const resolved = await require_external_tools_python_resolve.resolvePython({
|
|
71
|
+
preferDownload,
|
|
72
|
+
downloadIfMissing: {
|
|
73
|
+
arch: python.arch,
|
|
74
|
+
integrity: python.integrity,
|
|
75
|
+
tag: python.tag,
|
|
76
|
+
version: python.version
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (!resolved) throw new DlxPythonUnavailableError(`dlx python: could not resolve a CPython interpreter for ${python.version}+${python.tag} — no host python3 and the python-build-standalone download tier missed (unsupported host arch?)`);
|
|
80
|
+
return resolved.path;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
exports.DlxPythonUnavailableError = DlxPythonUnavailableError;
|
|
85
|
+
exports.dlxPipInstall = dlxPipInstall;
|
|
86
|
+
exports.dlxPipPin = dlxPipPin;
|
|
87
|
+
exports.resolveOrThrow = resolveOrThrow;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `pythonFromDownload()` — fetches a python-build-standalone CPython into
|
|
3
|
+
* the DLX cache and returns a `ResolvedPython` pointing at the interpreter.
|
|
4
|
+
* The `install_only` tarball extracts to a `python/` subdirectory, so the
|
|
5
|
+
* interpreter lands at `<extractedDir>/python/bin/python3` (or
|
|
6
|
+
* `python/python.exe` on Windows) — no strip.
|
|
7
|
+
*/
|
|
8
|
+
import type { BinaryDownloader } from '../from-download';
|
|
9
|
+
import type { HashSpec } from '../../integrity';
|
|
10
|
+
import type { ResolvedPython } from './types';
|
|
11
|
+
export interface PythonFromDownloadOptions {
|
|
12
|
+
/**
|
|
13
|
+
* CPython version, e.g. `3.11.14`.
|
|
14
|
+
*/
|
|
15
|
+
version: string;
|
|
16
|
+
/**
|
|
17
|
+
* Python-build-standalone release tag, e.g. `20260203`.
|
|
18
|
+
*/
|
|
19
|
+
tag: string;
|
|
20
|
+
/**
|
|
21
|
+
* Target `platform-arch`, e.g. `darwin-arm64`. Omit to auto-detect the
|
|
22
|
+
* current host via {@link getPythonArch}.
|
|
23
|
+
*/
|
|
24
|
+
arch?: string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Optional pinned integrity (hex SHA-256 or SRI) for the tarball.
|
|
27
|
+
*/
|
|
28
|
+
integrity?: HashSpec | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Override the extraction directory. Defaults to
|
|
31
|
+
* `~/.socket/_dlx/python/<version>-<tag>-<arch>`.
|
|
32
|
+
*/
|
|
33
|
+
cacheDir?: string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Inject a custom downloader (tests / alternate cache). Defaults to dlx.
|
|
36
|
+
*/
|
|
37
|
+
downloader?: BinaryDownloader | undefined;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Return the absolute path to the interpreter inside an extracted
|
|
41
|
+
* python-build-standalone tree. The layout follows the TARGET arch, not the
|
|
42
|
+
* host: a Windows target nests the interpreter at `python/python.exe`, every
|
|
43
|
+
* other target at `python/bin/python3`. Keying off `process.platform` would be
|
|
44
|
+
* wrong when cross-resolving (e.g. a Windows host downloading a linux-x64
|
|
45
|
+
* build). `arch` is a platform-arch key like `win-x64` / `linux-x64`; omit it
|
|
46
|
+
* to fall back to the host platform.
|
|
47
|
+
*/
|
|
48
|
+
export declare function pythonBinPath(extractedDir: string, arch?: string | undefined): string;
|
|
49
|
+
/**
|
|
50
|
+
* Default DLX cache directory for a python build pin.
|
|
51
|
+
*/
|
|
52
|
+
export declare function pythonCacheDir(version: string, tag: string, arch: string): string;
|
|
53
|
+
export declare function pythonFromDownload(opts: PythonFromDownloadOptions): Promise<ResolvedPython | undefined>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_paths_socket = require('../../paths/socket.js');
|
|
6
|
+
const require_external_tools_from_download = require('../from-download.js');
|
|
7
|
+
const require_external_tools_python_asset_names = require('./asset-names.js');
|
|
8
|
+
let node_path = require("node:path");
|
|
9
|
+
node_path = require_runtime.__toESM(node_path);
|
|
10
|
+
let node_process = require("node:process");
|
|
11
|
+
node_process = require_runtime.__toESM(node_process);
|
|
12
|
+
|
|
13
|
+
//#region src/external-tools/python/from-download.ts
|
|
14
|
+
/**
|
|
15
|
+
* @file `pythonFromDownload()` — fetches a python-build-standalone CPython into
|
|
16
|
+
* the DLX cache and returns a `ResolvedPython` pointing at the interpreter.
|
|
17
|
+
* The `install_only` tarball extracts to a `python/` subdirectory, so the
|
|
18
|
+
* interpreter lands at `<extractedDir>/python/bin/python3` (or
|
|
19
|
+
* `python/python.exe` on Windows) — no strip.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Return the absolute path to the interpreter inside an extracted
|
|
23
|
+
* python-build-standalone tree. The layout follows the TARGET arch, not the
|
|
24
|
+
* host: a Windows target nests the interpreter at `python/python.exe`, every
|
|
25
|
+
* other target at `python/bin/python3`. Keying off `process.platform` would be
|
|
26
|
+
* wrong when cross-resolving (e.g. a Windows host downloading a linux-x64
|
|
27
|
+
* build). `arch` is a platform-arch key like `win-x64` / `linux-x64`; omit it
|
|
28
|
+
* to fall back to the host platform.
|
|
29
|
+
*/
|
|
30
|
+
function pythonBinPath(extractedDir, arch) {
|
|
31
|
+
if (arch ? arch.startsWith("win-") : node_process.default.platform === "win32") return node_path.default.join(extractedDir, "python", "python.exe");
|
|
32
|
+
return node_path.default.join(extractedDir, "python", "bin", "python3");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default DLX cache directory for a python build pin.
|
|
36
|
+
*/
|
|
37
|
+
function pythonCacheDir(version, tag, arch) {
|
|
38
|
+
return node_path.default.join(require_paths_socket.getSocketDlxDir(), "python", `${version}-${tag}-${arch}`);
|
|
39
|
+
}
|
|
40
|
+
async function pythonFromDownload(opts) {
|
|
41
|
+
const { cacheDir, downloader, integrity, tag, version } = opts;
|
|
42
|
+
const arch = opts.arch ?? require_external_tools_python_asset_names.getPythonArch();
|
|
43
|
+
if (!arch) return;
|
|
44
|
+
const asset = require_external_tools_python_asset_names.pythonAsset({
|
|
45
|
+
version,
|
|
46
|
+
tag,
|
|
47
|
+
arch
|
|
48
|
+
});
|
|
49
|
+
if (!asset) return;
|
|
50
|
+
const extractedDir = cacheDir ?? pythonCacheDir(version, tag, arch);
|
|
51
|
+
const archive = await require_external_tools_from_download.downloadAndExtractTool({
|
|
52
|
+
url: asset.url,
|
|
53
|
+
name: `python-${version}-${tag}-${arch}.tar.gz`,
|
|
54
|
+
integrity,
|
|
55
|
+
extractedDir,
|
|
56
|
+
downloader
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
path: pythonBinPath(extractedDir, arch),
|
|
60
|
+
source: "download",
|
|
61
|
+
integrity: archive.integrity
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
exports.pythonBinPath = pythonBinPath;
|
|
67
|
+
exports.pythonCacheDir = pythonCacheDir;
|
|
68
|
+
exports.pythonFromDownload = pythonFromDownload;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `pythonFromPath()` — looks for a CPython interpreter on the system
|
|
3
|
+
* PATH. Tries `python3` first (the POSIX convention), then `python` (the
|
|
4
|
+
* Windows convention / some minimal images). Returns the first hit.
|
|
5
|
+
*/
|
|
6
|
+
import type { ResolvedPython } from './types';
|
|
7
|
+
export declare function pythonFromPath(): Promise<ResolvedPython | undefined>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_bin_which = require('../../bin/which.js');
|
|
5
|
+
|
|
6
|
+
//#region src/external-tools/python/from-path.ts
|
|
7
|
+
/**
|
|
8
|
+
* @file `pythonFromPath()` — looks for a CPython interpreter on the system
|
|
9
|
+
* PATH. Tries `python3` first (the POSIX convention), then `python` (the
|
|
10
|
+
* Windows convention / some minimal images). Returns the first hit.
|
|
11
|
+
*/
|
|
12
|
+
async function pythonFromPath() {
|
|
13
|
+
for (const bin of ["python3", "python"]) {
|
|
14
|
+
const onPath = await require_bin_which.which(bin, { nothrow: true });
|
|
15
|
+
if (typeof onPath === "string") return {
|
|
16
|
+
path: onPath,
|
|
17
|
+
source: "path"
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.pythonFromPath = pythonFromPath;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `resolvePipPackagePin()` — the Python mirror of
|
|
3
|
+
* `resolveNpmPackagePin()` (dlx/lockfile). Resolves a pip spec and its full
|
|
4
|
+
* dependency closure WITHOUT installing into the interpreter, then returns
|
|
5
|
+
* everything needed to pin a reproducible, hash-verified install:
|
|
6
|
+
*
|
|
7
|
+
* - the resolved top-level name + version,
|
|
8
|
+
* - the top-level artifact's hashes (sha512 SRI + sha256 hex), and
|
|
9
|
+
* - a fully-hashed `requirements.txt` body (`name==version --hash=sha256:<hex>`
|
|
10
|
+
* for every artifact in the closure) ready to feed back to
|
|
11
|
+
* `downloadPipPackage` / `pip install --require-hashes`. Engine: `pip
|
|
12
|
+
* download --dest <scratch> <spec>` downloads the spec + its resolved
|
|
13
|
+
* closure as wheels/sdists into a scratch dir (no install, no venv), each
|
|
14
|
+
* file is hashed, then the scratch dir is torn down. This is pip's own
|
|
15
|
+
* recipe for producing hashed requirements — `pip-tools` is NOT required.
|
|
16
|
+
* Contrast `resolveNpmPackagePin` (dlx/lockfile): same contract, npm engine
|
|
17
|
+
* (Arborist lockfile-only + pacote), emits a `package-lock.json`. The pip
|
|
18
|
+
* side emits a hashed `requirements.txt` because that — not a lockfile — is
|
|
19
|
+
* what `pip install --require-hashes` consumes. NOTE on the soak window:
|
|
20
|
+
* `resolveNpmPackagePin` applies a min-release-age cutoff via Arborist's
|
|
21
|
+
* `before` date. pip has no native release-age gate, so this generator does
|
|
22
|
+
* NOT enforce one — callers that need a soak must vet the resolved versions
|
|
23
|
+
* out of band. The spec itself remains the primary pin: `==<version>` (PyPI
|
|
24
|
+
* is immutable per version) or `@<full-sha>` (git is content-addressed).
|
|
25
|
+
*/
|
|
26
|
+
import type { ComputedHashes } from '../../integrity';
|
|
27
|
+
export interface ResolvePipPackagePinOptions {
|
|
28
|
+
/**
|
|
29
|
+
* Absolute path to the Python interpreter used to run `pip download`,
|
|
30
|
+
* typically from `resolvePython()`. The interpreter is NOT modified.
|
|
31
|
+
*/
|
|
32
|
+
readonly pythonBin: string;
|
|
33
|
+
/**
|
|
34
|
+
* Directory `pip download` resolves the closure into. Defaults to a unique
|
|
35
|
+
* scratch dir under the OS temp dir, removed before returning.
|
|
36
|
+
*/
|
|
37
|
+
readonly scratchDir?: string | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Pip spec to pin: `<pkg>==<version>` (PyPI exact pin) or
|
|
40
|
+
* `git+https://<url>@<sha>` (git-SHA pin).
|
|
41
|
+
*/
|
|
42
|
+
readonly spec: string;
|
|
43
|
+
}
|
|
44
|
+
export interface PipArtifactPin {
|
|
45
|
+
/**
|
|
46
|
+
* Sha256 hex of the artifact, the `--hash=sha256:<hex>` value pip expects.
|
|
47
|
+
*/
|
|
48
|
+
readonly checksum: string;
|
|
49
|
+
/**
|
|
50
|
+
* Downloaded artifact filename, e.g. `is_odd-3.0.1-py3-none-any.whl`.
|
|
51
|
+
*/
|
|
52
|
+
readonly file: string;
|
|
53
|
+
/**
|
|
54
|
+
* Distribution name parsed from the filename, e.g. `is-odd`.
|
|
55
|
+
*/
|
|
56
|
+
readonly name: string;
|
|
57
|
+
/**
|
|
58
|
+
* Distribution version parsed from the filename, e.g. `3.0.1`.
|
|
59
|
+
*/
|
|
60
|
+
readonly version: string;
|
|
61
|
+
}
|
|
62
|
+
export interface PipPackagePin {
|
|
63
|
+
/**
|
|
64
|
+
* Per-artifact pins for the full resolved closure (top-level + transitive).
|
|
65
|
+
*/
|
|
66
|
+
readonly artifacts: readonly PipArtifactPin[];
|
|
67
|
+
/**
|
|
68
|
+
* Hashes of the top-level artifact (sha512 SRI + sha256 hex). The Python
|
|
69
|
+
* analog of `NpmPackagePin.hash`.
|
|
70
|
+
*/
|
|
71
|
+
readonly hash: ComputedHashes;
|
|
72
|
+
/**
|
|
73
|
+
* Resolved top-level distribution name.
|
|
74
|
+
*/
|
|
75
|
+
readonly name: string;
|
|
76
|
+
/**
|
|
77
|
+
* Fully-hashed `requirements.txt` content, ready to write to disk and feed to
|
|
78
|
+
* `pip install --require-hashes -r <file>`. The Python analog of
|
|
79
|
+
* `NpmPackagePin.lockfile`.
|
|
80
|
+
*/
|
|
81
|
+
readonly requirements: string;
|
|
82
|
+
/**
|
|
83
|
+
* Resolved top-level distribution version.
|
|
84
|
+
*/
|
|
85
|
+
readonly version: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Thrown when `pip download` produces no artifacts or a filename can't be
|
|
89
|
+
* parsed into a name + version.
|
|
90
|
+
*/
|
|
91
|
+
export declare class PipPackagePinError extends Error {
|
|
92
|
+
constructor(message: string, options?: {
|
|
93
|
+
cause?: unknown | undefined;
|
|
94
|
+
} | undefined);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Normalize a PEP 503 distribution name: lowercase, runs of `_ . -` collapse to
|
|
98
|
+
* a single `-`. Wheel filenames use `_`; requirements/PyPI use `-`.
|
|
99
|
+
*/
|
|
100
|
+
export declare function normalizeDistName(name: string): string;
|
|
101
|
+
/**
|
|
102
|
+
* Parse `<name>-<version>` out of a wheel (`name-ver-...whl`) or sdist
|
|
103
|
+
* (`name-ver.tar.gz` / `name-ver.zip`) filename. Returns undefined when the
|
|
104
|
+
* shape isn't recognized.
|
|
105
|
+
*/
|
|
106
|
+
export declare function parseArtifactFilename(file: string): {
|
|
107
|
+
name: string;
|
|
108
|
+
version: string;
|
|
109
|
+
} | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Generate a vendorable, hash-pinned closure for a pip spec without installing
|
|
112
|
+
* it. Mirrors `resolveNpmPackagePin`. Throws `PipPackagePinError` on an empty
|
|
113
|
+
* download or an unparseable artifact filename.
|
|
114
|
+
*/
|
|
115
|
+
export declare function resolvePipPackagePin(options: ResolvePipPackagePinOptions): Promise<PipPackagePin>;
|
|
116
|
+
/**
|
|
117
|
+
* Best-effort distribution name from a pip spec for matching the top-level
|
|
118
|
+
* artifact: strips a `==`/`>=`/etc. version and a `git+...#egg=<name>`
|
|
119
|
+
* fragment. Falls back to the raw spec when neither is present.
|
|
120
|
+
*/
|
|
121
|
+
export declare function specDistName(spec: string): string;
|