@socketsecurity/lib 6.0.2 → 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 (552) hide show
  1. package/CHANGELOG.md +34 -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.d.mts +48 -25
  6. package/dist/ai/profiles.js +95 -59
  7. package/dist/ai/spawn.d.mts +2 -2
  8. package/dist/ai/spawn.js +172 -194
  9. package/dist/ai/types.d.mts +3 -3
  10. package/dist/ai/types.js +1 -17
  11. package/dist/ai/worktree.d.mts +2 -2
  12. package/dist/ai/worktree.js +160 -183
  13. package/dist/ansi/constants.js +16 -38
  14. package/dist/ansi/strip.js +44 -41
  15. package/dist/archives/_internal.js +64 -73
  16. package/dist/archives/detect.js +30 -43
  17. package/dist/archives/extract.js +43 -50
  18. package/dist/archives/tar.js +197 -228
  19. package/dist/archives/types.js +1 -17
  20. package/dist/archives/zip.js +85 -121
  21. package/dist/argv/flag-predicates.js +203 -101
  22. package/dist/argv/flag-types.js +96 -113
  23. package/dist/argv/parse-args-string.d.ts +16 -14
  24. package/dist/argv/parse-args-string.js +42 -39
  25. package/dist/argv/parse.js +145 -163
  26. package/dist/arrays/_internal.js +65 -48
  27. package/dist/arrays/chunk.js +51 -40
  28. package/dist/arrays/join.js +87 -35
  29. package/dist/arrays/predicates.js +46 -28
  30. package/dist/arrays/unique.js +45 -31
  31. package/dist/bin/_internal.js +34 -42
  32. package/dist/bin/check-primordials.js +175 -233
  33. package/dist/bin/check.js +51 -72
  34. package/dist/bin/exec.js +70 -74
  35. package/dist/bin/find.js +151 -134
  36. package/dist/bin/resolve.js +180 -246
  37. package/dist/bin/shadow.js +24 -33
  38. package/dist/bin/socket-lib.js +51 -73
  39. package/dist/bin/types.js +1 -17
  40. package/dist/bin/which.js +211 -146
  41. package/dist/cacache/_internal.js +25 -40
  42. package/dist/cacache/clear.js +79 -72
  43. package/dist/cacache/read.js +48 -46
  44. package/dist/cacache/tmp.js +29 -36
  45. package/dist/cacache/types.js +1 -17
  46. package/dist/cacache/write.js +43 -48
  47. package/dist/cache/ttl/store.js +232 -288
  48. package/dist/cache/ttl/types.js +1 -17
  49. package/dist/checks/primordials-defaults.js +83 -89
  50. package/dist/checks/primordials.js +225 -277
  51. package/dist/colors/convert.js +45 -37
  52. package/dist/colors/palette.js +88 -45
  53. package/dist/colors/socket-palette.js +74 -84
  54. package/dist/colors/types.js +1 -17
  55. package/dist/compression/_internal.js +57 -72
  56. package/dist/compression/brotli.js +94 -127
  57. package/dist/compression/gzip.js +95 -121
  58. package/dist/compression/types.js +1 -17
  59. package/dist/constants/agents.js +61 -113
  60. package/dist/constants/encoding.js +19 -42
  61. package/dist/constants/github.js +12 -30
  62. package/dist/constants/licenses.js +48 -63
  63. package/dist/constants/lifecycle-script-names.js +31 -45
  64. package/dist/constants/maintained-node-versions.js +22 -37
  65. package/dist/constants/node.js +226 -167
  66. package/dist/constants/package-default-node-range.js +16 -41
  67. package/dist/constants/package-default-socket-categories.js +12 -30
  68. package/dist/constants/packages.js +77 -126
  69. package/dist/constants/platform.js +27 -49
  70. package/dist/constants/sentinels.js +23 -48
  71. package/dist/constants/socket.js +42 -87
  72. package/dist/constants/testing.js +15 -34
  73. package/dist/constants/time.js +16 -36
  74. package/dist/constants/typescript.js +32 -52
  75. package/dist/cover/code.js +111 -142
  76. package/dist/cover/formatters.js +118 -101
  77. package/dist/cover/type.js +50 -76
  78. package/dist/cover/types.js +1 -17
  79. package/dist/crypto/hash.js +54 -46
  80. package/dist/debug/_internal.js +62 -71
  81. package/dist/debug/caller-info.js +53 -64
  82. package/dist/debug/namespace.js +80 -90
  83. package/dist/debug/output.js +172 -188
  84. package/dist/debug/types.js +1 -17
  85. package/dist/dlx/_internal.js +24 -43
  86. package/dist/dlx/arborist.js +162 -160
  87. package/dist/dlx/binary-cache.js +228 -200
  88. package/dist/dlx/binary-download.js +172 -211
  89. package/dist/dlx/binary-resolution.js +165 -157
  90. package/dist/dlx/binary-types.js +1 -17
  91. package/dist/dlx/binary.js +149 -189
  92. package/dist/dlx/cache.js +45 -30
  93. package/dist/dlx/detect.js +245 -167
  94. package/dist/dlx/dir.js +67 -51
  95. package/dist/dlx/firewall.js +62 -100
  96. package/dist/dlx/lockfile.js +122 -127
  97. package/dist/dlx/manifest.js +264 -274
  98. package/dist/dlx/package.js +241 -244
  99. package/dist/dlx/packages.js +99 -96
  100. package/dist/dlx/paths.js +73 -59
  101. package/dist/dlx/spec.js +52 -60
  102. package/dist/dlx/types.js +1 -17
  103. package/dist/eco/cargo/lockfile-format.js +19 -36
  104. package/dist/eco/cargo/manifest-format.js +17 -35
  105. package/dist/eco/cargo/parse-lockfile.js +210 -237
  106. package/dist/eco/manifest/analyze-lockfile.js +46 -63
  107. package/dist/eco/manifest/detect-format.js +66 -90
  108. package/dist/eco/manifest/find-packages.js +39 -64
  109. package/dist/eco/manifest/get-package-versions.js +27 -48
  110. package/dist/eco/manifest/get-package.js +21 -40
  111. package/dist/eco/manifest/manifest-error.js +14 -35
  112. package/dist/eco/manifest/parse-lockfile.js +40 -86
  113. package/dist/eco/manifest/parse-manifest.js +26 -43
  114. package/dist/eco/manifest/parse.js +26 -47
  115. package/dist/eco/manifest/types.js +1 -17
  116. package/dist/eco/npm/bun/exec.js +23 -32
  117. package/dist/eco/npm/manifest-format.js +21 -35
  118. package/dist/eco/npm/npm/exec.js +51 -61
  119. package/dist/eco/npm/npm/extract-package-name-from-path.js +28 -50
  120. package/dist/eco/npm/npm/flags.js +80 -52
  121. package/dist/eco/npm/npm/lockfile-format.js +21 -40
  122. package/dist/eco/npm/npm/parse-git-url.js +26 -40
  123. package/dist/eco/npm/npm/parse-lockfile.js +184 -210
  124. package/dist/eco/npm/parse-package-json.js +71 -102
  125. package/dist/eco/npm/pnpm/detect-pnpm-version.js +22 -43
  126. package/dist/eco/npm/pnpm/exec.js +51 -62
  127. package/dist/eco/npm/pnpm/flags.js +75 -68
  128. package/dist/eco/npm/pnpm/lockfile-format.js +19 -36
  129. package/dist/eco/npm/pnpm/parse-lockfile.js +235 -259
  130. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v5.js +37 -47
  131. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v6-v9.js +36 -49
  132. package/dist/eco/npm/script.js +82 -90
  133. package/dist/eco/npm/vlt/exec.js +24 -32
  134. package/dist/eco/npm/yarnpkg/yarn/exec.js +60 -59
  135. package/dist/eco/npm/yarnpkg/yarn/lockfile-format.js +20 -36
  136. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +194 -242
  137. package/dist/eco/npm/yarnpkg/yarn/parse-yarn-descriptor.js +37 -61
  138. package/dist/eco/purl.js +50 -60
  139. package/dist/eco/types.js +1 -17
  140. package/dist/effects/pulse-frames.js +64 -65
  141. package/dist/effects/shimmer-keyframes.js +71 -52
  142. package/dist/effects/shimmer-terminal.js +81 -50
  143. package/dist/effects/shimmer.js +290 -153
  144. package/dist/env/boolean.js +42 -43
  145. package/dist/env/case-insensitive.js +54 -39
  146. package/dist/env/ci.js +29 -31
  147. package/dist/env/debug.js +28 -31
  148. package/dist/env/github.js +144 -59
  149. package/dist/env/home.js +38 -31
  150. package/dist/env/locale.js +59 -39
  151. package/dist/env/node-auth-token.js +28 -31
  152. package/dist/env/node-env.js +28 -31
  153. package/dist/env/npm.js +94 -47
  154. package/dist/env/number.js +50 -51
  155. package/dist/env/package-manager.js +95 -83
  156. package/dist/env/path.js +28 -31
  157. package/dist/env/pre-commit.js +30 -32
  158. package/dist/env/proxy.js +121 -122
  159. package/dist/env/rewire.js +204 -96
  160. package/dist/env/shell.js +28 -31
  161. package/dist/env/socket-cli.js +233 -81
  162. package/dist/env/socket.js +521 -156
  163. package/dist/env/string.js +43 -44
  164. package/dist/env/temp-dir.js +59 -39
  165. package/dist/env/term.js +28 -31
  166. package/dist/env/test.js +65 -43
  167. package/dist/env/types.js +1 -17
  168. package/dist/env/windows.js +78 -43
  169. package/dist/env/xdg.js +62 -39
  170. package/dist/errors/message.js +40 -46
  171. package/dist/errors/predicates.js +61 -49
  172. package/dist/errors/stack.js +24 -36
  173. package/dist/events/exit/_internal.js +86 -103
  174. package/dist/events/exit/handler.js +48 -55
  175. package/dist/events/exit/intercept.js +49 -70
  176. package/dist/events/exit/lifecycle.js +92 -101
  177. package/dist/events/exit/signals.js +25 -31
  178. package/dist/events/exit/types.js +1 -17
  179. package/dist/events/warning/handler.js +43 -40
  180. package/dist/events/warning/suppress.js +111 -90
  181. package/dist/external/@npmcli/package-json/lib/read-package.js +132 -153
  182. package/dist/external/@npmcli/package-json/lib/sort.js +73 -105
  183. package/dist/external/@npmcli/package-json.js +12705 -15140
  184. package/dist/external/@npmcli/promise-spawn.js +451 -472
  185. package/dist/external/@sinclair/typebox/value.js +7443 -9002
  186. package/dist/external/@sinclair/typebox.js +7516 -7885
  187. package/dist/external/@socketregistry/is-unicode-supported.js +31 -39
  188. package/dist/external/@socketregistry/packageurl-js.js +6127 -7369
  189. package/dist/external/@socketregistry/yocto-spinner.js +394 -455
  190. package/dist/external/@yarnpkg/extensions.js +435 -1022
  191. package/dist/external/adm-zip.js +2313 -2673
  192. package/dist/external/debug.js +700 -687
  193. package/dist/external/external-pack.js +2658 -3171
  194. package/dist/external/fast-sort.js +124 -138
  195. package/dist/external/get-east-asian-width.js +70 -64
  196. package/dist/external/libnpmexec.js +28 -31
  197. package/dist/external/npm-pack.js +43617 -50137
  198. package/dist/external/p-map.js +198 -222
  199. package/dist/external/pico-pack.js +6735 -7304
  200. package/dist/external/pony-cause.js +143 -139
  201. package/dist/external/shell-quote.js +226 -0
  202. package/dist/external/spdx-pack.js +1283 -1403
  203. package/dist/external/streaming-iterables.js +835 -1052
  204. package/dist/external/tar-fs.js +2769 -3048
  205. package/dist/external/which.js +267 -251
  206. package/dist/external/yargs-parser.js +851 -1074
  207. package/dist/external-tools/bazel/asset-names.js +98 -90
  208. package/dist/external-tools/bazel/from-download.js +52 -46
  209. package/dist/external-tools/bazel/from-path.js +27 -38
  210. package/dist/external-tools/bazel/read-bazel-version-file.js +35 -57
  211. package/dist/external-tools/bazel/resolve-asset-url.js +24 -39
  212. package/dist/external-tools/bazel/resolve-bazel-version.js +34 -56
  213. package/dist/external-tools/bazel/resolve.js +44 -58
  214. package/dist/external-tools/bazel/types.js +1 -17
  215. package/dist/external-tools/cdxgen/asset-names.js +59 -66
  216. package/dist/external-tools/cdxgen/from-download.js +52 -80
  217. package/dist/external-tools/cdxgen/from-path.js +19 -37
  218. package/dist/external-tools/cdxgen/from-vfs.js +22 -43
  219. package/dist/external-tools/cdxgen/resolve.js +48 -63
  220. package/dist/external-tools/cdxgen/types.js +1 -17
  221. package/dist/external-tools/from-download.js +107 -67
  222. package/dist/external-tools/janus/asset-names.js +44 -51
  223. package/dist/external-tools/janus/from-download.js +45 -70
  224. package/dist/external-tools/janus/from-path.js +19 -37
  225. package/dist/external-tools/janus/from-vfs.js +22 -43
  226. package/dist/external-tools/janus/resolve.js +45 -63
  227. package/dist/external-tools/janus/types.js +1 -17
  228. package/dist/external-tools/jre/asset-names.js +109 -82
  229. package/dist/external-tools/jre/detect-platform-arch.js +25 -49
  230. package/dist/external-tools/jre/from-download.js +71 -67
  231. package/dist/external-tools/jre/from-java-home.js +27 -54
  232. package/dist/external-tools/jre/from-path.js +27 -49
  233. package/dist/external-tools/jre/from-vfs.js +39 -60
  234. package/dist/external-tools/jre/resolve.js +55 -68
  235. package/dist/external-tools/jre/types.js +1 -17
  236. package/dist/external-tools/manifest.js +130 -150
  237. package/dist/external-tools/opengrep/asset-names.js +60 -72
  238. package/dist/external-tools/opengrep/from-download.js +58 -80
  239. package/dist/external-tools/opengrep/from-path.js +19 -37
  240. package/dist/external-tools/opengrep/from-vfs.js +23 -43
  241. package/dist/external-tools/opengrep/resolve.js +43 -63
  242. package/dist/external-tools/opengrep/types.js +1 -17
  243. package/dist/external-tools/sbt/asset-names.js +21 -30
  244. package/dist/external-tools/sbt/from-download.js +50 -61
  245. package/dist/external-tools/sbt/from-path.js +23 -38
  246. package/dist/external-tools/sbt/from-vfs.js +30 -44
  247. package/dist/external-tools/sbt/resolve.js +45 -63
  248. package/dist/external-tools/sbt/types.js +1 -17
  249. package/dist/external-tools/synp/asset-names.js +11 -29
  250. package/dist/external-tools/synp/from-download.js +24 -41
  251. package/dist/external-tools/synp/from-path.js +19 -37
  252. package/dist/external-tools/synp/from-vfs.js +22 -43
  253. package/dist/external-tools/synp/resolve.js +43 -62
  254. package/dist/external-tools/synp/types.js +1 -17
  255. package/dist/external-tools/trivy/asset-names.js +51 -62
  256. package/dist/external-tools/trivy/from-download.js +42 -64
  257. package/dist/external-tools/trivy/from-path.js +19 -37
  258. package/dist/external-tools/trivy/from-vfs.js +22 -43
  259. package/dist/external-tools/trivy/resolve.js +43 -63
  260. package/dist/external-tools/trivy/types.js +1 -17
  261. package/dist/external-tools/trufflehog/asset-names.js +54 -66
  262. package/dist/external-tools/trufflehog/from-download.js +44 -62
  263. package/dist/external-tools/trufflehog/from-path.js +21 -37
  264. package/dist/external-tools/trufflehog/from-vfs.js +26 -43
  265. package/dist/external-tools/trufflehog/resolve.js +43 -63
  266. package/dist/external-tools/trufflehog/types.js +1 -17
  267. package/dist/external-tools/uv/asset-names.js +64 -74
  268. package/dist/external-tools/uv/from-download.js +44 -65
  269. package/dist/external-tools/uv/from-path.js +19 -37
  270. package/dist/external-tools/uv/from-vfs.js +22 -43
  271. package/dist/external-tools/uv/resolve.js +42 -63
  272. package/dist/external-tools/uv/types.js +1 -17
  273. package/dist/fs/_internal.js +40 -42
  274. package/dist/fs/access.d.ts +32 -0
  275. package/dist/fs/access.js +66 -0
  276. package/dist/fs/encoding.js +80 -97
  277. package/dist/fs/find-up.js +126 -147
  278. package/dist/fs/inspect.js +168 -99
  279. package/dist/fs/path-cache.js +31 -32
  280. package/dist/fs/read-dir.js +102 -79
  281. package/dist/fs/read-file.js +177 -118
  282. package/dist/fs/read-json-cache.js +150 -134
  283. package/dist/fs/read-json.js +172 -187
  284. package/dist/fs/resolve-module.d.ts +57 -0
  285. package/dist/fs/resolve-module.js +40 -0
  286. package/dist/fs/safe.js +278 -169
  287. package/dist/fs/types.js +1 -17
  288. package/dist/fs/unique.js +52 -48
  289. package/dist/fs/validate.js +56 -43
  290. package/dist/fs/write-json.js +109 -75
  291. package/dist/git/_internal.js +251 -216
  292. package/dist/git/changed.js +191 -74
  293. package/dist/git/repo.js +118 -104
  294. package/dist/git/staged.js +172 -62
  295. package/dist/git/types.js +1 -17
  296. package/dist/git/unstaged.js +175 -62
  297. package/dist/github/constants.js +25 -33
  298. package/dist/github/errors.js +46 -38
  299. package/dist/github/fetch.js +137 -82
  300. package/dist/github/ghsa.js +217 -151
  301. package/dist/github/refs-cache.js +54 -43
  302. package/dist/github/refs-graphql.js +97 -89
  303. package/dist/github/refs-rest.js +70 -101
  304. package/dist/github/refs.js +105 -64
  305. package/dist/github/token.js +96 -48
  306. package/dist/github/types.js +1 -17
  307. package/dist/globs/_internal.js +73 -82
  308. package/dist/globs/defaults.js +40 -59
  309. package/dist/globs/match.js +93 -77
  310. package/dist/globs/matcher.js +104 -92
  311. package/dist/globs/stream.js +43 -55
  312. package/dist/globs/types.js +1 -17
  313. package/dist/http-request/_internal.js +11 -38
  314. package/dist/http-request/browser-fetch.js +19 -29
  315. package/dist/http-request/browser.js +188 -206
  316. package/dist/http-request/checksums.js +101 -65
  317. package/dist/http-request/download-types.js +1 -17
  318. package/dist/http-request/download.js +195 -196
  319. package/dist/http-request/errors.js +39 -47
  320. package/dist/http-request/headers.js +95 -80
  321. package/dist/http-request/http-request.js +10 -35
  322. package/dist/http-request/node.js +71 -97
  323. package/dist/http-request/request-attempt.js +232 -285
  324. package/dist/http-request/request-types.js +1 -17
  325. package/dist/http-request/request.js +106 -108
  326. package/dist/http-request/response-reader.js +47 -51
  327. package/dist/http-request/response-types.js +22 -38
  328. package/dist/http-request/user-agent.js +73 -55
  329. package/dist/integrity.js +105 -106
  330. package/dist/ipc/_internal.js +34 -48
  331. package/dist/ipc/directory.js +55 -63
  332. package/dist/ipc/paths.js +52 -45
  333. package/dist/ipc/types.js +1 -17
  334. package/dist/ipc/write.js +81 -74
  335. package/dist/ipc-cli/get.js +29 -56
  336. package/dist/ipc-cli/types.js +1 -17
  337. package/dist/json/edit.js +182 -242
  338. package/dist/json/format.js +202 -103
  339. package/dist/json/parse.js +206 -109
  340. package/dist/json/types.js +1 -17
  341. package/dist/links/create.js +93 -60
  342. package/dist/links/types.js +1 -17
  343. package/dist/logger/_internal.js +109 -73
  344. package/dist/logger/browser.js +45 -56
  345. package/dist/logger/colors.js +31 -49
  346. package/dist/logger/console.js +89 -112
  347. package/dist/logger/default.js +19 -33
  348. package/dist/logger/logger.js +5 -29
  349. package/dist/logger/node.js +794 -854
  350. package/dist/logger/symbols-builder.js +54 -56
  351. package/dist/logger/symbols.js +135 -118
  352. package/dist/logger/types.js +1 -17
  353. package/dist/memo/_internal.js +39 -49
  354. package/dist/memo/async.js +133 -117
  355. package/dist/memo/clear.js +25 -34
  356. package/dist/memo/decorator.js +43 -37
  357. package/dist/memo/memoize.js +97 -88
  358. package/dist/memo/once.js +42 -41
  359. package/dist/memo/types.js +1 -17
  360. package/dist/memo/weak.js +45 -41
  361. package/dist/node/async-hooks.js +9 -30
  362. package/dist/node/child-process.js +9 -30
  363. package/dist/node/crypto.js +9 -30
  364. package/dist/node/events.js +9 -30
  365. package/dist/node/fs-promises.js +9 -30
  366. package/dist/node/fs.js +9 -30
  367. package/dist/node/http.js +9 -30
  368. package/dist/node/https.js +9 -30
  369. package/dist/node/module.js +20 -34
  370. package/dist/node/os.js +9 -30
  371. package/dist/node/path.js +9 -30
  372. package/dist/node/timers-promises.js +9 -30
  373. package/dist/node/url.js +9 -30
  374. package/dist/node/util.js +9 -30
  375. package/dist/objects/getters.js +185 -126
  376. package/dist/objects/inspect.js +85 -52
  377. package/dist/objects/mutate.js +96 -76
  378. package/dist/objects/predicates.js +112 -59
  379. package/dist/objects/sort.js +120 -76
  380. package/dist/objects/types.js +1 -17
  381. package/dist/packages/edit-class.js +198 -265
  382. package/dist/packages/edit.js +79 -86
  383. package/dist/packages/exports.js +146 -157
  384. package/dist/packages/isolation.js +159 -209
  385. package/dist/packages/licenses.js +207 -189
  386. package/dist/packages/manifest.js +134 -172
  387. package/dist/packages/normalize.js +91 -102
  388. package/dist/packages/operations.d.ts +2 -0
  389. package/dist/packages/operations.js +283 -254
  390. package/dist/packages/provenance.js +195 -245
  391. package/dist/packages/specs.js +94 -84
  392. package/dist/packages/types.js +1 -17
  393. package/dist/packages/validation.js +49 -50
  394. package/dist/paths/_internal.js +82 -86
  395. package/dist/paths/conversion.js +112 -65
  396. package/dist/paths/dirnames.js +17 -42
  397. package/dist/paths/exts.js +23 -54
  398. package/dist/paths/filenames.js +21 -50
  399. package/dist/paths/globs.js +15 -38
  400. package/dist/paths/normalize.js +215 -236
  401. package/dist/paths/packages.js +34 -49
  402. package/dist/paths/predicates.js +184 -106
  403. package/dist/paths/resolve.js +146 -128
  404. package/dist/paths/rewire.js +108 -72
  405. package/dist/paths/socket.js +252 -132
  406. package/dist/paths/walk.d.ts +40 -0
  407. package/dist/paths/walk.js +58 -0
  408. package/dist/perf/_internal.js +10 -28
  409. package/dist/perf/enabled.js +21 -30
  410. package/dist/perf/metrics.js +81 -67
  411. package/dist/perf/report.js +79 -80
  412. package/dist/perf/timer.js +180 -126
  413. package/dist/perf/types.js +1 -17
  414. package/dist/pkg-ext/data.js +29 -82
  415. package/dist/pkg-ext/types.js +1 -17
  416. package/dist/primordials/array.js +120 -198
  417. package/dist/primordials/buffer.js +28 -51
  418. package/dist/primordials/date.js +26 -51
  419. package/dist/primordials/error.js +33 -59
  420. package/dist/primordials/function.js +21 -41
  421. package/dist/primordials/globals.js +25 -48
  422. package/dist/primordials/json.js +14 -30
  423. package/dist/primordials/map-set.js +88 -152
  424. package/dist/primordials/math.js +59 -116
  425. package/dist/primordials/number.js +41 -76
  426. package/dist/primordials/object.js +56 -116
  427. package/dist/primordials/promise.js +28 -52
  428. package/dist/primordials/reflect.js +24 -52
  429. package/dist/primordials/regexp.js +25 -47
  430. package/dist/primordials/string.js +114 -167
  431. package/dist/primordials/symbol.js +40 -72
  432. package/dist/primordials/uncurry.js +38 -55
  433. package/dist/primordials/url.js +27 -66
  434. package/dist/process/_internal.js +7 -32
  435. package/dist/process/abort.js +29 -35
  436. package/dist/process/lock-instance.js +26 -30
  437. package/dist/process/lock-manager.js +279 -307
  438. package/dist/process/lock-types.js +1 -17
  439. package/dist/process/spawn/_internal.js +43 -55
  440. package/dist/process/spawn/child.js +172 -211
  441. package/dist/process/spawn/errors.js +116 -113
  442. package/dist/process/spawn/stdio.js +51 -35
  443. package/dist/process/spawn/types.js +1 -17
  444. package/dist/process/transient.js +49 -66
  445. package/dist/promises/_internal.d.ts +8 -2
  446. package/dist/promises/_internal.js +31 -38
  447. package/dist/promises/iterate.js +238 -102
  448. package/dist/promises/options.js +123 -101
  449. package/dist/promises/queue.js +115 -136
  450. package/dist/promises/resolvers.js +77 -46
  451. package/dist/promises/retry.js +156 -101
  452. package/dist/promises/types.js +1 -17
  453. package/dist/regexps/escape.js +32 -30
  454. package/dist/regexps/hex.js +16 -33
  455. package/dist/regexps/spec.js +53 -81
  456. package/dist/releases/github-archives.js +127 -118
  457. package/dist/releases/github-asset-url.js +162 -155
  458. package/dist/releases/github-assets.js +37 -49
  459. package/dist/releases/github-auth.js +32 -48
  460. package/dist/releases/github-downloads.js +118 -138
  461. package/dist/releases/github-listing.js +175 -154
  462. package/dist/releases/github-retry-config.d.ts +31 -0
  463. package/dist/releases/github-retry-config.js +46 -0
  464. package/dist/releases/github-types.js +1 -17
  465. package/dist/releases/socket-btm.js +273 -192
  466. package/dist/schema/parse.js +35 -36
  467. package/dist/schema/types.js +1 -17
  468. package/dist/schema/validate.js +118 -99
  469. package/dist/sea/detect.js +57 -52
  470. package/dist/secrets/_internal.js +86 -67
  471. package/dist/secrets/find.js +96 -77
  472. package/dist/secrets/keychain.js +315 -309
  473. package/dist/secrets/linux.js +133 -135
  474. package/dist/secrets/macos.js +151 -147
  475. package/dist/secrets/rc.js +182 -181
  476. package/dist/secrets/socket-api-token.js +28 -43
  477. package/dist/secrets/types.js +1 -17
  478. package/dist/secrets/windows.js +184 -242
  479. package/dist/shadow/skip.js +51 -70
  480. package/dist/shadow/types.js +1 -17
  481. package/dist/shell/parse.d.ts +26 -0
  482. package/dist/shell/parse.js +35 -0
  483. package/dist/shell/quote.d.ts +19 -0
  484. package/dist/shell/quote.js +30 -0
  485. package/dist/smol/detect.js +67 -43
  486. package/dist/smol/http.js +33 -37
  487. package/dist/smol/https.js +31 -37
  488. package/dist/smol/manifest.js +33 -37
  489. package/dist/smol/path.d.ts +51 -0
  490. package/dist/smol/path.js +38 -0
  491. package/dist/smol/primordial.js +35 -37
  492. package/dist/smol/purl.js +34 -37
  493. package/dist/smol/versions.js +31 -37
  494. package/dist/smol/vfs.js +46 -38
  495. package/dist/sorts/_internal.js +14 -40
  496. package/dist/sorts/natural.js +57 -64
  497. package/dist/sorts/semver.js +33 -43
  498. package/dist/sorts/strings.js +24 -30
  499. package/dist/sorts/types.js +1 -17
  500. package/dist/spinner/default.js +72 -63
  501. package/dist/spinner/format.js +86 -71
  502. package/dist/spinner/spinner.js +749 -797
  503. package/dist/spinner/types.js +1 -17
  504. package/dist/spinner/with.js +193 -137
  505. package/dist/ssri/convert.js +64 -47
  506. package/dist/ssri/parse.js +38 -37
  507. package/dist/ssri/validate.js +51 -34
  508. package/dist/stdio/_internal.js +50 -46
  509. package/dist/stdio/clear.js +208 -86
  510. package/dist/stdio/divider.js +170 -97
  511. package/dist/stdio/footer.js +116 -110
  512. package/dist/stdio/header.js +117 -90
  513. package/dist/stdio/progress.js +189 -218
  514. package/dist/stdio/prompts.js +244 -168
  515. package/dist/stdio/stderr.js +173 -78
  516. package/dist/stdio/stdout.js +177 -94
  517. package/dist/streams/parallel.js +58 -50
  518. package/dist/streams/transform.js +36 -45
  519. package/dist/strings/format.js +145 -63
  520. package/dist/strings/predicates.js +56 -34
  521. package/dist/strings/search.js +52 -42
  522. package/dist/strings/transform.js +113 -72
  523. package/dist/strings/types.js +1 -17
  524. package/dist/strings/width.js +89 -82
  525. package/dist/tables/bordered.js +81 -81
  526. package/dist/tables/padding.js +36 -46
  527. package/dist/tables/simple.js +62 -70
  528. package/dist/tables/types.js +1 -17
  529. package/dist/temporal/instant.js +72 -81
  530. package/dist/temporal/now.js +40 -31
  531. package/dist/temporal/slots.js +42 -36
  532. package/dist/temporal/system.js +36 -36
  533. package/dist/temporal/temporal.js +11 -41
  534. package/dist/themes/context.js +131 -69
  535. package/dist/themes/resolve.js +207 -132
  536. package/dist/themes/themes.js +225 -194
  537. package/dist/themes/types.js +1 -17
  538. package/dist/url/parse.js +48 -51
  539. package/dist/url/predicates.js +24 -31
  540. package/dist/url/search-params.js +133 -101
  541. package/dist/url/types.js +1 -17
  542. package/dist/versions/_internal.js +31 -33
  543. package/dist/versions/compare.js +80 -58
  544. package/dist/versions/modify.js +41 -39
  545. package/dist/versions/parse.js +88 -64
  546. package/dist/versions/range.js +58 -41
  547. package/dist/versions/types.js +1 -17
  548. package/dist/words/article.js +22 -30
  549. package/dist/words/capitalize.js +25 -34
  550. package/dist/words/pluralize.js +23 -31
  551. package/dist/words/types.js +1 -17
  552. package/package.json +42 -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;