@mks2508/better-logger 0.14.0-alpha.2 → 0.18.2-alpha.2

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 (472) hide show
  1. package/README.md +50 -244
  2. package/dist/Logger.d.ts +662 -202
  3. package/dist/Logger.d.ts.map +1 -1
  4. package/dist/ScopedLogger.d.ts +434 -175
  5. package/dist/ScopedLogger.d.ts.map +1 -1
  6. package/dist/chunks/HookBridge-C-AvXmPD.cjs +504 -0
  7. package/dist/chunks/HookBridge-C-AvXmPD.cjs.map +1 -0
  8. package/dist/chunks/HookBridge-CI2PH79S.js +487 -0
  9. package/dist/chunks/HookBridge-CI2PH79S.js.map +1 -0
  10. package/dist/chunks/LogContext-BaMXleWj.cjs +105 -0
  11. package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
  12. package/dist/chunks/LogContext-DjlITOzZ.js +100 -0
  13. package/dist/chunks/LogContext-DjlITOzZ.js.map +1 -0
  14. package/dist/chunks/SerializerBridge-Ba43Mk7j.js +393 -0
  15. package/dist/chunks/SerializerBridge-Ba43Mk7j.js.map +1 -0
  16. package/dist/chunks/SerializerBridge-C4a9Z37F.cjs +410 -0
  17. package/dist/chunks/SerializerBridge-C4a9Z37F.cjs.map +1 -0
  18. package/dist/chunks/StyleManager-DQ6UNRB-.cjs +118 -0
  19. package/dist/chunks/StyleManager-DQ6UNRB-.cjs.map +1 -0
  20. package/dist/chunks/StyleManager-DjwAYbxE.js +113 -0
  21. package/dist/chunks/StyleManager-DjwAYbxE.js.map +1 -0
  22. package/dist/chunks/core-Blfi2klP.js +31 -0
  23. package/dist/chunks/core-Blfi2klP.js.map +1 -0
  24. package/dist/chunks/core-CqS_UBzJ.cjs +36 -0
  25. package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
  26. package/dist/chunks/environment-detector-7NvnYUfr.js +110 -0
  27. package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
  28. package/dist/chunks/environment-detector-D-tHkKWA.cjs +163 -0
  29. package/dist/chunks/environment-detector-D-tHkKWA.cjs.map +1 -0
  30. package/dist/chunks/server-fallback-CaCPjWby.cjs +119 -0
  31. package/dist/chunks/server-fallback-CaCPjWby.cjs.map +1 -0
  32. package/dist/chunks/server-fallback-jj0T6XaK.js +114 -0
  33. package/dist/chunks/server-fallback-jj0T6XaK.js.map +1 -0
  34. package/dist/chunks/spinner-BHyYEXsM.cjs +1029 -0
  35. package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
  36. package/dist/chunks/spinner-BtkwpzYv.js +982 -0
  37. package/dist/chunks/spinner-BtkwpzYv.js.map +1 -0
  38. package/dist/chunks/styling-CRw3KQW4.js +1592 -0
  39. package/dist/chunks/styling-CRw3KQW4.js.map +1 -0
  40. package/dist/chunks/styling-Cel2wPRy.cjs +1645 -0
  41. package/dist/chunks/styling-Cel2wPRy.cjs.map +1 -0
  42. package/dist/chunks/transports-BGfwwakw.js +1237 -0
  43. package/dist/chunks/transports-BGfwwakw.js.map +1 -0
  44. package/dist/chunks/transports-yK6CL0Ml.cjs +1278 -0
  45. package/dist/chunks/transports-yK6CL0Ml.cjs.map +1 -0
  46. package/dist/chunks/utils-W_cxqriN.cjs +705 -0
  47. package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
  48. package/dist/chunks/utils-tKfBAWUM.js +586 -0
  49. package/dist/chunks/utils-tKfBAWUM.js.map +1 -0
  50. package/dist/cli/CommandProcessor.d.ts +166 -19
  51. package/dist/cli/CommandProcessor.d.ts.map +1 -1
  52. package/dist/cli/commands/ConfigCommand.d.ts +36 -1
  53. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -1
  54. package/dist/cli/commands/ExportCommand.d.ts +54 -26
  55. package/dist/cli/commands/ExportCommand.d.ts.map +1 -1
  56. package/dist/cli/commands/ThemeCommand.d.ts +62 -3
  57. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -1
  58. package/dist/cli/help.d.ts +30 -2
  59. package/dist/cli/help.d.ts.map +1 -1
  60. package/dist/cli/index.d.ts +30 -4
  61. package/dist/cli/index.d.ts.map +1 -1
  62. package/dist/cli-module.d.ts +13 -0
  63. package/dist/cli-module.d.ts.map +1 -0
  64. package/dist/cli.cjs +11 -0
  65. package/dist/cli.js +3 -0
  66. package/dist/constants.d.ts +16 -47
  67. package/dist/constants.d.ts.map +1 -1
  68. package/dist/context/LogContext.d.ts +245 -0
  69. package/dist/context/LogContext.d.ts.map +1 -0
  70. package/dist/context/index.d.ts +6 -0
  71. package/dist/context/index.d.ts.map +1 -0
  72. package/dist/context-module.d.ts +6 -0
  73. package/dist/context-module.d.ts.map +1 -0
  74. package/dist/context.cjs +3 -0
  75. package/dist/context.js +2 -0
  76. package/dist/core.cjs +304 -2
  77. package/dist/core.cjs.map +1 -1
  78. package/dist/core.d.ts +56 -34
  79. package/dist/core.d.ts.map +1 -1
  80. package/dist/core.js +281 -314
  81. package/dist/core.js.map +1 -1
  82. package/dist/hooks/HookBridge.d.ts +32 -0
  83. package/dist/hooks/HookBridge.d.ts.map +1 -0
  84. package/dist/hooks/HookManager.d.ts +319 -0
  85. package/dist/hooks/HookManager.d.ts.map +1 -0
  86. package/dist/hooks/index.d.ts +7 -0
  87. package/dist/hooks/index.d.ts.map +1 -0
  88. package/dist/hooks-module.d.ts +7 -0
  89. package/dist/hooks-module.d.ts.map +1 -0
  90. package/dist/hooks.cjs +5 -0
  91. package/dist/hooks.js +2 -0
  92. package/dist/index.cjs +3402 -2
  93. package/dist/index.cjs.map +1 -1
  94. package/dist/index.d.ts +42 -130
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +3327 -158
  97. package/dist/index.js.map +1 -1
  98. package/dist/node-module.d.ts +10 -0
  99. package/dist/node-module.d.ts.map +1 -0
  100. package/dist/node.cjs +13 -0
  101. package/dist/node.cjs.map +1 -0
  102. package/dist/node.js +12 -0
  103. package/dist/node.js.map +1 -0
  104. package/dist/playground/TerminalBridge.d.ts +53 -0
  105. package/dist/playground/TerminalBridge.d.ts.map +1 -0
  106. package/dist/playground/box.d.ts +45 -0
  107. package/dist/playground/box.d.ts.map +1 -0
  108. package/dist/playground/cli-table.d.ts +50 -0
  109. package/dist/playground/cli-table.d.ts.map +1 -0
  110. package/dist/playground/divider.d.ts +29 -0
  111. package/dist/playground/divider.d.ts.map +1 -0
  112. package/dist/playground/header.d.ts +28 -0
  113. package/dist/playground/header.d.ts.map +1 -0
  114. package/dist/playground/index.d.ts +11 -0
  115. package/dist/playground/index.d.ts.map +1 -0
  116. package/dist/playground/server-fallback.d.ts +114 -0
  117. package/dist/playground/server-fallback.d.ts.map +1 -0
  118. package/dist/playground/spinner.d.ts +197 -0
  119. package/dist/playground/spinner.d.ts.map +1 -0
  120. package/dist/playground/step.d.ts +33 -0
  121. package/dist/playground/step.d.ts.map +1 -0
  122. package/dist/playground-module.d.ts +11 -0
  123. package/dist/playground-module.d.ts.map +1 -0
  124. package/dist/playground.cjs +9 -0
  125. package/dist/playground.js +2 -0
  126. package/dist/serializers/SerializerBridge.d.ts +28 -0
  127. package/dist/serializers/SerializerBridge.d.ts.map +1 -0
  128. package/dist/serializers/SerializerRegistry.d.ts +252 -0
  129. package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
  130. package/dist/serializers/index.d.ts +7 -0
  131. package/dist/serializers/index.d.ts.map +1 -0
  132. package/dist/serializers-module.d.ts +7 -0
  133. package/dist/serializers-module.d.ts.map +1 -0
  134. package/dist/serializers.cjs +5 -0
  135. package/dist/serializers.js +2 -0
  136. package/dist/styles/StyleManager.d.ts +190 -0
  137. package/dist/styles/StyleManager.d.ts.map +1 -0
  138. package/dist/styles/index.d.ts +7 -0
  139. package/dist/styles/index.d.ts.map +1 -0
  140. package/dist/styles-module.d.ts +7 -0
  141. package/dist/styles-module.d.ts.map +1 -0
  142. package/dist/styles.cjs +7 -0
  143. package/dist/styles.js +3 -0
  144. package/dist/styling/SmartPresets.d.ts +100 -6
  145. package/dist/styling/SmartPresets.d.ts.map +1 -1
  146. package/dist/styling/StyleBuilder.d.ts +453 -32
  147. package/dist/styling/StyleBuilder.d.ts.map +1 -1
  148. package/dist/styling/banners.d.ts +85 -5
  149. package/dist/styling/banners.d.ts.map +1 -1
  150. package/dist/styling/index.d.ts +8 -3
  151. package/dist/styling/index.d.ts.map +1 -1
  152. package/dist/styling/themes.d.ts +41 -2
  153. package/dist/styling/themes.d.ts.map +1 -1
  154. package/dist/terminal/color-converter.d.ts +73 -0
  155. package/dist/terminal/color-converter.d.ts.map +1 -0
  156. package/dist/terminal/formatter.d.ts +23 -0
  157. package/dist/terminal/formatter.d.ts.map +1 -0
  158. package/dist/transports/ConsoleTransport.d.ts +104 -0
  159. package/dist/transports/ConsoleTransport.d.ts.map +1 -0
  160. package/dist/transports/FileTransport.d.ts +137 -0
  161. package/dist/transports/FileTransport.d.ts.map +1 -0
  162. package/dist/transports/HttpTransport.d.ts +180 -0
  163. package/dist/transports/HttpTransport.d.ts.map +1 -0
  164. package/dist/transports/OtlpTransport.d.ts +165 -0
  165. package/dist/transports/OtlpTransport.d.ts.map +1 -0
  166. package/dist/transports/TransportBridge.d.ts +43 -0
  167. package/dist/transports/TransportBridge.d.ts.map +1 -0
  168. package/dist/transports/TransportManager.d.ts +251 -0
  169. package/dist/transports/TransportManager.d.ts.map +1 -0
  170. package/dist/transports/index.d.ts +6 -0
  171. package/dist/transports/index.d.ts.map +1 -0
  172. package/dist/transports-module.d.ts +10 -0
  173. package/dist/transports-module.d.ts.map +1 -0
  174. package/dist/transports.cjs +7 -0
  175. package/dist/transports.js +2 -0
  176. package/dist/types/core.d.ts +295 -17
  177. package/dist/types/core.d.ts.map +1 -1
  178. package/dist/types/handlers.d.ts +0 -67
  179. package/dist/types/handlers.d.ts.map +1 -1
  180. package/dist/types/hooks.d.ts +138 -0
  181. package/dist/types/hooks.d.ts.map +1 -0
  182. package/dist/types/index.d.ts +7 -3
  183. package/dist/types/index.d.ts.map +1 -1
  184. package/dist/types/serializers.d.ts +97 -0
  185. package/dist/types/serializers.d.ts.map +1 -0
  186. package/dist/types/transports.d.ts +132 -0
  187. package/dist/types/transports.d.ts.map +1 -0
  188. package/dist/utils/ansi-colors.d.ts +115 -0
  189. package/dist/utils/ansi-colors.d.ts.map +1 -0
  190. package/dist/utils/environment-detector.d.ts +53 -0
  191. package/dist/utils/environment-detector.d.ts.map +1 -0
  192. package/dist/utils/formatting.d.ts +9 -8
  193. package/dist/utils/formatting.d.ts.map +1 -1
  194. package/dist/utils/index.d.ts +3 -2
  195. package/dist/utils/index.d.ts.map +1 -1
  196. package/dist/utils/output.d.ts +14 -17
  197. package/dist/utils/output.d.ts.map +1 -1
  198. package/dist/utils/stackTrace.d.ts +2 -2
  199. package/dist/utils/stackTrace.d.ts.map +1 -1
  200. package/dist/utils/timestamps.d.ts +0 -12
  201. package/dist/utils/timestamps.d.ts.map +1 -1
  202. package/package.json +95 -21
  203. package/.claude/settings.local.json +0 -39
  204. package/.github/workflows/ci-quality.yml +0 -357
  205. package/.github/workflows/docs-demo.yml +0 -119
  206. package/.github/workflows/releases-core.yml +0 -512
  207. package/.github/workflows/releases-full.yml +0 -582
  208. package/.github/workflows-backup/ci.yml +0 -221
  209. package/.github/workflows-backup/nightly.yml +0 -196
  210. package/.github/workflows-backup/release-optimized.yml +0 -373
  211. package/.github/workflows-backup/release.yml +0 -269
  212. package/.release-notes-0.2.0.md +0 -129
  213. package/.yamllint +0 -28
  214. package/CHANGELOG.json +0 -865
  215. package/CLAUDE.md +0 -204
  216. package/bun.lock +0 -323
  217. package/demo.html +0 -847
  218. package/dist/.tsbuildinfo +0 -1
  219. package/dist/Logger.js +0 -1124
  220. package/dist/ScopedLogger.js +0 -426
  221. package/dist/chunks/Logger-Crw1woqR.js +0 -3464
  222. package/dist/chunks/Logger-Crw1woqR.js.map +0 -1
  223. package/dist/chunks/Logger-D_p3xnbq.js +0 -2
  224. package/dist/chunks/Logger-D_p3xnbq.js.map +0 -1
  225. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +0 -33
  226. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +0 -1
  227. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +0 -2
  228. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +0 -1
  229. package/dist/chunks/environment-Bxbnw4pd.js +0 -544
  230. package/dist/chunks/environment-Bxbnw4pd.js.map +0 -1
  231. package/dist/chunks/environment-Dm66zOML.js +0 -4
  232. package/dist/chunks/environment-Dm66zOML.js.map +0 -1
  233. package/dist/chunks/formatting-C0riPC5_.js +0 -95
  234. package/dist/chunks/formatting-C0riPC5_.js.map +0 -1
  235. package/dist/chunks/formatting-DNCAV66-.js +0 -2
  236. package/dist/chunks/formatting-DNCAV66-.js.map +0 -1
  237. package/dist/cli/CommandProcessor.js +0 -184
  238. package/dist/cli/commands/ConfigCommand.js +0 -88
  239. package/dist/cli/commands/ExportCommand.js +0 -243
  240. package/dist/cli/commands/HistoryCommand.d.ts +0 -50
  241. package/dist/cli/commands/HistoryCommand.d.ts.map +0 -1
  242. package/dist/cli/commands/HistoryCommand.js +0 -96
  243. package/dist/cli/commands/StatusCommand.d.ts +0 -33
  244. package/dist/cli/commands/StatusCommand.d.ts.map +0 -1
  245. package/dist/cli/commands/StatusCommand.js +0 -93
  246. package/dist/cli/commands/ThemeCommand.js +0 -79
  247. package/dist/cli/help.js +0 -118
  248. package/dist/cli/index.js +0 -46
  249. package/dist/constants.js +0 -159
  250. package/dist/example.d.ts +0 -18
  251. package/dist/example.d.ts.map +0 -1
  252. package/dist/example.js +0 -154
  253. package/dist/exports-module.d.ts +0 -203
  254. package/dist/exports-module.d.ts.map +0 -1
  255. package/dist/exports-module.js +0 -260
  256. package/dist/exports.cjs +0 -2
  257. package/dist/exports.cjs.map +0 -1
  258. package/dist/exports.js +0 -238
  259. package/dist/exports.js.map +0 -1
  260. package/dist/handlers/AnalyticsLogHandler.d.ts +0 -11
  261. package/dist/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  262. package/dist/handlers/AnalyticsLogHandler.js +0 -19
  263. package/dist/handlers/ExportLogHandler.d.ts +0 -103
  264. package/dist/handlers/ExportLogHandler.d.ts.map +0 -1
  265. package/dist/handlers/ExportLogHandler.js +0 -516
  266. package/dist/handlers/FileLogHandler.d.ts +0 -36
  267. package/dist/handlers/FileLogHandler.d.ts.map +0 -1
  268. package/dist/handlers/FileLogHandler.js +0 -156
  269. package/dist/handlers/RemoteLogHandler.d.ts +0 -14
  270. package/dist/handlers/RemoteLogHandler.d.ts.map +0 -1
  271. package/dist/handlers/RemoteLogHandler.js +0 -37
  272. package/dist/handlers/index.d.ts +0 -8
  273. package/dist/handlers/index.d.ts.map +0 -1
  274. package/dist/handlers/index.js +0 -7
  275. package/dist/main.d.ts +0 -2
  276. package/dist/main.d.ts.map +0 -1
  277. package/dist/main.js +0 -139
  278. package/dist/styling/LogStyleBuilder.d.ts +0 -149
  279. package/dist/styling/LogStyleBuilder.d.ts.map +0 -1
  280. package/dist/styling/LogStyleBuilder.js +0 -289
  281. package/dist/styling/SemanticStyles.d.ts +0 -181
  282. package/dist/styling/SemanticStyles.d.ts.map +0 -1
  283. package/dist/styling/SemanticStyles.js +0 -339
  284. package/dist/styling/SmartPresets.js +0 -276
  285. package/dist/styling/StyleBuilder.js +0 -280
  286. package/dist/styling/banners.js +0 -155
  287. package/dist/styling/index.js +0 -9
  288. package/dist/styling/themes.js +0 -231
  289. package/dist/styling-module.d.ts +0 -185
  290. package/dist/styling-module.d.ts.map +0 -1
  291. package/dist/styling-module.js +0 -199
  292. package/dist/styling.cjs +0 -2
  293. package/dist/styling.cjs.map +0 -1
  294. package/dist/styling.js +0 -146
  295. package/dist/styling.js.map +0 -1
  296. package/dist/types/Logger.d.ts +0 -700
  297. package/dist/types/Logger.d.ts.map +0 -1
  298. package/dist/types/ScopedLogger.d.ts +0 -310
  299. package/dist/types/ScopedLogger.d.ts.map +0 -1
  300. package/dist/types/cli/CommandProcessor.d.ts +0 -100
  301. package/dist/types/cli/CommandProcessor.d.ts.map +0 -1
  302. package/dist/types/cli/commands/ConfigCommand.d.ts +0 -14
  303. package/dist/types/cli/commands/ConfigCommand.d.ts.map +0 -1
  304. package/dist/types/cli/commands/ExportCommand.d.ts +0 -48
  305. package/dist/types/cli/commands/ExportCommand.d.ts.map +0 -1
  306. package/dist/types/cli/commands/HistoryCommand.d.ts +0 -47
  307. package/dist/types/cli/commands/HistoryCommand.d.ts.map +0 -1
  308. package/dist/types/cli/commands/StatusCommand.d.ts +0 -30
  309. package/dist/types/cli/commands/StatusCommand.d.ts.map +0 -1
  310. package/dist/types/cli/commands/ThemeCommand.d.ts +0 -30
  311. package/dist/types/cli/commands/ThemeCommand.d.ts.map +0 -1
  312. package/dist/types/cli/help.d.ts +0 -12
  313. package/dist/types/cli/help.d.ts.map +0 -1
  314. package/dist/types/cli/index.d.ts +0 -15
  315. package/dist/types/cli/index.d.ts.map +0 -1
  316. package/dist/types/constants.d.ts +0 -119
  317. package/dist/types/constants.d.ts.map +0 -1
  318. package/dist/types/core.js +0 -28
  319. package/dist/types/example.d.ts +0 -18
  320. package/dist/types/example.d.ts.map +0 -1
  321. package/dist/types/exports-module.d.ts +0 -196
  322. package/dist/types/exports-module.d.ts.map +0 -1
  323. package/dist/types/handlers/AnalyticsLogHandler.d.ts +0 -8
  324. package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  325. package/dist/types/handlers/ExportLogHandler.d.ts +0 -100
  326. package/dist/types/handlers/ExportLogHandler.d.ts.map +0 -1
  327. package/dist/types/handlers/FileLogHandler.d.ts +0 -33
  328. package/dist/types/handlers/FileLogHandler.d.ts.map +0 -1
  329. package/dist/types/handlers/RemoteLogHandler.d.ts +0 -11
  330. package/dist/types/handlers/RemoteLogHandler.d.ts.map +0 -1
  331. package/dist/types/handlers/index.d.ts +0 -8
  332. package/dist/types/handlers/index.d.ts.map +0 -1
  333. package/dist/types/handlers.js +0 -4
  334. package/dist/types/index.js +0 -4
  335. package/dist/types/main.d.ts +0 -2
  336. package/dist/types/main.d.ts.map +0 -1
  337. package/dist/types/styling/LogStyleBuilder.d.ts +0 -146
  338. package/dist/types/styling/LogStyleBuilder.d.ts.map +0 -1
  339. package/dist/types/styling/SemanticStyles.d.ts +0 -178
  340. package/dist/types/styling/SemanticStyles.d.ts.map +0 -1
  341. package/dist/types/styling/SmartPresets.d.ts +0 -22
  342. package/dist/types/styling/SmartPresets.d.ts.map +0 -1
  343. package/dist/types/styling/StyleBuilder.d.ts +0 -140
  344. package/dist/types/styling/StyleBuilder.d.ts.map +0 -1
  345. package/dist/types/styling/banners.d.ts +0 -42
  346. package/dist/types/styling/banners.d.ts.map +0 -1
  347. package/dist/types/styling/index.d.ts +0 -10
  348. package/dist/types/styling/index.d.ts.map +0 -1
  349. package/dist/types/styling/themes.d.ts +0 -7
  350. package/dist/types/styling/themes.d.ts.map +0 -1
  351. package/dist/types/styling-module.d.ts +0 -178
  352. package/dist/types/styling-module.d.ts.map +0 -1
  353. package/dist/types/types/core.d.ts +0 -221
  354. package/dist/types/types/core.d.ts.map +0 -1
  355. package/dist/types/types/handlers.d.ts +0 -85
  356. package/dist/types/types/handlers.d.ts.map +0 -1
  357. package/dist/types/types/index.d.ts +0 -7
  358. package/dist/types/types/index.d.ts.map +0 -1
  359. package/dist/types/utils/environment.d.ts +0 -47
  360. package/dist/types/utils/environment.d.ts.map +0 -1
  361. package/dist/types/utils/formatting.d.ts +0 -37
  362. package/dist/types/utils/formatting.d.ts.map +0 -1
  363. package/dist/types/utils/index.d.ts +0 -7
  364. package/dist/types/utils/index.d.ts.map +0 -1
  365. package/dist/types/utils/opentui-detection.d.ts +0 -34
  366. package/dist/types/utils/opentui-detection.d.ts.map +0 -1
  367. package/dist/types/utils/output.d.ts +0 -41
  368. package/dist/types/utils/output.d.ts.map +0 -1
  369. package/dist/types/utils/stackTrace.d.ts +0 -6
  370. package/dist/types/utils/stackTrace.d.ts.map +0 -1
  371. package/dist/types/utils/timestamps.d.ts +0 -20
  372. package/dist/types/utils/timestamps.d.ts.map +0 -1
  373. package/dist/utils/environment.d.ts +0 -47
  374. package/dist/utils/environment.d.ts.map +0 -1
  375. package/dist/utils/environment.js +0 -85
  376. package/dist/utils/formatting.js +0 -117
  377. package/dist/utils/index.js +0 -6
  378. package/dist/utils/opentui-detection.d.ts +0 -34
  379. package/dist/utils/opentui-detection.d.ts.map +0 -1
  380. package/dist/utils/opentui-detection.js +0 -116
  381. package/dist/utils/output.js +0 -150
  382. package/dist/utils/stackTrace.js +0 -81
  383. package/dist/utils/timestamps.js +0 -71
  384. package/dist/vite.svg +0 -1
  385. package/docs/API.md +0 -691
  386. package/docs/CORE.md +0 -264
  387. package/docs/DEVELOPMENT.md +0 -731
  388. package/docs/EXPORTS.md +0 -467
  389. package/docs/PACKAGES.md +0 -244
  390. package/docs/STYLING.md +0 -405
  391. package/docs/_config.yml +0 -36
  392. package/docs/index.md +0 -179
  393. package/examples/README.md +0 -208
  394. package/examples/basic-logging.js +0 -75
  395. package/examples/data-export.js +0 -234
  396. package/examples/package.json +0 -16
  397. package/examples/performance-timing.js +0 -170
  398. package/examples/simplified-api.js +0 -124
  399. package/examples/styling-themes.js +0 -207
  400. package/index.html +0 -358
  401. package/packages/core/package.json +0 -57
  402. package/packages/exports/package.json +0 -41
  403. package/packages/nodejs-opentui/README.md +0 -232
  404. package/packages/nodejs-opentui/package.json +0 -72
  405. package/packages/nodejs-opentui/src/LogRenderer.ts +0 -171
  406. package/packages/nodejs-opentui/src/OpenTUILogHandler.ts +0 -178
  407. package/packages/nodejs-opentui/src/components/LogBadge.tsx +0 -131
  408. package/packages/nodejs-opentui/src/index.ts +0 -133
  409. package/packages/nodejs-opentui/src/types.ts +0 -158
  410. package/packages/nodejs-opentui/tsconfig.json +0 -20
  411. package/packages/styling/package.json +0 -41
  412. package/project-utils/README.md +0 -172
  413. package/project-utils/auto-release-gemini.ts +0 -1193
  414. package/project-utils/auto-release-ui.ts +0 -1329
  415. package/project-utils/commit-generator.ts +0 -1385
  416. package/project-utils/commit-ui.ts +0 -264
  417. package/project-utils/git-utils.ts +0 -199
  418. package/project-utils/github-release-manager.ts +0 -466
  419. package/project-utils/project-config.ts +0 -260
  420. package/project-utils/prompt-templates.js +0 -345
  421. package/project-utils/prompt-templates.ts +0 -422
  422. package/project-utils/version-manager.ts +0 -1078
  423. package/public/vite.svg +0 -1
  424. package/src/Logger.ts +0 -1276
  425. package/src/ScopedLogger.ts +0 -454
  426. package/src/cli/CommandProcessor.ts +0 -248
  427. package/src/cli/commands/ConfigCommand.ts +0 -93
  428. package/src/cli/commands/ExportCommand.ts +0 -276
  429. package/src/cli/commands/HistoryCommand.ts +0 -117
  430. package/src/cli/commands/StatusCommand.ts +0 -112
  431. package/src/cli/commands/ThemeCommand.ts +0 -88
  432. package/src/cli/help.ts +0 -127
  433. package/src/cli/index.ts +0 -71
  434. package/src/constants.ts +0 -171
  435. package/src/core.ts +0 -393
  436. package/src/example.ts +0 -210
  437. package/src/exports-module.ts +0 -311
  438. package/src/handlers/AnalyticsLogHandler.ts +0 -22
  439. package/src/handlers/ExportLogHandler.ts +0 -609
  440. package/src/handlers/FileLogHandler.ts +0 -169
  441. package/src/handlers/RemoteLogHandler.ts +0 -42
  442. package/src/handlers/index.ts +0 -8
  443. package/src/index.ts +0 -209
  444. package/src/main.ts +0 -196
  445. package/src/style.css +0 -96
  446. package/src/styling/LogStyleBuilder.ts +0 -355
  447. package/src/styling/SemanticStyles.ts +0 -380
  448. package/src/styling/SmartPresets.ts +0 -288
  449. package/src/styling/StyleBuilder.ts +0 -319
  450. package/src/styling/banners.ts +0 -168
  451. package/src/styling/index.ts +0 -27
  452. package/src/styling/themes.ts +0 -235
  453. package/src/styling-module.ts +0 -244
  454. package/src/types/core.ts +0 -236
  455. package/src/types/handlers.ts +0 -95
  456. package/src/types/index.ts +0 -35
  457. package/src/typescript.svg +0 -1
  458. package/src/utils/environment.ts +0 -94
  459. package/src/utils/formatting.ts +0 -142
  460. package/src/utils/index.ts +0 -21
  461. package/src/utils/opentui-detection.ts +0 -138
  462. package/src/utils/output.ts +0 -185
  463. package/src/utils/stackTrace.ts +0 -95
  464. package/src/utils/timestamps.ts +0 -80
  465. package/src/vite-env.d.ts +0 -1
  466. package/test-core-browser.html +0 -237
  467. package/test-core-node.js +0 -63
  468. package/tests/test-conflict-resolution.ts +0 -391
  469. package/tests/validate-workflows.sh +0 -131
  470. package/tests/yaml-autofix.sh +0 -146
  471. package/tsconfig.json +0 -50
  472. package/vite.config.ts +0 -223
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-BtkwpzYv.js","names":[],"sources":["../../src/terminal/color-converter.ts","../../src/terminal/formatter.ts","../../src/playground/step.ts","../../src/playground/header.ts","../../src/playground/divider.ts","../../src/playground/box.ts","../../src/playground/cli-table.ts","../../src/playground/spinner.ts"],"sourcesContent":["/**\n * Color Converter - CSS colors to ANSI extended color codes\n * Supports 256-color and truecolor (24-bit) terminals\n */\n\nexport type ColorCapability = 'full' | 'basic' | 'none';\n\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nconst ANSI_16_COLORS: Record<string, { fg: string; bg: string; bright: { fg: string; bg: string } }> = {\n black: { fg: '30', bg: '40', bright: { fg: '90', bg: '100' } },\n red: { fg: '31', bg: '41', bright: { fg: '91', bg: '101' } },\n green: { fg: '32', bg: '42', bright: { fg: '92', bg: '102' } },\n yellow: { fg: '33', bg: '43', bright: { fg: '93', bg: '103' } },\n blue: { fg: '34', bg: '44', bright: { fg: '94', bg: '104' } },\n magenta: { fg: '35', bg: '45', bright: { fg: '95', bg: '105' } },\n cyan: { fg: '36', bg: '46', bright: { fg: '96', bg: '106' } },\n white: { fg: '37', bg: '47', bright: { fg: '97', bg: '107' } },\n gray: { fg: '90', bg: '100', bright: { fg: '37', bg: '47' } },\n grey: { fg: '90', bg: '100', bright: { fg: '37', bg: '47' } },\n};\n\nconst CSS_NAMED_COLORS: Record<string, string> = {\n aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#00ffff',\n aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc',\n bisque: '#ffe4c4', black: '#000000', blanchedalmond: '#ffebcd',\n blue: '#0000ff', blueviolet: '#8a2be2', brown: '#a52a2a',\n burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00',\n chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#00ffff',\n darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9', darkgreen: '#006400', darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00',\n darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493',\n deepskyblue: '#00bfff', dimgray: '#696969', dodgerblue: '#1e90ff',\n firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22',\n fuchsia: '#ff00ff', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff',\n gold: '#ffd700', goldenrod: '#daa520', gray: '#808080',\n green: '#008000', greenyellow: '#adff2f', honeydew: '#f0fff0',\n hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082',\n ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa',\n lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd',\n lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2', lightgray: '#d3d3d3', lightgreen: '#90ee90',\n lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa', lightslategray: '#778899', lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0', lime: '#00ff00', limegreen: '#32cd32',\n linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000',\n mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3',\n mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585',\n midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080',\n oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23',\n orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6',\n palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee',\n palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9',\n peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd',\n powderblue: '#b0e0e6', purple: '#800080', rebeccapurple: '#663399',\n red: '#ff0000', rosybrown: '#bc8f8f', royalblue: '#4169e1',\n saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460',\n seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d',\n silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd',\n slategray: '#708090', snow: '#fffafa', springgreen: '#00ff7f',\n steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080',\n thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0',\n violet: '#ee82ee', wheat: '#f5deb3', white: '#ffffff',\n whitesmoke: '#f5f5f5', yellow: '#ffff00', yellowgreen: '#9acd32',\n};\n\nexport function hexToRgb(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result || !result[1] || !result[2] || !result[3]) {\n return { r: 255, g: 255, b: 255 };\n }\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');\n}\n\nexport function hexTo256(hex: string): number {\n const { r, g, b } = hexToRgb(hex);\n\n if (r === g && g === b) {\n if (r < 8) return 16;\n if (r > 248) return 231;\n return Math.round(((r - 8) / 247) * 24) + 232;\n }\n\n const ri = Math.round(r / 255 * 5);\n const gi = Math.round(g / 255 * 5);\n const bi = Math.round(b / 255 * 5);\n\n return 16 + (36 * ri) + (6 * gi) + bi;\n}\n\nexport function colorToHex(color: string): string {\n if (color.startsWith('#')) {\n return color;\n }\n\n const named = CSS_NAMED_COLORS[color.toLowerCase()];\n if (named) {\n return named;\n }\n\n const rgbMatch = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (rgbMatch && rgbMatch[1] && rgbMatch[2] && rgbMatch[3]) {\n return rgbToHex(\n parseInt(rgbMatch[1]),\n parseInt(rgbMatch[2]),\n parseInt(rgbMatch[3])\n );\n }\n\n return '#ffffff';\n}\n\nexport function getANSIForeground(color: string, capability: ColorCapability): string {\n if (capability === 'none') return '';\n\n const lowerColor = color.toLowerCase();\n\n if (capability === 'basic' && ANSI_16_COLORS[lowerColor]) {\n return `\\x1b[${ANSI_16_COLORS[lowerColor].fg}m`;\n }\n\n if (capability === 'basic') {\n const hex = colorToHex(color);\n const nearestBasic = findNearestBasicColor(hex);\n const basicColor = ANSI_16_COLORS[nearestBasic];\n return basicColor ? `\\x1b[${basicColor.fg}m` : '\\x1b[37m';\n }\n\n const hex = colorToHex(color);\n const { r, g, b } = hexToRgb(hex);\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\nexport function getANSIBackground(color: string, capability: ColorCapability): string {\n if (capability === 'none') return '';\n\n const lowerColor = color.toLowerCase();\n\n if (capability === 'basic' && ANSI_16_COLORS[lowerColor]) {\n return `\\x1b[${ANSI_16_COLORS[lowerColor].bg}m`;\n }\n\n if (capability === 'basic') {\n const hex = colorToHex(color);\n const nearestBasic = findNearestBasicColor(hex);\n const basicColor = ANSI_16_COLORS[nearestBasic];\n return basicColor ? `\\x1b[${basicColor.bg}m` : '\\x1b[47m';\n }\n\n const hex = colorToHex(color);\n const { r, g, b } = hexToRgb(hex);\n return `\\x1b[48;2;${r};${g};${b}m`;\n}\n\nexport function getANSI256Foreground(colorIndex: number): string {\n return `\\x1b[38;5;${colorIndex}m`;\n}\n\nexport function getANSI256Background(colorIndex: number): string {\n return `\\x1b[48;5;${colorIndex}m`;\n}\n\nfunction findNearestBasicColor(hex: string): string {\n const { r, g, b } = hexToRgb(hex);\n const basicColors: Record<string, RGB> = {\n black: { r: 0, g: 0, b: 0 },\n red: { r: 205, g: 0, b: 0 },\n green: { r: 0, g: 205, b: 0 },\n yellow: { r: 205, g: 205, b: 0 },\n blue: { r: 0, g: 0, b: 238 },\n magenta: { r: 205, g: 0, b: 205 },\n cyan: { r: 0, g: 205, b: 205 },\n white: { r: 229, g: 229, b: 229 },\n };\n\n let nearest = 'white';\n let minDistance = Infinity;\n\n for (const [name, rgb] of Object.entries(basicColors)) {\n const distance = Math.sqrt(\n Math.pow(r - rgb.r, 2) +\n Math.pow(g - rgb.g, 2) +\n Math.pow(b - rgb.b, 2)\n );\n if (distance < minDistance) {\n minDistance = distance;\n nearest = name;\n }\n }\n\n return nearest;\n}\n\nexport function extractGradientColors(gradient: string): string[] {\n const hexMatches = gradient.match(/#[a-fA-F0-9]{6}/g) || [];\n const rgbMatches = gradient.match(/rgba?\\([^)]+\\)/g) || [];\n const namedMatches = gradient.match(/,\\s*([a-z]+)(?:\\s|,|\\))/gi) || [];\n\n const colors: string[] = [\n ...hexMatches,\n ...rgbMatches.map(colorToHex),\n ...namedMatches.map(m => {\n const name = m.replace(/[,\\s)]/g, '').toLowerCase();\n return CSS_NAMED_COLORS[name] || null;\n }).filter((c): c is string => c !== null)\n ];\n\n return colors.length > 0 ? colors : ['#ffffff'];\n}\n\nexport function gradientToSingleColor(gradient: string): string {\n const colors = extractGradientColors(gradient);\n if (colors.length === 0) return '#ffffff';\n if (colors.length === 1) return colors[0] ?? '#ffffff';\n\n const rgbs = colors.map(c => hexToRgb(colorToHex(c)));\n const avgR = Math.round(rgbs.reduce((sum, rgb) => sum + rgb.r, 0) / rgbs.length);\n const avgG = Math.round(rgbs.reduce((sum, rgb) => sum + rgb.g, 0) / rgbs.length);\n const avgB = Math.round(rgbs.reduce((sum, rgb) => sum + rgb.b, 0) / rgbs.length);\n\n return rgbToHex(avgR, avgG, avgB);\n}\n\nexport function cssColorToANSI(\n cssColor: string,\n capability: ColorCapability,\n isBackground: boolean = false\n): string {\n if (capability === 'none') return '';\n\n let resolvedColor: string;\n\n if (cssColor.includes('gradient')) {\n resolvedColor = gradientToSingleColor(cssColor);\n } else {\n resolvedColor = colorToHex(cssColor);\n }\n\n return isBackground\n ? getANSIBackground(resolvedColor, capability)\n : getANSIForeground(resolvedColor, capability);\n}\n\nexport const ANSI = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n blink: '\\x1b[5m',\n inverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n strikethrough: '\\x1b[9m',\n\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n brightRed: '\\x1b[91m',\n brightGreen: '\\x1b[92m',\n brightYellow: '\\x1b[93m',\n brightBlue: '\\x1b[94m',\n brightMagenta: '\\x1b[95m',\n brightCyan: '\\x1b[96m',\n brightWhite: '\\x1b[97m',\n },\n\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m',\n gray: '\\x1b[100m',\n brightRed: '\\x1b[101m',\n brightGreen: '\\x1b[102m',\n brightYellow: '\\x1b[103m',\n brightBlue: '\\x1b[104m',\n brightMagenta: '\\x1b[105m',\n brightCyan: '\\x1b[106m',\n brightWhite: '\\x1b[107m',\n },\n\n rgb: (r: number, g: number, b: number) => `\\x1b[38;2;${r};${g};${b}m`,\n bgRgb: (r: number, g: number, b: number) => `\\x1b[48;2;${r};${g};${b}m`,\n color256: (n: number) => `\\x1b[38;5;${n}m`,\n bgColor256: (n: number) => `\\x1b[48;5;${n}m`,\n};\n","/**\n * Terminal Formatter - Alignment, key-value, and advanced terminal formatting\n */\n\nimport { getTerminalWidth } from '../utils/environment-detector.js';\nimport { getANSIForeground, getANSIBackground, ANSI, type ColorCapability } from './color-converter.js';\nimport type { ColumnConfig, ColumnAlign, BadgeStyle, TimestampFormat, LogOptions } from '../types/index.js';\n\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nexport function getVisibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\nexport function padToWidth(str: string, width: number, align: ColumnAlign = 'left'): string {\n const visibleLen = getVisibleLength(str);\n if (visibleLen >= width) return str;\n\n const padding = width - visibleLen;\n\n switch (align) {\n case 'right':\n return ' '.repeat(padding) + str;\n case 'center':\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return ' '.repeat(leftPad) + str + ' '.repeat(rightPad);\n case 'left':\n default:\n return str + ' '.repeat(padding);\n }\n}\n\nexport function formatWithRightAlign(\n leftContent: string,\n rightContent: string,\n maxWidth?: number\n): string {\n const width = maxWidth ?? getTerminalWidth();\n const leftLen = getVisibleLength(leftContent);\n const rightLen = getVisibleLength(rightContent);\n\n const gap = width - leftLen - rightLen;\n if (gap <= 1) {\n return `${leftContent} ${rightContent}`;\n }\n\n return `${leftContent}${' '.repeat(gap)}${rightContent}`;\n}\n\nexport function formatColumns(\n columns: ColumnConfig[],\n maxWidth?: number,\n colorCapability: ColorCapability = 'full'\n): string {\n const width = maxWidth ?? getTerminalWidth();\n const totalColumns = columns.length;\n\n const columnsWithWidths = columns.map((col, idx) => {\n if (col.width) return { ...col, calculatedWidth: col.width };\n\n const remainingWidth = width - columns\n .filter((c, i) => i !== idx && c.width)\n .reduce((sum, c) => sum + (c.width ?? 0), 0);\n\n const autoColumns = columns.filter(c => !c.width).length;\n const calculatedWidth = Math.floor(remainingWidth / autoColumns);\n\n return { ...col, calculatedWidth };\n });\n\n return columnsWithWidths.map(col => {\n let content = col.content;\n\n if (col.color && colorCapability !== 'none') {\n const colorCode = getANSIForeground(col.color, colorCapability);\n content = `${colorCode}${content}${ANSI.reset}`;\n }\n\n return padToWidth(content, col.calculatedWidth, col.align);\n }).join('');\n}\n\nexport function formatKeyValue(\n obj: Record<string, unknown>,\n colorCapability: ColorCapability = 'full',\n options: { separator?: string; keyColor?: string; valueColor?: string } = {}\n): string {\n const {\n separator = ' ',\n keyColor = '#888888',\n valueColor = '#00ffff'\n } = options;\n\n const entries = Object.entries(obj);\n if (entries.length === 0) return '';\n\n const keyColorCode = colorCapability !== 'none'\n ? getANSIForeground(keyColor, colorCapability)\n : '';\n const valueColorCode = colorCapability !== 'none'\n ? getANSIForeground(valueColor, colorCapability)\n : '';\n const reset = colorCapability !== 'none' ? ANSI.reset : '';\n\n return entries\n .map(([key, value]) => {\n const valueStr = typeof value === 'object'\n ? JSON.stringify(value)\n : String(value);\n return `${keyColorCode}${key}:${reset} ${valueColorCode}${valueStr}${reset}`;\n })\n .join(separator);\n}\n\nexport function isKeyValueObject(obj: unknown): obj is Record<string, unknown> {\n if (typeof obj !== 'object' || obj === null) return false;\n if (Array.isArray(obj)) return false;\n\n const proto = Object.getPrototypeOf(obj);\n if (proto !== Object.prototype && proto !== null) return false;\n\n const values = Object.values(obj);\n return values.every(v =>\n typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n v === null\n );\n}\n\nexport function formatBadge(\n badge: string,\n style: BadgeStyle = 'brackets',\n colorCapability: ColorCapability = 'full',\n color?: string\n): string {\n const reset = colorCapability !== 'none' ? ANSI.reset : '';\n\n const text = badge.toUpperCase();\n\n switch (style) {\n case 'rounded':\n const colorCode1 = color && colorCapability !== 'none' ? getANSIForeground(color, colorCapability) : '';\n const bgBlack1 = colorCapability !== 'none' ? ANSI.bg.black : '';\n return `${bgBlack1}${colorCode1}⟨${text}⟩${reset}`;\n case 'plain':\n const colorCode2 = color && colorCapability !== 'none' ? getANSIForeground(color, colorCapability) : '';\n return `${colorCode2}${text}${reset}`;\n case 'unicode':\n const colorCode3 = color && colorCapability !== 'none' ? getANSIForeground(color, colorCapability) : '';\n const bgBlack3 = colorCapability !== 'none' ? ANSI.bg.black : '';\n return `${bgBlack3}${colorCode3}╭${text}╮${reset}`;\n case 'pill':\n // Badge con background de color y texto blanco/negro\n const bgColor = color && colorCapability !== 'none' ? getANSIBackground(color, colorCapability) : '';\n const fgColor = colorCapability !== 'none' ? getANSIForeground('#000000', colorCapability) : '';\n return `${bgColor}${fgColor}[${text}]${reset}`;\n case 'brackets':\n default:\n const colorCode5 = color && colorCapability !== 'none' ? getANSIForeground(color, colorCapability) : '';\n const bgBlack5 = colorCapability !== 'none' ? ANSI.bg.black : '';\n return `${bgBlack5}${colorCode5}[${text}]${reset}`;\n }\n}\n\nexport function formatTimestamp(\n date: Date = new Date(),\n format: TimestampFormat = 'time'\n): string {\n switch (format) {\n case 'iso':\n return date.toISOString();\n case 'date':\n return date.toISOString().split('T')[0] ?? '';\n case 'time':\n return date.toTimeString().slice(0, 8);\n case 'timeMs':\n return date.toTimeString().slice(0, 8) + '.' +\n String(date.getMilliseconds()).padStart(3, '0');\n case 'relative':\n return formatRelativeTime(date);\n case 'elapsed':\n return formatElapsedTime(date);\n case 'custom':\n default:\n return date.toLocaleTimeString();\n }\n}\n\nlet startTime: number | null = null;\n\nexport function formatRelativeTime(date: Date): string {\n if (startTime === null) {\n startTime = Date.now();\n }\n\n const diff = date.getTime() - startTime;\n\n if (diff < 1000) {\n return `+${diff}ms`;\n } else if (diff < 60000) {\n return `+${(diff / 1000).toFixed(1)}s`;\n } else {\n const mins = Math.floor(diff / 60000);\n const secs = Math.floor((diff % 60000) / 1000);\n return `+${mins}m${secs}s`;\n }\n}\n\nexport function formatElapsedTime(date: Date): string {\n if (startTime === null) {\n startTime = Date.now();\n }\n\n const diff = date.getTime() - startTime;\n const hours = Math.floor(diff / 3600000);\n const mins = Math.floor((diff % 3600000) / 60000);\n const secs = Math.floor((diff % 60000) / 1000);\n\n return `${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;\n}\n\nexport function resetStartTime(): void {\n startTime = Date.now();\n}\n\nexport function applyLogOptions(\n message: string,\n options: LogOptions,\n colorCapability: ColorCapability = 'full'\n): string {\n let result = message;\n\n if (options.rightAlign) {\n result = formatWithRightAlign(message, options.rightAlign);\n }\n\n return result;\n}\n","/**\n * @fileoverview Step progress renderer for CLI primitives\n */\n\nimport { getANSIForeground, ANSI, type ColorCapability } from '../terminal/color-converter.js';\n\n/**\n * Renderiza un indicador de progreso de step con el formato ` [n/total] msg`,\n * donde el `[n/total]` se emite en cian bold (respetando `colorCap`) para\n * destacarlo del mensaje descriptivo. Pensado para output secuencial de CLI\n * tipo \"steps de un build\", \"fases de un deploy\" o \"tareas de un script\".\n *\n * No hace ningún chequeo de rango sobre `current`/`total` — el caller es\n * responsable de pasar valores coherentes (se renderizan tal cual).\n *\n * @param current - Número de step actual (típicamente 1-based).\n * @param total - Total de steps del proceso.\n * @param msg - Descripción corta del step en curso.\n * @param colorCap - Capacidad de color del terminal destino. Si es `'none'`,\n * el label `[n/total]` se emite sin color.\n * @returns String de una sola línea con formato ` [n/total] msg`.\n *\n * @example\n * ```ts\n * const steps = ['Resolving deps', 'Bundling', 'Writing dist'];\n * steps.forEach((step, i) => {\n * process.stdout.write(renderStep(i + 1, steps.length, step, 'full') + '\\n');\n * });\n * // [1/3] Resolving deps\n * // [2/3] Bundling\n * // [3/3] Writing dist\n * ```\n */\nexport function renderStep(current: number, total: number, msg: string, colorCap: ColorCapability): string {\n const label = `[${current}/${total}]`;\n const colored = colorCap !== 'none'\n ? getANSIForeground('#00bcd4', colorCap) + ANSI.bold + label + ANSI.reset\n : label;\n return ` ${colored} ${msg}`;\n}\n","/**\n * @fileoverview Header renderer for CLI primitives\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\n\n/**\n * Renderiza un header de sección: `title` en bold seguido opcionalmente de\n * `subtitle` en dim (ANSI `2`), ideal para marcar bloques en output de CLI.\n * No usa colores de foreground — sólo atributos de texto, así que el renderer\n * es seguro para cualquier terminal sin importar la paleta del theme activo.\n *\n * @param title - Texto principal del header (siempre en bold).\n * @param subtitle - Texto secundario a la derecha del título; se renderiza\n * dimmed y separado por un espacio. Omitir si no aplica.\n * @returns String de una línea con formato ` <bold>title</bold> <dim>subtitle</dim>`.\n *\n * @example\n * ```ts\n * process.stdout.write(renderHeader('Deploy', 'production · us-east-1') + '\\n');\n * // **Deploy** production · us-east-1 (con atributos ANSI aplicados)\n * ```\n *\n * @example\n * ```ts\n * // Header sin subtítulo\n * process.stdout.write(renderHeader('Build summary') + '\\n');\n * ```\n */\nexport function renderHeader(title: string, subtitle?: string): string {\n const t = ANSI.bold + title + ANSI.reset;\n const s = subtitle ? ANSI.dim + ` ${subtitle}` + ANSI.reset : '';\n return ` ${t}${s}`;\n}\n","/**\n * @fileoverview Divider renderer for CLI primitives\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\nimport { getTerminalWidth } from '../utils/environment-detector.js';\n\n/**\n * Renderiza una línea divisoria horizontal dimmed (ANSI `2`) usando el\n * caracter `─`. Por defecto el ancho es `min(terminalWidth - 4, 60)` para\n * no ocupar todo el ancho de ventana y quedar visualmente alineado con otros\n * primitives (box, header, table) que dejan 2 espacios de indentación.\n *\n * @param width - Ancho explícito en columnas visibles. Si se omite, se calcula\n * automáticamente a partir del ancho del terminal (capped a 60).\n * @returns String de una línea con `width` caracteres `─` envueltos en ANSI dim.\n *\n * @example\n * ```ts\n * // Divider automático (respeta el ancho del terminal)\n * process.stdout.write(renderDivider() + '\\n');\n * ```\n *\n * @example\n * ```ts\n * // Divider de ancho fijo para alinear con otra salida\n * process.stdout.write(renderDivider(40) + '\\n');\n * ```\n *\n * @see {@link getTerminalWidth} para la detección de ancho cuando `width` se omite.\n */\nexport function renderDivider(width?: number): string {\n const w = width ?? Math.min(getTerminalWidth() - 4, 60);\n return ANSI.dim + ' ' + '\\u2500'.repeat(w) + ANSI.reset;\n}\n","/**\n * @fileoverview Box renderer for CLI primitives\n */\n\nimport type { IBoxOptions } from '../types/core.js';\nimport type { ColorCapability } from '../terminal/color-converter.js';\nimport { getANSIForeground, ANSI } from '../terminal/color-converter.js';\nimport { getTerminalWidth } from '../utils/environment-detector.js';\nimport { stripAnsi, getVisibleLength } from '../terminal/formatter.js';\n\n/**\n * Mapa de juegos de caracteres Unicode para los 4 estilos de borde soportados\n * por {@link renderBox}. Cada entrada expone las 4 esquinas (`tl`, `tr`, `bl`,\n * `br`), el caracter horizontal (`h`) y el vertical (`v`) que componen el marco.\n *\n * - `single`: l\\u00edneas finas (U+2500 / U+2502).\n * - `rounded`: igual que `single` con esquinas redondeadas.\n * - `double`: l\\u00edneas dobles (U+2550 / U+2551), alto contraste visual.\n * - `bold`: l\\u00edneas gruesas (U+2501 / U+2503), para destacar bloques cr\\u00edticos.\n *\n * @internal Lookup interno del renderer; no es API p\\u00fablica.\n */\nconst BORDER_CHARS = {\n single: { tl: '\\u250c', tr: '\\u2510', bl: '\\u2514', br: '\\u2518', h: '\\u2500', v: '\\u2502' },\n rounded: { tl: '\\u256d', tr: '\\u256e', bl: '\\u2570', br: '\\u256f', h: '\\u2500', v: '\\u2502' },\n double: { tl: '\\u2554', tr: '\\u2557', bl: '\\u255a', br: '\\u255d', h: '\\u2550', v: '\\u2551' },\n bold: { tl: '\\u250f', tr: '\\u2513', bl: '\\u2517', br: '\\u251b', h: '\\u2501', v: '\\u2503' },\n} as const;\n\n/**\n * Renderiza `content` envuelto en un box con borde Unicode, respetando el\n * ancho del terminal. El ancho interno se calcula a partir de la l\\u00ednea m\\u00e1s\n * larga (o del {@link IBoxOptions.title} si es m\\u00e1s ancho) y se acota a\n * `min(terminalWidth - 4, 80)` columnas para no romper layouts estrechos.\n *\n * El padding se aplica como l\\u00edneas vac\\u00edas sim\\u00e9tricas arriba/abajo del\n * contenido. Si `borderColor` se omite o `colorCap` es `'none'`, el borde se\n * emite sin secuencias ANSI (output plain-text seguro para logs y pipes).\n *\n * @param content - Texto a envolver; puede contener m\\u00faltiples l\\u00edneas (`\\n`) y\n * secuencias ANSI embebidas \\u2014 el c\\u00e1lculo de ancho usa el largo visible.\n * @param options - Configuraci\\u00f3n del box (title, borderColor, borderStyle,\n * padding). Ver {@link IBoxOptions}.\n * @param colorCap - Capacidad de color del terminal destino. Si es `'none'`,\n * se omite cualquier secuencia ANSI.\n * @returns String multilinea con el box ya construido (sin trailing newline).\n *\n * @example\n * ```ts\n * // Box b\\u00e1sico con borde redondeado (default)\n * process.stdout.write(renderBox('Deploy completado') + '\\n');\n * ```\n *\n * @example\n * ```ts\n * // Box con t\\u00edtulo embebido en el borde superior y color custom\n * process.stdout.write(renderBox('Service: auth-svc\\nStatus: healthy', {\n * title: 'Health Check',\n * borderColor: '#00bcd4',\n * borderStyle: 'double',\n * padding: 1\n * }) + '\\n');\n * ```\n *\n * @see {@link IBoxOptions} para el detalle de cada opci\\u00f3n.\n * @see {@link getTerminalWidth} para la detecci\\u00f3n de ancho.\n */\nexport function renderBox(content: string, options: IBoxOptions = {}, colorCap: ColorCapability = 'full'): string {\n const {\n title,\n borderColor,\n borderStyle = 'rounded',\n padding = 0,\n } = options;\n\n const chars = BORDER_CHARS[borderStyle] ?? BORDER_CHARS.rounded;\n const lines = content.split('\\n');\n const maxTermWidth = Math.min(getTerminalWidth() - 4, 80);\n\n // Calculate content width from visible text\n const contentWidths = lines.map(l => getVisibleLength(l));\n const titleWidth = title ? stripAnsi(title).length + 2 : 0; // +2 for spaces around title\n const maxContentWidth = Math.max(...contentWidths, titleWidth);\n const innerWidth = Math.min(maxContentWidth + 2, maxTermWidth); // +2 for horizontal padding\n\n // Color wrapper for border chars\n const bc = borderColor && colorCap !== 'none'\n ? getANSIForeground(borderColor, colorCap)\n : '';\n const reset = bc ? ANSI.reset : '';\n\n const wrap = (char: string) => `${bc}${char}${reset}`;\n\n // Build top border (with optional title)\n let topBorder: string;\n if (title) {\n const titleStr = ` ${title} `;\n const afterTitle = innerWidth - stripAnsi(titleStr).length;\n topBorder = ` ${wrap(chars.tl)}${wrap(chars.h)}${wrap(titleStr)}${wrap(chars.h.repeat(Math.max(0, afterTitle - 1)))}${wrap(chars.tr)}`;\n } else {\n topBorder = ` ${wrap(chars.tl)}${wrap(chars.h.repeat(innerWidth))}${wrap(chars.tr)}`;\n }\n\n // Build bottom border\n const bottomBorder = ` ${wrap(chars.bl)}${wrap(chars.h.repeat(innerWidth))}${wrap(chars.br)}`;\n\n // Build padding lines\n const emptyLine = ` ${wrap(chars.v)}${' '.repeat(innerWidth)}${wrap(chars.v)}`;\n const paddingLines = padding > 0 ? Array(padding).fill(emptyLine) : [];\n\n // Build content lines\n const contentLines = lines.map(line => {\n const visible = getVisibleLength(line);\n const pad = innerWidth - visible - 1; // -1 for left space\n return ` ${wrap(chars.v)} ${line}${' '.repeat(Math.max(0, pad))}${wrap(chars.v)}`;\n });\n\n return [\n topBorder,\n ...paddingLines,\n ...contentLines,\n ...paddingLines,\n bottomBorder,\n ].join('\\n');\n}\n","/**\n * @fileoverview CLI table renderer for CLI primitives\n */\n\nimport type { ITableOptions } from '../types/core.js';\nimport type { ColorCapability } from '../terminal/color-converter.js';\nimport { getANSIForeground, ANSI } from '../terminal/color-converter.js';\nimport { getVisibleLength, padToWidth } from '../terminal/formatter.js';\n\n/**\n * Renderiza un array de objetos como tabla ASCII alineada, con headers en\n * cian bold y separador (`─`) bajo la cabecera. Las columnas se autodetectan\n * a partir de las keys del primer row salvo que `options.columns` las imponga,\n * y los labels se toman de `options.head` (default: nombres de columna).\n *\n * El ancho de cada columna se calcula como `max(header, valor más largo) + 2`\n * para garantizar padding horizontal consistente. Si `colorCap` es `'none'`,\n * se omiten todas las secuencias ANSI (útil para logs plain-text o CI).\n *\n * @param rows - Array de row objects. Un array vacío devuelve string vacío.\n * @param options - Ver {@link ITableOptions} para `columns` y `head`.\n * @param colorCap - Capacidad de color del terminal destino.\n * @returns String multilinea con la tabla (header + separator + data rows),\n * o `''` si `rows` está vacío.\n *\n * @example\n * ```ts\n * // Auto-detect columnas desde las keys del primer row\n * const rows = [\n * { service: 'auth', status: 'healthy', latency: 12 },\n * { service: 'api', status: 'degraded', latency: 245 }\n * ];\n * process.stdout.write(renderTable(rows) + '\\n');\n * // ┌─────────┬──────────┬─────────┐\n * // │ service │ status │ latency │\n * // ─────────────────────────────────\n * // │ auth │ healthy │ 12 │\n * // │ api │ degraded │ 245 │\n * ```\n *\n * @example\n * ```ts\n * // Forzar columnas y renombrar headers\n * process.stdout.write(renderTable(rows, {\n * columns: ['service', 'latency'],\n * head: ['Service', 'Latency (ms)']\n * }, 'none') + '\\n');\n * ```\n *\n * @see {@link ITableOptions} para las opciones disponibles.\n * @see {@link getVisibleLength} y {@link padToWidth} para el cálculo de ancho.\n */\nexport function renderTable(\n rows: Record<string, unknown>[],\n options: ITableOptions = {},\n colorCap: ColorCapability = 'full'\n): string {\n if (rows.length === 0) return '';\n\n // Determine columns from options or first row's keys\n const columns = options.columns ?? Object.keys(rows[0]!);\n const headers = options.head ?? columns;\n\n // Calculate column widths (max of header and all values)\n const colWidths = columns.map((col, i) => {\n const headerLen = getVisibleLength(headers[i] ?? col);\n const maxValueLen = rows.reduce((max, row) => {\n const val = String(row[col] ?? '');\n return Math.max(max, getVisibleLength(val));\n }, 0);\n return Math.max(headerLen, maxValueLen) + 2; // +2 for padding\n });\n\n // Color helpers\n const cyan = colorCap !== 'none' ? getANSIForeground('#00bcd4', colorCap) : '';\n const dim = colorCap !== 'none' ? ANSI.dim : '';\n const reset = colorCap !== 'none' ? ANSI.reset : '';\n\n // Build header row\n const headerRow = ' ' + columns.map((col, i) => {\n const label = headers[i] ?? col;\n return cyan + ANSI.bold + padToWidth(` ${label}`, colWidths[i]!) + reset;\n }).join('');\n\n // Build separator\n const separator = ' ' + dim + colWidths.map(w => '\\u2500'.repeat(w)).join('\\u2500') + reset;\n\n // Build data rows\n const dataRows = rows.map(row => {\n return ' ' + columns.map((col, i) => {\n const val = String(row[col] ?? '');\n return padToWidth(` ${val}`, colWidths[i]!);\n }).join('');\n });\n\n return [headerRow, separator, ...dataRows].join('\\n');\n}\n","/**\n * @fileoverview Built-in spinner implementation for CLI primitives.\n *\n * Expone dos implementaciones de {@link ISpinnerHandle}:\n * - {@link SpinnerManager}: spinner braille animado para TTY interactiva.\n * - {@link NoopSpinner}: fallback sin animaci\\u00f3n para non-TTY / silent mode.\n *\n * La factor\\u00eda que decide cu\\u00e1l instanciar vive en `TerminalBridge.spinner()`;\n * los consumers rara vez construyen estas clases directamente.\n */\n\nimport type { ISpinnerHandle, LoggerConfig } from '../types/core.js';\nimport type { Logger } from '../Logger.js';\nimport { ANSI } from '../terminal/color-converter.js';\n\n/**\n * Frames braille usados por la animaci\\u00f3n del spinner. Cada frame es un\n * car\\u00e1cter del bloque Unicode Braille Patterns (U+2800\\u2013U+28FF) que da la\n * ilusi\\u00f3n de rotaci\\u00f3n al ciclarlos a ~12 FPS. Elegidos sobre caracteres\n * ASCII (`|/-\\`) porque renderizan m\\u00e1s suaves en terminales modernas.\n */\nconst SPINNER_FRAMES = ['\\u280b', '\\u2819', '\\u2839', '\\u2838', '\\u283c', '\\u2834', '\\u2826', '\\u2827', '\\u2807', '\\u280f'];\n\n/**\n * Intervalo entre frames del spinner en milisegundos. 80 ms \\u2248 12.5 FPS:\n * suficientemente r\\u00e1pido para sentirse responsivo sin consumir CPU\n * perceptiblemente en runs largos.\n */\nconst FRAME_INTERVAL = 80;\n\n/**\n * Spinner interactivo para TTY: cicla frames braille reescribiendo la l\\u00ednea\n * actual en su sitio (no emite l\\u00edneas nuevas hasta el stop).\n *\n * Para no poluir stdout piped ni entrelazarse con el output normal del\n * {@link Logger}, hace dos cosas no obvias:\n * 1. Escribe SIEMPRE a `process.stderr` (carriage return + `\\x1b[K` para\n * limpiar la l\\u00ednea antes de cada render).\n * 2. Con `start()` mutea el logger (`outputMode: 'silent'`) y lo restaura a\n * `'console'` en cualquier m\\u00e9todo de finalizaci\\u00f3n (`stop`/`succeed`/`fail`).\n * Sin esto, los logs del usuario se imprimir\\u00edan encima del frame animado.\n *\n * No gestiona TTY detection \\u2014 quien lo instancia (`TerminalBridge`) ya valid\\u00f3\n * que hay TTY. Para non-TTY ver {@link NoopSpinner}.\n *\n * @implements {ISpinnerHandle}\n *\n * @example\n * ```ts\n * const spinner = new SpinnerManager('Compilando...', logger.config, logger);\n * spinner.start();\n * // ...trabajo as\\u00edncrono...\n * spinner.succeed('Build OK');\n * // stderr: \" \\u2713 Build OK\"\n * ```\n *\n * @see {@link NoopSpinner} para el path non-TTY.\n * @see {@link ISpinnerHandle} para el contrato de la API p\\u00fablica.\n */\nexport class SpinnerManager implements ISpinnerHandle {\n private message: string;\n private frameIndex = 0;\n private interval: ReturnType<typeof setInterval> | null = null;\n private _logger: Logger;\n\n /**\n * @param {string} message - Texto a mostrar al lado del frame animado.\n * Mutables luego v\\u00eda {@link SpinnerManager.text}.\n * @param {LoggerConfig} _config - Reservado para configuraci\\u00f3n futura;\n * actualmente no se lee dentro de la clase (lo conserva solo el caller).\n * @param {Logger} logger - Instancia del logger due\\u00f1a del spinner. Se\n * mutea/restaura con `updateConfig({ outputMode })` en start/stop.\n */\n constructor(message: string, _config: LoggerConfig, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n /**\n * Arranca la animaci\\u00f3n. Idempotente: si ya est\\u00e1 corriendo, no hace nada.\n *\n * Como efecto lateral mutea el logger pasado al constructor cambiando su\n * `outputMode` a `'silent'` \\u2014 cualquier log durante la animaci\\u00f3n quedar\\u00eda\n * bufferizado y se descarta al restaurar el modo. Llama siempre a\n * {@link stop}, {@link succeed} o {@link fail} para restaurar el output.\n *\n * @returns {void}\n */\n start(): void {\n if (this.interval) return; // Already running\n\n // Switch logger to buffer mode to prevent garbled output\n this._logger.updateConfig({ outputMode: 'silent' });\n\n this.frameIndex = 0;\n this.render();\n this.interval = setInterval(() => {\n this.frameIndex = (this.frameIndex + 1) % SPINNER_FRAMES.length;\n this.render();\n }, FRAME_INTERVAL);\n }\n\n /**\n * Detiene la animaci\\u00f3n y limpia la l\\u00ednea, sin emitir mensaje de estado.\n * Restaura el `outputMode` del logger a `'console'`.\n *\n * \\u00datil cuando el caller ya emiti\\u00f3 su propio output final y solo necesita\n * desmontar el spinner. Para terminaci\\u00f3n con tick/cross usa\n * {@link succeed} / {@link fail}.\n *\n * @returns {void}\n */\n stop(): void {\n this.clearInterval();\n this.clearLine();\n // Restore logger output\n this._logger.updateConfig({ outputMode: 'console' });\n }\n\n /**\n * Detiene la animaci\\u00f3n y emite el mensaje con un check verde (`\\u2713`).\n * Restaura el `outputMode` del logger a `'console'`.\n *\n * @param {string} [msg] - Texto final a mostrar. Si se omite, reutiliza\n * el `message` con el que se construy\\u00f3 el spinner (o el \\u00faltimo seteado\n * v\\u00eda {@link text}).\n * @returns {void}\n *\n * @example\n * ```ts\n * spinner.succeed(); // \\u2192 \" \\u2713 <message inicial>\"\n * spinner.succeed('Hecho'); // \\u2192 \" \\u2713 Hecho\"\n * ```\n */\n succeed(msg?: string): void {\n this.clearInterval();\n this.clearLine();\n const text = msg ?? this.message;\n process.stderr.write(` ${ANSI.fg.green}\\u2713${ANSI.reset} ${text}\\n`);\n this._logger.updateConfig({ outputMode: 'console' });\n }\n\n /**\n * Detiene la animaci\\u00f3n y emite el mensaje con una cruz roja (`\\u2717`).\n * Restaura el `outputMode` del logger a `'console'`.\n *\n * @param {string} [msg] - Texto final a mostrar. Si se omite, reutiliza\n * el `message` con el que se construy\\u00f3 el spinner (o el \\u00faltimo seteado\n * v\\u00eda {@link text}).\n * @returns {void}\n *\n * @example\n * ```ts\n * try {\n * await build();\n * spinner.succeed('Build OK');\n * } catch (e) {\n * spinner.fail(`Build fallido: ${e.message}`);\n * }\n * ```\n */\n fail(msg?: string): void {\n this.clearInterval();\n this.clearLine();\n const text = msg ?? this.message;\n process.stderr.write(` ${ANSI.fg.red}\\u2717${ANSI.reset} ${text}\\n`);\n this._logger.updateConfig({ outputMode: 'console' });\n }\n\n /**\n * Reemplaza el texto mostrado al lado del frame sin reiniciar la animaci\\u00f3n\n * ni perder el frame actual. Pensado para actualizar progreso in-place\n * (p.ej. contador de items procesados).\n *\n * @param {string} msg - Nuevo texto a mostrar.\n * @returns {void}\n */\n text(msg: string): void {\n this.message = msg;\n }\n\n private render(): void {\n const frame = SPINNER_FRAMES[this.frameIndex] ?? SPINNER_FRAMES[0];\n const line = ` ${ANSI.fg.cyan}${frame}${ANSI.reset} ${this.message}`;\n process.stderr.write(`\\r\\x1b[K${line}`);\n }\n\n private clearLine(): void {\n process.stderr.write('\\r\\x1b[K');\n }\n\n private clearInterval(): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n }\n}\n\n/**\n * Spinner degenerate para non-TTY (CI logs, pipes, `outputMode: 'silent'`).\n *\n * No anima nada: traduce los eventos del ciclo de vida del spinner a llamadas\n * normales del logger (`info` en start, `success`/`error` en finish). Así el\n * consumidor mantiene la misma API {@link ISpinnerHandle} sin saber si está\n * corriendo en terminal interactiva o en un job de CI.\n *\n * A diferencia de {@link SpinnerManager}, **no** toca el `outputMode` del\n * logger — no hay nada que mutear porque no hay frame animado que proteger.\n *\n * @implements {ISpinnerHandle}\n *\n * @example\n * ```ts\n * // En CI (sin TTY) el TerminalBridge entrega un NoopSpinner automáticamente:\n * const s = logger.spinner('Running tests...');\n * s.start(); // logger.info('Running tests...')\n * s.succeed('All green'); // logger.success('All green')\n * ```\n *\n * @see {@link SpinnerManager} para el path interactivo con animación.\n */\nexport class NoopSpinner implements ISpinnerHandle {\n private message: string;\n private _logger: Logger;\n\n /**\n * @param {string} message - Texto base; se reutiliza como mensaje final\n * si {@link succeed} / {@link fail} se llaman sin argumento.\n * @param {Logger} logger - Logger sobre el que se emiten los eventos.\n */\n constructor(message: string, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n /**\n * Emite el mensaje inicial como `logger.info(...)`. No arranca ningún\n * timer — en non-TTY no hay nada que animar.\n *\n * @returns {void}\n */\n start(): void {\n this._logger.info(this.message);\n }\n\n /**\n * No-op — no hay animación que detener ni output que restaurar.\n *\n * @returns {void}\n */\n stop(): void {\n // No-op\n }\n\n /**\n * Emite el mensaje final como `logger.success(...)`.\n *\n * @param {string} [msg] - Texto final; si se omite usa el `message`\n * inicial o el último seteado vía {@link text}.\n * @returns {void}\n */\n succeed(msg?: string): void {\n this._logger.success(msg ?? this.message);\n }\n\n /**\n * Emite el mensaje final como `logger.error(...)`.\n *\n * @param {string} [msg] - Texto final; si se omite usa el `message`\n * inicial o el último seteado vía {@link text}.\n * @returns {void}\n */\n fail(msg?: string): void {\n this._logger.error(msg ?? this.message);\n }\n\n /**\n * Actualiza el mensaje interno (sin output). Solo afecta al texto que\n * emitirán {@link succeed} / {@link fail} cuando se invoquen sin argumento.\n *\n * @param {string} msg - Nuevo texto base.\n * @returns {void}\n */\n text(msg: string): void {\n this.message = msg;\n }\n}\n"],"mappings":"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"}