@socketsecurity/lib 6.0.5 → 6.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/ai/discover.d.mts +2 -2
  3. package/dist/ai/discover.js +6 -4
  4. package/dist/ai/spawn.js +10 -6
  5. package/dist/ai/types.d.mts +18 -6
  6. package/dist/ai/worktree.d.mts +6 -6
  7. package/dist/ai/worktree.js +12 -7
  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 +4 -6
  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/acorn-bindgen.cjs +769 -0
  27. package/dist/bin/acorn.wasm +0 -0
  28. package/dist/bin/exec.js +2 -3
  29. package/dist/bin/find.js +13 -13
  30. package/dist/bin/prim.cjs +39244 -0
  31. package/dist/bin/resolve.js +12 -13
  32. package/dist/bin/which.js +8 -8
  33. package/dist/cache/ttl/store.js +5 -5
  34. package/dist/checks/primordials-defaults.d.ts +3 -3
  35. package/dist/checks/primordials-defaults.js +3 -3
  36. package/dist/checks/primordials.js +4 -3
  37. package/dist/{bin → cli}/check-primordials.d.ts +11 -11
  38. package/dist/{bin → cli}/check-primordials.js +56 -52
  39. package/dist/{bin → cli}/check.js +6 -5
  40. package/dist/{bin → cli}/socket-lib.d.ts +1 -1
  41. package/dist/{bin → cli}/socket-lib.js +4 -4
  42. package/dist/colors/socket-palette.js +7 -9
  43. package/dist/compression/_internal.d.ts +12 -12
  44. package/dist/compression/_internal.js +20 -19
  45. package/dist/compression/brotli.d.ts +25 -25
  46. package/dist/compression/brotli.js +37 -44
  47. package/dist/compression/gzip.d.ts +23 -23
  48. package/dist/compression/gzip.js +44 -52
  49. package/dist/constants/agents.d.ts +3 -1
  50. package/dist/constants/agents.js +15 -11
  51. package/dist/constants/licenses.js +3 -3
  52. package/dist/constants/node.d.ts +23 -0
  53. package/dist/constants/node.js +47 -15
  54. package/dist/constants/packages.js +22 -28
  55. package/dist/constants/platform.d.ts +30 -3
  56. package/dist/constants/platform.js +72 -12
  57. package/dist/constants/runtime.d.ts +22 -0
  58. package/dist/constants/runtime.js +32 -0
  59. package/dist/constants/socket.js +1 -1
  60. package/dist/cover/code.js +8 -8
  61. package/dist/cover/formatters.js +5 -5
  62. package/dist/crypto/hash.d.ts +26 -1
  63. package/dist/crypto/hash.js +43 -12
  64. package/dist/debug/_internal.js +4 -6
  65. package/dist/debug/caller-info.js +2 -3
  66. package/dist/debug/namespace.d.ts +7 -0
  67. package/dist/debug/namespace.js +21 -12
  68. package/dist/debug/output.js +21 -24
  69. package/dist/debug/types.d.ts +4 -4
  70. package/dist/dlx/arborist.js +6 -6
  71. package/dist/dlx/binary-cache.js +14 -14
  72. package/dist/dlx/binary-download.d.ts +1 -1
  73. package/dist/dlx/binary-download.js +14 -13
  74. package/dist/dlx/binary-resolution.js +16 -14
  75. package/dist/dlx/binary-types.d.ts +5 -5
  76. package/dist/dlx/binary.js +5 -5
  77. package/dist/dlx/cache.js +1 -1
  78. package/dist/dlx/detect.d.ts +34 -25
  79. package/dist/dlx/detect.js +86 -77
  80. package/dist/dlx/dir.js +2 -2
  81. package/dist/dlx/firewall.d.ts +1 -1
  82. package/dist/dlx/lockfile.d.ts +19 -18
  83. package/dist/dlx/lockfile.js +16 -16
  84. package/dist/dlx/manifest.d.ts +6 -6
  85. package/dist/dlx/manifest.js +5 -5
  86. package/dist/dlx/package.d.ts +10 -10
  87. package/dist/dlx/package.js +16 -16
  88. package/dist/dlx/packages.js +4 -4
  89. package/dist/dlx/paths.js +7 -7
  90. package/dist/dlx/spec.js +1 -1
  91. package/dist/dlx/types.d.ts +28 -27
  92. package/dist/eco/cargo/parse-lockfile.d.ts +1 -1
  93. package/dist/eco/cargo/parse-lockfile.js +2 -2
  94. package/dist/eco/manifest/analyze-lockfile.js +2 -2
  95. package/dist/eco/manifest/detect-format.js +4 -4
  96. package/dist/eco/manifest/find-packages.js +2 -2
  97. package/dist/eco/manifest/get-package-versions.js +2 -2
  98. package/dist/eco/manifest/get-package.js +2 -2
  99. package/dist/eco/manifest/parse-lockfile.js +2 -2
  100. package/dist/eco/manifest/parse-manifest.js +2 -2
  101. package/dist/eco/manifest/parse.js +2 -2
  102. package/dist/eco/npm/npm/exec.js +2 -2
  103. package/dist/eco/npm/npm/flags.js +7 -12
  104. package/dist/eco/npm/npm/parse-lockfile.d.ts +14 -14
  105. package/dist/eco/npm/npm/parse-lockfile.js +3 -3
  106. package/dist/eco/npm/parse-package-json.js +3 -3
  107. package/dist/eco/npm/pnpm/exec.d.ts +1 -1
  108. package/dist/eco/npm/pnpm/exec.js +5 -5
  109. package/dist/eco/npm/pnpm/flags.js +0 -3
  110. package/dist/eco/npm/pnpm/parse-lockfile.d.ts +1 -1
  111. package/dist/eco/npm/pnpm/parse-lockfile.js +4 -4
  112. package/dist/eco/npm/script.js +9 -6
  113. package/dist/eco/npm/yarnpkg/yarn/exec.js +3 -3
  114. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +2 -2
  115. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +8 -8
  116. package/dist/effects/pulse-frames.d.ts +3 -1
  117. package/dist/effects/shimmer-keyframes.d.ts +1 -1
  118. package/dist/effects/shimmer-terminal.d.ts +1 -1
  119. package/dist/env/boolean.js +0 -1
  120. package/dist/env/ci.js +0 -1
  121. package/dist/env/debug.js +0 -1
  122. package/dist/env/github-status.d.ts +51 -0
  123. package/dist/env/github-status.js +90 -0
  124. package/dist/env/github.js +0 -8
  125. package/dist/env/home.js +0 -1
  126. package/dist/env/locale.js +0 -3
  127. package/dist/env/node-auth-token.js +0 -1
  128. package/dist/env/node-env.js +0 -1
  129. package/dist/env/node-version-managers.d.ts +53 -0
  130. package/dist/env/node-version-managers.js +90 -0
  131. package/dist/env/npm.js +0 -5
  132. package/dist/env/number.js +0 -1
  133. package/dist/env/package-manager.js +3 -6
  134. package/dist/env/path.js +0 -1
  135. package/dist/env/pre-commit.js +1 -2
  136. package/dist/env/rewire.d.ts +7 -6
  137. package/dist/env/rewire.js +15 -16
  138. package/dist/env/shell.js +0 -1
  139. package/dist/env/socket-cli.js +5 -18
  140. package/dist/env/socket-mcp.d.ts +114 -0
  141. package/dist/env/socket-mcp.js +146 -0
  142. package/dist/env/socket.d.ts +1 -109
  143. package/dist/env/socket.js +12 -166
  144. package/dist/env/string.js +0 -1
  145. package/dist/env/temp-dir.js +0 -3
  146. package/dist/env/term.js +0 -1
  147. package/dist/env/test.js +3 -6
  148. package/dist/env/windows.js +0 -4
  149. package/dist/env/xdg.js +0 -3
  150. package/dist/events/exit/_internal.d.ts +11 -9
  151. package/dist/events/exit/_internal.js +31 -35
  152. package/dist/events/exit/handler.js +3 -4
  153. package/dist/events/exit/intercept.js +4 -6
  154. package/dist/events/exit/lifecycle.js +16 -18
  155. package/dist/events/exit/signals.js +1 -2
  156. package/dist/events/exit/types.d.ts +6 -5
  157. package/dist/external/@npmcli/package-json.js +2 -2
  158. package/dist/external/@sinclair/typebox/value.js +5 -1
  159. package/dist/external/@sinclair/typebox.js +5 -1
  160. package/dist/external/@socketregistry/packageurl-js.js +27 -0
  161. package/dist/external/npm-pack.js +2 -2
  162. package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
  163. package/dist/external-tools/bazel/resolve.js +2 -1
  164. package/dist/external-tools/bazel/types.d.ts +1 -1
  165. package/dist/external-tools/cdxgen/from-vfs.js +1 -1
  166. package/dist/external-tools/cdxgen/resolve.js +2 -1
  167. package/dist/external-tools/cdxgen/types.d.ts +1 -1
  168. package/dist/external-tools/from-download.d.ts +1 -1
  169. package/dist/external-tools/from-download.js +1 -1
  170. package/dist/external-tools/from-pip-venv.d.ts +73 -0
  171. package/dist/external-tools/from-pip-venv.js +98 -0
  172. package/dist/external-tools/janus/asset-names.js +1 -1
  173. package/dist/external-tools/janus/from-download.js +3 -5
  174. package/dist/external-tools/janus/from-vfs.js +1 -1
  175. package/dist/external-tools/janus/resolve.js +2 -1
  176. package/dist/external-tools/janus/types.d.ts +1 -1
  177. package/dist/external-tools/jre/detect-platform-arch.d.ts +10 -6
  178. package/dist/external-tools/jre/detect-platform-arch.js +29 -14
  179. package/dist/external-tools/jre/from-download.js +2 -1
  180. package/dist/external-tools/jre/from-vfs.js +1 -1
  181. package/dist/external-tools/jre/resolve.js +2 -1
  182. package/dist/external-tools/jre/types.d.ts +1 -1
  183. package/dist/external-tools/manifest.d.ts +7 -7
  184. package/dist/external-tools/manifest.js +18 -16
  185. package/dist/external-tools/opengrep/from-vfs.js +1 -1
  186. package/dist/external-tools/opengrep/resolve.js +2 -1
  187. package/dist/external-tools/opengrep/types.d.ts +1 -1
  188. package/dist/external-tools/python/asset-names.d.ts +76 -0
  189. package/dist/external-tools/python/asset-names.js +104 -0
  190. package/dist/external-tools/python/dlx.d.ts +80 -0
  191. package/dist/external-tools/python/dlx.js +87 -0
  192. package/dist/external-tools/python/from-download.d.ts +53 -0
  193. package/dist/external-tools/python/from-download.js +68 -0
  194. package/dist/external-tools/python/from-path.d.ts +7 -0
  195. package/dist/external-tools/python/from-path.js +23 -0
  196. package/dist/external-tools/python/pin.d.ts +121 -0
  197. package/dist/external-tools/python/pin.js +173 -0
  198. package/dist/external-tools/python/pip-install.d.ts +75 -0
  199. package/dist/external-tools/python/pip-install.js +139 -0
  200. package/dist/external-tools/python/resolve.d.ts +42 -0
  201. package/dist/external-tools/python/resolve.js +58 -0
  202. package/dist/external-tools/python/types.d.ts +49 -0
  203. package/dist/external-tools/sbt/from-vfs.js +1 -1
  204. package/dist/external-tools/sbt/resolve.js +2 -1
  205. package/dist/external-tools/sbt/types.d.ts +1 -1
  206. package/dist/external-tools/skillspector/from-dlx.d.ts +24 -0
  207. package/dist/external-tools/skillspector/from-dlx.js +41 -0
  208. package/dist/external-tools/skillspector/from-path.d.ts +8 -0
  209. package/dist/external-tools/skillspector/from-path.js +30 -0
  210. package/dist/external-tools/skillspector/from-vfs.d.ts +8 -0
  211. package/dist/external-tools/skillspector/from-vfs.js +27 -0
  212. package/dist/external-tools/skillspector/resolve.d.ts +34 -0
  213. package/dist/external-tools/skillspector/resolve.js +53 -0
  214. package/dist/external-tools/skillspector/types.d.ts +24 -0
  215. package/dist/external-tools/skillspector/types.js +2 -0
  216. package/dist/external-tools/synp/from-download.js +2 -2
  217. package/dist/external-tools/synp/from-vfs.js +1 -1
  218. package/dist/external-tools/synp/resolve.js +2 -1
  219. package/dist/external-tools/trivy/from-vfs.js +1 -1
  220. package/dist/external-tools/trivy/resolve.js +2 -1
  221. package/dist/external-tools/trivy/types.d.ts +1 -1
  222. package/dist/external-tools/trufflehog/from-vfs.js +1 -1
  223. package/dist/external-tools/trufflehog/resolve.js +2 -1
  224. package/dist/external-tools/trufflehog/types.d.ts +1 -1
  225. package/dist/fs/_internal.d.ts +1 -1
  226. package/dist/fs/_internal.js +7 -7
  227. package/dist/fs/access.js +5 -9
  228. package/dist/fs/{path-cache.js → allowed-dirs-cache.js} +1 -1
  229. package/dist/fs/encoding.js +5 -7
  230. package/dist/fs/{find-up.js → find.js} +11 -13
  231. package/dist/fs/inspect.js +7 -13
  232. package/dist/fs/read-dir.js +7 -10
  233. package/dist/fs/read-file.js +8 -14
  234. package/dist/fs/read-json-cache.d.ts +6 -4
  235. package/dist/fs/read-json-cache.js +9 -6
  236. package/dist/fs/read-json.js +4 -6
  237. package/dist/fs/resolve-module.js +1 -1
  238. package/dist/fs/safe.d.ts +1 -1
  239. package/dist/fs/safe.js +12 -13
  240. package/dist/fs/unique.js +4 -5
  241. package/dist/fs/validate.js +1 -2
  242. package/dist/fs/write-json.js +4 -5
  243. package/dist/git/_internal.js +12 -11
  244. package/dist/git/changed.js +4 -4
  245. package/dist/git/repo.js +3 -3
  246. package/dist/git/staged.js +4 -4
  247. package/dist/git/unstaged.js +4 -4
  248. package/dist/github/ghsa.js +2 -2
  249. package/dist/github/refs-cache.d.ts +1 -1
  250. package/dist/github/refs-cache.js +5 -5
  251. package/dist/github/refs-rest.js +5 -5
  252. package/dist/github/{fetch.js → request.js} +13 -2
  253. package/dist/github/token.js +1 -1
  254. package/dist/github/types.d.ts +1 -1
  255. package/dist/globs/_internal.js +7 -9
  256. package/dist/globs/match.js +6 -7
  257. package/dist/globs/matcher.d.ts +3 -3
  258. package/dist/globs/matcher.js +12 -14
  259. package/dist/globs/stream.js +1 -2
  260. package/dist/globs/types.d.ts +24 -24
  261. package/dist/http-request/_internal.d.ts +1 -1
  262. package/dist/http-request/browser.js +21 -13
  263. package/dist/http-request/checksum-file.d.ts +55 -0
  264. package/dist/http-request/checksum-file.js +95 -0
  265. package/dist/http-request/download-types.d.ts +15 -23
  266. package/dist/http-request/download.js +4 -4
  267. package/dist/http-request/headers.d.ts +32 -3
  268. package/dist/http-request/headers.js +41 -13
  269. package/dist/http-request/request-attempt.js +38 -33
  270. package/dist/http-request/request-types.d.ts +7 -2
  271. package/dist/http-request/request.js +33 -16
  272. package/dist/http-request/response-reader.d.ts +12 -1
  273. package/dist/http-request/response-reader.js +22 -2
  274. package/dist/http-request/user-agent.js +3 -4
  275. package/dist/integrity.d.ts +86 -18
  276. package/dist/integrity.js +119 -30
  277. package/dist/ipc/directory.js +2 -2
  278. package/dist/ipc/paths.js +1 -1
  279. package/dist/ipc/write.js +1 -1
  280. package/dist/ipc-cli/get.js +12 -12
  281. package/dist/json/edit.js +13 -14
  282. package/dist/json/format.js +2 -2
  283. package/dist/json/parse.d.ts +1 -1
  284. package/dist/json/parse.js +3 -7
  285. package/dist/logger/_internal.d.ts +4 -4
  286. package/dist/logger/_internal.js +3 -3
  287. package/dist/logger/colors.js +4 -3
  288. package/dist/logger/console-methods.d.ts +132 -0
  289. package/dist/logger/console-methods.js +169 -0
  290. package/dist/logger/console.d.ts +12 -0
  291. package/dist/logger/console.js +42 -11
  292. package/dist/logger/indentation-methods.d.ts +81 -0
  293. package/dist/logger/indentation-methods.js +121 -0
  294. package/dist/logger/node.d.ts +16 -338
  295. package/dist/logger/node.js +75 -608
  296. package/dist/logger/options.d.ts +39 -0
  297. package/dist/logger/options.js +47 -0
  298. package/dist/logger/semantic-methods.d.ts +63 -0
  299. package/dist/logger/semantic-methods.js +108 -0
  300. package/dist/logger/stream-methods.d.ts +63 -0
  301. package/dist/logger/stream-methods.js +101 -0
  302. package/dist/logger/stream.d.ts +37 -0
  303. package/dist/logger/stream.js +42 -0
  304. package/dist/logger/symbols-builder.js +9 -9
  305. package/dist/logger/symbols.d.ts +2 -25
  306. package/dist/logger/symbols.js +53 -74
  307. package/dist/logger/types.d.ts +1 -1
  308. package/dist/memo/types.d.ts +6 -6
  309. package/dist/native-messaging/host.d.ts +20 -0
  310. package/dist/native-messaging/host.js +120 -0
  311. package/dist/native-messaging/index.d.ts +5 -0
  312. package/dist/native-messaging/index.js +22 -0
  313. package/dist/native-messaging/install.d.ts +60 -0
  314. package/dist/native-messaging/install.js +141 -0
  315. package/dist/native-messaging/rate-limit.d.ts +62 -0
  316. package/dist/native-messaging/rate-limit.js +115 -0
  317. package/dist/native-messaging/run.d.ts +10 -0
  318. package/dist/native-messaging/run.js +17 -0
  319. package/dist/node/async-hooks.js +4 -3
  320. package/dist/node/child-process.js +4 -3
  321. package/dist/node/crypto.js +4 -3
  322. package/dist/node/events.js +4 -3
  323. package/dist/node/fs-promises.js +4 -3
  324. package/dist/node/fs.js +4 -3
  325. package/dist/node/http.js +4 -3
  326. package/dist/node/https.js +4 -3
  327. package/dist/node/module.js +10 -6
  328. package/dist/node/os.js +4 -3
  329. package/dist/node/path.js +4 -3
  330. package/dist/node/timers-promises.js +4 -3
  331. package/dist/node/url.js +4 -3
  332. package/dist/node/util.js +4 -3
  333. package/dist/objects/getters.js +5 -7
  334. package/dist/objects/inspect.js +1 -4
  335. package/dist/objects/mutate.js +2 -3
  336. package/dist/objects/predicates.js +0 -4
  337. package/dist/objects/sort.js +3 -7
  338. package/dist/packages/edit-class.js +15 -16
  339. package/dist/packages/edit.js +12 -14
  340. package/dist/packages/exports.js +11 -17
  341. package/dist/packages/fetch.d.ts +16 -0
  342. package/dist/packages/fetch.js +81 -0
  343. package/dist/packages/find.d.ts +55 -0
  344. package/dist/packages/find.js +65 -0
  345. package/dist/packages/isolation.js +14 -14
  346. package/dist/packages/licenses.js +16 -16
  347. package/dist/packages/manifest.js +12 -15
  348. package/dist/packages/metadata-extensions.d.ts +14 -0
  349. package/dist/packages/metadata-extensions.js +43 -0
  350. package/dist/packages/normalize.js +5 -9
  351. package/dist/packages/provenance.d.ts +6 -0
  352. package/dist/packages/provenance.js +25 -18
  353. package/dist/packages/read.d.ts +29 -0
  354. package/dist/packages/read.js +66 -0
  355. package/dist/packages/specs.d.ts +48 -1
  356. package/dist/packages/specs.js +74 -11
  357. package/dist/packages/tarball.d.ts +24 -0
  358. package/dist/packages/tarball.js +79 -0
  359. package/dist/packages/types.d.ts +21 -20
  360. package/dist/packages/validation.js +0 -3
  361. package/dist/paths/_internal.d.ts +2 -1
  362. package/dist/paths/_internal.js +7 -19
  363. package/dist/paths/conversion.js +5 -9
  364. package/dist/paths/filenames.d.ts +0 -1
  365. package/dist/paths/filenames.js +0 -2
  366. package/dist/paths/normalize.js +6 -5
  367. package/dist/paths/packages.js +4 -7
  368. package/dist/paths/predicates.js +9 -16
  369. package/dist/paths/resolve.js +11 -14
  370. package/dist/paths/rewire.js +3 -3
  371. package/dist/paths/socket.js +16 -16
  372. package/dist/paths/walk.d.ts +1 -1
  373. package/dist/paths/walk.js +4 -4
  374. package/dist/perf/report.js +2 -2
  375. package/dist/perf/types.d.ts +1 -1
  376. package/dist/pkg-ext/data.js +1 -1
  377. package/dist/primordials/array.js +9 -9
  378. package/dist/primordials/date.js +2 -2
  379. package/dist/primordials/error.js +3 -3
  380. package/dist/primordials/headers.d.ts +10 -0
  381. package/dist/primordials/headers.js +23 -0
  382. package/dist/primordials/intl.d.ts +13 -0
  383. package/dist/primordials/intl.js +26 -0
  384. package/dist/primordials/math.js +33 -33
  385. package/dist/primordials/number.js +9 -9
  386. package/dist/primordials/object.js +5 -5
  387. package/dist/primordials/string.d.ts +2 -2
  388. package/dist/primordials/string.js +6 -6
  389. package/dist/primordials/symbol.js +3 -3
  390. package/dist/primordials/uncurry.js +9 -9
  391. package/dist/process/abort.js +3 -3
  392. package/dist/process/lock-manager.js +8 -8
  393. package/dist/process/spawn/_internal.js +6 -8
  394. package/dist/process/spawn/child.js +14 -14
  395. package/dist/process/spawn/errors.js +2 -4
  396. package/dist/process/spawn/kill-tree.d.ts +53 -0
  397. package/dist/process/spawn/kill-tree.js +85 -0
  398. package/dist/process/spawn/stdio.js +0 -1
  399. package/dist/process/spawn/types.d.ts +5 -5
  400. package/dist/process/transient.js +2 -2
  401. package/dist/promises/_internal.d.ts +2 -1
  402. package/dist/promises/_internal.js +2 -6
  403. package/dist/promises/iterate.js +12 -16
  404. package/dist/promises/options.js +3 -6
  405. package/dist/promises/retry.js +4 -5
  406. package/dist/promises/timers.d.ts +30 -0
  407. package/dist/promises/timers.js +48 -0
  408. package/dist/releases/github-archives.d.ts +6 -6
  409. package/dist/releases/github-archives.js +2 -2
  410. package/dist/releases/github-asset-url.d.ts +1 -1
  411. package/dist/releases/github-asset-url.js +5 -5
  412. package/dist/releases/github-downloads.d.ts +1 -1
  413. package/dist/releases/github-downloads.js +3 -3
  414. package/dist/releases/github-listing.d.ts +11 -2
  415. package/dist/releases/github-listing.js +20 -7
  416. package/dist/releases/github-retry-config.js +1 -1
  417. package/dist/releases/github-types.d.ts +6 -6
  418. package/dist/releases/socket-btm-binary-naming.d.ts +107 -0
  419. package/dist/releases/socket-btm-binary-naming.js +155 -0
  420. package/dist/releases/socket-btm.d.ts +8 -115
  421. package/dist/releases/socket-btm.js +16 -159
  422. package/dist/schema/types.d.ts +1 -1
  423. package/dist/sea/detect.js +6 -6
  424. package/dist/secrets/_internal.d.ts +2 -2
  425. package/dist/secrets/_internal.js +5 -4
  426. package/dist/secrets/compare.d.ts +45 -0
  427. package/dist/secrets/compare.js +61 -0
  428. package/dist/secrets/keychain.js +9 -6
  429. package/dist/secrets/linux.js +25 -23
  430. package/dist/secrets/macos.d.ts +1 -1
  431. package/dist/secrets/macos.js +18 -16
  432. package/dist/secrets/rc.d.ts +2 -2
  433. package/dist/secrets/rc.js +15 -10
  434. package/dist/secrets/socket-api-token.d.ts +4 -4
  435. package/dist/secrets/socket-api-token.js +18 -9
  436. package/dist/secrets/windows.js +21 -17
  437. package/dist/shadow/skip.js +2 -2
  438. package/dist/shell/parse.d.ts +108 -1
  439. package/dist/shell/parse.js +168 -2
  440. package/dist/smol/detect.js +9 -10
  441. package/dist/smol/http.js +6 -7
  442. package/dist/smol/https.js +6 -7
  443. package/dist/smol/manifest.d.ts +1 -1
  444. package/dist/smol/manifest.js +6 -7
  445. package/dist/smol/path.d.ts +1 -1
  446. package/dist/smol/path.js +7 -8
  447. package/dist/smol/primordial.d.ts +4 -0
  448. package/dist/smol/primordial.js +6 -7
  449. package/dist/smol/purl.d.ts +1 -1
  450. package/dist/smol/purl.js +7 -8
  451. package/dist/smol/versions.js +6 -7
  452. package/dist/smol/vfs.js +6 -7
  453. package/dist/sorts/_internal.js +6 -8
  454. package/dist/sorts/natural.js +10 -12
  455. package/dist/sorts/semver.js +1 -2
  456. package/dist/sorts/strings.js +0 -1
  457. package/dist/sorts/types.d.ts +1 -1
  458. package/dist/spinner/create-spinner-class.d.ts +38 -0
  459. package/dist/spinner/create-spinner-class.js +302 -0
  460. package/dist/spinner/default.js +8 -9
  461. package/dist/spinner/spinner-internals.d.ts +36 -0
  462. package/dist/spinner/spinner-internals.js +101 -0
  463. package/dist/spinner/spinner-shimmer-methods.d.ts +54 -0
  464. package/dist/spinner/spinner-shimmer-methods.js +143 -0
  465. package/dist/spinner/spinner-status-methods.d.ts +40 -0
  466. package/dist/spinner/spinner-status-methods.js +133 -0
  467. package/dist/spinner/spinner.d.ts +4 -5
  468. package/dist/spinner/spinner.js +18 -705
  469. package/dist/spinner/types.d.ts +3 -1
  470. package/dist/spinner/with.d.ts +10 -0
  471. package/dist/spinner/with.js +16 -2
  472. package/dist/stdio/divider.js +1 -1
  473. package/dist/stdio/footer.js +3 -3
  474. package/dist/stdio/header.js +4 -4
  475. package/dist/stdio/progress.js +5 -5
  476. package/dist/stdio/prompts.d.ts +5 -3
  477. package/dist/stdio/prompts.js +6 -7
  478. package/dist/stdio/stdout.js +3 -3
  479. package/dist/streams/parallel.js +3 -5
  480. package/dist/streams/transform.js +2 -3
  481. package/dist/strings/format.js +2 -6
  482. package/dist/strings/predicates.js +0 -2
  483. package/dist/strings/search.js +1 -2
  484. package/dist/strings/transform.js +0 -3
  485. package/dist/strings/width.js +9 -10
  486. package/dist/tables/bordered.js +4 -3
  487. package/dist/tables/padding.js +1 -1
  488. package/dist/tables/simple.js +8 -5
  489. package/dist/temporal/instant.js +4 -2
  490. package/dist/temporal/slots.js +7 -6
  491. package/dist/temporal/system.js +9 -9
  492. package/dist/themes/context.d.ts +3 -2
  493. package/dist/themes/context.js +4 -5
  494. package/dist/themes/themes.js +15 -15
  495. package/dist/themes/types.d.ts +3 -3
  496. package/dist/url/parse.js +0 -2
  497. package/dist/url/predicates.js +1 -2
  498. package/dist/url/search-params.js +3 -9
  499. package/dist/url/types.d.ts +5 -5
  500. package/dist/versions/_internal.js +3 -3
  501. package/dist/words/article.js +0 -1
  502. package/dist/words/capitalize.js +0 -1
  503. package/dist/words/pluralize.d.ts +24 -2
  504. package/dist/words/pluralize.js +47 -2
  505. package/dist/words/types.d.ts +25 -2
  506. package/package.json +289 -108
  507. package/dist/external-tools/uv/asset-names.d.ts +0 -36
  508. package/dist/external-tools/uv/asset-names.js +0 -70
  509. package/dist/external-tools/uv/from-download.d.ts +0 -17
  510. package/dist/external-tools/uv/from-download.js +0 -47
  511. package/dist/external-tools/uv/from-path.d.ts +0 -5
  512. package/dist/external-tools/uv/from-path.js +0 -22
  513. package/dist/external-tools/uv/from-vfs.d.ts +0 -7
  514. package/dist/external-tools/uv/from-vfs.js +0 -26
  515. package/dist/external-tools/uv/resolve.d.ts +0 -25
  516. package/dist/external-tools/uv/resolve.js +0 -52
  517. package/dist/external-tools/uv/types.d.ts +0 -24
  518. package/dist/http-request/checksums.d.ts +0 -69
  519. package/dist/http-request/checksums.js +0 -108
  520. package/dist/http-request/http-request.d.ts +0 -12
  521. package/dist/http-request/http-request.js +0 -11
  522. package/dist/packages/operations.d.ts +0 -113
  523. package/dist/packages/operations.js +0 -304
  524. package/dist/ssri/convert.d.ts +0 -48
  525. package/dist/ssri/convert.js +0 -69
  526. package/dist/ssri/parse.d.ts +0 -27
  527. package/dist/ssri/parse.js +0 -41
  528. package/dist/ssri/validate.d.ts +0 -41
  529. package/dist/ssri/validate.js +0 -56
  530. /package/dist/{bin → cli}/check.d.ts +0 -0
  531. /package/dist/external-tools/{uv → python}/types.js +0 -0
  532. /package/dist/fs/{path-cache.d.ts → allowed-dirs-cache.d.ts} +0 -0
  533. /package/dist/fs/{find-up.d.ts → find.d.ts} +0 -0
  534. /package/dist/github/{fetch.d.ts → request.d.ts} +0 -0
