@kubb/cli 4.22.1 → 4.22.3

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.
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk-jHaXqnEa.js";
2
- import { t as version } from "./package-BQu01PU2.js";
2
+ import { t as version } from "./package-_aADOcaI.js";
3
3
  import { n as getConfigs, r as generate, t as getCosmiConfig } from "./getCosmiConfig-y2n_oW_y.js";
4
4
  import { defineCommand, showUsage } from "citty";
5
5
  import path, { relative, resolve } from "node:path";
@@ -431,25 +431,30 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
431
431
  error: null
432
432
  });
433
433
  } catch (err) {
434
- const error = /* @__PURE__ */ new Error("Hook execute failed");
435
- error.cause = err;
434
+ const error = err;
435
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
436
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
436
437
  await context.emit("debug", {
437
438
  date: /* @__PURE__ */ new Date(),
438
- logs: [err.stdout]
439
+ logs: [stdout, stderr].filter(Boolean)
439
440
  });
441
+ if (stderr) console.error(stderr);
442
+ if (stdout) console.log(stdout);
443
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
440
444
  await context.emit("hook:end", {
441
445
  command: command$1,
442
446
  args,
443
447
  id,
444
448
  success: false,
445
- error
449
+ error: errorMessage
446
450
  });
447
- await context.emit("error", error);
451
+ await context.emit("error", errorMessage);
448
452
  }
449
453
  return;
450
454
  }
451
455
  clack.intro(text);
452
- const writable = new ClackWritable(clack.taskLog({ title: getMessage(["Executing hook", logLevel >= LogLevel.info ? pc.dim(commandWithArgs) : void 0].filter(Boolean).join(" ")) }));
456
+ const logger = clack.taskLog({ title: getMessage(["Executing hook", logLevel >= LogLevel.info ? pc.dim(commandWithArgs) : void 0].filter(Boolean).join(" ")) });
457
+ const writable = new ClackWritable(logger);
453
458
  try {
454
459
  const result = await execa(command$1, args, {
455
460
  detached: true,
@@ -468,20 +473,24 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
468
473
  error: null
469
474
  });
470
475
  } catch (err) {
471
- const error = /* @__PURE__ */ new Error("Hook execute failed");
472
- error.cause = err;
476
+ const error = err;
477
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
478
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
473
479
  await context.emit("debug", {
474
480
  date: /* @__PURE__ */ new Date(),
475
- logs: [err.stdout]
481
+ logs: [stdout, stderr].filter(Boolean)
476
482
  });
483
+ if (stderr) logger.error(stderr);
484
+ if (stdout) logger.message(stdout);
485
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
477
486
  await context.emit("hook:end", {
478
487
  command: command$1,
479
488
  args,
480
489
  id,
481
- success: true,
482
- error
490
+ success: false,
491
+ error: errorMessage
483
492
  });
484
- await context.emit("error", error);
493
+ await context.emit("error", errorMessage);
485
494
  }
486
495
  });
487
496
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -874,7 +883,7 @@ const githubActionsLogger = defineLogger({
874
883
  date: /* @__PURE__ */ new Date(),
875
884
  logs: [result.stdout]
876
885
  });
877
- console.log(result.stdout);
886
+ if (logLevel > LogLevel.silent) console.log(result.stdout);
878
887
  await context.emit("hook:end", {
879
888
  command: command$1,
880
889
  args,
@@ -883,20 +892,24 @@ const githubActionsLogger = defineLogger({
883
892
  error: null
884
893
  });
885
894
  } catch (err) {
886
- const error = /* @__PURE__ */ new Error("Hook execute failed");
887
- error.cause = err;
895
+ const error = err;
896
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
897
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
888
898
  await context.emit("debug", {
889
899
  date: /* @__PURE__ */ new Date(),
890
- logs: [err.stdout]
900
+ logs: [stdout, stderr].filter(Boolean)
891
901
  });
902
+ if (stderr) console.error(`::error::${stderr}`);
903
+ if (stdout) console.log(stdout);
904
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
892
905
  await context.emit("hook:end", {
893
906
  command: command$1,
894
907
  args,
895
908
  id,
896
909
  success: false,
897
- error
910
+ error: errorMessage
898
911
  });
899
- await context.emit("error", error);
912
+ await context.emit("error", errorMessage);
900
913
  }
901
914
  });
902
915
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -1045,7 +1058,8 @@ const plainLogger = defineLogger({
1045
1058
  console.log(text);
1046
1059
  });
