@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/spinner.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview CLI spinner utilities for long-running operations.\n * Provides animated progress indicators with CI environment detection.\n */\n\nimport type { Writable } from 'node:stream'\n\n// Note: getAbortSignal is imported lazily to avoid circular dependencies.\nimport { CI } from '#env/ci'\nimport { generateSocketSpinnerFrames } from './effects/pulse-frames'\nimport type {\n ShimmerColorGradient,\n ShimmerConfig,\n ShimmerDirection,\n ShimmerState,\n} from './effects/text-shimmer'\nimport { applyShimmer, COLOR_INHERIT, DIR_LTR } from './effects/text-shimmer'\nimport yoctoSpinner from './external/@socketregistry/yocto-spinner'\nimport { hasOwn } from './objects'\nimport { isBlankString, stringWidth } from './strings'\n\nexport type ColorName =\n | 'black'\n | 'blue'\n | 'blueBright'\n | 'cyan'\n | 'cyanBright'\n | 'gray'\n | 'green'\n | 'greenBright'\n | 'magenta'\n | 'magentaBright'\n | 'red'\n | 'redBright'\n | 'white'\n | 'whiteBright'\n | 'yellow'\n | 'yellowBright'\n\nexport type ColorInherit = 'inherit'\n\nexport type ColorRgb = readonly [number, number, number]\n\nexport type ColorValue = ColorName | ColorRgb\n\nexport type SymbolType = 'fail' | 'info' | 'success' | 'warn'\n\n// Map color names to RGB values.\nconst colorToRgb: Record<ColorName, ColorRgb> = {\n __proto__: null,\n black: [0, 0, 0],\n blue: [0, 0, 255],\n blueBright: [100, 149, 237],\n cyan: [0, 255, 255],\n cyanBright: [0, 255, 255],\n gray: [128, 128, 128],\n green: [0, 128, 0],\n greenBright: [0, 255, 0],\n magenta: [255, 0, 255],\n magentaBright: [255, 105, 180],\n red: [255, 0, 0],\n redBright: [255, 69, 0],\n white: [255, 255, 255],\n whiteBright: [255, 255, 255],\n yellow: [255, 255, 0],\n yellowBright: [255, 255, 153],\n} as Record<ColorName, ColorRgb>\n\n/**\n * Check if value is RGB tuple.\n */\nfunction isRgbTuple(value: ColorValue): value is ColorRgb {\n return Array.isArray(value)\n}\n\n/**\n * Convert ColorValue to RGB tuple.\n */\nfunction toRgb(color: ColorValue): ColorRgb {\n if (isRgbTuple(color)) {\n return color\n }\n return colorToRgb[color]\n}\n\nexport type ProgressInfo = {\n current: number\n total: number\n unit?: string | undefined\n}\n\nexport type ShimmerInfo = ShimmerState & {\n color: ColorInherit | ColorValue | ShimmerColorGradient\n}\n\nexport type Spinner = {\n color: ColorRgb\n spinner: SpinnerStyle\n\n get isSpinning(): boolean\n\n clear(): Spinner\n debug(text?: string | undefined, ...extras: unknown[]): Spinner\n debugAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n error(text?: string | undefined, ...extras: unknown[]): Spinner\n errorAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n fail(text?: string | undefined, ...extras: unknown[]): Spinner\n failAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n\n // text property returns a method via _textMethod override\n text(value: string): Spinner\n text(): string\n\n indent(spaces?: number | undefined): Spinner\n dedent(spaces?: number | undefined): Spinner\n\n info(text?: string | undefined, ...extras: unknown[]): Spinner\n infoAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n log(text?: string | undefined, ...extras: unknown[]): Spinner\n logAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n\n start(text?: string | undefined): Spinner\n stop(text?: string | undefined): Spinner\n stopAndPersist(text?: string | undefined): Spinner\n\n step(text?: string | undefined, ...extras: unknown[]): Spinner\n substep(text?: string | undefined, ...extras: unknown[]): Spinner\n\n success(text?: string | undefined, ...extras: unknown[]): Spinner\n successAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n\n done(text?: string | undefined, ...extras: unknown[]): Spinner\n doneAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n\n progress(current: number, total: number, unit?: string | undefined): Spinner\n progressStep(amount?: number): Spinner\n\n shimmer(enabled: boolean): Spinner\n shimmer(config: Partial<ShimmerConfig> | ShimmerDirection): Spinner\n\n warn(text?: string | undefined, ...extras: unknown[]): Spinner\n warnAndStop(text?: string | undefined, ...extras: unknown[]): Spinner\n}\n\nexport type SpinnerOptions = {\n readonly color?: ColorValue | undefined\n readonly shimmer?: ShimmerConfig | ShimmerDirection | undefined\n readonly spinner?: SpinnerStyle | undefined\n readonly signal?: AbortSignal | undefined\n readonly stream?: Writable | undefined\n readonly text?: string | undefined\n}\n\nexport type SpinnerStyle = {\n readonly frames: string[]\n readonly interval?: number | undefined\n}\n\nexport const ciSpinner: SpinnerStyle = {\n frames: [''],\n interval: 2_147_483_647,\n}\n\nfunction desc(value: unknown) {\n return {\n __proto__: null,\n configurable: true,\n value,\n writable: true,\n }\n}\n\nfunction normalizeText(value: unknown) {\n return typeof value === 'string' ? value.trimStart() : ''\n}\n\nfunction formatProgress(progress: ProgressInfo): string {\n const { current, total, unit } = progress\n const percentage = Math.round((current / total) * 100)\n const bar = renderProgressBar(percentage)\n const count = unit ? `${current}/${total} ${unit}` : `${current}/${total}`\n return `${bar} ${percentage}% (${count})`\n}\n\nfunction renderProgressBar(percentage: number, width: number = 20): string {\n const filled = Math.round((percentage / 100) * width)\n const empty = width - filled\n const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(empty)\n // Use cyan color for the progress bar\n const colors = /*@__PURE__*/ require('../external/yoctocolors-cjs')\n return colors.cyan(bar)\n}\n\nlet _cliSpinners: Record<string, SpinnerStyle> | undefined\n\n/**\n * Get available CLI spinner styles or a specific style by name.\n * Extends the standard cli-spinners collection with Socket custom spinners.\n *\n * @see https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json\n *\n * Custom spinners:\n * - `socket` (default): Socket pulse animation with sparkles and lightning\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function getCliSpinners(\n styleName?: string | undefined,\n): SpinnerStyle | Record<string, SpinnerStyle> | undefined {\n if (_cliSpinners === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: Accessing internal yocto-spinner constructor.\n const YoctoCtor = yoctoSpinner as any\n // Get the YoctoSpinner class to access static properties.\n const tempInstance = YoctoCtor({})\n // biome-ignore lint/suspicious/noExplicitAny: Accessing internal yocto-spinner class.\n const YoctoSpinnerClass = tempInstance.constructor as any\n // Extend the standard cli-spinners collection with Socket custom spinners.\n _cliSpinners = {\n __proto__: null,\n ...YoctoSpinnerClass.spinners,\n socket: generateSocketSpinnerFrames(),\n }\n }\n if (typeof styleName === 'string' && _cliSpinners) {\n return hasOwn(_cliSpinners, styleName) ? _cliSpinners[styleName] : undefined\n }\n return _cliSpinners\n}\n\nlet _Spinner: {\n new (options?: SpinnerOptions | undefined): Spinner\n}\nlet _defaultSpinner: SpinnerStyle | undefined\n\n/**\n * Create a spinner instance for displaying loading indicators.\n *\n * AUTO-CLEAR BEHAVIOR:\n * - All *AndStop() methods AUTO-CLEAR the spinner line via yocto-spinner.stop()\n * Examples: doneAndStop(), successAndStop(), failAndStop(), etc.\n *\n * - Methods WITHOUT \"AndStop\" do NOT clear (spinner keeps spinning)\n * Examples: done(), success(), fail(), etc.\n *\n * STREAM USAGE:\n * - Spinner animation: stderr (yocto-spinner default)\n * - Status methods (done, success, fail, info, warn, step, substep): stderr\n * - Data methods (log): stdout\n *\n * COMPARISON WITH LOGGER:\n * - logger.done() does NOT auto-clear (requires manual logger.clearLine())\n * - spinner.doneAndStop() DOES auto-clear (built into yocto-spinner.stop())\n * - Pattern: logger.clearLine().done() vs spinner.doneAndStop()\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function Spinner(options?: SpinnerOptions | undefined): Spinner {\n if (_Spinner === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: Accessing internal yocto-spinner constructor.\n const YoctoCtor = yoctoSpinner as any\n // Get the actual YoctoSpinner class from an instance\n const tempInstance = YoctoCtor({})\n const YoctoSpinnerClass = tempInstance.constructor\n\n /*@__PURE__*/\n // biome-ignore lint/suspicious/noExplicitAny: Extending yocto-spinner class.\n _Spinner = class SpinnerClass extends (YoctoSpinnerClass as any) {\n declare isSpinning: boolean\n #baseText: string = ''\n #indentation: string = ''\n #progress?: ProgressInfo | undefined\n #shimmer?: ShimmerInfo | undefined\n #shimmerSavedConfig?: ShimmerInfo | undefined\n\n constructor(options?: SpinnerOptions | undefined) {\n const opts = { __proto__: null, ...options } as SpinnerOptions\n\n // Convert color option to RGB (default to Socket purple).\n const spinnerColor = opts.color ?? ([140, 82, 255] as const)\n\n // Validate RGB tuple if provided.\n if (\n isRgbTuple(spinnerColor) &&\n (spinnerColor.length !== 3 ||\n !spinnerColor.every(\n n => typeof n === 'number' && n >= 0 && n <= 255,\n ))\n ) {\n throw new TypeError(\n 'RGB color must be an array of 3 numbers between 0 and 255',\n )\n }\n\n const spinnerColorRgb = toRgb(spinnerColor)\n\n // Parse shimmer config - can be object or direction string.\n let shimmerInfo: ShimmerInfo | undefined\n if (opts.shimmer) {\n let shimmerDir: ShimmerDirection\n let shimmerColor:\n | ColorInherit\n | ColorValue\n | ShimmerColorGradient\n | undefined\n // Default: 0.33 steps per frame (~150ms per step).\n let shimmerSpeed: number = 1 / 3\n\n if (typeof opts.shimmer === 'string') {\n shimmerDir = opts.shimmer\n } else {\n const shimmerConfig = {\n __proto__: null,\n ...opts.shimmer,\n } as ShimmerConfig\n shimmerDir = shimmerConfig.dir ?? DIR_LTR\n shimmerColor = shimmerConfig.color ?? COLOR_INHERIT\n shimmerSpeed = shimmerConfig.speed ?? 1 / 3\n }\n\n // Create shimmer info with initial animation state:\n // - COLOR_INHERIT means use spinner color dynamically\n // - ColorValue (name or RGB tuple) is an explicit override color\n // - undefined color defaults to COLOR_INHERIT\n // - speed controls steps per frame (lower = slower, e.g., 0.33 = ~150ms per step)\n shimmerInfo = {\n __proto__: null,\n color: shimmerColor === undefined ? COLOR_INHERIT : shimmerColor,\n currentDir: DIR_LTR,\n mode: shimmerDir,\n speed: shimmerSpeed,\n step: 0,\n } as ShimmerInfo\n }\n\n // eslint-disable-next-line constructor-super\n super({\n signal: require('#constants/process').getAbortSignal(),\n ...opts,\n // Pass RGB color directly to yocto-spinner (it now supports RGB).\n color: spinnerColorRgb,\n // onRenderFrame callback provides full control over frame + text layout.\n // Calculates spacing based on frame width to prevent text jumping.\n onRenderFrame: (\n frame: string,\n text: string,\n applyColor: (text: string) => string,\n ) => {\n const width = stringWidth(frame)\n // Narrow frames (width 1) get 2 spaces, wide frames (width 2) get 1 space.\n // Total width is consistent: 3 characters (frame + spacing) before text.\n const spacing = width === 1 ? ' ' : ' '\n return frame ? `${applyColor(frame)}${spacing}${text}` : text\n },\n // onFrameUpdate callback is called by yocto-spinner whenever a frame advances.\n // This ensures shimmer updates are perfectly synchronized with animation beats.\n onFrameUpdate: shimmerInfo\n ? () => {\n // Update parent's text without triggering render.\n // Parent's #skipRender flag prevents nested render calls.\n // Only update if we have base text to avoid blank frames.\n if (this.#baseText) {\n super.text = this.#buildDisplayText()\n }\n }\n : undefined,\n })\n\n this.#shimmer = shimmerInfo\n this.#shimmerSavedConfig = shimmerInfo\n }\n\n // Override color getter to ensure it's always RGB.\n get color(): ColorRgb {\n const value = super.color\n return isRgbTuple(value) ? value : toRgb(value)\n }\n\n // Override color setter to always convert to RGB before passing to yocto-spinner.\n set color(value: ColorValue | ColorRgb) {\n super.color = isRgbTuple(value) ? value : toRgb(value)\n }\n\n /**\n * Apply a yocto-spinner method and update logger state.\n * Handles text normalization, extra arguments, and logger tracking.\n * @private\n */\n #apply(methodName: string, args: unknown[]) {\n let extras: unknown[]\n let text = args.at(0)\n if (typeof text === 'string') {\n extras = args.slice(1)\n } else {\n extras = args\n text = ''\n }\n const wasSpinning = this.isSpinning\n const normalized = normalizeText(text)\n super[methodName](normalized)\n const {\n incLogCallCountSymbol,\n lastWasBlankSymbol,\n logger,\n } = /*@__PURE__*/ require('./logger.js')\n if (methodName === 'stop') {\n if (wasSpinning && normalized) {\n logger[lastWasBlankSymbol](isBlankString(normalized))\n logger[incLogCallCountSymbol]()\n }\n } else {\n logger[lastWasBlankSymbol](false)\n logger[incLogCallCountSymbol]()\n }\n if (extras.length) {\n logger.log(...extras)\n logger[lastWasBlankSymbol](false)\n }\n return this\n }\n\n /**\n * Build the complete display text with progress, shimmer, and indentation.\n * Combines base text, progress bar, shimmer effects, and indentation.\n * @private\n */\n #buildDisplayText() {\n let displayText = this.#baseText\n\n if (this.#progress) {\n const progressText = formatProgress(this.#progress)\n displayText = displayText\n ? `${displayText} ${progressText}`\n : progressText\n }\n\n // Apply shimmer effect if enabled.\n if (displayText && this.#shimmer) {\n // If shimmer color is 'inherit', use current spinner color (getter ensures RGB).\n // Otherwise, check if it's a gradient (array of arrays) or single color.\n let shimmerColor: ColorRgb | ShimmerColorGradient\n if (this.#shimmer.color === COLOR_INHERIT) {\n shimmerColor = this.color\n } else if (Array.isArray(this.#shimmer.color[0])) {\n // It's a gradient - use as is.\n shimmerColor = this.#shimmer.color as ShimmerColorGradient\n } else {\n // It's a single color - convert to RGB.\n shimmerColor = toRgb(this.#shimmer.color as ColorValue)\n }\n\n displayText = applyShimmer(displayText, this.#shimmer, {\n color: shimmerColor,\n direction: this.#shimmer.mode,\n })\n }\n\n // Apply indentation\n if (this.#indentation && displayText) {\n displayText = this.#indentation + displayText\n }\n\n return displayText\n }\n\n /**\n * Show a status message without stopping the spinner.\n * Outputs the symbol and message to stderr, then continues spinning.\n */\n #showStatusAndKeepSpinning(symbolType: SymbolType, args: unknown[]) {\n let text = args.at(0)\n let extras: unknown[]\n if (typeof text === 'string') {\n extras = args.slice(1)\n } else {\n extras = args\n text = ''\n }\n\n const { LOG_SYMBOLS, logger } = /*@__PURE__*/ require('./logger.js')\n // Note: Status messages always go to stderr.\n logger.error(`${LOG_SYMBOLS[symbolType]} ${text}`, ...extras)\n return this\n }\n\n /**\n * Update the spinner's displayed text.\n * Rebuilds display text and triggers render.\n * @private\n */\n #updateSpinnerText() {\n // Call the parent class's text setter, which triggers render.\n super.text = this.#buildDisplayText()\n }\n\n /**\n * Show a debug message without stopping the spinner (only if debug mode enabled).\n * Outputs to stderr and continues spinning.\n */\n debug(...args: unknown[]) {\n const { isDebug } = /*@__PURE__*/ require('./debug.js')\n if (isDebug()) {\n return this.#showStatusAndKeepSpinning('info', args)\n }\n return this\n }\n\n /**\n * Show a debug message and stop the spinner (only if debug mode enabled).\n * Auto-clears the spinner line before displaying the message.\n */\n debugAndStop(...args: unknown[]) {\n const { isDebug } = /*@__PURE__*/ require('./debug.js')\n if (isDebug()) {\n return this.#apply('info', args)\n }\n return this\n }\n\n /**\n * Decrease indentation level.\n * Pass 0 to reset indentation to zero.\n * @param spaces - Number of spaces to remove (default: 2)\n */\n dedent(spaces?: number) {\n // Pass 0 to reset indentation\n if (spaces === 0) {\n this.#indentation = ''\n } else {\n const amount = spaces ?? 2\n const newLength = Math.max(0, this.#indentation.length - amount)\n this.#indentation = this.#indentation.slice(0, newLength)\n }\n this.#updateSpinnerText()\n return this\n }\n\n /**\n * Alias for success() (shorter name).\n * DESIGN DECISION: Unlike yocto-spinner, our done() does NOT stop the spinner.\n * Use doneAndStop() if you want to stop the spinner.\n */\n done(...args: unknown[]) {\n return this.#showStatusAndKeepSpinning('success', args)\n }\n\n /**\n * Show a done message and stop the spinner.\n * Auto-clears the spinner line before displaying the success message.\n */\n doneAndStop(...args: unknown[]) {\n return this.#apply('success', args)\n }\n\n /**\n * Show a failure message without stopping the spinner.\n * DESIGN DECISION: Unlike yocto-spinner, our fail() does NOT stop the spinner.\n * This allows displaying errors while continuing to spin.\n * Use failAndStop() if you want to stop the spinner.\n */\n fail(...args: unknown[]) {\n return this.#showStatusAndKeepSpinning('fail', args)\n }\n\n /**\n * Show a failure message and stop the spinner.\n * Auto-clears the spinner line before displaying the error message.\n */\n failAndStop(...args: unknown[]) {\n return this.#apply('error', args)\n }\n\n /**\n * Increase indentation level.\n * Pass 0 to reset indentation to zero.\n * @param spaces - Number of spaces to add (default: 2)\n */\n indent(spaces?: number) {\n // Pass 0 to reset indentation\n if (spaces === 0) {\n this.#indentation = ''\n } else {\n const amount = spaces ?? 2\n this.#indentation += ' '.repeat(amount)\n }\n this.#updateSpinnerText()\n return this\n }\n\n /**\n * Show an info message without stopping the spinner.\n * Outputs to stderr and continues spinning.\n */\n info(...args: unknown[]) {\n return this.#showStatusAndKeepSpinning('info', args)\n }\n\n /**\n * Show an info message and stop the spinner.\n * Auto-clears the spinner line before displaying the message.\n */\n infoAndStop(...args: unknown[]) {\n return this.#apply('info', args)\n }\n\n /**\n * Log a message to stdout without stopping the spinner.\n * Unlike other methods, this outputs to stdout for data logging.\n */\n log(...args: unknown[]) {\n const { logger } = /*@__PURE__*/ require('./logger.js')\n logger.log(...args)\n return this\n }\n\n /**\n * Log a message and stop the spinner.\n * Auto-clears the spinner line before displaying the message.\n */\n logAndStop(...args: unknown[]) {\n return this.#apply('stop', args)\n }\n\n /**\n * Update progress information displayed with the spinner.\n * Shows a progress bar with percentage and optional unit label.\n * @param current - Current progress value\n * @param total - Total progress value\n * @param unit - Optional unit label (e.g., 'files', 'items')\n */\n progress = (\n current: number,\n total: number,\n unit?: string | undefined,\n ) => {\n this.#progress = {\n __proto__: null,\n current,\n total,\n ...(unit ? { unit } : {}),\n } as ProgressInfo\n this.#updateSpinnerText()\n return this\n }\n\n /**\n * Increment progress by a specified amount.\n * Updates the progress bar displayed with the spinner.\n * @param amount - Amount to increment (default: 1)\n */\n progressStep(amount: number = 1) {\n if (this.#progress) {\n const newCurrent = this.#progress.current + amount\n this.#progress = {\n __proto__: null,\n current: Math.max(0, Math.min(newCurrent, this.#progress.total)),\n total: this.#progress.total,\n ...(this.#progress.unit ? { unit: this.#progress.unit } : {}),\n } as ProgressInfo\n this.#updateSpinnerText()\n }\n return this\n }\n\n /**\n * Start the spinner animation with optional text.\n * Begins displaying the animated spinner.\n * @param text - Optional text to display with the spinner\n */\n start(...args: unknown[]) {\n if (args.length) {\n const text = args.at(0)\n const normalized = normalizeText(text)\n // We clear this.text on start when `text` is falsy because yocto-spinner\n // will not clear it otherwise.\n if (!normalized) {\n this.#baseText = ''\n super.text = ''\n } else {\n this.#baseText = normalized\n }\n }\n\n this.#updateSpinnerText()\n return this.#apply('start', args)\n }\n\n /**\n * Log a main step message to stderr without stopping the spinner.\n * Adds a blank line before the message for visual separation.\n * Aligns with logger.step() to use stderr for status messages.\n */\n step(...args: unknown[]) {\n const text = args[0]\n const { logger } = /*@__PURE__*/ require('./logger.js')\n if (typeof text === 'string') {\n // Add blank line before step for visual separation.\n logger.error('')\n // Use error (stderr) to align with logger.step() default stream.\n logger.error(text, ...args.slice(1))\n }\n return this\n }\n\n /**\n * Log an indented substep message to stderr without stopping the spinner.\n * Adds 2-space indentation to the message.\n * Aligns with logger.substep() to use stderr for status messages.\n */\n substep(...args: unknown[]) {\n const text = args[0]\n if (typeof text === 'string') {\n // Add 2-space indent for substep.\n const { logger } = /*@__PURE__*/ require('./logger.js')\n // Use error (stderr) to align with logger.substep() default stream.\n logger.error(` ${text}`, ...args.slice(1))\n }\n return this\n }\n\n /**\n * Stop the spinner animation and clear internal state.\n * Auto-clears the spinner line via yocto-spinner.stop().\n * Resets progress, shimmer, and text state.\n * @param text - Optional final text to display after stopping\n */\n stop(...args: unknown[]) {\n // Clear internal state.\n this.#baseText = ''\n this.#progress = undefined\n // Reset shimmer animation state if shimmer is enabled.\n if (this.#shimmer) {\n this.#shimmer.currentDir = DIR_LTR\n this.#shimmer.step = 0\n }\n // Call parent stop first (clears screen, sets isSpinning = false).\n const result = this.#apply('stop', args)\n // Then clear text to avoid blank frame render.\n // This is safe now because isSpinning is false.\n super.text = ''\n return result\n }\n\n /**\n * Show a success message without stopping the spinner.\n * DESIGN DECISION: Unlike yocto-spinner, our success() does NOT stop the spinner.\n * This allows displaying success messages while continuing to spin for multi-step operations.\n * Use successAndStop() if you want to stop the spinner.\n */\n success(...args: unknown[]) {\n return this.#showStatusAndKeepSpinning('success', args)\n }\n\n /**\n * Show a success message and stop the spinner.\n * Auto-clears the spinner line before displaying the success message.\n */\n successAndStop(...args: unknown[]) {\n return this.#apply('success', args)\n }\n\n /**\n * Get or set the spinner text.\n * When called with no arguments, returns the current text.\n * When called with text, updates the display and returns the spinner.\n * @param value - Text to display (omit to get current text)\n * @returns Current text (getter) or this spinner (setter)\n */\n text(): string\n text(value: string): Spinner\n text(value?: string): string | Spinner {\n // biome-ignore lint/complexity/noArguments: Function overload for getter/setter pattern.\n if (arguments.length === 0) {\n // Getter: return current base text\n return this.#baseText\n }\n // Setter: update base text and refresh display\n this.#baseText = value ?? ''\n this.#updateSpinnerText()\n return this as unknown as Spinner\n }\n\n /**\n * Show a warning message without stopping the spinner.\n * Outputs to stderr and continues spinning.\n */\n warn(...args: unknown[]) {\n return this.#showStatusAndKeepSpinning('warn', args)\n }\n\n /**\n * Show a warning message and stop the spinner.\n * Auto-clears the spinner line before displaying the warning message.\n */\n warnAndStop(...args: unknown[]) {\n return this.#apply('warning', args)\n }\n\n /**\n * Toggle shimmer effect or update shimmer configuration.\n * Preserves shimmer config when toggling off, allowing easy re-enable.\n * Supports partial config updates to tweak specific properties.\n *\n * @param enabledOrConfig - Boolean to toggle, partial config to update, or direction string\n * @returns This spinner for chaining\n *\n * @example\n * // Toggle off (preserves config for later re-enable)\n * spinner.shimmer(false)\n *\n * // Toggle on (restores saved config or uses defaults)\n * spinner.shimmer(true)\n *\n * // Update specific properties\n * spinner.shimmer({ speed: 0.5 })\n * spinner.shimmer({ color: [255, 0, 0] })\n *\n * // Set direction\n * spinner.shimmer('rtl')\n */\n shimmer(\n enabledOrConfig:\n | boolean\n | Partial<ShimmerConfig>\n | ShimmerDirection\n | undefined,\n ): Spinner {\n if (enabledOrConfig === false) {\n // Disable shimmer but preserve config.\n this.#shimmer = undefined\n } else if (enabledOrConfig === true) {\n // Re-enable with saved config or defaults.\n if (this.#shimmerSavedConfig) {\n // Restore saved config.\n this.#shimmer = { ...this.#shimmerSavedConfig }\n } else {\n // Create default config.\n this.#shimmer = {\n color: COLOR_INHERIT,\n currentDir: DIR_LTR,\n mode: DIR_LTR,\n speed: 1 / 3,\n step: 0,\n } as ShimmerInfo\n this.#shimmerSavedConfig = this.#shimmer\n }\n } else if (typeof enabledOrConfig === 'string') {\n // Direction string - update existing or create new.\n if (this.#shimmer) {\n // Update existing shimmer direction.\n this.#shimmer = {\n ...this.#shimmer,\n mode: enabledOrConfig,\n }\n this.#shimmerSavedConfig = this.#shimmer\n } else if (this.#shimmerSavedConfig) {\n // Restore and update.\n this.#shimmer = {\n ...this.#shimmerSavedConfig,\n mode: enabledOrConfig,\n }\n this.#shimmerSavedConfig = this.#shimmer\n } else {\n // Create new with direction.\n this.#shimmer = {\n color: COLOR_INHERIT,\n currentDir: DIR_LTR,\n mode: enabledOrConfig,\n speed: 1 / 3,\n step: 0,\n } as ShimmerInfo\n this.#shimmerSavedConfig = this.#shimmer\n }\n } else if (enabledOrConfig && typeof enabledOrConfig === 'object') {\n // Partial config update - merge with existing or saved config.\n const partialConfig = {\n __proto__: null,\n ...enabledOrConfig,\n } as Partial<ShimmerConfig>\n\n if (this.#shimmer) {\n // Update existing shimmer.\n this.#shimmer = {\n ...this.#shimmer,\n ...(partialConfig.color !== undefined\n ? { color: partialConfig.color }\n : {}),\n ...(partialConfig.dir !== undefined\n ? { mode: partialConfig.dir }\n : {}),\n ...(partialConfig.speed !== undefined\n ? { speed: partialConfig.speed }\n : {}),\n } as ShimmerInfo\n this.#shimmerSavedConfig = this.#shimmer\n } else if (this.#shimmerSavedConfig) {\n // Restore and update.\n this.#shimmer = {\n ...this.#shimmerSavedConfig,\n ...(partialConfig.color !== undefined\n ? { color: partialConfig.color }\n : {}),\n ...(partialConfig.dir !== undefined\n ? { mode: partialConfig.dir }\n : {}),\n ...(partialConfig.speed !== undefined\n ? { speed: partialConfig.speed }\n : {}),\n } as ShimmerInfo\n this.#shimmerSavedConfig = this.#shimmer\n } else {\n // Create new with partial config.\n this.#shimmer = {\n color: partialConfig.color ?? COLOR_INHERIT,\n currentDir: DIR_LTR,\n mode: partialConfig.dir ?? DIR_LTR,\n speed: partialConfig.speed ?? 1 / 3,\n step: 0,\n } as ShimmerInfo\n this.#shimmerSavedConfig = this.#shimmer\n }\n }\n\n this.#updateSpinnerText()\n return this as unknown as Spinner\n }\n } as unknown as {\n new (options?: SpinnerOptions | undefined): Spinner\n }\n // Add aliases.\n Object.defineProperties(_Spinner.prototype, {\n error: desc(_Spinner.prototype.fail),\n errorAndStop: desc(_Spinner.prototype.failAndStop),\n warning: desc(_Spinner.prototype.warn),\n warningAndStop: desc(_Spinner.prototype.warnAndStop),\n })\n _defaultSpinner = CI\n ? ciSpinner\n : (getCliSpinners('socket') as SpinnerStyle)\n }\n return new _Spinner({\n spinner: _defaultSpinner,\n ...options,\n })\n}\n\nlet _spinner: ReturnType<typeof Spinner> | undefined\n/**\n * Get the default spinner instance.\n * Lazily creates the spinner to avoid circular dependencies during module initialization.\n */\nexport function getDefaultSpinner(): ReturnType<typeof Spinner> {\n if (_spinner === undefined) {\n _spinner = Spinner()\n }\n return _spinner\n}\n\n/**\n * @deprecated Use `getDefaultSpinner()` function instead for better tree-shaking and to avoid circular dependencies.\n */\nexport const spinner = /* @__PURE__ */ (() => {\n // Lazy initialization to prevent circular dependency issues during module loading.\n let _lazySpinner: ReturnType<typeof Spinner> | undefined\n return new Proxy({} as ReturnType<typeof Spinner>, {\n get(_target, prop) {\n if (_lazySpinner === undefined) {\n _lazySpinner = Spinner()\n }\n const value = _lazySpinner[prop as keyof ReturnType<typeof Spinner>]\n return typeof value === 'function' ? value.bind(_lazySpinner) : value\n },\n })\n})()\n\nexport type WithSpinnerOptions<T> = {\n message: string\n operation: () => Promise<T>\n spinner?: Spinner | undefined\n}\n\n/**\n * Execute an async operation with spinner lifecycle management.\n * Ensures spinner.stop() is always called via try/finally, even if the operation throws.\n *\n * @param options - Configuration object\n * @param options.message - Message to display while spinner is running\n * @param options.operation - Async function to execute\n * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)\n * @returns Result of the operation\n * @throws Re-throws any error from operation after stopping spinner\n *\n * @example\n * import { spinner, withSpinner } from '@socketsecurity/registry/lib/spinner'\n *\n * // With spinner instance\n * await withSpinner({\n * message: 'Processing\u2026',\n * operation: async () => {\n * return await processData()\n * },\n * spinner\n * })\n *\n * // Without spinner instance (no-op)\n * await withSpinner({\n * message: 'Processing\u2026',\n * operation: async () => {\n * return await processData()\n * }\n * })\n */\nexport async function withSpinner<T>(\n options: WithSpinnerOptions<T>,\n): Promise<T> {\n const { message, operation, spinner } = {\n __proto__: null,\n ...options,\n } as WithSpinnerOptions<T>\n\n if (!spinner) {\n return await operation()\n }\n\n spinner.start(message)\n try {\n return await operation()\n } finally {\n spinner.stop()\n }\n}\n\nexport type WithSpinnerRestoreOptions<T> = {\n operation: () => Promise<T>\n spinner?: Spinner | undefined\n wasSpinning: boolean\n}\n\n/**\n * Execute an async operation with conditional spinner restart.\n * Useful when you need to temporarily stop a spinner for an operation,\n * then restore it to its previous state.\n *\n * @param options - Configuration object\n * @param options.operation - Async function to execute\n * @param options.spinner - Optional spinner instance to manage\n * @param options.wasSpinning - Whether spinner was spinning before\n * @returns Result of the operation\n * @throws Re-throws any error from operation after restoring spinner state\n *\n * @example\n * import { spinner, withSpinnerRestore } from '@socketsecurity/registry/lib/spinner'\n *\n * const wasSpinning = spinner.isSpinning\n * spinner.stop()\n *\n * const result = await withSpinnerRestore({\n * operation: async () => {\n * // Do work without spinner\n * return await someOperation()\n * },\n * spinner,\n * wasSpinning\n * })\n */\nexport async function withSpinnerRestore<T>(\n options: WithSpinnerRestoreOptions<T>,\n): Promise<T> {\n const { operation, spinner, wasSpinning } = {\n __proto__: null,\n ...options,\n } as WithSpinnerRestoreOptions<T>\n\n try {\n return await operation()\n } finally {\n if (spinner && wasSpinning) {\n spinner.start()\n }\n }\n}\n\nexport type WithSpinnerSyncOptions<T> = {\n message: string\n operation: () => T\n spinner?: Spinner | undefined\n}\n\n/**\n * Execute a synchronous operation with spinner lifecycle management.\n * Ensures spinner.stop() is always called via try/finally, even if the operation throws.\n *\n * @param options - Configuration object\n * @param options.message - Message to display while spinner is running\n * @param options.operation - Function to execute\n * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)\n * @returns Result of the operation\n * @throws Re-throws any error from operation after stopping spinner\n *\n * @example\n * import { spinner, withSpinnerSync} from '@socketsecurity/registry/lib/spinner'\n *\n * const result = withSpinnerSync({\n * message: 'Processing\u2026',\n * operation: () => {\n * return processDataSync()\n * },\n * spinner\n * })\n */\nexport function withSpinnerSync<T>(options: WithSpinnerSyncOptions<T>): T {\n const { message, operation, spinner } = {\n __proto__: null,\n ...options,\n } as WithSpinnerSyncOptions<T>\n\n if (!spinner) {\n return operation()\n }\n\n spinner.start(message)\n try {\n return operation()\n } finally {\n spinner.stop()\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,gBAAmB;AACnB,0BAA4C;AAO5C,0BAAqD;AACrD,2BAAyB;AACzB,qBAAuB;AACvB,qBAA2C;AA6B3C,MAAM,aAA0C;AAAA,EAC9C,WAAW;AAAA,EACX,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf,MAAM,CAAC,GAAG,GAAG,GAAG;AAAA,EAChB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,EAC1B,MAAM,CAAC,GAAG,KAAK,GAAG;AAAA,EAClB,YAAY,CAAC,GAAG,KAAK,GAAG;AAAA,EACxB,MAAM,CAAC,KAAK,KAAK,GAAG;AAAA,EACpB,OAAO,CAAC,GAAG,KAAK,CAAC;AAAA,EACjB,aAAa,CAAC,GAAG,KAAK,CAAC;AAAA,EACvB,SAAS,CAAC,KAAK,GAAG,GAAG;AAAA,EACrB,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,EAC7B,KAAK,CAAC,KAAK,GAAG,CAAC;AAAA,EACf,WAAW,CAAC,KAAK,IAAI,CAAC;AAAA,EACtB,OAAO,CAAC,KAAK,KAAK,GAAG;AAAA,EACrB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,EAC3B,QAAQ,CAAC,KAAK,KAAK,CAAC;AAAA,EACpB,cAAc,CAAC,KAAK,KAAK,GAAG;AAC9B;AAKA,SAAS,WAAW,OAAsC;AACxD,SAAO,MAAM,QAAQ,KAAK;AAC5B;AAKA,SAAS,MAAM,OAA6B;AAC1C,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO,WAAW,KAAK;AACzB;AA2EO,MAAM,YAA0B;AAAA,EACrC,QAAQ,CAAC,EAAE;AAAA,EACX,UAAU;AACZ;AAEA,SAAS,KAAK,OAAgB;AAC5B,SAAO;AAAA,IACL,WAAW;AAAA,IACX,cAAc;AAAA,IACd;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEA,SAAS,cAAc,OAAgB;AACrC,SAAO,OAAO,UAAU,WAAW,MAAM,UAAU,IAAI;AACzD;AAEA,SAAS,eAAe,UAAgC;AACtD,QAAM,EAAE,SAAS,OAAO,KAAK,IAAI;AACjC,QAAM,aAAa,KAAK,MAAO,UAAU,QAAS,GAAG;AACrD,QAAM,MAAM,kBAAkB,UAAU;AACxC,QAAM,QAAQ,OAAO,GAAG,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,OAAO,IAAI,KAAK;AACxE,SAAO,GAAG,GAAG,IAAI,UAAU,MAAM,KAAK;AACxC;AAEA,SAAS,kBAAkB,YAAoB,QAAgB,IAAY;AACzE,QAAM,SAAS,KAAK,MAAO,aAAa,MAAO,KAAK;AACpD,QAAM,QAAQ,QAAQ;AACtB,QAAM,MAAM,SAAI,OAAO,MAAM,IAAI,SAAI,OAAO,KAAK;AAEjD,QAAM,SAAuB,QAAQ,6BAA6B;AAClE,SAAO,OAAO,KAAK,GAAG;AACxB;AAEA,IAAI;AAAA;AAYG,SAAS,eACd,WACyD;AACzD,MAAI,iBAAiB,QAAW;AAE9B,UAAM,YAAY,qBAAAA;AAElB,UAAM,eAAe,UAAU,CAAC,CAAC;AAEjC,UAAM,oBAAoB,aAAa;AAEvC,mBAAe;AAAA,MACb,WAAW;AAAA,MACX,GAAG,kBAAkB;AAAA,MACrB,YAAQ,iDAA4B;AAAA,IACtC;AAAA,EACF;AACA,MAAI,OAAO,cAAc,YAAY,cAAc;AACjD,eAAO,uBAAO,cAAc,SAAS,IAAI,aAAa,SAAS,IAAI;AAAA,EACrE;AACA,SAAO;AACT;AAEA,IAAI;AAGJ,IAAI;AAAA;AAuBG,SAAS,QAAQ,SAA+C;AACrE,MAAI,aAAa,QAAW;AAE1B,UAAM,YAAY,qBAAAA;AAElB,UAAM,eAAe,UAAU,CAAC,CAAC;AACjC,UAAM,oBAAoB,aAAa;AAIvC,eAAW,MAAM,qBAAsB,kBAA0B;AAAA,MAE/D,YAAoB;AAAA,MACpB,eAAuB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAYC,UAAsC;AAChD,cAAM,OAAO,EAAE,WAAW,MAAM,GAAGA,SAAQ;AAG3C,cAAM,eAAe,KAAK,SAAU,CAAC,KAAK,IAAI,GAAG;AAGjD,YACE,WAAW,YAAY,MACtB,aAAa,WAAW,KACvB,CAAC,aAAa;AAAA,UACZ,OAAK,OAAO,MAAM,YAAY,KAAK,KAAK,KAAK;AAAA,QAC/C,IACF;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,cAAM,kBAAkB,MAAM,YAAY;AAG1C,YAAI;AACJ,YAAI,KAAK,SAAS;AAChB,cAAI;AACJ,cAAI;AAMJ,cAAI,eAAuB,IAAI;AAE/B,cAAI,OAAO,KAAK,YAAY,UAAU;AACpC,yBAAa,KAAK;AAAA,UACpB,OAAO;AACL,kBAAM,gBAAgB;AAAA,cACpB,WAAW;AAAA,cACX,GAAG,KAAK;AAAA,YACV;AACA,yBAAa,cAAc,OAAO;AAClC,2BAAe,cAAc,SAAS;AACtC,2BAAe,cAAc,SAAS,IAAI;AAAA,UAC5C;AAOA,wBAAc;AAAA,YACZ,WAAW;AAAA,YACX,OAAO,iBAAiB,SAAY,oCAAgB;AAAA,YACpD,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,UACR;AAAA,QACF;AAGA,cAAM;AAAA,UACJ,QAAQ,QAAQ,oBAAoB,EAAE,eAAe;AAAA,UACrD,GAAG;AAAA;AAAA,UAEH,OAAO;AAAA;AAAA;AAAA,UAGP,eAAe,CACb,OACA,MACA,eACG;AACH,kBAAM,YAAQ,4BAAY,KAAK;AAG/B,kBAAM,UAAU,UAAU,IAAI,OAAO;AACrC,mBAAO,QAAQ,GAAG,WAAW,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,KAAK;AAAA,UAC3D;AAAA;AAAA;AAAA,UAGA,eAAe,cACX,MAAM;AAIJ,gBAAI,KAAK,WAAW;AAClB,oBAAM,OAAO,KAAK,kBAAkB;AAAA,YACtC;AAAA,UACF,IACA;AAAA,QACN,CAAC;AAED,aAAK,WAAW;AAChB,aAAK,sBAAsB;AAAA,MAC7B;AAAA;AAAA,MAGA,IAAI,QAAkB;AACpB,cAAM,QAAQ,MAAM;AACpB,eAAO,WAAW,KAAK,IAAI,QAAQ,MAAM,KAAK;AAAA,MAChD;AAAA;AAAA,MAGA,IAAI,MAAM,OAA8B;AACtC,cAAM,QAAQ,WAAW,KAAK,IAAI,QAAQ,MAAM,KAAK;AAAA,MACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO,YAAoB,MAAiB;AAC1C,YAAI;AACJ,YAAI,OAAO,KAAK,GAAG,CAAC;AACpB,YAAI,OAAO,SAAS,UAAU;AAC5B,mBAAS,KAAK,MAAM,CAAC;AAAA,QACvB,OAAO;AACL,mBAAS;AACT,iBAAO;AAAA,QACT;AACA,cAAM,cAAc,KAAK;AACzB,cAAM,aAAa,cAAc,IAAI;AACrC,cAAM,UAAU,EAAE,UAAU;AAC5B,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,QACF,IAAkB,QAAQ,aAAa;AACvC,YAAI,eAAe,QAAQ;AACzB,cAAI,eAAe,YAAY;AAC7B,mBAAO,kBAAkB,MAAE,8BAAc,UAAU,CAAC;AACpD,mBAAO,qBAAqB,EAAE;AAAA,UAChC;AAAA,QACF,OAAO;AACL,iBAAO,kBAAkB,EAAE,KAAK;AAChC,iBAAO,qBAAqB,EAAE;AAAA,QAChC;AACA,YAAI,OAAO,QAAQ;AACjB,iBAAO,IAAI,GAAG,MAAM;AACpB,iBAAO,kBAAkB,EAAE,KAAK;AAAA,QAClC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,oBAAoB;AAClB,YAAI,cAAc,KAAK;AAEvB,YAAI,KAAK,WAAW;AAClB,gBAAM,eAAe,eAAe,KAAK,SAAS;AAClD,wBAAc,cACV,GAAG,WAAW,IAAI,YAAY,KAC9B;AAAA,QACN;AAGA,YAAI,eAAe,KAAK,UAAU;AAGhC,cAAI;AACJ,cAAI,KAAK,SAAS,UAAU,mCAAe;AACzC,2BAAe,KAAK;AAAA,UACtB,WAAW,MAAM,QAAQ,KAAK,SAAS,MAAM,CAAC,CAAC,GAAG;AAEhD,2BAAe,KAAK,SAAS;AAAA,UAC/B,OAAO;AAEL,2BAAe,MAAM,KAAK,SAAS,KAAmB;AAAA,UACxD;AAEA,4BAAc,kCAAa,aAAa,KAAK,UAAU;AAAA,YACrD,OAAO;AAAA,YACP,WAAW,KAAK,SAAS;AAAA,UAC3B,CAAC;AAAA,QACH;AAGA,YAAI,KAAK,gBAAgB,aAAa;AACpC,wBAAc,KAAK,eAAe;AAAA,QACpC;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,2BAA2B,YAAwB,MAAiB;AAClE,YAAI,OAAO,KAAK,GAAG,CAAC;AACpB,YAAI;AACJ,YAAI,OAAO,SAAS,UAAU;AAC5B,mBAAS,KAAK,MAAM,CAAC;AAAA,QACvB,OAAO;AACL,mBAAS;AACT,iBAAO;AAAA,QACT;AAEA,cAAM,EAAE,aAAa,OAAO,IAAkB,QAAQ,aAAa;AAEnE,eAAO,MAAM,GAAG,YAAY,UAAU,CAAC,IAAI,IAAI,IAAI,GAAG,MAAM;AAC5D,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,qBAAqB;AAEnB,cAAM,OAAO,KAAK,kBAAkB;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAS,MAAiB;AACxB,cAAM,EAAE,QAAQ,IAAkB,QAAQ,YAAY;AACtD,YAAI,QAAQ,GAAG;AACb,iBAAO,KAAK,2BAA2B,QAAQ,IAAI;AAAA,QACrD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,gBAAgB,MAAiB;AAC/B,cAAM,EAAE,QAAQ,IAAkB,QAAQ,YAAY;AACtD,YAAI,QAAQ,GAAG;AACb,iBAAO,KAAK,OAAO,QAAQ,IAAI;AAAA,QACjC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO,QAAiB;AAEtB,YAAI,WAAW,GAAG;AAChB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,gBAAM,SAAS,UAAU;AACzB,gBAAM,YAAY,KAAK,IAAI,GAAG,KAAK,aAAa,SAAS,MAAM;AAC/D,eAAK,eAAe,KAAK,aAAa,MAAM,GAAG,SAAS;AAAA,QAC1D;AACA,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,QAAQ,MAAiB;AACvB,eAAO,KAAK,2BAA2B,WAAW,IAAI;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,eAAe,MAAiB;AAC9B,eAAO,KAAK,OAAO,WAAW,IAAI;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,MAAiB;AACvB,eAAO,KAAK,2BAA2B,QAAQ,IAAI;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,eAAe,MAAiB;AAC9B,eAAO,KAAK,OAAO,SAAS,IAAI;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO,QAAiB;AAEtB,YAAI,WAAW,GAAG;AAChB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,gBAAM,SAAS,UAAU;AACzB,eAAK,gBAAgB,IAAI,OAAO,MAAM;AAAA,QACxC;AACA,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,MAAiB;AACvB,eAAO,KAAK,2BAA2B,QAAQ,IAAI;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,eAAe,MAAiB;AAC9B,eAAO,KAAK,OAAO,QAAQ,IAAI;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,MAAiB;AACtB,cAAM,EAAE,OAAO,IAAkB,QAAQ,aAAa;AACtD,eAAO,IAAI,GAAG,IAAI;AAClB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,cAAc,MAAiB;AAC7B,eAAO,KAAK,OAAO,QAAQ,IAAI;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,WAAW,CACT,SACA,OACA,SACG;AACH,aAAK,YAAY;AAAA,UACf,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,QACzB;AACA,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,aAAa,SAAiB,GAAG;AAC/B,YAAI,KAAK,WAAW;AAClB,gBAAM,aAAa,KAAK,UAAU,UAAU;AAC5C,eAAK,YAAY;AAAA,YACf,WAAW;AAAA,YACX,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,YAC/D,OAAO,KAAK,UAAU;AAAA,YACtB,GAAI,KAAK,UAAU,OAAO,EAAE,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,UAC7D;AACA,eAAK,mBAAmB;AAAA,QAC1B;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,SAAS,MAAiB;AACxB,YAAI,KAAK,QAAQ;AACf,gBAAM,OAAO,KAAK,GAAG,CAAC;AACtB,gBAAM,aAAa,cAAc,IAAI;AAGrC,cAAI,CAAC,YAAY;AACf,iBAAK,YAAY;AACjB,kBAAM,OAAO;AAAA,UACf,OAAO;AACL,iBAAK,YAAY;AAAA,UACnB;AAAA,QACF;AAEA,aAAK,mBAAmB;AACxB,eAAO,KAAK,OAAO,SAAS,IAAI;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,QAAQ,MAAiB;AACvB,cAAM,OAAO,KAAK,CAAC;AACnB,cAAM,EAAE,OAAO,IAAkB,QAAQ,aAAa;AACtD,YAAI,OAAO,SAAS,UAAU;AAE5B,iBAAO,MAAM,EAAE;AAEf,iBAAO,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,WAAW,MAAiB;AAC1B,cAAM,OAAO,KAAK,CAAC;AACnB,YAAI,OAAO,SAAS,UAAU;AAE5B,gBAAM,EAAE,OAAO,IAAkB,QAAQ,aAAa;AAEtD,iBAAO,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,QAC5C;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,MAAiB;AAEvB,aAAK,YAAY;AACjB,aAAK,YAAY;AAEjB,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAC3B,eAAK,SAAS,OAAO;AAAA,QACvB;AAEA,cAAM,SAAS,KAAK,OAAO,QAAQ,IAAI;AAGvC,cAAM,OAAO;AACb,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,MAAiB;AAC1B,eAAO,KAAK,2BAA2B,WAAW,IAAI;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBAAkB,MAAiB;AACjC,eAAO,KAAK,OAAO,WAAW,IAAI;AAAA,MACpC;AAAA,MAWA,KAAK,OAAkC;AAErC,YAAI,UAAU,WAAW,GAAG;AAE1B,iBAAO,KAAK;AAAA,QACd;AAEA,aAAK,YAAY,SAAS;AAC1B,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,MAAiB;AACvB,eAAO,KAAK,2BAA2B,QAAQ,IAAI;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,eAAe,MAAiB;AAC9B,eAAO,KAAK,OAAO,WAAW,IAAI;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBA,QACE,iBAKS;AACT,YAAI,oBAAoB,OAAO;AAE7B,eAAK,WAAW;AAAA,QAClB,WAAW,oBAAoB,MAAM;AAEnC,cAAI,KAAK,qBAAqB;AAE5B,iBAAK,WAAW,EAAE,GAAG,KAAK,oBAAoB;AAAA,UAChD,OAAO;AAEL,iBAAK,WAAW;AAAA,cACd,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,MAAM;AAAA,cACN,OAAO,IAAI;AAAA,cACX,MAAM;AAAA,YACR;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC;AAAA,QACF,WAAW,OAAO,oBAAoB,UAAU;AAE9C,cAAI,KAAK,UAAU;AAEjB,iBAAK,WAAW;AAAA,cACd,GAAG,KAAK;AAAA,cACR,MAAM;AAAA,YACR;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC,WAAW,KAAK,qBAAqB;AAEnC,iBAAK,WAAW;AAAA,cACd,GAAG,KAAK;AAAA,cACR,MAAM;AAAA,YACR;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC,OAAO;AAEL,iBAAK,WAAW;AAAA,cACd,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,MAAM;AAAA,cACN,OAAO,IAAI;AAAA,cACX,MAAM;AAAA,YACR;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC;AAAA,QACF,WAAW,mBAAmB,OAAO,oBAAoB,UAAU;AAEjE,gBAAM,gBAAgB;AAAA,YACpB,WAAW;AAAA,YACX,GAAG;AAAA,UACL;AAEA,cAAI,KAAK,UAAU;AAEjB,iBAAK,WAAW;AAAA,cACd,GAAG,KAAK;AAAA,cACR,GAAI,cAAc,UAAU,SACxB,EAAE,OAAO,cAAc,MAAM,IAC7B,CAAC;AAAA,cACL,GAAI,cAAc,QAAQ,SACtB,EAAE,MAAM,cAAc,IAAI,IAC1B,CAAC;AAAA,cACL,GAAI,cAAc,UAAU,SACxB,EAAE,OAAO,cAAc,MAAM,IAC7B,CAAC;AAAA,YACP;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC,WAAW,KAAK,qBAAqB;AAEnC,iBAAK,WAAW;AAAA,cACd,GAAG,KAAK;AAAA,cACR,GAAI,cAAc,UAAU,SACxB,EAAE,OAAO,cAAc,MAAM,IAC7B,CAAC;AAAA,cACL,GAAI,cAAc,QAAQ,SACtB,EAAE,MAAM,cAAc,IAAI,IAC1B,CAAC;AAAA,cACL,GAAI,cAAc,UAAU,SACxB,EAAE,OAAO,cAAc,MAAM,IAC7B,CAAC;AAAA,YACP;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC,OAAO;AAEL,iBAAK,WAAW;AAAA,cACd,OAAO,cAAc,SAAS;AAAA,cAC9B,YAAY;AAAA,cACZ,MAAM,cAAc,OAAO;AAAA,cAC3B,OAAO,cAAc,SAAS,IAAI;AAAA,cAClC,MAAM;AAAA,YACR;AACA,iBAAK,sBAAsB,KAAK;AAAA,UAClC;AAAA,QACF;AAEA,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA,IACF;AAIA,WAAO,iBAAiB,SAAS,WAAW;AAAA,MAC1C,OAAO,KAAK,SAAS,UAAU,IAAI;AAAA,MACnC,cAAc,KAAK,SAAS,UAAU,WAAW;AAAA,MACjD,SAAS,KAAK,SAAS,UAAU,IAAI;AAAA,MACrC,gBAAgB,KAAK,SAAS,UAAU,WAAW;AAAA,IACrD,CAAC;AACD,sBAAkB,eACd,YACC,+BAAe,QAAQ;AAAA,EAC9B;AACA,SAAO,IAAI,SAAS;AAAA,IAClB,SAAS;AAAA,IACT,GAAG;AAAA,EACL,CAAC;AACH;AAEA,IAAI;AAKG,SAAS,oBAAgD;AAC9D,MAAI,aAAa,QAAW;AAC1B,eAAW,wBAAQ;AAAA,EACrB;AACA,SAAO;AACT;AAKO,MAAM,UAA2B,uBAAM;AAE5C,MAAI;AACJ,SAAO,IAAI,MAAM,CAAC,GAAiC;AAAA,IACjD,IAAI,SAAS,MAAM;AACjB,UAAI,iBAAiB,QAAW;AAC9B,uBAAe,wBAAQ;AAAA,MACzB;AACA,YAAM,QAAQ,aAAa,IAAwC;AACnE,aAAO,OAAO,UAAU,aAAa,MAAM,KAAK,YAAY,IAAI;AAAA,IAClE;AAAA,EACF,CAAC;AACH,GAAG;AAuCH,eAAsB,YACpB,SACY;AACZ,QAAM,EAAE,SAAS,WAAW,SAAAC,SAAQ,IAAI;AAAA,IACtC,WAAW;AAAA,IACX,GAAG;AAAA,EACL;AAEA,MAAI,CAACA,UAAS;AACZ,WAAO,MAAM,UAAU;AAAA,EACzB;AAEA,EAAAA,SAAQ,MAAM,OAAO;AACrB,MAAI;AACF,WAAO,MAAM,UAAU;AAAA,EACzB,UAAE;AACA,IAAAA,SAAQ,KAAK;AAAA,EACf;AACF;AAmCA,eAAsB,mBACpB,SACY;AACZ,QAAM,EAAE,WAAW,SAAAA,UAAS,YAAY,IAAI;AAAA,IAC1C,WAAW;AAAA,IACX,GAAG;AAAA,EACL;AAEA,MAAI;AACF,WAAO,MAAM,UAAU;AAAA,EACzB,UAAE;AACA,QAAIA,YAAW,aAAa;AAC1B,MAAAA,SAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AACF;AA8BO,SAAS,gBAAmB,SAAuC;AACxE,QAAM,EAAE,SAAS,WAAW,SAAAA,SAAQ,IAAI;AAAA,IACtC,WAAW;AAAA,IACX,GAAG;AAAA,EACL;AAEA,MAAI,CAACA,UAAS;AACZ,WAAO,UAAU;AAAA,EACnB;AAEA,EAAAA,SAAQ,MAAM,OAAO;AACrB,MAAI;AACF,WAAO,UAAU;AAAA,EACnB,UAAE;AACA,IAAAA,SAAQ,KAAK;AAAA,EACf;AACF;",
6
+ "names": ["yoctoSpinner", "options", "spinner"]
7
+ }
package/dist/ssri.d.ts ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @fileoverview SSRI (Subresource Integrity) hash format utilities.
3
+ * Provides conversion and validation for SSRI and hex hash formats.
4
+ */
5
+ /**
6
+ * Convert SSRI format hash to hex format.
7
+ *
8
+ * Takes a hash in SSRI format (e.g., "sha256-base64hash") and converts it to
9
+ * standard hex format (e.g., "hexstring").
10
+ *
11
+ * @param ssri - Hash in SSRI format (algorithm-base64)
12
+ * @returns Hex string representation of the hash
13
+ * @throws Error if SSRI format is invalid
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const hex = ssriToHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')
18
+ * // Returns: '76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856'
19
+ * ```
20
+ */
21
+ /*@__NO_SIDE_EFFECTS__*/
22
+ export declare function ssriToHex(ssri: string): string;
23
+ /**
24
+ * Convert hex format hash to SSRI format.
25
+ *
26
+ * Takes a hash in hex format and converts it to SSRI format with the specified
27
+ * algorithm prefix (defaults to sha256).
28
+ *
29
+ * @param hex - Hash in hex format
30
+ * @param algorithm - Hash algorithm (default: 'sha256')
31
+ * @returns SSRI format hash (algorithm-base64)
32
+ * @throws Error if hex format is invalid
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const ssri = hexToSsri('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856')
37
+ * // Returns: 'sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY='
38
+ * ```
39
+ */
40
+ /*@__NO_SIDE_EFFECTS__*/
41
+ export declare function hexToSsri(hex: string, algorithm?: string): string;
42
+ /**
43
+ * Check if a string is valid SSRI format.
44
+ *
45
+ * Validates that a string matches the SSRI format pattern (algorithm-base64).
46
+ * Does not verify that the base64 encoding is valid.
47
+ *
48
+ * @param value - String to validate
49
+ * @returns True if string matches SSRI format
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * isValidSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // true
54
+ * isValidSsri('76682a9f...') // false
55
+ * ```
56
+ */
57
+ /*@__NO_SIDE_EFFECTS__*/
58
+ export declare function isValidSsri(value: string): boolean;
59
+ /**
60
+ * Check if a string is valid hex format.
61
+ *
62
+ * Validates that a string contains only hexadecimal characters (0-9, a-f).
63
+ * Does not verify hash length or algorithm.
64
+ *
65
+ * @param value - String to validate
66
+ * @returns True if string is valid hex format
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * isValidHex('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856') // true
71
+ * isValidHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // false
72
+ * ```
73
+ */
74
+ /*@__NO_SIDE_EFFECTS__*/
75
+ export declare function isValidHex(value: string): boolean;
76
+ /**
77
+ * Parse SSRI format into components.
78
+ *
79
+ * Extracts the algorithm and base64 hash from an SSRI string.
80
+ *
81
+ * @param ssri - Hash in SSRI format
82
+ * @returns Object with algorithm and base64Hash properties
83
+ * @throws Error if SSRI format is invalid
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const { algorithm, base64Hash } = parseSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')
88
+ * // Returns: { algorithm: 'sha256', base64Hash: 'dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=' }
89
+ * ```
90
+ */
91
+ /*@__NO_SIDE_EFFECTS__*/
92
+ export declare function parseSsri(ssri: string): {
93
+ algorithm: string;
94
+ base64Hash: string;
95
+ };
package/dist/ssri.js ADDED
@@ -0,0 +1,73 @@
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 ssri_exports = {};
20
+ __export(ssri_exports, {
21
+ hexToSsri: () => hexToSsri,
22
+ isValidHex: () => isValidHex,
23
+ isValidSsri: () => isValidSsri,
24
+ parseSsri: () => parseSsri,
25
+ ssriToHex: () => ssriToHex
26
+ });
27
+ module.exports = __toCommonJS(ssri_exports);
28
+ // @__NO_SIDE_EFFECTS__
29
+ function ssriToHex(ssri) {
30
+ const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri);
31
+ if (!match || !match[2] || match[2].length < 2) {
32
+ throw new Error(`Invalid SSRI format: ${ssri}`);
33
+ }
34
+ const base64Hash = match[2];
35
+ const buffer = Buffer.from(base64Hash, "base64");
36
+ return buffer.toString("hex");
37
+ }
38
+ // @__NO_SIDE_EFFECTS__
39
+ function hexToSsri(hex, algorithm = "sha256") {
40
+ if (!/^[a-f0-9]+$/i.test(hex)) {
41
+ throw new Error(`Invalid hex format: ${hex}`);
42
+ }
43
+ const buffer = Buffer.from(hex, "hex");
44
+ const base64Hash = buffer.toString("base64");
45
+ return `${algorithm}-${base64Hash}`;
46
+ }
47
+ // @__NO_SIDE_EFFECTS__
48
+ function isValidSsri(value) {
49
+ return /^[a-z0-9]+-[A-Za-z0-9+/]{2,}=*$/i.test(value);
50
+ }
51
+ // @__NO_SIDE_EFFECTS__
52
+ function isValidHex(value) {
53
+ return /^[a-f0-9]+$/i.test(value);
54
+ }
55
+ // @__NO_SIDE_EFFECTS__
56
+ function parseSsri(ssri) {
57
+ const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri);
58
+ if (!match || !match[1] || !match[2] || match[2].length < 2) {
59
+ throw new Error(`Invalid SSRI format: ${ssri}`);
60
+ }
61
+ const algorithm = match[1];
62
+ const base64Hash = match[2];
63
+ return { algorithm, base64Hash };
64
+ }
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ hexToSsri,
68
+ isValidHex,
69
+ isValidSsri,
70
+ parseSsri,
71
+ ssriToHex
72
+ });
73
+ //# sourceMappingURL=ssri.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ssri.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview SSRI (Subresource Integrity) hash format utilities.\n * Provides conversion and validation for SSRI and hex hash formats.\n */\n\n/**\n * Convert SSRI format hash to hex format.\n *\n * Takes a hash in SSRI format (e.g., \"sha256-base64hash\") and converts it to\n * standard hex format (e.g., \"hexstring\").\n *\n * @param ssri - Hash in SSRI format (algorithm-base64)\n * @returns Hex string representation of the hash\n * @throws Error if SSRI format is invalid\n *\n * @example\n * ```typescript\n * const hex = ssriToHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')\n * // Returns: '76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856'\n * ```\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function ssriToHex(ssri: string): string {\n const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri)\n if (!match || !match[2] || match[2].length < 2) {\n throw new Error(`Invalid SSRI format: ${ssri}`)\n }\n const base64Hash = match[2]\n // Convert base64 to hex.\n const buffer = Buffer.from(base64Hash, 'base64')\n return buffer.toString('hex')\n}\n\n/**\n * Convert hex format hash to SSRI format.\n *\n * Takes a hash in hex format and converts it to SSRI format with the specified\n * algorithm prefix (defaults to sha256).\n *\n * @param hex - Hash in hex format\n * @param algorithm - Hash algorithm (default: 'sha256')\n * @returns SSRI format hash (algorithm-base64)\n * @throws Error if hex format is invalid\n *\n * @example\n * ```typescript\n * const ssri = hexToSsri('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856')\n * // Returns: 'sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY='\n * ```\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function hexToSsri(hex: string, algorithm = 'sha256'): string {\n if (!/^[a-f0-9]+$/i.test(hex)) {\n throw new Error(`Invalid hex format: ${hex}`)\n }\n // Convert hex to base64.\n const buffer = Buffer.from(hex, 'hex')\n const base64Hash = buffer.toString('base64')\n return `${algorithm}-${base64Hash}`\n}\n\n/**\n * Check if a string is valid SSRI format.\n *\n * Validates that a string matches the SSRI format pattern (algorithm-base64).\n * Does not verify that the base64 encoding is valid.\n *\n * @param value - String to validate\n * @returns True if string matches SSRI format\n *\n * @example\n * ```typescript\n * isValidSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // true\n * isValidSsri('76682a9f...') // false\n * ```\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function isValidSsri(value: string): boolean {\n return /^[a-z0-9]+-[A-Za-z0-9+/]{2,}=*$/i.test(value)\n}\n\n/**\n * Check if a string is valid hex format.\n *\n * Validates that a string contains only hexadecimal characters (0-9, a-f).\n * Does not verify hash length or algorithm.\n *\n * @param value - String to validate\n * @returns True if string is valid hex format\n *\n * @example\n * ```typescript\n * isValidHex('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856') // true\n * isValidHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // false\n * ```\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function isValidHex(value: string): boolean {\n return /^[a-f0-9]+$/i.test(value)\n}\n\n/**\n * Parse SSRI format into components.\n *\n * Extracts the algorithm and base64 hash from an SSRI string.\n *\n * @param ssri - Hash in SSRI format\n * @returns Object with algorithm and base64Hash properties\n * @throws Error if SSRI format is invalid\n *\n * @example\n * ```typescript\n * const { algorithm, base64Hash } = parseSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')\n * // Returns: { algorithm: 'sha256', base64Hash: 'dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=' }\n * ```\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function parseSsri(ssri: string): {\n algorithm: string\n base64Hash: string\n} {\n const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri)\n if (!match || !match[1] || !match[2] || match[2].length < 2) {\n throw new Error(`Invalid SSRI format: ${ssri}`)\n }\n const algorithm = match[1]\n const base64Hash = match[2]\n return { algorithm, base64Hash }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBO,SAAS,UAAU,MAAsB;AAC9C,QAAM,QAAQ,oCAAoC,KAAK,IAAI;AAC3D,MAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG;AAC9C,UAAM,IAAI,MAAM,wBAAwB,IAAI,EAAE;AAAA,EAChD;AACA,QAAM,aAAa,MAAM,CAAC;AAE1B,QAAM,SAAS,OAAO,KAAK,YAAY,QAAQ;AAC/C,SAAO,OAAO,SAAS,KAAK;AAC9B;AAAA;AAoBO,SAAS,UAAU,KAAa,YAAY,UAAkB;AACnE,MAAI,CAAC,eAAe,KAAK,GAAG,GAAG;AAC7B,UAAM,IAAI,MAAM,uBAAuB,GAAG,EAAE;AAAA,EAC9C;AAEA,QAAM,SAAS,OAAO,KAAK,KAAK,KAAK;AACrC,QAAM,aAAa,OAAO,SAAS,QAAQ;AAC3C,SAAO,GAAG,SAAS,IAAI,UAAU;AACnC;AAAA;AAkBO,SAAS,YAAY,OAAwB;AAClD,SAAO,mCAAmC,KAAK,KAAK;AACtD;AAAA;AAkBO,SAAS,WAAW,OAAwB;AACjD,SAAO,eAAe,KAAK,KAAK;AAClC;AAAA;AAkBO,SAAS,UAAU,MAGxB;AACA,QAAM,QAAQ,oCAAoC,KAAK,IAAI;AAC3D,MAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG;AAC3D,UAAM,IAAI,MAAM,wBAAwB,IAAI,EAAE;AAAA,EAChD;AACA,QAAM,YAAY,MAAM,CAAC;AACzB,QAAM,aAAa,MAAM,CAAC;AAC1B,SAAO,EAAE,WAAW,WAAW;AACjC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Terminal clearing and cursor utilities.
3
+ * Provides functions for clearing lines, screens, and managing cursor position.
4
+ */
5
+ /**
6
+ * Clear the current line.
7
+ */
8
+ export declare function clearLine(stream?: NodeJS.WriteStream): void;
9
+ /**
10
+ * Clear lines above the current position.
11
+ */
12
+ export declare function clearLines(count: number, stream?: NodeJS.WriteStream): void;
13
+ /**
14
+ * Clear the entire screen.
15
+ */
16
+ export declare function clearScreen(stream?: NodeJS.WriteStream): void;
17
+ /**
18
+ * Clear the visible terminal screen (alias for clearScreen).
19
+ */
20
+ export declare function clearVisible(stream?: NodeJS.WriteStream): void;
21
+ /**
22
+ * Move cursor to beginning of line.
23
+ */
24
+ export declare function cursorToStart(stream?: NodeJS.WriteStream): void;
25
+ /**
26
+ * Hide the cursor.
27
+ */
28
+ export declare function hideCursor(stream?: NodeJS.WriteStream): void;
29
+ /**
30
+ * Show the cursor.
31
+ */
32
+ export declare function showCursor(stream?: NodeJS.WriteStream): void;
33
+ /**
34
+ * Save cursor position.
35
+ */
36
+ export declare function saveCursor(stream?: NodeJS.WriteStream): void;
37
+ /**
38
+ * Restore cursor position.
39
+ */
40
+ export declare function restoreCursor(stream?: NodeJS.WriteStream): void;
@@ -0,0 +1,84 @@
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 clear_exports = {};
20
+ __export(clear_exports, {
21
+ clearLine: () => clearLine,
22
+ clearLines: () => clearLines,
23
+ clearScreen: () => clearScreen,
24
+ clearVisible: () => clearVisible,
25
+ cursorToStart: () => cursorToStart,
26
+ hideCursor: () => hideCursor,
27
+ restoreCursor: () => restoreCursor,
28
+ saveCursor: () => saveCursor,
29
+ showCursor: () => showCursor
30
+ });
31
+ module.exports = __toCommonJS(clear_exports);
32
+ function clearLine(stream = process.stdout) {
33
+ if (stream.isTTY) {
34
+ stream.cursorTo(0);
35
+ stream.clearLine(0);
36
+ } else {
37
+ stream.write("\r\x1B[K");
38
+ }
39
+ }
40
+ function clearLines(count, stream = process.stdout) {
41
+ for (let i = 0; i < count; i++) {
42
+ stream.write("\x1B[1A\x1B[2K");
43
+ }
44
+ }
45
+ function clearScreen(stream = process.stdout) {
46
+ if (stream.isTTY) {
47
+ stream.write("\x1Bc");
48
+ }
49
+ }
50
+ function clearVisible(stream = process.stdout) {
51
+ clearScreen(stream);
52
+ }
53
+ function cursorToStart(stream = process.stdout) {
54
+ if (stream.isTTY) {
55
+ stream.cursorTo(0);
56
+ } else {
57
+ stream.write("\r");
58
+ }
59
+ }
60
+ function hideCursor(stream = process.stdout) {
61
+ stream.write("\x1B[?25l");
62
+ }
63
+ function showCursor(stream = process.stdout) {
64
+ stream.write("\x1B[?25h");
65
+ }
66
+ function saveCursor(stream = process.stdout) {
67
+ stream.write("\x1B7");
68
+ }
69
+ function restoreCursor(stream = process.stdout) {
70
+ stream.write("\x1B8");
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ clearLine,
75
+ clearLines,
76
+ clearScreen,
77
+ clearVisible,
78
+ cursorToStart,
79
+ hideCursor,
80
+ restoreCursor,
81
+ saveCursor,
82
+ showCursor
83
+ });
84
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/stdio/clear.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Terminal clearing and cursor utilities.\n * Provides functions for clearing lines, screens, and managing cursor position.\n */\n\n/**\n * Clear the current line.\n */\nexport function clearLine(stream: NodeJS.WriteStream = process.stdout): void {\n if (stream.isTTY) {\n // TTY: Use cursor control\n stream.cursorTo(0)\n stream.clearLine(0)\n } else {\n // Non-TTY: Use ANSI escape codes\n stream.write('\\r\\x1b[K')\n }\n}\n\n/**\n * Clear lines above the current position.\n */\nexport function clearLines(\n count: number,\n stream: NodeJS.WriteStream = process.stdout,\n): void {\n for (let i = 0; i < count; i++) {\n // Move up and clear line\n stream.write('\\x1b[1A\\x1b[2K')\n }\n}\n\n/**\n * Clear the entire screen.\n */\nexport function clearScreen(stream: NodeJS.WriteStream = process.stdout): void {\n if (stream.isTTY) {\n // Clear screen and move cursor to top-left\n stream.write('\\x1bc')\n }\n}\n\n/**\n * Clear the visible terminal screen (alias for clearScreen).\n */\nexport function clearVisible(\n stream: NodeJS.WriteStream = process.stdout,\n): void {\n clearScreen(stream)\n}\n\n/**\n * Move cursor to beginning of line.\n */\nexport function cursorToStart(\n stream: NodeJS.WriteStream = process.stdout,\n): void {\n if (stream.isTTY) {\n stream.cursorTo(0)\n } else {\n stream.write('\\r')\n }\n}\n\n/**\n * Hide the cursor.\n */\nexport function hideCursor(stream: NodeJS.WriteStream = process.stdout): void {\n stream.write('\\x1b[?25l')\n}\n\n/**\n * Show the cursor.\n */\nexport function showCursor(stream: NodeJS.WriteStream = process.stdout): void {\n stream.write('\\x1b[?25h')\n}\n\n/**\n * Save cursor position.\n */\nexport function saveCursor(stream: NodeJS.WriteStream = process.stdout): void {\n stream.write('\\x1b7')\n}\n\n/**\n * Restore cursor position.\n */\nexport function restoreCursor(\n stream: NodeJS.WriteStream = process.stdout,\n): void {\n stream.write('\\x1b8')\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,UAAU,SAA6B,QAAQ,QAAc;AAC3E,MAAI,OAAO,OAAO;AAEhB,WAAO,SAAS,CAAC;AACjB,WAAO,UAAU,CAAC;AAAA,EACpB,OAAO;AAEL,WAAO,MAAM,UAAU;AAAA,EACzB;AACF;AAKO,SAAS,WACd,OACA,SAA6B,QAAQ,QAC/B;AACN,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAE9B,WAAO,MAAM,gBAAgB;AAAA,EAC/B;AACF;AAKO,SAAS,YAAY,SAA6B,QAAQ,QAAc;AAC7E,MAAI,OAAO,OAAO;AAEhB,WAAO,MAAM,OAAO;AAAA,EACtB;AACF;AAKO,SAAS,aACd,SAA6B,QAAQ,QAC/B;AACN,cAAY,MAAM;AACpB;AAKO,SAAS,cACd,SAA6B,QAAQ,QAC/B;AACN,MAAI,OAAO,OAAO;AAChB,WAAO,SAAS,CAAC;AAAA,EACnB,OAAO;AACL,WAAO,MAAM,IAAI;AAAA,EACnB;AACF;AAKO,SAAS,WAAW,SAA6B,QAAQ,QAAc;AAC5E,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,WAAW,SAA6B,QAAQ,QAAc;AAC5E,SAAO,MAAM,WAAW;AAC1B;AAKO,SAAS,WAAW,SAA6B,QAAQ,QAAc;AAC5E,SAAO,MAAM,OAAO;AACtB;AAKO,SAAS,cACd,SAA6B,QAAQ,QAC/B;AACN,SAAO,MAAM,OAAO;AACtB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,48 @@
1
+ export interface DividerOptions {
2
+ width?: number;
3
+ char?: string;
4
+ color?: (text: string) => string;
5
+ }
6
+ /**
7
+ * Create a divider line with custom character and width.
8
+ */
9
+ export declare function divider(options?: DividerOptions): string;
10
+ /**
11
+ * Print a divider line to console.
12
+ */
13
+ export declare function printDivider(options?: DividerOptions): void;
14
+ /**
15
+ * Common divider presets.
16
+ */
17
+ export declare const dividers: {
18
+ readonly thick: () => string;
19
+ readonly thin: () => string;
20
+ readonly double: () => string;
21
+ readonly single: () => string;
22
+ readonly dotted: () => string;
23
+ readonly dashed: () => string;
24
+ readonly wave: () => string;
25
+ readonly star: () => string;
26
+ readonly diamond: () => string;
27
+ readonly arrow: () => string;
28
+ };
29
+ /**
30
+ * Print a thick divider (default).
31
+ */
32
+ export declare function printThickDivider(): void;
33
+ /**
34
+ * Print a thin divider.
35
+ */
36
+ export declare function printThinDivider(): void;
37
+ /**
38
+ * Print a dotted line divider.
39
+ */
40
+ export declare function printDottedDivider(): void;
41
+ /**
42
+ * Create a section break with spacing.
43
+ */
44
+ export declare function sectionBreak(options?: DividerOptions): string;
45
+ /**
46
+ * Print a section break with spacing.
47
+ */
48
+ export declare function printSectionBreak(options?: DividerOptions): void;
@@ -0,0 +1,81 @@
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 divider_exports = {};
20
+ __export(divider_exports, {
21
+ divider: () => divider,
22
+ dividers: () => dividers,
23
+ printDivider: () => printDivider,
24
+ printDottedDivider: () => printDottedDivider,
25
+ printSectionBreak: () => printSectionBreak,
26
+ printThickDivider: () => printThickDivider,
27
+ printThinDivider: () => printThinDivider,
28
+ sectionBreak: () => sectionBreak
29
+ });
30
+ module.exports = __toCommonJS(divider_exports);
31
+ var import_strings = require("../strings");
32
+ function divider(options) {
33
+ const opts = { __proto__: null, ...options };
34
+ const { char = "\u2550", width = 55 } = opts;
35
+ return (0, import_strings.repeatString)(char, width);
36
+ }
37
+ function printDivider(options) {
38
+ console.log(divider(options));
39
+ }
40
+ const dividers = {
41
+ thick: () => divider({ char: "\u2550" }),
42
+ thin: () => divider({ char: "\u2500" }),
43
+ double: () => divider({ char: "\u2550" }),
44
+ single: () => divider({ char: "-" }),
45
+ dotted: () => divider({ char: "\xB7" }),
46
+ dashed: () => divider({ char: "\u254C" }),
47
+ wave: () => divider({ char: "~" }),
48
+ star: () => divider({ char: "*" }),
49
+ diamond: () => divider({ char: "\u25C6" }),
50
+ arrow: () => divider({ char: "\u2192" })
51
+ };
52
+ function printThickDivider() {
53
+ printDivider({ char: "\u2550" });
54
+ }
55
+ function printThinDivider() {
56
+ printDivider({ char: "\u2500" });
57
+ }
58
+ function printDottedDivider() {
59
+ printDivider({ char: "\xB7" });
60
+ }
61
+ function sectionBreak(options) {
62
+ const div = divider(options);
63
+ return `
64
+ ${div}
65
+ `;
66
+ }
67
+ function printSectionBreak(options) {
68
+ console.log(sectionBreak(options));
69
+ }
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ divider,
73
+ dividers,
74
+ printDivider,
75
+ printDottedDivider,
76
+ printSectionBreak,
77
+ printThickDivider,
78
+ printThinDivider,
79
+ sectionBreak
80
+ });
81
+ //# sourceMappingURL=divider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/stdio/divider.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Console divider and separator utilities.\n * Provides various line styles for visual separation in CLI output.\n */\n\nimport { repeatString } from '../strings'\n\nexport interface DividerOptions {\n width?: number\n char?: string\n color?: (text: string) => string\n}\n\n/**\n * Create a divider line with custom character and width.\n */\nexport function divider(options?: DividerOptions): string {\n const opts = { __proto__: null, ...options } as DividerOptions\n const { char = '\u2550', width = 55 } = opts\n return repeatString(char, width)\n}\n\n/**\n * Print a divider line to console.\n */\nexport function printDivider(options?: DividerOptions): void {\n console.log(divider(options))\n}\n\n/**\n * Common divider presets.\n */\nexport const dividers = {\n thick: () => divider({ char: '\u2550' }),\n thin: () => divider({ char: '\u2500' }),\n double: () => divider({ char: '\u2550' }),\n single: () => divider({ char: '-' }),\n dotted: () => divider({ char: '\u00B7' }),\n dashed: () => divider({ char: '\u254C' }),\n wave: () => divider({ char: '~' }),\n star: () => divider({ char: '*' }),\n diamond: () => divider({ char: '\u25C6' }),\n arrow: () => divider({ char: '\u2192' }),\n} as const\n\n/**\n * Print a thick divider (default).\n */\nexport function printThickDivider(): void {\n printDivider({ char: '\u2550' })\n}\n\n/**\n * Print a thin divider.\n */\nexport function printThinDivider(): void {\n printDivider({ char: '\u2500' })\n}\n\n/**\n * Print a dotted line divider.\n */\nexport function printDottedDivider(): void {\n printDivider({ char: '\u00B7' })\n}\n\n/**\n * Create a section break with spacing.\n */\nexport function sectionBreak(options?: DividerOptions): string {\n const div = divider(options)\n return `\\n${div}\\n`\n}\n\n/**\n * Print a section break with spacing.\n */\nexport function printSectionBreak(options?: DividerOptions): void {\n console.log(sectionBreak(options))\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,qBAA6B;AAWtB,SAAS,QAAQ,SAAkC;AACxD,QAAM,OAAO,EAAE,WAAW,MAAM,GAAG,QAAQ;AAC3C,QAAM,EAAE,OAAO,UAAK,QAAQ,GAAG,IAAI;AACnC,aAAO,6BAAa,MAAM,KAAK;AACjC;AAKO,SAAS,aAAa,SAAgC;AAC3D,UAAQ,IAAI,QAAQ,OAAO,CAAC;AAC9B;AAKO,MAAM,WAAW;AAAA,EACtB,OAAO,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AAAA,EAClC,MAAM,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AAAA,EACjC,QAAQ,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AAAA,EACnC,QAAQ,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACnC,QAAQ,MAAM,QAAQ,EAAE,MAAM,OAAI,CAAC;AAAA,EACnC,QAAQ,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AAAA,EACnC,MAAM,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACjC,MAAM,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACjC,SAAS,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AAAA,EACpC,OAAO,MAAM,QAAQ,EAAE,MAAM,SAAI,CAAC;AACpC;AAKO,SAAS,oBAA0B;AACxC,eAAa,EAAE,MAAM,SAAI,CAAC;AAC5B;AAKO,SAAS,mBAAyB;AACvC,eAAa,EAAE,MAAM,SAAI,CAAC;AAC5B;AAKO,SAAS,qBAA2B;AACzC,eAAa,EAAE,MAAM,OAAI,CAAC;AAC5B;AAKO,SAAS,aAAa,SAAkC;AAC7D,QAAM,MAAM,QAAQ,OAAO;AAC3B,SAAO;AAAA,EAAK,GAAG;AAAA;AACjB;AAKO,SAAS,kBAAkB,SAAgC;AAChE,UAAQ,IAAI,aAAa,OAAO,CAAC;AACnC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ export interface FooterOptions {
2
+ width?: number | undefined;
3
+ borderChar?: string | undefined;
4
+ showTimestamp?: boolean | undefined;
5
+ showDuration?: boolean | undefined;
6
+ startTime?: number | undefined;
7
+ color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | 'red' | 'gray' | undefined;
8
+ }
9
+ export interface SummaryStats {
10
+ total?: number | undefined;
11
+ success?: number | undefined;
12
+ failed?: number | undefined;
13
+ skipped?: number | undefined;
14
+ warnings?: number | undefined;
15
+ errors?: number | undefined;
16
+ duration?: number | undefined;
17
+ }
18
+ /**
19
+ * Create a formatted footer.
20
+ */
21
+ export declare function createFooter(message?: string, options?: FooterOptions): string;
22
+ /**
23
+ * Create a summary footer with statistics.
24
+ */
25
+ export declare function createSummaryFooter(stats: SummaryStats, options?: FooterOptions): string;