@@ -3,7 +3,8 @@
3
3
  * context isolation via AsyncLocalStorage.
4
4
  */
5
5
  import type { Theme } from './types';
6
- import { type ThemeName } from './themes';
6
+ import type { ThemeName } from './themes';
7
+ import type * as AsyncHooks from 'node:async_hooks';
7
8
  /**
8
9
  * Theme change event listener signature.
9
10
  */
@@ -19,7 +20,7 @@ export declare function emitThemeChange(theme: Theme): void;
19
20
  *
20
21
  * @private
21
22
  */
22
- export declare function getAsyncHooks(): typeof import('node:async_hooks');
23
+ export declare function getAsyncHooks(): typeof AsyncHooks;
23
24
  /**
24
25
  * Get the active theme from context.
25
26
  *
@@ -5,7 +5,7 @@ const require_primordials_map_set = require('../primordials/map-set.js');
5
5
  const require_themes_themes = require('./themes.js');
6
6
 
7
7
  //#region src/themes/context.ts
8
- let _async_hooks;
8
+ let asyncHooks;
9
9
  /**
10
10
  * Emit theme change event to listeners.
11
11
  *
@@ -19,15 +19,14 @@ function emitThemeChange(theme) {
19
19
  *
20
20
  * @private
21
21
  */