1047
1060
  context.on("hook:start", async ({ id, command: command$1, args }) => {
1048
- const text = getMessage(`Hook ${args?.length ? `${command$1} ${args.join(" ")}` : command$1} started`);
1061
+ const commandWithArgs = args?.length ? `${command$1} ${args.join(" ")}` : command$1;
1062
+ const text = getMessage(`Hook ${commandWithArgs} started`);
1049
1063
  if (logLevel > LogLevel.silent) console.log(text);
1050
1064
  if (!id) return;
1051
1065
  try {
@@ -1057,7 +1071,7 @@ const plainLogger = defineLogger({
1057
1071
  date: /* @__PURE__ */ new Date(),
1058
1072
  logs: [result.stdout]
1059
1073
  });
1060
- console.log(result.stdout);
1074
+ if (logLevel > LogLevel.silent) console.log(result.stdout);
1061
1075
  await context.emit("hook:end", {
1062
1076
  command: command$1,
1063
1077
  args,
@@ -1066,20 +1080,24 @@ const plainLogger = defineLogger({
1066
1080
  error: null
1067
1081
  });
1068
1082
  } catch (err) {
1069
- const error = /* @__PURE__ */ new Error("Hook execute failed");
1070
- error.cause = err;
1083
+ const error = err;
1084
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
1085
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
1071
1086
  await context.emit("debug", {
1072
1087
  date: /* @__PURE__ */ new Date(),
1073
- logs: [err.stdout]
1088
+ logs: [stdout, stderr].filter(Boolean)
1074
1089
  });
1090
+ if (stderr) console.error(stderr);
1091
+ if (stdout) console.log(stdout);
1092
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
1075
1093
  await context.emit("hook:end", {
1076
1094
  command: command$1,
1077
1095
  args,
1078
1096
  id,
1079
1097
  success: false,
1080
- error
1098
+ error: errorMessage
1081
1099
  });
1082
- await context.emit("error", error);
1100
+ await context.emit("error", errorMessage);
1083
1101
  }
1084
1102
  });
1085
1103
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -1249,4 +1267,4 @@ var generate_default = command;
1249
1267
 
1250
1268
  //#endregion
1251
1269
  export { generate_default as default };
1252
- //# sourceMappingURL=generate-Bgpw_dcv.js.map
1270
+ //# sourceMappingURL=generate-DmkY-UC3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-DmkY-UC3.js","names":["version","process","frames","version","command","frames","version","command","frames","command","path","process"],"sources":["../src/utils/formatMsWithColor.ts","../src/utils/ansiColors.ts","../src/utils/getIntro.ts","../src/utils/randomColor.ts","../src/utils/getSummary.ts","../src/utils/Writables.ts","../src/loggers/clackLogger.ts","../src/loggers/envDetection.ts","../src/loggers/fileSystemLogger.ts","../src/loggers/githubActionsLogger.ts","../src/loggers/plainLogger.ts","../src/loggers/utils.ts","../src/utils/watcher.ts","../src/commands/generate.ts"],"sourcesContent":["import { formatMs } from '@kubb/core/utils'\nimport pc from 'picocolors'\n\n/**\n * Formats milliseconds with color based on duration thresholds:\n * - Green: <= 500ms\n * - Yellow: > 500ms and <= 1000ms\n * - Red: > 1000ms\n */\nexport function formatMsWithColor(ms: number): string {\n const formatted = formatMs(ms)\n\n if (ms <= 500) {\n return pc.green(formatted)\n }\n\n if (ms <= 1000) {\n return pc.yellow(formatted)\n }\n\n return pc.red(formatted)\n}\n","/**\n * ANSI True Color (24-bit) utilities for terminal output\n * Supports hex color codes without external dependencies like chalk\n */\n\n/**\n * Convert hex color to ANSI 24-bit true color escape sequence\n * @param color - Hex color code (with or without #), e.g., '#FF5500' or 'FF5500'\n * @returns Function that wraps text with the color\n */\nexport function hex(color: string): (text: string) => string {\n const cleanHex = color.replace('#', '')\n const r = Number.parseInt(cleanHex.slice(0, 2), 16)\n const g = Number.parseInt(cleanHex.slice(2, 4), 16)\n const b = Number.parseInt(cleanHex.slice(4, 6), 16)\n\n // Default to white (255) if parsing fails (NaN)\n const safeR = Number.isNaN(r) ? 255 : r\n const safeG = Number.isNaN(g) ? 255 : g\n const safeB = Number.isNaN(b) ? 255 : b\n\n return (text: string) => `\\x1b[38;2;${safeR};${safeG};${safeB}m${text}\\x1b[0m`\n}\n","import { default as gradientString } from 'gradient-string'\nimport pc from 'picocolors'\nimport { hex } from './ansiColors.ts'\n\n// Custom Color Palette for \"Wooden\" Depth\nconst colors = {\n lid: hex('#F55A17'), // Dark Wood\n woodTop: hex('#F5A217'), // Bright Orange (Light source)\n woodMid: hex('#F58517'), // Main Orange\n woodBase: hex('#B45309'), // Shadow Orange\n eye: hex('#FFFFFF'), // Deep Slate\n highlight: hex('#adadc6'), // Eye shine\n blush: hex('#FDA4AF'), // Soft Rose\n}\n\n/**\n * Generates the Kubb mascot face welcome message\n * @param version - The version string to display\n * @returns Formatted mascot face string\n */\nexport function getIntro({ title, description, version, areEyesOpen }: { title: string; description: string; version: string; areEyesOpen: boolean }): string {\n // Use gradient-string for the KUBB version text\n const kubbVersion = gradientString(['#F58517', '#F5A217', '#F55A17'])(`KUBB v${version}`)\n\n const eyeTop = areEyesOpen ? colors.eye('█▀█') : colors.eye('───')\n const eyeBottom = areEyesOpen ? colors.eye('▀▀▀') : colors.eye('───')\n\n return `\n ${colors.lid('▄▄▄▄▄▄▄▄▄▄▄▄▄')}\n ${colors.woodTop('█ ')}${colors.highlight('▄▄')}${colors.woodTop(' ')}${colors.highlight('▄▄')}${colors.woodTop(' █')} ${kubbVersion}\n ${colors.woodMid('█ ')}${eyeTop}${colors.woodMid(' ')}${eyeTop}${colors.woodMid(' █')} ${pc.gray(title)}\n ${colors.woodMid('█ ')}${eyeBottom}${colors.woodMid(' ')}${colors.blush('◡')}${colors.woodMid(' ')}${eyeBottom}${colors.woodMid(' █')} ${pc.yellow('➜')} ${pc.white(description)}\n ${colors.woodBase('▀▀▀▀▀▀▀▀▀▀▀▀▀')}\n`\n}\n","import pc from 'picocolors'\nimport seedrandom from 'seedrandom'\n\nexport function randomColor(text?: string): 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray' {\n if (!text) {\n return 'white'\n }\n\n const defaultColors = ['black', 'red', 'green', 'yellow', 'blue', 'red', 'green', 'magenta', 'cyan', 'gray'] as const\n\n const random = seedrandom(text)\n return defaultColors.at(Math.floor(random() * defaultColors.length)) || 'white'\n}\n\nexport function randomCliColor(text?: string): string {\n if (!text) {\n return ''\n }\n\n const color = randomColor(text)\n\n const fn = pc[color]\n return fn ? fn(text) : text\n}\n","import path from 'node:path'\nimport type { Config, Plugin } from '@kubb/core'\nimport { formatHrtime } from '@kubb/core/utils'\nimport pc from 'picocolors'\nimport { randomCliColor } from './randomColor.ts'\n\ntype SummaryProps = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n status: 'success' | 'failed'\n hrStart: [number, number]\n filesCreated: number\n config: Config\n pluginTimings?: Map<string, number>\n}\n\nexport function getSummary({ failedPlugins, filesCreated, status, hrStart, config, pluginTimings }: SummaryProps): string[] {\n const duration = formatHrtime(hrStart)\n\n const pluginsCount = config.plugins?.length || 0\n const successCount = pluginsCount - failedPlugins.size\n\n const meta = {\n plugins:\n status === 'success'\n ? `${pc.green(`${successCount} successful`)}, ${pluginsCount} total`\n : `${pc.green(`${successCount} successful`)}, ${pc.red(`${failedPlugins.size} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? [...failedPlugins]?.map(({ plugin }) => randomCliColor(plugin.name))?.join(', ') : undefined,\n filesCreated: filesCreated,\n time: pc.green(duration),\n output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root,\n } as const\n\n const labels = {\n plugins: 'Plugins:',\n failed: 'Failed:',\n generated: 'Generated:',\n pluginTimings: 'Plugin Timings:',\n output: 'Output:',\n }\n const maxLength = Math.max(0, ...[...Object.values(labels), ...(pluginTimings ? Array.from(pluginTimings.keys()) : [])].map((s) => s.length))\n\n const summaryLines: string[] = []\n summaryLines.push(`${labels.plugins.padEnd(maxLength + 2)} ${meta.plugins}`)\n\n if (meta.pluginsFailed) {\n summaryLines.push(`${labels.failed.padEnd(maxLength + 2)} ${meta.pluginsFailed}`)\n }\n\n summaryLines.push(`${labels.generated.padEnd(maxLength + 2)} ${meta.filesCreated} files in ${meta.time}`)\n\n if (pluginTimings && pluginTimings.size > 0) {\n const TIME_SCALE_DIVISOR = 100\n const MAX_BAR_LENGTH = 10\n\n const sortedTimings = Array.from(pluginTimings.entries()).sort((a, b) => b[1] - a[1])\n\n if (sortedTimings.length > 0) {\n summaryLines.push(`${labels.pluginTimings}`)\n\n sortedTimings.forEach(([name, time]) => {\n const timeStr = time >= 1000 ? `${(time / 1000).toFixed(2)}s` : `${Math.round(time)}ms`\n const barLength = Math.min(Math.ceil(time / TIME_SCALE_DIVISOR), MAX_BAR_LENGTH)\n const bar = pc.dim('█'.repeat(barLength))\n\n summaryLines.push(`${pc.dim('•')} ${name.padEnd(maxLength + 1)}${bar} ${timeStr}`)\n })\n }\n }\n\n summaryLines.push(`${labels.output.padEnd(maxLength + 2)} ${meta.output}`)\n\n return summaryLines\n}\n","import type { WritableOptions } from 'node:stream'\nimport { Writable } from 'node:stream'\nimport type * as clack from '@clack/prompts'\nimport pc from 'picocolors'\n\nexport class ClackWritable extends Writable {\n taskLog: ReturnType<typeof clack.taskLog>\n constructor(taskLog: ReturnType<typeof clack.taskLog>, opts?: WritableOptions) {\n super(opts)\n\n this.taskLog = taskLog\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.taskLog.message(`${pc.dim(chunk?.toString())}`)\n callback()\n }\n}\n","import { relative } from 'node:path'\nimport process from 'node:process'\nimport * as clack from '@clack/prompts'\nimport { defineLogger, LogLevel } from '@kubb/core'\nimport { formatHrtime, formatMs } from '@kubb/core/utils'\nimport { type ExecaError, execa } from 'execa'\nimport pc from 'picocolors'\nimport { formatMsWithColor } from '../utils/formatMsWithColor.ts'\nimport { getIntro } from '../utils/getIntro.ts'\nimport { getSummary } from '../utils/getSummary.ts'\nimport { ClackWritable } from '../utils/Writables.ts'\n\n/**\n * Clack adapter for local TTY environments\n * Provides a beautiful CLI UI with flat structure inspired by Claude's CLI patterns\n */\nexport const clackLogger = defineLogger({\n name: 'clack',\n install(context, options) {\n const logLevel = options?.logLevel || LogLevel.info\n const state = {\n totalPlugins: 0,\n completedPlugins: 0,\n failedPlugins: 0,\n totalFiles: 0,\n processedFiles: 0,\n hrStart: process.hrtime(),\n spinner: clack.spinner(),\n isSpinning: false,\n activeProgress: new Map<string, { interval?: NodeJS.Timeout; progressBar: clack.ProgressResult }>(),\n }\n\n function reset() {\n for (const [_key, active] of state.activeProgress) {\n if (active.interval) {\n clearInterval(active.interval)\n }\n active.progressBar?.stop()\n }\n\n state.totalPlugins = 0\n state.completedPlugins = 0\n state.failedPlugins = 0\n state.totalFiles = 0\n state.processedFiles = 0\n state.hrStart = process.hrtime()\n state.spinner = clack.spinner()\n state.isSpinning = false\n state.activeProgress.clear()\n }\n\n function showProgressStep() {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const parts: string[] = []\n const duration = formatHrtime(state.hrStart)\n\n if (state.totalPlugins > 0) {\n const pluginStr =\n state.failedPlugins > 0\n ? `Plugins ${pc.green(state.completedPlugins.toString())}/${state.totalPlugins} ${pc.red(`(${state.failedPlugins} failed)`)}`\n : `Plugins ${pc.green(state.completedPlugins.toString())}/${state.totalPlugins}`\n parts.push(pluginStr)\n }\n\n if (state.totalFiles > 0) {\n parts.push(`Files ${pc.green(state.processedFiles.toString())}/${state.totalFiles}`)\n }\n\n if (parts.length > 0) {\n parts.push(`${pc.green(duration)} elapsed`)\n clack.log.step(getMessage(parts.join(pc.dim(' | '))))\n }\n }\n\n function getMessage(message: string): string {\n if (logLevel >= LogLevel.verbose) {\n const timestamp = new Date().toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n\n return [pc.dim(`[${timestamp}]`), message].join(' ')\n }\n\n return message\n }\n\n function startSpinner(text?: string) {\n state.spinner.start(text)\n state.isSpinning = true\n }\n\n function stopSpinner(text?: string) {\n state.spinner.stop(text)\n state.isSpinning = false\n }\n\n context.on('info', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage([pc.blue('ℹ'), message, pc.dim(info)].join(' '))\n\n if (state.isSpinning) {\n state.spinner.message(text)\n } else {\n clack.log.info(text)\n }\n })\n\n context.on('success', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage([pc.blue('✓'), message, logLevel >= LogLevel.info ? pc.dim(info) : undefined].filter(Boolean).join(' '))\n\n if (state.isSpinning) {\n stopSpinner(text)\n } else {\n clack.log.success(text)\n }\n })\n\n context.on('warn', (message, info) => {\n if (logLevel < LogLevel.warn) {\n return\n }\n\n const text = getMessage([pc.yellow('⚠'), message, logLevel >= LogLevel.info ? pc.dim(info) : undefined].filter(Boolean).join(' '))\n\n clack.log.warn(text)\n })\n\n context.on('error', (error) => {\n const caused = error.cause as Error | undefined\n\n const text = [pc.red('✗'), error.message].join(' ')\n\n if (state.isSpinning) {\n stopSpinner(getMessage(text))\n } else {\n clack.log.error(getMessage(text))\n }\n\n // Show stack trace in debug mode (first 3 frames)\n if (logLevel >= LogLevel.debug && error.stack) {\n const frames = error.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n clack.log.message(getMessage(pc.dim(frame.trim())))\n }\n\n if (caused?.stack) {\n clack.log.message(pc.dim(`└─ caused by ${caused.message}`))\n\n const frames = caused.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n clack.log.message(getMessage(` ${pc.dim(frame.trim())}`))\n }\n }\n }\n })\n\n context.on('version:new', (version, latestVersion) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n clack.box(\n `\\`v${version}\\` → \\`v${latestVersion}\\`\nRun \\`npm install -g @kubb/cli\\` to update`,\n 'Update available for `Kubb`',\n {\n width: 'auto',\n formatBorder: pc.yellow,\n rounded: true,\n withGuide: false,\n contentAlign: 'center',\n titleAlign: 'center',\n },\n )\n })\n\n context.on('lifecycle:start', async (version) => {\n console.log(`\\n${getIntro({ title: 'The ultimate toolkit for working with APIs', description: 'Ready to start', version, areEyesOpen: true })}\\n`)\n\n reset()\n })\n\n context.on('config:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration started')\n\n clack.intro(text)\n startSpinner(getMessage('Configuration loading'))\n })\n\n context.on('config:end', (_configs) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration completed')\n\n clack.outro(text)\n })\n\n context.on('generation:start', (config) => {\n // Initialize progress tracking\n state.totalPlugins = config.plugins?.length || 0\n\n const text = getMessage(['Generation started', config.name ? `for ${pc.dim(config.name)}` : undefined].filter(Boolean).join(' '))\n\n clack.intro(text)\n reset()\n })\n\n context.on('plugin:start', (plugin) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n stopSpinner()\n\n const progressBar = clack.progress({\n style: 'block',\n max: 100,\n size: 30,\n })\n const text = getMessage(`Generating ${pc.bold(plugin.name)}`)\n progressBar.start(text)\n\n const interval = setInterval(() => {\n progressBar.advance()\n }, 100)\n\n state.activeProgress.set(plugin.name, { progressBar, interval })\n })\n\n context.on('plugin:end', (plugin, { duration, success }) => {\n stopSpinner()\n\n const active = state.activeProgress.get(plugin.name)\n\n if (!active || logLevel === LogLevel.silent) {\n return\n }\n\n clearInterval(active.interval)\n\n if (success) {\n state.completedPlugins++\n } else {\n state.failedPlugins++\n }\n\n const durationStr = formatMsWithColor(duration)\n const text = getMessage(\n success ? `${pc.bold(plugin.name)} completed in ${durationStr}` : `${pc.bold(plugin.name)} failed in ${pc.red(formatMs(duration))}`,\n )\n\n active.progressBar.stop(text)\n state.activeProgress.delete(plugin.name)\n\n // Show progress step after each plugin\n showProgressStep()\n })\n\n context.on('files:processing:start', (files) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n stopSpinner()\n\n state.totalFiles = files.length\n state.processedFiles = 0\n\n const text = `Writing ${files.length} files`\n const progressBar = clack.progress({\n style: 'block',\n max: files.length,\n size: 30,\n })\n\n context.emit('info', text)\n progressBar.start(getMessage(text))\n state.activeProgress.set('files', { progressBar })\n })\n\n context.on('file:processing:update', ({ file, config }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n stopSpinner()\n\n state.processedFiles++\n\n const text = `Writing ${relative(config.root, file.path)}`\n const active = state.activeProgress.get('files')\n\n if (!active) {\n return\n }\n\n active.progressBar.advance(undefined, text)\n })\n context.on('files:processing:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n stopSpinner()\n\n const text = getMessage('Files written successfully')\n const active = state.activeProgress.get('files')\n\n if (!active) {\n return\n }\n\n active.progressBar.stop(text)\n state.activeProgress.delete('files')\n\n // Show final progress step after files are written\n showProgressStep()\n })\n\n context.on('generation:end', (config) => {\n const text = getMessage(config.name ? `Generation completed for ${pc.dim(config.name)}` : 'Generation completed')\n\n clack.outro(text)\n })\n\n context.on('format:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format started')\n\n clack.intro(text)\n })\n\n context.on('format:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format completed')\n\n clack.outro(text)\n })\n\n context.on('lint:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint started')\n\n clack.intro(text)\n })\n\n context.on('lint:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint completed')\n\n clack.outro(text)\n })\n\n context.on('hook:start', async ({ id, command, args }) => {\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${pc.dim(commandWithArgs)} started`)\n\n // Skip hook execution if no id is provided (e.g., during benchmarks or tests)\n if (!id) {\n return\n }\n\n if (logLevel <= LogLevel.silent) {\n try {\n const result = await execa(command, args, {\n detached: true,\n stripFinalNewline: true,\n })\n\n await context.emit('debug', {\n date: new Date(),\n logs: [result.stdout],\n })\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: true,\n error: null,\n })\n } catch (err) {\n const error = err as ExecaError\n const stderr = typeof error.stderr === 'string' ? error.stderr : String(error.stderr)\n const stdout = typeof error.stdout === 'string' ? error.stdout : String(error.stdout)\n\n await context.emit('debug', {\n date: new Date(),\n logs: [stdout, stderr].filter(Boolean),\n })\n\n if (stderr) {\n console.error(stderr)\n }\n if (stdout) {\n console.log(stdout)\n }\n\n const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: false,\n error: errorMessage,\n })\n await context.emit('error', errorMessage)\n }\n\n return\n }\n\n clack.intro(text)\n\n const logger = clack.taskLog({\n title: getMessage(['Executing hook', logLevel >= LogLevel.info ? pc.dim(commandWithArgs) : undefined].filter(Boolean).join(' ')),\n })\n\n const writable = new ClackWritable(logger)\n\n try {\n const result = await execa(command, args, {\n detached: true,\n stdout: ['pipe', writable],\n stripFinalNewline: true,\n })\n\n await context.emit('debug', {\n date: new Date(),\n logs: [result.stdout],\n })\n\n await context.emit('hook:end', { command, args, id, success: true, error: null })\n } catch (err) {\n const error = err as ExecaError\n const stderr = typeof error.stderr === 'string' ? error.stderr : String(error.stderr)\n const stdout = typeof error.stdout === 'string' ? error.stdout : String(error.stdout)\n\n await context.emit('debug', {\n date: new Date(),\n logs: [stdout, stderr].filter(Boolean),\n })\n\n if (stderr) {\n logger.error(stderr)\n }\n if (stdout) {\n logger.message(stdout)\n }\n\n const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)\n\n await context.emit('hook:end', { command, args, id, success: false, error: errorMessage })\n await context.emit('error', errorMessage)\n }\n })\n\n context.on('hook:end', ({ command, args }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${pc.dim(commandWithArgs)} successfully executed`)\n\n clack.outro(text)\n })\n\n context.on('generation:summary', (config, { pluginTimings, failedPlugins, filesCreated, status, hrStart }) => {\n const summary = getSummary({\n failedPlugins,\n filesCreated,\n config,\n status,\n hrStart,\n pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : undefined,\n })\n const title = config.name || ''\n\n summary.unshift('\\n')\n summary.push('\\n')\n\n if (status === 'success') {\n clack.box(summary.join('\\n'), getMessage(title), {\n width: 'auto',\n formatBorder: pc.green,\n rounded: true,\n withGuide: false,\n contentAlign: 'left',\n titleAlign: 'center',\n })\n\n return\n }\n\n clack.box(summary.join('\\n'), getMessage(title), {\n width: 'auto',\n formatBorder: pc.red,\n rounded: true,\n withGuide: false,\n contentAlign: 'left',\n titleAlign: 'center',\n })\n })\n\n context.on('lifecycle:end', () => {\n reset()\n })\n },\n})\n","/**\n * Check if running in GitHub Actions environment\n */\nexport function isGitHubActions(): boolean {\n return !!process.env.GITHUB_ACTIONS\n}\n\n/**\n * Check if running in any CI environment\n */\nexport function isCIEnvironment(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BUILDKITE\n )\n}\n\n/**\n * Check if TTY is available for interactive output\n */\nexport function canUseTTY(): boolean {\n return !!process.stdout.isTTY && !isCIEnvironment()\n}\n","import { relative, resolve } from 'node:path'\nimport { defineLogger } from '@kubb/core'\nimport { write } from '@kubb/core/fs'\nimport { formatMs } from '@kubb/core/utils'\n\ntype CachedEvent = {\n date: Date\n logs: string[]\n fileName?: string\n}\n\n/**\n * FileSystem logger for debug log persistence\n * Captures debug and verbose events and writes them to files in .kubb directory\n *\n * Note: Logs are written on lifecycle:end or process exit. If the process crashes\n * before these events, some cached logs may be lost.\n */\nexport const fileSystemLogger = defineLogger({\n name: 'filesystem',\n install(context) {\n const state = {\n cachedLogs: new Set<CachedEvent>(),\n startDate: Date.now(),\n }\n\n function reset() {\n state.cachedLogs = new Set<CachedEvent>()\n state.startDate = Date.now()\n }\n\n async function writeLogs(name?: string) {\n if (state.cachedLogs.size === 0) {\n return []\n }\n\n const files: Record<string, string[]> = {}\n\n for (const log of state.cachedLogs) {\n const baseName = log.fileName || `${['kubb', name, state.startDate].filter(Boolean).join('-')}.log`\n const pathName = resolve(process.cwd(), '.kubb', baseName)\n\n if (!files[pathName]) {\n files[pathName] = []\n }\n\n if (log.logs.length > 0) {\n const timestamp = log.date.toLocaleString()\n files[pathName].push(`[${timestamp}]\\n${log.logs.join('\\n')}`)\n }\n }\n\n await Promise.all(\n Object.entries(files).map(async ([fileName, logs]) => {\n return write(fileName, logs.join('\\n\\n'))\n }),\n )\n\n return Object.keys(files)\n }\n\n context.on('info', (message, info) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`ℹ ${message} ${info}`],\n fileName: undefined,\n })\n })\n\n context.on('success', (message, info) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`✓ ${message} ${info}`],\n fileName: undefined,\n })\n })\n\n context.on('warn', (message, info) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`⚠ ${message} ${info}`],\n fileName: undefined,\n })\n })\n\n context.on('error', (error) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`✗ ${error.message}`, error.stack || 'unknown stack'],\n fileName: undefined,\n })\n })\n\n context.on('debug', (message) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: message.logs,\n fileName: undefined,\n })\n })\n\n context.on('plugin:start', (plugin) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`Generating ${plugin.name}`],\n fileName: undefined,\n })\n })\n\n context.on('plugin:end', (plugin, { duration, success }) => {\n const durationStr = formatMs(duration)\n\n state.cachedLogs.add({\n date: new Date(),\n logs: [success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`],\n fileName: undefined,\n })\n })\n\n context.on('files:processing:start', (files) => {\n state.cachedLogs.add({\n date: new Date(),\n logs: [`Start ${files.length} writing:`, ...files.map((file) => file.path)],\n fileName: undefined,\n })\n })\n\n context.on('generation:end', async (config) => {\n const writtenFilePaths = await writeLogs(config.name)\n if (writtenFilePaths.length > 0) {\n const files = writtenFilePaths.map((f) => relative(process.cwd(), f))\n await context.emit('info', 'Debug files written to:', files.join(', '))\n }\n reset()\n })\n\n context.on('lifecycle:end', async () => {\n // lifecycle:end handler can be used for cleanup if needed in the future\n })\n\n // Fallback: Write logs on process exit to handle crashes\n const exitHandler = () => {\n // Synchronous write on exit - best effort\n if (state.cachedLogs.size > 0) {\n writeLogs().catch(() => {\n // Ignore errors on exit\n })\n }\n }\n\n process.once('exit', exitHandler)\n process.once('SIGINT', exitHandler)\n process.once('SIGTERM', exitHandler)\n },\n})\n","import { type Config, defineLogger, LogLevel } from '@kubb/core'\nimport { formatHrtime, formatMs } from '@kubb/core/utils'\nimport { type ExecaError, execa } from 'execa'\nimport pc from 'picocolors'\nimport { formatMsWithColor } from '../utils/formatMsWithColor.ts'\n\n/**\n * GitHub Actions adapter for CI environments\n * Uses Github group annotations for collapsible sections\n */\nexport const githubActionsLogger = defineLogger({\n name: 'github-actions',\n install(context, options) {\n const logLevel = options?.logLevel || LogLevel.info\n const state = {\n totalPlugins: 0,\n completedPlugins: 0,\n failedPlugins: 0,\n totalFiles: 0,\n processedFiles: 0,\n hrStart: process.hrtime(),\n currentConfigs: [] as Array<Config>,\n }\n\n function reset() {\n state.totalPlugins = 0\n state.completedPlugins = 0\n state.failedPlugins = 0\n state.totalFiles = 0\n state.processedFiles = 0\n state.hrStart = process.hrtime()\n }\n\n function showProgressStep() {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const parts: string[] = []\n const duration = formatHrtime(state.hrStart)\n\n if (state.totalPlugins > 0) {\n const pluginStr =\n state.failedPlugins > 0\n ? `Plugins ${pc.green(state.completedPlugins.toString())}/${state.totalPlugins} ${pc.red(`(${state.failedPlugins} failed)`)}`\n : `Plugins ${pc.green(state.completedPlugins.toString())}/${state.totalPlugins}`\n parts.push(pluginStr)\n }\n\n if (state.totalFiles > 0) {\n parts.push(`Files ${pc.green(state.processedFiles.toString())}/${state.totalFiles}`)\n }\n\n if (parts.length > 0) {\n parts.push(`${pc.green(duration)} elapsed`)\n console.log(getMessage(parts.join(pc.dim(' | '))))\n }\n }\n\n function getMessage(message: string): string {\n if (logLevel >= LogLevel.verbose) {\n const timestamp = new Date().toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n\n return [pc.dim(`[${timestamp}]`), message].join(' ')\n }\n\n return message\n }\n\n function openGroup(name: string) {\n console.log(`::group::${name}`)\n }\n\n function closeGroup(_name: string) {\n console.log('::endgroup::')\n }\n\n context.on('info', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage([pc.blue('ℹ'), message, pc.dim(info)].join(' '))\n\n console.log(text)\n })\n\n context.on('success', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage([pc.blue('✓'), message, logLevel >= LogLevel.info ? pc.dim(info) : undefined].filter(Boolean).join(' '))\n\n console.log(text)\n })\n\n context.on('warn', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage([pc.yellow('⚠'), message, logLevel >= LogLevel.info ? pc.dim(info) : undefined].filter(Boolean).join(' '))\n\n console.warn(`::warning::${text}`)\n })\n\n context.on('error', (error) => {\n const caused = error.cause as Error | undefined\n\n if (logLevel <= LogLevel.silent) {\n return\n }\n const message = error.message || String(error)\n console.error(`::error::${message}`)\n\n // Show stack trace in debug mode (first 3 frames)\n if (logLevel >= LogLevel.debug && error.stack) {\n const frames = error.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n console.log(getMessage(pc.dim(frame.trim())))\n }\n\n if (caused?.stack) {\n console.log(pc.dim(`└─ caused by ${caused.message}`))\n\n const frames = caused.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n console.log(getMessage(` ${pc.dim(frame.trim())}`))\n }\n }\n }\n })\n\n context.on('lifecycle:start', (version) => {\n console.log(pc.yellow(`Kubb ${version} 🧩`))\n reset()\n })\n\n context.on('config:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration started')\n\n openGroup('Configuration')\n\n console.log(text)\n })\n\n context.on('config:end', (configs) => {\n state.currentConfigs = configs\n\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration completed')\n\n console.log(text)\n\n closeGroup('Configuration')\n })\n\n context.on('generation:start', (config) => {\n // Initialize progress tracking\n state.totalPlugins = config.plugins?.length || 0\n\n const text = config.name ? `Generation for ${pc.bold(config.name)}` : 'Generation'\n\n if (state.currentConfigs.length > 1) {\n openGroup(text)\n }\n\n if (state.currentConfigs.length === 1) {\n console.log(getMessage(text))\n }\n\n reset()\n })\n\n context.on('plugin:start', (plugin) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n const text = getMessage(`Generating ${pc.bold(plugin.name)}`)\n\n if (state.currentConfigs.length === 1) {\n openGroup(`Plugin: ${plugin.name}`)\n }\n\n console.log(text)\n })\n\n context.on('plugin:end', (plugin, { duration, success }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n if (success) {\n state.completedPlugins++\n } else {\n state.failedPlugins++\n }\n\n const durationStr = formatMsWithColor(duration)\n const text = getMessage(\n success ? `${pc.bold(plugin.name)} completed in ${durationStr}` : `${pc.bold(plugin.name)} failed in ${pc.red(formatMs(duration))}`,\n )\n\n console.log(text)\n if (state.currentConfigs.length > 1) {\n console.log(' ')\n }\n\n if (state.currentConfigs.length === 1) {\n closeGroup(`Plugin: ${plugin.name}`)\n }\n\n // Show progress step after each plugin\n showProgressStep()\n })\n\n context.on('files:processing:start', (files) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n state.totalFiles = files.length\n state.processedFiles = 0\n\n if (state.currentConfigs.length === 1) {\n openGroup('File Generation')\n }\n const text = getMessage(`Writing ${files.length} files`)\n\n console.log(text)\n })\n\n context.on('files:processing:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n const text = getMessage('Files written successfully')\n\n console.log(text)\n\n if (state.currentConfigs.length === 1) {\n closeGroup('File Generation')\n }\n })\n\n context.on('file:processing:update', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n state.processedFiles++\n })\n\n context.on('files:processing:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n // Show final progress step after files are written\n showProgressStep()\n })\n\n context.on('generation:end', (config) => {\n const text = getMessage(config.name ? `${pc.blue('✓')} Generation completed for ${pc.dim(config.name)}` : `${pc.blue('✓')} Generation completed`)\n\n console.log(text)\n })\n\n context.on('format:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format started')\n\n if (state.currentConfigs.length === 1) {\n openGroup('Formatting')\n }\n\n console.log(text)\n })\n\n context.on('format:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format completed')\n\n console.log(text)\n\n if (state.currentConfigs.length === 1) {\n closeGroup('Formatting')\n }\n })\n\n context.on('lint:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint started')\n\n if (state.currentConfigs.length === 1) {\n openGroup('Linting')\n }\n\n console.log(text)\n })\n\n context.on('lint:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint completed')\n\n console.log(text)\n\n if (state.currentConfigs.length === 1) {\n closeGroup('Linting')\n }\n })\n\n context.on('hook:start', async ({ id, command, args }) => {\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${pc.dim(commandWithArgs)} started`)\n\n if (logLevel > LogLevel.silent) {\n if (state.currentConfigs.length === 1) {\n openGroup(`Hook ${commandWithArgs}`)\n }\n\n console.log(text)\n }\n\n // Skip hook execution if no id is provided (e.g., during benchmarks or tests)\n if (!id) {\n return\n }\n\n try {\n const result = await execa(command, args, {\n detached: true,\n stripFinalNewline: true,\n })\n\n await context.emit('debug', {\n date: new Date(),\n logs: [result.stdout],\n })\n\n if (logLevel > LogLevel.silent) {\n console.log(result.stdout)\n }\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: true,\n error: null,\n })\n } catch (err) {\n const error = err as ExecaError\n const stderr = typeof error.stderr === 'string' ? error.stderr : String(error.stderr)\n const stdout = typeof error.stdout === 'string' ? error.stdout : String(error.stdout)\n\n await context.emit('debug', {\n date: new Date(),\n logs: [stdout, stderr].filter(Boolean),\n })\n\n // Display stderr/stdout in GitHub Actions format\n if (stderr) {\n console.error(`::error::${stderr}`)\n }\n if (stdout) {\n console.log(stdout)\n }\n\n const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: false,\n error: errorMessage,\n })\n await context.emit('error', errorMessage)\n }\n })\n\n context.on('hook:end', ({ command, args }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${pc.dim(commandWithArgs)} completed`)\n\n console.log(text)\n\n if (state.currentConfigs.length === 1) {\n closeGroup(`Hook ${commandWithArgs}`)\n }\n })\n\n context.on('generation:summary', (config, { status, hrStart, failedPlugins }) => {\n const pluginsCount = config.plugins?.length || 0\n const successCount = pluginsCount - failedPlugins.size\n const duration = formatHrtime(hrStart)\n\n if (state.currentConfigs.length > 1) {\n console.log(' ')\n }\n\n console.log(\n status === 'success'\n ? `Kubb Summary: ${pc.blue('✓')} ${`${successCount} successful`}, ${pluginsCount} total, ${pc.green(duration)}`\n : `Kubb Summary: ${pc.blue('✓')} ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total, ${pc.green(duration)}`,\n )\n\n if (state.currentConfigs.length > 1) {\n closeGroup(config.name ? `Generation for ${pc.bold(config.name)}` : 'Generation')\n }\n })\n },\n})\n","import { relative } from 'node:path'\nimport { defineLogger, LogLevel } from '@kubb/core'\nimport { formatMs } from '@kubb/core/utils'\nimport { type ExecaError, execa } from 'execa'\nimport { getSummary } from '../utils/getSummary.ts'\n\n/**\n * Plain console adapter for non-TTY environments\n * Simple console.log output with indentation\n */\nexport const plainLogger = defineLogger({\n name: 'plain',\n install(context, options) {\n const logLevel = options?.logLevel || 3\n\n function getMessage(message: string): string {\n if (logLevel >= LogLevel.verbose) {\n const timestamp = new Date().toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n\n return [`[${timestamp}]`, message].join(' ')\n }\n\n return message\n }\n\n context.on('info', (message, info) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage(['ℹ', message, info].join(' '))\n\n console.log(text)\n })\n\n context.on('success', (message, info = '') => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage(['✓', message, logLevel >= LogLevel.info ? info : undefined].filter(Boolean).join(' '))\n\n console.log(text)\n })\n\n context.on('warn', (message, info) => {\n if (logLevel < LogLevel.warn) {\n return\n }\n\n const text = getMessage(['⚠', message, logLevel >= LogLevel.info ? info : undefined].filter(Boolean).join(' '))\n\n console.log(text)\n })\n\n context.on('error', (error) => {\n const caused = error.cause as Error | undefined\n\n const text = getMessage(['✗', error.message].join(' '))\n\n console.log(text)\n\n // Show stack trace in debug mode (first 3 frames)\n if (logLevel >= LogLevel.debug && error.stack) {\n const frames = error.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n console.log(getMessage(frame.trim()))\n }\n\n if (caused?.stack) {\n console.log(`└─ caused by ${caused.message}`)\n\n const frames = caused.stack.split('\\n').slice(1, 4)\n for (const frame of frames) {\n console.log(getMessage(` ${frame.trim()}`))\n }\n }\n }\n })\n\n context.on('lifecycle:start', () => {\n console.log('Kubb CLI 🧩')\n })\n\n context.on('config:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration started')\n\n console.log(text)\n })\n\n context.on('config:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Configuration completed')\n\n console.log(text)\n })\n\n context.on('generation:start', () => {\n const text = getMessage('Configuration started')\n\n console.log(text)\n })\n\n context.on('plugin:start', (plugin) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n const text = getMessage(`Generating ${plugin.name}`)\n\n console.log(text)\n })\n\n context.on('plugin:end', (plugin, { duration, success }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const durationStr = formatMs(duration)\n const text = getMessage(success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`)\n\n console.log(text)\n })\n\n context.on('files:processing:start', (files) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage(`Writing ${files.length} files`)\n\n console.log(text)\n })\n\n context.on('file:processing:update', ({ file, config }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage(`Writing ${relative(config.root, file.path)}`)\n\n console.log(text)\n })\n\n context.on('files:processing:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Files written successfully')\n\n console.log(text)\n })\n\n context.on('generation:end', (config) => {\n const text = getMessage(config.name ? `Generation completed for ${config.name}` : 'Generation completed')\n\n console.log(text)\n })\n\n context.on('format:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format started')\n\n console.log(text)\n })\n\n context.on('format:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Format completed')\n\n console.log(text)\n })\n\n context.on('lint:start', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint started')\n\n console.log(text)\n })\n\n context.on('lint:end', () => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const text = getMessage('Lint completed')\n\n console.log(text)\n })\n\n context.on('hook:start', async ({ id, command, args }) => {\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${commandWithArgs} started`)\n\n if (logLevel > LogLevel.silent) {\n console.log(text)\n }\n\n // Skip hook execution if no id is provided (e.g., during benchmarks or tests)\n if (!id) {\n return\n }\n\n try {\n const result = await execa(command, args, {\n detached: true,\n stripFinalNewline: true,\n })\n\n await context.emit('debug', {\n date: new Date(),\n logs: [result.stdout],\n })\n\n if (logLevel > LogLevel.silent) {\n console.log(result.stdout)\n }\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: true,\n error: null,\n })\n } catch (err) {\n const error = err as ExecaError\n const stderr = typeof error.stderr === 'string' ? error.stderr : String(error.stderr)\n const stdout = typeof error.stdout === 'string' ? error.stdout : String(error.stdout)\n\n await context.emit('debug', {\n date: new Date(),\n logs: [stdout, stderr].filter(Boolean),\n })\n\n if (stderr) {\n console.error(stderr)\n }\n if (stdout) {\n console.log(stdout)\n }\n\n const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)\n\n await context.emit('hook:end', {\n command,\n args,\n id,\n success: false,\n error: errorMessage,\n })\n await context.emit('error', errorMessage)\n }\n })\n\n context.on('hook:end', ({ command, args }) => {\n if (logLevel <= LogLevel.silent) {\n return\n }\n\n const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command\n const text = getMessage(`Hook ${commandWithArgs} completed`)\n\n console.log(text)\n })\n\n context.on('generation:summary', (config, { pluginTimings, status, hrStart, failedPlugins, filesCreated }) => {\n const summary = getSummary({\n failedPlugins,\n filesCreated,\n config,\n status,\n hrStart,\n pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : undefined,\n })\n\n console.log('---------------------------')\n console.log(summary.join('\\n'))\n console.log('---------------------------')\n })\n },\n})\n","import type { Logger, LoggerContext, LoggerOptions } from '@kubb/core'\nimport { LogLevel } from '@kubb/core'\nimport { clackLogger } from './clackLogger.ts'\nimport { canUseTTY, isGitHubActions } from './envDetection.ts'\nimport { fileSystemLogger } from './fileSystemLogger.ts'\nimport { githubActionsLogger } from './githubActionsLogger.ts'\nimport { plainLogger } from './plainLogger.ts'\nimport type { LoggerType } from './types.ts'\n\nexport function detectLogger(): LoggerType {\n if (isGitHubActions()) {\n return 'github-actions'\n }\n if (canUseTTY()) {\n return 'clack'\n }\n return 'plain'\n}\n\nconst logMapper = {\n clack: clackLogger,\n plain: plainLogger,\n 'github-actions': githubActionsLogger,\n} as const satisfies Record<LoggerType, Logger>\n\nexport async function setupLogger(context: LoggerContext, { logLevel }: LoggerOptions): Promise<void> {\n const type = detectLogger()\n\n const logger = logMapper[type] as Logger\n\n if (!logger) {\n throw new Error(`Unknown adapter type: ${type}`)\n }\n\n // Install primary logger\n const cleanup = await logger.install(context, { logLevel })\n\n if (logLevel >= LogLevel.debug) {\n await fileSystemLogger.install(context, { logLevel })\n }\n\n return cleanup\n}\n","import pc from 'picocolors'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = '**/{.git,node_modules}/**'\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', async (type, file) => {\n console.log(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n\n try {\n await cb(path)\n } catch (_e) {\n console.log(pc.red('Watcher failed'))\n }\n })\n}\n","import path from 'node:path'\nimport * as process from 'node:process'\nimport * as clack from '@clack/prompts'\nimport { isInputPath, type KubbEvents, LogLevel, PromiseManager } from '@kubb/core'\nimport { AsyncEventEmitter, executeIfOnline } from '@kubb/core/utils'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { defineCommand, showUsage } from 'citty'\nimport getLatestVersion from 'latest-version'\nimport pc from 'picocolors'\nimport { lt } from 'semver'\nimport { version } from '../../package.json'\nimport { setupLogger } from '../loggers/utils.ts'\nimport { generate } from '../runners/generate.ts'\nimport { getConfigs } from '../utils/getConfigs.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n logLevel: {\n type: 'string',\n description: 'Info, silent, verbose or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|verbose|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Override logLevel to verbose',\n alias: 'v',\n default: false,\n },\n silent: {\n type: 'boolean',\n description: 'Override logLevel to silent',\n alias: 's',\n default: false,\n },\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nexport type Args = ParsedArgs<typeof args>\n\nconst command = defineCommand({\n meta: {\n name: 'generate',\n description: \"[input] Generate files based on a 'kubb.config.ts' file\",\n },\n args,\n async run(commandContext) {\n const { args } = commandContext\n const input = args._[0]\n const events = new AsyncEventEmitter<KubbEvents>()\n const promiseManager = new PromiseManager()\n\n if (args.help) {\n return showUsage(command)\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.verbose) {\n args.logLevel = 'verbose'\n }\n\n if (args.silent) {\n args.logLevel = 'silent'\n }\n\n const logLevel = LogLevel[args.logLevel as keyof typeof LogLevel] || 3\n\n await setupLogger(events, { logLevel })\n\n await executeIfOnline(async () => {\n const latestVersion = await getLatestVersion('@kubb/cli')\n\n if (lt(version, latestVersion)) {\n await events.emit('version:new', version, latestVersion)\n }\n })\n\n try {\n const result = await getCosmiConfig('kubb', args.config)\n const configs = await getConfigs(result, args)\n\n await events.emit('config:start')\n\n await events.emit('info', 'Config loaded', path.relative(process.cwd(), result.filepath))\n\n await events.emit('success', 'Config loaded successfully', path.relative(process.cwd(), result.filepath))\n await events.emit('config:end', configs)\n\n await events.emit('lifecycle:start', version)\n\n const promises = configs.map((config) => {\n return async () => {\n if (isInputPath(config) && args.watch) {\n await startWatcher([input || config.input.path], async (paths) => {\n await generate({\n input,\n config,\n logLevel,\n events,\n })\n\n clack.log.step(pc.yellow(`Watching for changes in ${paths.join(' and ')}`))\n })\n\n return\n }\n\n await generate({\n input,\n config,\n logLevel,\n events,\n })\n }\n })\n\n await promiseManager.run('seq', promises)\n\n await events.emit('lifecycle:end')\n } catch (error) {\n await events.emit('error', error as Error)\n process.exit(1)\n }\n },\n})\n\nexport default command\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-C1_xRkKa.cjs');
2
- const require_package = require('./package-Cmbk_MZB.cjs');
2
+ const require_package = require('./package-C1c2K_S0.cjs');
3
3
  const require_getCosmiConfig = require('./getCosmiConfig-Co29x0Wv.cjs');
4
4
  let citty = require("citty");
5
5
  let node_path = require("node:path");
@@ -437,25 +437,30 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
437
437
  error: null
438
438
  });
