@socketsecurity/lib 0.0.0 → 1.0.1
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 +276 -0
- package/LICENSE +21 -0
- package/README.md +80 -2
- package/data/extensions.json +28 -0
- package/dist/abort.d.ts +11 -0
- package/dist/abort.js +62 -0
- package/dist/abort.js.map +7 -0
- package/dist/agent.d.ts +102 -0
- package/dist/agent.js +288 -0
- package/dist/agent.js.map +7 -0
- package/dist/ansi.d.ts +29 -0
- package/dist/ansi.js +62 -0
- package/dist/ansi.js.map +7 -0
- package/dist/argv/flags.d.ts +199 -0
- package/dist/argv/flags.js +284 -0
- package/dist/argv/flags.js.map +7 -0
- package/dist/argv/parse.d.ts +76 -0
- package/dist/argv/parse.js +173 -0
- package/dist/argv/parse.js.map +7 -0
- package/dist/arrays.d.ts +29 -0
- package/dist/arrays.js +87 -0
- package/dist/arrays.js.map +7 -0
- package/dist/bin.d.ts +50 -0
- package/dist/bin.js +405 -0
- package/dist/bin.js.map +7 -0
- package/dist/cacache.d.ts +86 -0
- package/dist/cacache.js +140 -0
- package/dist/cacache.js.map +7 -0
- package/dist/cache-with-ttl.d.ts +133 -0
- package/dist/cache-with-ttl.js +225 -0
- package/dist/cache-with-ttl.js.map +7 -0
- package/dist/constants/agents.d.ts +37 -0
- package/dist/constants/agents.js +128 -0
- package/dist/constants/agents.js.map +7 -0
- package/dist/constants/core.d.ts +22 -0
- package/dist/constants/core.js +59 -0
- package/dist/constants/core.js.map +7 -0
- package/dist/constants/encoding.d.ts +13 -0
- package/dist/constants/encoding.js +50 -0
- package/dist/constants/encoding.js.map +7 -0
- package/dist/constants/github.d.ts +7 -0
- package/dist/constants/github.js +32 -0
- package/dist/constants/github.js.map +7 -0
- package/dist/constants/licenses.d.ts +8 -0
- package/dist/constants/licenses.js +68 -0
- package/dist/constants/licenses.js.map +7 -0
- package/dist/constants/node.d.ts +29 -0
- package/dist/constants/node.js +173 -0
- package/dist/constants/node.js.map +7 -0
- package/dist/constants/packages.d.ts +19 -0
- package/dist/constants/packages.js +130 -0
- package/dist/constants/packages.js.map +7 -0
- package/dist/constants/paths.d.ts +51 -0
- package/dist/constants/paths.js +152 -0
- package/dist/constants/paths.js.map +7 -0
- package/dist/constants/platform.d.ts +6 -0
- package/dist/constants/platform.js +43 -0
- package/dist/constants/platform.js.map +7 -0
- package/dist/constants/process.d.ts +7 -0
- package/dist/constants/process.js +54 -0
- package/dist/constants/process.js.map +7 -0
- package/dist/constants/socket.d.ts +29 -0
- package/dist/constants/socket.js +83 -0
- package/dist/constants/socket.js.map +7 -0
- package/dist/constants/testing.d.ts +9 -0
- package/dist/constants/testing.js +38 -0
- package/dist/constants/testing.js.map +7 -0
- package/dist/constants/time.d.ts +11 -0
- package/dist/constants/time.js +41 -0
- package/dist/constants/time.js.map +7 -0
- package/dist/constants/typescript.d.ts +6 -0
- package/dist/constants/typescript.js +56 -0
- package/dist/constants/typescript.js.map +7 -0
- package/dist/cover/code.d.ts +8 -0
- package/dist/cover/code.js +137 -0
- package/dist/cover/code.js.map +7 -0
- package/dist/cover/formatters.d.ts +9 -0
- package/dist/cover/formatters.js +103 -0
- package/dist/cover/formatters.js.map +7 -0
- package/dist/cover/type.d.ts +7 -0
- package/dist/cover/type.js +65 -0
- package/dist/cover/type.js.map +7 -0
- package/dist/cover/types.d.ts +70 -0
- package/dist/cover/types.js +17 -0
- package/dist/cover/types.js.map +7 -0
- package/dist/debug.d.ts +99 -0
- package/dist/debug.js +345 -0
- package/dist/debug.js.map +7 -0
- package/dist/dlx-binary.d.ts +49 -0
- package/dist/dlx-binary.js +261 -0
- package/dist/dlx-binary.js.map +7 -0
- package/dist/dlx.d.ts +64 -0
- package/dist/dlx.js +168 -0
- package/dist/dlx.js.map +7 -0
- package/dist/download-lock.d.ts +48 -0
- package/dist/download-lock.js +139 -0
- package/dist/download-lock.js.map +7 -0
- package/dist/effects/pulse-frames.d.ts +23 -0
- package/dist/effects/pulse-frames.js +66 -0
- package/dist/effects/pulse-frames.js.map +7 -0
- package/dist/effects/text-shimmer.d.ts +37 -0
- package/dist/effects/text-shimmer.js +175 -0
- package/dist/effects/text-shimmer.js.map +7 -0
- package/dist/effects/types.d.ts +41 -0
- package/dist/effects/types.js +17 -0
- package/dist/effects/types.js.map +7 -0
- package/dist/effects/ultra.d.ts +16 -0
- package/dist/effects/ultra.js +63 -0
- package/dist/effects/ultra.js.map +7 -0
- package/dist/env/appdata.d.ts +1 -0
- package/dist/env/appdata.js +30 -0
- package/dist/env/appdata.js.map +7 -0
- package/dist/env/ci.d.ts +1 -0
- package/dist/env/ci.js +31 -0
- package/dist/env/ci.js.map +7 -0
- package/dist/env/comspec.d.ts +1 -0
- package/dist/env/comspec.js +30 -0
- package/dist/env/comspec.js.map +7 -0
- package/dist/env/debug.d.ts +1 -0
- package/dist/env/debug.js +30 -0
- package/dist/env/debug.js.map +7 -0
- package/dist/env/getters.d.ts +40 -0
- package/dist/env/getters.js +283 -0
- package/dist/env/getters.js.map +7 -0
- package/dist/env/github-api-url.d.ts +1 -0
- package/dist/env/github-api-url.js +30 -0
- package/dist/env/github-api-url.js.map +7 -0
- package/dist/env/github-base-ref.d.ts +1 -0
- package/dist/env/github-base-ref.js +30 -0
- package/dist/env/github-base-ref.js.map +7 -0
- package/dist/env/github-ref-name.d.ts +1 -0
- package/dist/env/github-ref-name.js +30 -0
- package/dist/env/github-ref-name.js.map +7 -0
- package/dist/env/github-ref-type.d.ts +1 -0
- package/dist/env/github-ref-type.js +30 -0
- package/dist/env/github-ref-type.js.map +7 -0
- package/dist/env/github-repository.d.ts +1 -0
- package/dist/env/github-repository.js +30 -0
- package/dist/env/github-repository.js.map +7 -0
- package/dist/env/github-server-url.d.ts +1 -0
- package/dist/env/github-server-url.js +30 -0
- package/dist/env/github-server-url.js.map +7 -0
- package/dist/env/github-token.d.ts +1 -0
- package/dist/env/github-token.js +30 -0
- package/dist/env/github-token.js.map +7 -0
- package/dist/env/helpers.d.ts +6 -0
- package/dist/env/helpers.js +49 -0
- package/dist/env/helpers.js.map +7 -0
- package/dist/env/home.d.ts +1 -0
- package/dist/env/home.js +30 -0
- package/dist/env/home.js.map +7 -0
- package/dist/env/jest-worker-id.d.ts +1 -0
- package/dist/env/jest-worker-id.js +30 -0
- package/dist/env/jest-worker-id.js.map +7 -0
- package/dist/env/lang.d.ts +1 -0
- package/dist/env/lang.js +30 -0
- package/dist/env/lang.js.map +7 -0
- package/dist/env/lc-all.d.ts +1 -0
- package/dist/env/lc-all.js +30 -0
- package/dist/env/lc-all.js.map +7 -0
- package/dist/env/lc-messages.d.ts +1 -0
- package/dist/env/lc-messages.js +30 -0
- package/dist/env/lc-messages.js.map +7 -0
- package/dist/env/localappdata.d.ts +1 -0
- package/dist/env/localappdata.js +30 -0
- package/dist/env/localappdata.js.map +7 -0
- package/dist/env/node-auth-token.d.ts +1 -0
- package/dist/env/node-auth-token.js +30 -0
- package/dist/env/node-auth-token.js.map +7 -0
- package/dist/env/node-env.d.ts +1 -0
- package/dist/env/node-env.js +30 -0
- package/dist/env/node-env.js.map +7 -0
- package/dist/env/npm-config-registry.d.ts +1 -0
- package/dist/env/npm-config-registry.js +30 -0
- package/dist/env/npm-config-registry.js.map +7 -0
- package/dist/env/npm-config-user-agent.d.ts +1 -0
- package/dist/env/npm-config-user-agent.js +30 -0
- package/dist/env/npm-config-user-agent.js.map +7 -0
- package/dist/env/npm-lifecycle-event.d.ts +1 -0
- package/dist/env/npm-lifecycle-event.js +30 -0
- package/dist/env/npm-lifecycle-event.js.map +7 -0
- package/dist/env/npm-registry.d.ts +1 -0
- package/dist/env/npm-registry.js +30 -0
- package/dist/env/npm-registry.js.map +7 -0
- package/dist/env/npm-token.d.ts +1 -0
- package/dist/env/npm-token.js +30 -0
- package/dist/env/npm-token.js.map +7 -0
- package/dist/env/path.d.ts +1 -0
- package/dist/env/path.js +30 -0
- package/dist/env/path.js.map +7 -0
- package/dist/env/pre-commit.d.ts +1 -0
- package/dist/env/pre-commit.js +31 -0
- package/dist/env/pre-commit.js.map +7 -0
- package/dist/env/shell.d.ts +1 -0
- package/dist/env/shell.js +30 -0
- package/dist/env/shell.js.map +7 -0
- package/dist/env/socket-accept-risks.d.ts +1 -0
- package/dist/env/socket-accept-risks.js +31 -0
- package/dist/env/socket-accept-risks.js.map +7 -0
- package/dist/env/socket-api-base-url.d.ts +1 -0
- package/dist/env/socket-api-base-url.js +30 -0
- package/dist/env/socket-api-base-url.js.map +7 -0
- package/dist/env/socket-api-proxy.d.ts +1 -0
- package/dist/env/socket-api-proxy.js +30 -0
- package/dist/env/socket-api-proxy.js.map +7 -0
- package/dist/env/socket-api-timeout.d.ts +1 -0
- package/dist/env/socket-api-timeout.js +31 -0
- package/dist/env/socket-api-timeout.js.map +7 -0
- package/dist/env/socket-api-token.d.ts +1 -0
- package/dist/env/socket-api-token.js +30 -0
- package/dist/env/socket-api-token.js.map +7 -0
- package/dist/env/socket-cacache-dir.d.ts +1 -0
- package/dist/env/socket-cacache-dir.js +30 -0
- package/dist/env/socket-cacache-dir.js.map +7 -0
- package/dist/env/socket-cli-accept-risks.d.ts +1 -0
- package/dist/env/socket-cli-accept-risks.js +33 -0
- package/dist/env/socket-cli-accept-risks.js.map +7 -0
- package/dist/env/socket-cli-api-base-url.d.ts +1 -0
- package/dist/env/socket-cli-api-base-url.js +30 -0
- package/dist/env/socket-cli-api-base-url.js.map +7 -0
- package/dist/env/socket-cli-api-proxy.d.ts +1 -0
- package/dist/env/socket-cli-api-proxy.js +30 -0
- package/dist/env/socket-cli-api-proxy.js.map +7 -0
- package/dist/env/socket-cli-api-timeout.d.ts +1 -0
- package/dist/env/socket-cli-api-timeout.js +31 -0
- package/dist/env/socket-cli-api-timeout.js.map +7 -0
- package/dist/env/socket-cli-api-token.d.ts +1 -0
- package/dist/env/socket-cli-api-token.js +30 -0
- package/dist/env/socket-cli-api-token.js.map +7 -0
- package/dist/env/socket-cli-config.d.ts +1 -0
- package/dist/env/socket-cli-config.js +30 -0
- package/dist/env/socket-cli-config.js.map +7 -0
- package/dist/env/socket-cli-fix.d.ts +1 -0
- package/dist/env/socket-cli-fix.js +30 -0
- package/dist/env/socket-cli-fix.js.map +7 -0
- package/dist/env/socket-cli-no-api-token.d.ts +1 -0
- package/dist/env/socket-cli-no-api-token.js +33 -0
- package/dist/env/socket-cli-no-api-token.js.map +7 -0
- package/dist/env/socket-cli-optimize.d.ts +1 -0
- package/dist/env/socket-cli-optimize.js +31 -0
- package/dist/env/socket-cli-optimize.js.map +7 -0
- package/dist/env/socket-cli-org-slug.d.ts +1 -0
- package/dist/env/socket-cli-org-slug.js +30 -0
- package/dist/env/socket-cli-org-slug.js.map +7 -0
- package/dist/env/socket-cli-shadow-accept-risks.d.ts +1 -0
- package/dist/env/socket-cli-shadow-accept-risks.js +33 -0
- package/dist/env/socket-cli-shadow-accept-risks.js.map +7 -0
- package/dist/env/socket-cli-shadow-api-token.d.ts +1 -0
- package/dist/env/socket-cli-shadow-api-token.js +30 -0
- package/dist/env/socket-cli-shadow-api-token.js.map +7 -0
- package/dist/env/socket-cli-shadow-bin.d.ts +1 -0
- package/dist/env/socket-cli-shadow-bin.js +30 -0
- package/dist/env/socket-cli-shadow-bin.js.map +7 -0
- package/dist/env/socket-cli-shadow-progress.d.ts +1 -0
- package/dist/env/socket-cli-shadow-progress.js +33 -0
- package/dist/env/socket-cli-shadow-progress.js.map +7 -0
- package/dist/env/socket-cli-shadow-silent.d.ts +1 -0
- package/dist/env/socket-cli-shadow-silent.js +33 -0
- package/dist/env/socket-cli-shadow-silent.js.map +7 -0
- package/dist/env/socket-cli-view-all-risks.d.ts +1 -0
- package/dist/env/socket-cli-view-all-risks.js +33 -0
- package/dist/env/socket-cli-view-all-risks.js.map +7 -0
- package/dist/env/socket-config.d.ts +1 -0
- package/dist/env/socket-config.js +30 -0
- package/dist/env/socket-config.js.map +7 -0
- package/dist/env/socket-debug.d.ts +1 -0
- package/dist/env/socket-debug.js +30 -0
- package/dist/env/socket-debug.js.map +7 -0
- package/dist/env/socket-home.d.ts +1 -0
- package/dist/env/socket-home.js +30 -0
- package/dist/env/socket-home.js.map +7 -0
- package/dist/env/socket-no-api-token.d.ts +1 -0
- package/dist/env/socket-no-api-token.js +31 -0
- package/dist/env/socket-no-api-token.js.map +7 -0
- package/dist/env/socket-npm-registry.d.ts +1 -0
- package/dist/env/socket-npm-registry.js +30 -0
- package/dist/env/socket-npm-registry.js.map +7 -0
- package/dist/env/socket-org-slug.d.ts +1 -0
- package/dist/env/socket-org-slug.js +30 -0
- package/dist/env/socket-org-slug.js.map +7 -0
- package/dist/env/socket-registry-url.d.ts +1 -0
- package/dist/env/socket-registry-url.js +30 -0
- package/dist/env/socket-registry-url.js.map +7 -0
- package/dist/env/socket-view-all-risks.d.ts +1 -0
- package/dist/env/socket-view-all-risks.js +31 -0
- package/dist/env/socket-view-all-risks.js.map +7 -0
- package/dist/env/temp.d.ts +1 -0
- package/dist/env/temp.js +30 -0
- package/dist/env/temp.js.map +7 -0
- package/dist/env/term.d.ts +1 -0
- package/dist/env/term.js +30 -0
- package/dist/env/term.js.map +7 -0
- package/dist/env/tmp.d.ts +1 -0
- package/dist/env/tmp.js +30 -0
- package/dist/env/tmp.js.map +7 -0
- package/dist/env/tmpdir.d.ts +1 -0
- package/dist/env/tmpdir.js +30 -0
- package/dist/env/tmpdir.js.map +7 -0
- package/dist/env/userprofile.d.ts +1 -0
- package/dist/env/userprofile.js +30 -0
- package/dist/env/userprofile.js.map +7 -0
- package/dist/env/vitest.d.ts +1 -0
- package/dist/env/vitest.js +31 -0
- package/dist/env/vitest.js.map +7 -0
- package/dist/env/xdg-cache-home.d.ts +1 -0
- package/dist/env/xdg-cache-home.js +30 -0
- package/dist/env/xdg-cache-home.js.map +7 -0
- package/dist/env/xdg-config-home.d.ts +1 -0
- package/dist/env/xdg-config-home.js +30 -0
- package/dist/env/xdg-config-home.js.map +7 -0
- package/dist/env/xdg-data-home.d.ts +1 -0
- package/dist/env/xdg-data-home.js +30 -0
- package/dist/env/xdg-data-home.js.map +7 -0
- package/dist/env.d.ts +15 -0
- package/dist/env.js +63 -0
- package/dist/env.js.map +7 -0
- package/dist/external/@inquirer/checkbox.js +4 -0
- package/dist/external/@inquirer/confirm.js +22 -0
- package/dist/external/@inquirer/core.js +4 -0
- package/dist/external/@inquirer/input.js +1 -0
- package/dist/external/@inquirer/password.js +1 -0
- package/dist/external/@inquirer/prompts.js +4 -0
- package/dist/external/@inquirer/search.js +1 -0
- package/dist/external/@inquirer/select.js +25 -0
- package/dist/external/@npmcli/package-json/index.js +1 -0
- package/dist/external/@npmcli/package-json/lib/read-package.js +1 -0
- package/dist/external/@npmcli/package-json/lib/sort.js +1 -0
- package/dist/external/@npmcli/promise-spawn.js +5 -0
- package/dist/external/@socketregistry/is-unicode-supported.d.ts +2 -0
- package/dist/external/@socketregistry/is-unicode-supported.js +5 -0
- package/dist/external/@socketregistry/packageurl-js.js +34 -0
- package/dist/external/@socketregistry/yocto-spinner.d.ts +12 -0
- package/dist/external/@socketregistry/yocto-spinner.js +8 -0
- package/dist/external/@yarnpkg/extensions.d.ts +5 -0
- package/dist/external/@yarnpkg/extensions.js +5 -0
- package/dist/external/cacache.d.ts +93 -0
- package/dist/external/cacache.js +32 -0
- package/dist/external/debug.d.ts +25 -0
- package/dist/external/debug.js +9 -0
- package/dist/external/del.d.ts +1 -0
- package/dist/external/del.js +54 -0
- package/dist/external/fast-glob.js +54 -0
- package/dist/external/fast-sort.d.ts +4 -0
- package/dist/external/fast-sort.js +5 -0
- package/dist/external/get-east-asian-width.d.ts +5 -0
- package/dist/external/get-east-asian-width.js +5 -0
- package/dist/external/libnpmpack.d.ts +3 -0
- package/dist/external/libnpmpack.js +225 -0
- package/dist/external/make-fetch-happen.d.ts +16 -0
- package/dist/external/make-fetch-happen.js +69 -0
- package/dist/external/normalize-package-data.js +6 -0
- package/dist/external/npm-package-arg.js +6 -0
- package/dist/external/pacote.d.ts +19 -0
- package/dist/external/pacote.js +105 -0
- package/dist/external/picomatch.js +5 -0
- package/dist/external/semver.d.ts +3 -0
- package/dist/external/semver.js +5 -0
- package/dist/external/spdx-correct.js +5 -0
- package/dist/external/spdx-expression-parse.js +5 -0
- package/dist/external/streaming-iterables.js +5 -0
- package/dist/external/validate-npm-package-name.js +5 -0
- package/dist/external/which.js +5 -0
- package/dist/external/yargs-parser.d.ts +3 -0
- package/dist/external/yargs-parser.js +26 -0
- package/dist/external/yoctocolors-cjs.d.ts +38 -0
- package/dist/external/yoctocolors-cjs.js +5 -0
- package/dist/external/zod.d.ts +1 -0
- package/dist/external/zod.js +27 -0
- package/dist/fs.d.ts +184 -0
- package/dist/fs.js +610 -0
- package/dist/fs.js.map +7 -0
- package/dist/functions.d.ts +27 -0
- package/dist/functions.js +70 -0
- package/dist/functions.js.map +7 -0
- package/dist/git.d.ts +93 -0
- package/dist/git.js +321 -0
- package/dist/git.js.map +7 -0
- package/dist/github.d.ts +121 -0
- package/dist/github.js +203 -0
- package/dist/github.js.map +7 -0
- package/dist/globs.d.ts +46 -0
- package/dist/globs.js +154 -0
- package/dist/globs.js.map +7 -0
- package/dist/http-request.d.ts +53 -0
- package/dist/http-request.js +315 -0
- package/dist/http-request.js.map +7 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +7 -0
- package/dist/ipc.d.ts +366 -0
- package/dist/ipc.js +234 -0
- package/dist/ipc.js.map +7 -0
- package/dist/json.d.ts +23 -0
- package/dist/json.js +75 -0
- package/dist/json.js.map +7 -0
- package/dist/logger.d.ts +183 -0
- package/dist/logger.js +653 -0
- package/dist/logger.js.map +7 -0
- package/dist/maintained-node-versions.d.ts +7 -0
- package/dist/maintained-node-versions.js +37 -0
- package/dist/maintained-node-versions.js.map +7 -0
- package/dist/memoization.d.ts +142 -0
- package/dist/memoization.js +212 -0
- package/dist/memoization.js.map +7 -0
- package/dist/objects.d.ts +146 -0
- package/dist/objects.js +321 -0
- package/dist/objects.js.map +7 -0
- package/dist/packages/editable.d.ts +107 -0
- package/dist/packages/editable.js +358 -0
- package/dist/packages/editable.js.map +7 -0
- package/dist/packages/exports.d.ts +30 -0
- package/dist/packages/exports.js +164 -0
- package/dist/packages/exports.js.map +7 -0
- package/dist/packages/isolation.d.ts +22 -0
- package/dist/packages/isolation.js +197 -0
- package/dist/packages/isolation.js.map +7 -0
- package/dist/packages/licenses.d.ts +68 -0
- package/dist/packages/licenses.js +216 -0
- package/dist/packages/licenses.js.map +7 -0
- package/dist/packages/manifest.d.ts +16 -0
- package/dist/packages/manifest.js +192 -0
- package/dist/packages/manifest.js.map +7 -0
- package/dist/packages/normalize.d.ts +21 -0
- package/dist/packages/normalize.js +122 -0
- package/dist/packages/normalize.js.map +7 -0
- package/dist/packages/operations.d.ts +54 -0
- package/dist/packages/operations.js +306 -0
- package/dist/packages/operations.js.map +7 -0
- package/dist/packages/paths.d.ts +10 -0
- package/dist/packages/paths.js +55 -0
- package/dist/packages/paths.js.map +7 -0
- package/dist/packages/provenance.d.ts +10 -0
- package/dist/packages/provenance.js +180 -0
- package/dist/packages/provenance.js.map +7 -0
- package/dist/packages/registry.d.ts +8 -0
- package/dist/packages/registry.js +30 -0
- package/dist/packages/registry.js.map +7 -0
- package/dist/packages/specs.d.ts +28 -0
- package/dist/packages/specs.js +85 -0
- package/dist/packages/specs.js.map +7 -0
- package/dist/packages/validation.d.ts +15 -0
- package/dist/packages/validation.js +53 -0
- package/dist/packages/validation.js.map +7 -0
- package/dist/packages.d.ts +154 -0
- package/dist/packages.js +131 -0
- package/dist/packages.js.map +7 -0
- package/dist/path.d.ts +74 -0
- package/dist/path.js +442 -0
- package/dist/path.js.map +7 -0
- package/dist/paths.d.ts +42 -0
- package/dist/paths.js +145 -0
- package/dist/paths.js.map +7 -0
- package/dist/performance.d.ts +178 -0
- package/dist/performance.js +219 -0
- package/dist/performance.js.map +7 -0
- package/dist/promise-queue.d.ts +35 -0
- package/dist/promise-queue.js +111 -0
- package/dist/promise-queue.js.map +7 -0
- package/dist/promises.d.ts +67 -0
- package/dist/promises.js +268 -0
- package/dist/promises.js.map +7 -0
- package/dist/prompts.d.ts +27 -0
- package/dist/prompts.js +60 -0
- package/dist/prompts.js.map +7 -0
- package/dist/regexps.d.ts +13 -0
- package/dist/regexps.js +32 -0
- package/dist/regexps.js.map +7 -0
- package/dist/sea.d.ts +10 -0
- package/dist/sea.js +46 -0
- package/dist/sea.js.map +7 -0
- package/dist/shadow.d.ts +17 -0
- package/dist/shadow.js +60 -0
- package/dist/shadow.js.map +7 -0
- package/dist/signal-exit.d.ts +23 -0
- package/dist/signal-exit.js +250 -0
- package/dist/signal-exit.js.map +7 -0
- package/dist/sorts.d.ts +28 -0
- package/dist/sorts.js +96 -0
- package/dist/sorts.js.map +7 -0
- package/dist/spawn.d.ts +207 -0
- package/dist/spawn.js +201 -0
- package/dist/spawn.js.map +7 -0
- package/dist/spinner.d.ts +208 -0
- package/dist/spinner.js +729 -0
- package/dist/spinner.js.map +7 -0
- package/dist/ssri.d.ts +95 -0
- package/dist/ssri.js +73 -0
- package/dist/ssri.js.map +7 -0
- package/dist/stdio/clear.d.ts +40 -0
- package/dist/stdio/clear.js +84 -0
- package/dist/stdio/clear.js.map +7 -0
- package/dist/stdio/divider.d.ts +48 -0
- package/dist/stdio/divider.js +81 -0
- package/dist/stdio/divider.js.map +7 -0
- package/dist/stdio/footer.d.ts +25 -0
- package/dist/stdio/footer.js +96 -0
- package/dist/stdio/footer.js.map +7 -0
- package/dist/stdio/header.d.ts +25 -0
- package/dist/stdio/header.js +102 -0
- package/dist/stdio/header.js.map +7 -0
- package/dist/stdio/mask.d.ts +72 -0
- package/dist/stdio/mask.js +187 -0
- package/dist/stdio/mask.js.map +7 -0
- package/dist/stdio/progress.d.ts +51 -0
- package/dist/stdio/progress.js +171 -0
- package/dist/stdio/progress.js.map +7 -0
- package/dist/stdio/prompts.d.ts +46 -0
- package/dist/stdio/prompts.js +90 -0
- package/dist/stdio/prompts.js.map +7 -0
- package/dist/stdio/stderr.d.ts +48 -0
- package/dist/stdio/stderr.js +91 -0
- package/dist/stdio/stderr.js.map +7 -0
- package/dist/stdio/stdout.d.ts +48 -0
- package/dist/stdio/stdout.js +105 -0
- package/dist/stdio/stdout.js.map +7 -0
- package/dist/streams.d.ts +20 -0
- package/dist/streams.js +80 -0
- package/dist/streams.js.map +7 -0
- package/dist/strings.d.ts +139 -0
- package/dist/strings.js +253 -0
- package/dist/strings.js.map +7 -0
- package/dist/suppress-warnings.d.ts +66 -0
- package/dist/suppress-warnings.js +100 -0
- package/dist/suppress-warnings.js.map +7 -0
- package/dist/tables.d.ts +69 -0
- package/dist/tables.js +130 -0
- package/dist/tables.js.map +7 -0
- package/dist/temporary-executor.d.ts +9 -0
- package/dist/temporary-executor.js +54 -0
- package/dist/temporary-executor.js.map +7 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.js +74 -0
- package/dist/types.js.map +7 -0
- package/dist/url.d.ts +60 -0
- package/dist/url.js +144 -0
- package/dist/url.js.map +7 -0
- package/dist/utils/get-ipc.d.ts +16 -0
- package/dist/utils/get-ipc.js +60 -0
- package/dist/utils/get-ipc.js.map +7 -0
- package/dist/validation/json-parser.d.ts +10 -0
- package/dist/validation/json-parser.js +129 -0
- package/dist/validation/json-parser.js.map +7 -0
- package/dist/validation/types.d.ts +40 -0
- package/dist/validation/types.js +17 -0
- package/dist/validation/types.js.map +7 -0
- package/dist/versions.d.ts +87 -0
- package/dist/versions.js +155 -0
- package/dist/versions.js.map +7 -0
- package/dist/words.d.ts +22 -0
- package/dist/words.js +52 -0
- package/dist/words.js.map +7 -0
- package/dist/zod.d.ts +5 -0
- package/dist/zod.js +29 -0
- package/dist/zod.js.map +7 -0
- package/package.json +856 -7
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/* Socket Lib - Built with esbuild */
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var dlx_binary_exports = {};
|
|
30
|
+
__export(dlx_binary_exports, {
|
|
31
|
+
cleanDlxCache: () => cleanDlxCache,
|
|
32
|
+
dlxBinary: () => dlxBinary,
|
|
33
|
+
getDlxCachePath: () => getDlxCachePath,
|
|
34
|
+
listDlxCache: () => listDlxCache
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(dlx_binary_exports);
|
|
37
|
+
var import_node_crypto = require("node:crypto");
|
|
38
|
+
var import_node_fs = require("node:fs");
|
|
39
|
+
var import_node_os = __toESM(require("node:os"));
|
|
40
|
+
var import_node_path = __toESM(require("node:path"));
|
|
41
|
+
var import_platform = require("#constants/platform");
|
|
42
|
+
var import_fs = require("./fs");
|
|
43
|
+
var import_http_request = require("./http-request");
|
|
44
|
+
var import_objects = require("./objects");
|
|
45
|
+
var import_path = require("./path");
|
|
46
|
+
var import_paths = require("./paths");
|
|
47
|
+
var import_spawn = require("./spawn");
|
|
48
|
+
function generateCacheKey(url) {
|
|
49
|
+
return (0, import_node_crypto.createHash)("sha256").update(url).digest("hex");
|
|
50
|
+
}
|
|
51
|
+
function getMetadataPath(cacheEntryPath) {
|
|
52
|
+
return import_node_path.default.join(cacheEntryPath, ".dlx-metadata.json");
|
|
53
|
+
}
|
|
54
|
+
async function isCacheValid(cacheEntryPath, cacheTtl) {
|
|
55
|
+
try {
|
|
56
|
+
const metaPath = getMetadataPath(cacheEntryPath);
|
|
57
|
+
if (!(0, import_node_fs.existsSync)(metaPath)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const metadata = await (0, import_fs.readJson)(metaPath, { throws: false });
|
|
61
|
+
if (!(0, import_objects.isObjectObject)(metadata)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
const age = now - (metadata["timestamp"] || 0);
|
|
66
|
+
return age < cacheTtl;
|
|
67
|
+
} catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function downloadBinary(url, destPath, checksum) {
|
|
72
|
+
const response = await (0, import_http_request.httpRequest)(url);
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
throw new Error(
|
|
75
|
+
`Failed to download binary: ${response.status} ${response.statusText}`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
const tempPath = `${destPath}.download`;
|
|
79
|
+
const hasher = (0, import_node_crypto.createHash)("sha256");
|
|
80
|
+
try {
|
|
81
|
+
await import_node_fs.promises.mkdir(import_node_path.default.dirname(destPath), { recursive: true });
|
|
82
|
+
const buffer = response.body;
|
|
83
|
+
hasher.update(buffer);
|
|
84
|
+
const actualChecksum = hasher.digest("hex");
|
|
85
|
+
if (checksum && actualChecksum !== checksum) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`Checksum mismatch: expected ${checksum}, got ${actualChecksum}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
await import_node_fs.promises.writeFile(tempPath, buffer);
|
|
91
|
+
if (!import_platform.WIN32) {
|
|
92
|
+
await import_node_fs.promises.chmod(tempPath, 493);
|
|
93
|
+
}
|
|
94
|
+
await import_node_fs.promises.rename(tempPath, destPath);
|
|
95
|
+
return actualChecksum;
|
|
96
|
+
} catch (e) {
|
|
97
|
+
try {
|
|
98
|
+
await (0, import_fs.safeDelete)(tempPath);
|
|
99
|
+
} catch {
|
|
100
|
+
}
|
|
101
|
+
throw e;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function writeMetadata(cacheEntryPath, url, checksum) {
|
|
105
|
+
const metaPath = getMetadataPath(cacheEntryPath);
|
|
106
|
+
const metadata = {
|
|
107
|
+
arch: import_node_os.default.arch(),
|
|
108
|
+
checksum,
|
|
109
|
+
platform: import_node_os.default.platform(),
|
|
110
|
+
timestamp: Date.now(),
|
|
111
|
+
url,
|
|
112
|
+
version: "1.0.0"
|
|
113
|
+
};
|
|
114
|
+
await import_node_fs.promises.writeFile(metaPath, JSON.stringify(metadata, null, 2));
|
|
115
|
+
}
|
|
116
|
+
async function cleanDlxCache(maxAge = (
|
|
117
|
+
/*@__INLINE__*/
|
|
118
|
+
require("./constants/time").DLX_BINARY_CACHE_TTL
|
|
119
|
+
)) {
|
|
120
|
+
const cacheDir = getDlxCachePath();
|
|
121
|
+
if (!(0, import_node_fs.existsSync)(cacheDir)) {
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
let cleaned = 0;
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const entries = await import_node_fs.promises.readdir(cacheDir);
|
|
127
|
+
for (const entry of entries) {
|
|
128
|
+
const entryPath = import_node_path.default.join(cacheDir, entry);
|
|
129
|
+
const metaPath = getMetadataPath(entryPath);
|
|
130
|
+
try {
|
|
131
|
+
if (!await (0, import_fs.isDir)(entryPath)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const metadata = await (0, import_fs.readJson)(metaPath, { throws: false });
|
|
135
|
+
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const age = now - (metadata["timestamp"] || 0);
|
|
139
|
+
if (age > maxAge) {
|
|
140
|
+
await (0, import_fs.safeDelete)(entryPath, { force: true, recursive: true });
|
|
141
|
+
cleaned += 1;
|
|
142
|
+
}
|
|
143
|
+
} catch {
|
|
144
|
+
try {
|
|
145
|
+
const contents = await import_node_fs.promises.readdir(entryPath);
|
|
146
|
+
if (!contents.length) {
|
|
147
|
+
await (0, import_fs.safeDelete)(entryPath);
|
|
148
|
+
cleaned += 1;
|
|
149
|
+
}
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return cleaned;
|
|
155
|
+
}
|
|
156
|
+
async function dlxBinary(args, options, spawnExtra) {
|
|
157
|
+
const {
|
|
158
|
+
cacheTtl = (
|
|
159
|
+
/*@__INLINE__*/
|
|
160
|
+
require("./constants/time").DLX_BINARY_CACHE_TTL
|
|
161
|
+
),
|
|
162
|
+
checksum,
|
|
163
|
+
force = false,
|
|
164
|
+
name,
|
|
165
|
+
spawnOptions,
|
|
166
|
+
url
|
|
167
|
+
} = { __proto__: null, ...options };
|
|
168
|
+
const cacheDir = getDlxCachePath();
|
|
169
|
+
const cacheKey = generateCacheKey(url);
|
|
170
|
+
const cacheEntryDir = import_node_path.default.join(cacheDir, cacheKey);
|
|
171
|
+
const binaryName = name || `binary-${process.platform}-${import_node_os.default.arch()}`;
|
|
172
|
+
const binaryPath = (0, import_path.normalizePath)(import_node_path.default.join(cacheEntryDir, binaryName));
|
|
173
|
+
let downloaded = false;
|
|
174
|
+
let computedChecksum = checksum;
|
|
175
|
+
if (!force && (0, import_node_fs.existsSync)(cacheEntryDir) && await isCacheValid(cacheEntryDir, cacheTtl)) {
|
|
176
|
+
try {
|
|
177
|
+
const metaPath = getMetadataPath(cacheEntryDir);
|
|
178
|
+
const metadata = await (0, import_fs.readJson)(metaPath, { throws: false });
|
|
179
|
+
if (metadata && typeof metadata === "object" && !Array.isArray(metadata) && typeof metadata["checksum"] === "string") {
|
|
180
|
+
computedChecksum = metadata["checksum"];
|
|
181
|
+
} else {
|
|
182
|
+
downloaded = true;
|
|
183
|
+
}
|
|
184
|
+
} catch {
|
|
185
|
+
downloaded = true;
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
downloaded = true;
|
|
189
|
+
}
|
|
190
|
+
if (downloaded) {
|
|
191
|
+
await import_node_fs.promises.mkdir(cacheEntryDir, { recursive: true });
|
|
192
|
+
computedChecksum = await downloadBinary(url, binaryPath, checksum);
|
|
193
|
+
await writeMetadata(cacheEntryDir, url, computedChecksum || "");
|
|
194
|
+
}
|
|
195
|
+
const needsShell = import_platform.WIN32 && /\.(?:bat|cmd|ps1)$/i.test(binaryPath);
|
|
196
|
+
const finalSpawnOptions = needsShell ? {
|
|
197
|
+
...spawnOptions,
|
|
198
|
+
env: {
|
|
199
|
+
...spawnOptions?.env,
|
|
200
|
+
PATH: `${cacheEntryDir}${import_node_path.default.delimiter}${process.env["PATH"] || ""}`
|
|
201
|
+
},
|
|
202
|
+
shell: true
|
|
203
|
+
} : spawnOptions;
|
|
204
|
+
const spawnPromise = (0, import_spawn.spawn)(binaryPath, args, finalSpawnOptions, spawnExtra);
|
|
205
|
+
return {
|
|
206
|
+
binaryPath,
|
|
207
|
+
downloaded,
|
|
208
|
+
spawnPromise
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function getDlxCachePath() {
|
|
212
|
+
return (0, import_path.normalizePath)(import_node_path.default.join((0, import_paths.getSocketHomePath)(), "cache", "dlx"));
|
|
213
|
+
}
|
|
214
|
+
async function listDlxCache() {
|
|
215
|
+
const cacheDir = getDlxCachePath();
|
|
216
|
+
if (!(0, import_node_fs.existsSync)(cacheDir)) {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
const results = [];
|
|
220
|
+
const now = Date.now();
|
|
221
|
+
const entries = await import_node_fs.promises.readdir(cacheDir);
|
|
222
|
+
for (const entry of entries) {
|
|
223
|
+
const entryPath = import_node_path.default.join(cacheDir, entry);
|
|
224
|
+
try {
|
|
225
|
+
if (!await (0, import_fs.isDir)(entryPath)) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const metaPath = getMetadataPath(entryPath);
|
|
229
|
+
const metadata = await (0, import_fs.readJson)(metaPath, { throws: false });
|
|
230
|
+
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const files = await import_node_fs.promises.readdir(entryPath);
|
|
234
|
+
const binaryFile = files.find((f) => !f.startsWith("."));
|
|
235
|
+
if (binaryFile) {
|
|
236
|
+
const binaryPath = import_node_path.default.join(entryPath, binaryFile);
|
|
237
|
+
const binaryStats = await import_node_fs.promises.stat(binaryPath);
|
|
238
|
+
const metaObj = metadata;
|
|
239
|
+
results.push({
|
|
240
|
+
age: now - (metaObj["timestamp"] || 0),
|
|
241
|
+
arch: metaObj["arch"] || "unknown",
|
|
242
|
+
checksum: metaObj["checksum"] || "",
|
|
243
|
+
name: binaryFile,
|
|
244
|
+
platform: metaObj["platform"] || "unknown",
|
|
245
|
+
size: binaryStats.size,
|
|
246
|
+
url: metaObj["url"] || ""
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
} catch {
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return results;
|
|
253
|
+
}
|
|
254
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
255
|
+
0 && (module.exports = {
|
|
256
|
+
cleanDlxCache,
|
|
257
|
+
dlxBinary,
|
|
258
|
+
getDlxCachePath,
|
|
259
|
+
listDlxCache
|
|
260
|
+
});
|
|
261
|
+
//# sourceMappingURL=dlx-binary.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dlx-binary.ts"],
|
|
4
|
+
"sourcesContent": ["/** @fileoverview DLX binary execution utilities for Socket ecosystem. */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync, promises as fs } from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { WIN32 } from '#constants/platform'\n\nimport { isDir, readJson, safeDelete } from './fs'\nimport { httpRequest } from './http-request'\nimport { isObjectObject } from './objects'\nimport { normalizePath } from './path'\nimport { getSocketHomePath } from './paths'\nimport type { SpawnExtra, SpawnOptions } from './spawn'\nimport { spawn } from './spawn'\n\nexport interface DlxBinaryOptions {\n /** URL to download the binary from. */\n url: string\n /** Optional name for the cached binary (defaults to URL hash). */\n name?: string | undefined\n /** Expected checksum (sha256) for verification. */\n checksum?: string | undefined\n /** Cache TTL in milliseconds (default: 7 days). */\n cacheTtl?: number | undefined\n /** Force re-download even if cached. */\n force?: boolean | undefined\n /** Additional spawn options. */\n spawnOptions?: SpawnOptions | undefined\n}\n\nexport interface DlxBinaryResult {\n /** Path to the cached binary. */\n binaryPath: string\n /** Whether the binary was newly downloaded. */\n downloaded: boolean\n /** The spawn promise for the running process. */\n spawnPromise: ReturnType<typeof spawn>\n}\n\n/**\n * Generate a cache directory name from URL, similar to pnpm/npx.\n * Uses SHA256 hash to create content-addressed storage.\n */\nfunction generateCacheKey(url: string): string {\n return createHash('sha256').update(url).digest('hex')\n}\n\n/**\n * Get metadata file path for a cached binary.\n */\nfunction getMetadataPath(cacheEntryPath: string): string {\n return path.join(cacheEntryPath, '.dlx-metadata.json')\n}\n\n/**\n * Check if a cached binary is still valid.\n */\nasync function isCacheValid(\n cacheEntryPath: string,\n cacheTtl: number,\n): Promise<boolean> {\n try {\n const metaPath = getMetadataPath(cacheEntryPath)\n if (!existsSync(metaPath)) {\n return false\n }\n\n const metadata = await readJson(metaPath, { throws: false })\n if (!isObjectObject(metadata)) {\n return false\n }\n const now = Date.now()\n const age =\n now -\n (((metadata as Record<string, unknown>)['timestamp'] as number) || 0)\n\n return age < cacheTtl\n } catch {\n return false\n }\n}\n\n/**\n * Download a file from a URL with integrity checking.\n */\nasync function downloadBinary(\n url: string,\n destPath: string,\n checksum?: string | undefined,\n): Promise<string> {\n const response = await httpRequest(url)\n if (!response.ok) {\n throw new Error(\n `Failed to download binary: ${response.status} ${response.statusText}`,\n )\n }\n\n // Create a temporary file first.\n const tempPath = `${destPath}.download`\n const hasher = createHash('sha256')\n\n try {\n // Ensure directory exists.\n await fs.mkdir(path.dirname(destPath), { recursive: true })\n\n // Get the response as a buffer and compute hash.\n const buffer = response.body\n\n // Compute hash.\n hasher.update(buffer)\n const actualChecksum = hasher.digest('hex')\n\n // Verify checksum if provided.\n if (checksum && actualChecksum !== checksum) {\n throw new Error(\n `Checksum mismatch: expected ${checksum}, got ${actualChecksum}`,\n )\n }\n\n // Write to temp file.\n await fs.writeFile(tempPath, buffer)\n\n // Make executable on POSIX systems.\n if (!WIN32) {\n await fs.chmod(tempPath, 0o755)\n }\n\n // Move temp file to final location.\n await fs.rename(tempPath, destPath)\n\n return actualChecksum\n } catch (e) {\n // Clean up temp file on error.\n try {\n await safeDelete(tempPath)\n } catch {\n // Ignore cleanup errors.\n }\n throw e\n }\n}\n\n/**\n * Write metadata for a cached binary.\n */\nasync function writeMetadata(\n cacheEntryPath: string,\n url: string,\n checksum: string,\n): Promise<void> {\n const metaPath = getMetadataPath(cacheEntryPath)\n const metadata = {\n arch: os.arch(),\n checksum,\n platform: os.platform(),\n timestamp: Date.now(),\n url,\n version: '1.0.0',\n }\n await fs.writeFile(metaPath, JSON.stringify(metadata, null, 2))\n}\n\n/**\n * Clean expired entries from the DLX cache.\n */\nexport async function cleanDlxCache(\n maxAge: number = /*@__INLINE__*/ require('../constants/time').DLX_BINARY_CACHE_TTL,\n): Promise<number> {\n const cacheDir = getDlxCachePath()\n\n if (!existsSync(cacheDir)) {\n return 0\n }\n\n let cleaned = 0\n const now = Date.now()\n const entries = await fs.readdir(cacheDir)\n\n for (const entry of entries) {\n const entryPath = path.join(cacheDir, entry)\n const metaPath = getMetadataPath(entryPath)\n\n try {\n // eslint-disable-next-line no-await-in-loop\n if (!(await isDir(entryPath))) {\n continue\n }\n\n // eslint-disable-next-line no-await-in-loop\n const metadata = await readJson(metaPath, { throws: false })\n if (\n !metadata ||\n typeof metadata !== 'object' ||\n Array.isArray(metadata)\n ) {\n continue\n }\n const age =\n now -\n (((metadata as Record<string, unknown>)['timestamp'] as number) || 0)\n\n if (age > maxAge) {\n // Remove entire cache entry directory.\n // eslint-disable-next-line no-await-in-loop\n await safeDelete(entryPath, { force: true, recursive: true })\n cleaned += 1\n }\n } catch {\n // If we can't read metadata, check if directory is empty or corrupted.\n try {\n // eslint-disable-next-line no-await-in-loop\n const contents = await fs.readdir(entryPath)\n if (!contents.length) {\n // Remove empty directory.\n // eslint-disable-next-line no-await-in-loop\n await safeDelete(entryPath)\n cleaned += 1\n }\n } catch {}\n }\n }\n\n return cleaned\n}\n\n/**\n * Download and execute a binary from a URL with caching.\n */\nexport async function dlxBinary(\n args: readonly string[] | string[],\n options?: DlxBinaryOptions | undefined,\n spawnExtra?: SpawnExtra | undefined,\n): Promise<DlxBinaryResult> {\n const {\n cacheTtl = /*@__INLINE__*/ require('../constants/time').DLX_BINARY_CACHE_TTL,\n checksum,\n force = false,\n name,\n spawnOptions,\n url,\n } = { __proto__: null, ...options } as DlxBinaryOptions\n\n // Generate cache paths similar to pnpm/npx structure.\n const cacheDir = getDlxCachePath()\n const cacheKey = generateCacheKey(url)\n const cacheEntryDir = path.join(cacheDir, cacheKey)\n const binaryName = name || `binary-${process.platform}-${os.arch()}`\n const binaryPath = normalizePath(path.join(cacheEntryDir, binaryName))\n\n let downloaded = false\n let computedChecksum = checksum\n\n // Check if we need to download.\n if (\n !force &&\n existsSync(cacheEntryDir) &&\n (await isCacheValid(cacheEntryDir, cacheTtl))\n ) {\n // Binary is cached and valid, read the checksum from metadata.\n try {\n const metaPath = getMetadataPath(cacheEntryDir)\n const metadata = await readJson(metaPath, { throws: false })\n if (\n metadata &&\n typeof metadata === 'object' &&\n !Array.isArray(metadata) &&\n typeof (metadata as Record<string, unknown>)['checksum'] === 'string'\n ) {\n computedChecksum = (metadata as Record<string, unknown>)[\n 'checksum'\n ] as string\n } else {\n // If metadata is invalid, re-download.\n downloaded = true\n }\n } catch {\n // If we can't read metadata, re-download.\n downloaded = true\n }\n } else {\n downloaded = true\n }\n\n if (downloaded) {\n // Ensure cache directory exists.\n await fs.mkdir(cacheEntryDir, { recursive: true })\n\n // Download the binary.\n computedChecksum = await downloadBinary(url, binaryPath, checksum)\n await writeMetadata(cacheEntryDir, url, computedChecksum || '')\n }\n\n // Execute the binary.\n // On Windows, script files (.bat, .cmd, .ps1) require shell: true because\n // they are not executable on their own and must be run through cmd.exe.\n // Note: .exe files are actual binaries and don't need shell mode.\n const needsShell = WIN32 && /\\.(?:bat|cmd|ps1)$/i.test(binaryPath)\n // Windows cmd.exe PATH resolution behavior:\n // When shell: true on Windows with .cmd/.bat/.ps1 files, spawn will automatically\n // strip the full path down to just the basename without extension (e.g.,\n // C:\\cache\\test.cmd becomes just \"test\"). Windows cmd.exe then searches for \"test\"\n // in directories listed in PATH, trying each extension from PATHEXT environment\n // variable (.COM, .EXE, .BAT, .CMD, etc.) until it finds a match.\n //\n // Since our binaries are downloaded to a custom cache directory that's not in PATH\n // (unlike system package managers like npm/pnpm/yarn which are already in PATH),\n // we must prepend the cache directory to PATH so cmd.exe can locate the binary.\n //\n // This approach is consistent with how other tools handle Windows command execution:\n // - npm's promise-spawn: uses which.sync() to find commands in PATH\n // - cross-spawn: spawns cmd.exe with escaped arguments\n // - Node.js spawn with shell: true: delegates to cmd.exe which uses PATH\n const finalSpawnOptions = needsShell\n ? {\n ...spawnOptions,\n env: {\n ...spawnOptions?.env,\n PATH: `${cacheEntryDir}${path.delimiter}${process.env['PATH'] || ''}`,\n },\n shell: true,\n }\n : spawnOptions\n const spawnPromise = spawn(binaryPath, args, finalSpawnOptions, spawnExtra)\n\n return {\n binaryPath,\n downloaded,\n spawnPromise,\n }\n}\n\n/**\n * Get the DLX binary cache directory path.\n * Returns normalized path for cross-platform compatibility.\n */\nexport function getDlxCachePath(): string {\n return normalizePath(path.join(getSocketHomePath(), 'cache', 'dlx'))\n}\n\n/**\n * Get information about cached binaries.\n */\nexport async function listDlxCache(): Promise<\n Array<{\n age: number\n arch: string\n checksum: string\n name: string\n platform: string\n size: number\n url: string\n }>\n> {\n const cacheDir = getDlxCachePath()\n\n if (!existsSync(cacheDir)) {\n return []\n }\n\n const results = []\n const now = Date.now()\n const entries = await fs.readdir(cacheDir)\n\n for (const entry of entries) {\n const entryPath = path.join(cacheDir, entry)\n try {\n // eslint-disable-next-line no-await-in-loop\n if (!(await isDir(entryPath))) {\n continue\n }\n\n const metaPath = getMetadataPath(entryPath)\n // eslint-disable-next-line no-await-in-loop\n const metadata = await readJson(metaPath, { throws: false })\n if (\n !metadata ||\n typeof metadata !== 'object' ||\n Array.isArray(metadata)\n ) {\n continue\n }\n\n // Find the binary file in the directory.\n // eslint-disable-next-line no-await-in-loop\n const files = await fs.readdir(entryPath)\n const binaryFile = files.find(f => !f.startsWith('.'))\n\n if (binaryFile) {\n const binaryPath = path.join(entryPath, binaryFile)\n // eslint-disable-next-line no-await-in-loop\n const binaryStats = await fs.stat(binaryPath)\n\n const metaObj = metadata as Record<string, unknown>\n results.push({\n age: now - ((metaObj['timestamp'] as number) || 0),\n arch: (metaObj['arch'] as string) || 'unknown',\n checksum: (metaObj['checksum'] as string) || '',\n name: binaryFile,\n platform: (metaObj['platform'] as string) || 'unknown',\n size: binaryStats.size,\n url: (metaObj['url'] as string) || '',\n })\n }\n } catch {}\n }\n\n return results\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["path", "fs", "os"]
|
|
7
|
+
}
|
package/dist/dlx.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clear all DLX package installations.
|
|
3
|
+
*/
|
|
4
|
+
export declare function clearDlx(): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Clear all DLX package installations synchronously.
|
|
7
|
+
*/
|
|
8
|
+
export declare function clearDlxSync(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Check if the DLX directory exists.
|
|
11
|
+
*/
|
|
12
|
+
export declare function dlxDirExists(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if the DLX directory exists asynchronously.
|
|
15
|
+
*/
|
|
16
|
+
export declare function dlxDirExistsAsync(): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Ensure the DLX directory exists, creating it if necessary.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensureDlxDir(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the DLX directory exists synchronously, creating it if necessary.
|
|
23
|
+
*/
|
|
24
|
+
export declare function ensureDlxDirSync(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Get the installed package directory within DLX node_modules.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getDlxInstalledPackageDir(packageName: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the DLX installation directory for a specific package.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getDlxPackageDir(packageName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the package.json path for a DLX installed package.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getDlxPackageJsonPath(packageName: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get the node_modules directory for a DLX package installation.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getDlxPackageNodeModulesDir(packageName: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a package is installed in DLX.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isDlxPackageInstalled(packageName: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if a package is installed in DLX asynchronously.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isDlxPackageInstalledAsync(packageName: string): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* List all packages installed in DLX.
|
|
51
|
+
*/
|
|
52
|
+
export declare function listDlxPackages(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* List all packages installed in DLX asynchronously.
|
|
55
|
+
*/
|
|
56
|
+
export declare function listDlxPackagesAsync(): Promise<string[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Remove a DLX package installation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function removeDlxPackage(packageName: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Remove a DLX package installation synchronously.
|
|
63
|
+
*/
|
|
64
|
+
export declare function removeDlxPackageSync(packageName: string): void;
|
package/dist/dlx.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/* Socket Lib - Built with esbuild */
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var dlx_exports = {};
|
|
20
|
+
__export(dlx_exports, {
|
|
21
|
+
clearDlx: () => clearDlx,
|
|
22
|
+
clearDlxSync: () => clearDlxSync,
|
|
23
|
+
dlxDirExists: () => dlxDirExists,
|
|
24
|
+
dlxDirExistsAsync: () => dlxDirExistsAsync,
|
|
25
|
+
ensureDlxDir: () => ensureDlxDir,
|
|
26
|
+
ensureDlxDirSync: () => ensureDlxDirSync,
|
|
27
|
+
getDlxInstalledPackageDir: () => getDlxInstalledPackageDir,
|
|
28
|
+
getDlxPackageDir: () => getDlxPackageDir,
|
|
29
|
+
getDlxPackageJsonPath: () => getDlxPackageJsonPath,
|
|
30
|
+
getDlxPackageNodeModulesDir: () => getDlxPackageNodeModulesDir,
|
|
31
|
+
isDlxPackageInstalled: () => isDlxPackageInstalled,
|
|
32
|
+
isDlxPackageInstalledAsync: () => isDlxPackageInstalledAsync,
|
|
33
|
+
listDlxPackages: () => listDlxPackages,
|
|
34
|
+
listDlxPackagesAsync: () => listDlxPackagesAsync,
|
|
35
|
+
removeDlxPackage: () => removeDlxPackage,
|
|
36
|
+
removeDlxPackageSync: () => removeDlxPackageSync
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(dlx_exports);
|
|
39
|
+
var import_node_fs = require("node:fs");
|
|
40
|
+
var import_fs = require("./fs");
|
|
41
|
+
var import_path = require("./path");
|
|
42
|
+
var import_paths = require("./paths");
|
|
43
|
+
var import_promises = require("./promises");
|
|
44
|
+
let _path;
|
|
45
|
+
// @__NO_SIDE_EFFECTS__
|
|
46
|
+
function getPath() {
|
|
47
|
+
if (_path === void 0) {
|
|
48
|
+
_path = require("node:path");
|
|
49
|
+
}
|
|
50
|
+
return _path;
|
|
51
|
+
}
|
|
52
|
+
async function clearDlx() {
|
|
53
|
+
const packages = await listDlxPackagesAsync();
|
|
54
|
+
await (0, import_promises.pEach)(packages, (pkg) => removeDlxPackage(pkg));
|
|
55
|
+
}
|
|
56
|
+
function clearDlxSync() {
|
|
57
|
+
const packages = listDlxPackages();
|
|
58
|
+
for (const pkg of packages) {
|
|
59
|
+
removeDlxPackageSync(pkg);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function dlxDirExists() {
|
|
63
|
+
return (0, import_node_fs.existsSync)((0, import_paths.getSocketDlxDir)());
|
|
64
|
+
}
|
|
65
|
+
async function dlxDirExistsAsync() {
|
|
66
|
+
try {
|
|
67
|
+
await import_node_fs.promises.access((0, import_paths.getSocketDlxDir)());
|
|
68
|
+
return true;
|
|
69
|
+
} catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function ensureDlxDir() {
|
|
74
|
+
await import_node_fs.promises.mkdir((0, import_paths.getSocketDlxDir)(), { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
function ensureDlxDirSync() {
|
|
77
|
+
const { mkdirSync } = require("node:fs");
|
|
78
|
+
mkdirSync((0, import_paths.getSocketDlxDir)(), { recursive: true });
|
|
79
|
+
}
|
|
80
|
+
function getDlxInstalledPackageDir(packageName) {
|
|
81
|
+
const path = /* @__PURE__ */ getPath();
|
|
82
|
+
return (0, import_path.normalizePath)(
|
|
83
|
+
path.join(getDlxPackageNodeModulesDir(packageName), packageName)
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
function getDlxPackageDir(packageName) {
|
|
87
|
+
const path = /* @__PURE__ */ getPath();
|
|
88
|
+
return (0, import_path.normalizePath)(path.join((0, import_paths.getSocketDlxDir)(), packageName));
|
|
89
|
+
}
|
|
90
|
+
function getDlxPackageJsonPath(packageName) {
|
|
91
|
+
const path = /* @__PURE__ */ getPath();
|
|
92
|
+
return (0, import_path.normalizePath)(
|
|
93
|
+
path.join(getDlxInstalledPackageDir(packageName), "package.json")
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
function getDlxPackageNodeModulesDir(packageName) {
|
|
97
|
+
const path = /* @__PURE__ */ getPath();
|
|
98
|
+
return (0, import_path.normalizePath)(path.join(getDlxPackageDir(packageName), "node_modules"));
|
|
99
|
+
}
|
|
100
|
+
function isDlxPackageInstalled(packageName) {
|
|
101
|
+
return (0, import_node_fs.existsSync)(getDlxInstalledPackageDir(packageName));
|
|
102
|
+
}
|
|
103
|
+
async function isDlxPackageInstalledAsync(packageName) {
|
|
104
|
+
try {
|
|
105
|
+
await import_node_fs.promises.access(getDlxInstalledPackageDir(packageName));
|
|
106
|
+
return true;
|
|
107
|
+
} catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function listDlxPackages() {
|
|
112
|
+
try {
|
|
113
|
+
return (0, import_fs.readDirNamesSync)((0, import_paths.getSocketDlxDir)(), { sort: true });
|
|
114
|
+
} catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function listDlxPackagesAsync() {
|
|
119
|
+
try {
|
|
120
|
+
const entries = await import_node_fs.promises.readdir((0, import_paths.getSocketDlxDir)(), {
|
|
121
|
+
withFileTypes: true
|
|
122
|
+
});
|
|
123
|
+
return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
124
|
+
} catch {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function removeDlxPackage(packageName) {
|
|
129
|
+
const packageDir = getDlxPackageDir(packageName);
|
|
130
|
+
try {
|
|
131
|
+
await (0, import_fs.safeDelete)(packageDir, { recursive: true, force: true });
|
|
132
|
+
} catch (e) {
|
|
133
|
+
throw new Error(`Failed to remove DLX package "${packageName}"`, {
|
|
134
|
+
cause: e
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function removeDlxPackageSync(packageName) {
|
|
139
|
+
const { rmSync } = require("node:fs");
|
|
140
|
+
const packageDir = getDlxPackageDir(packageName);
|
|
141
|
+
try {
|
|
142
|
+
rmSync(packageDir, { recursive: true, force: true });
|
|
143
|
+
} catch (e) {
|
|
144
|
+
throw new Error(`Failed to remove DLX package "${packageName}"`, {
|
|
145
|
+
cause: e
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
150
|
+
0 && (module.exports = {
|
|
151
|
+
clearDlx,
|
|
152
|
+
clearDlxSync,
|
|
153
|
+
dlxDirExists,
|
|
154
|
+
dlxDirExistsAsync,
|
|
155
|
+
ensureDlxDir,
|
|
156
|
+
ensureDlxDirSync,
|
|
157
|
+
getDlxInstalledPackageDir,
|
|
158
|
+
getDlxPackageDir,
|
|
159
|
+
getDlxPackageJsonPath,
|
|
160
|
+
getDlxPackageNodeModulesDir,
|
|
161
|
+
isDlxPackageInstalled,
|
|
162
|
+
isDlxPackageInstalledAsync,
|
|
163
|
+
listDlxPackages,
|
|
164
|
+
listDlxPackagesAsync,
|
|
165
|
+
removeDlxPackage,
|
|
166
|
+
removeDlxPackageSync
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=dlx.js.map
|
package/dist/dlx.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dlx.ts"],
|
|
4
|
+
"sourcesContent": ["/** @fileoverview DLX (execute package) utilities for Socket ecosystem shared installations. */\n\nimport { existsSync, promises as fs } from 'node:fs'\n\nimport { readDirNamesSync, safeDelete } from './fs'\nimport { normalizePath } from './path'\nimport { getSocketDlxDir } from './paths'\nimport { pEach } from './promises'\n\nlet _path: typeof import('path') | undefined\n/**\n * Lazily load the path module to avoid Webpack errors.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getPath() {\n if (_path === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _path = /*@__PURE__*/ require('node:path')\n }\n // biome-ignore lint/style/noNonNullAssertion: Initialized above.\n return _path!\n}\n\n/**\n * Clear all DLX package installations.\n */\nexport async function clearDlx(): Promise<void> {\n const packages = await listDlxPackagesAsync()\n await pEach(packages, pkg => removeDlxPackage(pkg))\n}\n\n/**\n * Clear all DLX package installations synchronously.\n */\nexport function clearDlxSync(): void {\n const packages = listDlxPackages()\n for (const pkg of packages) {\n removeDlxPackageSync(pkg)\n }\n}\n\n/**\n * Check if the DLX directory exists.\n */\nexport function dlxDirExists(): boolean {\n return existsSync(getSocketDlxDir())\n}\n\n/**\n * Check if the DLX directory exists asynchronously.\n */\nexport async function dlxDirExistsAsync(): Promise<boolean> {\n try {\n await fs.access(getSocketDlxDir())\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Ensure the DLX directory exists, creating it if necessary.\n */\nexport async function ensureDlxDir(): Promise<void> {\n await fs.mkdir(getSocketDlxDir(), { recursive: true })\n}\n\n/**\n * Ensure the DLX directory exists synchronously, creating it if necessary.\n */\nexport function ensureDlxDirSync(): void {\n const { mkdirSync } = require('node:fs')\n mkdirSync(getSocketDlxDir(), { recursive: true })\n}\n\n/**\n * Get the installed package directory within DLX node_modules.\n */\nexport function getDlxInstalledPackageDir(packageName: string): string {\n const path = getPath()\n return normalizePath(\n path.join(getDlxPackageNodeModulesDir(packageName), packageName),\n )\n}\n\n/**\n * Get the DLX installation directory for a specific package.\n */\nexport function getDlxPackageDir(packageName: string): string {\n const path = getPath()\n return normalizePath(path.join(getSocketDlxDir(), packageName))\n}\n\n/**\n * Get the package.json path for a DLX installed package.\n */\nexport function getDlxPackageJsonPath(packageName: string): string {\n const path = getPath()\n return normalizePath(\n path.join(getDlxInstalledPackageDir(packageName), 'package.json'),\n )\n}\n\n/**\n * Get the node_modules directory for a DLX package installation.\n */\nexport function getDlxPackageNodeModulesDir(packageName: string): string {\n const path = getPath()\n return normalizePath(path.join(getDlxPackageDir(packageName), 'node_modules'))\n}\n\n/**\n * Check if a package is installed in DLX.\n */\nexport function isDlxPackageInstalled(packageName: string): boolean {\n return existsSync(getDlxInstalledPackageDir(packageName))\n}\n\n/**\n * Check if a package is installed in DLX asynchronously.\n */\nexport async function isDlxPackageInstalledAsync(\n packageName: string,\n): Promise<boolean> {\n try {\n await fs.access(getDlxInstalledPackageDir(packageName))\n return true\n } catch {\n return false\n }\n}\n\n/**\n * List all packages installed in DLX.\n */\nexport function listDlxPackages(): string[] {\n try {\n return readDirNamesSync(getSocketDlxDir(), { sort: true })\n } catch {\n return []\n }\n}\n\n/**\n * List all packages installed in DLX asynchronously.\n */\nexport async function listDlxPackagesAsync(): Promise<string[]> {\n try {\n const entries = await fs.readdir(getSocketDlxDir(), {\n withFileTypes: true,\n })\n return entries\n .filter(e => e.isDirectory())\n .map(e => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/**\n * Remove a DLX package installation.\n */\nexport async function removeDlxPackage(packageName: string): Promise<void> {\n const packageDir = getDlxPackageDir(packageName)\n try {\n await safeDelete(packageDir, { recursive: true, force: true })\n } catch (e) {\n throw new Error(`Failed to remove DLX package \"${packageName}\"`, {\n cause: e,\n })\n }\n}\n\n/**\n * Remove a DLX package installation synchronously.\n */\nexport function removeDlxPackageSync(packageName: string): void {\n const { rmSync } = require('node:fs')\n const packageDir = getDlxPackageDir(packageName)\n try {\n rmSync(packageDir, { recursive: true, force: true })\n } catch (e) {\n throw new Error(`Failed to remove DLX package \"${packageName}\"`, {\n cause: e,\n })\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["fs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HttpDownloadOptions, HttpDownloadResult } from './http-request';
|
|
2
|
+
export interface DownloadLockInfo {
|
|
3
|
+
pid: number;
|
|
4
|
+
startTime: number;
|
|
5
|
+
url: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DownloadWithLockOptions extends HttpDownloadOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Maximum time to wait for lock acquisition in milliseconds.
|
|
10
|
+
* @default 60000 (1 minute)
|
|
11
|
+
*/
|
|
12
|
+
lockTimeout?: number | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Directory where lock files are stored.
|
|
15
|
+
* @default '<destPath>.locks'
|
|
16
|
+
*/
|
|
17
|
+
locksDir?: string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Interval for checking stale locks in milliseconds.
|
|
20
|
+
* @default 1000 (1 second)
|
|
21
|
+
*/
|
|
22
|
+
pollInterval?: number | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Maximum age of a lock before it's considered stale in milliseconds.
|
|
25
|
+
* @default 300000 (5 minutes)
|
|
26
|
+
*/
|
|
27
|
+
staleTimeout?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Download a file with locking to prevent concurrent downloads of the same resource.
|
|
31
|
+
* If another process is already downloading to the same destination, this will wait
|
|
32
|
+
* for the download to complete (up to lockTimeout) before proceeding.
|
|
33
|
+
*
|
|
34
|
+
* @throws {Error} When download fails or lock cannot be acquired.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const result = await downloadWithLock(
|
|
39
|
+
* 'https://example.com/file.tar.gz',
|
|
40
|
+
* '/tmp/downloads/file.tar.gz',
|
|
41
|
+
* {
|
|
42
|
+
* retries: 3,
|
|
43
|
+
* lockTimeout: 60000, // Wait up to 1 minute for other downloads
|
|
44
|
+
* }
|
|
45
|
+
* )
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function downloadWithLock(url: string, destPath: string, options?: DownloadWithLockOptions | undefined): Promise<HttpDownloadResult>;
|