@mks2508/better-logger 5.0.0 → 5.0.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 (162) hide show
  1. package/dist/chunks/{Logger-Cbi1f10o.js → Logger-CKqzXDh3.js} +2 -2
  2. package/dist/chunks/{Logger-Cbi1f10o.js.map → Logger-CKqzXDh3.js.map} +1 -1
  3. package/dist/chunks/{Logger-BZ7B7OXE.js → Logger-D_vuKP4l.js} +2 -2
  4. package/dist/chunks/{Logger-BZ7B7OXE.js.map → Logger-D_vuKP4l.js.map} +1 -1
  5. package/dist/chunks/cli-module-B-njrTWb.js +2 -0
  6. package/dist/chunks/cli-module-B-njrTWb.js.map +1 -0
  7. package/dist/chunks/{cli-module-ClIJmaT8.js → cli-module-Cx7qotPY.js} +16 -9
  8. package/dist/chunks/cli-module-Cx7qotPY.js.map +1 -0
  9. package/dist/cli.cjs +1 -1
  10. package/dist/cli.js +1 -1
  11. package/dist/exports.cjs +1 -1
  12. package/dist/exports.js +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.js +3 -3
  15. package/dist/styling.cjs +1 -1
  16. package/dist/styling.js +2 -2
  17. package/dist/terminal/formatter.d.ts.map +1 -1
  18. package/package.json +5 -1
  19. package/.claude/settings.local.json +0 -48
  20. package/.github/workflows/ci-quality.yml +0 -357
  21. package/.github/workflows/docs-demo.yml +0 -119
  22. package/.github/workflows/releases-core.yml +0 -512
  23. package/.github/workflows/releases-full.yml +0 -582
  24. package/.github/workflows-backup/ci.yml +0 -221
  25. package/.github/workflows-backup/nightly.yml +0 -196
  26. package/.github/workflows-backup/release-optimized.yml +0 -373
  27. package/.github/workflows-backup/release.yml +0 -269
  28. package/.release-notes-0.2.0.md +0 -129
  29. package/.yamllint +0 -28
  30. package/CHANGELOG.json +0 -1076
  31. package/CHANGELOG.md +0 -209
  32. package/CLAUDE.md +0 -217
  33. package/bun.lock +0 -333
  34. package/demo.html +0 -847
  35. package/dist/chunks/cli-module-CadqgZ1Z.js +0 -2
  36. package/dist/chunks/cli-module-CadqgZ1Z.js.map +0 -1
  37. package/dist/chunks/cli-module-ClIJmaT8.js.map +0 -1
  38. package/docs/API.md +0 -918
  39. package/docs/CORE.md +0 -264
  40. package/docs/DEVELOPMENT.md +0 -731
  41. package/docs/EXPORTS.md +0 -467
  42. package/docs/PACKAGES.md +0 -244
  43. package/docs/STYLING.md +0 -405
  44. package/docs/_config.yml +0 -36
  45. package/docs/index.md +0 -179
  46. package/examples/README.md +0 -208
  47. package/examples/basic-logging.js +0 -75
  48. package/examples/data-export.js +0 -234
  49. package/examples/package.json +0 -16
  50. package/examples/performance-timing.js +0 -170
  51. package/examples/simplified-api.js +0 -124
  52. package/examples/styling-themes.js +0 -207
  53. package/index.html +0 -358
  54. package/packages/core/package.json +0 -57
  55. package/packages/exports/package.json +0 -41
  56. package/packages/nodejs-opentui/README.md +0 -232
  57. package/packages/nodejs-opentui/package.json +0 -72
  58. package/packages/nodejs-opentui/src/LogRenderer.ts +0 -171
  59. package/packages/nodejs-opentui/src/OpenTUILogHandler.ts +0 -178
  60. package/packages/nodejs-opentui/src/components/LogBadge.tsx +0 -131
  61. package/packages/nodejs-opentui/src/index.ts +0 -133
  62. package/packages/nodejs-opentui/src/types.ts +0 -158
  63. package/packages/nodejs-opentui/tsconfig.json +0 -20
  64. package/packages/styling/package.json +0 -41
  65. package/playground/demo-all.ts +0 -95
  66. package/playground/demo-box.ts +0 -85
  67. package/playground/demo-levels.ts +0 -56
  68. package/playground/demo-real-world.ts +0 -98
  69. package/playground/demo-spinner.ts +0 -77
  70. package/playground/demo-steps.ts +0 -72
  71. package/playground/demo-table.ts +0 -83
  72. package/project-utils/README.md +0 -172
  73. package/project-utils/auto-release-gemini.ts +0 -1193
  74. package/project-utils/auto-release-ui.ts +0 -1329
  75. package/project-utils/commit-generator.ts +0 -1385
  76. package/project-utils/commit-ui.ts +0 -264
  77. package/project-utils/git-utils.ts +0 -199
  78. package/project-utils/github-release-manager.ts +0 -466
  79. package/project-utils/project-config.ts +0 -260
  80. package/project-utils/prompt-templates.js +0 -345
  81. package/project-utils/prompt-templates.ts +0 -422
  82. package/project-utils/version-manager.ts +0 -1078
  83. package/public/vite.svg +0 -1
  84. package/src/Logger.ts +0 -1858
  85. package/src/ScopedLogger.ts +0 -256
  86. package/src/cli/CommandProcessor.ts +0 -248
  87. package/src/cli/commands/ConfigCommand.ts +0 -93
  88. package/src/cli/commands/ExportCommand.ts +0 -276
  89. package/src/cli/commands/HistoryCommand.ts +0 -117
  90. package/src/cli/commands/StatusCommand.ts +0 -112
  91. package/src/cli/commands/ThemeCommand.ts +0 -88
  92. package/src/cli/help.ts +0 -127
  93. package/src/cli/index.ts +0 -71
  94. package/src/cli-module.ts +0 -21
  95. package/src/cli-primitives/box.ts +0 -86
  96. package/src/cli-primitives/cli-table.ts +0 -62
  97. package/src/cli-primitives/divider.ts +0 -17
  98. package/src/cli-primitives/header.ts +0 -18
  99. package/src/cli-primitives/index.ts +0 -13
  100. package/src/cli-primitives/server-fallback.ts +0 -54
  101. package/src/cli-primitives/spinner.ts +0 -133
  102. package/src/cli-primitives/step.ts +0 -22
  103. package/src/constants.ts +0 -313
  104. package/src/core.ts +0 -397
  105. package/src/example.ts +0 -210
  106. package/src/exports-module.ts +0 -311
  107. package/src/handlers/AnalyticsLogHandler.ts +0 -22
  108. package/src/handlers/ExportLogHandler.ts +0 -610
  109. package/src/handlers/FileLogHandler.ts +0 -169
  110. package/src/handlers/RemoteLogHandler.ts +0 -42
  111. package/src/handlers/index.ts +0 -8
  112. package/src/hooks/HookManager.ts +0 -177
  113. package/src/hooks/index.ts +0 -1
  114. package/src/index.ts +0 -395
  115. package/src/main.ts +0 -196
  116. package/src/serializers/SerializerRegistry.ts +0 -173
  117. package/src/serializers/index.ts +0 -1
  118. package/src/style.css +0 -96
  119. package/src/styling/LogStyleBuilder.ts +0 -355
  120. package/src/styling/SemanticStyles.ts +0 -380
  121. package/src/styling/SmartPresets.ts +0 -288
  122. package/src/styling/StyleBuilder.ts +0 -319
  123. package/src/styling/StyleCache.ts +0 -131
  124. package/src/styling/banners.ts +0 -168
  125. package/src/styling/index.ts +0 -27
  126. package/src/styling/themes.ts +0 -235
  127. package/src/styling-module.ts +0 -244
  128. package/src/terminal/color-converter.ts +0 -315
  129. package/src/terminal/formatter.ts +0 -236
  130. package/src/terminal/terminal-renderer.ts +0 -342
  131. package/src/transports/ConsoleTransport.ts +0 -28
  132. package/src/transports/FileTransport.ts +0 -53
  133. package/src/transports/HttpTransport.ts +0 -56
  134. package/src/transports/TransportManager.ts +0 -130
  135. package/src/transports/index.ts +0 -4
  136. package/src/types/core.ts +0 -417
  137. package/src/types/handlers.ts +0 -95
  138. package/src/types/hooks.ts +0 -45
  139. package/src/types/index.ts +0 -83
  140. package/src/types/serializers.ts +0 -30
  141. package/src/types/transports.ts +0 -52
  142. package/src/typescript.svg +0 -1
  143. package/src/utils/adapter.ts +0 -291
  144. package/src/utils/ansi-colors.ts +0 -333
  145. package/src/utils/environment-detector.ts +0 -170
  146. package/src/utils/environment.ts +0 -94
  147. package/src/utils/formatting.ts +0 -332
  148. package/src/utils/index.ts +0 -33
  149. package/src/utils/opentui-detection.ts +0 -138
  150. package/src/utils/output.ts +0 -227
  151. package/src/utils/stackTrace.ts +0 -144
  152. package/src/utils/timestamps.ts +0 -80
  153. package/src/vite-env.d.ts +0 -1
  154. package/src/writers/BufferWriter.ts +0 -157
  155. package/src/writers/index.ts +0 -6
  156. package/test-core-browser.html +0 -237
  157. package/test-core-node.js +0 -63
  158. package/tests/test-conflict-resolution.ts +0 -391
  159. package/tests/validate-workflows.sh +0 -131
  160. package/tests/yaml-autofix.sh +0 -146
  161. package/tsconfig.json +0 -50
  162. package/vite.config.ts +0 -256
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./color-converter-CCSQRztd.js");function stripAnsi(e){return e.replace(/\x1b\[[0-9;]*m/g,"")}function getVisibleLength(e){return stripAnsi(e).length}function padToWidth(e,t,r="left"){const n=getVisibleLength(e);if(n>=t)return e;const o=t-n;switch(r){case"right":return" ".repeat(o)+e;case"center":const t=Math.floor(o/2),r=o-t;return" ".repeat(t)+e+" ".repeat(r);default:return e+" ".repeat(o)}}function formatWithRightAlign(t,r,n){const o=(n??e.getTerminalWidth())-getVisibleLength(t)-getVisibleLength(r);return o<=1?`${t} ${r}`:`${t}${" ".repeat(o)}${r}`}let t=null;function formatRelativeTime(e){null===t&&(t=Date.now());const r=e.getTime()-t;return r<1e3?`+${r}ms`:r<6e4?`+${(r/1e3).toFixed(1)}s`:`+${Math.floor(r/6e4)}m${Math.floor(r%6e4/1e3)}s`}function formatElapsedTime(e){null===t&&(t=Date.now());const r=e.getTime()-t,n=Math.floor(r/36e5),o=Math.floor(r%36e5/6e4),i=Math.floor(r%6e4/1e3);return`${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}:${String(i).padStart(2,"0")}`}const r={single:{tl:"┌",tr:"┐",bl:"└",br:"┘",h:"─",v:"│"},rounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"│"},double:{tl:"╔",tr:"╗",bl:"╚",br:"╝",h:"═",v:"║"},bold:{tl:"┏",tr:"┓",bl:"┗",br:"┛",h:"━",v:"┃"}},n=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];exports.NoopSpinner=class{message;_logger;constructor(e,t){this.message=e,this._logger=t}start(){this._logger.info(this.message)}stop(){}succeed(e){this._logger.success(e??this.message)}fail(e){this._logger.error(e??this.message)}text(e){this.message=e}},exports.ServerFallback=class{logger;constructor(e){this.logger=e}step(e,t,r){this.logger.info(`[${e}/${t}] ${r}`)}header(e,t){const r=t?`${e} ${t}`:e;this.logger.info(r)}divider(){}blank(){}box(e,t){this.logger.info(e)}cliTable(e,t){for(const r of e)this.logger.info(JSON.stringify(r))}},exports.SpinnerManager=class{message;frameIndex=0;interval=null;_logger;constructor(e,t,r){this.message=e,this._logger=r}start(){this.interval||(this._logger.updateConfig({outputMode:"silent"}),this.frameIndex=0,this.render(),this.interval=setInterval(()=>{this.frameIndex=(this.frameIndex+1)%n.length,this.render()},80))}stop(){this.clearInterval(),this.clearLine(),this._logger.updateConfig({outputMode:"console"})}succeed(t){this.clearInterval(),this.clearLine();const r=t??this.message;process.stderr.write(` ${e.ANSI.fg.green}✓${e.ANSI.reset} ${r}\n`),this._logger.updateConfig({outputMode:"console"})}fail(t){this.clearInterval(),this.clearLine();const r=t??this.message;process.stderr.write(` ${e.ANSI.fg.red}✗${e.ANSI.reset} ${r}\n`),this._logger.updateConfig({outputMode:"console"})}text(e){this.message=e}render(){const t=n[this.frameIndex]??n[0],r=` ${e.ANSI.fg.cyan}${t}${e.ANSI.reset} ${this.message}`;process.stderr.write(`\r${r}`)}clearLine(){process.stderr.write("\r")}clearInterval(){this.interval&&(clearInterval(this.interval),this.interval=null)}},exports.applyLogOptions=function(e,t,r="full"){let n=e;return t.rightAlign&&(n=formatWithRightAlign(e,t.rightAlign)),n},exports.formatBadge=function(t,r="brackets",n="full",o){const i="none"!==n?e.ANSI.reset:"",s=t.toUpperCase();switch(r){case"rounded":const t=o&&"none"!==n?e.getANSIForeground(o,n):"";return`${"none"!==n?e.ANSI.bg.black:""}${t}⟨${s}⟩${i}`;case"plain":return`${o&&"none"!==n?e.getANSIForeground(o,n):""}${s}${i}`;case"unicode":const r=o&&"none"!==n?e.getANSIForeground(o,n):"";return`${"none"!==n?e.ANSI.bg.black:""}${r}╭${s}╮${i}`;case"pill":return`${o&&"none"!==n?e.getANSIBackground(o,n):""}${"none"!==n?e.getANSIForeground("#000000",n):""}[${s}]${i}`;default:const a=o&&"none"!==n?e.getANSIForeground(o,n):"";return`${"none"!==n?e.ANSI.bg.black:""}${a}[${s}]${i}`}},exports.formatColumns=function(t,r,n="full"){const o=r??e.getTerminalWidth();return t.length,t.map((e,r)=>{if(e.width)return{...e,calculatedWidth:e.width};const n=o-t.filter((e,t)=>t!==r&&e.width).reduce((e,t)=>e+(t.width??0),0),i=t.filter(e=>!e.width).length,s=Math.floor(n/i);return{...e,calculatedWidth:s}}).map(t=>{let r=t.content;return t.color&&"none"!==n&&(r=`${e.getANSIForeground(t.color,n)}${r}${e.ANSI.reset}`),padToWidth(r,t.calculatedWidth,t.align)}).join("")},exports.formatElapsedTime=formatElapsedTime,exports.formatKeyValue=function(t,r="full",n={}){const{separator:o=" ",keyColor:i="#888888",valueColor:s="#00ffff"}=n,a=Object.entries(t);if(0===a.length)return"";const l="none"!==r?e.getANSIForeground(i,r):"",g="none"!==r?e.getANSIForeground(s,r):"",c="none"!==r?e.ANSI.reset:"";return a.map(([e,t])=>{const r="object"==typeof t?JSON.stringify(t):String(t);return`${l}${e}:${c} ${g}${r}${c}`}).join(o)},exports.formatRelativeTime=formatRelativeTime,exports.formatTimestamp=function(e=/* @__PURE__ */new Date,t="time"){switch(t){case"iso":return e.toISOString();case"date":return e.toISOString().split("T")[0]??"";case"time":return e.toTimeString().slice(0,8);case"timeMs":return e.toTimeString().slice(0,8)+"."+String(e.getMilliseconds()).padStart(3,"0");case"relative":return formatRelativeTime(e);case"elapsed":return formatElapsedTime(e);default:return e.toLocaleTimeString()}},exports.formatWithRightAlign=formatWithRightAlign,exports.getVisibleLength=getVisibleLength,exports.isKeyValueObject=function(e){if("object"!=typeof e||null===e)return!1;if(Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);return(t===Object.prototype||null===t)&&Object.values(e).every(e=>"string"==typeof e||"number"==typeof e||"boolean"==typeof e||null===e)},exports.padToWidth=padToWidth,exports.renderBox=function(t,n={},o="full"){const{title:i,borderColor:s,borderStyle:a="rounded",padding:l=0}=n,g=r[a]??r.rounded,c=t.split("\n"),u=Math.min(e.getTerminalWidth()-4,80),h=c.map(e=>getVisibleLength(e)),d=i?stripAnsi(i).length+2:0,p=Math.max(...h,d),f=Math.min(p+2,u),$=s&&"none"!==o?e.getANSIForeground(s,o):"",m=$?e.ANSI.reset:"",wrap=e=>`${$}${e}${m}`;let S;if(i){const e=` ${i} `,t=f-stripAnsi(e).length;S=` ${wrap(g.tl)}${wrap(g.h)}${wrap(e)}${wrap(g.h.repeat(Math.max(0,t-1)))}${wrap(g.tr)}`}else S=` ${wrap(g.tl)}${wrap(g.h.repeat(f))}${wrap(g.tr)}`;const b=` ${wrap(g.bl)}${wrap(g.h.repeat(f))}${wrap(g.br)}`,A=` ${wrap(g.v)}${" ".repeat(f)}${wrap(g.v)}`,I=l>0?Array(l).fill(A):[],N=c.map(e=>{const t=getVisibleLength(e),r=f-t-1;return` ${wrap(g.v)} ${e}${" ".repeat(Math.max(0,r))}${wrap(g.v)}`});return[S,...I,...N,...I,b].join("\n")},exports.renderDivider=function(t){const r=t??Math.min(e.getTerminalWidth()-4,60);return e.ANSI.dim+" "+"─".repeat(r)+e.ANSI.reset},exports.renderHeader=function(t,r){return` ${e.ANSI.bold+t+e.ANSI.reset}${r?e.ANSI.dim+` ${r}`+e.ANSI.reset:""}`},exports.renderStep=function(t,r,n,o){const i=`[${t}/${r}]`;return` ${"none"!==o?e.getANSIForeground("#00bcd4",o)+e.ANSI.bold+i+e.ANSI.reset:i} ${n}`},exports.renderTable=function(t,r={},n="full"){if(0===t.length)return"";const o=r.columns??Object.keys(t[0]),i=r.head??o,s=o.map((e,r)=>{const n=getVisibleLength(i[r]??e),o=t.reduce((t,r)=>{const n=String(r[e]??"");return Math.max(t,getVisibleLength(n))},0);return Math.max(n,o)+2}),a="none"!==n?e.getANSIForeground("#00bcd4",n):"",l="none"!==n?e.ANSI.dim:"",g="none"!==n?e.ANSI.reset:"";return[" "+o.map((t,r)=>{const n=i[r]??t;return a+e.ANSI.bold+padToWidth(` ${n}`,s[r])+g}).join("")," "+l+s.map(e=>"─".repeat(e)).join("─")+g,...t.map(e=>" "+o.map((t,r)=>padToWidth(` ${String(e[t]??"")}`,s[r])).join(""))].join("\n")},exports.resetStartTime=function(){t=Date.now()},exports.stripAnsi=stripAnsi;
2
+ //# sourceMappingURL=cli-module-B-njrTWb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-module-B-njrTWb.js","sources":["../../src/terminal/formatter.ts","../../src/cli-primitives/box.ts","../../src/cli-primitives/spinner.ts","../../src/cli-primitives/server-fallback.ts","../../src/cli-primitives/divider.ts","../../src/cli-primitives/header.ts","../../src/cli-primitives/step.ts","../../src/cli-primitives/cli-table.ts"],"sourcesContent":["/**\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 Box renderer for CLI primitives\n * @since 5.0.0\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 * Border character sets for different styles\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 * Renders content inside a bordered box\n * @param content - Content string (may contain newlines)\n * @param options - Box rendering options\n * @param colorCap - Terminal color capability\n * @returns Formatted box string with border\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 Built-in spinner implementation for CLI primitives\n * @since 5.0.0\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/** Braille-based spinner animation frames */\nconst SPINNER_FRAMES = ['\\u280b', '\\u2819', '\\u2839', '\\u2838', '\\u283c', '\\u2834', '\\u2826', '\\u2827', '\\u2807', '\\u280f'];\n\n/** Spinner frame interval in milliseconds */\nconst FRAME_INTERVAL = 80;\n\n/**\n * Interactive terminal spinner with in-place line updates.\n * Writes to stderr to avoid polluting piped stdout.\n *\n * @implements {ISpinnerHandle}\n * @since 5.0.0\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 constructor(message: string, _config: LoggerConfig, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n /** Start the spinner animation */\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 /** Stop the spinner without a status message */\n stop(): void {\n this.clearInterval();\n this.clearLine();\n // Restore logger output\n this._logger.updateConfig({ outputMode: 'console' });\n }\n\n /** Stop with a success indicator */\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 /** Stop with a failure indicator */\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 /** Update the spinner text while running */\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 * No-op spinner for non-TTY environments or silent mode.\n * Logs start/succeed/fail as plain log messages.\n *\n * @implements {ISpinnerHandle}\n * @since 5.0.0\n */\nexport class NoopSpinner implements ISpinnerHandle {\n private message: string;\n private _logger: Logger;\n\n constructor(message: string, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n start(): void {\n this._logger.info(this.message);\n }\n\n stop(): void {\n // No-op\n }\n\n succeed(msg?: string): void {\n this._logger.success(msg ?? this.message);\n }\n\n fail(msg?: string): void {\n this._logger.error(msg ?? this.message);\n }\n\n text(msg: string): void {\n this.message = msg;\n }\n}\n","/**\n * @fileoverview Server/JSON fallback for CLI primitives in non-TTY environments\n * @since 5.0.0\n */\n\nimport type { IBoxOptions, ITableOptions } from '../types/core.js';\nimport type { Logger } from '../Logger.js';\n\n/**\n * Server-mode fallback: outputs CLI primitives as plain logger calls\n * when not running in an interactive terminal.\n *\n * @since 5.0.0\n */\nexport class ServerFallback {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /** Render step as plain info log */\n step(current: number, total: number, msg: string): void {\n this.logger.info(`[${current}/${total}] ${msg}`);\n }\n\n /** Render header as plain info log */\n header(title: string, subtitle?: string): void {\n const text = subtitle ? `${title} ${subtitle}` : title;\n this.logger.info(text);\n }\n\n /** Divider is a no-op in server mode */\n divider(): void {\n // No-op in server/JSON mode\n }\n\n /** Blank line is a no-op in server mode */\n blank(): void {\n // No-op in server/JSON mode\n }\n\n /** Render box content as plain info log */\n box(content: string, _options?: IBoxOptions): void {\n this.logger.info(content);\n }\n\n /** Render table rows as plain info logs */\n cliTable(rows: Record<string, unknown>[], _options?: ITableOptions): void {\n for (const row of rows) {\n this.logger.info(JSON.stringify(row));\n }\n }\n}\n","/**\n * @fileoverview Divider renderer for CLI primitives\n * @since 5.0.0\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\nimport { getTerminalWidth } from '../utils/environment-detector.js';\n\n/**\n * Renders a horizontal divider line\n * @param width - Optional explicit width (defaults to terminal width capped at 60)\n * @returns Formatted divider string\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 Header renderer for CLI primitives\n * @since 5.0.0\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\n\n/**\n * Renders a styled header with optional subtitle\n * @param title - Main title text\n * @param subtitle - Optional subtitle (rendered dimmed)\n * @returns Formatted header string\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 Step progress renderer for CLI primitives\n * @since 5.0.0\n */\n\nimport { getANSIForeground, ANSI, type ColorCapability } from '../terminal/color-converter.js';\n\n/**\n * Renders a step progress indicator like ` [2/5] Analyzing repository...`\n * @param current - Current step number\n * @param total - Total number of steps\n * @param msg - Step description message\n * @param colorCap - Terminal color capability\n * @returns Formatted step string\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 CLI table renderer for CLI primitives\n * @since 5.0.0\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 * Renders an array of objects as a formatted ASCII table\n * @param rows - Array of row objects\n * @param options - Table rendering options\n * @param colorCap - Terminal color capability\n * @returns Formatted table string\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"],"names":["stripAnsi","str","replace","getVisibleLength","length","padToWidth","width","align","visibleLen","padding","repeat","leftPad","Math","floor","rightPad","formatWithRightAlign","leftContent","rightContent","maxWidth","gap","getTerminalWidth","startTime","formatRelativeTime","date","Date","now","diff","getTime","toFixed","formatElapsedTime","hours","mins","secs","String","padStart","BORDER_CHARS","single","tl","tr","bl","br","h","v","rounded","double","bold","SPINNER_FRAMES","message","_logger","constructor","logger","this","start","info","stop","succeed","msg","success","fail","error","text","step","current","total","header","title","subtitle","divider","blank","box","content","_options","cliTable","rows","row","JSON","stringify","frameIndex","interval","_config","updateConfig","outputMode","render","setInterval","clearInterval","clearLine","process","stderr","write","ANSI","fg","green","reset","red","frame","line","cyan","options","colorCapability","result","rightAlign","badge","style","color","toUpperCase","colorCode1","getANSIForeground","bg","black","colorCode3","getANSIBackground","colorCode5","columns","map","col","idx","calculatedWidth","remainingWidth","filter","c","i","reduce","sum","autoColumns","join","obj","separator","keyColor","valueColor","entries","Object","keyColorCode","valueColorCode","key","value","valueStr","format","toISOString","split","toTimeString","slice","getMilliseconds","toLocaleTimeString","Array","isArray","proto","getPrototypeOf","prototype","values","every","colorCap","borderColor","borderStyle","chars","lines","maxTermWidth","min","contentWidths","l","titleWidth","maxContentWidth","max","innerWidth","bc","wrap","char","topBorder","titleStr","afterTitle","bottomBorder","emptyLine","paddingLines","fill","contentLines","visible","pad","w","dim","label","keys","headers","head","colWidths","headerLen","maxValueLen","val"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { g as getANSIForeground, A as ANSI, l as getTerminalWidth } from "./color-converter-_Xdmsy7E.js";
1
+ import { g as getANSIForeground, A as ANSI, b as getANSIBackground, l as getTerminalWidth } from "./color-converter-_Xdmsy7E.js";
2
2
  function stripAnsi(str) {
3
3
  return str.replace(/\x1b\[[0-9;]*m/g, "");
4
4
  }
@@ -77,22 +77,29 @@ function isKeyValueObject(obj) {
77
77
  );
78
78
  }