439
439
  } catch (err) {
440
- const error = /* @__PURE__ */ new Error("Hook execute failed");
441
- error.cause = err;
440
+ const error = err;
441
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
442
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
442
443
  await context.emit("debug", {
443
444
  date: /* @__PURE__ */ new Date(),
444
- logs: [err.stdout]
445
+ logs: [stdout, stderr].filter(Boolean)
445
446
  });
447
+ if (stderr) console.error(stderr);
448
+ if (stdout) console.log(stdout);
449
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
446
450
  await context.emit("hook:end", {
447
451
  command: command$1,
448
452
  args,
449
453
  id,
450
454
  success: false,
451
- error
455
+ error: errorMessage
452
456
  });
453
- await context.emit("error", error);
457
+ await context.emit("error", errorMessage);
454
458
  }
455
459
  return;
456
460
  }
457
461
  _clack_prompts.intro(text);
458
- const writable = new ClackWritable(_clack_prompts.taskLog({ title: getMessage(["Executing hook", logLevel >= _kubb_core.LogLevel.info ? picocolors.default.dim(commandWithArgs) : void 0].filter(Boolean).join(" ")) }));
462
+ const logger = _clack_prompts.taskLog({ title: getMessage(["Executing hook", logLevel >= _kubb_core.LogLevel.info ? picocolors.default.dim(commandWithArgs) : void 0].filter(Boolean).join(" ")) });
463
+ const writable = new ClackWritable(logger);
459
464
  try {
460
465
  const result = await (0, execa.execa)(command$1, args, {
461
466
  detached: true,
@@ -474,20 +479,24 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
474
479
  error: null
475
480
  });
476
481
  } catch (err) {
477
- const error = /* @__PURE__ */ new Error("Hook execute failed");
478
- error.cause = err;
482
+ const error = err;
483
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
484
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
479
485
  await context.emit("debug", {
480
486
  date: /* @__PURE__ */ new Date(),
481
- logs: [err.stdout]
487
+ logs: [stdout, stderr].filter(Boolean)
482
488
  });
489
+ if (stderr) logger.error(stderr);
490
+ if (stdout) logger.message(stdout);
491
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
483
492
  await context.emit("hook:end", {
484
493
  command: command$1,
485
494
  args,
486
495
  id,
487
- success: true,
488
- error
496
+ success: false,
497
+ error: errorMessage
489
498
  });
490
- await context.emit("error", error);
499
+ await context.emit("error", errorMessage);
491
500
  }
