@socketsecurity/lib 6.0.6 → 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.
Files changed (499) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/dist/ai/discover.d.mts +2 -2
  3. package/dist/ai/discover.js +3 -2
  4. package/dist/ai/spawn.js +2 -1
  5. package/dist/ai/types.d.mts +18 -6
  6. package/dist/ai/worktree.d.mts +6 -6
  7. package/dist/ai/worktree.js +1 -1
  8. package/dist/ansi/strip.d.ts +1 -1
  9. package/dist/ansi/strip.js +0 -2
  10. package/dist/archives/_internal.js +7 -9
  11. package/dist/archives/extract.js +1 -1
  12. package/dist/archives/tar.js +6 -6
  13. package/dist/archives/zip.js +3 -5
  14. package/dist/argv/flag-predicates.d.ts +12 -12
  15. package/dist/argv/flag-predicates.js +17 -17
  16. package/dist/argv/flag-types.d.ts +18 -18
  17. package/dist/argv/flag-types.js +4 -4
  18. package/dist/argv/parse.d.ts +1 -1
  19. package/dist/arrays/_internal.js +11 -12
  20. package/dist/arrays/chunk.js +0 -1
  21. package/dist/arrays/join.d.ts +37 -3
  22. package/dist/arrays/join.js +43 -7
  23. package/dist/arrays/unique.js +0 -1
  24. package/dist/bin/_internal.d.ts +1 -1
  25. package/dist/bin/_internal.js +1 -1
  26. package/dist/bin/exec.js +2 -3
  27. package/dist/bin/find.js +13 -13
  28. package/dist/bin/prim.cjs +22736 -22556
  29. package/dist/bin/resolve.js +12 -13
  30. package/dist/bin/which.js +8 -8
  31. package/dist/cache/ttl/store.js +5 -5
  32. package/dist/checks/primordials-defaults.d.ts +3 -3
  33. package/dist/checks/primordials-defaults.js +3 -3
  34. package/dist/checks/primordials.js +4 -3
  35. package/dist/{bin → cli}/check-primordials.d.ts +11 -11
  36. package/dist/{bin → cli}/check-primordials.js +55 -52
  37. package/dist/{bin → cli}/check.js +3 -3
  38. package/dist/{bin → cli}/socket-lib.d.ts +1 -1
  39. package/dist/{bin → cli}/socket-lib.js +4 -4
  40. package/dist/colors/socket-palette.js +7 -9
  41. package/dist/compression/_internal.d.ts +12 -12
  42. package/dist/compression/_internal.js +17 -17
  43. package/dist/compression/brotli.d.ts +25 -25
  44. package/dist/compression/brotli.js +33 -33
  45. package/dist/compression/gzip.d.ts +23 -23
  46. package/dist/compression/gzip.js +40 -40
  47. package/dist/constants/agents.d.ts +3 -1
  48. package/dist/constants/agents.js +15 -11
  49. package/dist/constants/licenses.js +3 -3
  50. package/dist/constants/node.d.ts +23 -0
  51. package/dist/constants/node.js +47 -15
  52. package/dist/constants/packages.js +22 -28
  53. package/dist/constants/platform.d.ts +30 -3
  54. package/dist/constants/platform.js +72 -12
  55. package/dist/constants/runtime.d.ts +22 -0
  56. package/dist/constants/runtime.js +32 -0
  57. package/dist/constants/socket.js +1 -1
  58. package/dist/cover/code.js +8 -8
  59. package/dist/cover/formatters.js +5 -5
  60. package/dist/crypto/hash.d.ts +26 -1
  61. package/dist/crypto/hash.js +43 -12
  62. package/dist/debug/_internal.js +4 -6
  63. package/dist/debug/caller-info.js +2 -3
  64. package/dist/debug/namespace.d.ts +7 -0
  65. package/dist/debug/namespace.js +21 -12
  66. package/dist/debug/output.js +21 -24
  67. package/dist/debug/types.d.ts +4 -4
  68. package/dist/dlx/arborist.js +6 -6
  69. package/dist/dlx/binary-cache.js +14 -14
  70. package/dist/dlx/binary-download.d.ts +1 -1
  71. package/dist/dlx/binary-download.js +11 -11
  72. package/dist/dlx/binary-resolution.js +16 -14
  73. package/dist/dlx/binary-types.d.ts +5 -5
  74. package/dist/dlx/binary.js +5 -5
  75. package/dist/dlx/cache.js +1 -1
  76. package/dist/dlx/detect.d.ts +34 -25
  77. package/dist/dlx/detect.js +86 -77
  78. package/dist/dlx/dir.js +2 -2
  79. package/dist/dlx/firewall.d.ts +1 -1
  80. package/dist/dlx/lockfile.d.ts +19 -18
  81. package/dist/dlx/lockfile.js +16 -16
  82. package/dist/dlx/manifest.d.ts +6 -6
  83. package/dist/dlx/manifest.js +5 -5
  84. package/dist/dlx/package.d.ts +10 -10
  85. package/dist/dlx/package.js +16 -16
  86. package/dist/dlx/packages.js +4 -4
  87. package/dist/dlx/paths.js +7 -7
  88. package/dist/dlx/spec.js +1 -1
  89. package/dist/dlx/types.d.ts +28 -27
  90. package/dist/eco/cargo/parse-lockfile.d.ts +1 -1
  91. package/dist/eco/cargo/parse-lockfile.js +2 -2
  92. package/dist/eco/manifest/analyze-lockfile.js +2 -2
  93. package/dist/eco/manifest/detect-format.js +4 -4
  94. package/dist/eco/manifest/find-packages.js +2 -2
  95. package/dist/eco/manifest/get-package-versions.js +2 -2
  96. package/dist/eco/manifest/get-package.js +2 -2
  97. package/dist/eco/manifest/parse-lockfile.js +2 -2
  98. package/dist/eco/manifest/parse-manifest.js +2 -2
  99. package/dist/eco/manifest/parse.js +2 -2
  100. package/dist/eco/npm/npm/exec.js +2 -2
  101. package/dist/eco/npm/npm/flags.js +7 -12
  102. package/dist/eco/npm/npm/parse-lockfile.d.ts +14 -14
  103. package/dist/eco/npm/npm/parse-lockfile.js +3 -3
  104. package/dist/eco/npm/parse-package-json.js +3 -3
  105. package/dist/eco/npm/pnpm/exec.d.ts +1 -1
  106. package/dist/eco/npm/pnpm/exec.js +5 -5
  107. package/dist/eco/npm/pnpm/flags.js +0 -3
  108. package/dist/eco/npm/pnpm/parse-lockfile.d.ts +1 -1
  109. package/dist/eco/npm/pnpm/parse-lockfile.js +4 -4
  110. package/dist/eco/npm/script.js +9 -6
  111. package/dist/eco/npm/yarnpkg/yarn/exec.js +3 -3
  112. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +2 -2
  113. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +8 -8
  114. package/dist/effects/pulse-frames.d.ts +3 -1
  115. package/dist/effects/shimmer-keyframes.d.ts +1 -1
  116. package/dist/effects/shimmer-terminal.d.ts +1 -1
  117. package/dist/env/boolean.js +0 -1
  118. package/dist/env/ci.js +0 -1
  119. package/dist/env/debug.js +0 -1
  120. package/dist/env/github-status.d.ts +51 -0
  121. package/dist/env/github-status.js +90 -0
  122. package/dist/env/github.js +0 -8
  123. package/dist/env/home.js +0 -1
  124. package/dist/env/locale.js +0 -3
  125. package/dist/env/node-auth-token.js +0 -1
  126. package/dist/env/node-env.js +0 -1
  127. package/dist/env/node-version-managers.d.ts +53 -0
  128. package/dist/env/node-version-managers.js +90 -0
  129. package/dist/env/npm.js +0 -5
  130. package/dist/env/number.js +0 -1
  131. package/dist/env/package-manager.js +3 -6
  132. package/dist/env/path.js +0 -1
  133. package/dist/env/pre-commit.js +1 -2
  134. package/dist/env/rewire.d.ts +7 -6
  135. package/dist/env/rewire.js +15 -16
  136. package/dist/env/shell.js +0 -1
  137. package/dist/env/socket-cli.js +5 -18
  138. package/dist/env/socket-mcp.d.ts +114 -0
  139. package/dist/env/socket-mcp.js +146 -0
  140. package/dist/env/socket.d.ts +1 -109
  141. package/dist/env/socket.js +12 -167
  142. package/dist/env/string.js +0 -1
  143. package/dist/env/temp-dir.js +0 -3
  144. package/dist/env/term.js +0 -1
  145. package/dist/env/test.js +3 -6
  146. package/dist/env/windows.js +0 -4
  147. package/dist/env/xdg.js +0 -3
  148. package/dist/events/exit/_internal.d.ts +11 -9
  149. package/dist/events/exit/_internal.js +31 -35
  150. package/dist/events/exit/handler.js +3 -4
  151. package/dist/events/exit/intercept.js +4 -6
  152. package/dist/events/exit/lifecycle.js +16 -18
  153. package/dist/events/exit/signals.js +1 -2
  154. package/dist/events/exit/types.d.ts +6 -5
  155. package/dist/external/@npmcli/package-json.js +2 -2
  156. package/dist/external/npm-pack.js +2 -2
  157. package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
  158. package/dist/external-tools/bazel/types.d.ts +1 -1
  159. package/dist/external-tools/cdxgen/from-vfs.js +1 -1
  160. package/dist/external-tools/cdxgen/types.d.ts +1 -1
  161. package/dist/external-tools/from-download.d.ts +1 -1
  162. package/dist/external-tools/from-download.js +1 -1
  163. package/dist/external-tools/janus/from-vfs.js +1 -1
  164. package/dist/external-tools/janus/types.d.ts +1 -1
  165. package/dist/external-tools/jre/detect-platform-arch.d.ts +10 -6
  166. package/dist/external-tools/jre/detect-platform-arch.js +29 -14
  167. package/dist/external-tools/jre/from-vfs.js +1 -1
  168. package/dist/external-tools/jre/types.d.ts +1 -1
  169. package/dist/external-tools/manifest.d.ts +7 -7
  170. package/dist/external-tools/manifest.js +12 -12
  171. package/dist/external-tools/opengrep/from-vfs.js +1 -1
  172. package/dist/external-tools/opengrep/types.d.ts +1 -1
  173. package/dist/external-tools/python/asset-names.d.ts +76 -0
  174. package/dist/external-tools/python/asset-names.js +104 -0
  175. package/dist/external-tools/python/dlx.d.ts +80 -0
  176. package/dist/external-tools/python/dlx.js +87 -0
  177. package/dist/external-tools/python/from-download.d.ts +53 -0
  178. package/dist/external-tools/python/from-download.js +68 -0
  179. package/dist/external-tools/python/from-path.d.ts +7 -0
  180. package/dist/external-tools/python/from-path.js +23 -0
  181. package/dist/external-tools/python/pin.d.ts +121 -0
  182. package/dist/external-tools/python/pin.js +173 -0
  183. package/dist/external-tools/python/pip-install.d.ts +75 -0
  184. package/dist/external-tools/python/pip-install.js +139 -0
  185. package/dist/external-tools/python/resolve.d.ts +42 -0
  186. package/dist/external-tools/python/resolve.js +58 -0
  187. package/dist/external-tools/python/types.d.ts +49 -0
  188. package/dist/external-tools/sbt/from-vfs.js +1 -1
  189. package/dist/external-tools/sbt/types.d.ts +1 -1
  190. package/dist/external-tools/skillspector/from-path.js +3 -5
  191. package/dist/external-tools/skillspector/from-vfs.js +1 -1
  192. package/dist/external-tools/synp/from-download.js +2 -2
  193. package/dist/external-tools/synp/from-vfs.js +1 -1
  194. package/dist/external-tools/trivy/from-vfs.js +1 -1
  195. package/dist/external-tools/trivy/types.d.ts +1 -1
  196. package/dist/external-tools/trufflehog/from-vfs.js +1 -1
  197. package/dist/external-tools/trufflehog/types.d.ts +1 -1
  198. package/dist/fs/_internal.d.ts +1 -1
  199. package/dist/fs/_internal.js +7 -7
  200. package/dist/fs/access.js +5 -9
  201. package/dist/fs/{path-cache.js → allowed-dirs-cache.js} +1 -1
  202. package/dist/fs/encoding.js +5 -7
  203. package/dist/fs/{find-up.js → find.js} +11 -13
  204. package/dist/fs/inspect.js +7 -13
  205. package/dist/fs/read-dir.js +7 -10
  206. package/dist/fs/read-file.js +8 -14
  207. package/dist/fs/read-json-cache.d.ts +6 -4
  208. package/dist/fs/read-json-cache.js +9 -6
  209. package/dist/fs/read-json.js +4 -6
  210. package/dist/fs/resolve-module.js +1 -1
  211. package/dist/fs/safe.d.ts +1 -1
  212. package/dist/fs/safe.js +12 -13
  213. package/dist/fs/unique.js +4 -5
  214. package/dist/fs/validate.js +1 -2
  215. package/dist/fs/write-json.js +4 -5
  216. package/dist/git/_internal.js +10 -10
  217. package/dist/git/changed.js +4 -4
  218. package/dist/git/repo.js +3 -3
  219. package/dist/git/staged.js +4 -4
  220. package/dist/git/unstaged.js +4 -4
  221. package/dist/github/ghsa.js +2 -2
  222. package/dist/github/refs-cache.d.ts +1 -1
  223. package/dist/github/refs-cache.js +5 -5
  224. package/dist/github/refs-rest.js +5 -5
  225. package/dist/github/{fetch.js → request.js} +13 -2
  226. package/dist/github/token.js +1 -1
  227. package/dist/github/types.d.ts +1 -1
  228. package/dist/globs/_internal.js +7 -9
  229. package/dist/globs/match.js +4 -6
  230. package/dist/globs/matcher.d.ts +3 -3
  231. package/dist/globs/matcher.js +12 -14
  232. package/dist/globs/stream.js +1 -2
  233. package/dist/globs/types.d.ts +24 -24
  234. package/dist/http-request/_internal.d.ts +1 -1
  235. package/dist/http-request/browser.js +4 -2
  236. package/dist/http-request/checksum-file.d.ts +55 -0
  237. package/dist/http-request/checksum-file.js +95 -0
  238. package/dist/http-request/download-types.d.ts +15 -23
  239. package/dist/http-request/download.js +3 -3
  240. package/dist/http-request/headers.js +0 -1
  241. package/dist/http-request/request-attempt.js +37 -33
  242. package/dist/http-request/request-types.d.ts +2 -2
  243. package/dist/http-request/request.js +1 -1
  244. package/dist/http-request/user-agent.js +3 -4
  245. package/dist/integrity.d.ts +86 -18
  246. package/dist/integrity.js +119 -30
  247. package/dist/ipc/directory.js +2 -2
  248. package/dist/ipc/paths.js +1 -1
  249. package/dist/ipc/write.js +1 -1
  250. package/dist/ipc-cli/get.js +12 -12
  251. package/dist/json/edit.js +13 -14
  252. package/dist/json/format.js +2 -2
  253. package/dist/json/parse.d.ts +1 -1
  254. package/dist/json/parse.js +3 -7
  255. package/dist/logger/_internal.d.ts +4 -4
  256. package/dist/logger/_internal.js +3 -3
  257. package/dist/logger/colors.js +4 -3
  258. package/dist/logger/console-methods.d.ts +132 -0
  259. package/dist/logger/console-methods.js +169 -0
  260. package/dist/logger/console.d.ts +12 -0
  261. package/dist/logger/console.js +42 -11
  262. package/dist/logger/indentation-methods.d.ts +81 -0
  263. package/dist/logger/indentation-methods.js +121 -0
  264. package/dist/logger/node.d.ts +16 -338
  265. package/dist/logger/node.js +75 -608
  266. package/dist/logger/options.d.ts +39 -0
  267. package/dist/logger/options.js +47 -0
  268. package/dist/logger/semantic-methods.d.ts +63 -0
  269. package/dist/logger/semantic-methods.js +108 -0
  270. package/dist/logger/stream-methods.d.ts +63 -0
  271. package/dist/logger/stream-methods.js +101 -0
  272. package/dist/logger/stream.d.ts +37 -0
  273. package/dist/logger/stream.js +42 -0
  274. package/dist/logger/symbols-builder.js +9 -9
  275. package/dist/logger/symbols.d.ts +2 -25
  276. package/dist/logger/symbols.js +53 -74
  277. package/dist/logger/types.d.ts +1 -1
  278. package/dist/memo/types.d.ts +6 -6
  279. package/dist/native-messaging/host.d.ts +20 -0
  280. package/dist/native-messaging/host.js +120 -0
  281. package/dist/native-messaging/index.d.ts +5 -0
  282. package/dist/native-messaging/index.js +22 -0
  283. package/dist/native-messaging/install.d.ts +60 -0
  284. package/dist/native-messaging/install.js +141 -0
  285. package/dist/native-messaging/rate-limit.d.ts +62 -0
  286. package/dist/native-messaging/rate-limit.js +115 -0
  287. package/dist/native-messaging/run.d.ts +10 -0
  288. package/dist/native-messaging/run.js +17 -0
  289. package/dist/node/async-hooks.js +4 -3
  290. package/dist/node/child-process.js +4 -3
  291. package/dist/node/crypto.js +4 -3
  292. package/dist/node/events.js +4 -3
  293. package/dist/node/fs-promises.js +4 -3
  294. package/dist/node/fs.js +4 -3
  295. package/dist/node/http.js +4 -3
  296. package/dist/node/https.js +4 -3
  297. package/dist/node/module.js +10 -6
  298. package/dist/node/os.js +4 -3
  299. package/dist/node/path.js +4 -3
  300. package/dist/node/timers-promises.js +4 -3
  301. package/dist/node/url.js +4 -3
  302. package/dist/node/util.js +4 -3
  303. package/dist/objects/getters.js +5 -7
  304. package/dist/objects/inspect.js +1 -4
  305. package/dist/objects/mutate.js +2 -3
  306. package/dist/objects/predicates.js +0 -4
  307. package/dist/objects/sort.js +3 -7
  308. package/dist/packages/edit-class.js +15 -16
  309. package/dist/packages/edit.js +12 -14
  310. package/dist/packages/exports.js +11 -17
  311. package/dist/packages/fetch.d.ts +16 -0
  312. package/dist/packages/fetch.js +81 -0
  313. package/dist/packages/find.d.ts +55 -0
  314. package/dist/packages/find.js +65 -0
  315. package/dist/packages/isolation.js +14 -14
  316. package/dist/packages/licenses.js +16 -16
  317. package/dist/packages/manifest.js +12 -15
  318. package/dist/packages/metadata-extensions.d.ts +14 -0
  319. package/dist/packages/metadata-extensions.js +43 -0
  320. package/dist/packages/normalize.js +5 -9
  321. package/dist/packages/provenance.js +16 -18
  322. package/dist/packages/read.d.ts +29 -0
  323. package/dist/packages/read.js +66 -0
  324. package/dist/packages/specs.d.ts +48 -1
  325. package/dist/packages/specs.js +74 -11
  326. package/dist/packages/tarball.d.ts +24 -0
  327. package/dist/packages/tarball.js +79 -0
  328. package/dist/packages/types.d.ts +21 -20
  329. package/dist/packages/validation.js +0 -3
  330. package/dist/paths/_internal.d.ts +2 -1
  331. package/dist/paths/_internal.js +7 -19
  332. package/dist/paths/conversion.js +5 -9
  333. package/dist/paths/filenames.d.ts +0 -1
  334. package/dist/paths/filenames.js +0 -2
  335. package/dist/paths/normalize.js +4 -5
  336. package/dist/paths/packages.js +4 -7
  337. package/dist/paths/predicates.js +9 -16
  338. package/dist/paths/resolve.js +11 -14
  339. package/dist/paths/rewire.js +3 -3
  340. package/dist/paths/socket.js +16 -16
  341. package/dist/paths/walk.d.ts +1 -1
  342. package/dist/paths/walk.js +4 -4
  343. package/dist/perf/report.js +2 -2
  344. package/dist/perf/types.d.ts +1 -1
  345. package/dist/pkg-ext/data.js +1 -1
  346. package/dist/primordials/array.js +9 -9
  347. package/dist/primordials/date.js +2 -2
  348. package/dist/primordials/error.js +3 -3
  349. package/dist/primordials/headers.d.ts +10 -0
  350. package/dist/primordials/headers.js +23 -0
  351. package/dist/primordials/intl.d.ts +13 -0
  352. package/dist/primordials/intl.js +26 -0
  353. package/dist/primordials/math.js +33 -33
  354. package/dist/primordials/number.js +9 -9
  355. package/dist/primordials/object.js +5 -5
  356. package/dist/primordials/string.d.ts +2 -2
  357. package/dist/primordials/string.js +6 -6
  358. package/dist/primordials/symbol.js +3 -3
  359. package/dist/primordials/uncurry.js +9 -9
  360. package/dist/process/abort.js +3 -3
  361. package/dist/process/lock-manager.js +8 -8
  362. package/dist/process/spawn/_internal.js +6 -8
  363. package/dist/process/spawn/child.js +14 -14
  364. package/dist/process/spawn/errors.js +2 -4
  365. package/dist/process/spawn/kill-tree.d.ts +53 -0
  366. package/dist/process/spawn/kill-tree.js +85 -0
  367. package/dist/process/spawn/stdio.js +0 -1
  368. package/dist/process/spawn/types.d.ts +5 -5
  369. package/dist/process/transient.js +2 -2
  370. package/dist/promises/_internal.d.ts +2 -1
  371. package/dist/promises/_internal.js +2 -6
  372. package/dist/promises/iterate.js +11 -15
  373. package/dist/promises/options.js +3 -6
  374. package/dist/promises/retry.js +4 -5
  375. package/dist/promises/timers.d.ts +30 -0
  376. package/dist/promises/timers.js +48 -0
  377. package/dist/releases/github-archives.d.ts +6 -6
  378. package/dist/releases/github-archives.js +2 -2
  379. package/dist/releases/github-asset-url.d.ts +1 -1
  380. package/dist/releases/github-asset-url.js +5 -5
  381. package/dist/releases/github-downloads.d.ts +1 -1
  382. package/dist/releases/github-downloads.js +3 -3
  383. package/dist/releases/github-listing.d.ts +11 -2
  384. package/dist/releases/github-listing.js +20 -7
  385. package/dist/releases/github-retry-config.js +1 -1
  386. package/dist/releases/github-types.d.ts +6 -6
  387. package/dist/releases/socket-btm-binary-naming.d.ts +107 -0
  388. package/dist/releases/socket-btm-binary-naming.js +155 -0
  389. package/dist/releases/socket-btm.d.ts +8 -115
  390. package/dist/releases/socket-btm.js +16 -159
  391. package/dist/schema/types.d.ts +1 -1
  392. package/dist/sea/detect.js +6 -6
  393. package/dist/secrets/_internal.d.ts +2 -2
  394. package/dist/secrets/_internal.js +2 -2
  395. package/dist/secrets/compare.d.ts +45 -0
  396. package/dist/secrets/compare.js +61 -0
  397. package/dist/secrets/keychain.js +6 -4
  398. package/dist/secrets/linux.js +19 -19
  399. package/dist/secrets/macos.d.ts +1 -1
  400. package/dist/secrets/macos.js +13 -13
  401. package/dist/secrets/rc.d.ts +2 -2
  402. package/dist/secrets/rc.js +6 -4
  403. package/dist/secrets/socket-api-token.d.ts +4 -4
  404. package/dist/secrets/socket-api-token.js +18 -9
  405. package/dist/secrets/windows.js +14 -13
  406. package/dist/shadow/skip.js +2 -2
  407. package/dist/smol/detect.js +9 -10
  408. package/dist/smol/http.js +6 -7
  409. package/dist/smol/https.js +6 -7
  410. package/dist/smol/manifest.d.ts +1 -1
  411. package/dist/smol/manifest.js +6 -7
  412. package/dist/smol/path.d.ts +1 -1
  413. package/dist/smol/path.js +7 -8
  414. package/dist/smol/primordial.d.ts +4 -0
  415. package/dist/smol/primordial.js +6 -7
  416. package/dist/smol/purl.d.ts +1 -1
  417. package/dist/smol/purl.js +7 -8
  418. package/dist/smol/versions.js +6 -7
  419. package/dist/smol/vfs.js +6 -7
  420. package/dist/sorts/_internal.js +6 -8
  421. package/dist/sorts/natural.js +10 -12
  422. package/dist/sorts/semver.js +1 -2
  423. package/dist/sorts/strings.js +0 -1
  424. package/dist/sorts/types.d.ts +1 -1
  425. package/dist/spinner/create-spinner-class.d.ts +38 -0
  426. package/dist/spinner/create-spinner-class.js +302 -0
  427. package/dist/spinner/default.js +8 -9
  428. package/dist/spinner/spinner-internals.d.ts +36 -0
  429. package/dist/spinner/spinner-internals.js +101 -0
  430. package/dist/spinner/spinner-shimmer-methods.d.ts +54 -0
  431. package/dist/spinner/spinner-shimmer-methods.js +143 -0
  432. package/dist/spinner/spinner-status-methods.d.ts +40 -0
  433. package/dist/spinner/spinner-status-methods.js +133 -0
  434. package/dist/spinner/spinner.d.ts +4 -5
  435. package/dist/spinner/spinner.js +18 -705
  436. package/dist/spinner/types.d.ts +3 -1
  437. package/dist/spinner/with.d.ts +10 -0
  438. package/dist/spinner/with.js +16 -2
  439. package/dist/stdio/divider.js +1 -1
  440. package/dist/stdio/footer.js +3 -3
  441. package/dist/stdio/header.js +4 -4
  442. package/dist/stdio/progress.js +5 -5
  443. package/dist/stdio/prompts.d.ts +5 -3
  444. package/dist/stdio/prompts.js +6 -7
  445. package/dist/stdio/stdout.js +3 -3
  446. package/dist/streams/parallel.js +3 -5
  447. package/dist/streams/transform.js +2 -3
  448. package/dist/strings/format.js +2 -6
  449. package/dist/strings/predicates.js +0 -2
  450. package/dist/strings/search.js +1 -2
  451. package/dist/strings/transform.js +0 -3
  452. package/dist/strings/width.js +9 -10
  453. package/dist/tables/bordered.js +4 -3
  454. package/dist/tables/padding.js +1 -1
  455. package/dist/tables/simple.js +8 -5
  456. package/dist/temporal/instant.js +1 -1
  457. package/dist/temporal/slots.js +6 -6
  458. package/dist/temporal/system.js +9 -9
  459. package/dist/themes/context.d.ts +3 -2
  460. package/dist/themes/context.js +4 -5
  461. package/dist/themes/themes.js +15 -15
  462. package/dist/themes/types.d.ts +3 -3
  463. package/dist/url/parse.js +0 -2
  464. package/dist/url/predicates.js +1 -2
  465. package/dist/url/search-params.js +3 -9
  466. package/dist/url/types.d.ts +5 -5
  467. package/dist/versions/_internal.js +3 -3
  468. package/dist/words/article.js +0 -1
  469. package/dist/words/capitalize.js +0 -1
  470. package/dist/words/pluralize.js +15 -5
  471. package/package.json +247 -106
  472. package/dist/external-tools/uv/asset-names.d.ts +0 -36
  473. package/dist/external-tools/uv/asset-names.js +0 -70
  474. package/dist/external-tools/uv/from-download.d.ts +0 -17
  475. package/dist/external-tools/uv/from-download.js +0 -47
  476. package/dist/external-tools/uv/from-path.d.ts +0 -5
  477. package/dist/external-tools/uv/from-path.js +0 -22
  478. package/dist/external-tools/uv/from-vfs.d.ts +0 -7
  479. package/dist/external-tools/uv/from-vfs.js +0 -26
  480. package/dist/external-tools/uv/resolve.d.ts +0 -25
  481. package/dist/external-tools/uv/resolve.js +0 -53
  482. package/dist/external-tools/uv/types.d.ts +0 -24
  483. package/dist/http-request/checksums.d.ts +0 -69
  484. package/dist/http-request/checksums.js +0 -108
  485. package/dist/http-request/http-request.d.ts +0 -12
  486. package/dist/http-request/http-request.js +0 -11
  487. package/dist/packages/operations.d.ts +0 -113
  488. package/dist/packages/operations.js +0 -304
  489. package/dist/ssri/convert.d.ts +0 -48
  490. package/dist/ssri/convert.js +0 -69
  491. package/dist/ssri/parse.d.ts +0 -27
  492. package/dist/ssri/parse.js +0 -41
  493. package/dist/ssri/validate.d.ts +0 -41
  494. package/dist/ssri/validate.js +0 -56
  495. /package/dist/{bin → cli}/check.d.ts +0 -0
  496. /package/dist/external-tools/{uv → python}/types.js +0 -0
  497. /package/dist/fs/{path-cache.d.ts → allowed-dirs-cache.d.ts} +0 -0
  498. /package/dist/fs/{find-up.d.ts → find.d.ts} +0 -0
  499. /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;