@socketsecurity/lib 6.0.3 → 6.0.4

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 (542) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/_virtual/_rolldown/runtime.js +45 -0
  3. package/dist/abort/signal.js +53 -59
  4. package/dist/ai/discover.js +110 -110
  5. package/dist/ai/profiles.js +94 -65
  6. package/dist/ai/spawn.js +172 -194
  7. package/dist/ai/types.js +1 -17
  8. package/dist/ai/worktree.js +160 -183
  9. package/dist/ansi/constants.js +16 -38
  10. package/dist/ansi/strip.js +44 -41
  11. package/dist/archives/_internal.js +64 -73
  12. package/dist/archives/detect.js +30 -43
  13. package/dist/archives/extract.js +43 -50
  14. package/dist/archives/tar.js +197 -228
  15. package/dist/archives/types.js +1 -17
  16. package/dist/archives/zip.js +85 -121
  17. package/dist/argv/flag-predicates.js +203 -101
  18. package/dist/argv/flag-types.js +96 -113
  19. package/dist/argv/parse-args-string.d.ts +16 -14
  20. package/dist/argv/parse-args-string.js +42 -39
  21. package/dist/argv/parse.js +145 -163
  22. package/dist/arrays/_internal.js +65 -48
  23. package/dist/arrays/chunk.js +51 -40
  24. package/dist/arrays/join.js +87 -35
  25. package/dist/arrays/predicates.js +46 -28
  26. package/dist/arrays/unique.js +45 -31
  27. package/dist/bin/_internal.js +34 -42
  28. package/dist/bin/check-primordials.js +175 -233
  29. package/dist/bin/check.js +51 -72
  30. package/dist/bin/exec.js +70 -74
  31. package/dist/bin/find.js +151 -134
  32. package/dist/bin/resolve.js +180 -246
  33. package/dist/bin/shadow.js +24 -33
  34. package/dist/bin/socket-lib.js +51 -73
  35. package/dist/bin/types.js +1 -17
  36. package/dist/bin/which.js +211 -146
  37. package/dist/cacache/_internal.js +25 -40
  38. package/dist/cacache/clear.js +79 -72
  39. package/dist/cacache/read.js +48 -46
  40. package/dist/cacache/tmp.js +29 -36
  41. package/dist/cacache/types.js +1 -17
  42. package/dist/cacache/write.js +43 -48
  43. package/dist/cache/ttl/store.js +232 -288
  44. package/dist/cache/ttl/types.js +1 -17
  45. package/dist/checks/primordials-defaults.js +83 -89
  46. package/dist/checks/primordials.js +225 -277
  47. package/dist/colors/convert.js +45 -37
  48. package/dist/colors/palette.js +88 -45
  49. package/dist/colors/socket-palette.js +74 -84
  50. package/dist/colors/types.js +1 -17
  51. package/dist/compression/_internal.js +57 -72
  52. package/dist/compression/brotli.js +94 -127
  53. package/dist/compression/gzip.js +95 -121
  54. package/dist/compression/types.js +1 -17
  55. package/dist/constants/agents.js +61 -113
  56. package/dist/constants/encoding.js +19 -42
  57. package/dist/constants/github.js +12 -30
  58. package/dist/constants/licenses.js +48 -63
  59. package/dist/constants/lifecycle-script-names.js +31 -45
  60. package/dist/constants/maintained-node-versions.js +22 -37
  61. package/dist/constants/node.js +226 -167
  62. package/dist/constants/package-default-node-range.js +16 -41
  63. package/dist/constants/package-default-socket-categories.js +12 -30
  64. package/dist/constants/packages.js +77 -126
  65. package/dist/constants/platform.js +27 -49
  66. package/dist/constants/sentinels.js +23 -48
  67. package/dist/constants/socket.js +42 -87
  68. package/dist/constants/testing.js +15 -34
  69. package/dist/constants/time.js +16 -36
  70. package/dist/constants/typescript.js +32 -52
  71. package/dist/cover/code.js +111 -142
  72. package/dist/cover/formatters.js +118 -101
  73. package/dist/cover/type.js +50 -76
  74. package/dist/cover/types.js +1 -17
  75. package/dist/crypto/hash.js +54 -46
  76. package/dist/debug/_internal.js +62 -71
  77. package/dist/debug/caller-info.js +53 -64
  78. package/dist/debug/namespace.js +80 -90
  79. package/dist/debug/output.js +172 -188
  80. package/dist/debug/types.js +1 -17
  81. package/dist/dlx/_internal.js +24 -43
  82. package/dist/dlx/arborist.js +162 -160
  83. package/dist/dlx/binary-cache.js +228 -200
  84. package/dist/dlx/binary-download.js +172 -211
  85. package/dist/dlx/binary-resolution.js +165 -157
  86. package/dist/dlx/binary-types.js +1 -17
  87. package/dist/dlx/binary.js +149 -189
  88. package/dist/dlx/cache.js +45 -30
  89. package/dist/dlx/detect.js +245 -159
  90. package/dist/dlx/dir.js +67 -51
  91. package/dist/dlx/firewall.js +62 -100
  92. package/dist/dlx/lockfile.js +122 -127
  93. package/dist/dlx/manifest.js +264 -274
  94. package/dist/dlx/package.js +241 -244
  95. package/dist/dlx/packages.js +99 -96
  96. package/dist/dlx/paths.js +73 -59
  97. package/dist/dlx/spec.js +52 -60
  98. package/dist/dlx/types.js +1 -17
  99. package/dist/eco/cargo/lockfile-format.js +19 -36
  100. package/dist/eco/cargo/manifest-format.js +17 -35
  101. package/dist/eco/cargo/parse-lockfile.js +210 -237
  102. package/dist/eco/manifest/analyze-lockfile.js +46 -63
  103. package/dist/eco/manifest/detect-format.js +66 -90
  104. package/dist/eco/manifest/find-packages.js +39 -64
  105. package/dist/eco/manifest/get-package-versions.js +27 -48
  106. package/dist/eco/manifest/get-package.js +21 -40
  107. package/dist/eco/manifest/manifest-error.js +14 -35
  108. package/dist/eco/manifest/parse-lockfile.js +40 -86
  109. package/dist/eco/manifest/parse-manifest.js +26 -43
  110. package/dist/eco/manifest/parse.js +26 -47
  111. package/dist/eco/manifest/types.js +1 -17
  112. package/dist/eco/npm/bun/exec.js +23 -32
  113. package/dist/eco/npm/manifest-format.js +21 -35
  114. package/dist/eco/npm/npm/exec.js +51 -61
  115. package/dist/eco/npm/npm/extract-package-name-from-path.js +28 -50
  116. package/dist/eco/npm/npm/flags.js +80 -52
  117. package/dist/eco/npm/npm/lockfile-format.js +21 -40
  118. package/dist/eco/npm/npm/parse-git-url.js +26 -40
  119. package/dist/eco/npm/npm/parse-lockfile.js +184 -210
  120. package/dist/eco/npm/parse-package-json.js +71 -102
  121. package/dist/eco/npm/pnpm/detect-pnpm-version.js +22 -43
  122. package/dist/eco/npm/pnpm/exec.js +51 -62
  123. package/dist/eco/npm/pnpm/flags.js +75 -68
  124. package/dist/eco/npm/pnpm/lockfile-format.js +19 -36
  125. package/dist/eco/npm/pnpm/parse-lockfile.js +235 -259
  126. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v5.js +37 -47
  127. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v6-v9.js +36 -49
  128. package/dist/eco/npm/script.js +82 -90
  129. package/dist/eco/npm/vlt/exec.js +24 -32
  130. package/dist/eco/npm/yarnpkg/yarn/exec.js +60 -59
  131. package/dist/eco/npm/yarnpkg/yarn/lockfile-format.js +20 -36
  132. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +194 -242
  133. package/dist/eco/npm/yarnpkg/yarn/parse-yarn-descriptor.js +37 -61
  134. package/dist/eco/purl.js +50 -60
  135. package/dist/eco/types.js +1 -17
  136. package/dist/effects/pulse-frames.js +64 -65
  137. package/dist/effects/shimmer-keyframes.js +71 -52
  138. package/dist/effects/shimmer-terminal.js +81 -50
  139. package/dist/effects/shimmer.js +290 -153
  140. package/dist/env/boolean.js +42 -43
  141. package/dist/env/case-insensitive.js +54 -39
  142. package/dist/env/ci.js +29 -31
  143. package/dist/env/debug.js +28 -31
  144. package/dist/env/github.js +144 -59
  145. package/dist/env/home.js +38 -31
  146. package/dist/env/locale.js +59 -39
  147. package/dist/env/node-auth-token.js +28 -31
  148. package/dist/env/node-env.js +28 -31
  149. package/dist/env/npm.js +94 -47
  150. package/dist/env/number.js +50 -51
  151. package/dist/env/package-manager.js +95 -83
  152. package/dist/env/path.js +28 -31
  153. package/dist/env/pre-commit.js +30 -32
  154. package/dist/env/proxy.js +121 -122
  155. package/dist/env/rewire.js +204 -96
  156. package/dist/env/shell.js +28 -31
  157. package/dist/env/socket-cli.js +233 -81
  158. package/dist/env/socket.js +521 -156
  159. package/dist/env/string.js +43 -44
  160. package/dist/env/temp-dir.js +59 -39
  161. package/dist/env/term.js +28 -31
  162. package/dist/env/test.js +65 -43
  163. package/dist/env/types.js +1 -17
  164. package/dist/env/windows.js +78 -43
  165. package/dist/env/xdg.js +62 -39
  166. package/dist/errors/message.js +40 -46
  167. package/dist/errors/predicates.js +61 -49
  168. package/dist/errors/stack.js +24 -36
  169. package/dist/events/exit/_internal.js +86 -103
  170. package/dist/events/exit/handler.js +48 -55
  171. package/dist/events/exit/intercept.js +49 -70
  172. package/dist/events/exit/lifecycle.js +92 -101
  173. package/dist/events/exit/signals.js +25 -31
  174. package/dist/events/exit/types.js +1 -17
  175. package/dist/events/warning/handler.js +43 -40
  176. package/dist/events/warning/suppress.js +111 -90
  177. package/dist/external/@npmcli/package-json/lib/read-package.js +132 -153
  178. package/dist/external/@npmcli/package-json/lib/sort.js +73 -105
  179. package/dist/external/@npmcli/package-json.js +12705 -15140
  180. package/dist/external/@npmcli/promise-spawn.js +451 -472
  181. package/dist/external/@sinclair/typebox/value.js +7443 -9002
  182. package/dist/external/@sinclair/typebox.js +7516 -7885
  183. package/dist/external/@socketregistry/is-unicode-supported.js +31 -39
  184. package/dist/external/@socketregistry/packageurl-js.js +6127 -7369
  185. package/dist/external/@socketregistry/yocto-spinner.js +394 -455
  186. package/dist/external/@yarnpkg/extensions.js +435 -1022
  187. package/dist/external/adm-zip.js +2313 -2673
  188. package/dist/external/debug.js +700 -687
  189. package/dist/external/external-pack.js +2658 -3171
  190. package/dist/external/fast-sort.js +124 -138
  191. package/dist/external/get-east-asian-width.js +70 -64
  192. package/dist/external/libnpmexec.js +28 -31
  193. package/dist/external/npm-pack.js +43617 -50137
  194. package/dist/external/p-map.js +198 -222
  195. package/dist/external/pico-pack.js +6735 -7304
  196. package/dist/external/pony-cause.js +143 -139
  197. package/dist/external/shell-quote.js +226 -0
  198. package/dist/external/spdx-pack.js +1283 -1403
  199. package/dist/external/streaming-iterables.js +835 -1052
  200. package/dist/external/tar-fs.js +2769 -3048
  201. package/dist/external/which.js +267 -251
  202. package/dist/external/yargs-parser.js +851 -1074
  203. package/dist/external-tools/bazel/asset-names.js +98 -90
  204. package/dist/external-tools/bazel/from-download.js +52 -46
  205. package/dist/external-tools/bazel/from-path.js +27 -38
  206. package/dist/external-tools/bazel/read-bazel-version-file.js +35 -57
  207. package/dist/external-tools/bazel/resolve-asset-url.js +24 -39
  208. package/dist/external-tools/bazel/resolve-bazel-version.js +34 -56
  209. package/dist/external-tools/bazel/resolve.js +44 -58
  210. package/dist/external-tools/bazel/types.js +1 -17
  211. package/dist/external-tools/cdxgen/asset-names.js +59 -66
  212. package/dist/external-tools/cdxgen/from-download.js +52 -80
  213. package/dist/external-tools/cdxgen/from-path.js +19 -37
  214. package/dist/external-tools/cdxgen/from-vfs.js +22 -43
  215. package/dist/external-tools/cdxgen/resolve.js +48 -63
  216. package/dist/external-tools/cdxgen/types.js +1 -17
  217. package/dist/external-tools/from-download.js +107 -67
  218. package/dist/external-tools/janus/asset-names.js +44 -51
  219. package/dist/external-tools/janus/from-download.js +45 -70
  220. package/dist/external-tools/janus/from-path.js +19 -37
  221. package/dist/external-tools/janus/from-vfs.js +22 -43
  222. package/dist/external-tools/janus/resolve.js +45 -63
  223. package/dist/external-tools/janus/types.js +1 -17
  224. package/dist/external-tools/jre/asset-names.js +109 -82
  225. package/dist/external-tools/jre/detect-platform-arch.js +25 -49
  226. package/dist/external-tools/jre/from-download.js +71 -67
  227. package/dist/external-tools/jre/from-java-home.js +27 -54
  228. package/dist/external-tools/jre/from-path.js +27 -49
  229. package/dist/external-tools/jre/from-vfs.js +39 -60
  230. package/dist/external-tools/jre/resolve.js +55 -68
  231. package/dist/external-tools/jre/types.js +1 -17
  232. package/dist/external-tools/manifest.js +130 -150
  233. package/dist/external-tools/opengrep/asset-names.js +60 -72
  234. package/dist/external-tools/opengrep/from-download.js +58 -80
  235. package/dist/external-tools/opengrep/from-path.js +19 -37
  236. package/dist/external-tools/opengrep/from-vfs.js +23 -43
  237. package/dist/external-tools/opengrep/resolve.js +43 -63
  238. package/dist/external-tools/opengrep/types.js +1 -17
  239. package/dist/external-tools/sbt/asset-names.js +21 -30
  240. package/dist/external-tools/sbt/from-download.js +50 -61
  241. package/dist/external-tools/sbt/from-path.js +23 -38
  242. package/dist/external-tools/sbt/from-vfs.js +30 -44
  243. package/dist/external-tools/sbt/resolve.js +45 -63
  244. package/dist/external-tools/sbt/types.js +1 -17
  245. package/dist/external-tools/synp/asset-names.js +11 -29
  246. package/dist/external-tools/synp/from-download.js +24 -41
  247. package/dist/external-tools/synp/from-path.js +19 -37
  248. package/dist/external-tools/synp/from-vfs.js +22 -43
  249. package/dist/external-tools/synp/resolve.js +43 -62
  250. package/dist/external-tools/synp/types.js +1 -17
  251. package/dist/external-tools/trivy/asset-names.js +51 -62
  252. package/dist/external-tools/trivy/from-download.js +42 -64
  253. package/dist/external-tools/trivy/from-path.js +19 -37
  254. package/dist/external-tools/trivy/from-vfs.js +22 -43
  255. package/dist/external-tools/trivy/resolve.js +43 -63
  256. package/dist/external-tools/trivy/types.js +1 -17
  257. package/dist/external-tools/trufflehog/asset-names.js +54 -66
  258. package/dist/external-tools/trufflehog/from-download.js +44 -62
  259. package/dist/external-tools/trufflehog/from-path.js +21 -37
  260. package/dist/external-tools/trufflehog/from-vfs.js +26 -43
  261. package/dist/external-tools/trufflehog/resolve.js +43 -63
  262. package/dist/external-tools/trufflehog/types.js +1 -17
  263. package/dist/external-tools/uv/asset-names.js +64 -74
  264. package/dist/external-tools/uv/from-download.js +44 -65
  265. package/dist/external-tools/uv/from-path.js +19 -37
  266. package/dist/external-tools/uv/from-vfs.js +22 -43
  267. package/dist/external-tools/uv/resolve.js +42 -63
  268. package/dist/external-tools/uv/types.js +1 -17
  269. package/dist/fs/_internal.js +40 -42
  270. package/dist/fs/access.js +57 -54
  271. package/dist/fs/encoding.js +80 -97
  272. package/dist/fs/find-up.js +126 -125
  273. package/dist/fs/inspect.js +168 -99
  274. package/dist/fs/path-cache.js +31 -32
  275. package/dist/fs/read-dir.js +102 -79
  276. package/dist/fs/read-file.js +177 -118
  277. package/dist/fs/read-json-cache.js +150 -134
  278. package/dist/fs/read-json.js +172 -187
  279. package/dist/fs/resolve-module.js +35 -58
  280. package/dist/fs/safe.js +278 -169
  281. package/dist/fs/types.js +1 -17
  282. package/dist/fs/unique.js +52 -48
  283. package/dist/fs/validate.js +56 -40
  284. package/dist/fs/write-json.js +109 -75
  285. package/dist/git/_internal.js +251 -216
  286. package/dist/git/changed.js +191 -74
  287. package/dist/git/repo.js +118 -104
  288. package/dist/git/staged.js +172 -62
  289. package/dist/git/types.js +1 -17
  290. package/dist/git/unstaged.js +175 -62
  291. package/dist/github/constants.js +25 -33
  292. package/dist/github/errors.js +46 -38
  293. package/dist/github/fetch.js +137 -82
  294. package/dist/github/ghsa.js +217 -151
  295. package/dist/github/refs-cache.js +54 -43
  296. package/dist/github/refs-graphql.js +97 -89
  297. package/dist/github/refs-rest.js +70 -101
  298. package/dist/github/refs.js +105 -64
  299. package/dist/github/token.js +96 -48
  300. package/dist/github/types.js +1 -17
  301. package/dist/globs/_internal.js +73 -82
  302. package/dist/globs/defaults.js +40 -59
  303. package/dist/globs/match.js +93 -77
  304. package/dist/globs/matcher.js +104 -92
  305. package/dist/globs/stream.js +43 -55
  306. package/dist/globs/types.js +1 -17
  307. package/dist/http-request/_internal.js +11 -38
  308. package/dist/http-request/browser-fetch.js +19 -29
  309. package/dist/http-request/browser.js +188 -206
  310. package/dist/http-request/checksums.js +101 -65
  311. package/dist/http-request/download-types.js +1 -17
  312. package/dist/http-request/download.js +195 -196
  313. package/dist/http-request/errors.js +39 -47
  314. package/dist/http-request/headers.js +95 -80
  315. package/dist/http-request/http-request.js +10 -35
  316. package/dist/http-request/node.js +71 -97
  317. package/dist/http-request/request-attempt.js +232 -285
  318. package/dist/http-request/request-types.js +1 -17
  319. package/dist/http-request/request.js +106 -108
  320. package/dist/http-request/response-reader.js +47 -51
  321. package/dist/http-request/response-types.js +22 -38
  322. package/dist/http-request/user-agent.js +73 -55
  323. package/dist/integrity.js +105 -106
  324. package/dist/ipc/_internal.js +34 -48
  325. package/dist/ipc/directory.js +55 -63
  326. package/dist/ipc/paths.js +52 -45
  327. package/dist/ipc/types.js +1 -17
  328. package/dist/ipc/write.js +81 -74
  329. package/dist/ipc-cli/get.js +29 -56
  330. package/dist/ipc-cli/types.js +1 -17
  331. package/dist/json/edit.js +182 -242
  332. package/dist/json/format.js +202 -103
  333. package/dist/json/parse.js +206 -109
  334. package/dist/json/types.js +1 -17
  335. package/dist/links/create.js +93 -60
  336. package/dist/links/types.js +1 -17
  337. package/dist/logger/_internal.js +109 -73
  338. package/dist/logger/browser.js +45 -56
  339. package/dist/logger/colors.js +31 -49
  340. package/dist/logger/console.js +89 -112
  341. package/dist/logger/default.js +19 -33
  342. package/dist/logger/logger.js +5 -29
  343. package/dist/logger/node.js +794 -854
  344. package/dist/logger/symbols-builder.js +54 -56
  345. package/dist/logger/symbols.js +135 -118
  346. package/dist/logger/types.js +1 -17
  347. package/dist/memo/_internal.js +39 -49
  348. package/dist/memo/async.js +133 -117
  349. package/dist/memo/clear.js +25 -34
  350. package/dist/memo/decorator.js +43 -37
  351. package/dist/memo/memoize.js +97 -88
  352. package/dist/memo/once.js +42 -41
  353. package/dist/memo/types.js +1 -17
  354. package/dist/memo/weak.js +45 -41
  355. package/dist/node/async-hooks.js +9 -30
  356. package/dist/node/child-process.js +9 -30
  357. package/dist/node/crypto.js +9 -30
  358. package/dist/node/events.js +9 -30
  359. package/dist/node/fs-promises.js +9 -30
  360. package/dist/node/fs.js +9 -30
  361. package/dist/node/http.js +9 -30
  362. package/dist/node/https.js +9 -30
  363. package/dist/node/module.js +20 -34
  364. package/dist/node/os.js +9 -30
  365. package/dist/node/path.js +9 -30
  366. package/dist/node/timers-promises.js +9 -30
  367. package/dist/node/url.js +9 -30
  368. package/dist/node/util.js +9 -30
  369. package/dist/objects/getters.js +185 -126
  370. package/dist/objects/inspect.js +85 -52
  371. package/dist/objects/mutate.js +96 -76
  372. package/dist/objects/predicates.js +112 -59
  373. package/dist/objects/sort.js +120 -76
  374. package/dist/objects/types.js +1 -17
  375. package/dist/packages/edit-class.js +198 -265
  376. package/dist/packages/edit.js +79 -86
  377. package/dist/packages/exports.js +146 -157
  378. package/dist/packages/isolation.js +159 -209
  379. package/dist/packages/licenses.js +207 -189
  380. package/dist/packages/manifest.js +134 -172
  381. package/dist/packages/normalize.js +91 -102
  382. package/dist/packages/operations.d.ts +2 -0
  383. package/dist/packages/operations.js +283 -254
  384. package/dist/packages/provenance.js +195 -245
  385. package/dist/packages/specs.js +94 -84
  386. package/dist/packages/types.js +1 -17
  387. package/dist/packages/validation.js +49 -50
  388. package/dist/paths/_internal.js +82 -86
  389. package/dist/paths/conversion.js +112 -65
  390. package/dist/paths/dirnames.js +17 -42
  391. package/dist/paths/exts.js +23 -54
  392. package/dist/paths/filenames.js +21 -50
  393. package/dist/paths/globs.js +15 -38
  394. package/dist/paths/normalize.js +215 -236
  395. package/dist/paths/packages.js +34 -49
  396. package/dist/paths/predicates.js +184 -106
  397. package/dist/paths/resolve.js +146 -128
  398. package/dist/paths/rewire.js +108 -72
  399. package/dist/paths/socket.js +252 -132
  400. package/dist/paths/walk.js +55 -60
  401. package/dist/perf/_internal.js +10 -28
  402. package/dist/perf/enabled.js +21 -30
  403. package/dist/perf/metrics.js +81 -67
  404. package/dist/perf/report.js +79 -80
  405. package/dist/perf/timer.js +180 -126
  406. package/dist/perf/types.js +1 -17
  407. package/dist/pkg-ext/data.js +29 -82
  408. package/dist/pkg-ext/types.js +1 -17
  409. package/dist/primordials/array.js +120 -198
  410. package/dist/primordials/buffer.js +28 -51
  411. package/dist/primordials/date.js +26 -51
  412. package/dist/primordials/error.js +33 -59
  413. package/dist/primordials/function.js +21 -41
  414. package/dist/primordials/globals.js +25 -48
  415. package/dist/primordials/json.js +14 -30
  416. package/dist/primordials/map-set.js +88 -152
  417. package/dist/primordials/math.js +59 -116
  418. package/dist/primordials/number.js +41 -76
  419. package/dist/primordials/object.js +56 -116
  420. package/dist/primordials/promise.js +28 -52
  421. package/dist/primordials/reflect.js +24 -52
  422. package/dist/primordials/regexp.js +25 -47
  423. package/dist/primordials/string.js +114 -167
  424. package/dist/primordials/symbol.js +40 -72
  425. package/dist/primordials/uncurry.js +38 -55
  426. package/dist/primordials/url.js +27 -66
  427. package/dist/process/_internal.js +7 -32
  428. package/dist/process/abort.js +29 -35
  429. package/dist/process/lock-instance.js +26 -30
  430. package/dist/process/lock-manager.js +279 -307
  431. package/dist/process/lock-types.js +1 -17
  432. package/dist/process/spawn/_internal.js +43 -55
  433. package/dist/process/spawn/child.js +172 -211
  434. package/dist/process/spawn/errors.js +116 -113
  435. package/dist/process/spawn/stdio.js +51 -35
  436. package/dist/process/spawn/types.js +1 -17
  437. package/dist/process/transient.js +49 -66
  438. package/dist/promises/_internal.js +31 -34
  439. package/dist/promises/iterate.js +238 -102
  440. package/dist/promises/options.js +123 -101
  441. package/dist/promises/queue.js +115 -136
  442. package/dist/promises/resolvers.js +77 -46
  443. package/dist/promises/retry.js +156 -101
  444. package/dist/promises/types.js +1 -17
  445. package/dist/regexps/escape.js +32 -30
  446. package/dist/regexps/hex.js +16 -33
  447. package/dist/regexps/spec.js +53 -81
  448. package/dist/releases/github-archives.js +127 -118
  449. package/dist/releases/github-asset-url.js +162 -146
  450. package/dist/releases/github-assets.js +37 -49
  451. package/dist/releases/github-auth.js +32 -48
  452. package/dist/releases/github-downloads.js +118 -138
  453. package/dist/releases/github-listing.js +175 -145
  454. package/dist/releases/github-retry-config.js +41 -47
  455. package/dist/releases/github-types.js +1 -17
  456. package/dist/releases/socket-btm.js +273 -192
  457. package/dist/schema/parse.js +35 -36
  458. package/dist/schema/types.js +1 -17
  459. package/dist/schema/validate.js +118 -99
  460. package/dist/sea/detect.js +57 -52
  461. package/dist/secrets/_internal.js +86 -67
  462. package/dist/secrets/find.js +96 -77
  463. package/dist/secrets/keychain.js +315 -309
  464. package/dist/secrets/linux.js +133 -135
  465. package/dist/secrets/macos.js +151 -147
  466. package/dist/secrets/rc.js +182 -181
  467. package/dist/secrets/socket-api-token.js +28 -43
  468. package/dist/secrets/types.js +1 -17
  469. package/dist/secrets/windows.js +184 -242
  470. package/dist/shadow/skip.js +51 -70
  471. package/dist/shadow/types.js +1 -17
  472. package/dist/shell/parse.d.ts +26 -0
  473. package/dist/shell/parse.js +35 -0
  474. package/dist/shell/quote.d.ts +19 -0
  475. package/dist/shell/quote.js +30 -0
  476. package/dist/smol/detect.js +67 -43
  477. package/dist/smol/http.js +33 -37
  478. package/dist/smol/https.js +31 -37
  479. package/dist/smol/manifest.js +33 -37
  480. package/dist/smol/path.js +33 -37
  481. package/dist/smol/primordial.js +35 -37
  482. package/dist/smol/purl.js +34 -37
  483. package/dist/smol/versions.js +31 -37
  484. package/dist/smol/vfs.js +46 -38
  485. package/dist/sorts/_internal.js +14 -40
  486. package/dist/sorts/natural.js +57 -64
  487. package/dist/sorts/semver.js +33 -43
  488. package/dist/sorts/strings.js +24 -30
  489. package/dist/sorts/types.js +1 -17
  490. package/dist/spinner/default.js +72 -63
  491. package/dist/spinner/format.js +86 -71
  492. package/dist/spinner/spinner.js +749 -797
  493. package/dist/spinner/types.js +1 -17
  494. package/dist/spinner/with.js +193 -137
  495. package/dist/ssri/convert.js +64 -47
  496. package/dist/ssri/parse.js +38 -37
  497. package/dist/ssri/validate.js +51 -34
  498. package/dist/stdio/_internal.js +50 -46
  499. package/dist/stdio/clear.js +208 -86
  500. package/dist/stdio/divider.js +170 -97
  501. package/dist/stdio/footer.js +116 -110
  502. package/dist/stdio/header.js +117 -90
  503. package/dist/stdio/progress.js +189 -218
  504. package/dist/stdio/prompts.js +244 -168
  505. package/dist/stdio/stderr.js +173 -78
  506. package/dist/stdio/stdout.js +177 -94
  507. package/dist/streams/parallel.js +58 -50
  508. package/dist/streams/transform.js +36 -45
  509. package/dist/strings/format.js +145 -63
  510. package/dist/strings/predicates.js +56 -34
  511. package/dist/strings/search.js +52 -42
  512. package/dist/strings/transform.js +113 -72
  513. package/dist/strings/types.js +1 -17
  514. package/dist/strings/width.js +89 -82
  515. package/dist/tables/bordered.js +81 -81
  516. package/dist/tables/padding.js +36 -46
  517. package/dist/tables/simple.js +62 -70
  518. package/dist/tables/types.js +1 -17
  519. package/dist/temporal/instant.js +72 -81
  520. package/dist/temporal/now.js +40 -31
  521. package/dist/temporal/slots.js +42 -36
  522. package/dist/temporal/system.js +36 -36
  523. package/dist/temporal/temporal.js +11 -41
  524. package/dist/themes/context.js +131 -69
  525. package/dist/themes/resolve.js +207 -132
  526. package/dist/themes/themes.js +225 -194
  527. package/dist/themes/types.js +1 -17
  528. package/dist/url/parse.js +48 -51
  529. package/dist/url/predicates.js +24 -31
  530. package/dist/url/search-params.js +133 -101
  531. package/dist/url/types.js +1 -17
  532. package/dist/versions/_internal.js +31 -33
  533. package/dist/versions/compare.js +80 -58
  534. package/dist/versions/modify.js +41 -39
  535. package/dist/versions/parse.js +88 -64
  536. package/dist/versions/range.js +58 -41
  537. package/dist/versions/types.js +1 -17
  538. package/dist/words/article.js +22 -30
  539. package/dist/words/capitalize.js +25 -34
  540. package/dist/words/pluralize.js +23 -31
  541. package/dist/words/types.js +1 -17
  542. package/package.json +17 -5
