@socketsecurity/lib 0.0.0 → 1.0.0

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 (555) hide show
  1. package/CHANGELOG.md +270 -0
  2. package/LICENSE +21 -0
  3. package/README.md +80 -2
  4. package/data/extensions.json +28 -0
  5. package/dist/abort.d.ts +11 -0
  6. package/dist/abort.js +62 -0
  7. package/dist/abort.js.map +7 -0
  8. package/dist/agent.d.ts +102 -0
  9. package/dist/agent.js +288 -0
  10. package/dist/agent.js.map +7 -0
  11. package/dist/ansi.d.ts +29 -0
  12. package/dist/ansi.js +62 -0
  13. package/dist/ansi.js.map +7 -0
  14. package/dist/argv/flags.d.ts +199 -0
  15. package/dist/argv/flags.js +284 -0
  16. package/dist/argv/flags.js.map +7 -0
  17. package/dist/argv/parse.d.ts +76 -0
  18. package/dist/argv/parse.js +173 -0
  19. package/dist/argv/parse.js.map +7 -0
  20. package/dist/arrays.d.ts +29 -0
  21. package/dist/arrays.js +87 -0
  22. package/dist/arrays.js.map +7 -0
  23. package/dist/bin.d.ts +50 -0
  24. package/dist/bin.js +405 -0
  25. package/dist/bin.js.map +7 -0
  26. package/dist/cacache.d.ts +86 -0
  27. package/dist/cacache.js +140 -0
  28. package/dist/cacache.js.map +7 -0
  29. package/dist/cache-with-ttl.d.ts +133 -0
  30. package/dist/cache-with-ttl.js +225 -0
  31. package/dist/cache-with-ttl.js.map +7 -0
  32. package/dist/constants/agents.d.ts +37 -0
  33. package/dist/constants/agents.js +128 -0
  34. package/dist/constants/agents.js.map +7 -0
  35. package/dist/constants/core.d.ts +22 -0
  36. package/dist/constants/core.js +59 -0
  37. package/dist/constants/core.js.map +7 -0
  38. package/dist/constants/encoding.d.ts +13 -0
  39. package/dist/constants/encoding.js +50 -0
  40. package/dist/constants/encoding.js.map +7 -0
  41. package/dist/constants/github.d.ts +7 -0
  42. package/dist/constants/github.js +32 -0
  43. package/dist/constants/github.js.map +7 -0
  44. package/dist/constants/licenses.d.ts +8 -0
  45. package/dist/constants/licenses.js +68 -0
  46. package/dist/constants/licenses.js.map +7 -0
  47. package/dist/constants/node.d.ts +29 -0
  48. package/dist/constants/node.js +173 -0
  49. package/dist/constants/node.js.map +7 -0
  50. package/dist/constants/packages.d.ts +19 -0
  51. package/dist/constants/packages.js +130 -0
  52. package/dist/constants/packages.js.map +7 -0
  53. package/dist/constants/paths.d.ts +51 -0
  54. package/dist/constants/paths.js +152 -0
  55. package/dist/constants/paths.js.map +7 -0
  56. package/dist/constants/platform.d.ts +6 -0
  57. package/dist/constants/platform.js +43 -0
  58. package/dist/constants/platform.js.map +7 -0
  59. package/dist/constants/process.d.ts +7 -0
  60. package/dist/constants/process.js +54 -0
  61. package/dist/constants/process.js.map +7 -0
  62. package/dist/constants/socket.d.ts +29 -0
  63. package/dist/constants/socket.js +83 -0
  64. package/dist/constants/socket.js.map +7 -0
  65. package/dist/constants/testing.d.ts +9 -0
  66. package/dist/constants/testing.js +38 -0
  67. package/dist/constants/testing.js.map +7 -0
  68. package/dist/constants/time.d.ts +11 -0
  69. package/dist/constants/time.js +41 -0
  70. package/dist/constants/time.js.map +7 -0
  71. package/dist/constants/typescript.d.ts +6 -0
  72. package/dist/constants/typescript.js +56 -0
  73. package/dist/constants/typescript.js.map +7 -0
  74. package/dist/cover/code.d.ts +8 -0
  75. package/dist/cover/code.js +137 -0
  76. package/dist/cover/code.js.map +7 -0
  77. package/dist/cover/formatters.d.ts +9 -0
  78. package/dist/cover/formatters.js +103 -0
  79. package/dist/cover/formatters.js.map +7 -0
  80. package/dist/cover/type.d.ts +7 -0
  81. package/dist/cover/type.js +65 -0
  82. package/dist/cover/type.js.map +7 -0
  83. package/dist/cover/types.d.ts +70 -0
  84. package/dist/cover/types.js +17 -0
  85. package/dist/cover/types.js.map +7 -0
  86. package/dist/debug.d.ts +99 -0
  87. package/dist/debug.js +345 -0
  88. package/dist/debug.js.map +7 -0
  89. package/dist/dlx-binary.d.ts +49 -0
  90. package/dist/dlx-binary.js +261 -0
  91. package/dist/dlx-binary.js.map +7 -0
  92. package/dist/dlx.d.ts +64 -0
  93. package/dist/dlx.js +168 -0
  94. package/dist/dlx.js.map +7 -0
  95. package/dist/download-lock.d.ts +48 -0
  96. package/dist/download-lock.js +139 -0
  97. package/dist/download-lock.js.map +7 -0
  98. package/dist/effects/pulse-frames.d.ts +23 -0
  99. package/dist/effects/pulse-frames.js +66 -0
  100. package/dist/effects/pulse-frames.js.map +7 -0
  101. package/dist/effects/text-shimmer.d.ts +37 -0
  102. package/dist/effects/text-shimmer.js +175 -0
  103. package/dist/effects/text-shimmer.js.map +7 -0
  104. package/dist/effects/types.d.ts +41 -0
  105. package/dist/effects/types.js +17 -0
  106. package/dist/effects/types.js.map +7 -0
  107. package/dist/effects/ultra.d.ts +16 -0
  108. package/dist/effects/ultra.js +63 -0
  109. package/dist/effects/ultra.js.map +7 -0
  110. package/dist/env/appdata.d.ts +1 -0
  111. package/dist/env/appdata.js +30 -0
  112. package/dist/env/appdata.js.map +7 -0
  113. package/dist/env/ci.d.ts +1 -0
  114. package/dist/env/ci.js +31 -0
  115. package/dist/env/ci.js.map +7 -0
  116. package/dist/env/comspec.d.ts +1 -0
  117. package/dist/env/comspec.js +30 -0
  118. package/dist/env/comspec.js.map +7 -0
  119. package/dist/env/debug.d.ts +1 -0
  120. package/dist/env/debug.js +30 -0
  121. package/dist/env/debug.js.map +7 -0
  122. package/dist/env/getters.d.ts +40 -0
  123. package/dist/env/getters.js +283 -0
  124. package/dist/env/getters.js.map +7 -0
  125. package/dist/env/github-api-url.d.ts +1 -0
  126. package/dist/env/github-api-url.js +30 -0
  127. package/dist/env/github-api-url.js.map +7 -0
  128. package/dist/env/github-base-ref.d.ts +1 -0
  129. package/dist/env/github-base-ref.js +30 -0
  130. package/dist/env/github-base-ref.js.map +7 -0
  131. package/dist/env/github-ref-name.d.ts +1 -0
  132. package/dist/env/github-ref-name.js +30 -0
  133. package/dist/env/github-ref-name.js.map +7 -0
  134. package/dist/env/github-ref-type.d.ts +1 -0
  135. package/dist/env/github-ref-type.js +30 -0
  136. package/dist/env/github-ref-type.js.map +7 -0
  137. package/dist/env/github-repository.d.ts +1 -0
  138. package/dist/env/github-repository.js +30 -0
  139. package/dist/env/github-repository.js.map +7 -0
  140. package/dist/env/github-server-url.d.ts +1 -0
  141. package/dist/env/github-server-url.js +30 -0
  142. package/dist/env/github-server-url.js.map +7 -0
  143. package/dist/env/github-token.d.ts +1 -0
  144. package/dist/env/github-token.js +30 -0
  145. package/dist/env/github-token.js.map +7 -0
  146. package/dist/env/helpers.d.ts +6 -0
  147. package/dist/env/helpers.js +49 -0
  148. package/dist/env/helpers.js.map +7 -0
  149. package/dist/env/home.d.ts +1 -0
  150. package/dist/env/home.js +30 -0
  151. package/dist/env/home.js.map +7 -0
  152. package/dist/env/jest-worker-id.d.ts +1 -0
  153. package/dist/env/jest-worker-id.js +30 -0
  154. package/dist/env/jest-worker-id.js.map +7 -0
  155. package/dist/env/lang.d.ts +1 -0
  156. package/dist/env/lang.js +30 -0
  157. package/dist/env/lang.js.map +7 -0
  158. package/dist/env/lc-all.d.ts +1 -0
  159. package/dist/env/lc-all.js +30 -0
  160. package/dist/env/lc-all.js.map +7 -0
  161. package/dist/env/lc-messages.d.ts +1 -0
  162. package/dist/env/lc-messages.js +30 -0
  163. package/dist/env/lc-messages.js.map +7 -0
  164. package/dist/env/localappdata.d.ts +1 -0
  165. package/dist/env/localappdata.js +30 -0
  166. package/dist/env/localappdata.js.map +7 -0
  167. package/dist/env/node-auth-token.d.ts +1 -0
  168. package/dist/env/node-auth-token.js +30 -0
  169. package/dist/env/node-auth-token.js.map +7 -0
  170. package/dist/env/node-env.d.ts +1 -0
  171. package/dist/env/node-env.js +30 -0
  172. package/dist/env/node-env.js.map +7 -0
  173. package/dist/env/npm-config-registry.d.ts +1 -0
  174. package/dist/env/npm-config-registry.js +30 -0
  175. package/dist/env/npm-config-registry.js.map +7 -0
  176. package/dist/env/npm-config-user-agent.d.ts +1 -0
  177. package/dist/env/npm-config-user-agent.js +30 -0
  178. package/dist/env/npm-config-user-agent.js.map +7 -0
  179. package/dist/env/npm-lifecycle-event.d.ts +1 -0
  180. package/dist/env/npm-lifecycle-event.js +30 -0
  181. package/dist/env/npm-lifecycle-event.js.map +7 -0
  182. package/dist/env/npm-registry.d.ts +1 -0
  183. package/dist/env/npm-registry.js +30 -0
  184. package/dist/env/npm-registry.js.map +7 -0
  185. package/dist/env/npm-token.d.ts +1 -0
  186. package/dist/env/npm-token.js +30 -0
  187. package/dist/env/npm-token.js.map +7 -0
  188. package/dist/env/path.d.ts +1 -0
  189. package/dist/env/path.js +30 -0
  190. package/dist/env/path.js.map +7 -0
  191. package/dist/env/pre-commit.d.ts +1 -0
  192. package/dist/env/pre-commit.js +31 -0
  193. package/dist/env/pre-commit.js.map +7 -0
  194. package/dist/env/shell.d.ts +1 -0
  195. package/dist/env/shell.js +30 -0
  196. package/dist/env/shell.js.map +7 -0
  197. package/dist/env/socket-accept-risks.d.ts +1 -0
  198. package/dist/env/socket-accept-risks.js +31 -0
  199. package/dist/env/socket-accept-risks.js.map +7 -0
  200. package/dist/env/socket-api-base-url.d.ts +1 -0
  201. package/dist/env/socket-api-base-url.js +30 -0
  202. package/dist/env/socket-api-base-url.js.map +7 -0
  203. package/dist/env/socket-api-proxy.d.ts +1 -0
  204. package/dist/env/socket-api-proxy.js +30 -0
  205. package/dist/env/socket-api-proxy.js.map +7 -0
  206. package/dist/env/socket-api-timeout.d.ts +1 -0
  207. package/dist/env/socket-api-timeout.js +31 -0
  208. package/dist/env/socket-api-timeout.js.map +7 -0
  209. package/dist/env/socket-api-token.d.ts +1 -0
  210. package/dist/env/socket-api-token.js +30 -0
  211. package/dist/env/socket-api-token.js.map +7 -0
  212. package/dist/env/socket-cacache-dir.d.ts +1 -0
  213. package/dist/env/socket-cacache-dir.js +30 -0
  214. package/dist/env/socket-cacache-dir.js.map +7 -0
  215. package/dist/env/socket-cli-accept-risks.d.ts +1 -0
  216. package/dist/env/socket-cli-accept-risks.js +33 -0
  217. package/dist/env/socket-cli-accept-risks.js.map +7 -0
  218. package/dist/env/socket-cli-api-base-url.d.ts +1 -0
  219. package/dist/env/socket-cli-api-base-url.js +30 -0
  220. package/dist/env/socket-cli-api-base-url.js.map +7 -0
  221. package/dist/env/socket-cli-api-proxy.d.ts +1 -0
  222. package/dist/env/socket-cli-api-proxy.js +30 -0
  223. package/dist/env/socket-cli-api-proxy.js.map +7 -0
  224. package/dist/env/socket-cli-api-timeout.d.ts +1 -0
  225. package/dist/env/socket-cli-api-timeout.js +31 -0
  226. package/dist/env/socket-cli-api-timeout.js.map +7 -0
  227. package/dist/env/socket-cli-api-token.d.ts +1 -0
  228. package/dist/env/socket-cli-api-token.js +30 -0
  229. package/dist/env/socket-cli-api-token.js.map +7 -0
  230. package/dist/env/socket-cli-config.d.ts +1 -0
  231. package/dist/env/socket-cli-config.js +30 -0
  232. package/dist/env/socket-cli-config.js.map +7 -0
  233. package/dist/env/socket-cli-fix.d.ts +1 -0
  234. package/dist/env/socket-cli-fix.js +30 -0
  235. package/dist/env/socket-cli-fix.js.map +7 -0
  236. package/dist/env/socket-cli-no-api-token.d.ts +1 -0
  237. package/dist/env/socket-cli-no-api-token.js +33 -0
  238. package/dist/env/socket-cli-no-api-token.js.map +7 -0
  239. package/dist/env/socket-cli-optimize.d.ts +1 -0
  240. package/dist/env/socket-cli-optimize.js +31 -0
  241. package/dist/env/socket-cli-optimize.js.map +7 -0
  242. package/dist/env/socket-cli-org-slug.d.ts +1 -0
  243. package/dist/env/socket-cli-org-slug.js +30 -0
  244. package/dist/env/socket-cli-org-slug.js.map +7 -0
  245. package/dist/env/socket-cli-shadow-accept-risks.d.ts +1 -0
  246. package/dist/env/socket-cli-shadow-accept-risks.js +33 -0
  247. package/dist/env/socket-cli-shadow-accept-risks.js.map +7 -0
  248. package/dist/env/socket-cli-shadow-api-token.d.ts +1 -0
  249. package/dist/env/socket-cli-shadow-api-token.js +30 -0
  250. package/dist/env/socket-cli-shadow-api-token.js.map +7 -0
  251. package/dist/env/socket-cli-shadow-bin.d.ts +1 -0
  252. package/dist/env/socket-cli-shadow-bin.js +30 -0
  253. package/dist/env/socket-cli-shadow-bin.js.map +7 -0
  254. package/dist/env/socket-cli-shadow-progress.d.ts +1 -0
  255. package/dist/env/socket-cli-shadow-progress.js +33 -0
  256. package/dist/env/socket-cli-shadow-progress.js.map +7 -0
  257. package/dist/env/socket-cli-shadow-silent.d.ts +1 -0
  258. package/dist/env/socket-cli-shadow-silent.js +33 -0
  259. package/dist/env/socket-cli-shadow-silent.js.map +7 -0
  260. package/dist/env/socket-cli-view-all-risks.d.ts +1 -0
  261. package/dist/env/socket-cli-view-all-risks.js +33 -0
  262. package/dist/env/socket-cli-view-all-risks.js.map +7 -0
  263. package/dist/env/socket-config.d.ts +1 -0
  264. package/dist/env/socket-config.js +30 -0
  265. package/dist/env/socket-config.js.map +7 -0
  266. package/dist/env/socket-debug.d.ts +1 -0
  267. package/dist/env/socket-debug.js +30 -0
  268. package/dist/env/socket-debug.js.map +7 -0
  269. package/dist/env/socket-home.d.ts +1 -0
  270. package/dist/env/socket-home.js +30 -0
  271. package/dist/env/socket-home.js.map +7 -0
  272. package/dist/env/socket-no-api-token.d.ts +1 -0
  273. package/dist/env/socket-no-api-token.js +31 -0
  274. package/dist/env/socket-no-api-token.js.map +7 -0
  275. package/dist/env/socket-npm-registry.d.ts +1 -0
  276. package/dist/env/socket-npm-registry.js +30 -0
  277. package/dist/env/socket-npm-registry.js.map +7 -0
  278. package/dist/env/socket-org-slug.d.ts +1 -0
  279. package/dist/env/socket-org-slug.js +30 -0
  280. package/dist/env/socket-org-slug.js.map +7 -0
  281. package/dist/env/socket-registry-url.d.ts +1 -0
  282. package/dist/env/socket-registry-url.js +30 -0
  283. package/dist/env/socket-registry-url.js.map +7 -0
  284. package/dist/env/socket-view-all-risks.d.ts +1 -0
  285. package/dist/env/socket-view-all-risks.js +31 -0
  286. package/dist/env/socket-view-all-risks.js.map +7 -0
  287. package/dist/env/temp.d.ts +1 -0
  288. package/dist/env/temp.js +30 -0
  289. package/dist/env/temp.js.map +7 -0
  290. package/dist/env/term.d.ts +1 -0
  291. package/dist/env/term.js +30 -0
  292. package/dist/env/term.js.map +7 -0
  293. package/dist/env/tmp.d.ts +1 -0
  294. package/dist/env/tmp.js +30 -0
  295. package/dist/env/tmp.js.map +7 -0
  296. package/dist/env/tmpdir.d.ts +1 -0
  297. package/dist/env/tmpdir.js +30 -0
  298. package/dist/env/tmpdir.js.map +7 -0
  299. package/dist/env/userprofile.d.ts +1 -0
  300. package/dist/env/userprofile.js +30 -0
  301. package/dist/env/userprofile.js.map +7 -0
  302. package/dist/env/vitest.d.ts +1 -0
  303. package/dist/env/vitest.js +31 -0
  304. package/dist/env/vitest.js.map +7 -0
  305. package/dist/env/xdg-cache-home.d.ts +1 -0
  306. package/dist/env/xdg-cache-home.js +30 -0
  307. package/dist/env/xdg-cache-home.js.map +7 -0
  308. package/dist/env/xdg-config-home.d.ts +1 -0
  309. package/dist/env/xdg-config-home.js +30 -0
  310. package/dist/env/xdg-config-home.js.map +7 -0
  311. package/dist/env/xdg-data-home.d.ts +1 -0
  312. package/dist/env/xdg-data-home.js +30 -0
  313. package/dist/env/xdg-data-home.js.map +7 -0
  314. package/dist/env.d.ts +15 -0
  315. package/dist/env.js +63 -0
  316. package/dist/env.js.map +7 -0
  317. package/dist/external/@inquirer/checkbox.js +4 -0
  318. package/dist/external/@inquirer/confirm.js +22 -0
  319. package/dist/external/@inquirer/core.js +4 -0
  320. package/dist/external/@inquirer/input.js +1 -0
  321. package/dist/external/@inquirer/password.js +1 -0
  322. package/dist/external/@inquirer/prompts.js +4 -0
  323. package/dist/external/@inquirer/search.js +1 -0
  324. package/dist/external/@inquirer/select.js +25 -0
  325. package/dist/external/@npmcli/package-json/index.js +1 -0
  326. package/dist/external/@npmcli/package-json/lib/read-package.js +1 -0
  327. package/dist/external/@npmcli/package-json/lib/sort.js +1 -0
  328. package/dist/external/@npmcli/promise-spawn.js +5 -0
  329. package/dist/external/@socketregistry/is-unicode-supported.d.ts +2 -0
  330. package/dist/external/@socketregistry/is-unicode-supported.js +5 -0
  331. package/dist/external/@socketregistry/packageurl-js.js +34 -0
  332. package/dist/external/@socketregistry/yocto-spinner.d.ts +12 -0
  333. package/dist/external/@socketregistry/yocto-spinner.js +8 -0
  334. package/dist/external/@yarnpkg/extensions.d.ts +5 -0
  335. package/dist/external/@yarnpkg/extensions.js +5 -0
  336. package/dist/external/cacache.d.ts +93 -0
  337. package/dist/external/cacache.js +32 -0
  338. package/dist/external/debug.d.ts +25 -0
  339. package/dist/external/debug.js +9 -0
  340. package/dist/external/del.d.ts +1 -0
  341. package/dist/external/del.js +54 -0
  342. package/dist/external/fast-glob.js +54 -0
  343. package/dist/external/fast-sort.d.ts +4 -0
  344. package/dist/external/fast-sort.js +5 -0
  345. package/dist/external/get-east-asian-width.d.ts +5 -0
  346. package/dist/external/get-east-asian-width.js +5 -0
  347. package/dist/external/libnpmpack.d.ts +3 -0
  348. package/dist/external/libnpmpack.js +225 -0
  349. package/dist/external/make-fetch-happen.d.ts +16 -0
  350. package/dist/external/make-fetch-happen.js +69 -0
  351. package/dist/external/normalize-package-data.js +6 -0
  352. package/dist/external/npm-package-arg.js +6 -0
  353. package/dist/external/pacote.d.ts +19 -0
  354. package/dist/external/pacote.js +105 -0
  355. package/dist/external/picomatch.js +5 -0
  356. package/dist/external/semver.d.ts +3 -0
  357. package/dist/external/semver.js +5 -0
  358. package/dist/external/spdx-correct.js +5 -0
  359. package/dist/external/spdx-expression-parse.js +5 -0
  360. package/dist/external/streaming-iterables.js +5 -0
  361. package/dist/external/validate-npm-package-name.js +5 -0
  362. package/dist/external/which.js +5 -0
  363. package/dist/external/yargs-parser.d.ts +3 -0
  364. package/dist/external/yargs-parser.js +26 -0
  365. package/dist/external/yoctocolors-cjs.d.ts +38 -0
  366. package/dist/external/yoctocolors-cjs.js +5 -0
  367. package/dist/external/zod.d.ts +1 -0
  368. package/dist/external/zod.js +27 -0
  369. package/dist/fs.d.ts +184 -0
  370. package/dist/fs.js +610 -0
  371. package/dist/fs.js.map +7 -0
  372. package/dist/functions.d.ts +27 -0
  373. package/dist/functions.js +70 -0
  374. package/dist/functions.js.map +7 -0
  375. package/dist/git.d.ts +93 -0
  376. package/dist/git.js +321 -0
  377. package/dist/git.js.map +7 -0
  378. package/dist/github.d.ts +121 -0
  379. package/dist/github.js +203 -0
  380. package/dist/github.js.map +7 -0
  381. package/dist/globs.d.ts +46 -0
  382. package/dist/globs.js +154 -0
  383. package/dist/globs.js.map +7 -0
  384. package/dist/http-request.d.ts +53 -0
  385. package/dist/http-request.js +315 -0
  386. package/dist/http-request.js.map +7 -0
  387. package/dist/index.d.ts +13 -0
  388. package/dist/index.js +64 -0
  389. package/dist/index.js.map +7 -0
  390. package/dist/ipc.d.ts +366 -0
  391. package/dist/ipc.js +234 -0
  392. package/dist/ipc.js.map +7 -0
  393. package/dist/json.d.ts +23 -0
  394. package/dist/json.js +75 -0
  395. package/dist/json.js.map +7 -0
  396. package/dist/logger.d.ts +183 -0
  397. package/dist/logger.js +653 -0
  398. package/dist/logger.js.map +7 -0
  399. package/dist/maintained-node-versions.d.ts +7 -0
  400. package/dist/maintained-node-versions.js +37 -0
  401. package/dist/maintained-node-versions.js.map +7 -0
  402. package/dist/memoization.d.ts +142 -0
  403. package/dist/memoization.js +212 -0
  404. package/dist/memoization.js.map +7 -0
  405. package/dist/objects.d.ts +146 -0
  406. package/dist/objects.js +321 -0
  407. package/dist/objects.js.map +7 -0
  408. package/dist/packages/editable.d.ts +107 -0
  409. package/dist/packages/editable.js +358 -0
  410. package/dist/packages/editable.js.map +7 -0
  411. package/dist/packages/exports.d.ts +30 -0
  412. package/dist/packages/exports.js +164 -0
  413. package/dist/packages/exports.js.map +7 -0
  414. package/dist/packages/isolation.d.ts +22 -0
  415. package/dist/packages/isolation.js +197 -0
  416. package/dist/packages/isolation.js.map +7 -0
  417. package/dist/packages/licenses.d.ts +68 -0
  418. package/dist/packages/licenses.js +216 -0
  419. package/dist/packages/licenses.js.map +7 -0
  420. package/dist/packages/manifest.d.ts +16 -0
  421. package/dist/packages/manifest.js +192 -0
  422. package/dist/packages/manifest.js.map +7 -0
  423. package/dist/packages/normalize.d.ts +21 -0
  424. package/dist/packages/normalize.js +122 -0
  425. package/dist/packages/normalize.js.map +7 -0
  426. package/dist/packages/operations.d.ts +54 -0
  427. package/dist/packages/operations.js +306 -0
  428. package/dist/packages/operations.js.map +7 -0
  429. package/dist/packages/paths.d.ts +10 -0
  430. package/dist/packages/paths.js +55 -0
  431. package/dist/packages/paths.js.map +7 -0
  432. package/dist/packages/provenance.d.ts +10 -0
  433. package/dist/packages/provenance.js +180 -0
  434. package/dist/packages/provenance.js.map +7 -0
  435. package/dist/packages/registry.d.ts +8 -0
  436. package/dist/packages/registry.js +30 -0
  437. package/dist/packages/registry.js.map +7 -0
  438. package/dist/packages/specs.d.ts +28 -0
  439. package/dist/packages/specs.js +85 -0
  440. package/dist/packages/specs.js.map +7 -0
  441. package/dist/packages/validation.d.ts +15 -0
  442. package/dist/packages/validation.js +53 -0
  443. package/dist/packages/validation.js.map +7 -0
  444. package/dist/packages.d.ts +154 -0
  445. package/dist/packages.js +131 -0
  446. package/dist/packages.js.map +7 -0
  447. package/dist/path.d.ts +74 -0
  448. package/dist/path.js +442 -0
  449. package/dist/path.js.map +7 -0
  450. package/dist/paths.d.ts +42 -0
  451. package/dist/paths.js +145 -0
  452. package/dist/paths.js.map +7 -0
  453. package/dist/performance.d.ts +178 -0
  454. package/dist/performance.js +219 -0
  455. package/dist/performance.js.map +7 -0
  456. package/dist/promise-queue.d.ts +35 -0
  457. package/dist/promise-queue.js +111 -0
  458. package/dist/promise-queue.js.map +7 -0
  459. package/dist/promises.d.ts +67 -0
  460. package/dist/promises.js +268 -0
  461. package/dist/promises.js.map +7 -0
  462. package/dist/prompts.d.ts +27 -0
  463. package/dist/prompts.js +60 -0
  464. package/dist/prompts.js.map +7 -0
  465. package/dist/regexps.d.ts +13 -0
  466. package/dist/regexps.js +32 -0
  467. package/dist/regexps.js.map +7 -0
  468. package/dist/sea.d.ts +10 -0
  469. package/dist/sea.js +46 -0
  470. package/dist/sea.js.map +7 -0
  471. package/dist/shadow.d.ts +17 -0
  472. package/dist/shadow.js +60 -0
  473. package/dist/shadow.js.map +7 -0
  474. package/dist/signal-exit.d.ts +23 -0
  475. package/dist/signal-exit.js +250 -0
  476. package/dist/signal-exit.js.map +7 -0
  477. package/dist/sorts.d.ts +28 -0
  478. package/dist/sorts.js +96 -0
  479. package/dist/sorts.js.map +7 -0
  480. package/dist/spawn.d.ts +207 -0
  481. package/dist/spawn.js +201 -0
  482. package/dist/spawn.js.map +7 -0
  483. package/dist/spinner.d.ts +208 -0
  484. package/dist/spinner.js +729 -0
  485. package/dist/spinner.js.map +7 -0
  486. package/dist/ssri.d.ts +95 -0
  487. package/dist/ssri.js +73 -0
  488. package/dist/ssri.js.map +7 -0
  489. package/dist/stdio/clear.d.ts +40 -0
  490. package/dist/stdio/clear.js +84 -0
  491. package/dist/stdio/clear.js.map +7 -0
  492. package/dist/stdio/divider.d.ts +48 -0
  493. package/dist/stdio/divider.js +81 -0
  494. package/dist/stdio/divider.js.map +7 -0
  495. package/dist/stdio/footer.d.ts +25 -0
  496. package/dist/stdio/footer.js +96 -0
  497. package/dist/stdio/footer.js.map +7 -0
  498. package/dist/stdio/header.d.ts +25 -0
  499. package/dist/stdio/header.js +102 -0
  500. package/dist/stdio/header.js.map +7 -0
  501. package/dist/stdio/mask.d.ts +72 -0
  502. package/dist/stdio/mask.js +187 -0
  503. package/dist/stdio/mask.js.map +7 -0
  504. package/dist/stdio/progress.d.ts +51 -0
  505. package/dist/stdio/progress.js +171 -0
  506. package/dist/stdio/progress.js.map +7 -0
  507. package/dist/stdio/prompts.d.ts +46 -0
  508. package/dist/stdio/prompts.js +90 -0
  509. package/dist/stdio/prompts.js.map +7 -0
  510. package/dist/stdio/stderr.d.ts +48 -0
  511. package/dist/stdio/stderr.js +91 -0
  512. package/dist/stdio/stderr.js.map +7 -0
  513. package/dist/stdio/stdout.d.ts +48 -0
  514. package/dist/stdio/stdout.js +105 -0
  515. package/dist/stdio/stdout.js.map +7 -0
  516. package/dist/streams.d.ts +20 -0
  517. package/dist/streams.js +80 -0
  518. package/dist/streams.js.map +7 -0
  519. package/dist/strings.d.ts +139 -0
  520. package/dist/strings.js +253 -0
  521. package/dist/strings.js.map +7 -0
  522. package/dist/suppress-warnings.d.ts +66 -0
  523. package/dist/suppress-warnings.js +100 -0
  524. package/dist/suppress-warnings.js.map +7 -0
  525. package/dist/tables.d.ts +69 -0
  526. package/dist/tables.js +130 -0
  527. package/dist/tables.js.map +7 -0
  528. package/dist/temporary-executor.d.ts +9 -0
  529. package/dist/temporary-executor.js +54 -0
  530. package/dist/temporary-executor.js.map +7 -0
  531. package/dist/types.d.ts +65 -0
  532. package/dist/types.js +74 -0
  533. package/dist/types.js.map +7 -0
  534. package/dist/url.d.ts +60 -0
  535. package/dist/url.js +144 -0
  536. package/dist/url.js.map +7 -0
  537. package/dist/utils/get-ipc.d.ts +16 -0
  538. package/dist/utils/get-ipc.js +60 -0
  539. package/dist/utils/get-ipc.js.map +7 -0
  540. package/dist/validation/json-parser.d.ts +10 -0
  541. package/dist/validation/json-parser.js +129 -0
  542. package/dist/validation/json-parser.js.map +7 -0
  543. package/dist/validation/types.d.ts +40 -0
  544. package/dist/validation/types.js +17 -0
  545. package/dist/validation/types.js.map +7 -0
  546. package/dist/versions.d.ts +87 -0
  547. package/dist/versions.js +155 -0
  548. package/dist/versions.js.map +7 -0
  549. package/dist/words.d.ts +22 -0
  550. package/dist/words.js +52 -0
  551. package/dist/words.js.map +7 -0
  552. package/dist/zod.d.ts +5 -0
  553. package/dist/zod.js +29 -0
  554. package/dist/zod.js.map +7 -0
  555. package/package.json +856 -7