492
501
  });
493
502
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -880,7 +889,7 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
880
889
  date: /* @__PURE__ */ new Date(),
881
890
  logs: [result.stdout]
882
891
  });
883
- console.log(result.stdout);
892
+ if (logLevel > _kubb_core.LogLevel.silent) console.log(result.stdout);
884
893
  await context.emit("hook:end", {
885
894
  command: command$1,
886
895
  args,
@@ -889,20 +898,24 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
889
898
  error: null
890
899
  });
891
900
  } catch (err) {
892
- const error = /* @__PURE__ */ new Error("Hook execute failed");
893
- error.cause = err;
901
+ const error = err;
902
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
903
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
894
904
  await context.emit("debug", {
895
905
  date: /* @__PURE__ */ new Date(),
896
- logs: [err.stdout]
906
+ logs: [stdout, stderr].filter(Boolean)
897
907
  });
908
+ if (stderr) console.error(`::error::${stderr}`);
909
+ if (stdout) console.log(stdout);
910
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
898
911
  await context.emit("hook:end", {
899
912
  command: command$1,
900
913
  args,
901
914
  id,
902
915
  success: false,
903
- error
916
+ error: errorMessage
904
917
  });
905
- await context.emit("error", error);
918
+ await context.emit("error", errorMessage);
906
919
  }