@@ -1,802 +1,754 @@
1
1
  "use strict";
2
- /* Socket Lib - Built with esbuild */
3
- "use strict";
4
- var __create = Object.create;
5
- var __defProp = Object.defineProperty;
6
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
- var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getProtoOf = Object.getPrototypeOf;
9
- var __hasOwnProp = Object.prototype.hasOwnProperty;
10
- var __export = (target, all) => {
11
- for (var name in all)
12
- __defProp(target, name, { get: all[name], enumerable: true });
13
- };
14
- var __copyProps = (to, from, except, desc2) => {
15
- if (from && typeof from === "object" || typeof from === "function") {
16
- for (let key of __getOwnPropNames(from))
17
- if (!__hasOwnProp.call(to, key) && key !== except)
18
- __defProp(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc(from, key)) || desc2.enumerable });
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
- mod
29
- ));
30
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
- var spinner_exports = {};
32
- __export(spinner_exports, {
33
- Spinner: () => Spinner
34
- });
35
- module.exports = __toCommonJS(spinner_exports);
36
- var import_convert = require("../colors/convert");
37
- var import_abort = require("../process/abort");
38
- var import_namespace = require("../debug/namespace");
39
- var import_shimmer = require("../effects/shimmer");
40
- var import_shimmer_terminal = require("../effects/shimmer-terminal");
41
- var import_ci = require("../env/ci");
42
- var import_yocto_spinner = __toESM(require("../external/@socketregistry/yocto-spinner"));
43
- var import_default = require("../logger/default");
44
- var import_symbols = require("../logger/symbols");
45
- var import_array = require("../primordials/array");
46
- var import_error = require("../primordials/error");
47
- var import_math = require("../primordials/math");
48
- var import_object = require("../primordials/object");
49
- var import_predicates = require("../strings/predicates");
50
- var import_width = require("../strings/width");
51
- var import_context = require("../themes/context");
52
- var import_themes = require("../themes/themes");
53
- var import_resolve = require("../themes/resolve");
54
- var import_default2 = require("./default");
55
- var import_format = require("./format");
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_runtime = require('../_virtual/_rolldown/runtime.js');
5
+ const require_primordials_error = require('../primordials/error.js');
6
+ const require_primordials_math = require('../primordials/math.js');
7
+ const require_primordials_array = require('../primordials/array.js');
8
+ const require_primordials_object = require('../primordials/object.js');
9
+ const require_strings_predicates = require('../strings/predicates.js');
10
+ const require_themes_themes = require('../themes/themes.js');
11
+ const require_themes_context = require('../themes/context.js');
12
+ const require_logger_symbols = require('../logger/symbols.js');
13
+ const require_logger_default = require('../logger/default.js');
14
+ const require_process_abort = require('../process/abort.js');
15
+ const require_colors_convert = require('../colors/convert.js');
16
+ const require_debug_namespace = require('../debug/namespace.js');
17
+ const require_effects_shimmer = require('../effects/shimmer.js');
18
+ const require_effects_shimmer_terminal = require('../effects/shimmer-terminal.js');
19
+ const require_env_ci = require('../env/ci.js');
20
+ const require_strings_width = require('../strings/width.js');
21
+ const require_themes_resolve = require('../themes/resolve.js');
22
+ const require_spinner_format = require('./format.js');
23
+ const require_spinner_default = require('./default.js');
24
+ let src_external__socketregistry_yocto_spinner = require("../external/@socketregistry/yocto-spinner");
25
+ src_external__socketregistry_yocto_spinner = require_runtime.__toESM(src_external__socketregistry_yocto_spinner);
26
+
27
+ //#region src/spinner/spinner.ts
56
28
  let _Spinner;