22
- /* @__NO_SIDE_EFFECTS__ */
23
22
  function getAsyncHooks() {
24
- if (_async_hooks === void 0) _async_hooks = /* @__PURE__ */ require("node:async_hooks");
25
- return _async_hooks;
23
+ if (asyncHooks === void 0) asyncHooks = /*@__PURE__*/ require("node:async_hooks");
24
+ return asyncHooks;
26
25
  }
27
26
  /**
28
27
  * AsyncLocalStorage for theme context isolation.
29
28
  */
30
- const { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks();
29
+ const { AsyncLocalStorage } = getAsyncHooks();
31
30
  const themeStorage = new AsyncLocalStorage();
32
31
  /**
33
32
  * Fallback theme for global context.
@@ -8,8 +8,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
8
8
  * designed for focus and elegance.
9
9
  */
10
10
  const SOCKET_THEME = {
11
- name: "socket",
12
- displayName: "Socket Security",
13
11
  colors: {
14
12
  primary: [
15
13
  140,
@@ -26,6 +24,7 @@ const SOCKET_THEME = {
26
24
  link: "cyanBright",
27
25
  prompt: "primary"
28
26
  },
27
+ displayName: "Socket Security",
29
28
  effects: {
30
29
  spinner: {
31
30
  color: "primary",
@@ -41,15 +40,14 @@ const SOCKET_THEME = {
41
40
  meta: {
42
41
  description: "Signature theme with refined violet and subtle shimmer",
43
42
  version: "1.0.0"
44
- }
43
+ },
44
+ name: "socket"
45
45
  };
46
46
  /**
47
47
  * Sunset — Vibrant twilight gradient. Warm sunset palette with orange and
48
48
  * purple/pink tones.
49
49
  */
50
50
  const SUNSET_THEME = {
51
- name: "sunset",
52
- displayName: "Sunset",
53
51
  colors: {
54
52
  primary: [
55
53
  255,
@@ -71,6 +69,7 @@ const SUNSET_THEME = {
71
69
  link: "primary",
72
70
  prompt: "primary"
73
71
  },
72
+ displayName: "Sunset",
74
73
  effects: {
75
74
  spinner: {
76
75
  color: "primary",
@@ -94,15 +93,14 @@ const SUNSET_THEME = {
94
93
  meta: {
95
94
  description: "Warm sunset theme with purple-to-orange gradient",
96
95
  version: "2.0.0"
97
- }
96
+ },
97
+ name: "sunset"
98
98
  };
99
99
  /**
100
100
  * Terracotta — Solid warmth. Rich terracotta and ember tones for grounded
101
101
  * confidence.
102
102
  */
103
103
  const TERRACOTTA_THEME = {
104
- name: "terracotta",
105
- displayName: "Terracotta",
106
104
  colors: {
107
105
  primary: [
108
106
  255,
@@ -124,6 +122,7 @@ const TERRACOTTA_THEME = {
124
122
  link: "secondary",
125
123
  prompt: "primary"
126
124
  },
125
+ displayName: "Terracotta",
127
126
  effects: {
128
127
  spinner: {
129
128
  color: "primary",
@@ -139,14 +138,13 @@ const TERRACOTTA_THEME = {
139
138
  meta: {
140
139
  description: "Solid theme with rich terracotta and ember warmth",
141
140
  version: "1.0.0"
142
- }
141
+ },
142
+ name: "terracotta"
143
143
  };
144
144
  /**
145
145
  * Lush — Steel elegance. Python-inspired steel blue with golden accents.
146
146
  */
147
147
  const LUSH_THEME = {
148
- name: "lush",
149
- displayName: "Lush",
150
148
  colors: {
151
149
  primary: [
152
150
  70,
@@ -168,6 +166,7 @@ const LUSH_THEME = {
168
166
  link: "cyanBright",
169
167
  prompt: "primary"
170
168
  },
169
+ displayName: "Lush",
171
170
  effects: { spinner: {
172
171
  color: "primary",
173
172
  style: "dots"
@@ -175,15 +174,14 @@ const LUSH_THEME = {
175
174
  meta: {
176
175
  description: "Elegant theme with steel blue and golden harmony",
177
176
  version: "1.0.0"
178
- }
177
+ },
178
+ name: "lush"
179
179
  };
180
180
  /**
181
181
  * Ultra — Premium intensity. Prismatic shimmer for deep analysis, where
182
182
  * complexity meets elegance.
183
183
  */
184
184
  const ULTRA_THEME = {
185
- name: "ultra",
186
- displayName: "Ultra",
187
185
  colors: {
188
186
  primary: [
189
187
  140,
@@ -200,6 +198,7 @@ const ULTRA_THEME = {
200
198
  link: "cyanBright",
201
199
  prompt: "primary"
202
200
  },
201
+ displayName: "Ultra",
203
202
  effects: {
204
203
  spinner: {
205
204
  color: "inherit",
@@ -215,7 +214,8 @@ const ULTRA_THEME = {
215
214
  meta: {
216
215
  description: "Premium theme with prismatic shimmer for deep analysis",
217
216
  version: "1.0.0"
218
- }
217
+ },
218
+ name: "ultra"
219
219
  };
220
220
  /**
221
221
  * Theme registry — Curated palette collection.
@@ -75,7 +75,7 @@ export type ThemeEffects = {
75
75
  * Animation style.
76
76
  */
77
77
  style?: SpinnerStyle | string | undefined;
78
- };
78
+ } | undefined;
79
79
  /**
80
80
  * Shimmer configuration.
81
81
  */
@@ -96,7 +96,7 @@ export type ThemeEffects = {
96
96
  * Speed (steps per frame)
97
97
  */
98
98
  speed?: number | undefined;
99
- };
99
+ } | undefined;
100
100
  /**
101
101
  * Pulse configuration.
102
102
  */
@@ -105,7 +105,7 @@ export type ThemeEffects = {
105
105
  * Speed (milliseconds)
106
106
  */
107
107
  speed?: number | undefined;
108
- };
108
+ } | undefined;
109
109
  };
110
110
  /**
111
111
  * Theme metadata — descriptive information.
package/dist/url/parse.js CHANGED
@@ -19,7 +19,6 @@ const UrlCtor = URL;
19
19
  * createRelativeUrl('/api/test', { base: 'https://example.com' }) // 'https://example.com/api/test'
20
20
  * ```
21
21
  */
22
- /* @__NO_SIDE_EFFECTS__ */
23
22
  function createRelativeUrl(path, options) {
24
23
  const { base = "" } = {
25
24
  __proto__: null,
@@ -42,7 +41,6 @@ function createRelativeUrl(path, options) {
42
41
  * parseUrl('invalid') // undefined
43
42
  * ```
44
43
  */
45
- /* @__NO_SIDE_EFFECTS__ */
46
44
  function parseUrl(value) {
47
45
  try {
48
46
  return new UrlCtor(value);
@@ -18,9 +18,8 @@ const require_url_parse = require('./parse.js');
18
18
  * isUrl(null) // false
19
19
  * ```
20
20
  */
21
- /* @__NO_SIDE_EFFECTS__ */
22
21
  function isUrl(value) {
23
- return (typeof value === "string" && value !== "" || value !== null && typeof value === "object") && !!/* @__PURE__ */ require_url_parse.parseUrl(value);
22
+ return (typeof value === "string" && value !== "" || value !== null && typeof value === "object") && !!require_url_parse.parseUrl(value);
24
23
  }
25
24
 
26
25
  //#endregion
@@ -20,7 +20,6 @@ const BooleanCtor = Boolean;
20
20
  * urlSearchParamsAsArray(null) // []
21
21
  * ```
22
22
  */
23
- /* @__NO_SIDE_EFFECTS__ */
24
23
  function urlSearchParamsAsArray(value) {
25
24
  return typeof value === "string" ? value.trim().split(/, */).map((v) => v.trim()).filter(BooleanCtor) : [];
26
25
  }
@@ -34,7 +33,6 @@ function urlSearchParamsAsArray(value) {
34
33
  * urlSearchParamsAsBoolean(null) // false
35
34
  * ```
36
35
  */
37
- /* @__NO_SIDE_EFFECTS__ */
38
36
  function urlSearchParamsAsBoolean(value, options) {
39
37
  const { defaultValue = false } = {
40
38
  __proto__: null,
@@ -44,7 +42,7 @@ function urlSearchParamsAsBoolean(value, options) {
44
42
  const trimmed = value.trim();
45
43
  if (trimmed === "") return !!defaultValue;
46
44
  const lowered = trimmed.toLowerCase();
47
- return lowered === "1" || lowered === "true" || lowered === "yes" || lowered === "on";
45
+ return lowered === "1" || lowered === "on" || lowered === "true" || lowered === "yes";
48
46
  }
49
47
  if (value === null || value === void 0) return !!defaultValue;
50
48
  return !!value;
@@ -59,7 +57,6 @@ function urlSearchParamsAsBoolean(value, options) {
59
57
  * urlSearchParamsAsNumber(params, 'other') // 0
60
58
  * ```
61
59
  */
62
- /* @__NO_SIDE_EFFECTS__ */
63
60
  function urlSearchParamsAsNumber(params, key, options) {
64
61
  const { defaultValue = 0 } = {
65
62
  __proto__: null,
@@ -84,7 +81,6 @@ function urlSearchParamsAsNumber(params, key, options) {
84
81
  * urlSearchParamsAsString(params, 'other') // ''
85
82
  * ```
86
83
  */
87
- /* @__NO_SIDE_EFFECTS__ */
88
84
  function urlSearchParamsAsString(params, key, options) {
89
85
  const { defaultValue = "" } = {
90
86
  __proto__: null,
@@ -105,12 +101,11 @@ function urlSearchParamsAsString(params, key, options) {
105
101
  * urlSearchParamsGetArray(params, 'tags') // ['a', 'b', 'c']
106
102
  * ```
107
103
  */
108
- /* @__NO_SIDE_EFFECTS__ */
109
104
  function urlSearchParamsGetArray(params, key) {
110
105
  if (params && typeof params.getAll === "function") {
111
106
  const values = params.getAll(key);
112
107
  const firstValue = values[0];
113
- if (values.length === 1 && firstValue && firstValue.includes(",")) return /* @__PURE__ */ urlSearchParamsAsArray(firstValue);
108
+ if (values.length === 1 && firstValue && firstValue.includes(",")) return urlSearchParamsAsArray(firstValue);
114
109
  return values;
115
110
  }
116
111
  return [];
@@ -125,7 +120,6 @@ function urlSearchParamsGetArray(params, key) {
125
120
  * urlSearchParamsGetBoolean(params, 'other') // false
126
121
  * ```
127
122
  */
128
- /* @__NO_SIDE_EFFECTS__ */
129
123
  function urlSearchParamsGetBoolean(params, key, options) {
130
124
  const { defaultValue = false } = {
131
125
  __proto__: null,
@@ -133,7 +127,7 @@ function urlSearchParamsGetBoolean(params, key, options) {
133
127
  };
134
128
  if (params && typeof params.get === "function") {
135
129
  const value = params.get(key);
136
- return value !== null ? /* @__PURE__ */ urlSearchParamsAsBoolean(value, { defaultValue }) : defaultValue;
130
+ return value !== null ? urlSearchParamsAsBoolean(value, { defaultValue }) : defaultValue;
137
131
  }
138
132
  return defaultValue;
139
133
  }
@@ -4,17 +4,17 @@
4
4
  * types, no runtime side effects.
5
5
  */
6
6
  export interface CreateRelativeUrlOptions {
7
- base?: string;
7
+ base?: string | undefined;
8
8
  }
9
9
  export interface UrlSearchParamsAsBooleanOptions {
10
- defaultValue?: boolean;
10
+ defaultValue?: boolean | undefined;
11
11
  }
12
12
  export interface UrlSearchParamsAsNumberOptions {
13
- defaultValue?: number;
13
+ defaultValue?: number | undefined;
14
14
  }
15
15
  export interface UrlSearchParamsAsStringOptions {
16
- defaultValue?: string;
16
+ defaultValue?: string | undefined;
17
17
  }
18
18
  export interface UrlSearchParamsGetBooleanOptions {
19
- defaultValue?: boolean;
19
+ defaultValue?: boolean | undefined;
20
20
  }
@@ -15,20 +15,20 @@ const require_smol_versions = require('../smol/versions.js');
15
15
  * shape (`{major, minor, patch}`) which only `semver.parse` exposes — those
16
16
  * leaves use `getSemver()` directly instead of going through `impl`.
17
17
  */
18
- const _semver = require("../external/semver");
18
+ const semver = require("../external/semver");
19
19
  /**
20
20
  * The vendored `semver` JS implementation. Always available — used directly by
21
21
  * the leaves that need the parsed `{major, minor, patch}` shape (which
22
22
  * smol-versions doesn't expose).
23
23
  */
24
24
  function getSemver() {
25
- return _semver;
25
+ return semver;
26
26
  }
27
27
  /**
28
28
  * Resolved version implementation: smol-versions on the smol Node binary,
29
29
  * otherwise the vendored `semver`. Bound once at module load.
30
30
  */
31
- const impl = /* @__PURE__ */ require_smol_versions.getSmolVersions() ?? _semver;
31
+ const impl = require_smol_versions.getSmolVersions() ?? semver;
32
32
 
33
33
  //#endregion
34
34
  exports.getSemver = getSemver;
@@ -16,7 +16,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
16
16
  * determineArticle('banana') // 'a'
17
17
  * ```
18
18
  */
19
- /* @__NO_SIDE_EFFECTS__ */
20
19
  function determineArticle(word) {
21
20
  return /^[aeiou]/i.test(word) ? "an" : "a";
22
21
  }
@@ -17,7 +17,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
17
17
  * capitalize('') // ''
18
18
  * ```
19
19
  */
20
- /* @__NO_SIDE_EFFECTS__ */
21
20
  function capitalize(word) {
22
21
  if (word.length === 0) return word;
23
22
  const [first, ...rest] = [...word];
@@ -1,8 +1,15 @@
1
1
  /**
2
- * @file Simple count-based pluralization helper — appends a trailing `'s'` when
3
- * the count is anything other than 1.
2
+ * @file Count-based pluralization. Two modes:
3
+ *
4
+ * - Default: appends a trailing `'s'` when the count is anything other than 1.
5
+ * Zero-cost; no Intl dependency on the hot path.
6
+ * - Dictionary: when `options.forms` is given, selects from a caller-supplied
7
+ * dictionary of forms keyed by plural category. Honors locale + cardinal /
8
+ * ordinal via `Intl.PluralRules`. Required `plural` acts as the fallback
9
+ * for any category not explicitly listed.
4
10
  */
5
11
  import type { PluralizeOptions } from './types';
12
+ export declare function getRules(locale: string, type: Intl.PluralRuleType): Intl.PluralRules;
6
13
  /**
7
14
  * Pluralize a word based on count.
8
15
  *
@@ -11,6 +18,21 @@ import type { PluralizeOptions } from './types';
11
18
  * pluralize('file') // 'file'
12
19
  * pluralize('file', { count: 3 }) // 'files'
13
20
  * pluralize('file', { count: 0 }) // 'files'
21
+ *
22
+ * // Dictionary mode for irregulars.
23
+ * pluralize('child', {
24
+ * count: 3,
25
+ * forms: { singular: 'child', plural: 'children' },
26
+ * }) // 'children'
27
+ *
28
+ * // Locale + cardinal/ordinal. `singular` here covers CLDR's `one`
29
+ * // category (the count===1 ordinal suffix); `two`/`few` map directly;
30
+ * // `plural` is the fallback for everything else.
31
+ * pluralize('place', {
32
+ * count: 2,
33
+ * type: 'ordinal',
34
+ * forms: { singular: 'st', two: 'nd', few: 'rd', plural: 'th' },
35
+ * }) // 'nd'
14
36
  * ```
15
37
  */
16
38
  export declare function pluralize(word: string, options?: PluralizeOptions | undefined): string;
@@ -1,9 +1,38 @@
1
1
  "use strict";
2
2
  /* Socket Lib - Built with rolldown */
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_primordials_intl = require('../primordials/intl.js');
4
5
 
5
6
  //#region src/words/pluralize.ts
6
7
  /**
8
+ * @file Count-based pluralization. Two modes:
9
+ *
10
+ * - Default: appends a trailing `'s'` when the count is anything other than 1.
11
+ * Zero-cost; no Intl dependency on the hot path.
12
+ * - Dictionary: when `options.forms` is given, selects from a caller-supplied
13
+ * dictionary of forms keyed by plural category. Honors locale + cardinal /
14
+ * ordinal via `Intl.PluralRules`. Required `plural` acts as the fallback
15
+ * for any category not explicitly listed.
16
+ */
17
+ const CLDR_TO_FIELD = {
18
+ few: "few",
19
+ many: "many",
20
+ one: "singular",
21
+ other: "plural",
22
+ two: "two",
23
+ zero: "zero"
24
+ };
25
+ const RULES_CACHE = /* @__PURE__ */ new Map();
26
+ function getRules(locale, type) {
27
+ const key = `${locale}:${type}`;
28
+ let r = RULES_CACHE.get(key);
29
+ if (!r) {
30
+ r = new require_primordials_intl.IntlPluralRules(locale, { type });
31
+ RULES_CACHE.set(key, r);
32
+ }
33
+ return r;
34
+ }
35
+ /**
7
36
  * Pluralize a word based on count.
8
37
  *
9
38
  * @example
@@ -11,16 +40,32 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
11
40
  * pluralize('file') // 'file'
12
41
  * pluralize('file', { count: 3 }) // 'files'
13
42
  * pluralize('file', { count: 0 }) // 'files'
43
+ *
44
+ * // Dictionary mode for irregulars.
45
+ * pluralize('child', {
46
+ * count: 3,
47
+ * forms: { singular: 'child', plural: 'children' },
48
+ * }) // 'children'
49
+ *
50
+ * // Locale + cardinal/ordinal. `singular` here covers CLDR's `one`
51
+ * // category (the count===1 ordinal suffix); `two`/`few` map directly;
52
+ * // `plural` is the fallback for everything else.
53
+ * pluralize('place', {
54
+ * count: 2,
55
+ * type: 'ordinal',
56
+ * forms: { singular: 'st', two: 'nd', few: 'rd', plural: 'th' },
57
+ * }) // 'nd'
14
58
  * ```
15
59
  */
16
- /* @__NO_SIDE_EFFECTS__ */
17
60
  function pluralize(word, options) {
18
- const { count = 1 } = {
61
+ const { count = 1, forms, locale = "en-US", type = "cardinal" } = {
19
62
  __proto__: null,
20
63
  ...options
21
64
  };
65
+ if (forms) return forms[CLDR_TO_FIELD[getRules(locale, type).select(count)]] ?? forms.plural;
22
66
  return count === 1 ? word : `${word}s`;
23
67
  }
24
68
 
25
69
  //#endregion
70
+ exports.getRules = getRules;
26
71
  exports.pluralize = pluralize;
@@ -1,7 +1,30 @@
1
1
  /**
2
2
  * @file Public type surface for `words/*` modules — the `PluralizeOptions`
3
- * record. Pure types, no runtime side effects.
3
+ * record and its `PluralForms` companion. Pure types, no runtime side
4
+ * effects.
4
5
  */
6
+ /**
7
+ * Count-aware forms for {@link pluralize}. `singular` covers the CLDR `one`
8
+ * category; `plural` covers the required `other` category and is the fallback
9
+ * when a count's category isn't explicitly listed. The remaining four
10
+ * (`zero`/`two`/`few`/`many`) are optional and default to `plural` when omitted
11
+ * — only languages like Arabic, Russian, or Welsh exercise them.
12
+ *
13
+ * Plural-category reference:
14
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select
15
+ * https://cldr.unicode.org/index/cldr-spec/plural-rules.
16
+ */
17
+ export interface PluralForms {
18
+ singular?: string | undefined;
19
+ plural: string;
20
+ zero?: string | undefined;
21
+ two?: string | undefined;
22
+ few?: string | undefined;
23
+ many?: string | undefined;
24
+ }
5
25
  export interface PluralizeOptions {
6
- count?: number;
26
+ count?: number | undefined;
27
+ forms?: PluralForms | undefined;
28
+ locale?: string | undefined;
29
+ type?: Intl.PluralRuleType | undefined;
7
30
  }