79
79
  function formatBadge(badge, style = "brackets", colorCapability = "full", color) {
80
- const colorCode = color && colorCapability !== "none" ? getANSIForeground(color, colorCapability) : "";
81
80
  const reset = colorCapability !== "none" ? ANSI.reset : "";
82
- const bgBlack = colorCapability !== "none" ? ANSI.bg.black : "";
83
81
  const text = badge.toUpperCase();
84
82
  switch (style) {
85
83
  case "rounded":
86
- return `${bgBlack}${colorCode}⟨${text}⟩${reset}`;
84
+ const colorCode1 = color && colorCapability !== "none" ? getANSIForeground(color, colorCapability) : "";
85
+ const bgBlack1 = colorCapability !== "none" ? ANSI.bg.black : "";
86
+ return `${bgBlack1}${colorCode1}⟨${text}⟩${reset}`;
87
87
  case "plain":
88
- return `${colorCode}${text}${reset}`;
88
+ const colorCode2 = color && colorCapability !== "none" ? getANSIForeground(color, colorCapability) : "";
89
+ return `${colorCode2}${text}${reset}`;
89
90
  case "unicode":
90
- return `${bgBlack}${colorCode}╭${text}╮${reset}`;
91
+ const colorCode3 = color && colorCapability !== "none" ? getANSIForeground(color, colorCapability) : "";
92
+ const bgBlack3 = colorCapability !== "none" ? ANSI.bg.black : "";
93
+ return `${bgBlack3}${colorCode3}╭${text}╮${reset}`;
91
94
  case "pill":
92
- return `${bgBlack}${colorCode}⦗${text}⦘${reset}`;
95
+ const bgColor = color && colorCapability !== "none" ? getANSIBackground(color, colorCapability) : "";
96
+ const fgColor = colorCapability !== "none" ? getANSIForeground("#000000", colorCapability) : "";
97
+ return `${bgColor}${fgColor}[${text}]${reset}`;
93
98
  case "brackets":
94
99
  default:
95
- return `${bgBlack}${colorCode}[${text}]${reset}`;
100
+ const colorCode5 = color && colorCapability !== "none" ? getANSIForeground(color, colorCapability) : "";
101
+ const bgBlack5 = colorCapability !== "none" ? ANSI.bg.black : "";
102
+ return `${bgBlack5}${colorCode5}[${text}]${reset}`;
96
103
  }
97
104
  }