57
29
  let _defaultSpinner;
58
- // @__NO_SIDE_EFFECTS__
30
+ /**
31
+ * Create a spinner instance for displaying loading indicators. Provides an
32
+ * animated CLI spinner with status messages, progress tracking, and shimmer
33
+ * effects.
34
+ *
35
+ * AUTO-CLEAR BEHAVIOR:
36
+ *
37
+ * - All *AndStop() methods AUTO-CLEAR the spinner line via yocto-spinner.stop()
38
+ * Examples: `doneAndStop()`, `successAndStop()`, `failAndStop()`, etc.
39
+ * - Methods WITHOUT "AndStop" do NOT clear (spinner keeps spinning) Examples:
40
+ * `done()`, `success()`, `fail()`, etc.
41
+ *
42
+ * STREAM USAGE:
43
+ *
44
+ * - Spinner animation: stderr (yocto-spinner default)
45
+ * - Status methods (done, success, fail, info, warn, step, substep): stderr
46
+ * - Data methods (`log()`): stdout
47
+ *
48
+ * COMPARISON WITH LOGGER:
49
+ *
50
+ * - `logger.done()` does NOT auto-clear (requires manual `logger.clearLine()`)
51
+ * - `spinner.doneAndStop()` DOES auto-clear (built into yocto-spinner.stop())
52
+ * - Pattern: `logger.clearLine().done()` vs `spinner.doneAndStop()`
53
+ *
54
+ * @param options - Configuration options for the spinner.
55
+ *
56
+ * @returns New spinner instance
57
+ */
58
+ /* @__NO_SIDE_EFFECTS__ */
59
59
  function Spinner(options) {
60
- if (_Spinner === void 0) {
61
- const YoctoCtor = import_yocto_spinner.default;
62
- const tempInstance = YoctoCtor({});
63
- const YoctoSpinnerClass = tempInstance.constructor;
64
- const logger = (0, import_default.getDefaultLogger)();
65
- _Spinner = class SpinnerClass extends YoctoSpinnerClass {
66
- #baseText = "";
67
- #indentation = "";
68
- #progress;
69
- #shimmer;
70
- #shimmerSavedConfig;
71
- constructor(options2) {
72
- const opts = { __proto__: null, ...options2 };
73
- let theme = (0, import_context.getTheme)();
74
- if (opts.theme) {
75
- if (typeof opts.theme === "string") {
76
- theme = import_themes.THEMES[opts.theme] ?? theme;
77
- } else {
78
- theme = opts.theme;
79
- }
80
- }
81
- let defaultColor = theme.colors.primary;
82
- if (theme.effects?.spinner?.color) {
83
- const resolved = (0, import_resolve.resolveColor)(
84
- theme.effects.spinner.color,
85
- theme.colors
86
- );
87
- if (resolved === "inherit" || (0, import_array.ArrayIsArray)(resolved[0])) {
88
- defaultColor = theme.colors.primary;
89
- } else {
90
- defaultColor = resolved;
91
- }
92
- }
93
- const spinnerColor = opts.color ?? defaultColor;
94
- if ((0, import_convert.isRgbTuple)(spinnerColor) && (spinnerColor.length !== 3 || !spinnerColor.every(
95
- (n) => typeof n === "number" && n >= 0 && n <= 255
96
- ))) {
97
- throw new import_error.TypeErrorCtor(
98
- "RGB color must be an array of 3 numbers between 0 and 255"
99
- );
100
- }
101
- const spinnerColorRgb = (0, import_convert.toRgb)(spinnerColor);
102
- let shimmerInfo;
103
- if (opts.shimmer) {
104
- let shimmerDir;
105
- let shimmerColor;
106
- let shimmerSpeed = 1 / 3;
107
- if (typeof opts.shimmer === "string") {
108
- shimmerDir = opts.shimmer;
109
- shimmerColor = import_format.COLOR_INHERIT;
110
- } else {
111
- const shimmerConfig = {
112
- __proto__: null,
113
- ...opts.shimmer
114
- };
115
- shimmerDir = shimmerConfig.dir ?? "ltr";
116
- shimmerColor = shimmerConfig.color ?? import_format.COLOR_INHERIT;
117
- shimmerSpeed = shimmerConfig.speed ?? 1 / 3;
118
- }
119
- shimmerInfo = {
120
- __proto__: null,
121
- color: shimmerColor,
122
- direction: shimmerDir,
123
- speed: shimmerSpeed,
124
- frame: 0
125
- };
126
- }
127
- super({
128
- signal: (0, import_abort.getAbortSignal)(),
129
- ...opts,
130
- // Pass RGB color directly to yocto-spinner (it now supports RGB).
131
- color: spinnerColorRgb,
132
- // onRenderFrame callback provides full control over frame + text layout.
133
- // Calculates spacing based on frame width to prevent text jumping.
134
- onRenderFrame: (frame, text, applyColor) => {
135
- const width = (0, import_width.stringWidth)(frame);
136
- const spacing = width === 1 ? " " : " ";
137
- return frame ? `${applyColor(frame)}${spacing}${text}` : text;
138
- },
139
- // onFrameUpdate callback is called by yocto-spinner whenever a frame advances.
140
- // This ensures shimmer updates are perfectly synchronized with animation beats.
141
- onFrameUpdate: shimmerInfo ? () => {
142
- if (this.#baseText) {
143
- super.text = this.#buildDisplayText();
144
- }
145
- } : void 0
146
- });
147
- this.#shimmer = shimmerInfo;
148
- this.#shimmerSavedConfig = shimmerInfo;
149
- }
150
- // Override color getter to ensure it's always RGB.
151
- get color() {
152
- const value = super.color;
153
- return (0, import_convert.isRgbTuple)(value) ? value : (0, import_convert.toRgb)(value);
154
- }
155
- // Override color setter to always convert to RGB before passing to yocto-spinner.
156
- set color(value) {
157
- super.color = (0, import_convert.isRgbTuple)(value) ? value : (0, import_convert.toRgb)(value);
158
- }
159
- // Getter to expose current shimmer state.
160
- get shimmerState() {
161
- if (!this.#shimmer) {
162
- return void 0;
163
- }
164
- return {
165
- __proto__: null,
166
- color: this.#shimmer.color,
167
- direction: this.#shimmer.direction,
168
- speed: this.#shimmer.speed,
169
- frame: this.#shimmer.frame
170
- };
171
- }
172
- /**
173
- * Apply a yocto-spinner method and update logger state. Handles text
174
- * normalization, extra arguments, and logger tracking.
175
- *
176
- * @private
177
- */
178
- #apply(methodName, args) {
179
- let extras;
180
- let text = (0, import_array.ArrayPrototypeAt)(args, 0);
181
- if (typeof text === "string") {
182
- extras = (0, import_array.ArrayPrototypeSlice)(args, 1);
183
- } else {
184
- extras = args;
185
- text = "";
186
- }
187
- const wasSpinning = this.isSpinning;
188
- const normalized = (0, import_format.normalizeText)(text);
189
- if (methodName === "stop" && !normalized) {
190
- super[methodName]();
191
- } else {
192
- super[methodName](normalized);
193
- }
194
- if (methodName === "stop") {
195
- if (wasSpinning && normalized) {
196
- logger[import_symbols.lastWasBlankSymbol]((0, import_predicates.isBlankString)(normalized));
197
- logger[import_symbols.incLogCallCountSymbol]();
198
- }
199
- } else {
200
- logger[import_symbols.lastWasBlankSymbol](false);
201
- logger[import_symbols.incLogCallCountSymbol]();
202
- }
203
- if (extras.length) {
204
- logger.log(...extras);
205
- logger[import_symbols.lastWasBlankSymbol](false);
206
- }
207
- return this;
208
- }
209
- /**
210
- * Build the complete display text with progress, shimmer, and
211
- * indentation. Combines base text, progress bar, shimmer effects, and
212
- * indentation.
213
- *
214
- * @private
215
- */
216
- #buildDisplayText() {
217
- let displayText = this.#baseText;
218
- if (this.#progress) {
219
- const progressText = (0, import_format.formatProgress)(this.#progress);
220
- displayText = displayText ? `${displayText} ${progressText}` : progressText;
221
- }
222
- if (displayText && this.#shimmer) {
223
- let shimmerColor;
224
- if (this.#shimmer.color === import_format.COLOR_INHERIT) {
225
- shimmerColor = this.color;
226
- } else if ((0, import_array.ArrayIsArray)(this.#shimmer.color[0])) {
227
- shimmerColor = this.#shimmer.color;
228
- } else {
229
- shimmerColor = (0, import_convert.toRgb)(this.#shimmer.color);
230
- }
231
- if (!(0, import_ci.getCI)() && this.#shimmer.direction !== "none") {
232
- const chars = [...displayText];
233
- const spec = (0, import_shimmer.configToSpec)(
234
- {
235
- color: shimmerColor,
236
- dir: this.#shimmer.direction,
237
- speed: this.#shimmer.speed
238
- },
239
- chars.length
240
- );
241
- const colors = (0, import_shimmer.frameColors)(spec, chars.length, this.#shimmer.frame);
242
- displayText = (0, import_shimmer_terminal.colorsToAnsi)(displayText, colors);
243
- this.#shimmer.frame++;
244
- }
245
- }
246
- if (this.#indentation && displayText) {
247
- displayText = this.#indentation + displayText;
248
- }
249
- return displayText;
250
- }
251
- /**
252
- * Show a status message without stopping the spinner. Outputs the symbol
253
- * and message to stderr, then continues spinning.
254
- *
255
- * @private
256
- */
257
- #showStatusAndKeepSpinning(symbolType, args) {
258
- let text = (0, import_array.ArrayPrototypeAt)(args, 0);
259
- let extras;
260
- if (typeof text === "string") {
261
- extras = (0, import_array.ArrayPrototypeSlice)(args, 1);
262
- } else {
263
- extras = args;
264
- text = "";
265
- }
266
- logger.error(`${import_symbols.LOG_SYMBOLS[symbolType]} ${text}`, ...extras);
267
- return this;
268
- }
269
- /**
270
- * Update the spinner's displayed text. Rebuilds display text and triggers
271
- * render.
272
- *
273
- * @private
274
- */
275
- #updateSpinnerText() {
276
- super.text = this.#buildDisplayText();
277
- }
278
- /**
279
- * Show a debug message (ℹ) without stopping the spinner. Only displays if
280
- * debug mode is enabled via environment variable. Outputs to stderr and
281
- * continues spinning.
282
- *
283
- * @param text - Debug message to display.
284
- * @param extras - Additional values to log.
285
- *
286
- * @returns This spinner for chaining
287
- */
288
- debug(text, ...extras) {
289
- if ((0, import_namespace.isDebug)()) {
290
- return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
291
- }
292
- return this;
293
- }
294
- /**
295
- * Show a debug message (ℹ) and stop the spinner. Only displays if debug
296
- * mode is enabled via environment variable. Auto-clears the spinner line
297
- * before displaying the message.
298
- *
299
- * @param text - Debug message to display.
300
- * @param extras - Additional values to log.
301
- *
302
- * @returns This spinner for chaining
303
- */
304
- debugAndStop(text, ...extras) {
305
- if ((0, import_namespace.isDebug)()) {
306
- return this.#apply("info", [text, ...extras]);
307
- }
308
- return this;
309
- }
310
- /**
311
- * Decrease indentation level by removing spaces from the left. Pass 0 to
312
- * reset indentation to zero completely.
313
- *
314
- * @default spaces=2
315
- *
316
- * @param spaces - Number of spaces to remove.
317
- *
318
- * @returns This spinner for chaining
319
- */
320
- dedent(spaces) {
321
- if (spaces === 0) {
322
- this.#indentation = "";
323
- } else {
324
- const amount = spaces ?? 2;
325
- const newLength = (0, import_math.MathMax)(0, this.#indentation.length - amount);
326
- this.#indentation = this.#indentation.slice(0, newLength);
327
- }
328
- this.#updateSpinnerText();
329
- return this;
330
- }
331
- /**
332
- * Disable shimmer effect. Preserves config for later re-enable via
333
- * enableShimmer().
334
- *
335
- * @example
336
- * spinner.disableShimmer()
337
- *
338
- * @returns This spinner for chaining
339
- */
340
- disableShimmer() {
341
- this.#shimmer = void 0;
342
- this.#updateSpinnerText();
343
- return this;
344
- }
345
- /**
346
- * Show a done/success message (✓) without stopping the spinner. Alias for
347
- * `success()` with a shorter name.
348
- *
349
- * DESIGN DECISION: Unlike yocto-spinner, our `done()` does NOT stop the
350
- * spinner. Use `doneAndStop()` if you want to stop the spinner.
351
- *
352
- * @param text - Message to display.
353
- * @param extras - Additional values to log.
354
- *
355
- * @returns This spinner for chaining
356
- */
357
- done(text, ...extras) {
358
- return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
359
- }
360
- /**
361
- * Show a done/success message (✓) and stop the spinner. Auto-clears the
362
- * spinner line before displaying the success message.
363
- *
364
- * @param text - Message to display.
365
- * @param extras - Additional values to log.
366
- *
367
- * @returns This spinner for chaining
368
- */
369
- doneAndStop(text, ...extras) {
370
- return this.#apply("success", [text, ...extras]);
371
- }
372
- /**
373
- * Enable shimmer effect. Restores saved config or uses defaults if no
374
- * saved config exists.
375
- *
376
- * @example
377
- * spinner.enableShimmer()
378
- *
379
- * @returns This spinner for chaining
380
- */
381
- enableShimmer() {
382
- if (this.#shimmerSavedConfig) {
383
- this.#shimmer = { ...this.#shimmerSavedConfig, frame: 0 };
384
- } else {
385
- this.#shimmer = {
386
- __proto__: null,
387
- color: import_format.COLOR_INHERIT,
388
- direction: "ltr",
389
- speed: 1 / 3,
390
- frame: 0
391
- };
392
- this.#shimmerSavedConfig = this.#shimmer;
393
- }
394
- this.#updateSpinnerText();
395
- return this;
396
- }
397
- /**
398
- * Show a failure message (✗) without stopping the spinner. DESIGN
399
- * DECISION: Unlike yocto-spinner, our `fail()` does NOT stop the spinner.
400
- * This allows displaying errors while continuing to spin. Use
401
- * `failAndStop()` if you want to stop the spinner.
402
- *
403
- * @param text - Error message to display.
404
- * @param extras - Additional values to log.
405
- *
406
- * @returns This spinner for chaining
407
- */
408
- fail(text, ...extras) {
409
- return this.#showStatusAndKeepSpinning("fail", [text, ...extras]);
410
- }
411
- /**
412
- * Show a failure message (✗) and stop the spinner. Auto-clears the
413
- * spinner line before displaying the error message.
414
- *
415
- * @param text - Error message to display.
416
- * @param extras - Additional values to log.
417
- *
418
- * @returns This spinner for chaining
419
- */
420
- failAndStop(text, ...extras) {
421
- return this.#apply("error", [text, ...extras]);
422
- }
423
- /**
424
- * Increase indentation level by adding spaces to the left. Pass 0 to
425
- * reset indentation to zero completely.
426
- *
427
- * @default spaces=2
428
- *
429
- * @param spaces - Number of spaces to add.
430
- *
431
- * @returns This spinner for chaining
432
- */
433
- indent(spaces) {
434
- if (spaces === 0) {
435
- this.#indentation = "";
436
- } else {
437
- const amount = spaces ?? 2;
438
- this.#indentation += " ".repeat(amount);
439
- }
440
- this.#updateSpinnerText();
441
- return this;
442
- }
443
- /**
444
- * Show an info message (ℹ) without stopping the spinner. Outputs to
445
- * stderr and continues spinning.
446
- *
447
- * @param text - Info message to display.
448
- * @param extras - Additional values to log.
449
- *
450
- * @returns This spinner for chaining
451
- */
452
- info(text, ...extras) {
453
- return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
454
- }
455
- /**
456
- * Show an info message (ℹ) and stop the spinner. Auto-clears the spinner
457
- * line before displaying the message.
458
- *
459
- * @param text - Info message to display.
460
- * @param extras - Additional values to log.
461
- *
462
- * @returns This spinner for chaining
463
- */
464
- infoAndStop(text, ...extras) {
465
- return this.#apply("info", [text, ...extras]);
466
- }
467
- /**
468
- * Log a message to stdout without stopping the spinner. Unlike other
469
- * status methods, this outputs to stdout for data logging.
470
- *
471
- * @param args - Values to log to stdout.
472
- *
473
- * @returns This spinner for chaining
474
- */
475
- log(...args) {
476
- logger.log(...args);
477
- return this;
478
- }
479
- /**
480
- * Log a message to stdout and stop the spinner. Auto-clears the spinner
481
- * line before displaying the message.
482
- *
483
- * @param text - Message to display.
484
- * @param extras - Additional values to log.
485
- *
486
- * @returns This spinner for chaining
487
- */
488
- logAndStop(text, ...extras) {
489
- return this.#apply("stop", [text, ...extras]);
490
- }
491
- /**
492
- * Update progress information displayed with the spinner. Shows a
493
- * progress bar with percentage and optional unit label.
494
- *
495
- * @param current - Current progress value.
496
- * @param total - Total/maximum progress value.
497
- * @param unit - Optional unit label (e.g., 'files', 'items')
498
- *
499
- * @returns This spinner for chaining
500
- */
501
- progress = (current, total, unit) => {
502
- this.#progress = {
503
- __proto__: null,
504
- current,
505
- total,
506
- ...unit ? { unit } : {}
507
- };
508
- this.#updateSpinnerText();
509
- return this;
510
- };
511
- /**
512
- * Increment progress by a specified amount. Updates the progress bar
513
- * displayed with the spinner. Clamps the result between 0 and the total
514
- * value.
515
- *
516
- * @default amount=1
517
- *
518
- * @param amount - Amount to increment by.
519
- *
520
- * @returns This spinner for chaining
521
- */
522
- progressStep(amount = 1) {
523
- if (this.#progress) {
524
- const newCurrent = this.#progress.current + amount;
525
- this.#progress = {
526
- __proto__: null,
527
- current: (0, import_math.MathMax)(0, Math.min(newCurrent, this.#progress.total)),
528
- total: this.#progress.total,
529
- ...this.#progress.unit ? { unit: this.#progress.unit } : {}
530
- };
531
- this.#updateSpinnerText();
532
- }
533
- return this;
534
- }
535
- /**
536
- * Show a skip message (↻) without stopping the spinner. Outputs to stderr
537
- * and continues spinning.
538
- *
539
- * @param text - Skip message to display.
540
- * @param extras - Additional values to log.
541
- *
542
- * @returns This spinner for chaining
543
- */
544
- skip(text, ...extras) {
545
- return this.#showStatusAndKeepSpinning("skip", [text, ...extras]);
546
- }
547
- /**
548
- * Show a skip message (↻) and stop the spinner. Auto-clears the spinner
549
- * line before displaying the message.
550
- *
551
- * Implementation note: Unlike other *AndStop methods (successAndStop,
552
- * failAndStop, etc.), this method cannot use #apply() with a 'skip'
553
- * method name because yocto-spinner doesn't have a built-in 'skip'
554
- * method. Instead, we manually stop the spinner then log the message with
555
- * the skip symbol.
556
- *
557
- * @param text - Skip message to display.
558
- * @param extras - Additional values to log.
559
- *
560
- * @returns This spinner for chaining
561
- */
562
- skipAndStop(text, ...extras) {
563
- this.#apply("stop", []);
564
- const normalized = (0, import_format.normalizeText)(text);
565
- if (normalized) {
566
- logger.error(`${import_symbols.LOG_SYMBOLS["skip"]} ${normalized}`, ...extras);
567
- }
568
- return this;
569
- }
570
- /**
571
- * Set complete shimmer configuration. Replaces any existing shimmer
572
- * config with the provided values. Undefined properties will use default
573
- * values.
574
- *
575
- * @example
576
- * spinner.setShimmer({
577
- * color: [255, 0, 0],
578
- * dir: 'rtl',
579
- * speed: 0.5,
580
- * })
581
- *
582
- * @param config - Complete shimmer configuration.
583
- *
584
- * @returns This spinner for chaining
585
- */
586
- setShimmer(config) {
587
- this.#shimmer = {
588
- __proto__: null,
589
- color: config.color ?? import_format.COLOR_INHERIT,
590
- direction: config.dir ?? "ltr",
591
- speed: config.speed ?? 1 / 3,
592
- frame: 0
593
- };
594
- this.#shimmerSavedConfig = this.#shimmer;
595
- this.#updateSpinnerText();
596
- return this;
597
- }
598
- /**
599
- * Start the spinner animation with optional text. Begins displaying the
600
- * animated spinner on stderr.
601
- *
602
- * @param text - Optional text to display with the spinner.
603
- *
604
- * @returns This spinner for chaining
605
- */
606
- start(...args) {
607
- if (args.length) {
608
- const text = (0, import_array.ArrayPrototypeAt)(args, 0);
609
- const normalized = (0, import_format.normalizeText)(text);
610
- if (!normalized) {
611
- this.#baseText = "";
612
- super.text = "";
613
- } else {
614
- this.#baseText = normalized;
615
- }
616
- }
617
- this.#updateSpinnerText();
618
- return this.#apply("start", []);
619
- }
620
- /**
621
- * Log a main step message to stderr without stopping the spinner. Adds a
622
- * blank line before the message for visual separation. Aligns with
623
- * `logger.step()` to use stderr for status messages.
624
- *
625
- * @param text - Step message to display.
626
- * @param extras - Additional values to log.
627
- *
628
- * @returns This spinner for chaining
629
- */
630
- step(text, ...extras) {
631
- if (typeof text === "string") {
632
- logger.error("");
633
- logger.error(text, ...extras);
634
- }
635
- return this;
636
- }
637
- /**
638
- * Stop the spinner animation and clear internal state. Auto-clears the
639
- * spinner line via yocto-spinner.stop(). Resets progress, shimmer, and
640
- * text state.
641
- *
642
- * @param text - Optional final text to display after stopping.
643
- *
644
- * @returns This spinner for chaining
645
- */
646
- stop(...args) {
647
- this.#baseText = "";
648
- this.#progress = void 0;
649
- this.#shimmer = void 0;
650
- const result = this.#apply("stop", args);
651
- return result;
652
- }
653
- /**
654
- * Log an indented substep message to stderr without stopping the spinner.
655
- * Adds 2-space indentation to the message. Aligns with `logger.substep()`
656
- * to use stderr for status messages.
657
- *
658
- * @param text - Substep message to display.
659
- * @param extras - Additional values to log.
660
- *
661
- * @returns This spinner for chaining
662
- */
663
- substep(text, ...extras) {
664
- if (typeof text === "string") {
665
- logger.error(` ${text}`, ...extras);
666
- }
667
- return this;
668
- }
669
- /**
670
- * Show a success message (✓) without stopping the spinner. DESIGN
671
- * DECISION: Unlike yocto-spinner, our `success()` does NOT stop the
672
- * spinner. This allows displaying success messages while continuing to
673
- * spin for multi-step operations. Use `successAndStop()` if you want to
674
- * stop the spinner.
675
- *
676
- * @param text - Success message to display.
677
- * @param extras - Additional values to log.
678
- *
679
- * @returns This spinner for chaining
680
- */
681
- success(text, ...extras) {
682
- return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
683
- }
684
- /**
685
- * Show a success message (✓) and stop the spinner. Auto-clears the
686
- * spinner line before displaying the success message.
687
- *
688
- * @param text - Success message to display.
689
- * @param extras - Additional values to log.
690
- *
691
- * @returns This spinner for chaining
692
- */
693
- successAndStop(text, ...extras) {
694
- return this.#apply("success", [text, ...extras]);
695
- }
696
- text(value) {
697
- if (arguments.length === 0) {
698
- return this.#baseText;
699
- }
700
- this.#baseText = value ?? "";
701
- this.#updateSpinnerText();
702
- return this;
703
- }
704
- /**
705
- * Update partial shimmer configuration. Merges with existing config,
706
- * enabling shimmer if currently disabled.
707
- *
708
- * @example
709
- * // Update just the speed
710
- * spinner.updateShimmer({ speed: 0.5 })
711
- *
712
- * // Update direction
713
- * spinner.updateShimmer({ dir: 'rtl' })
714
- *
715
- * // Update multiple properties
716
- * spinner.updateShimmer({ color: [255, 0, 0], speed: 0.8 })
717
- *
718
- * @param config - Partial shimmer configuration to merge.
719
- *
720
- * @returns This spinner for chaining
721
- */
722
- updateShimmer(config) {
723
- const partialConfig = {
724
- __proto__: null,
725
- ...config
726
- };
727
- const update = {
728
- __proto__: null
729
- };
730
- if (partialConfig.color !== void 0) {
731
- update.color = partialConfig.color;
732
- }
733
- if (partialConfig.dir !== void 0) {
734
- update.direction = partialConfig.dir;
735
- }
736
- if (partialConfig.speed !== void 0) {
737
- update.speed = partialConfig.speed;
738
- }
739
- if (this.#shimmer) {
740
- this.#shimmer = { ...this.#shimmer, ...update };
741
- } else if (this.#shimmerSavedConfig) {
742
- this.#shimmer = {
743
- ...this.#shimmerSavedConfig,
744
- ...update,
745
- frame: 0
746
- };
747
- } else {
748
- this.#shimmer = {
749
- __proto__: null,
750
- color: import_format.COLOR_INHERIT,
751
- direction: "ltr",
752
- speed: 1 / 3,
753
- frame: 0,
754
- ...update
755
- };
756
- }
757
- this.#shimmerSavedConfig = this.#shimmer;
758
- this.#updateSpinnerText();
759
- return this;
760
- }
761
- /**
762
- * Show a warning message (⚠) without stopping the spinner. Outputs to
763
- * stderr and continues spinning.
764
- *
765
- * @param text - Warning message to display.
766
- * @param extras - Additional values to log.
767
- *
768
- * @returns This spinner for chaining
769
- */
770
- warn(text, ...extras) {
771
- return this.#showStatusAndKeepSpinning("warn", [text, ...extras]);
772
- }
773
- /**
774
- * Show a warning message (⚠) and stop the spinner. Auto-clears the
775
- * spinner line before displaying the warning message.
776
- *
777
- * @param text - Warning message to display.
778
- * @param extras - Additional values to log.
779
- *
780
- * @returns This spinner for chaining
781
- */
782
- warnAndStop(text, ...extras) {
783
- return this.#apply("warning", [text, ...extras]);
784
- }
785
- };
786
- (0, import_object.ObjectDefineProperties)(_Spinner.prototype, {
787
- error: (0, import_format.desc)(_Spinner.prototype.fail),
788
- errorAndStop: (0, import_format.desc)(_Spinner.prototype.failAndStop),
789
- warning: (0, import_format.desc)(_Spinner.prototype.warn),
790
- warningAndStop: (0, import_format.desc)(_Spinner.prototype.warnAndStop)
791
- });
792
- _defaultSpinner = (0, import_ci.getCI)() ? import_format.ciSpinner : (0, import_default2.getCliSpinners)("socket");
793
- }
794
- return new _Spinner({
795
- spinner: _defaultSpinner,
796
- ...options
797
- });
60
+ if (_Spinner === void 0) {
61
+ const YoctoSpinnerClass = (0, src_external__socketregistry_yocto_spinner.default)({}).constructor;
62
+ /* c8 ignore stop */
63
+ const logger = require_logger_default.getDefaultLogger();
64
+ _Spinner = class SpinnerClass extends YoctoSpinnerClass {
65
+ #baseText = "";
66
+ #indentation = "";
67
+ #progress;
68
+ #shimmer;
69
+ #shimmerSavedConfig;
70
+ constructor(options) {
71
+ const opts = {
72
+ __proto__: null,
73
+ ...options
74
+ };
75
+ let theme = require_themes_context.getTheme();
76
+ if (opts.theme) if (typeof opts.theme === "string") theme = require_themes_themes.THEMES[opts.theme] ?? theme;
77
+ else theme = opts.theme;
78
+ let defaultColor = theme.colors.primary;
79
+ if (theme.effects?.spinner?.color) {
80
+ const resolved = require_themes_resolve.resolveColor(theme.effects.spinner.color, theme.colors);
81
+ if (resolved === "inherit" || require_primordials_array.ArrayIsArray(resolved[0])) defaultColor = theme.colors.primary;
82
+ else defaultColor = resolved;
83
+ }
84
+ const spinnerColor = opts.color ?? defaultColor;
85
+ if (require_colors_convert.isRgbTuple(spinnerColor) && (spinnerColor.length !== 3 || !spinnerColor.every((n) => typeof n === "number" && n >= 0 && n <= 255))) throw new require_primordials_error.TypeErrorCtor("RGB color must be an array of 3 numbers between 0 and 255");
86
+ const spinnerColorRgb = require_colors_convert.toRgb(spinnerColor);
87
+ let shimmerInfo;
88
+ if (opts.shimmer) {
89
+ let shimmerDir;
90
+ let shimmerColor;
91
+ let shimmerSpeed = 1 / 3;
92
+ if (typeof opts.shimmer === "string") {
93
+ shimmerDir = opts.shimmer;
94
+ shimmerColor = require_spinner_format.COLOR_INHERIT;
95
+ } else {
96
+ const shimmerConfig = {
97
+ __proto__: null,
98
+ ...opts.shimmer
99
+ };
100
+ shimmerDir = shimmerConfig.dir ?? "ltr";
101
+ shimmerColor = shimmerConfig.color ?? "inherit";
102
+ shimmerSpeed = shimmerConfig.speed ?? 1 / 3;
103
+ }
104
+ shimmerInfo = {
105
+ __proto__: null,
106
+ color: shimmerColor,
107
+ direction: shimmerDir,
108
+ speed: shimmerSpeed,
109
+ frame: 0
110
+ };
111
+ }
112
+ super({
113
+ signal: require_process_abort.getAbortSignal(),
114
+ ...opts,
115
+ color: spinnerColorRgb,
116
+ onRenderFrame: (frame, text, applyColor) => {
117
+ const spacing = /* @__PURE__ */ require_strings_width.stringWidth(frame) === 1 ? " " : " ";
118
+ return frame ? `${applyColor(frame)}${spacing}${text}` : text;
119
+ },
120
+ onFrameUpdate: shimmerInfo ? () => {
121
+ if (this.#baseText) super.text = this.#buildDisplayText();
122
+ } : void 0
123
+ });
124
+ this.#shimmer = shimmerInfo;
125
+ this.#shimmerSavedConfig = shimmerInfo;
126
+ }
127
+ get color() {
128
+ const value = super.color;
129
+ return require_colors_convert.isRgbTuple(value) ? value : require_colors_convert.toRgb(value);
130
+ }
131
+ set color(value) {
132
+ super.color = require_colors_convert.isRgbTuple(value) ? value : require_colors_convert.toRgb(value);
133
+ }
134
+ get shimmerState() {
135
+ if (!this.#shimmer) return;
136
+ return {
137
+ __proto__: null,
138
+ color: this.#shimmer.color,
139
+ direction: this.#shimmer.direction,
140
+ speed: this.#shimmer.speed,
141
+ frame: this.#shimmer.frame
142
+ };
143
+ }
144
+ /**
145
+ * Apply a yocto-spinner method and update logger state. Handles text
146
+ * normalization, extra arguments, and logger tracking.
147
+ *
148
+ * @private
149
+ */
150
+ #apply(methodName, args) {
151
+ let extras;
152
+ let text = require_primordials_array.ArrayPrototypeAt(args, 0);
153
+ if (typeof text === "string") extras = require_primordials_array.ArrayPrototypeSlice(args, 1);
154
+ else {
155
+ extras = args;
156
+ text = "";
157
+ }
158
+ const wasSpinning = this.isSpinning;
159
+ const normalized = require_spinner_format.normalizeText(text);
160
+ if (methodName === "stop" && !normalized) super[methodName]();
161
+ else super[methodName](normalized);
162
+ if (methodName === "stop") {
163
+ if (wasSpinning && normalized) {
164
+ logger[require_logger_symbols.lastWasBlankSymbol](/* @__PURE__ */ require_strings_predicates.isBlankString(normalized));
165
+ logger[require_logger_symbols.incLogCallCountSymbol]();
166
+ }
167
+ } else {
168
+ logger[require_logger_symbols.lastWasBlankSymbol](false);
169
+ logger[require_logger_symbols.incLogCallCountSymbol]();
170
+ }
171
+ /* c8 ignore start */
172
+ if (extras.length) {
173
+ logger.log(...extras);
174
+ logger[require_logger_symbols.lastWasBlankSymbol](false);
175
+ }
176
+ /* c8 ignore stop */
177
+ return this;
178
+ }
179
+ /**
180
+ * Build the complete display text with progress, shimmer, and
181
+ * indentation. Combines base text, progress bar, shimmer effects, and
182
+ * indentation.
183
+ *
184
+ * @private
185
+ */
186
+ #buildDisplayText() {
187
+ let displayText = this.#baseText;
188
+ /* c8 ignore start */
189
+ if (this.#progress) {
190
+ const progressText = require_spinner_format.formatProgress(this.#progress);
191
+ displayText = displayText ? `${displayText} ${progressText}` : progressText;
192
+ }
193
+ if (displayText && this.#shimmer) {
194
+ let shimmerColor;
195
+ if (this.#shimmer.color === "inherit") shimmerColor = this.color;
196
+ else if (require_primordials_array.ArrayIsArray(this.#shimmer.color[0])) shimmerColor = this.#shimmer.color;
197
+ else shimmerColor = require_colors_convert.toRgb(this.#shimmer.color);
198
+ if (!/* @__PURE__ */ require_env_ci.getCI() && this.#shimmer.direction !== "none") {
199
+ const chars = [...displayText];
200
+ const colors = require_effects_shimmer.frameColors(require_effects_shimmer.configToSpec({
201
+ color: shimmerColor,
202
+ dir: this.#shimmer.direction,
203
+ speed: this.#shimmer.speed
204
+ }, chars.length), chars.length, this.#shimmer.frame);
205
+ displayText = require_effects_shimmer_terminal.colorsToAnsi(displayText, colors);
206
+ this.#shimmer.frame++;
207
+ }
208
+ }
209
+ if (this.#indentation && displayText) displayText = this.#indentation + displayText;
210
+ /* c8 ignore stop */
211
+ return displayText;
212
+ }
213
+ /**
214
+ * Show a status message without stopping the spinner. Outputs the symbol
215
+ * and message to stderr, then continues spinning.
216
+ *
217
+ * @private
218
+ */
219
+ #showStatusAndKeepSpinning(symbolType, args) {
220
+ let text = require_primordials_array.ArrayPrototypeAt(args, 0);
221
+ let extras;
222
+ if (typeof text === "string") extras = require_primordials_array.ArrayPrototypeSlice(args, 1);
223
+ else {
224
+ extras = args;
225
+ text = "";
226
+ }
227
+ logger.error(`${require_logger_symbols.LOG_SYMBOLS[symbolType]} ${text}`, ...extras);
228
+ return this;
229
+ }
230
+ /**
231
+ * Update the spinner's displayed text. Rebuilds display text and triggers
232
+ * render.
233
+ *
234
+ * @private
235
+ */
236
+ #updateSpinnerText() {
237
+ super.text = this.#buildDisplayText();
238
+ }
239
+ /**
240
+ * Show a debug message (ℹ) without stopping the spinner. Only displays if
241
+ * debug mode is enabled via environment variable. Outputs to stderr and
242
+ * continues spinning.
243
+ *
244
+ * @param text - Debug message to display.
245
+ * @param extras - Additional values to log.
246
+ *
247
+ * @returns This spinner for chaining
248
+ */
249
+ debug(text, ...extras) {
250
+ if (/* @__PURE__ */ require_debug_namespace.isDebug()) return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
251
+ return this;
252
+ }
253
+ /**
254
+ * Show a debug message (ℹ) and stop the spinner. Only displays if debug
255
+ * mode is enabled via environment variable. Auto-clears the spinner line
256
+ * before displaying the message.
257
+ *
258
+ * @param text - Debug message to display.
259
+ * @param extras - Additional values to log.
260
+ *
261
+ * @returns This spinner for chaining
262
+ */
263
+ debugAndStop(text, ...extras) {
264
+ if (/* @__PURE__ */ require_debug_namespace.isDebug()) return this.#apply("info", [text, ...extras]);
265
+ return this;
266
+ }
267
+ /**
268
+ * Decrease indentation level by removing spaces from the left. Pass 0 to
269
+ * reset indentation to zero completely.
270
+ *
271
+ * @default spaces=2
272
+ *
273
+ * @param spaces - Number of spaces to remove.
274
+ *
275
+ * @returns This spinner for chaining
276
+ */
277
+ dedent(spaces) {
278
+ if (spaces === 0) this.#indentation = "";
279
+ else {
280
+ const amount = spaces ?? 2;
281
+ const newLength = require_primordials_math.MathMax(0, this.#indentation.length - amount);
282
+ this.#indentation = this.#indentation.slice(0, newLength);
283
+ }
284
+ this.#updateSpinnerText();
285
+ return this;
286
+ }
287
+ /**
288
+ * Disable shimmer effect. Preserves config for later re-enable via
289
+ * enableShimmer().
290
+ *
291
+ * @example
292
+ * spinner.disableShimmer()
293
+ *
294
+ * @returns This spinner for chaining
295
+ */
296
+ disableShimmer() {
297
+ this.#shimmer = void 0;
298
+ this.#updateSpinnerText();
299
+ return this;
300
+ }
301
+ /**
302
+ * Show a done/success message (✓) without stopping the spinner. Alias for
303
+ * `success()` with a shorter name.
304
+ *
305
+ * DESIGN DECISION: Unlike yocto-spinner, our `done()` does NOT stop the
306
+ * spinner. Use `doneAndStop()` if you want to stop the spinner.
307
+ *
308
+ * @param text - Message to display.
309
+ * @param extras - Additional values to log.
310
+ *
311
+ * @returns This spinner for chaining
312
+ */
313
+ done(text, ...extras) {
314
+ return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
315
+ }
316
+ /**
317
+ * Show a done/success message (✓) and stop the spinner. Auto-clears the
318
+ * spinner line before displaying the success message.
319
+ *
320
+ * @param text - Message to display.
321
+ * @param extras - Additional values to log.
322
+ *
323
+ * @returns This spinner for chaining
324
+ */
325
+ doneAndStop(text, ...extras) {
326
+ return this.#apply("success", [text, ...extras]);
327
+ }
328
+ /**
329
+ * Enable shimmer effect. Restores saved config or uses defaults if no
330
+ * saved config exists.
331
+ *
332
+ * @example
333
+ * spinner.enableShimmer()
334
+ *
335
+ * @returns This spinner for chaining
336
+ */
337
+ enableShimmer() {
338
+ if (this.#shimmerSavedConfig) this.#shimmer = {
339
+ ...this.#shimmerSavedConfig,
340
+ frame: 0
341
+ };
342
+ else {
343
+ this.#shimmer = {
344
+ __proto__: null,
345
+ color: require_spinner_format.COLOR_INHERIT,
346
+ direction: "ltr",
347
+ speed: 1 / 3,
348
+ frame: 0
349
+ };
350
+ this.#shimmerSavedConfig = this.#shimmer;
351
+ }
352
+ this.#updateSpinnerText();
353
+ return this;
354
+ }
355
+ /**
356
+ * Show a failure message (✗) without stopping the spinner. DESIGN
357
+ * DECISION: Unlike yocto-spinner, our `fail()` does NOT stop the spinner.
358
+ * This allows displaying errors while continuing to spin. Use
359
+ * `failAndStop()` if you want to stop the spinner.
360
+ *
361
+ * @param text - Error message to display.
362
+ * @param extras - Additional values to log.
363
+ *
364
+ * @returns This spinner for chaining
365
+ */
366
+ fail(text, ...extras) {
367
+ return this.#showStatusAndKeepSpinning("fail", [text, ...extras]);
368
+ }
369
+ /**
370
+ * Show a failure message (✗) and stop the spinner. Auto-clears the
371
+ * spinner line before displaying the error message.
372
+ *
373
+ * @param text - Error message to display.
374
+ * @param extras - Additional values to log.
375
+ *
376
+ * @returns This spinner for chaining
377
+ */
378
+ failAndStop(text, ...extras) {
379
+ return this.#apply("error", [text, ...extras]);
380
+ }
381
+ /**
382
+ * Increase indentation level by adding spaces to the left. Pass 0 to
383
+ * reset indentation to zero completely.
384
+ *
385
+ * @default spaces=2
386
+ *
387
+ * @param spaces - Number of spaces to add.
388
+ *
389
+ * @returns This spinner for chaining
390
+ */
391
+ indent(spaces) {
392
+ /* c8 ignore start */
393
+ if (spaces === 0) this.#indentation = "";
394
+ else {
395
+ const amount = spaces ?? 2;
396
+ this.#indentation += " ".repeat(amount);
397
+ }
398
+ /* c8 ignore stop */
399
+ this.#updateSpinnerText();
400
+ return this;
401
+ }
402
+ /**
403
+ * Show an info message (ℹ) without stopping the spinner. Outputs to
404
+ * stderr and continues spinning.
405
+ *
406
+ * @param text - Info message to display.
407
+ * @param extras - Additional values to log.
408
+ *
409
+ * @returns This spinner for chaining
410
+ */
411
+ info(text, ...extras) {
412
+ return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
413
+ }
414
+ /**
415
+ * Show an info message (ℹ) and stop the spinner. Auto-clears the spinner
416
+ * line before displaying the message.
417
+ *
418
+ * @param text - Info message to display.
419
+ * @param extras - Additional values to log.
420
+ *
421
+ * @returns This spinner for chaining
422
+ */
423
+ infoAndStop(text, ...extras) {
424
+ return this.#apply("info", [text, ...extras]);
425
+ }
426
+ /**
427
+ * Log a message to stdout without stopping the spinner. Unlike other
428
+ * status methods, this outputs to stdout for data logging.
429
+ *
430
+ * @param args - Values to log to stdout.
431
+ *
432
+ * @returns This spinner for chaining
433
+ */
434
+ log(...args) {
435
+ logger.log(...args);
436
+ return this;
437
+ }
438
+ /**
439
+ * Log a message to stdout and stop the spinner. Auto-clears the spinner
440
+ * line before displaying the message.
441
+ *
442
+ * @param text - Message to display.
443
+ * @param extras - Additional values to log.
444
+ *
445
+ * @returns This spinner for chaining
446
+ */
447
+ logAndStop(text, ...extras) {
448
+ return this.#apply("stop", [text, ...extras]);
449
+ }
450
+ /**
451
+ * Update progress information displayed with the spinner. Shows a
452
+ * progress bar with percentage and optional unit label.
453
+ *
454
+ * @param current - Current progress value.
455
+ * @param total - Total/maximum progress value.
456
+ * @param unit - Optional unit label (e.g., 'files', 'items')
457
+ *
458
+ * @returns This spinner for chaining
459
+ */
460
+ progress = (current, total, unit) => {
461
+ this.#progress = {
462
+ __proto__: null,
463
+ current,
464
+ total,
465
+ ...unit ? { unit } : {}
466
+ };
467
+ this.#updateSpinnerText();
468
+ return this;
469
+ };
470
+ /**
471
+ * Increment progress by a specified amount. Updates the progress bar
472
+ * displayed with the spinner. Clamps the result between 0 and the total
473
+ * value.
474
+ *
475
+ * @default amount=1
476
+ *
477
+ * @param amount - Amount to increment by.
478
+ *
479
+ * @returns This spinner for chaining
480
+ */
481
+ progressStep(amount = 1) {
482
+ /* c8 ignore start */
483
+ if (this.#progress) {
484
+ const newCurrent = this.#progress.current + amount;
485
+ this.#progress = {
486
+ __proto__: null,
487
+ current: require_primordials_math.MathMax(0, Math.min(newCurrent, this.#progress.total)),
488
+ total: this.#progress.total,
489
+ ...this.#progress.unit ? { unit: this.#progress.unit } : {}
490
+ };
491
+ this.#updateSpinnerText();
492
+ }
493
+ return this;
494
+ /* c8 ignore stop */
495
+ }
496
+ /**
497
+ * Show a skip message (↻) without stopping the spinner. Outputs to stderr
498
+ * and continues spinning.
499
+ *
500
+ * @param text - Skip message to display.
501
+ * @param extras - Additional values to log.
502
+ *
503
+ * @returns This spinner for chaining
504
+ */
505
+ skip(text, ...extras) {
506
+ return this.#showStatusAndKeepSpinning("skip", [text, ...extras]);
507
+ }
508
+ /**
509
+ * Show a skip message (↻) and stop the spinner. Auto-clears the spinner
510
+ * line before displaying the message.
511
+ *
512
+ * Implementation note: Unlike other *AndStop methods (successAndStop,
513
+ * failAndStop, etc.), this method cannot use #apply() with a 'skip'
514
+ * method name because yocto-spinner doesn't have a built-in 'skip'
515
+ * method. Instead, we manually stop the spinner then log the message with
516
+ * the skip symbol.
517
+ *
518
+ * @param text - Skip message to display.
519
+ * @param extras - Additional values to log.
520
+ *
521
+ * @returns This spinner for chaining
522
+ */
523
+ skipAndStop(text, ...extras) {
524
+ this.#apply("stop", []);
525
+ const normalized = require_spinner_format.normalizeText(text);
526
+ /* c8 ignore start */
527
+ if (normalized) logger.error(`${require_logger_symbols.LOG_SYMBOLS["skip"]} ${normalized}`, ...extras);
528
+ return this;
529
+ /* c8 ignore stop */
530
+ }
531
+ /**
532
+ * Set complete shimmer configuration. Replaces any existing shimmer
533
+ * config with the provided values. Undefined properties will use default
534
+ * values.
535
+ *
536
+ * @example
537
+ * spinner.setShimmer({
538
+ * color: [255, 0, 0],
539
+ * dir: 'rtl',
540
+ * speed: 0.5,
541
+ * })
542
+ *
543
+ * @param config - Complete shimmer configuration.
544
+ *
545
+ * @returns This spinner for chaining
546
+ */
547
+ setShimmer(config) {
548
+ this.#shimmer = {
549
+ __proto__: null,
550
+ color: config.color ?? "inherit",
551
+ direction: config.dir ?? "ltr",
552
+ speed: config.speed ?? 1 / 3,
553
+ frame: 0
554
+ };
555
+ this.#shimmerSavedConfig = this.#shimmer;
556
+ this.#updateSpinnerText();
557
+ return this;
558
+ }
559
+ /**
560
+ * Start the spinner animation with optional text. Begins displaying the
561
+ * animated spinner on stderr.
562
+ *
563
+ * @param text - Optional text to display with the spinner.
564
+ *
565
+ * @returns This spinner for chaining
566
+ */
567
+ start(...args) {
568
+ /* c8 ignore start */
569
+ if (args.length) {
570
+ const normalized = require_spinner_format.normalizeText(require_primordials_array.ArrayPrototypeAt(args, 0));
571
+ if (!normalized) {
572
+ this.#baseText = "";
573
+ super.text = "";
574
+ } else this.#baseText = normalized;
575
+ }
576
+ /* c8 ignore stop */
577
+ this.#updateSpinnerText();
578
+ return this.#apply("start", []);
579
+ }
580
+ /**
581
+ * Log a main step message to stderr without stopping the spinner. Adds a
582
+ * blank line before the message for visual separation. Aligns with
583
+ * `logger.step()` to use stderr for status messages.
584
+ *
585
+ * @param text - Step message to display.
586
+ * @param extras - Additional values to log.
587
+ *
588
+ * @returns This spinner for chaining
589
+ */
590
+ step(text, ...extras) {
591
+ /* c8 ignore start */
592
+ if (typeof text === "string") {
593
+ logger.error("");
594
+ logger.error(text, ...extras);
595
+ }
596
+ return this;
597
+ /* c8 ignore stop */
598
+ }
599
+ /**
600
+ * Stop the spinner animation and clear internal state. Auto-clears the
601
+ * spinner line via yocto-spinner.stop(). Resets progress, shimmer, and
602
+ * text state.
603
+ *
604
+ * @param text - Optional final text to display after stopping.
605
+ *
606
+ * @returns This spinner for chaining
607
+ */
608
+ stop(...args) {
609
+ this.#baseText = "";
610
+ this.#progress = void 0;
611
+ this.#shimmer = void 0;
612
+ return this.#apply("stop", args);
613
+ }
614
+ /**
615
+ * Log an indented substep message to stderr without stopping the spinner.
616
+ * Adds 2-space indentation to the message. Aligns with `logger.substep()`
617
+ * to use stderr for status messages.
618
+ *
619
+ * @param text - Substep message to display.
620
+ * @param extras - Additional values to log.
621
+ *
622
+ * @returns This spinner for chaining
623
+ */
624
+ substep(text, ...extras) {
625
+ /* c8 ignore start */
626
+ if (typeof text === "string") logger.error(` ${text}`, ...extras);
627
+ return this;
628
+ /* c8 ignore stop */
629
+ }
630
+ /**
631
+ * Show a success message (✓) without stopping the spinner. DESIGN
632
+ * DECISION: Unlike yocto-spinner, our `success()` does NOT stop the
633
+ * spinner. This allows displaying success messages while continuing to
634
+ * spin for multi-step operations. Use `successAndStop()` if you want to
635
+ * stop the spinner.
636
+ *
637
+ * @param text - Success message to display.
638
+ * @param extras - Additional values to log.
639
+ *
640
+ * @returns This spinner for chaining
641
+ */
642
+ success(text, ...extras) {
643
+ return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
644
+ }
645
+ /**
646
+ * Show a success message () and stop the spinner. Auto-clears the
647
+ * spinner line before displaying the success message.
648
+ *
649
+ * @param text - Success message to display.
650
+ * @param extras - Additional values to log.
651
+ *
652
+ * @returns This spinner for chaining
653
+ */
654
+ successAndStop(text, ...extras) {
655
+ return this.#apply("success", [text, ...extras]);
656
+ }
657
+ text(value) {
658
+ if (arguments.length === 0) return this.#baseText;
659
+ this.#baseText = value ?? "";
660
+ this.#updateSpinnerText();
661
+ return this;
662
+ }
663
+ /**
664
+ * Update partial shimmer configuration. Merges with existing config,
665
+ * enabling shimmer if currently disabled.
666
+ *
667
+ * @example
668
+ * // Update just the speed
669
+ * spinner.updateShimmer({ speed: 0.5 })
670
+ *
671
+ * // Update direction
672
+ * spinner.updateShimmer({ dir: 'rtl' })
673
+ *
674
+ * // Update multiple properties
675
+ * spinner.updateShimmer({ color: [255, 0, 0], speed: 0.8 })
676
+ *
677
+ * @param config - Partial shimmer configuration to merge.
678
+ *
679
+ * @returns This spinner for chaining
680
+ */
681
+ updateShimmer(config) {
682
+ /* c8 ignore start */
683
+ const partialConfig = {
684
+ __proto__: null,
685
+ ...config
686
+ };
687
+ const update = { __proto__: null };
688
+ if (partialConfig.color !== void 0) update.color = partialConfig.color;
689
+ if (partialConfig.dir !== void 0) update.direction = partialConfig.dir;
690
+ if (partialConfig.speed !== void 0) update.speed = partialConfig.speed;
691
+ if (this.#shimmer) this.#shimmer = {
692
+ ...this.#shimmer,
693
+ ...update
694
+ };
695
+ else if (this.#shimmerSavedConfig) this.#shimmer = {
696
+ ...this.#shimmerSavedConfig,
697
+ ...update,
698
+ frame: 0
699
+ };
700
+ else this.#shimmer = {
701
+ __proto__: null,
702
+ color: require_spinner_format.COLOR_INHERIT,
703
+ direction: "ltr",
704
+ speed: 1 / 3,
705
+ frame: 0,
706
+ ...update
707
+ };
708
+ this.#shimmerSavedConfig = this.#shimmer;
709
+ this.#updateSpinnerText();
710
+ return this;
711
+ /* c8 ignore stop */
712
+ }
713
+ /**
714
+ * Show a warning message (⚠) without stopping the spinner. Outputs to
715
+ * stderr and continues spinning.
716
+ *
717
+ * @param text - Warning message to display.
718
+ * @param extras - Additional values to log.
719
+ *
720
+ * @returns This spinner for chaining
721
+ */
722
+ warn(text, ...extras) {
723
+ return this.#showStatusAndKeepSpinning("warn", [text, ...extras]);
724
+ }
725
+ /**
726
+ * Show a warning message (⚠) and stop the spinner. Auto-clears the
727
+ * spinner line before displaying the warning message.
728
+ *
729
+ * @param text - Warning message to display.
730
+ * @param extras - Additional values to log.
731
+ *
732
+ * @returns This spinner for chaining
733
+ */
734
+ warnAndStop(text, ...extras) {
735
+ return this.#apply("warning", [text, ...extras]);
736
+ }
737
+ };
738
+ require_primordials_object.ObjectDefineProperties(_Spinner.prototype, {
739
+ error: require_spinner_format.desc(_Spinner.prototype.fail),
740
+ errorAndStop: require_spinner_format.desc(_Spinner.prototype.failAndStop),
741
+ warning: require_spinner_format.desc(_Spinner.prototype.warn),
742
+ warningAndStop: require_spinner_format.desc(_Spinner.prototype.warnAndStop)
743
+ });
744
+ /* c8 ignore start */
745
+ _defaultSpinner = /* @__PURE__ */ require_env_ci.getCI() ? require_spinner_format.ciSpinner : /* @__PURE__ */ require_spinner_default.getCliSpinners("socket");
746
+ }
747
+ return new _Spinner({
748
+ spinner: _defaultSpinner,
749
+ ...options
750
+ });
798
751
  }
799
- // Annotate the CommonJS export names for ESM import in node:
800
- 0 && (module.exports = {
801
- Spinner
802
- });
752
+
753
+ //#endregion
754
+ exports.Spinner = Spinner;