@@ -0,0 +1,207 @@
1
+ // Define BufferEncoding type for TypeScript compatibility.
2
+ type BufferEncoding = globalThis.BufferEncoding;
3
+ // Type for promise-spawn options.
4
+ export type PromiseSpawnOptions = {
5
+ cwd?: string | undefined;
6
+ stdioString?: boolean | undefined;
7
+ stdio?: StdioType | undefined;
8
+ env?: NodeJS.ProcessEnv | undefined;
9
+ shell?: boolean | string | undefined;
10
+ signal?: AbortSignal | undefined;
11
+ timeout?: number | undefined;
12
+ uid?: number | undefined;
13
+ gid?: number | undefined;
14
+ };
15
+ // Type for promise-spawn result.
16
+ export type PromiseSpawnResult = Promise<{
17
+ cmd: string;
18
+ args: string[] | readonly string[];
19
+ code: number;
20
+ signal: NodeJS.Signals | null;
21
+ stdout: string | Buffer;
22
+ stderr: string | Buffer;
23
+ }> & {
24
+ process: ChildProcessType;
25
+ stdin: WritableStreamType | null;
26
+ };
27
+ /**
28
+ * Check if a value is a spawn error.
29
+ */
30
+ export type SpawnError = {
31
+ args: string[];
32
+ cmd: string;
33
+ code: number;
34
+ name: string;
35
+ message: string;
36
+ signal: NodeJS.Signals | null;
37
+ stack: string;
38
+ stderr: string | Buffer;
39
+ stdout: string | Buffer;
40
+ };
41
+ export type SpawnErrorWithOutputString = SpawnError & {
42
+ stdout: string;
43
+ stderr: string;
44
+ };
45
+ export type SpawnErrorWithOutputBuffer = SpawnError & {
46
+ stdout: Buffer;
47
+ stderr: Buffer;
48
+ };
49
+ export type SpawnExtra = Record<string, unknown>;
50
+ export type IOType = 'pipe' | 'ignore' | 'inherit' | 'overlapped';
51
+ export type StdioType = IOType | 'ipc' | Array<IOType | 'ipc'>;
52
+ export interface SpawnSyncReturns<T> {
53
+ pid: number;
54
+ output: Array<T | null>;
55
+ stdout: T;
56
+ stderr: T;
57
+ status: number | null;
58
+ signal: NodeJS.Signals | null;
59
+ error?: Error | undefined;
60
+ }
61
+ /**
62
+ * Check if a value is a spawn error with expected properties.
63
+ */
64
+ /*@__NO_SIDE_EFFECTS__*/
65
+ export declare function isSpawnError(value: unknown): value is SpawnError;
66
+ /**
67
+ * Check if stdio configuration matches a specific type.
68
+ */
69
+ /*@__NO_SIDE_EFFECTS__*/
70
+ export declare function isStdioType(stdio: string | string[], type?: StdioType | undefined): boolean;
71
+ /*@__NO_SIDE_EFFECTS__*/
72
+ // Duplicated from Node.js child_process.SpawnOptions
73
+ // These are the options passed to child_process.spawn()
74
+ interface NodeSpawnOptions {
75
+ cwd?: string | URL | undefined;
76
+ env?: NodeJS.ProcessEnv | undefined;
77
+ argv0?: string | undefined;
78
+ // biome-ignore lint/suspicious/noExplicitAny: Stdio can be complex union of types from Node.js.
79
+ stdio?: any;
80
+ detached?: boolean | undefined;
81
+ uid?: number | undefined;
82
+ gid?: number | undefined;
83
+ serialization?: 'json' | 'advanced' | undefined;
84
+ shell?: boolean | string | undefined;
85
+ windowsVerbatimArguments?: boolean | undefined;
86
+ windowsHide?: boolean | undefined;
87
+ signal?: AbortSignal | undefined;
88
+ timeout?: number | undefined;
89
+ killSignal?: NodeJS.Signals | number | undefined;
90
+ }
91
+ // Duplicated from Node.js child_process.ChildProcess
92
+ // This represents a spawned child process
93
+ interface ChildProcessType {
94
+ stdin: NodeJS.WritableStream | null;
95
+ stdout: NodeJS.ReadableStream | null;
96
+ stderr: NodeJS.ReadableStream | null;
97
+ // biome-ignore lint/suspicious/noExplicitAny: IPC channel type from Node.js.
98
+ readonly channel?: any;
99
+ readonly stdio: [
100
+ NodeJS.WritableStream | null,
101
+ NodeJS.ReadableStream | null,
102
+ NodeJS.ReadableStream | null,
103
+ NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined,
104
+ NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined
105
+ ];
106
+ readonly killed: boolean;
107
+ readonly pid?: number | undefined;
108
+ readonly connected: boolean;
109
+ readonly exitCode: number | null;
110
+ readonly signalCode: NodeJS.Signals | null;
111
+ readonly spawnargs: string[];
112
+ readonly spawnfile: string;
113
+ kill(signal?: NodeJS.Signals | number): boolean;
114
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message type from Node.js.
115
+ send(message: any, callback?: (error: Error | null) => void): boolean;
116
+ send(
117
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message and handle types from Node.js.
118
+ message: any,
119
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message and handle types from Node.js.
120
+ sendHandle?: any | undefined, callback?: (error: Error | null) => void): boolean;
121
+ send(
122
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.
123
+ message: any,
124
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.
125
+ sendHandle?: any | undefined,
126
+ // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.
127
+ options?: any | undefined, callback?: (error: Error | null) => void): boolean;
128
+ disconnect(): void;
129
+ unref(): void;
130
+ ref(): void;
131
+ }
132
+ // Duplicated from Node.js stream.Writable
133
+ interface WritableStreamType {
134
+ writable: boolean;
135
+ writableEnded: boolean;
136
+ writableFinished: boolean;
137
+ writableHighWaterMark: number;
138
+ writableLength: number;
139
+ writableObjectMode: boolean;
140
+ writableCorked: number;
141
+ destroyed: boolean;
142
+ write(
143
+ // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.
144
+ chunk: any, encoding?: BufferEncoding | undefined, callback?: (error?: Error | null) => void): boolean;
145
+ // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.
146
+ write(chunk: any, callback?: (error?: Error | null) => void): boolean;
147
+ end(cb?: () => void): this;
148
+ // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.
149
+ end(chunk: any, cb?: () => void): this;
150
+ // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.
151
+ end(chunk: any, encoding?: BufferEncoding | undefined, cb?: () => void): this;
152
+ cork(): void;
153
+ uncork(): void;
154
+ destroy(error?: Error | undefined): this;
155
+ }
156
+ /**
157
+ * Spawn a child process with enhanced error handling and output capture.
158
+ */
159
+ export type SpawnOptions = import('./objects').Remap<NodeSpawnOptions & {
160
+ spinner?: import('./spinner').Spinner | undefined;
161
+ stdioString?: boolean;
162
+ stripAnsi?: boolean;
163
+ }>;
164
+ export type SpawnResult = PromiseSpawnResult;
165
+ export type SpawnStdioResult = {
166
+ cmd: string;
167
+ args: string[] | readonly string[];
168
+ code: number;
169
+ signal: NodeJS.Signals | null;
170
+ stdout: string | Buffer;
171
+ stderr: string | Buffer;
172
+ };
173
+ /**
174
+ * Spawn a child process and return a promise that resolves when it completes.
175
+ *
176
+ * SECURITY: This function uses array-based arguments which prevent command injection.
177
+ * Arguments in the `args` array are passed directly to the OS without shell
178
+ * interpretation. Shell metacharacters (;|&$()`) are treated as literal strings,
179
+ * not as commands or operators. This is the PRIMARY SECURITY DEFENSE.
180
+ *
181
+ * Even when shell: true is used (on Windows for .cmd/.bat execution), the array-based
182
+ * approach remains secure because Node.js properly escapes each argument before passing
183
+ * to the shell.
184
+ *
185
+ * @param cmd - Command to execute (not user-controlled)
186
+ * @param args - Array of arguments (safe even with user input due to array-based passing)
187
+ * @param options - Spawn options
188
+ * @param extra - Extra options for promise-spawn
189
+ *
190
+ * @example
191
+ * // ✔ DO THIS - Array-based arguments
192
+ * spawn('git', ['commit', '-m', userMessage])
193
+ * // Each argument is properly escaped, even if userMessage = "foo; rm -rf /"
194
+ *
195
+ * @example
196
+ * // ✖ NEVER DO THIS - String concatenation
197
+ * spawn(`git commit -m "${userMessage}"`, { shell: true })
198
+ * // Vulnerable to injection if userMessage = '"; rm -rf / #'
199
+ */
200
+ export declare function spawn(cmd: string, args?: string[] | readonly string[], options?: SpawnOptions | undefined, extra?: SpawnExtra | undefined): SpawnResult;
201
+ /*@__NO_SIDE_EFFECTS__*/
202
+ /**
203
+ * Synchronously spawn a child process.
204
+ */
205
+ export type SpawnSyncOptions = Omit<SpawnOptions, 'spinner'>;
206
+ export declare function spawnSync(cmd: string, args?: string[] | readonly string[], options?: SpawnSyncOptions | undefined): SpawnSyncReturns<string | Buffer>;
207
+ export {};
package/dist/spawn.js ADDED
@@ -0,0 +1,201 @@
1
+ /* Socket Lib - Built with esbuild */
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var spawn_exports = {};
20
+ __export(spawn_exports, {
21
+ isSpawnError: () => isSpawnError,
22
+ isStdioType: () => isStdioType,
23
+ spawn: () => spawn,
24
+ spawnSync: () => spawnSync
25
+ });
26
+ module.exports = __toCommonJS(spawn_exports);
27
+ var import_process = require("#constants/process");
28
+ var import_arrays = require("./arrays");
29
+ var import_objects = require("./objects");
30
+ var import_strings = require("./strings");
31
+ const abortSignal = (0, import_process.getAbortSignal)();
32
+ const spinner = (0, import_process.getSpinner)();
33
+ const windowsScriptExtRegExp = /\.(?:cmd|bat|ps1)$/i;
34
+ let _child_process;
35
+ // @__NO_SIDE_EFFECTS__
36
+ function getChildProcess() {
37
+ if (_child_process === void 0) {
38
+ _child_process = require("node:child_process");
39
+ }
40
+ return _child_process;
41
+ }
42
+ let _npmCliPromiseSpawn;
43
+ // @__NO_SIDE_EFFECTS__
44
+ function getNpmcliPromiseSpawn() {
45
+ if (_npmCliPromiseSpawn === void 0) {
46
+ _npmCliPromiseSpawn = require("../external/@npmcli/promise-spawn");
47
+ }
48
+ return _npmCliPromiseSpawn;
49
+ }
50
+ let _path;
51
+ // @__NO_SIDE_EFFECTS__
52
+ function getPath() {
53
+ if (_path === void 0) {
54
+ _path = require("node:path");
55
+ }
56
+ return _path;
57
+ }
58
+ // @__NO_SIDE_EFFECTS__
59
+ function isSpawnError(value) {
60
+ if (value === null || typeof value !== "object") {
61
+ return false;
62
+ }
63
+ const err = value;
64
+ return (0, import_objects.hasOwn)(err, "code") && typeof err["code"] !== "undefined" || (0, import_objects.hasOwn)(err, "errno") && typeof err["errno"] !== "undefined" || (0, import_objects.hasOwn)(err, "syscall") && typeof err["syscall"] === "string";
65
+ }
66
+ // @__NO_SIDE_EFFECTS__
67
+ function isStdioType(stdio, type) {
68
+ if (arguments.length === 1) {
69
+ const validTypes = ["pipe", "ignore", "inherit", "overlapped"];
70
+ return typeof stdio === "string" && validTypes.includes(stdio);
71
+ }
72
+ return stdio === type || (stdio === null || stdio === void 0) && type === "pipe" || (0, import_arrays.isArray)(stdio) && stdio.length > 2 && stdio[0] === type && stdio[1] === type && stdio[2] === type;
73
+ }
74
+ // @__NO_SIDE_EFFECTS__
75
+ function stripAnsiFromSpawnResult(result) {
76
+ const res = result;
77
+ const { stderr, stdout } = res;
78
+ if (typeof stdout === "string") {
79
+ res.stdout = (0, import_strings.stripAnsi)(stdout);
80
+ }
81
+ if (typeof stderr === "string") {
82
+ res.stderr = (0, import_strings.stripAnsi)(stderr);
83
+ }
84
+ return res;
85
+ }
86
+ function spawn(cmd, args, options, extra) {
87
+ const shell = (0, import_objects.getOwn)(options, "shell");
88
+ const WIN32 = process.platform === "win32";
89
+ let actualCmd = cmd;
90
+ if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {
91
+ const path = /* @__PURE__ */ getPath();
92
+ actualCmd = path.basename(actualCmd, path.extname(actualCmd));
93
+ }
94
+ const {
95
+ spinner: optionsSpinner = spinner,
96
+ stripAnsi: shouldStripAnsi = true,
97
+ ...spawnOptions
98
+ } = { __proto__: null, ...options };
99
+ const spinnerInstance = optionsSpinner;
100
+ const { env, stdio, stdioString = true } = spawnOptions;
101
+ const wasSpinning = !!spinnerInstance?.isSpinning;
102
+ const shouldStopSpinner = wasSpinning && !/* @__PURE__ */ isStdioType(stdio, "ignore") && !/* @__PURE__ */ isStdioType(stdio, "pipe");
103
+ const shouldRestartSpinner = shouldStopSpinner;
104
+ if (shouldStopSpinner) {
105
+ spinnerInstance.stop();
106
+ }
107
+ const npmCliPromiseSpawn = /* @__PURE__ */ getNpmcliPromiseSpawn();
108
+ const promiseSpawnOpts = {
109
+ __proto__: null,
110
+ cwd: typeof spawnOptions.cwd === "string" ? spawnOptions.cwd : void 0,
111
+ env: {
112
+ __proto__: null,
113
+ ...process.env,
114
+ ...env
115
+ },
116
+ signal: abortSignal,
117
+ stdio: spawnOptions.stdio,
118
+ stdioString,
119
+ shell: spawnOptions.shell,
120
+ timeout: spawnOptions.timeout,
121
+ uid: spawnOptions.uid,
122
+ gid: spawnOptions.gid
123
+ };
124
+ const spawnPromise = npmCliPromiseSpawn(
125
+ actualCmd,
126
+ args ? [...args] : [],
127
+ promiseSpawnOpts,
128
+ extra
129
+ );
130
+ const oldSpawnPromise = spawnPromise;
131
+ let newSpawnPromise;
132
+ if (shouldStripAnsi && stdioString) {
133
+ newSpawnPromise = spawnPromise.then((result) => {
134
+ const strippedResult = /* @__PURE__ */ stripAnsiFromSpawnResult(result);
135
+ if ("code" in strippedResult) {
136
+ ;
137
+ strippedResult.exitCode = strippedResult.code;
138
+ }
139
+ return strippedResult;
140
+ }).catch((error) => {
141
+ throw /* @__PURE__ */ stripAnsiFromSpawnResult(error);
142
+ });
143
+ } else {
144
+ newSpawnPromise = spawnPromise.then((result) => {
145
+ if ("code" in result) {
146
+ const res = result;
147
+ res.exitCode = result.code;
148
+ return res;
149
+ }
150
+ return result;
151
+ });
152
+ }
153
+ if (shouldRestartSpinner) {
154
+ newSpawnPromise = newSpawnPromise.finally(() => {
155
+ spinnerInstance.start();
156
+ });
157
+ }
158
+ ;
159
+ newSpawnPromise.process = oldSpawnPromise.process;
160
+ newSpawnPromise.stdin = oldSpawnPromise.stdin;
161
+ return newSpawnPromise;
162
+ }
163
+ function spawnSync(cmd, args, options) {
164
+ const shell = (0, import_objects.getOwn)(options, "shell");
165
+ const WIN32 = process.platform === "win32";
166
+ let actualCmd = cmd;
167
+ if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {
168
+ const path = /* @__PURE__ */ getPath();
169
+ actualCmd = path.basename(actualCmd, path.extname(actualCmd));
170
+ }
171
+ const { stripAnsi: shouldStripAnsi = true, ...rawSpawnOptions } = {
172
+ __proto__: null,
173
+ ...options
174
+ };
175
+ const { stdioString: rawStdioString = true } = rawSpawnOptions;
176
+ const rawEncoding = rawStdioString ? "utf8" : "buffer";
177
+ const spawnOptions = {
178
+ encoding: rawEncoding,
179
+ ...rawSpawnOptions
180
+ };
181
+ const stdioString = spawnOptions.encoding !== "buffer";
182
+ const result = (/* @__PURE__ */ getChildProcess()).spawnSync(actualCmd, args, spawnOptions);
183
+ if (stdioString) {
184
+ const { stderr, stdout } = result;
185
+ if (stdout) {
186
+ result.stdout = stdout.toString().trim();
187
+ }
188
+ if (stderr) {
189
+ result.stderr = stderr.toString().trim();
190
+ }
191
+ }
192
+ return shouldStripAnsi && stdioString ? /* @__PURE__ */ stripAnsiFromSpawnResult(result) : result;
193
+ }
194
+ // Annotate the CommonJS export names for ESM import in node:
195
+ 0 && (module.exports = {
196
+ isSpawnError,
197
+ isStdioType,
198
+ spawn,
199
+ spawnSync
200
+ });
201
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/spawn.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Child process spawning utilities with cross-platform support.\n * Provides enhanced spawn functionality with stdio handling and error management.\n *\n * SECURITY: Array-Based Arguments Prevent Command Injection\n *\n * This module uses array-based arguments for all command execution, which is the\n * PRIMARY DEFENSE against command injection attacks. When you pass arguments as\n * an array to spawn():\n *\n * spawn('npx', ['sfw', tool, ...args], { shell: true })\n *\n * Node.js handles escaping automatically. Each argument is passed directly to the\n * OS without shell interpretation. Shell metacharacters like ; | & $ ( ) ` are\n * treated as LITERAL STRINGS, not as commands. This approach is secure even when\n * shell: true is used on Windows for .cmd/.bat file resolution.\n *\n * UNSAFE ALTERNATIVE (not used in this codebase):\n * spawn(`npx sfw ${tool} ${args.join(' ')}`, { shell: true }) // \u2716 VULNERABLE\n *\n * String concatenation allows injection. For example, if tool = \"foo; rm -rf /\",\n * the shell would execute both commands. Array-based arguments prevent this.\n *\n * References:\n * - https://nodejs.org/api/child_process.html#child_processspawncommand-args-options\n * - https://cheatsheetseries.owasp.org/cheatsheets/Nodejs_Security_Cheat_Sheet.html\n */\n\nimport { getAbortSignal, getSpinner } from '#constants/process'\n\nimport { isArray } from './arrays'\n\nconst abortSignal = getAbortSignal()\nconst spinner = getSpinner()\n\nimport { getOwn, hasOwn } from './objects'\nimport { stripAnsi } from './strings'\n\n// Define BufferEncoding type for TypeScript compatibility.\ntype BufferEncoding = globalThis.BufferEncoding\n\nconst windowsScriptExtRegExp = /\\.(?:cmd|bat|ps1)$/i\n\nlet _child_process: typeof import('node:child_process') | undefined\n/**\n * Lazily load the child_process module.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getChildProcess() {\n if (_child_process === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _child_process = /*@__PURE__*/ require('node:child_process')\n }\n return _child_process as typeof import('node:child_process')\n}\n\n// Type for promise-spawn options.\nexport type PromiseSpawnOptions = {\n cwd?: string | undefined\n stdioString?: boolean | undefined\n stdio?: StdioType | undefined\n env?: NodeJS.ProcessEnv | undefined\n shell?: boolean | string | undefined\n signal?: AbortSignal | undefined\n timeout?: number | undefined\n uid?: number | undefined\n gid?: number | undefined\n}\n\n// Type for promise-spawn result.\nexport type PromiseSpawnResult = Promise<{\n cmd: string\n args: string[] | readonly string[]\n code: number\n signal: NodeJS.Signals | null\n stdout: string | Buffer\n stderr: string | Buffer\n}> & {\n process: ChildProcessType\n stdin: WritableStreamType | null\n}\n\nlet _npmCliPromiseSpawn:\n | ((\n cmd: string,\n args: string[],\n options?: PromiseSpawnOptions | undefined,\n extra?: SpawnExtra | undefined,\n ) => PromiseSpawnResult)\n | undefined\n/**\n * Lazily load the promise-spawn module for async process spawning.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getNpmcliPromiseSpawn() {\n if (_npmCliPromiseSpawn === undefined) {\n _npmCliPromiseSpawn = /*@__PURE__*/ require('../external/@npmcli/promise-spawn')\n }\n return _npmCliPromiseSpawn as unknown as typeof import('@npmcli/promise-spawn')\n}\n\nlet _path: typeof import('node:path') | undefined\n/**\n * Lazily load the path module to avoid Webpack errors.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getPath() {\n if (_path === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _path = /*@__PURE__*/ require('node:path')\n }\n return _path as typeof import('node:path')\n}\n\n/**\n * Check if a value is a spawn error.\n */\nexport type SpawnError = {\n args: string[]\n cmd: string\n code: number\n name: string\n message: string\n signal: NodeJS.Signals | null\n stack: string\n stderr: string | Buffer\n stdout: string | Buffer\n}\n\nexport type SpawnErrorWithOutputString = SpawnError & {\n stdout: string\n stderr: string\n}\n\nexport type SpawnErrorWithOutputBuffer = SpawnError & {\n stdout: Buffer\n stderr: Buffer\n}\n\nexport type SpawnExtra = Record<string, unknown>\n\nexport type IOType = 'pipe' | 'ignore' | 'inherit' | 'overlapped'\nexport type StdioType = IOType | 'ipc' | Array<IOType | 'ipc'>\n\nexport interface SpawnSyncReturns<T> {\n pid: number\n output: Array<T | null>\n stdout: T\n stderr: T\n status: number | null\n signal: NodeJS.Signals | null\n error?: Error | undefined\n}\n\n/**\n * Check if a value is a spawn error with expected properties.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function isSpawnError(value: unknown): value is SpawnError {\n if (value === null || typeof value !== 'object') {\n return false\n }\n // Check for spawn-specific error properties.\n const err = value as Record<string, unknown>\n return (\n (hasOwn(err, 'code') && typeof err['code'] !== 'undefined') ||\n (hasOwn(err, 'errno') && typeof err['errno'] !== 'undefined') ||\n (hasOwn(err, 'syscall') && typeof err['syscall'] === 'string')\n )\n}\n\n/**\n * Check if stdio configuration matches a specific type.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function isStdioType(\n stdio: string | string[],\n type?: StdioType | undefined,\n): boolean {\n // If called with one argument, check if it's a valid stdio type.\n // biome-ignore lint/complexity/noArguments: Function overload detection for single vs two-arg calls.\n if (arguments.length === 1) {\n const validTypes = ['pipe', 'ignore', 'inherit', 'overlapped']\n return typeof stdio === 'string' && validTypes.includes(stdio)\n }\n // Original two-argument behavior.\n return (\n stdio === type ||\n ((stdio === null || stdio === undefined) && type === 'pipe') ||\n (isArray(stdio) &&\n stdio.length > 2 &&\n stdio[0] === type &&\n stdio[1] === type &&\n stdio[2] === type)\n )\n}\n\n/**\n * Strip ANSI escape codes from spawn result stdout and stderr.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction stripAnsiFromSpawnResult(result: unknown): unknown {\n const res = result as {\n stdout?: string | Buffer\n stderr?: string | Buffer\n }\n const { stderr, stdout } = res\n if (typeof stdout === 'string') {\n res.stdout = stripAnsi(stdout)\n }\n if (typeof stderr === 'string') {\n res.stderr = stripAnsi(stderr)\n }\n return res\n}\n\n/*@__NO_SIDE_EFFECTS__*/\n// Duplicated from Node.js child_process.SpawnOptions\n// These are the options passed to child_process.spawn()\ninterface NodeSpawnOptions {\n cwd?: string | URL | undefined\n env?: NodeJS.ProcessEnv | undefined\n argv0?: string | undefined\n // biome-ignore lint/suspicious/noExplicitAny: Stdio can be complex union of types from Node.js.\n stdio?: any\n detached?: boolean | undefined\n uid?: number | undefined\n gid?: number | undefined\n serialization?: 'json' | 'advanced' | undefined\n shell?: boolean | string | undefined\n windowsVerbatimArguments?: boolean | undefined\n windowsHide?: boolean | undefined\n signal?: AbortSignal | undefined\n timeout?: number | undefined\n killSignal?: NodeJS.Signals | number | undefined\n}\n\n// Duplicated from Node.js child_process.ChildProcess\n// This represents a spawned child process\ninterface ChildProcessType {\n stdin: NodeJS.WritableStream | null\n stdout: NodeJS.ReadableStream | null\n stderr: NodeJS.ReadableStream | null\n // biome-ignore lint/suspicious/noExplicitAny: IPC channel type from Node.js.\n readonly channel?: any\n readonly stdio: [\n NodeJS.WritableStream | null,\n NodeJS.ReadableStream | null,\n NodeJS.ReadableStream | null,\n NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined,\n NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined,\n ]\n readonly killed: boolean\n readonly pid?: number | undefined\n readonly connected: boolean\n readonly exitCode: number | null\n readonly signalCode: NodeJS.Signals | null\n readonly spawnargs: string[]\n readonly spawnfile: string\n kill(signal?: NodeJS.Signals | number): boolean\n // biome-ignore lint/suspicious/noExplicitAny: IPC message type from Node.js.\n send(message: any, callback?: (error: Error | null) => void): boolean\n send(\n // biome-ignore lint/suspicious/noExplicitAny: IPC message and handle types from Node.js.\n message: any,\n // biome-ignore lint/suspicious/noExplicitAny: IPC message and handle types from Node.js.\n sendHandle?: any | undefined,\n callback?: (error: Error | null) => void,\n ): boolean\n send(\n // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.\n message: any,\n // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.\n sendHandle?: any | undefined,\n // biome-ignore lint/suspicious/noExplicitAny: IPC message, handle, and options types from Node.js.\n options?: any | undefined,\n callback?: (error: Error | null) => void,\n ): boolean\n disconnect(): void\n unref(): void\n ref(): void\n}\n\n// Duplicated from Node.js stream.Writable\ninterface WritableStreamType {\n writable: boolean\n writableEnded: boolean\n writableFinished: boolean\n writableHighWaterMark: number\n writableLength: number\n writableObjectMode: boolean\n writableCorked: number\n destroyed: boolean\n write(\n // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.\n chunk: any,\n encoding?: BufferEncoding | undefined,\n callback?: (error?: Error | null) => void,\n ): boolean\n // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.\n write(chunk: any, callback?: (error?: Error | null) => void): boolean\n end(cb?: () => void): this\n // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.\n end(chunk: any, cb?: () => void): this\n // biome-ignore lint/suspicious/noExplicitAny: Stream chunk can be any type.\n end(chunk: any, encoding?: BufferEncoding | undefined, cb?: () => void): this\n cork(): void\n uncork(): void\n destroy(error?: Error | undefined): this\n}\n\n/**\n * Spawn a child process with enhanced error handling and output capture.\n */\nexport type SpawnOptions = import('./objects').Remap<\n NodeSpawnOptions & {\n spinner?: import('./spinner').Spinner | undefined\n stdioString?: boolean\n stripAnsi?: boolean\n }\n>\nexport type SpawnResult = PromiseSpawnResult\nexport type SpawnStdioResult = {\n cmd: string\n args: string[] | readonly string[]\n code: number\n signal: NodeJS.Signals | null\n stdout: string | Buffer\n stderr: string | Buffer\n}\n\n/**\n * Spawn a child process and return a promise that resolves when it completes.\n *\n * SECURITY: This function uses array-based arguments which prevent command injection.\n * Arguments in the `args` array are passed directly to the OS without shell\n * interpretation. Shell metacharacters (;|&$()`) are treated as literal strings,\n * not as commands or operators. This is the PRIMARY SECURITY DEFENSE.\n *\n * Even when shell: true is used (on Windows for .cmd/.bat execution), the array-based\n * approach remains secure because Node.js properly escapes each argument before passing\n * to the shell.\n *\n * @param cmd - Command to execute (not user-controlled)\n * @param args - Array of arguments (safe even with user input due to array-based passing)\n * @param options - Spawn options\n * @param extra - Extra options for promise-spawn\n *\n * @example\n * // \u2714 DO THIS - Array-based arguments\n * spawn('git', ['commit', '-m', userMessage])\n * // Each argument is properly escaped, even if userMessage = \"foo; rm -rf /\"\n *\n * @example\n * // \u2716 NEVER DO THIS - String concatenation\n * spawn(`git commit -m \"${userMessage}\"`, { shell: true })\n * // Vulnerable to injection if userMessage = '\"; rm -rf / #'\n */\nexport function spawn(\n cmd: string,\n args?: string[] | readonly string[],\n options?: SpawnOptions | undefined,\n extra?: SpawnExtra | undefined,\n): SpawnResult {\n // Windows cmd.exe command resolution for .cmd/.bat/.ps1 files:\n //\n // When shell: true is used on Windows with script files (.cmd, .bat, .ps1),\n // cmd.exe can have issues executing full paths. The solution is to use just\n // the command basename without extension and let cmd.exe find it via PATH.\n //\n // How cmd.exe resolves commands:\n // 1. Searches current directory first\n // 2. Then searches each directory in PATH environment variable\n // 3. For each directory, tries extensions from PATHEXT (.COM, .EXE, .BAT, .CMD, etc.)\n // 4. Executes the first match found\n //\n // Example: Given 'C:\\pnpm\\pnpm.cmd' with shell: true\n // 1. Extract basename without extension: 'pnpm'\n // 2. cmd.exe searches PATH directories for 'pnpm'\n // 3. PATHEXT causes it to try 'pnpm.com', 'pnpm.exe', 'pnpm.bat', 'pnpm.cmd', etc.\n // 4. Finds and executes 'C:\\pnpm\\pnpm.cmd'\n //\n // This approach is consistent with how other tools handle Windows execution:\n // - npm's promise-spawn: uses which.sync() to find commands in PATH\n // - cross-spawn: spawns cmd.exe with escaped arguments\n // - execa: uses cross-spawn under the hood for Windows support\n //\n // See: https://github.com/nodejs/node/issues/3675\n const shell = getOwn(options, 'shell')\n // Inline WIN32 constant for coverage mode compatibility\n const WIN32 = process.platform === 'win32'\n let actualCmd = cmd\n if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {\n const path = getPath()\n // Extract just the command name without path and extension.\n actualCmd = path.basename(actualCmd, path.extname(actualCmd))\n }\n const {\n spinner: optionsSpinner = spinner,\n stripAnsi: shouldStripAnsi = true,\n ...spawnOptions\n } = { __proto__: null, ...options } as SpawnOptions\n const spinnerInstance = optionsSpinner\n const { env, stdio, stdioString = true } = spawnOptions\n // The stdio option can be a string or an array.\n // https://nodejs.org/api/child_process.html#optionsstdio\n const wasSpinning = !!spinnerInstance?.isSpinning\n const shouldStopSpinner =\n wasSpinning && !isStdioType(stdio, 'ignore') && !isStdioType(stdio, 'pipe')\n const shouldRestartSpinner = shouldStopSpinner\n if (shouldStopSpinner) {\n spinnerInstance.stop()\n }\n const npmCliPromiseSpawn = getNpmcliPromiseSpawn()\n // Use __proto__: null to prevent prototype pollution when passing to\n // third-party code, Node.js built-ins, or JavaScript built-in methods.\n // https://github.com/npm/promise-spawn\n // https://github.com/nodejs/node/blob/v24.0.1/lib/child_process.js#L674-L678\n const promiseSpawnOpts = {\n __proto__: null,\n cwd: typeof spawnOptions.cwd === 'string' ? spawnOptions.cwd : undefined,\n env: {\n __proto__: null,\n ...process.env,\n ...env,\n } as unknown as NodeJS.ProcessEnv,\n signal: abortSignal,\n stdio: spawnOptions.stdio,\n stdioString,\n shell: spawnOptions.shell,\n timeout: spawnOptions.timeout,\n uid: spawnOptions.uid,\n gid: spawnOptions.gid,\n } as unknown as PromiseSpawnOptions\n const spawnPromise = npmCliPromiseSpawn(\n actualCmd,\n args ? [...args] : [],\n promiseSpawnOpts as Parameters<typeof npmCliPromiseSpawn>[2],\n extra,\n )\n const oldSpawnPromise = spawnPromise\n let newSpawnPromise: PromiseSpawnResult\n if (shouldStripAnsi && stdioString) {\n newSpawnPromise = spawnPromise\n .then(result => {\n const strippedResult = stripAnsiFromSpawnResult(result)\n // Add exitCode as an alias for code.\n if ('code' in (strippedResult as { code?: number })) {\n ;(strippedResult as { code: number; exitCode: number }).exitCode = (\n strippedResult as { code: number }\n ).code\n }\n return strippedResult\n })\n .catch(error => {\n throw stripAnsiFromSpawnResult(error)\n }) as PromiseSpawnResult\n } else {\n newSpawnPromise = spawnPromise.then(result => {\n // Add exitCode as an alias for code.\n if ('code' in result) {\n const res = result as typeof result & { exitCode: number }\n res.exitCode = result.code\n return res\n }\n return result\n }) as PromiseSpawnResult\n }\n if (shouldRestartSpinner) {\n newSpawnPromise = newSpawnPromise.finally(() => {\n spinnerInstance.start()\n }) as PromiseSpawnResult\n }\n // Copy process and stdin properties from original promise\n ;(newSpawnPromise as unknown as PromiseSpawnResult).process =\n oldSpawnPromise.process\n ;(newSpawnPromise as unknown as PromiseSpawnResult).stdin = (\n oldSpawnPromise as unknown as PromiseSpawnResult\n ).stdin\n return newSpawnPromise as SpawnResult\n}\n\n/*@__NO_SIDE_EFFECTS__*/\n/**\n * Synchronously spawn a child process.\n */\nexport type SpawnSyncOptions = Omit<SpawnOptions, 'spinner'>\nexport function spawnSync(\n cmd: string,\n args?: string[] | readonly string[],\n options?: SpawnSyncOptions | undefined,\n): SpawnSyncReturns<string | Buffer> {\n // Windows cmd.exe command resolution for .cmd/.bat/.ps1 files:\n // See spawn() function above for detailed explanation of this approach.\n const shell = getOwn(options, 'shell')\n // Inline WIN32 constant for coverage mode compatibility\n const WIN32 = process.platform === 'win32'\n let actualCmd = cmd\n if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {\n const path = getPath()\n // Extract just the command name without path and extension.\n actualCmd = path.basename(actualCmd, path.extname(actualCmd))\n }\n const { stripAnsi: shouldStripAnsi = true, ...rawSpawnOptions } = {\n __proto__: null,\n ...options,\n } as SpawnSyncOptions\n const { stdioString: rawStdioString = true } = rawSpawnOptions\n const rawEncoding = rawStdioString ? 'utf8' : 'buffer'\n const spawnOptions = {\n encoding: rawEncoding,\n ...rawSpawnOptions,\n } as NodeSpawnOptions & { encoding: BufferEncoding | 'buffer' }\n const stdioString = spawnOptions.encoding !== 'buffer'\n const result = getChildProcess().spawnSync(actualCmd, args, spawnOptions)\n if (stdioString) {\n const { stderr, stdout } = result\n if (stdout) {\n result.stdout = stdout.toString().trim()\n }\n if (stderr) {\n result.stderr = stderr.toString().trim()\n }\n }\n return (\n shouldStripAnsi && stdioString ? stripAnsiFromSpawnResult(result) : result\n ) as SpawnSyncReturns<string | Buffer>\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @fileoverview CLI spinner utilities for long-running operations.
3
+ * Provides animated progress indicators with CI environment detection.
4
+ */
5
+ import type { Writable } from 'node:stream';
6
+ import type { ShimmerColorGradient, ShimmerConfig, ShimmerDirection, ShimmerState } from './effects/text-shimmer';
7
+ export type ColorName = 'black' | 'blue' | 'blueBright' | 'cyan' | 'cyanBright' | 'gray' | 'green' | 'greenBright' | 'magenta' | 'magentaBright' | 'red' | 'redBright' | 'white' | 'whiteBright' | 'yellow' | 'yellowBright';
8
+ export type ColorInherit = 'inherit';
9
+ export type ColorRgb = readonly [number, number, number];
10
+ export type ColorValue = ColorName | ColorRgb;
11
+ export type SymbolType = 'fail' | 'info' | 'success' | 'warn';
12
+ export type ProgressInfo = {
13
+ current: number;
14
+ total: number;
15
+ unit?: string | undefined;
16
+ };
17
+ export type ShimmerInfo = ShimmerState & {
18
+ color: ColorInherit | ColorValue | ShimmerColorGradient;
19
+ };
20
+ export type Spinner = {
21
+ color: ColorRgb;
22
+ spinner: SpinnerStyle;
23
+ get isSpinning(): boolean;
24
+ clear(): Spinner;
25
+ debug(text?: string | undefined, ...extras: unknown[]): Spinner;
26
+ debugAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
27
+ error(text?: string | undefined, ...extras: unknown[]): Spinner;
28
+ errorAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
29
+ fail(text?: string | undefined, ...extras: unknown[]): Spinner;
30
+ failAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
31
+ // text property returns a method via _textMethod override
32
+ text(value: string): Spinner;
33
+ text(): string;
34
+ indent(spaces?: number | undefined): Spinner;
35
+ dedent(spaces?: number | undefined): Spinner;
36
+ info(text?: string | undefined, ...extras: unknown[]): Spinner;
37
+ infoAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
38
+ log(text?: string | undefined, ...extras: unknown[]): Spinner;
39
+ logAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
40
+ start(text?: string | undefined): Spinner;
41
+ stop(text?: string | undefined): Spinner;
42
+ stopAndPersist(text?: string | undefined): Spinner;
43
+ step(text?: string | undefined, ...extras: unknown[]): Spinner;
44
+ substep(text?: string | undefined, ...extras: unknown[]): Spinner;
45
+ success(text?: string | undefined, ...extras: unknown[]): Spinner;
46
+ successAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
47
+ done(text?: string | undefined, ...extras: unknown[]): Spinner;
48
+ doneAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
49
+ progress(current: number, total: number, unit?: string | undefined): Spinner;
50
+ progressStep(amount?: number): Spinner;
51
+ shimmer(enabled: boolean): Spinner;
52
+ shimmer(config: Partial<ShimmerConfig> | ShimmerDirection): Spinner;
53
+ warn(text?: string | undefined, ...extras: unknown[]): Spinner;
54
+ warnAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
55
+ };
56
+ export type SpinnerOptions = {
57
+ readonly color?: ColorValue | undefined;
58
+ readonly shimmer?: ShimmerConfig | ShimmerDirection | undefined;
59
+ readonly spinner?: SpinnerStyle | undefined;
60
+ readonly signal?: AbortSignal | undefined;
61
+ readonly stream?: Writable | undefined;
62
+ readonly text?: string | undefined;
63
+ };
64
+ export type SpinnerStyle = {
65
+ readonly frames: string[];
66
+ readonly interval?: number | undefined;
67
+ };
68
+ export declare const ciSpinner: SpinnerStyle;
69
+ /**
70
+ * Get available CLI spinner styles or a specific style by name.
71
+ * Extends the standard cli-spinners collection with Socket custom spinners.
72
+ *
73
+ * @see https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json
74
+ *
75
+ * Custom spinners:
76
+ * - `socket` (default): Socket pulse animation with sparkles and lightning
77
+ */
78
+ /*@__NO_SIDE_EFFECTS__*/
79
+ export declare function getCliSpinners(styleName?: string | undefined): SpinnerStyle | Record<string, SpinnerStyle> | undefined;
80
+ /**
81
+ * Create a spinner instance for displaying loading indicators.
82
+ *
83
+ * AUTO-CLEAR BEHAVIOR:
84
+ * - All *AndStop() methods AUTO-CLEAR the spinner line via yocto-spinner.stop()
85
+ * Examples: doneAndStop(), successAndStop(), failAndStop(), etc.
86
+ *
87
+ * - Methods WITHOUT "AndStop" do NOT clear (spinner keeps spinning)
88
+ * Examples: done(), success(), fail(), etc.
89
+ *
90
+ * STREAM USAGE:
91
+ * - Spinner animation: stderr (yocto-spinner default)
92
+ * - Status methods (done, success, fail, info, warn, step, substep): stderr
93
+ * - Data methods (log): stdout
94
+ *
95
+ * COMPARISON WITH LOGGER:
96
+ * - logger.done() does NOT auto-clear (requires manual logger.clearLine())
97
+ * - spinner.doneAndStop() DOES auto-clear (built into yocto-spinner.stop())
98
+ * - Pattern: logger.clearLine().done() vs spinner.doneAndStop()
99
+ */
100
+ /*@__NO_SIDE_EFFECTS__*/
101
+ export declare function Spinner(options?: SpinnerOptions | undefined): Spinner;
102
+ /**
103
+ * Get the default spinner instance.
104
+ * Lazily creates the spinner to avoid circular dependencies during module initialization.
105
+ */
106
+ export declare function getDefaultSpinner(): ReturnType<typeof Spinner>;
107
+ /**
108
+ * @deprecated Use `getDefaultSpinner()` function instead for better tree-shaking and to avoid circular dependencies.
109
+ */
110
+ export declare const spinner: Spinner;
111
+ export type WithSpinnerOptions<T> = {
112
+ message: string;
113
+ operation: () => Promise<T>;
114
+ spinner?: Spinner | undefined;
115
+ };
116
+ /**
117
+ * Execute an async operation with spinner lifecycle management.
118
+ * Ensures spinner.stop() is always called via try/finally, even if the operation throws.
119
+ *
120
+ * @param options - Configuration object
121
+ * @param options.message - Message to display while spinner is running
122
+ * @param options.operation - Async function to execute
123
+ * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)
124
+ * @returns Result of the operation
125
+ * @throws Re-throws any error from operation after stopping spinner
126
+ *
127
+ * @example
128
+ * import { spinner, withSpinner } from '@socketsecurity/registry/lib/spinner'
129
+ *
130
+ * // With spinner instance
131
+ * await withSpinner({
132
+ * message: 'Processing…',
133
+ * operation: async () => {
134
+ * return await processData()
135
+ * },
136
+ * spinner
137
+ * })
138
+ *
139
+ * // Without spinner instance (no-op)
140
+ * await withSpinner({
141
+ * message: 'Processing…',
142
+ * operation: async () => {
143
+ * return await processData()
144
+ * }
145
+ * })
146
+ */
147
+ export declare function withSpinner<T>(options: WithSpinnerOptions<T>): Promise<T>;
148
+ export type WithSpinnerRestoreOptions<T> = {
149
+ operation: () => Promise<T>;
150
+ spinner?: Spinner | undefined;
151
+ wasSpinning: boolean;
152
+ };
153
+ /**
154
+ * Execute an async operation with conditional spinner restart.
155
+ * Useful when you need to temporarily stop a spinner for an operation,
156
+ * then restore it to its previous state.
157
+ *
158
+ * @param options - Configuration object
159
+ * @param options.operation - Async function to execute
160
+ * @param options.spinner - Optional spinner instance to manage
161
+ * @param options.wasSpinning - Whether spinner was spinning before
162
+ * @returns Result of the operation
163
+ * @throws Re-throws any error from operation after restoring spinner state
164
+ *
165
+ * @example
166
+ * import { spinner, withSpinnerRestore } from '@socketsecurity/registry/lib/spinner'
167
+ *
168
+ * const wasSpinning = spinner.isSpinning
169
+ * spinner.stop()
170
+ *
171
+ * const result = await withSpinnerRestore({
172
+ * operation: async () => {
173
+ * // Do work without spinner
174
+ * return await someOperation()
175
+ * },
176
+ * spinner,
177
+ * wasSpinning
178
+ * })
179
+ */
180
+ export declare function withSpinnerRestore<T>(options: WithSpinnerRestoreOptions<T>): Promise<T>;
181
+ export type WithSpinnerSyncOptions<T> = {
182
+ message: string;
183
+ operation: () => T;
184
+ spinner?: Spinner | undefined;
185
+ };
186
+ /**
187
+ * Execute a synchronous operation with spinner lifecycle management.
188
+ * Ensures spinner.stop() is always called via try/finally, even if the operation throws.
189
+ *
190
+ * @param options - Configuration object
191
+ * @param options.message - Message to display while spinner is running
192
+ * @param options.operation - Function to execute
193
+ * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)
194
+ * @returns Result of the operation
195
+ * @throws Re-throws any error from operation after stopping spinner
196
+ *
197
+ * @example
198
+ * import { spinner, withSpinnerSync} from '@socketsecurity/registry/lib/spinner'
199
+ *
200
+ * const result = withSpinnerSync({
201
+ * message: 'Processing…',
202
+ * operation: () => {
203
+ * return processDataSync()
204
+ * },
205
+ * spinner
206
+ * })
207
+ */
208
+ export declare function withSpinnerSync<T>(options: WithSpinnerSyncOptions<T>): T;