98
105
  function formatTimestamp(date = /* @__PURE__ */ new Date(), format = "time") {
@@ -380,4 +387,4 @@ export {
380
387
  resetStartTime as r,
381
388
  stripAnsi as s
382
389
  };
383
- //# sourceMappingURL=cli-module-ClIJmaT8.js.map
390
+ //# sourceMappingURL=cli-module-Cx7qotPY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-module-Cx7qotPY.js","sources":["../../src/terminal/formatter.ts","../../src/cli-primitives/step.ts","../../src/cli-primitives/header.ts","../../src/cli-primitives/divider.ts","../../src/cli-primitives/box.ts","../../src/cli-primitives/cli-table.ts","../../src/cli-primitives/spinner.ts","../../src/cli-primitives/server-fallback.ts"],"sourcesContent":["/**\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 * @since 5.0.0\n */\n\nimport { getANSIForeground, ANSI, type ColorCapability } from '../terminal/color-converter.js';\n\n/**\n * Renders a step progress indicator like ` [2/5] Analyzing repository...`\n * @param current - Current step number\n * @param total - Total number of steps\n * @param msg - Step description message\n * @param colorCap - Terminal color capability\n * @returns Formatted step string\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 * @since 5.0.0\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\n\n/**\n * Renders a styled header with optional subtitle\n * @param title - Main title text\n * @param subtitle - Optional subtitle (rendered dimmed)\n * @returns Formatted header string\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 * @since 5.0.0\n */\n\nimport { ANSI } from '../terminal/color-converter.js';\nimport { getTerminalWidth } from '../utils/environment-detector.js';\n\n/**\n * Renders a horizontal divider line\n * @param width - Optional explicit width (defaults to terminal width capped at 60)\n * @returns Formatted divider string\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 * @since 5.0.0\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 * Border character sets for different styles\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 * Renders content inside a bordered box\n * @param content - Content string (may contain newlines)\n * @param options - Box rendering options\n * @param colorCap - Terminal color capability\n * @returns Formatted box string with border\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 * @since 5.0.0\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 * Renders an array of objects as a formatted ASCII table\n * @param rows - Array of row objects\n * @param options - Table rendering options\n * @param colorCap - Terminal color capability\n * @returns Formatted table string\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 * @since 5.0.0\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/** Braille-based spinner animation frames */\nconst SPINNER_FRAMES = ['\\u280b', '\\u2819', '\\u2839', '\\u2838', '\\u283c', '\\u2834', '\\u2826', '\\u2827', '\\u2807', '\\u280f'];\n\n/** Spinner frame interval in milliseconds */\nconst FRAME_INTERVAL = 80;\n\n/**\n * Interactive terminal spinner with in-place line updates.\n * Writes to stderr to avoid polluting piped stdout.\n *\n * @implements {ISpinnerHandle}\n * @since 5.0.0\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 constructor(message: string, _config: LoggerConfig, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n /** Start the spinner animation */\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 /** Stop the spinner without a status message */\n stop(): void {\n this.clearInterval();\n this.clearLine();\n // Restore logger output\n this._logger.updateConfig({ outputMode: 'console' });\n }\n\n /** Stop with a success indicator */\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 /** Stop with a failure indicator */\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 /** Update the spinner text while running */\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 * No-op spinner for non-TTY environments or silent mode.\n * Logs start/succeed/fail as plain log messages.\n *\n * @implements {ISpinnerHandle}\n * @since 5.0.0\n */\nexport class NoopSpinner implements ISpinnerHandle {\n private message: string;\n private _logger: Logger;\n\n constructor(message: string, logger: Logger) {\n this.message = message;\n this._logger = logger;\n }\n\n start(): void {\n this._logger.info(this.message);\n }\n\n stop(): void {\n // No-op\n }\n\n succeed(msg?: string): void {\n this._logger.success(msg ?? this.message);\n }\n\n fail(msg?: string): void {\n this._logger.error(msg ?? this.message);\n }\n\n text(msg: string): void {\n this.message = msg;\n }\n}\n","/**\n * @fileoverview Server/JSON fallback for CLI primitives in non-TTY environments\n * @since 5.0.0\n */\n\nimport type { IBoxOptions, ITableOptions } from '../types/core.js';\nimport type { Logger } from '../Logger.js';\n\n/**\n * Server-mode fallback: outputs CLI primitives as plain logger calls\n * when not running in an interactive terminal.\n *\n * @since 5.0.0\n */\nexport class ServerFallback {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /** Render step as plain info log */\n step(current: number, total: number, msg: string): void {\n this.logger.info(`[${current}/${total}] ${msg}`);\n }\n\n /** Render header as plain info log */\n header(title: string, subtitle?: string): void {\n const text = subtitle ? `${title} ${subtitle}` : title;\n this.logger.info(text);\n }\n\n /** Divider is a no-op in server mode */\n divider(): void {\n // No-op in server/JSON mode\n }\n\n /** Blank line is a no-op in server mode */\n blank(): void {\n // No-op in server/JSON mode\n }\n\n /** Render box content as plain info log */\n box(content: string, _options?: IBoxOptions): void {\n this.logger.info(content);\n }\n\n /** Render table rows as plain info logs */\n cliTable(rows: Record<string, unknown>[], _options?: ITableOptions): void {\n for (const row of rows) {\n this.logger.info(JSON.stringify(row));\n }\n }\n}\n"],"names":[],"mappings":"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"}
package/dist/cli.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/cli-module-CadqgZ1Z.js");exports.NoopSpinner=e.NoopSpinner,exports.ServerFallback=e.ServerFallback,exports.SpinnerManager=e.SpinnerManager,exports.renderBox=e.renderBox,exports.renderDivider=e.renderDivider,exports.renderHeader=e.renderHeader,exports.renderStep=e.renderStep,exports.renderTable=e.renderTable;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/cli-module-B-njrTWb.js");exports.NoopSpinner=e.NoopSpinner,exports.ServerFallback=e.ServerFallback,exports.SpinnerManager=e.SpinnerManager,exports.renderBox=e.renderBox,exports.renderDivider=e.renderDivider,exports.renderHeader=e.renderHeader,exports.renderStep=e.renderStep,exports.renderTable=e.renderTable;
2
2
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- import { N, o, S, m, l, q, k, n } from "./chunks/cli-module-ClIJmaT8.js";
1
+ import { N, o, S, m, l, q, k, n } from "./chunks/cli-module-Cx7qotPY.js";
2
2
  export {
3
3
  N as NoopSpinner,
4
4
  o as ServerFallback,
package/dist/exports.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-Cbi1f10o.js");require("./chunks/environment-Cprkw3g9.js");const r=require("./chunks/RemoteLogHandler-ymkQ97xl.js");class ExportLogger extends e.Logger{exportLogHandler;remoteHandlers=[];constructor(r={}){super(r),r.bufferSize&&(this.exportLogHandler=new e.ExportLogHandler(r.bufferSize),this.addHandler(this.exportLogHandler))}async exportLogs(e,r){if(!this.exportLogHandler)throw new Error("Export handler not initialized. Set bufferSize in constructor.");return JSON.stringify([])}getLogs(){return this.exportLogHandler,[]}clearLogs(){this.exportLogHandler}getLogStats(){return this.exportLogHandler,{}}addRemoteHandler(e,t){const o=new r.RemoteLogHandler(e,t);this.remoteHandlers.push(o),this.addHandler(o)}clearRemoteHandlers(){const e=this.getHandlers();this.remoteHandlers.forEach(r=>{const t=e.indexOf(r);t>-1&&e.splice(t,1)}),this.remoteHandlers=[]}async flushRemoteHandlers(){const e=this.remoteHandlers.map(e=>Promise.resolve());await Promise.all(e)}}const t=new ExportLogger({bufferSize:1e3}),o={exportCSV:async e=>await t.exportLogs("csv",e),exportJSON:async e=>await t.exportLogs("json",e),exportXML:async e=>await t.exportLogs("xml",e),getStats:()=>t.getLogStats(),clear(){t.clearLogs()}},s={addEndpoint(e,r){t.addRemoteHandler(e,r)},clearEndpoints(){t.clearRemoteHandlers()},async flush(){await t.flushRemoteHandlers()}};exports.ExportLogHandler=e.ExportLogHandler,exports.RemoteLogHandler=r.RemoteLogHandler,exports.ExportLogger=ExportLogger,exports.addHandler=e=>t.addHandler(e),exports.addRemoteHandler=(e,r)=>t.addRemoteHandler(e,r),exports.clearLogs=()=>t.clearLogs(),exports.clearRemoteHandlers=()=>t.clearRemoteHandlers(),exports.critical=(...e)=>t.critical(...e),exports.debug=(...e)=>t.debug(...e),exports.default=t,exports.error=(...e)=>t.error(...e),exports.exportLogs=async(e,r)=>await t.exportLogs(e,r),exports.exportUtils=o,exports.flushRemoteHandlers=async()=>await t.flushRemoteHandlers(),exports.getLogStats=()=>t.getLogStats(),exports.getLogs=()=>t.getLogs(),exports.group=(e,r)=>t.group(e,r),exports.groupEnd=()=>t.groupEnd(),exports.info=(...e)=>t.info(...e),exports.remoteUtils=s,exports.scope=e=>t.scope(e),exports.setGlobalPrefix=e=>t.setGlobalPrefix(e),exports.setVerbosity=e=>t.setVerbosity(e),exports.success=(...e)=>t.success(...e),exports.table=(e,r)=>t.table(e,r),exports.time=e=>t.time(e),exports.timeEnd=e=>t.timeEnd(e),exports.trace=(...e)=>t.trace(...e),exports.warn=(...e)=>t.warn(...e);
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-CKqzXDh3.js");require("./chunks/environment-Cprkw3g9.js");const r=require("./chunks/RemoteLogHandler-ymkQ97xl.js");class ExportLogger extends e.Logger{exportLogHandler;remoteHandlers=[];constructor(r={}){super(r),r.bufferSize&&(this.exportLogHandler=new e.ExportLogHandler(r.bufferSize),this.addHandler(this.exportLogHandler))}async exportLogs(e,r){if(!this.exportLogHandler)throw new Error("Export handler not initialized. Set bufferSize in constructor.");return JSON.stringify([])}getLogs(){return this.exportLogHandler,[]}clearLogs(){this.exportLogHandler}getLogStats(){return this.exportLogHandler,{}}addRemoteHandler(e,t){const o=new r.RemoteLogHandler(e,t);this.remoteHandlers.push(o),this.addHandler(o)}clearRemoteHandlers(){const e=this.getHandlers();this.remoteHandlers.forEach(r=>{const t=e.indexOf(r);t>-1&&e.splice(t,1)}),this.remoteHandlers=[]}async flushRemoteHandlers(){const e=this.remoteHandlers.map(e=>Promise.resolve());await Promise.all(e)}}const t=new ExportLogger({bufferSize:1e3}),o={exportCSV:async e=>await t.exportLogs("csv",e),exportJSON:async e=>await t.exportLogs("json",e),exportXML:async e=>await t.exportLogs("xml",e),getStats:()=>t.getLogStats(),clear(){t.clearLogs()}},s={addEndpoint(e,r){t.addRemoteHandler(e,r)},clearEndpoints(){t.clearRemoteHandlers()},async flush(){await t.flushRemoteHandlers()}};exports.ExportLogHandler=e.ExportLogHandler,exports.RemoteLogHandler=r.RemoteLogHandler,exports.ExportLogger=ExportLogger,exports.addHandler=e=>t.addHandler(e),exports.addRemoteHandler=(e,r)=>t.addRemoteHandler(e,r),exports.clearLogs=()=>t.clearLogs(),exports.clearRemoteHandlers=()=>t.clearRemoteHandlers(),exports.critical=(...e)=>t.critical(...e),exports.debug=(...e)=>t.debug(...e),exports.default=t,exports.error=(...e)=>t.error(...e),exports.exportLogs=async(e,r)=>await t.exportLogs(e,r),exports.exportUtils=o,exports.flushRemoteHandlers=async()=>await t.flushRemoteHandlers(),exports.getLogStats=()=>t.getLogStats(),exports.getLogs=()=>t.getLogs(),exports.group=(e,r)=>t.group(e,r),exports.groupEnd=()=>t.groupEnd(),exports.info=(...e)=>t.info(...e),exports.remoteUtils=s,exports.scope=e=>t.scope(e),exports.setGlobalPrefix=e=>t.setGlobalPrefix(e),exports.setVerbosity=e=>t.setVerbosity(e),exports.success=(...e)=>t.success(...e),exports.table=(e,r)=>t.table(e,r),exports.time=e=>t.time(e),exports.timeEnd=e=>t.timeEnd(e),exports.trace=(...e)=>t.trace(...e),exports.warn=(...e)=>t.warn(...e);
2
2
  //# sourceMappingURL=exports.cjs.map
package/dist/exports.js CHANGED
@@ -1,4 +1,4 @@
1
- import { L as Logger, E as ExportLogHandler } from "./chunks/Logger-BZ7B7OXE.js";
1
+ import { L as Logger, E as ExportLogHandler } from "./chunks/Logger-D_vuKP4l.js";
2
2
  import "./chunks/environment-C1xxvc8l.js";
3
3
  import { R as RemoteLogHandler } from "./chunks/RemoteLogHandler-CjWpWZGl.js";
4
4
  class ExportLogger extends Logger {
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-Cbi1f10o.js"),t=require("./chunks/environment-Cprkw3g9.js"),r=require("./chunks/color-converter-CCSQRztd.js"),s=require("./chunks/formatting-DpKxCsXq.js"),o=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),i=require("./chunks/cli-module-CadqgZ1Z.js"),n={maxEntries:100,ttl:3e5,enabled:!0};class StyleCache{cache=/* @__PURE__ */new Map;config;hitCount=0;missCount=0;constructor(e={}){this.config={...n,...e}}generateKey(e){return`${e.level}:${e.theme}:${e.presetName||"default"}:${e.hasPrefix}:${e.hasLocation}`}get(e){if(!this.config.enabled)return null;const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.createdAt>this.config.ttl?(this.cache.delete(t),this.missCount++,null):(r.hits++,this.cache.delete(t),this.cache.set(t,r),this.hitCount++,r):(this.missCount++,null)}set(e,t,r){if(!this.config.enabled)return;const s=this.generateKey(e);if(this.cache.size>=this.config.maxEntries){const e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(s,{format:t,styles:[...r],createdAt:Date.now(),hits:0})}clear(){this.cache.clear(),this.hitCount=0,this.missCount=0}getStats(){const e=this.hitCount+this.missCount;return{size:this.cache.size,maxSize:this.config.maxEntries,hitRate:e>0?this.hitCount/e:0,hits:this.hitCount,misses:this.missCount}}setEnabled(e){this.config.enabled=e,e||this.clear()}isEnabled(){return this.config.enabled}}let a=null,l=null;function getLogger(){return l||(l=new e.Logger),l}const g=getLogger(),p={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.APILogger=e.APILogger,exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.ComponentLogger=e.ComponentLogger,exports.ContextLogger=e.ContextLogger,exports.HookManager=e.HookManager,exports.Logger=e.Logger,exports.ScopedLogger=e.ScopedLogger,exports.SerializerRegistry=e.SerializerRegistry,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.TransportManager=e.TransportManager,exports.BUILD_PRESETS=t.BUILD_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.ENVIRONMENT_DETECTION=t.ENVIRONMENT_DETECTION,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.TerminalRenderer=t.TerminalRenderer,exports.detectEnvironmentPreset=t.detectEnvironmentPreset,exports.formatTimestamp=t.formatTimestamp,exports.getOptimalConfig=t.getOptimalConfig,exports.parseStackTrace=t.parseStackTrace,exports.ANSI=r.ANSI,exports.colorToHex=r.colorToHex,exports.cssColorToANSI=r.cssColorToANSI,exports.getANSI256Background=r.getANSI256Background,exports.getANSI256Foreground=r.getANSI256Foreground,exports.getANSIBackground=r.getANSIBackground,exports.getANSIForeground=r.getANSIForeground,exports.getColorCapability=r.getColorCapability,exports.getEnvironment=r.getEnvironment,exports.getEnvironmentInfo=r.getEnvironmentInfo,exports.getTerminalHeight=r.getTerminalHeight,exports.getTerminalWidth=r.getTerminalWidth,exports.hexTo256=r.hexTo256,exports.hexToRgb=r.hexToRgb,exports.isRunningInTerminal=r.isRunningInTerminal,exports.rgbToHex=r.rgbToHex,exports.supportsANSI=r.supportsANSI,exports.BUILD_FORMATTERS=s.BUILD_FORMATTERS,exports.ansiBackground=s.ansiBackground,exports.ansiBold=s.ansiBold,exports.ansiColor=s.ansiColor,exports.ansiDim=s.ansiDim,exports.ansiStyle=s.ansiStyle,exports.ansiUnderline=s.ansiUnderline,exports.createANSIOutput=s.createANSIOutput,exports.createBuildOutput=s.createBuildOutput,exports.createCIOutput=s.createCIOutput,exports.createOutput=s.createOutput,exports.detectOptimalFormat=s.detectOptimalFormat,exports.formatLogLevelANSI=s.formatLogLevelANSI,exports.formatSuccessANSI=s.formatSuccessANSI,exports.sanitizeEmojis=s.sanitizeEmojis,exports.RemoteLogHandler=o.RemoteLogHandler,exports.applyLogOptions=i.applyLogOptions,exports.formatBadge=i.formatBadge,exports.formatColumns=i.formatColumns,exports.formatElapsedTime=i.formatElapsedTime,exports.formatKeyValue=i.formatKeyValue,exports.formatRelativeTime=i.formatRelativeTime,exports.formatTimestampExt=i.formatTimestamp,exports.formatWithRightAlign=i.formatWithRightAlign,exports.getVisibleLength=i.getVisibleLength,exports.isKeyValueObject=i.isKeyValueObject,exports.padToWidth=i.padToWidth,exports.resetStartTime=i.resetStartTime,exports.stripAnsi=i.stripAnsi,exports.AnalyticsLogHandler=class{handle(e,t,r,s){"error"!==e&&"critical"!==e||s.timestamp}},exports.BufferWriter=class{buffer=[];maxSize;constructor(e=1e3){this.maxSize=e}write(e,t,r){this.buffer.length>=this.maxSize&&this.buffer.shift(),this.buffer.push({message:e,level:t,styles:r,timestamp:Date.now()})}getBuffer(){return[...this.buffer]}getByLevel(...e){return this.buffer.filter(t=>e.includes(t.level))}get size(){return this.buffer.length}get isEmpty(){return 0===this.buffer.length}clear(){this.buffer=[]}flush(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)}),this.clear()}replay(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)})}toArray(){return this.buffer.map(e=>e.message)}toString(e="\n"){return this.toArray().join(e)}},exports.ConsoleTransport=class{constructor(e){this.options=e}name="console";write(e){const t=this.getConsoleMethod(e.level),r=e.prefix?`[${e.prefix}] `:"",s=e.location?` (${e.location.file}:${e.location.line})`:"";console[t](`[${e.level.toUpperCase()}]${r} ${e.msg}${s}`)}getConsoleMethod(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",r){if(this.filename=e,this.maxSize=r,t.isNode)try{this.fs=require("fs")}catch(s){console.warn("FileLogHandler: Unable to load fs module:",s)}}handle(e,r,o,i){const n={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:r,args:o.slice(1).map(e=>s.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(n);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,r=localStorage.getItem(t)||"";let s=r;if(r.length>0&&(s+="\n"),s+=e,this.maxSize||s.split("\n").length>1e3){const e=s.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(s=e.slice(-t).join("\n"))}localStorage.setItem(t,s)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.FileTransport=class{name="file";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){const t=JSON.stringify(e)+"\n";this.buffer.push(t),this.buffer.length>=(this.options.batchSize||100)&&this.flush()}async flush(){if(0===this.buffer.length)return;const e=this.buffer.join("");if(this.buffer=[],void 0!==globalThis.process&&"function"==typeof require)try{const t=require("fs"),r=this.options.destination||"app.log";t.appendFileSync(r,e)}catch{}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.HttpTransport=class{name="http";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){this.buffer.push(e),this.buffer.length>=(this.options.batchSize||50)&&this.flush()}async flush(){if(0===this.buffer.length||!this.options.url)return;const e=[...this.buffer];this.buffer=[];try{await fetch(this.options.url,{method:"POST",headers:{"Content-Type":"application/json",...this.options.headers},body:JSON.stringify({logs:e})})}catch{this.buffer.unshift(...e)}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.StyleCache=StyleCache,exports.addHandler=e=>getLogger().addHandler(e),exports.addSerializer=(e,t,r)=>getLogger().addSerializer(e,t,r),exports.addTransport=e=>getLogger().addTransport(e),exports.api=e=>getLogger().api(e),exports.badge=e=>getLogger().badge(e),exports.badges=e=>getLogger().badges(e),exports.blank=()=>getLogger().blank(),exports.box=(e,t)=>getLogger().box(e,t),exports.clearBadges=()=>getLogger().clearBadges(),exports.cli=e=>getLogger().cli(e),exports.cliTable=(e,t)=>getLogger().cliTable(e,t),exports.closeTransports=()=>getLogger().closeTransports(),exports.component=e=>getLogger().component(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>getLogger().critical(...e),exports.debug=(...e)=>getLogger().debug(...e),exports.default=g,exports.divider=()=>getLogger().divider(),exports.error=(...e)=>getLogger().error(...e),exports.flushTransports=()=>getLogger().flushTransports(),exports.getStyleCache=function(){return a||(a=new StyleCache),a},exports.group=(e,t)=>getLogger().group(e,t),exports.groupEnd=()=>getLogger().groupEnd(),exports.header=(e,t)=>getLogger().header(e,t),exports.info=(...e)=>getLogger().info(...e),exports.logAnimated=(e,t)=>getLogger().logAnimated(e,t),exports.logWithSVG=(e,t,r)=>getLogger().logWithSVG(e,t,r),exports.off=(e,t)=>getLogger().off(e,t),exports.on=(e,t,r)=>getLogger().on(e,t,r),exports.once=(e,t,r)=>getLogger().once(e,t,r),exports.removeSerializer=e=>getLogger().removeSerializer(e),exports.removeTransport=e=>getLogger().removeTransport(e),exports.scope=e=>getLogger().scope(e),exports.setBannerType=e=>getLogger().setBannerType(e),exports.setCLILevel=e=>getLogger().setCLILevel(e),exports.setGlobalPrefix=e=>getLogger().setGlobalPrefix(e),exports.setTheme=e=>getLogger().setTheme(e),exports.setVerbosity=e=>getLogger().setVerbosity(e),exports.showBanner=e=>getLogger().showBanner(e),exports.spinner=e=>getLogger().spinner(e),exports.step=(e,t,r)=>getLogger().step(e,t,r),exports.stylePresets=p,exports.success=(...e)=>getLogger().success(...e),exports.table=(e,t)=>getLogger().table(e,t),exports.time=e=>getLogger().time(e),exports.timeEnd=e=>getLogger().timeEnd(e),exports.trace=(...e)=>getLogger().trace(...e),exports.use=(e,t)=>getLogger().use(e,t),exports.warn=(...e)=>getLogger().warn(...e);
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-CKqzXDh3.js"),t=require("./chunks/environment-Cprkw3g9.js"),r=require("./chunks/color-converter-CCSQRztd.js"),s=require("./chunks/formatting-DpKxCsXq.js"),o=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),i=require("./chunks/cli-module-B-njrTWb.js"),n={maxEntries:100,ttl:3e5,enabled:!0};class StyleCache{cache=/* @__PURE__ */new Map;config;hitCount=0;missCount=0;constructor(e={}){this.config={...n,...e}}generateKey(e){return`${e.level}:${e.theme}:${e.presetName||"default"}:${e.hasPrefix}:${e.hasLocation}`}get(e){if(!this.config.enabled)return null;const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.createdAt>this.config.ttl?(this.cache.delete(t),this.missCount++,null):(r.hits++,this.cache.delete(t),this.cache.set(t,r),this.hitCount++,r):(this.missCount++,null)}set(e,t,r){if(!this.config.enabled)return;const s=this.generateKey(e);if(this.cache.size>=this.config.maxEntries){const e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(s,{format:t,styles:[...r],createdAt:Date.now(),hits:0})}clear(){this.cache.clear(),this.hitCount=0,this.missCount=0}getStats(){const e=this.hitCount+this.missCount;return{size:this.cache.size,maxSize:this.config.maxEntries,hitRate:e>0?this.hitCount/e:0,hits:this.hitCount,misses:this.missCount}}setEnabled(e){this.config.enabled=e,e||this.clear()}isEnabled(){return this.config.enabled}}let a=null,l=null;function getLogger(){return l||(l=new e.Logger),l}const g=getLogger(),p={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.APILogger=e.APILogger,exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.ComponentLogger=e.ComponentLogger,exports.ContextLogger=e.ContextLogger,exports.HookManager=e.HookManager,exports.Logger=e.Logger,exports.ScopedLogger=e.ScopedLogger,exports.SerializerRegistry=e.SerializerRegistry,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.TransportManager=e.TransportManager,exports.BUILD_PRESETS=t.BUILD_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.ENVIRONMENT_DETECTION=t.ENVIRONMENT_DETECTION,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.TerminalRenderer=t.TerminalRenderer,exports.detectEnvironmentPreset=t.detectEnvironmentPreset,exports.formatTimestamp=t.formatTimestamp,exports.getOptimalConfig=t.getOptimalConfig,exports.parseStackTrace=t.parseStackTrace,exports.ANSI=r.ANSI,exports.colorToHex=r.colorToHex,exports.cssColorToANSI=r.cssColorToANSI,exports.getANSI256Background=r.getANSI256Background,exports.getANSI256Foreground=r.getANSI256Foreground,exports.getANSIBackground=r.getANSIBackground,exports.getANSIForeground=r.getANSIForeground,exports.getColorCapability=r.getColorCapability,exports.getEnvironment=r.getEnvironment,exports.getEnvironmentInfo=r.getEnvironmentInfo,exports.getTerminalHeight=r.getTerminalHeight,exports.getTerminalWidth=r.getTerminalWidth,exports.hexTo256=r.hexTo256,exports.hexToRgb=r.hexToRgb,exports.isRunningInTerminal=r.isRunningInTerminal,exports.rgbToHex=r.rgbToHex,exports.supportsANSI=r.supportsANSI,exports.BUILD_FORMATTERS=s.BUILD_FORMATTERS,exports.ansiBackground=s.ansiBackground,exports.ansiBold=s.ansiBold,exports.ansiColor=s.ansiColor,exports.ansiDim=s.ansiDim,exports.ansiStyle=s.ansiStyle,exports.ansiUnderline=s.ansiUnderline,exports.createANSIOutput=s.createANSIOutput,exports.createBuildOutput=s.createBuildOutput,exports.createCIOutput=s.createCIOutput,exports.createOutput=s.createOutput,exports.detectOptimalFormat=s.detectOptimalFormat,exports.formatLogLevelANSI=s.formatLogLevelANSI,exports.formatSuccessANSI=s.formatSuccessANSI,exports.sanitizeEmojis=s.sanitizeEmojis,exports.RemoteLogHandler=o.RemoteLogHandler,exports.applyLogOptions=i.applyLogOptions,exports.formatBadge=i.formatBadge,exports.formatColumns=i.formatColumns,exports.formatElapsedTime=i.formatElapsedTime,exports.formatKeyValue=i.formatKeyValue,exports.formatRelativeTime=i.formatRelativeTime,exports.formatTimestampExt=i.formatTimestamp,exports.formatWithRightAlign=i.formatWithRightAlign,exports.getVisibleLength=i.getVisibleLength,exports.isKeyValueObject=i.isKeyValueObject,exports.padToWidth=i.padToWidth,exports.resetStartTime=i.resetStartTime,exports.stripAnsi=i.stripAnsi,exports.AnalyticsLogHandler=class{handle(e,t,r,s){"error"!==e&&"critical"!==e||s.timestamp}},exports.BufferWriter=class{buffer=[];maxSize;constructor(e=1e3){this.maxSize=e}write(e,t,r){this.buffer.length>=this.maxSize&&this.buffer.shift(),this.buffer.push({message:e,level:t,styles:r,timestamp:Date.now()})}getBuffer(){return[...this.buffer]}getByLevel(...e){return this.buffer.filter(t=>e.includes(t.level))}get size(){return this.buffer.length}get isEmpty(){return 0===this.buffer.length}clear(){this.buffer=[]}flush(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)}),this.clear()}replay(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)})}toArray(){return this.buffer.map(e=>e.message)}toString(e="\n"){return this.toArray().join(e)}},exports.ConsoleTransport=class{constructor(e){this.options=e}name="console";write(e){const t=this.getConsoleMethod(e.level),r=e.prefix?`[${e.prefix}] `:"",s=e.location?` (${e.location.file}:${e.location.line})`:"";console[t](`[${e.level.toUpperCase()}]${r} ${e.msg}${s}`)}getConsoleMethod(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",r){if(this.filename=e,this.maxSize=r,t.isNode)try{this.fs=require("fs")}catch(s){console.warn("FileLogHandler: Unable to load fs module:",s)}}handle(e,r,o,i){const n={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:r,args:o.slice(1).map(e=>s.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(n);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,r=localStorage.getItem(t)||"";let s=r;if(r.length>0&&(s+="\n"),s+=e,this.maxSize||s.split("\n").length>1e3){const e=s.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(s=e.slice(-t).join("\n"))}localStorage.setItem(t,s)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.FileTransport=class{name="file";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){const t=JSON.stringify(e)+"\n";this.buffer.push(t),this.buffer.length>=(this.options.batchSize||100)&&this.flush()}async flush(){if(0===this.buffer.length)return;const e=this.buffer.join("");if(this.buffer=[],void 0!==globalThis.process&&"function"==typeof require)try{const t=require("fs"),r=this.options.destination||"app.log";t.appendFileSync(r,e)}catch{}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.HttpTransport=class{name="http";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){this.buffer.push(e),this.buffer.length>=(this.options.batchSize||50)&&this.flush()}async flush(){if(0===this.buffer.length||!this.options.url)return;const e=[...this.buffer];this.buffer=[];try{await fetch(this.options.url,{method:"POST",headers:{"Content-Type":"application/json",...this.options.headers},body:JSON.stringify({logs:e})})}catch{this.buffer.unshift(...e)}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.StyleCache=StyleCache,exports.addHandler=e=>getLogger().addHandler(e),exports.addSerializer=(e,t,r)=>getLogger().addSerializer(e,t,r),exports.addTransport=e=>getLogger().addTransport(e),exports.api=e=>getLogger().api(e),exports.badge=e=>getLogger().badge(e),exports.badges=e=>getLogger().badges(e),exports.blank=()=>getLogger().blank(),exports.box=(e,t)=>getLogger().box(e,t),exports.clearBadges=()=>getLogger().clearBadges(),exports.cli=e=>getLogger().cli(e),exports.cliTable=(e,t)=>getLogger().cliTable(e,t),exports.closeTransports=()=>getLogger().closeTransports(),exports.component=e=>getLogger().component(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>getLogger().critical(...e),exports.debug=(...e)=>getLogger().debug(...e),exports.default=g,exports.divider=()=>getLogger().divider(),exports.error=(...e)=>getLogger().error(...e),exports.flushTransports=()=>getLogger().flushTransports(),exports.getStyleCache=function(){return a||(a=new StyleCache),a},exports.group=(e,t)=>getLogger().group(e,t),exports.groupEnd=()=>getLogger().groupEnd(),exports.header=(e,t)=>getLogger().header(e,t),exports.info=(...e)=>getLogger().info(...e),exports.logAnimated=(e,t)=>getLogger().logAnimated(e,t),exports.logWithSVG=(e,t,r)=>getLogger().logWithSVG(e,t,r),exports.off=(e,t)=>getLogger().off(e,t),exports.on=(e,t,r)=>getLogger().on(e,t,r),exports.once=(e,t,r)=>getLogger().once(e,t,r),exports.removeSerializer=e=>getLogger().removeSerializer(e),exports.removeTransport=e=>getLogger().removeTransport(e),exports.scope=e=>getLogger().scope(e),exports.setBannerType=e=>getLogger().setBannerType(e),exports.setCLILevel=e=>getLogger().setCLILevel(e),exports.setGlobalPrefix=e=>getLogger().setGlobalPrefix(e),exports.setTheme=e=>getLogger().setTheme(e),exports.setVerbosity=e=>getLogger().setVerbosity(e),exports.showBanner=e=>getLogger().showBanner(e),exports.spinner=e=>getLogger().spinner(e),exports.step=(e,t,r)=>getLogger().step(e,t,r),exports.stylePresets=p,exports.success=(...e)=>getLogger().success(...e),exports.table=(e,t)=>getLogger().table(e,t),exports.time=e=>getLogger().time(e),exports.timeEnd=e=>getLogger().timeEnd(e),exports.trace=(...e)=>getLogger().trace(...e),exports.use=(e,t)=>getLogger().use(e,t),exports.warn=(...e)=>getLogger().warn(...e);
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import { L as Logger } from "./chunks/Logger-BZ7B7OXE.js";
2
- import { A, B, C, e, H, c, S, a, T, b } from "./chunks/Logger-BZ7B7OXE.js";
1
+ import { L as Logger } from "./chunks/Logger-D_vuKP4l.js";
2
+ import { A, B, C, e, H, c, S, a, T, b } from "./chunks/Logger-D_vuKP4l.js";
3
3
  import { a as isNode, i as isBrowser, S as StylePresets, b as StyleBuilder } from "./chunks/environment-C1xxvc8l.js";
4
4
  import { B as B2, D, E, T as T2, e as e2, f, g, p } from "./chunks/environment-C1xxvc8l.js";
5
5
  import { A as A2, c as c2, f as f2, e as e3, d, b as b2, g as g2, k, i, n, m, l, a as a2, h, j, r, s } from "./chunks/color-converter-_Xdmsy7E.js";
6
6
  import { s as safeSerialize } from "./chunks/formatting-DMJxYq9o.js";
7
7
  import { B as B3, l as l2, m as m2, k as k2, n as n2, j as j2, o, e as e4, h as h2, i as i2, c as c3, d as d2, p as p2, q, r as r2 } from "./chunks/formatting-DMJxYq9o.js";
8
8
  import { R } from "./chunks/RemoteLogHandler-CjWpWZGl.js";
9
- import { j as j3, c as c4, a as a3, g as g3, b as b3, e as e5, d as d3, f as f3, h as h3, i as i3, p as p3, r as r3, s as s2 } from "./chunks/cli-module-ClIJmaT8.js";
9
+ import { j as j3, c as c4, a as a3, g as g3, b as b3, e as e5, d as d3, f as f3, h as h3, i as i3, p as p3, r as r3, s as s2 } from "./chunks/cli-module-Cx7qotPY.js";
10
10
  class ConsoleTransport {
11
11
  constructor(options) {
12
12
  this.options = options;
package/dist/styling.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-Cbi1f10o.js"),t=require("./chunks/environment-Cprkw3g9.js");class StyledLogger extends e.Logger{logWithSVG(e,t,s={}){super.logWithSVG(e,t,s)}logAnimated(e,t=3){super.logAnimated(e,t)}showBanner(e){super.showBanner(e)}setBannerType(e){super.setBannerType(e)}setTheme(e){super.setTheme(e)}}const s=new StyledLogger,r={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()},o=Object.keys(e.THEME_PRESETS),n=Object.keys(e.BANNER_VARIANTS);exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.StyledLogger=StyledLogger,exports.bannerTypes=n,exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>s.critical(...e),exports.debug=(...e)=>s.debug(...e),exports.default=s,exports.error=(...e)=>s.error(...e),exports.group=(e,t)=>s.group(e,t),exports.groupEnd=()=>s.groupEnd(),exports.info=(...e)=>s.info(...e),exports.logAnimated=(e,t)=>s.logAnimated(e,t),exports.logWithSVG=(e,t,r)=>s.logWithSVG(e,t,r),exports.scope=e=>s.scope(e),exports.setBannerType=e=>s.setBannerType(e),exports.setGlobalPrefix=e=>s.setGlobalPrefix(e),exports.setTheme=e=>s.setTheme(e),exports.setVerbosity=e=>s.setVerbosity(e),exports.showBanner=e=>s.showBanner(e),exports.showInitBanner=t=>{e.displayInitBanner(t)},exports.stylePresets=r,exports.success=(...e)=>s.success(...e),exports.table=(e,t)=>s.table(e,t),exports.themes=o,exports.time=e=>s.time(e),exports.timeEnd=e=>s.timeEnd(e),exports.trace=(...e)=>s.trace(...e),exports.warn=(...e)=>s.warn(...e);
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-CKqzXDh3.js"),t=require("./chunks/environment-Cprkw3g9.js");class StyledLogger extends e.Logger{logWithSVG(e,t,s={}){super.logWithSVG(e,t,s)}logAnimated(e,t=3){super.logAnimated(e,t)}showBanner(e){super.showBanner(e)}setBannerType(e){super.setBannerType(e)}setTheme(e){super.setTheme(e)}}const s=new StyledLogger,r={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()},o=Object.keys(e.THEME_PRESETS),n=Object.keys(e.BANNER_VARIANTS);exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.StyledLogger=StyledLogger,exports.bannerTypes=n,exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>s.critical(...e),exports.debug=(...e)=>s.debug(...e),exports.default=s,exports.error=(...e)=>s.error(...e),exports.group=(e,t)=>s.group(e,t),exports.groupEnd=()=>s.groupEnd(),exports.info=(...e)=>s.info(...e),exports.logAnimated=(e,t)=>s.logAnimated(e,t),exports.logWithSVG=(e,t,r)=>s.logWithSVG(e,t,r),exports.scope=e=>s.scope(e),exports.setBannerType=e=>s.setBannerType(e),exports.setGlobalPrefix=e=>s.setGlobalPrefix(e),exports.setTheme=e=>s.setTheme(e),exports.setVerbosity=e=>s.setVerbosity(e),exports.showBanner=e=>s.showBanner(e),exports.showInitBanner=t=>{e.displayInitBanner(t)},exports.stylePresets=r,exports.success=(...e)=>s.success(...e),exports.table=(e,t)=>s.table(e,t),exports.themes=o,exports.time=e=>s.time(e),exports.timeEnd=e=>s.timeEnd(e),exports.trace=(...e)=>s.trace(...e),exports.warn=(...e)=>s.warn(...e);
2
2
  //# sourceMappingURL=styling.cjs.map
package/dist/styling.js CHANGED
@@ -1,5 +1,5 @@
1
- import { L as Logger, T as THEME_PRESETS, B as BANNER_VARIANTS, d as displayInitBanner } from "./chunks/Logger-BZ7B7OXE.js";
2
- import { a } from "./chunks/Logger-BZ7B7OXE.js";
1
+ import { L as Logger, T as THEME_PRESETS, B as BANNER_VARIANTS, d as displayInitBanner } from "./chunks/Logger-D_vuKP4l.js";
2
+ import { a } from "./chunks/Logger-D_vuKP4l.js";
3
3
  import { S as StylePresets, b as StyleBuilder } from "./chunks/environment-C1xxvc8l.js";
4
4
  class StyledLogger extends Logger {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/terminal/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE5G,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,WAAoB,GAAG,MAAM,CAiB1F;AAED,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAClB,MAAM,CAWR;AAED,wBAAgB,aAAa,CACzB,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,GAAE,eAAwB,GAC1C,MAAM,CA2BR;AAED,wBAAgB,cAAc,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,GAAE,eAAwB,EACzC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,MAAM,CA0BR;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc7E;AAED,wBAAgB,WAAW,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,UAAuB,EAC9B,eAAe,GAAE,eAAwB,EACzC,KAAK,CAAC,EAAE,MAAM,GACf,MAAM,CAsBR;AAED,wBAAgB,eAAe,CAC3B,IAAI,GAAE,IAAiB,EACvB,MAAM,GAAE,eAAwB,GACjC,MAAM,CAmBR;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAgBrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAWpD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,EACnB,eAAe,GAAE,eAAwB,GAC1C,MAAM,CAQR"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/terminal/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE5G,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,WAAoB,GAAG,MAAM,CAiB1F;AAED,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAClB,MAAM,CAWR;AAED,wBAAgB,aAAa,CACzB,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,GAAE,eAAwB,GAC1C,MAAM,CA2BR;AAED,wBAAgB,cAAc,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,GAAE,eAAwB,EACzC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,MAAM,CA0BR;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc7E;AAED,wBAAgB,WAAW,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,UAAuB,EAC9B,eAAe,GAAE,eAAwB,EACzC,KAAK,CAAC,EAAE,MAAM,GACf,MAAM,CA4BR;AAED,wBAAgB,eAAe,CAC3B,IAAI,GAAE,IAAiB,EACvB,MAAM,GAAE,eAAwB,GACjC,MAAM,CAmBR;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAgBrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAWpD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,EACnB,eAAe,GAAE,eAAwB,GAC1C,MAAM,CAQR"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@mks2508/better-logger",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
4
4
  "type": "module",
5
+ "files": [
6
+ "dist",
7
+ "README.md"
8
+ ],
5
9
  "description": "Logger avanzado para consola con estilos CSS, temas adaptativos, badges automáticos, SVG, animaciones, CLI integrado y soporte dual browser/terminal con colores ANSI",
6
10
  "main": "dist/index.js",
7
11
  "types": "dist/index.d.ts",
@@ -1,48 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(npm run build:*)",
5
- "Bash(npm run dev:*)",
6
- "WebSearch",
7
- "Bash(git add:*)",
8
- "Bash(npm publish:*)",
9
- "Bash(git commit:*)",
10
- "Bash(git push:*)",
11
- "Bash(npm install:*)",
12
- "Bash(gh workflow view:*)",
13
- "Bash(gh run list:*)",
14
- "Bash(gh run view:*)",
15
- "Bash(gh api:*)",
16
- "Bash(gh run rerun:*)",
17
- "Bash(gh workflow run:*)",
18
- "Bash(bun:*)",
19
- "Bash(npm view:*)",
20
- "WebFetch(domain:github.com)",
21
- "Bash(sed:*)",
22
- "Bash(python3:*)",
23
- "Bash(gh workflow:*)",
24
- "Bash(yamllint:*)",
25
- "Bash(git stash:*)",
26
- "Bash(git pull:*)",
27
- "Bash(npm config set:*)",
28
- "Bash(git rebase:*)",
29
- "Bash(find:*)",
30
- "Bash(npm run type-check:*)",
31
- "Bash(git tag:*)",
32
- "Bash(npx tsc:*)",
33
- "Bash(ls -la /Volumes/KODAK1TB/REPOS y PROYECTOS/nodejs/advanced-logger/dist/*.d.ts)",
34
- "Bash(wc:*)",
35
- "mcp__plugin_context7_context7__resolve-library-id",
36
- "mcp__plugin_context7_context7__get-library-docs",
37
- "WebFetch(domain:www.nearform.com)",
38
- "Bash(grep:*)",
39
- "Bash(cat:*)"
40
- ],
41
- "deny": [],
42
- "ask": [],
43
- "additionalDirectories": [
44
- "/Users/mks/gemini-commit-wizard",
45
- "/Volumes/KODAK1TB/REPOS y PROYECTOS/nodejs/new-medmoderna-2025"
46
- ]
47
- }
48
- }