907
920
  });
908
921
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -1051,7 +1064,8 @@ const plainLogger = (0, _kubb_core.defineLogger)({
1051
1064
  console.log(text);
1052
1065
  });
1053
1066
  context.on("hook:start", async ({ id, command: command$1, args }) => {
1054
- const text = getMessage(`Hook ${args?.length ? `${command$1} ${args.join(" ")}` : command$1} started`);
1067
+ const commandWithArgs = args?.length ? `${command$1} ${args.join(" ")}` : command$1;
1068
+ const text = getMessage(`Hook ${commandWithArgs} started`);
1055
1069
  if (logLevel > _kubb_core.LogLevel.silent) console.log(text);
1056
1070
  if (!id) return;
1057
1071
  try {
@@ -1063,7 +1077,7 @@ const plainLogger = (0, _kubb_core.defineLogger)({
1063
1077
  date: /* @__PURE__ */ new Date(),
1064
1078
  logs: [result.stdout]
1065
1079
  });
1066
- console.log(result.stdout);
1080
+ if (logLevel > _kubb_core.LogLevel.silent) console.log(result.stdout);
1067
1081
  await context.emit("hook:end", {
1068
1082
  command: command$1,
1069
1083
  args,
@@ -1072,20 +1086,24 @@ const plainLogger = (0, _kubb_core.defineLogger)({
1072
1086
  error: null
1073
1087
  });
1074
1088
  } catch (err) {
1075
- const error = /* @__PURE__ */ new Error("Hook execute failed");
1076
- error.cause = err;
1089
+ const error = err;
1090
+ const stderr = typeof error.stderr === "string" ? error.stderr : String(error.stderr);
1091
+ const stdout = typeof error.stdout === "string" ? error.stdout : String(error.stdout);
1077
1092
  await context.emit("debug", {
1078
1093
  date: /* @__PURE__ */ new Date(),
1079
- logs: [err.stdout]
1094
+ logs: [stdout, stderr].filter(Boolean)
1080
1095
  });
1096
+ if (stderr) console.error(stderr);
1097
+ if (stdout) console.log(stdout);
1098
+ const errorMessage = /* @__PURE__ */ new Error(`Hook execute failed: ${commandWithArgs}`);
1081
1099
  await context.emit("hook:end", {
1082
1100
  command: command$1,
1083
1101
  args,
1084
1102
  id,
1085
1103
  success: false,
1086
- error
1104
+ error: errorMessage
1087
1105
  });
1088
- await context.emit("error", error);
1106
+ await context.emit("error", errorMessage);
1089
1107
  }
1090
1108
  });
1091
1109
  context.on("hook:end", ({ command: command$1, args }) => {
@@ -1255,4 +1273,4 @@ var generate_default = command;
1255
1273
 
1256
1274
  //#endregion
1257
1275
  exports.default = generate_default;
1258
- //# sourceMappingURL=generate-BxSL_NKj.cjs.map
1276
+ //# sourceMappingURL=generate-pe0DCVnp.cjs.map