@kubb/cli 5.9.3 → 5.9.5

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 (108) hide show
  1. package/dist/Telemetry-BFKg5ZFx.js +259 -0
  2. package/dist/Telemetry-BFKg5ZFx.js.map +1 -0
  3. package/dist/Telemetry-iUSXePwR.cjs +314 -0
  4. package/dist/Telemetry-iUSXePwR.cjs.map +1 -0
  5. package/dist/{background-BcRoKru0.cjs → background-BA5mxYa1.cjs} +7 -6
  6. package/dist/{background-BcRoKru0.cjs.map → background-BA5mxYa1.cjs.map} +1 -1
  7. package/dist/{background-CCex47-d.js → background-Dtk2M5B8.js} +3 -2
  8. package/dist/{background-CCex47-d.js.map → background-Dtk2M5B8.js.map} +1 -1
  9. package/dist/background-uX93zloA.js +1 -0
  10. package/dist/{reporters-H21Jvrff.js → config-66zh0aCP.js} +29 -3
  11. package/dist/config-66zh0aCP.js.map +1 -0
  12. package/dist/{reporters-B4rZOlo8.cjs → config-cb2nhvBt.cjs} +36 -4
  13. package/dist/config-cb2nhvBt.cjs.map +1 -0
  14. package/dist/credentials-C8tjAhTo.js +1 -0
  15. package/dist/credentials-CZK6zPLv.js +62 -0
  16. package/dist/credentials-CZK6zPLv.js.map +1 -0
  17. package/dist/credentials-DDaKqtJn.cjs +113 -0
  18. package/dist/credentials-DDaKqtJn.cjs.map +1 -0
  19. package/dist/index.cjs +702 -208
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.js +697 -207
  22. package/dist/index.js.map +1 -1
  23. package/dist/{output-qFt4vV7K.js → output-CCiHzIPS.js} +173 -129
  24. package/dist/output-CCiHzIPS.js.map +1 -0
  25. package/dist/{output-BnK0scpX.cjs → output-DOC3zu6i.cjs} +141 -66
  26. package/dist/output-DOC3zu6i.cjs.map +1 -0
  27. package/dist/{registry-DER9aRyg.cjs → registry-DTPOQwZN.cjs} +6 -6
  28. package/dist/{registry-DER9aRyg.cjs.map → registry-DTPOQwZN.cjs.map} +1 -1
  29. package/dist/{registry-B7BvdrGE.js → registry-O3AelRfj.js} +2 -2
  30. package/dist/{registry-B7BvdrGE.js.map → registry-O3AelRfj.js.map} +1 -1
  31. package/dist/rolldown-runtime-CPE0t6oh.cjs +53 -0
  32. package/dist/{run-CIvFRMLt.cjs → run--pbGQ3Rm.cjs} +5 -6
  33. package/dist/{run-CIvFRMLt.cjs.map → run--pbGQ3Rm.cjs.map} +1 -1
  34. package/dist/{run-Co732JNO.cjs → run-BehbQsS7.cjs} +5 -6
  35. package/dist/{run-Co732JNO.cjs.map → run-BehbQsS7.cjs.map} +1 -1
  36. package/dist/{run-B1jaQu6Q.js → run-BzoydGZo.js} +2 -3
  37. package/dist/{run-B1jaQu6Q.js.map → run-BzoydGZo.js.map} +1 -1
  38. package/dist/{run-DunTcXOS.js → run-CB3YAq5e.js} +2 -3
  39. package/dist/{run-DunTcXOS.js.map → run-CB3YAq5e.js.map} +1 -1
  40. package/dist/run-CWWSCB8I.js +1 -0
  41. package/dist/{run-DxGkjzRm.cjs → run-CfBk4wgw.cjs} +47 -159
  42. package/dist/run-CfBk4wgw.cjs.map +1 -0
  43. package/dist/{run-DFos0eOY.cjs → run-DIeXldF6.cjs} +16 -18
  44. package/dist/{run-DFos0eOY.cjs.map → run-DIeXldF6.cjs.map} +1 -1
  45. package/dist/{run-QPsBYkq_.js → run-Dut1ksMl.js} +5 -7
  46. package/dist/{run-QPsBYkq_.js.map → run-Dut1ksMl.js.map} +1 -1
  47. package/dist/{run-BRUwQ5Y7.js → run-S-4lnViv.js} +26 -85
  48. package/dist/run-S-4lnViv.js.map +1 -0
  49. package/dist/{snapshot-DUJU70H_.cjs → snapshot-CFyEQsu-.cjs} +17 -26
  50. package/dist/snapshot-CFyEQsu-.cjs.map +1 -0
  51. package/dist/{snapshot-CkpJr-gr.js → snapshot-Cv_SImjr.js} +15 -24
  52. package/dist/snapshot-Cv_SImjr.js.map +1 -0
  53. package/dist/studioWorker.js +2 -2
  54. package/package.json +7 -8
  55. package/dist/Telemetry-C9gmBTr0.cjs +0 -231
  56. package/dist/Telemetry-C9gmBTr0.cjs.map +0 -1
  57. package/dist/Telemetry-CSc7OVsv.js +0 -207
  58. package/dist/Telemetry-CSc7OVsv.js.map +0 -1
  59. package/dist/agent-BPIqnEl2.js +0 -59
  60. package/dist/agent-BPIqnEl2.js.map +0 -1
  61. package/dist/agent-DElUuYuy.cjs +0 -120
  62. package/dist/agent-DElUuYuy.cjs.map +0 -1
  63. package/dist/background-1AFVK_yN.js +0 -1
  64. package/dist/commands-BuY0nrlU.cjs +0 -87
  65. package/dist/commands-BuY0nrlU.cjs.map +0 -1
  66. package/dist/commands-atq2z0Bo.js +0 -81
  67. package/dist/commands-atq2z0Bo.js.map +0 -1
  68. package/dist/config-B6UIKcl1.js +0 -117
  69. package/dist/config-B6UIKcl1.js.map +0 -1
  70. package/dist/config-Bo9ro7vg.cjs +0 -129
  71. package/dist/config-Bo9ro7vg.cjs.map +0 -1
  72. package/dist/constants-Cii4HX64.js +0 -12
  73. package/dist/constants-Cii4HX64.js.map +0 -1
  74. package/dist/constants-Df449N47.cjs +0 -29
  75. package/dist/constants-Df449N47.cjs.map +0 -1
  76. package/dist/errors-BdA8M78q.cjs +0 -43
  77. package/dist/errors-BdA8M78q.cjs.map +0 -1
  78. package/dist/errors-DmC83ALX.js +0 -32
  79. package/dist/errors-DmC83ALX.js.map +0 -1
  80. package/dist/output-BnK0scpX.cjs.map +0 -1
  81. package/dist/output-qFt4vV7K.js.map +0 -1
  82. package/dist/reporters-B4rZOlo8.cjs.map +0 -1
  83. package/dist/reporters-H21Jvrff.js.map +0 -1
  84. package/dist/run-BGTUbY2h.cjs +0 -130
  85. package/dist/run-BGTUbY2h.cjs.map +0 -1
  86. package/dist/run-BPQzGEIs.js +0 -178
  87. package/dist/run-BPQzGEIs.js.map +0 -1
  88. package/dist/run-BRUwQ5Y7.js.map +0 -1
  89. package/dist/run-BYff_byB.js +0 -71
  90. package/dist/run-BYff_byB.js.map +0 -1
  91. package/dist/run-Bhs7mJ1f.cjs +0 -79
  92. package/dist/run-Bhs7mJ1f.cjs.map +0 -1
  93. package/dist/run-CH48n-MJ.js +0 -1
  94. package/dist/run-DfEoWJuy.js +0 -126
  95. package/dist/run-DfEoWJuy.js.map +0 -1
  96. package/dist/run-Dm9OZUkQ.cjs +0 -182
  97. package/dist/run-Dm9OZUkQ.cjs.map +0 -1
  98. package/dist/run-DpAMfkm5.cjs +0 -72
  99. package/dist/run-DpAMfkm5.cjs.map +0 -1
  100. package/dist/run-DxGkjzRm.cjs.map +0 -1
  101. package/dist/run-DxxYCqEo.js +0 -77
  102. package/dist/run-DxxYCqEo.js.map +0 -1
  103. package/dist/snapshot-CkpJr-gr.js.map +0 -1
  104. package/dist/snapshot-DUJU70H_.cjs.map +0 -1
  105. package/dist/utils-BHW8kA8P.js +0 -83
  106. package/dist/utils-BHW8kA8P.js.map +0 -1
  107. package/dist/utils-BzQ46pgd.cjs +0 -109
  108. package/dist/utils-BzQ46pgd.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-CCiHzIPS.js","names":["process","logLevel","logLevelMap","process"],"sources":["../../../internals/shared/src/constants.ts","../../../internals/shared/src/loader.ts","../../../internals/shared/src/config.ts","../src/utils/env.ts","../src/loggers/banner.ts","../src/loggers/createLogger.ts","../src/loggers/clackLogger.ts","../src/loggers/plainLogger.ts","../src/loggers/output.ts"],"sourcesContent":["export const KUBB_CONFIG_FILENAME = 'kubb.config.ts' as const\n\n/** File extensions a Kubb config file may use. */\nexport const CONFIG_EXTENSIONS = ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'] as const\n\nexport const KUBB_PACKAGE_NAME = 'kubb' as const\n\nexport const initDefaults = {\n inputPath: './openapi.yaml',\n outputPath: './src/gen',\n plugins: ['plugin-ts'],\n} as const\n","import { readFile } from 'node:fs/promises'\nimport { createJiti } from 'jiti'\n\n/**\n * jiti options for loading Kubb config modules: the automatic JSX runtime pointed at\n * `@kubb/renderer-jsx`, and `moduleCache` off so a re-load re-evaluates the file.\n */\nconst JITI_OPTIONS = {\n jsx: { runtime: 'automatic', importSource: '@kubb/renderer-jsx' },\n moduleCache: false,\n} satisfies Parameters<typeof createJiti>[1]\n\n/**\n * Plain JavaScript files. jiti hands these to Node's native `import()`, whose module cache never\n * lets go of a file, so `moduleCache: false` alone would keep returning the first version of it.\n */\nconst JAVASCRIPT_EXTENSION = /\\.[cm]?jsx?$/\n\n/**\n * Per-call options for {@link loadModule}.\n */\ntype LoadModuleOptions = {\n /**\n * Return the module's default export instead of the full namespace.\n */\n default?: boolean\n}\n\nconst jiti = createJiti(import.meta.url, JITI_OPTIONS)\n\n/**\n * Loads a Kubb TypeScript or JavaScript config module via jiti.\n *\n * jiti transpiles TypeScript and the `@kubb/renderer-jsx` JSX runtime on the fly. Every load\n * re-evaluates the file, so a config edited on disk is picked up by the next load.\n *\n * @example\n * ```ts\n * const config = await loadModule('/abs/kubb.config.ts', { default: true })\n * ```\n */\nexport async function loadModule<T = unknown>(filePath: string, options?: LoadModuleOptions): Promise<T> {\n if (!JAVASCRIPT_EXTENSION.test(filePath)) {\n return (options?.default ? jiti.import(filePath, { default: true }) : jiti.import(filePath)) as Promise<T>\n }\n\n // Transpiled through jiti instead, so every load re-evaluates the file as it is on disk now.\n // A TypeScript file it imports reloads too. A plain JavaScript file it imports still goes\n // through Node's `import()` and stays cached until the process restarts.\n const mod = (await jiti.evalModule(await readFile(filePath, 'utf8'), { filename: filePath, async: true, forceTranspile: true })) as\n | { default?: unknown }\n | undefined\n return (options?.default ? (mod?.default ?? mod) : mod) as T\n}\n","import { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { CONFIG_EXTENSIONS } from './constants.ts'\nimport { loadModule } from './loader.ts'\n\nconst SEARCH_FILES = ['', '.config/', 'configs/'].flatMap((prefix) => [`${prefix}.kubbrc`, `${prefix}kubb.config`])\n\n/**\n * The first Kubb config file in `cwd` or the nearest parent folder that has one: `.kubbrc` before\n * `kubb.config`, the folder itself before its `.config/` and `configs/`, and {@link CONFIG_EXTENSIONS} in order.\n */\nexport function findConfigFile(cwd: string = process.cwd()): string | undefined {\n for (let dir = resolve(cwd); ; dir = dirname(dir)) {\n const found = SEARCH_FILES.flatMap((file) => CONFIG_EXTENSIONS.map((extension) => join(dir, `${file}${extension}`))).find((file) => existsSync(file))\n if (found || dirname(dir) === dir) return found\n }\n}\n\n/**\n * Loads a Kubb config module, calls it with `cli` when it exports a function, and returns its\n * configs as a list, so a single config and a `defineConfig([...])` array read the same.\n */\nexport async function loadConfigFile<T>(file: string, cli: unknown): Promise<Array<T>> {\n const loaded = await loadModule<unknown>(file, { default: true })\n const resolved = (await (typeof loaded === 'function' ? loaded(cli) : loaded)) as T | Array<T>\n return Array.isArray(resolved) ? resolved : [resolved]\n}\n","import { isCIEnvironment } from '@internals/utils'\nimport { getAgentProfile } from 'gunshi/agent'\n\n/**\n * Returns `true` when the process has an interactive TTY with a valid terminal\n * width and is not running in CI.\n *\n * Some IDE-embedded terminals report `isTTY = true` but set `columns` to `0`,\n * which breaks clack's box-drawing helpers (they call `String.prototype.repeat`\n * with a negative count and throw a `RangeError`). A positive column count is\n * required before the TTY counts as usable.\n *\n * @example\n * ```ts\n * if (canUseTTY()) {\n * renderProgressBar()\n * }\n * ```\n */\nexport function canUseTTY(): boolean {\n return process.stdout.isTTY && (process.stdout.columns ?? 0) > 0 && !isCIEnvironment()\n}\n\n/**\n * Returns `true` when output can carry spinners and clack's gutter: an interactive TTY that no AI\n * coding agent is reading. Cursor-movement escapes are hard for an agent to parse even over a\n * pseudo-TTY, so it gets the plain writer.\n */\nexport function isRichOutput(): boolean {\n return canUseTTY() && !getAgentProfile().isAgent\n}\n","import { styleText } from 'node:util'\nimport { formatMs } from '@internals/utils'\n\n/**\n * Colors for each part of the Kubb mascot illustration.\n */\nconst palette = {\n /**\n * Top cap of the skittle.\n */\n lid: (text: string) => styleText('red', text),\n /**\n * Wood body.\n */\n wood: (text: string) => styleText('yellow', text),\n /**\n * Base wood body.\n */\n woodBase: (text: string) => styleText(['dim', 'yellow'], text),\n /**\n * Eye whites.\n */\n eye: (text: string) => styleText('white', text),\n /**\n * Highlight accent.\n */\n highlight: (text: string) => styleText('gray', text),\n /**\n * Cheek blush.\n */\n blush: (text: string) => styleText('magenta', text),\n}\n\n/**\n * Generates the Kubb mascot welcome banner as an ANSI-colored string.\n *\n * @example\n * ```ts\n * console.log(getIntro({ title: 'kubb.config.ts', description: 'generating…', version: '5.0.0', areEyesOpen: true }))\n * ```\n */\nexport function getIntro({\n title,\n description,\n version,\n areEyesOpen,\n}: {\n /**\n * Name of the active configuration or tool being started.\n */\n title: string\n /**\n * Short subtitle shown next to the arrow prompt.\n */\n description: string\n /**\n * Kubb version string rendered in the header.\n */\n version: string\n /**\n * When `false` the eyes are shown as closed dashes instead of open blocks.\n */\n areEyesOpen: boolean\n}): string {\n const kubbVersion = styleText(['bold', 'yellow'], `KUBB v${version}`)\n\n const eyeTop = areEyesOpen ? palette.eye('█▀█') : palette.eye('───')\n const eyeBottom = areEyesOpen ? palette.eye('▀▀▀') : palette.eye('───')\n\n return [\n ` ${palette.lid('▄▄▄▄▄▄▄▄▄▄▄▄▄')}`,\n ` ${palette.wood('█ ')}${palette.highlight('▄▄')}${palette.wood(' ')}${palette.highlight('▄▄')}${palette.wood(' █')} ${kubbVersion}`,\n ` ${palette.wood('█ ')}${eyeTop}${palette.wood(' ')}${eyeTop}${palette.wood(' █')} ${styleText('gray', title)}`,\n ` ${palette.wood('█ ')}${eyeBottom}${palette.wood(' ')}${palette.blush('◡')}${palette.wood(' ')}${eyeBottom}${palette.wood(' █')} ${styleText('yellow', '➜')} ${styleText('white', description)}`,\n ` ${palette.woodBase('▀▀▀▀▀▀▀▀▀▀▀▀▀')}`,\n ].join('\\n')\n}\n\n/**\n * Formats a millisecond duration with a threshold-based ANSI color.\n * `≤ 500 ms` → green · `≤ 1 000 ms` → yellow · `> 1 000 ms` → red.\n *\n * @example\n * ```ts\n * formatMsWithColor(200) // '\\x1b[32m200ms\\x1b[39m'\n * formatMsWithColor(800) // '\\x1b[33m800ms\\x1b[39m'\n * formatMsWithColor(1500) // '\\x1b[31m1.50s\\x1b[39m'\n * ```\n */\nexport function formatMsWithColor(ms: number): string {\n const formatted = formatMs(ms)\n if (ms <= 500) return styleText('green', formatted)\n if (ms <= 1000) return styleText('yellow', formatted)\n\n return styleText('red', formatted)\n}\n","import { relative } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport type { Config } from '@kubb/core'\nimport { Diagnostics, logLevel as logLevelMap } from '@kubb/core'\nimport type { StudioConnectedContext } from '@kubb/studio'\nimport { formatMsWithColor } from './banner.ts'\nimport type { Logger, LoggerWriter, LogStatus, WriterProgress, WriterSpinner } from './defineLogger.ts'\n\n/** Display path for a config's input: the string form, or its `path` field when the input is an object. */\nfunction getInputPath(config: Config): string | undefined {\n const { input } = config\n if (typeof input === 'string') return input\n return typeof input?.path === 'string' ? input.path : undefined\n}\n\n/** Counts a noun, so a message never reads `1 files`. */\nexport function pluralize(count: number, noun: string): string {\n return `${count} ${count === 1 ? noun : `${noun}s`}`\n}\n\n/** Prefixes a `[HH:MM:SS]` timestamp at verbose and above. */\nfunction formatMessage(message: string, logLevel: number): string {\n if (logLevel >= logLevelMap.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 return `${styleText('dim', `[${timestamp}]`)} ${message}`\n }\n return message\n}\n\n/**\n * Renders a `studio:connected` event's versions: the runtime only when it differs from the host.\n */\nfunction formatVersions({ studio, kubb, agent }: StudioConnectedContext['versions']): string {\n return [`v${agent}`, kubb !== agent ? `runtime v${kubb}` : undefined, `Studio v${studio}`].filter(Boolean).join(', ')\n}\n\n/** The first three frames of a stack, without the message line. */\nfunction topFrames(stack: string): Array<string> {\n return stack\n .split('\\n')\n .slice(1, 4)\n .map((frame) => frame.trim())\n}\n\n/** First stack frames for verbose error output, including an optional `cause` chain. */\nfunction formatErrorFrames(error: Error): { frames: Array<string>; cause?: { header: string; frames: Array<string> } } | null {\n if (!error.stack) {\n return null\n }\n\n const frames = topFrames(error.stack)\n const caused = error.cause instanceof Error ? error.cause : undefined\n\n if (!caused?.stack) {\n return { frames }\n }\n\n return {\n frames,\n cause: {\n header: `└─ caused by ${caused.message}`,\n frames: topFrames(caused.stack),\n },\n }\n}\n\ntype ProgressState = {\n totalPlugins: number\n completedPlugins: number\n failedPlugins: number\n totalFiles: number\n processedFiles: number\n /** `process.hrtime()` snapshot taken at the start of generation, for the elapsed time. */\n hrStart: [number, number]\n}\n\n/** The progress summary line the clack logger shows, `null` when there is nothing to display. */\nfunction buildProgressLine(state: ProgressState): string | null {\n const parts: Array<string> = []\n const duration = formatMs(getElapsedMs(state.hrStart))\n\n if (state.totalPlugins > 0) {\n const pluginStr =\n state.failedPlugins > 0\n ? `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins} ${styleText('red', `(${state.failedPlugins} failed)`)}`\n : `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins}`\n parts.push(pluginStr)\n }\n\n if (state.totalFiles > 0) {\n parts.push(`Files ${styleText('green', state.processedFiles.toString())}/${state.totalFiles}`)\n }\n\n if (parts.length === 0) {\n return null\n }\n\n parts.push(`${styleText('green', duration)} elapsed`)\n return parts.join(styleText('dim', ' | '))\n}\n\nfunction createProgressCounters(): ProgressState {\n return {\n totalPlugins: 0,\n completedPlugins: 0,\n failedPlugins: 0,\n totalFiles: 0,\n processedFiles: 0,\n hrStart: process.hrtime(),\n }\n}\n\n/**\n * One output phase while its step owns the line. A phase buffers what it is told, because a spinner\n * redraws over anything written under it, and prints the lot once it knows its own result.\n */\ntype Phase = {\n successLabel: string\n failureLabel: string\n /**\n * Whether each hook's own result is worth a line. Format and lint run one command, so the phase\n * result already says everything; the post-generate phase runs several.\n */\n showHookResults: boolean\n failed: boolean\n hrStart: [number, number]\n lines: Array<string>\n /**\n * Raw lines a hook printed, drawn outside the group.\n */\n output: Array<string>\n}\n\ntype StartPhaseOptions = {\n /**\n * Shown while the phase runs.\n */\n running: string\n success: string\n failure: string\n showHookResults?: boolean\n}\n\n/**\n * The three output phases, in the order the generate runner runs them.\n */\nconst PHASES = {\n format: { running: 'Formatting', success: 'Formatted', failure: 'Formatting failed' },\n lint: { running: 'Linting', success: 'Linted', failure: 'Linting failed' },\n hooks: {\n running: 'Running post-generate hooks',\n success: 'Post-generate hooks completed',\n failure: 'Post-generate hooks failed',\n showHookResults: true,\n },\n} as const satisfies Record<string, StartPhaseOptions>\n\n/**\n * Drops the blank lines a subprocess leaves at either end of its output, so its block does not open\n * or close on an empty row.\n */\nfunction trimBlankEdges(lines: ReadonlyArray<string>): Array<string> {\n const start = lines.findIndex((line) => line.trim())\n if (start === -1) {\n return []\n }\n\n return lines.slice(start, lines.findLastIndex((line) => line.trim()) + 1)\n}\n\n/**\n * Wires a {@link LoggerWriter} onto the run's hooks. This owns what a run says and in what order:\n * one group per config, a step over the plugin work, a progress bar for the writes, one step per\n * output phase, then the summary and the group's closing result. The writer only decides how each\n * line looks, so every logger reports the same run the same way.\n *\n * @example\n * ```ts\n * export const plainLogger = createLogger(writer)\n * ```\n */\nexport function createLogger(writer: LoggerWriter): Logger {\n return function install(context, { logLevel }) {\n const silent = logLevel <= logLevelMap.silent\n const state = {\n ...createProgressCounters(),\n spinner: null as WriterSpinner | null,\n progress: null as WriterProgress | null,\n hooks: new Map<string, { hrStart: [number, number]; lines: Array<string> }>(),\n /**\n * Plugin results held back while the generation step owns the line.\n */\n pluginLines: [] as Array<string>,\n phase: null as Phase | null,\n groupOpen: false,\n /**\n * Whether this run keeps its files in memory, as a `kubb studio` run without `--allow-write` does.\n */\n inMemory: false,\n }\n\n function text(message: string): string {\n return formatMessage(message, logLevel)\n }\n\n function startSpinner(message: string) {\n if (silent) {\n return\n }\n\n state.spinner = writer.spinner()\n state.spinner.start(text(message))\n }\n\n function stopSpinner(message?: string, status: LogStatus = 'success') {\n const spinner = state.spinner\n if (!spinner) {\n return\n }\n state.spinner = null\n\n if (message === undefined) {\n spinner.clear()\n return\n }\n if (status === 'failed') {\n spinner.error(text(message))\n return\n }\n spinner.stop(text(message))\n }\n\n function stopProgress(message?: string) {\n const progress = state.progress\n if (!progress) {\n return\n }\n state.progress = null\n progress.stop(message === undefined ? '' : text(message))\n }\n\n function startPhase({ running, success, failure, showHookResults = false }: StartPhaseOptions) {\n state.phase = { successLabel: success, failureLabel: failure, showHookResults, failed: false, hrStart: process.hrtime(), lines: [], output: [] }\n startSpinner(running)\n }\n\n function endPhase() {\n const phase = state.phase\n state.phase = null\n\n if (!phase || silent) {\n return\n }\n\n const duration = formatMsWithColor(getElapsedMs(phase.hrStart))\n\n stopSpinner(phase.failed ? `${phase.failureLabel} after ${duration}` : `${phase.successLabel} in ${duration}`, phase.failed ? 'failed' : 'success')\n\n if (phase.lines.length) {\n writer.block(phase.lines)\n }\n writeOutput(phase.output)\n }\n\n function writeOutput(lines: ReadonlyArray<string>) {\n const output = trimBlankEdges(lines)\n if (output.length) {\n writer.raw(output)\n }\n }\n\n // A run that throws before `kubb:generation:end` never reaches the summary, so the lifecycle\n // end calls this too rather than leave a group without its closing line.\n function closeGroup(status: LogStatus) {\n if (!state.groupOpen) {\n return\n }\n state.groupOpen = false\n\n stopSpinner()\n stopProgress()\n writer.groupEnd(status === 'failed' ? styleText('red', '✗ Generation failed') : styleText('green', '✓ Generation succeeded'))\n }\n\n function reset() {\n stopSpinner()\n stopProgress()\n Object.assign(state, createProgressCounters())\n state.hooks.clear()\n state.pluginLines = []\n state.phase = null\n state.groupOpen = false\n }\n\n function writeErrorFrames(error: Error) {\n const frames = logLevel >= logLevelMap.verbose ? formatErrorFrames(error) : null\n if (!frames) {\n return\n }\n\n writer.block(frames.frames.map((frame) => text(styleText('dim', frame))))\n if (frames.cause) {\n writer.block([styleText('dim', frames.cause.header), ...frames.cause.frames.map((frame) => text(` ${styleText('dim', frame)}`))])\n }\n }\n\n function formatLine(symbol: string, message: string, info?: string): string {\n return text([symbol, message, info && styleText('dim', info)].filter(Boolean).join(' '))\n }\n\n context.hook('kubb:warn', ({ message, info }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n\n writer.warn(formatLine(styleText('yellow', '⚠'), message, logLevel >= logLevelMap.info ? info : undefined))\n })\n\n // Unguarded: a failure stays visible even at silent.\n context.hook('kubb:error', ({ error }) => {\n if (state.phase) {\n state.phase.failed = true\n }\n\n // The writer draws the error symbol, so the message goes in bare.\n if (state.spinner) {\n stopSpinner(error.message, 'failed')\n } else {\n writer.error(text(error.message))\n }\n\n writeErrorFrames(error)\n })\n\n context.hook('kubb:diagnostic', ({ diagnostic }) => {\n // Silent still surfaces errors so failures stay visible. It drops warnings and info.\n if (silent && diagnostic.severity !== 'error') {\n return\n }\n\n stopSpinner()\n stopProgress()\n\n if (Diagnostics.isUpdate(diagnostic)) {\n writer.update(\n [`\\`v${diagnostic.currentVersion}\\` → \\`v${diagnostic.latestVersion}\\``, 'Run `npm install -g @kubb/cli` to update'],\n 'Update available for `Kubb`',\n )\n return\n }\n\n const { headline, details } = Diagnostics.format(diagnostic)\n writer.diagnostic([headline, ...details])\n // The stack of a crash is what its maintainers need in a bug report.\n if (Diagnostics.isProblem(diagnostic) && diagnostic.cause) {\n writeErrorFrames(diagnostic.cause)\n }\n })\n\n // A `kubb studio` session emits these on the same emitter as its generations, so one logger\n // renders the whole command.\n context.hook('studio:disconnected', ({ code, reason }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n\n stopSpinner()\n // 4002 is `AgentCloseCode.SUPERSEDED`, spelled out because `@kubb/studio` is an optional peer.\n if (code === 4002) {\n writer.warn(text('⚠ Another process connected to Kubb Studio as this agent, so this one stopped'))\n return\n }\n writer.warn(text(`⚠ Kubb Studio ended the session (${reason || `code ${code}`})`))\n })\n\n context.hook('studio:warn', ({ message, permission }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n const remedy = permission ? `; pass --${permission.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)} to allow it` : ''\n writer.warn(text(`⚠ ${message}${remedy}`))\n })\n\n // Unguarded, like `kubb:error`: a failure stays visible even at silent.\n context.hook('studio:error', ({ error }) => {\n if (state.spinner) {\n stopSpinner(error.message, 'failed')\n return\n }\n writer.error(text(error.message))\n })\n\n context.hook('kubb:lifecycle:start', () => {\n reset()\n })\n\n context.hook('kubb:generation:start', ({ config }) => {\n closeGroup('failed')\n reset()\n\n state.totalPlugins = config.plugins?.length ?? 0\n state.inMemory = config.storage?.name === 'memory'\n\n if (silent) {\n return\n }\n\n const inputPath = getInputPath(config)\n\n writer.group(text([styleText('bold', config.name ?? 'kubb'), inputPath ? styleText('dim', inputPath) : undefined].filter(Boolean).join(' ')))\n state.groupOpen = true\n\n startSpinner('Generating')\n })\n\n context.hook('kubb:format:start', () => startPhase(PHASES.format))\n context.hook('kubb:format:end', endPhase)\n context.hook('kubb:lint:start', () => startPhase(PHASES.lint))\n context.hook('kubb:lint:end', endPhase)\n context.hook('kubb:hooks:start', () => startPhase(PHASES.hooks))\n context.hook('kubb:hooks:end', endPhase)\n\n context.hook('kubb:hook:end', (ctx) => {\n const { id, command, name, args, success, error } = ctx\n if (!id) {\n return\n }\n\n if (!success && state.phase) {\n state.phase.failed = true\n }\n\n if (silent) {\n // Even when silent, surface a failed hook's captured output.\n if (!ctx.success) {\n if (ctx.stdout) console.log(ctx.stdout)\n if (ctx.stderr) console.error(ctx.stderr)\n }\n return\n }\n\n const active = state.hooks.get(id)\n if (!active) {\n return\n }\n state.hooks.delete(id)\n\n const label = styleText('dim', name ?? (args?.length ? `${command} ${args.join(' ')}` : command))\n const reason = error?.message ? ` (${error.message})` : ''\n const result = success\n ? `${styleText('green', '✓')} ${label} in ${formatMsWithColor(getElapsedMs(active.hrStart))}`\n : `${styleText('red', '✗')} ${label} failed${reason}`\n\n const phase = state.phase\n if (phase) {\n if (phase.showHookResults || !success) {\n phase.lines.push(result)\n }\n phase.output.push(...active.lines)\n return\n }\n\n stopSpinner()\n writer.step(text(result))\n writeOutput(active.lines)\n })\n\n context.hook('kubb:generation:end', () => {\n stopSpinner()\n stopProgress()\n })\n\n context.hook('kubb:lifecycle:end', () => {\n closeGroup('failed')\n reset()\n })\n\n // Not registered at silent: the missing `kubb:hook:line` listener is also what tells the runner not to stream.\n if (!silent) {\n context.hook('kubb:info', ({ message, info }) => {\n const line = formatLine(styleText('blue', 'ℹ'), message, info)\n\n // Info carries something new (the auto-detected tool), so inside a phase it waits for the phase to print.\n if (state.phase) {\n state.phase.lines.push(line)\n return\n }\n if (state.spinner) {\n state.spinner.message(line)\n return\n }\n writer.info(line)\n })\n\n context.hook('kubb:success', ({ message, info }) => {\n const line = formatLine(styleText('green', '✓'), message, logLevel >= logLevelMap.info ? info : undefined)\n\n // The phase step's own result already reports these successes, so let the step carry them.\n if (state.spinner) {\n state.spinner.message(line)\n return\n }\n writer.success(line)\n })\n\n context.hook('studio:connected', ({ url, versions }) => {\n stopSpinner()\n writer.success(text(`✓ Connected to ${styleText('cyan', url)} ${styleText('dim', `(${formatVersions(versions)})`)}`))\n startSpinner('✓ Ready to receive jobs')\n })\n\n context.hook('studio:command', ({ command, info }) => {\n stopSpinner()\n writer.success(text(`✓ Finished ${command} ${styleText('dim', `(${info})`)}`))\n startSpinner('✓ Ready to receive jobs')\n })\n\n context.hook('studio:reconnecting', ({ delayMs }) => {\n stopSpinner()\n writer.info(text(styleText('dim', `Retrying connection to Kubb Studio in ${formatMs(delayMs)}`)))\n })\n\n context.hook('kubb:plugin:start', ({ plugin }) => {\n state.spinner?.message(text(`Generating ${styleText('dim', plugin.name)}`))\n })\n\n // Buffered, not printed: a step redraws over anything written while it runs.\n context.hook('kubb:plugin:end', ({ plugin, duration, success }) => {\n if (success) {\n state.completedPlugins++\n }\n if (!success) {\n state.failedPlugins++\n }\n state.pluginLines.push(text(`${plugin.name} ${success ? 'completed' : 'failed'} in ${formatMsWithColor(duration)}`))\n })\n\n context.hook('kubb:plugins:end', () => {\n const failed = state.failedPlugins > 0\n stopSpinner(buildProgressLine(state) ?? 'No plugins ran', failed ? 'failed' : 'success')\n\n if (state.pluginLines.length) {\n writer.block(state.pluginLines)\n state.pluginLines = []\n }\n })\n\n context.hook('kubb:files:processing:start', ({ files }) => {\n stopSpinner()\n state.totalFiles = files.length\n state.processedFiles = 0\n\n state.progress = writer.progress(files.length)\n state.progress.start(text(`${state.inMemory ? 'Generating' : 'Writing'} ${pluralize(files.length, 'file')}`))\n })\n\n context.hook('kubb:files:processing:update', ({ files }) => {\n for (const { file, config } of files) {\n state.processedFiles++\n state.progress?.advance(`${state.inMemory ? 'Generating' : 'Writing'} ${relative(config.root, file.path)}`)\n }\n })\n\n context.hook('kubb:files:processing:end', () => {\n stopProgress(state.inMemory ? `Generated ${pluralize(state.processedFiles, 'file')} in memory` : `Wrote ${pluralize(state.processedFiles, 'file')}`)\n })\n\n context.hook('kubb:hook:start', ({ id }) => {\n if (!id) {\n return\n }\n state.hooks.set(id, { hrStart: process.hrtime(), lines: [] })\n })\n\n context.hook('kubb:hook:line', ({ id, line }) => {\n const active = state.hooks.get(id)\n if (!active) {\n return\n }\n\n // A phase step redraws its own line, so its output waits until the phase ends.\n if (state.phase) {\n active.lines.push(line)\n return\n }\n writer.raw([line])\n })\n }\n\n return {\n renderSummary(lines, { status }) {\n if (silent || !state.groupOpen) {\n return\n }\n\n closeGroup(status)\n writer.diagnostic([...lines])\n },\n }\n }\n}\n","import { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { createLogger } from './createLogger.ts'\nimport type { Logger, LoggerWriter } from './defineLogger.ts'\n\n/**\n * Draws with clack: a gutter bar per group, animated steps, and a progress bar for the writes.\n */\nexport const clackWriter: LoggerWriter = {\n group: (title) => clack.intro(title),\n groupEnd: (text) => clack.outro(text),\n step: (text) => clack.log.step(text, { spacing: 0 }),\n info: (text) => clack.log.info(text),\n success: (text) => clack.log.success(text),\n warn: (text) => clack.log.warn(text),\n error: (text) => clack.log.error(text),\n block: (lines) => clack.log.message(lines, { spacing: 0 }),\n // A subprocess's output is not Kubb's tree, so it goes out past clack and its gutter bar. The\n // step above it is already stopped by the time this runs.\n raw: (lines) => console.log(styleText('dim', lines.join('\\n'))),\n // The diagnostic carries its own code and indented rows, so clear clack's gutter and bar and let\n // the block stand on its own.\n diagnostic: (lines) => clack.log.message(lines, { symbol: '', secondarySymbol: '' }),\n update: (lines, title) =>\n clack.box(lines.join('\\n'), title, {\n width: 'auto',\n formatBorder: (border: string) => styleText('yellow', border),\n rounded: true,\n withGuide: false,\n contentAlign: 'center',\n titleAlign: 'center',\n }),\n spinner: () => clack.spinner(),\n progress(max) {\n const bar = clack.progress({ style: 'block', max, size: 30 })\n\n return {\n start: (text) => bar.start(text),\n advance: (text) => bar.advance(1, text),\n stop: (text) => bar.stop(text),\n }\n },\n}\n\n/**\n * TTY logger for local development, with animated steps and progress bars.\n */\nexport const clackLogger: Logger = createLogger(clackWriter)\n","import { createLogger } from './createLogger.ts'\nimport type { Logger, LoggerWriter } from './defineLogger.ts'\n\n/**\n * Prefixes that stand in for the symbols clack draws, so plain output reads the same way.\n */\nexport const SYMBOLS = { info: 'ℹ', warn: '⚠', error: '✗', step: '◇' } as const\n\n/** Draws with one `write` call per line. Nothing animates, so a step prints at start and end. */\nfunction createWriter(write: (line: string) => void): LoggerWriter {\n return {\n group: write,\n groupEnd: write,\n step: (text) => write(`${SYMBOLS.step} ${text}`),\n info: write,\n success: write,\n warn: write,\n error: (text) => write(`${SYMBOLS.error} ${text}`),\n block: (lines) => write(lines.join('\\n')),\n raw: (lines) => write(lines.join('\\n')),\n diagnostic: (lines) => write(lines.join('\\n')),\n update: (lines, title) => write([title, ...lines].join('\\n')),\n spinner: () => ({\n start: write,\n message: write,\n clear: () => {},\n stop: (text) => text && write(text),\n error: (text) => write(`${SYMBOLS.error} ${text}`),\n }),\n progress: () => ({\n start: write,\n advance: write,\n stop: (text) => text && write(text),\n }),\n }\n}\n\n/** The plain logger writing through `write`, e.g. `console.error` so stdout carries only JSON. */\nexport function createPlainLogger(write: (line: string) => void): Logger {\n return createLogger(createWriter(write))\n}\n\n/** Draws on the console, for non-TTY environments and for an AI coding agent reading the output. */\nexport const plainWriter = createWriter((line) => console.log(line))\n\n/**\n * Console adapter for non-TTY environments, and for an AI coding agent reading the output. Reports\n * the same run in the same order as `clackLogger`, without the animation.\n */\nexport const plainLogger = createLogger(plainWriter)\n","import { styleText } from 'node:util'\nimport * as prompts from '@clack/prompts'\nimport { isRichOutput } from '../utils/env.ts'\nimport { getIntro } from './banner.ts'\nimport { clackWriter } from './clackLogger.ts'\nimport type { LoggerWriter, WriterSpinner } from './defineLogger.ts'\nimport { plainWriter, SYMBOLS } from './plainLogger.ts'\n\nconst SPONSOR_TIPS = [\n 'Your sponsorship keeps Kubb codegen, plugins, and docs maintained',\n 'Sponsor faster generators and better Kubb Studio workflows',\n 'Help keep Kubb free for TypeScript teams building APIs',\n 'Support React Query, Zod, Faker, and MSW integrations',\n 'Back open-source tools that turn OpenAPI into TypeScript',\n 'Sponsor fixes, releases, and new plugins for your API workflow',\n 'Help Kubb stay independent and focused on developer tools',\n] as const\n\nconst SPONSOR_LINKS = ['https://github.com/sponsors/stijnvanhulle', 'https://opencollective.com/kubb', 'https://kubb.dev/sponsors'] as const\n\n/** The writer the loggers draw with on this terminal, so a command's own lines look like its run. */\nfunction writer(): LoggerWriter {\n return isRichOutput() ? clackWriter : plainWriter\n}\n\nfunction nextTip(): string {\n const tip = SPONSOR_TIPS[Math.floor(Math.random() * SPONSOR_TIPS.length)]!\n const link = SPONSOR_LINKS[Math.floor(Math.random() * SPONSOR_LINKS.length)]!\n return `${tip}: ${link}`\n}\n\nfunction formatTip(tip: string): string {\n return styleText('magenta', ' Tip ') + styleText('yellow', tip)\n}\n\n/**\n * Prints one random tip outside every group. Rich terminals get the styled variant;\n * plain/CI output gets a stable text-only line so the tip is still visible as final output.\n */\nexport function logTip(): void {\n const tip = nextTip()\n if (!isRichOutput()) {\n console.log(`Tip: ${tip}`)\n return\n }\n\n console.log(`${styleText('magenta', '✦')}${formatTip(tip)}`)\n}\n\ntype Level = keyof typeof SYMBOLS\n\n// Not through the writers: in plain output a command's own info and warning carry their symbol, and clack's step keeps its spacing.\nfunction write(level: Level, message: string): void {\n if (isRichOutput()) {\n prompts.log[level](message)\n\n return\n }\n\n console.log(`${SYMBOLS[level]} ${message}`)\n}\n\ntype IntroOptions = {\n title?: string\n /**\n * Printed under the title, for a command that has a caveat to lead with.\n */\n warning?: string\n /**\n * Whether to open a block a later {@link logOutro} closes. Pass `false` for a command that\n * prints and exits, since nothing would ever close the block.\n *\n * @default true\n */\n block?: boolean\n}\n\n/**\n * Opens a command's output with its title.\n */\nexport function logIntro({ title, warning, block = true }: IntroOptions): void {\n if (block && isRichOutput()) {\n if (title) {\n prompts.intro(title)\n }\n\n if (warning) {\n prompts.log.warn(warning)\n }\n\n return\n }\n\n if (title) {\n console.log(title)\n }\n\n if (warning) {\n console.warn(warning)\n }\n\n if (title || warning) {\n console.log()\n }\n}\n\n/**\n * Closes the block {@link logIntro} opened. The closing gutter is not a written line, so plain\n * output prints the text on its own.\n */\nexport function logOutro(text: string): void {\n writer().groupEnd(text)\n}\n\n/**\n * Prints one empty line between two groups, without clack's gutter bar, since the bar belongs to a\n * group and a spacer sits outside every one.\n */\nexport function logSpacer(): void {\n console.log('')\n}\n\n/**\n * Opens the command with the Kubb mascot and version, or a single version line where the terminal\n * cannot draw it.\n */\nexport function logBanner(version: string): void {\n if (isRichOutput()) {\n console.log(`\\n${getIntro({ title: 'Turn your API spec into type-safe code', description: 'Ready to start', version, areEyesOpen: true })}\\n`)\n\n return\n }\n\n console.log(`Kubb CLI v${version}`)\n}\n\n/** Prints lines as one block, without a symbol in front of them. Not the writer's block, which drops clack's spacing around it. */\nexport function logBlock(lines: string | Array<string>): void {\n if (isRichOutput()) {\n prompts.log.message(lines)\n\n return\n }\n\n console.log([lines].flat().join('\\n'))\n}\n\nexport function logInfo(message: string): void {\n write('info', message)\n}\n\nexport function logWarn(message: string): void {\n write('warn', message)\n}\n\nexport function logError(message: string): void {\n write('error', message)\n}\n\n/**\n * Reports a step the command is taking, rather than something it found.\n */\nexport function logStep(message: string): void {\n write('step', message)\n}\n\n/**\n * A progress spinner, or a writer that prints each message it is given when the terminal cannot\n * animate one. Callers drive both the same way, including the failure state.\n */\nexport function createSpinner(): WriterSpinner {\n return writer().spinner()\n}\n"],"mappings":"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"}
@@ -1,11 +1,99 @@
1
- const require_agent = require("./agent-DElUuYuy.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-CPE0t6oh.cjs");
2
+ const require_Telemetry = require("./Telemetry-iUSXePwR.cjs");
2
3
  let node_util = require("node:util");
3
4
  let node_process = require("node:process");
4
- node_process = require_agent.__toESM(node_process, 1);
5
+ node_process = require_rolldown_runtime.__toESM(node_process, 1);
6
+ let node_fs_promises = require("node:fs/promises");
5
7
  let node_path = require("node:path");
8
+ let gunshi_agent = require("gunshi/agent");
6
9
  let _clack_prompts = require("@clack/prompts");
7
- _clack_prompts = require_agent.__toESM(_clack_prompts, 1);
10
+ _clack_prompts = require_rolldown_runtime.__toESM(_clack_prompts, 1);
11
+ let node_fs = require("node:fs");
12
+ let jiti = require("jiti");
8
13
  let _kubb_core = require("@kubb/core");
14
+ //#region ../../internals/shared/src/constants.ts
15
+ const KUBB_CONFIG_FILENAME = "kubb.config.ts";
16
+ /** File extensions a Kubb config file may use. */
17
+ const CONFIG_EXTENSIONS = [
18
+ ".ts",
19
+ ".mts",
20
+ ".cts",
21
+ ".js",
22
+ ".mjs",
23
+ ".cjs"
24
+ ];
25
+ const KUBB_PACKAGE_NAME = "kubb";
26
+ const initDefaults = {
27
+ inputPath: "./openapi.yaml",
28
+ outputPath: "./src/gen",
29
+ plugins: ["plugin-ts"]
30
+ };
31
+ //#endregion
32
+ //#region ../../internals/shared/src/loader.ts
33
+ /**
34
+ * jiti options for loading Kubb config modules: the automatic JSX runtime pointed at
35
+ * `@kubb/renderer-jsx`, and `moduleCache` off so a re-load re-evaluates the file.
36
+ */
37
+ const JITI_OPTIONS = {
38
+ jsx: {
39
+ runtime: "automatic",
40
+ importSource: "@kubb/renderer-jsx"
41
+ },
42
+ moduleCache: false
43
+ };
44
+ /**
45
+ * Plain JavaScript files. jiti hands these to Node's native `import()`, whose module cache never
46
+ * lets go of a file, so `moduleCache: false` alone would keep returning the first version of it.
47
+ */
48
+ const JAVASCRIPT_EXTENSION = /\.[cm]?jsx?$/;
49
+ const jiti$1 = (0, jiti.createJiti)(require("url").pathToFileURL(__filename).href, JITI_OPTIONS);
50
+ /**
51
+ * Loads a Kubb TypeScript or JavaScript config module via jiti.
52
+ *
53
+ * jiti transpiles TypeScript and the `@kubb/renderer-jsx` JSX runtime on the fly. Every load
54
+ * re-evaluates the file, so a config edited on disk is picked up by the next load.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const config = await loadModule('/abs/kubb.config.ts', { default: true })
59
+ * ```
60
+ */
61
+ async function loadModule(filePath, options) {
62
+ if (!JAVASCRIPT_EXTENSION.test(filePath)) return options?.default ? jiti$1.import(filePath, { default: true }) : jiti$1.import(filePath);
63
+ const mod = await jiti$1.evalModule(await (0, node_fs_promises.readFile)(filePath, "utf8"), {
64
+ filename: filePath,
65
+ async: true,
66
+ forceTranspile: true
67
+ });
68
+ return options?.default ? mod?.default ?? mod : mod;
69
+ }
70
+ //#endregion
71
+ //#region ../../internals/shared/src/config.ts
72
+ const SEARCH_FILES = [
73
+ "",
74
+ ".config/",
75
+ "configs/"
76
+ ].flatMap((prefix) => [`${prefix}.kubbrc`, `${prefix}kubb.config`]);
77
+ /**
78
+ * The first Kubb config file in `cwd` or the nearest parent folder that has one: `.kubbrc` before
79
+ * `kubb.config`, the folder itself before its `.config/` and `configs/`, and {@link CONFIG_EXTENSIONS} in order.
80
+ */
81
+ function findConfigFile(cwd = node_process.default.cwd()) {
82
+ for (let dir = (0, node_path.resolve)(cwd);; dir = (0, node_path.dirname)(dir)) {
83
+ const found = SEARCH_FILES.flatMap((file) => CONFIG_EXTENSIONS.map((extension) => (0, node_path.join)(dir, `${file}${extension}`))).find((file) => (0, node_fs.existsSync)(file));
84
+ if (found || (0, node_path.dirname)(dir) === dir) return found;
85
+ }
86
+ }
87
+ /**
88
+ * Loads a Kubb config module, calls it with `cli` when it exports a function, and returns its
89
+ * configs as a list, so a single config and a `defineConfig([...])` array read the same.
90
+ */
91
+ async function loadConfigFile(file, cli) {
92
+ const loaded = await loadModule(file, { default: true });
93
+ const resolved = await (typeof loaded === "function" ? loaded(cli) : loaded);
94
+ return Array.isArray(resolved) ? resolved : [resolved];
95
+ }
96
+ //#endregion
9
97
  //#region src/utils/env.ts
10
98
  /**
11
99
  * Returns `true` when the process has an interactive TTY with a valid terminal
@@ -24,7 +112,7 @@ let _kubb_core = require("@kubb/core");
24
112
  * ```
25
113
  */
26
114
  function canUseTTY() {
27
- return process.stdout.isTTY && (process.stdout.columns ?? 0) > 0 && !require_agent.isCIEnvironment();
115
+ return process.stdout.isTTY && (process.stdout.columns ?? 0) > 0 && !require_Telemetry.isCIEnvironment();
28
116
  }
29
117
  /**
30
118
  * Returns `true` when output can carry spinners and clack's gutter: an interactive TTY that no AI
@@ -32,77 +120,38 @@ function canUseTTY() {
32
120
  * pseudo-TTY, so it gets the plain writer.
33
121
  */
34
122
  function isRichOutput() {
35
- return canUseTTY() && !require_agent.getAgentName();
123
+ return canUseTTY() && !(0, gunshi_agent.getAgentProfile)().isAgent;
36
124
  }
37
125
  //#endregion
38
126
  //#region src/loggers/banner.ts
39
127
  /**
40
- * Parses a CSS hex color string (`#RGB`) into its RGB channels.
41
- * Falls back to `255` for any channel that cannot be parsed.
42
- */
43
- function parseHex(color) {
44
- const int = Number.parseInt(color.replace("#", ""), 16);
45
- return Number.isNaN(int) ? {
46
- r: 255,
47
- g: 255,
48
- b: 255
49
- } : {
50
- r: int >> 16 & 255,
51
- g: int >> 8 & 255,
52
- b: int & 255
53
- };
54
- }
55
- /**
56
- * Returns a function that wraps a string in a 24-bit ANSI true-color escape sequence
57
- * for the given hex color.
58
- */
59
- function hex(color) {
60
- const { r, g, b } = parseHex(color);
61
- return (text) => `\x1b[38;2;${r};${g};${b}m${text}\x1b[0m`;
62
- }
63
- function gradient(colorStops, text) {
64
- const chars = text.split("");
65
- return chars.map((char, i) => {
66
- const t = chars.length <= 1 ? 0 : i / (chars.length - 1);
67
- const seg = Math.min(Math.floor(t * (colorStops.length - 1)), colorStops.length - 2);
68
- const lt = t * (colorStops.length - 1) - seg;
69
- const from = parseHex(colorStops[seg]);
70
- const to = parseHex(colorStops[seg + 1]);
71
- return `\x1b[38;2;${Math.round(from.r + (to.r - from.r) * lt)};${Math.round(from.g + (to.g - from.g) * lt)};${Math.round(from.b + (to.b - from.b) * lt)}m${char}\x1b[0m`;
72
- }).join("");
73
- }
74
- /**
75
- * ANSI color functions for each part of the Kubb mascot illustration.
128
+ * Colors for each part of the Kubb mascot illustration.
76
129
  */
77
130
  const palette = {
78
131
  /**
79
132
  * Top cap of the skittle.
80
133
  */
81
- lid: hex("#F55A17"),
82
- /**
83
- * Upper wood body.
84
- */
85
- woodTop: hex("#F5A217"),
134
+ lid: (text) => (0, node_util.styleText)("red", text),
86
135
  /**
87
- * Middle wood body.
136
+ * Wood body.
88
137
  */
89
- woodMid: hex("#F58517"),
138
+ wood: (text) => (0, node_util.styleText)("yellow", text),
90
139
  /**
91
140
  * Base wood body.
92
141
  */
93
- woodBase: hex("#B45309"),
142
+ woodBase: (text) => (0, node_util.styleText)(["dim", "yellow"], text),
94
143
  /**
95
144
  * Eye whites.
96
145
  */
97
- eye: hex("#FFFFFF"),
146
+ eye: (text) => (0, node_util.styleText)("white", text),
98
147
  /**
99
148
  * Highlight accent.
100
149
  */
101
- highlight: hex("#adadc6"),
150
+ highlight: (text) => (0, node_util.styleText)("gray", text),
102
151
  /**
103
152
  * Cheek blush.
104
153
  */
105
- blush: hex("#FDA4AF")
154
+ blush: (text) => (0, node_util.styleText)("magenta", text)
106
155
  };
107
156
  /**
108
157
  * Generates the Kubb mascot welcome banner as an ANSI-colored string.
@@ -113,18 +162,14 @@ const palette = {
113
162
  * ```
114
163
  */
115
164
  function getIntro({ title, description, version, areEyesOpen }) {
116
- const kubbVersion = gradient([
117
- "#F58517",
118
- "#F5A217",
119
- "#F55A17"
120
- ], `KUBB v${version}`);
165
+ const kubbVersion = (0, node_util.styleText)(["bold", "yellow"], `KUBB v${version}`);
121
166
  const eyeTop = areEyesOpen ? palette.eye("█▀█") : palette.eye("───");
122
167
  const eyeBottom = areEyesOpen ? palette.eye("▀▀▀") : palette.eye("───");
123
168
  return [
124
169
  ` ${palette.lid("▄▄▄▄▄▄▄▄▄▄▄▄▄")}`,
125
- ` ${palette.woodTop("█ ")}${palette.highlight("▄▄")}${palette.woodTop(" ")}${palette.highlight("▄▄")}${palette.woodTop(" █")} ${kubbVersion}`,
126
- ` ${palette.woodMid("█ ")}${eyeTop}${palette.woodMid(" ")}${eyeTop}${palette.woodMid(" █")} ${(0, node_util.styleText)("gray", title)}`,
127
- ` ${palette.woodMid("█ ")}${eyeBottom}${palette.woodMid(" ")}${palette.blush("◡")}${palette.woodMid(" ")}${eyeBottom}${palette.woodMid(" █")} ${(0, node_util.styleText)("yellow", "➜")} ${(0, node_util.styleText)("white", description)}`,
170
+ ` ${palette.wood("█ ")}${palette.highlight("▄▄")}${palette.wood(" ")}${palette.highlight("▄▄")}${palette.wood(" █")} ${kubbVersion}`,
171
+ ` ${palette.wood("█ ")}${eyeTop}${palette.wood(" ")}${eyeTop}${palette.wood(" █")} ${(0, node_util.styleText)("gray", title)}`,
172
+ ` ${palette.wood("█ ")}${eyeBottom}${palette.wood(" ")}${palette.blush("◡")}${palette.wood(" ")}${eyeBottom}${palette.wood(" █")} ${(0, node_util.styleText)("yellow", "➜")} ${(0, node_util.styleText)("white", description)}`,
128
173
  ` ${palette.woodBase("▀▀▀▀▀▀▀▀▀▀▀▀▀")}`
129
174
  ].join("\n");
130
175
  }
@@ -140,7 +185,7 @@ function getIntro({ title, description, version, areEyesOpen }) {
140
185
  * ```
141
186
  */
142
187
  function formatMsWithColor(ms) {
143
- const formatted = require_agent.formatMs(ms);
188
+ const formatted = require_Telemetry.formatMs(ms);
144
189
  if (ms <= 500) return (0, node_util.styleText)("green", formatted);
145
190
  if (ms <= 1e3) return (0, node_util.styleText)("yellow", formatted);
146
191
  return (0, node_util.styleText)("red", formatted);
@@ -201,7 +246,7 @@ function formatErrorFrames(error) {
201
246
  /** The progress summary line the clack logger shows, `null` when there is nothing to display. */
202
247
  function buildProgressLine(state) {
203
248
  const parts = [];
204
- const duration = require_agent.formatMs(require_agent.getElapsedMs(state.hrStart));
249
+ const duration = require_Telemetry.formatMs(require_Telemetry.getElapsedMs(state.hrStart));
205
250
  if (state.totalPlugins > 0) {
206
251
  const pluginStr = state.failedPlugins > 0 ? `Plugins ${(0, node_util.styleText)("green", state.completedPlugins.toString())}/${state.totalPlugins} ${(0, node_util.styleText)("red", `(${state.failedPlugins} failed)`)}` : `Plugins ${(0, node_util.styleText)("green", state.completedPlugins.toString())}/${state.totalPlugins}`;
207
252
  parts.push(pluginStr);
@@ -325,7 +370,7 @@ function createLogger(writer) {
325
370
  const phase = state.phase;
326
371
  state.phase = null;
327
372
  if (!phase || silent) return;
328
- const duration = formatMsWithColor(require_agent.getElapsedMs(phase.hrStart));
373
+ const duration = formatMsWithColor(require_Telemetry.getElapsedMs(phase.hrStart));
329
374
  stopSpinner(phase.failed ? `${phase.failureLabel} after ${duration}` : `${phase.successLabel} in ${duration}`, phase.failed ? "failed" : "success");
330
375
  if (phase.lines.length) writer.block(phase.lines);
331
376
  writeOutput(phase.output);
@@ -442,7 +487,7 @@ function createLogger(writer) {
442
487
  state.hooks.delete(id);
443
488
  const label = (0, node_util.styleText)("dim", name ?? (args?.length ? `${command} ${args.join(" ")}` : command));
444
489
  const reason = error?.message ? ` (${error.message})` : "";
445
- const result = success ? `${(0, node_util.styleText)("green", "✓")} ${label} in ${formatMsWithColor(require_agent.getElapsedMs(active.hrStart))}` : `${(0, node_util.styleText)("red", "✗")} ${label} failed${reason}`;
490
+ const result = success ? `${(0, node_util.styleText)("green", "✓")} ${label} in ${formatMsWithColor(require_Telemetry.getElapsedMs(active.hrStart))}` : `${(0, node_util.styleText)("red", "✗")} ${label} failed${reason}`;
446
491
  const phase = state.phase;
447
492
  if (phase) {
448
493
  if (phase.showHookResults || !success) phase.lines.push(result);
@@ -494,7 +539,7 @@ function createLogger(writer) {
494
539
  });
495
540
  context.hook("studio:reconnecting", ({ delayMs }) => {
496
541
  stopSpinner();
497
- writer.info(text((0, node_util.styleText)("dim", `Retrying connection to Kubb Studio in ${require_agent.formatMs(delayMs)}`)));
542
+ writer.info(text((0, node_util.styleText)("dim", `Retrying connection to Kubb Studio in ${require_Telemetry.formatMs(delayMs)}`)));
498
543
  });
499
544
  context.hook("kubb:plugin:start", ({ plugin }) => {
500
545
  state.spinner?.message(text(`Generating ${(0, node_util.styleText)("dim", plugin.name)}`));
@@ -766,6 +811,18 @@ function createSpinner() {
766
811
  return writer().spinner();
767
812
  }
768
813
  //#endregion
814
+ Object.defineProperty(exports, "KUBB_CONFIG_FILENAME", {
815
+ enumerable: true,
816
+ get: function() {
817
+ return KUBB_CONFIG_FILENAME;
818
+ }
819
+ });
820
+ Object.defineProperty(exports, "KUBB_PACKAGE_NAME", {
821
+ enumerable: true,
822
+ get: function() {
823
+ return KUBB_PACKAGE_NAME;
824
+ }
825
+ });
769
826
  Object.defineProperty(exports, "canUseTTY", {
770
827
  enumerable: true,
771
828
  get: function() {
@@ -790,12 +847,30 @@ Object.defineProperty(exports, "createSpinner", {
790
847
  return createSpinner;
791
848
  }
792
849
  });
850
+ Object.defineProperty(exports, "findConfigFile", {
851
+ enumerable: true,
852
+ get: function() {
853
+ return findConfigFile;
854
+ }
855
+ });
856
+ Object.defineProperty(exports, "initDefaults", {
857
+ enumerable: true,
858
+ get: function() {
859
+ return initDefaults;
860
+ }
861
+ });
793
862
  Object.defineProperty(exports, "isRichOutput", {
794
863
  enumerable: true,
795
864
  get: function() {
796
865
  return isRichOutput;
797
866
  }
798
867
  });
868
+ Object.defineProperty(exports, "loadConfigFile", {
869
+ enumerable: true,
870
+ get: function() {
871
+ return loadConfigFile;
872
+ }
873
+ });
799
874
  Object.defineProperty(exports, "logBanner", {
800
875
  enumerable: true,
801
876
  get: function() {
@@ -869,4 +944,4 @@ Object.defineProperty(exports, "pluralize", {
869
944
  }
870
945
  });
871
946
 
872
- //# sourceMappingURL=output-BnK0scpX.cjs.map
947
+ //# sourceMappingURL=output-DOC3zu6i.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-DOC3zu6i.cjs","names":["jiti","createJiti","readFile","process","resolve","dirname","join","existsSync","isCIEnvironment","getAgentProfile","styleText","formatMs","logLevelMap","styleText","formatMs","getElapsedMs","process","Diagnostics","relative","clack","styleText","styleText"],"sources":["../../../internals/shared/src/constants.ts","../../../internals/shared/src/loader.ts","../../../internals/shared/src/config.ts","../src/utils/env.ts","../src/loggers/banner.ts","../src/loggers/createLogger.ts","../src/loggers/clackLogger.ts","../src/loggers/plainLogger.ts","../src/loggers/output.ts"],"sourcesContent":["export const KUBB_CONFIG_FILENAME = 'kubb.config.ts' as const\n\n/** File extensions a Kubb config file may use. */\nexport const CONFIG_EXTENSIONS = ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'] as const\n\nexport const KUBB_PACKAGE_NAME = 'kubb' as const\n\nexport const initDefaults = {\n inputPath: './openapi.yaml',\n outputPath: './src/gen',\n plugins: ['plugin-ts'],\n} as const\n","import { readFile } from 'node:fs/promises'\nimport { createJiti } from 'jiti'\n\n/**\n * jiti options for loading Kubb config modules: the automatic JSX runtime pointed at\n * `@kubb/renderer-jsx`, and `moduleCache` off so a re-load re-evaluates the file.\n */\nconst JITI_OPTIONS = {\n jsx: { runtime: 'automatic', importSource: '@kubb/renderer-jsx' },\n moduleCache: false,\n} satisfies Parameters<typeof createJiti>[1]\n\n/**\n * Plain JavaScript files. jiti hands these to Node's native `import()`, whose module cache never\n * lets go of a file, so `moduleCache: false` alone would keep returning the first version of it.\n */\nconst JAVASCRIPT_EXTENSION = /\\.[cm]?jsx?$/\n\n/**\n * Per-call options for {@link loadModule}.\n */\ntype LoadModuleOptions = {\n /**\n * Return the module's default export instead of the full namespace.\n */\n default?: boolean\n}\n\nconst jiti = createJiti(import.meta.url, JITI_OPTIONS)\n\n/**\n * Loads a Kubb TypeScript or JavaScript config module via jiti.\n *\n * jiti transpiles TypeScript and the `@kubb/renderer-jsx` JSX runtime on the fly. Every load\n * re-evaluates the file, so a config edited on disk is picked up by the next load.\n *\n * @example\n * ```ts\n * const config = await loadModule('/abs/kubb.config.ts', { default: true })\n * ```\n */\nexport async function loadModule<T = unknown>(filePath: string, options?: LoadModuleOptions): Promise<T> {\n if (!JAVASCRIPT_EXTENSION.test(filePath)) {\n return (options?.default ? jiti.import(filePath, { default: true }) : jiti.import(filePath)) as Promise<T>\n }\n\n // Transpiled through jiti instead, so every load re-evaluates the file as it is on disk now.\n // A TypeScript file it imports reloads too. A plain JavaScript file it imports still goes\n // through Node's `import()` and stays cached until the process restarts.\n const mod = (await jiti.evalModule(await readFile(filePath, 'utf8'), { filename: filePath, async: true, forceTranspile: true })) as\n | { default?: unknown }\n | undefined\n return (options?.default ? (mod?.default ?? mod) : mod) as T\n}\n","import { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { CONFIG_EXTENSIONS } from './constants.ts'\nimport { loadModule } from './loader.ts'\n\nconst SEARCH_FILES = ['', '.config/', 'configs/'].flatMap((prefix) => [`${prefix}.kubbrc`, `${prefix}kubb.config`])\n\n/**\n * The first Kubb config file in `cwd` or the nearest parent folder that has one: `.kubbrc` before\n * `kubb.config`, the folder itself before its `.config/` and `configs/`, and {@link CONFIG_EXTENSIONS} in order.\n */\nexport function findConfigFile(cwd: string = process.cwd()): string | undefined {\n for (let dir = resolve(cwd); ; dir = dirname(dir)) {\n const found = SEARCH_FILES.flatMap((file) => CONFIG_EXTENSIONS.map((extension) => join(dir, `${file}${extension}`))).find((file) => existsSync(file))\n if (found || dirname(dir) === dir) return found\n }\n}\n\n/**\n * Loads a Kubb config module, calls it with `cli` when it exports a function, and returns its\n * configs as a list, so a single config and a `defineConfig([...])` array read the same.\n */\nexport async function loadConfigFile<T>(file: string, cli: unknown): Promise<Array<T>> {\n const loaded = await loadModule<unknown>(file, { default: true })\n const resolved = (await (typeof loaded === 'function' ? loaded(cli) : loaded)) as T | Array<T>\n return Array.isArray(resolved) ? resolved : [resolved]\n}\n","import { isCIEnvironment } from '@internals/utils'\nimport { getAgentProfile } from 'gunshi/agent'\n\n/**\n * Returns `true` when the process has an interactive TTY with a valid terminal\n * width and is not running in CI.\n *\n * Some IDE-embedded terminals report `isTTY = true` but set `columns` to `0`,\n * which breaks clack's box-drawing helpers (they call `String.prototype.repeat`\n * with a negative count and throw a `RangeError`). A positive column count is\n * required before the TTY counts as usable.\n *\n * @example\n * ```ts\n * if (canUseTTY()) {\n * renderProgressBar()\n * }\n * ```\n */\nexport function canUseTTY(): boolean {\n return process.stdout.isTTY && (process.stdout.columns ?? 0) > 0 && !isCIEnvironment()\n}\n\n/**\n * Returns `true` when output can carry spinners and clack's gutter: an interactive TTY that no AI\n * coding agent is reading. Cursor-movement escapes are hard for an agent to parse even over a\n * pseudo-TTY, so it gets the plain writer.\n */\nexport function isRichOutput(): boolean {\n return canUseTTY() && !getAgentProfile().isAgent\n}\n","import { styleText } from 'node:util'\nimport { formatMs } from '@internals/utils'\n\n/**\n * Colors for each part of the Kubb mascot illustration.\n */\nconst palette = {\n /**\n * Top cap of the skittle.\n */\n lid: (text: string) => styleText('red', text),\n /**\n * Wood body.\n */\n wood: (text: string) => styleText('yellow', text),\n /**\n * Base wood body.\n */\n woodBase: (text: string) => styleText(['dim', 'yellow'], text),\n /**\n * Eye whites.\n */\n eye: (text: string) => styleText('white', text),\n /**\n * Highlight accent.\n */\n highlight: (text: string) => styleText('gray', text),\n /**\n * Cheek blush.\n */\n blush: (text: string) => styleText('magenta', text),\n}\n\n/**\n * Generates the Kubb mascot welcome banner as an ANSI-colored string.\n *\n * @example\n * ```ts\n * console.log(getIntro({ title: 'kubb.config.ts', description: 'generating…', version: '5.0.0', areEyesOpen: true }))\n * ```\n */\nexport function getIntro({\n title,\n description,\n version,\n areEyesOpen,\n}: {\n /**\n * Name of the active configuration or tool being started.\n */\n title: string\n /**\n * Short subtitle shown next to the arrow prompt.\n */\n description: string\n /**\n * Kubb version string rendered in the header.\n */\n version: string\n /**\n * When `false` the eyes are shown as closed dashes instead of open blocks.\n */\n areEyesOpen: boolean\n}): string {\n const kubbVersion = styleText(['bold', 'yellow'], `KUBB v${version}`)\n\n const eyeTop = areEyesOpen ? palette.eye('█▀█') : palette.eye('───')\n const eyeBottom = areEyesOpen ? palette.eye('▀▀▀') : palette.eye('───')\n\n return [\n ` ${palette.lid('▄▄▄▄▄▄▄▄▄▄▄▄▄')}`,\n ` ${palette.wood('█ ')}${palette.highlight('▄▄')}${palette.wood(' ')}${palette.highlight('▄▄')}${palette.wood(' █')} ${kubbVersion}`,\n ` ${palette.wood('█ ')}${eyeTop}${palette.wood(' ')}${eyeTop}${palette.wood(' █')} ${styleText('gray', title)}`,\n ` ${palette.wood('█ ')}${eyeBottom}${palette.wood(' ')}${palette.blush('◡')}${palette.wood(' ')}${eyeBottom}${palette.wood(' █')} ${styleText('yellow', '➜')} ${styleText('white', description)}`,\n ` ${palette.woodBase('▀▀▀▀▀▀▀▀▀▀▀▀▀')}`,\n ].join('\\n')\n}\n\n/**\n * Formats a millisecond duration with a threshold-based ANSI color.\n * `≤ 500 ms` → green · `≤ 1 000 ms` → yellow · `> 1 000 ms` → red.\n *\n * @example\n * ```ts\n * formatMsWithColor(200) // '\\x1b[32m200ms\\x1b[39m'\n * formatMsWithColor(800) // '\\x1b[33m800ms\\x1b[39m'\n * formatMsWithColor(1500) // '\\x1b[31m1.50s\\x1b[39m'\n * ```\n */\nexport function formatMsWithColor(ms: number): string {\n const formatted = formatMs(ms)\n if (ms <= 500) return styleText('green', formatted)\n if (ms <= 1000) return styleText('yellow', formatted)\n\n return styleText('red', formatted)\n}\n","import { relative } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport type { Config } from '@kubb/core'\nimport { Diagnostics, logLevel as logLevelMap } from '@kubb/core'\nimport type { StudioConnectedContext } from '@kubb/studio'\nimport { formatMsWithColor } from './banner.ts'\nimport type { Logger, LoggerWriter, LogStatus, WriterProgress, WriterSpinner } from './defineLogger.ts'\n\n/** Display path for a config's input: the string form, or its `path` field when the input is an object. */\nfunction getInputPath(config: Config): string | undefined {\n const { input } = config\n if (typeof input === 'string') return input\n return typeof input?.path === 'string' ? input.path : undefined\n}\n\n/** Counts a noun, so a message never reads `1 files`. */\nexport function pluralize(count: number, noun: string): string {\n return `${count} ${count === 1 ? noun : `${noun}s`}`\n}\n\n/** Prefixes a `[HH:MM:SS]` timestamp at verbose and above. */\nfunction formatMessage(message: string, logLevel: number): string {\n if (logLevel >= logLevelMap.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 return `${styleText('dim', `[${timestamp}]`)} ${message}`\n }\n return message\n}\n\n/**\n * Renders a `studio:connected` event's versions: the runtime only when it differs from the host.\n */\nfunction formatVersions({ studio, kubb, agent }: StudioConnectedContext['versions']): string {\n return [`v${agent}`, kubb !== agent ? `runtime v${kubb}` : undefined, `Studio v${studio}`].filter(Boolean).join(', ')\n}\n\n/** The first three frames of a stack, without the message line. */\nfunction topFrames(stack: string): Array<string> {\n return stack\n .split('\\n')\n .slice(1, 4)\n .map((frame) => frame.trim())\n}\n\n/** First stack frames for verbose error output, including an optional `cause` chain. */\nfunction formatErrorFrames(error: Error): { frames: Array<string>; cause?: { header: string; frames: Array<string> } } | null {\n if (!error.stack) {\n return null\n }\n\n const frames = topFrames(error.stack)\n const caused = error.cause instanceof Error ? error.cause : undefined\n\n if (!caused?.stack) {\n return { frames }\n }\n\n return {\n frames,\n cause: {\n header: `└─ caused by ${caused.message}`,\n frames: topFrames(caused.stack),\n },\n }\n}\n\ntype ProgressState = {\n totalPlugins: number\n completedPlugins: number\n failedPlugins: number\n totalFiles: number\n processedFiles: number\n /** `process.hrtime()` snapshot taken at the start of generation, for the elapsed time. */\n hrStart: [number, number]\n}\n\n/** The progress summary line the clack logger shows, `null` when there is nothing to display. */\nfunction buildProgressLine(state: ProgressState): string | null {\n const parts: Array<string> = []\n const duration = formatMs(getElapsedMs(state.hrStart))\n\n if (state.totalPlugins > 0) {\n const pluginStr =\n state.failedPlugins > 0\n ? `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins} ${styleText('red', `(${state.failedPlugins} failed)`)}`\n : `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins}`\n parts.push(pluginStr)\n }\n\n if (state.totalFiles > 0) {\n parts.push(`Files ${styleText('green', state.processedFiles.toString())}/${state.totalFiles}`)\n }\n\n if (parts.length === 0) {\n return null\n }\n\n parts.push(`${styleText('green', duration)} elapsed`)\n return parts.join(styleText('dim', ' | '))\n}\n\nfunction createProgressCounters(): ProgressState {\n return {\n totalPlugins: 0,\n completedPlugins: 0,\n failedPlugins: 0,\n totalFiles: 0,\n processedFiles: 0,\n hrStart: process.hrtime(),\n }\n}\n\n/**\n * One output phase while its step owns the line. A phase buffers what it is told, because a spinner\n * redraws over anything written under it, and prints the lot once it knows its own result.\n */\ntype Phase = {\n successLabel: string\n failureLabel: string\n /**\n * Whether each hook's own result is worth a line. Format and lint run one command, so the phase\n * result already says everything; the post-generate phase runs several.\n */\n showHookResults: boolean\n failed: boolean\n hrStart: [number, number]\n lines: Array<string>\n /**\n * Raw lines a hook printed, drawn outside the group.\n */\n output: Array<string>\n}\n\ntype StartPhaseOptions = {\n /**\n * Shown while the phase runs.\n */\n running: string\n success: string\n failure: string\n showHookResults?: boolean\n}\n\n/**\n * The three output phases, in the order the generate runner runs them.\n */\nconst PHASES = {\n format: { running: 'Formatting', success: 'Formatted', failure: 'Formatting failed' },\n lint: { running: 'Linting', success: 'Linted', failure: 'Linting failed' },\n hooks: {\n running: 'Running post-generate hooks',\n success: 'Post-generate hooks completed',\n failure: 'Post-generate hooks failed',\n showHookResults: true,\n },\n} as const satisfies Record<string, StartPhaseOptions>\n\n/**\n * Drops the blank lines a subprocess leaves at either end of its output, so its block does not open\n * or close on an empty row.\n */\nfunction trimBlankEdges(lines: ReadonlyArray<string>): Array<string> {\n const start = lines.findIndex((line) => line.trim())\n if (start === -1) {\n return []\n }\n\n return lines.slice(start, lines.findLastIndex((line) => line.trim()) + 1)\n}\n\n/**\n * Wires a {@link LoggerWriter} onto the run's hooks. This owns what a run says and in what order:\n * one group per config, a step over the plugin work, a progress bar for the writes, one step per\n * output phase, then the summary and the group's closing result. The writer only decides how each\n * line looks, so every logger reports the same run the same way.\n *\n * @example\n * ```ts\n * export const plainLogger = createLogger(writer)\n * ```\n */\nexport function createLogger(writer: LoggerWriter): Logger {\n return function install(context, { logLevel }) {\n const silent = logLevel <= logLevelMap.silent\n const state = {\n ...createProgressCounters(),\n spinner: null as WriterSpinner | null,\n progress: null as WriterProgress | null,\n hooks: new Map<string, { hrStart: [number, number]; lines: Array<string> }>(),\n /**\n * Plugin results held back while the generation step owns the line.\n */\n pluginLines: [] as Array<string>,\n phase: null as Phase | null,\n groupOpen: false,\n /**\n * Whether this run keeps its files in memory, as a `kubb studio` run without `--allow-write` does.\n */\n inMemory: false,\n }\n\n function text(message: string): string {\n return formatMessage(message, logLevel)\n }\n\n function startSpinner(message: string) {\n if (silent) {\n return\n }\n\n state.spinner = writer.spinner()\n state.spinner.start(text(message))\n }\n\n function stopSpinner(message?: string, status: LogStatus = 'success') {\n const spinner = state.spinner\n if (!spinner) {\n return\n }\n state.spinner = null\n\n if (message === undefined) {\n spinner.clear()\n return\n }\n if (status === 'failed') {\n spinner.error(text(message))\n return\n }\n spinner.stop(text(message))\n }\n\n function stopProgress(message?: string) {\n const progress = state.progress\n if (!progress) {\n return\n }\n state.progress = null\n progress.stop(message === undefined ? '' : text(message))\n }\n\n function startPhase({ running, success, failure, showHookResults = false }: StartPhaseOptions) {\n state.phase = { successLabel: success, failureLabel: failure, showHookResults, failed: false, hrStart: process.hrtime(), lines: [], output: [] }\n startSpinner(running)\n }\n\n function endPhase() {\n const phase = state.phase\n state.phase = null\n\n if (!phase || silent) {\n return\n }\n\n const duration = formatMsWithColor(getElapsedMs(phase.hrStart))\n\n stopSpinner(phase.failed ? `${phase.failureLabel} after ${duration}` : `${phase.successLabel} in ${duration}`, phase.failed ? 'failed' : 'success')\n\n if (phase.lines.length) {\n writer.block(phase.lines)\n }\n writeOutput(phase.output)\n }\n\n function writeOutput(lines: ReadonlyArray<string>) {\n const output = trimBlankEdges(lines)\n if (output.length) {\n writer.raw(output)\n }\n }\n\n // A run that throws before `kubb:generation:end` never reaches the summary, so the lifecycle\n // end calls this too rather than leave a group without its closing line.\n function closeGroup(status: LogStatus) {\n if (!state.groupOpen) {\n return\n }\n state.groupOpen = false\n\n stopSpinner()\n stopProgress()\n writer.groupEnd(status === 'failed' ? styleText('red', '✗ Generation failed') : styleText('green', '✓ Generation succeeded'))\n }\n\n function reset() {\n stopSpinner()\n stopProgress()\n Object.assign(state, createProgressCounters())\n state.hooks.clear()\n state.pluginLines = []\n state.phase = null\n state.groupOpen = false\n }\n\n function writeErrorFrames(error: Error) {\n const frames = logLevel >= logLevelMap.verbose ? formatErrorFrames(error) : null\n if (!frames) {\n return\n }\n\n writer.block(frames.frames.map((frame) => text(styleText('dim', frame))))\n if (frames.cause) {\n writer.block([styleText('dim', frames.cause.header), ...frames.cause.frames.map((frame) => text(` ${styleText('dim', frame)}`))])\n }\n }\n\n function formatLine(symbol: string, message: string, info?: string): string {\n return text([symbol, message, info && styleText('dim', info)].filter(Boolean).join(' '))\n }\n\n context.hook('kubb:warn', ({ message, info }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n\n writer.warn(formatLine(styleText('yellow', '⚠'), message, logLevel >= logLevelMap.info ? info : undefined))\n })\n\n // Unguarded: a failure stays visible even at silent.\n context.hook('kubb:error', ({ error }) => {\n if (state.phase) {\n state.phase.failed = true\n }\n\n // The writer draws the error symbol, so the message goes in bare.\n if (state.spinner) {\n stopSpinner(error.message, 'failed')\n } else {\n writer.error(text(error.message))\n }\n\n writeErrorFrames(error)\n })\n\n context.hook('kubb:diagnostic', ({ diagnostic }) => {\n // Silent still surfaces errors so failures stay visible. It drops warnings and info.\n if (silent && diagnostic.severity !== 'error') {\n return\n }\n\n stopSpinner()\n stopProgress()\n\n if (Diagnostics.isUpdate(diagnostic)) {\n writer.update(\n [`\\`v${diagnostic.currentVersion}\\` → \\`v${diagnostic.latestVersion}\\``, 'Run `npm install -g @kubb/cli` to update'],\n 'Update available for `Kubb`',\n )\n return\n }\n\n const { headline, details } = Diagnostics.format(diagnostic)\n writer.diagnostic([headline, ...details])\n // The stack of a crash is what its maintainers need in a bug report.\n if (Diagnostics.isProblem(diagnostic) && diagnostic.cause) {\n writeErrorFrames(diagnostic.cause)\n }\n })\n\n // A `kubb studio` session emits these on the same emitter as its generations, so one logger\n // renders the whole command.\n context.hook('studio:disconnected', ({ code, reason }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n\n stopSpinner()\n // 4002 is `AgentCloseCode.SUPERSEDED`, spelled out because `@kubb/studio` is an optional peer.\n if (code === 4002) {\n writer.warn(text('⚠ Another process connected to Kubb Studio as this agent, so this one stopped'))\n return\n }\n writer.warn(text(`⚠ Kubb Studio ended the session (${reason || `code ${code}`})`))\n })\n\n context.hook('studio:warn', ({ message, permission }) => {\n if (logLevel < logLevelMap.warn) {\n return\n }\n const remedy = permission ? `; pass --${permission.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)} to allow it` : ''\n writer.warn(text(`⚠ ${message}${remedy}`))\n })\n\n // Unguarded, like `kubb:error`: a failure stays visible even at silent.\n context.hook('studio:error', ({ error }) => {\n if (state.spinner) {\n stopSpinner(error.message, 'failed')\n return\n }\n writer.error(text(error.message))\n })\n\n context.hook('kubb:lifecycle:start', () => {\n reset()\n })\n\n context.hook('kubb:generation:start', ({ config }) => {\n closeGroup('failed')\n reset()\n\n state.totalPlugins = config.plugins?.length ?? 0\n state.inMemory = config.storage?.name === 'memory'\n\n if (silent) {\n return\n }\n\n const inputPath = getInputPath(config)\n\n writer.group(text([styleText('bold', config.name ?? 'kubb'), inputPath ? styleText('dim', inputPath) : undefined].filter(Boolean).join(' ')))\n state.groupOpen = true\n\n startSpinner('Generating')\n })\n\n context.hook('kubb:format:start', () => startPhase(PHASES.format))\n context.hook('kubb:format:end', endPhase)\n context.hook('kubb:lint:start', () => startPhase(PHASES.lint))\n context.hook('kubb:lint:end', endPhase)\n context.hook('kubb:hooks:start', () => startPhase(PHASES.hooks))\n context.hook('kubb:hooks:end', endPhase)\n\n context.hook('kubb:hook:end', (ctx) => {\n const { id, command, name, args, success, error } = ctx\n if (!id) {\n return\n }\n\n if (!success && state.phase) {\n state.phase.failed = true\n }\n\n if (silent) {\n // Even when silent, surface a failed hook's captured output.\n if (!ctx.success) {\n if (ctx.stdout) console.log(ctx.stdout)\n if (ctx.stderr) console.error(ctx.stderr)\n }\n return\n }\n\n const active = state.hooks.get(id)\n if (!active) {\n return\n }\n state.hooks.delete(id)\n\n const label = styleText('dim', name ?? (args?.length ? `${command} ${args.join(' ')}` : command))\n const reason = error?.message ? ` (${error.message})` : ''\n const result = success\n ? `${styleText('green', '✓')} ${label} in ${formatMsWithColor(getElapsedMs(active.hrStart))}`\n : `${styleText('red', '✗')} ${label} failed${reason}`\n\n const phase = state.phase\n if (phase) {\n if (phase.showHookResults || !success) {\n phase.lines.push(result)\n }\n phase.output.push(...active.lines)\n return\n }\n\n stopSpinner()\n writer.step(text(result))\n writeOutput(active.lines)\n })\n\n context.hook('kubb:generation:end', () => {\n stopSpinner()\n stopProgress()\n })\n\n context.hook('kubb:lifecycle:end', () => {\n closeGroup('failed')\n reset()\n })\n\n // Not registered at silent: the missing `kubb:hook:line` listener is also what tells the runner not to stream.\n if (!silent) {\n context.hook('kubb:info', ({ message, info }) => {\n const line = formatLine(styleText('blue', 'ℹ'), message, info)\n\n // Info carries something new (the auto-detected tool), so inside a phase it waits for the phase to print.\n if (state.phase) {\n state.phase.lines.push(line)\n return\n }\n if (state.spinner) {\n state.spinner.message(line)\n return\n }\n writer.info(line)\n })\n\n context.hook('kubb:success', ({ message, info }) => {\n const line = formatLine(styleText('green', '✓'), message, logLevel >= logLevelMap.info ? info : undefined)\n\n // The phase step's own result already reports these successes, so let the step carry them.\n if (state.spinner) {\n state.spinner.message(line)\n return\n }\n writer.success(line)\n })\n\n context.hook('studio:connected', ({ url, versions }) => {\n stopSpinner()\n writer.success(text(`✓ Connected to ${styleText('cyan', url)} ${styleText('dim', `(${formatVersions(versions)})`)}`))\n startSpinner('✓ Ready to receive jobs')\n })\n\n context.hook('studio:command', ({ command, info }) => {\n stopSpinner()\n writer.success(text(`✓ Finished ${command} ${styleText('dim', `(${info})`)}`))\n startSpinner('✓ Ready to receive jobs')\n })\n\n context.hook('studio:reconnecting', ({ delayMs }) => {\n stopSpinner()\n writer.info(text(styleText('dim', `Retrying connection to Kubb Studio in ${formatMs(delayMs)}`)))\n })\n\n context.hook('kubb:plugin:start', ({ plugin }) => {\n state.spinner?.message(text(`Generating ${styleText('dim', plugin.name)}`))\n })\n\n // Buffered, not printed: a step redraws over anything written while it runs.\n context.hook('kubb:plugin:end', ({ plugin, duration, success }) => {\n if (success) {\n state.completedPlugins++\n }\n if (!success) {\n state.failedPlugins++\n }\n state.pluginLines.push(text(`${plugin.name} ${success ? 'completed' : 'failed'} in ${formatMsWithColor(duration)}`))\n })\n\n context.hook('kubb:plugins:end', () => {\n const failed = state.failedPlugins > 0\n stopSpinner(buildProgressLine(state) ?? 'No plugins ran', failed ? 'failed' : 'success')\n\n if (state.pluginLines.length) {\n writer.block(state.pluginLines)\n state.pluginLines = []\n }\n })\n\n context.hook('kubb:files:processing:start', ({ files }) => {\n stopSpinner()\n state.totalFiles = files.length\n state.processedFiles = 0\n\n state.progress = writer.progress(files.length)\n state.progress.start(text(`${state.inMemory ? 'Generating' : 'Writing'} ${pluralize(files.length, 'file')}`))\n })\n\n context.hook('kubb:files:processing:update', ({ files }) => {\n for (const { file, config } of files) {\n state.processedFiles++\n state.progress?.advance(`${state.inMemory ? 'Generating' : 'Writing'} ${relative(config.root, file.path)}`)\n }\n })\n\n context.hook('kubb:files:processing:end', () => {\n stopProgress(state.inMemory ? `Generated ${pluralize(state.processedFiles, 'file')} in memory` : `Wrote ${pluralize(state.processedFiles, 'file')}`)\n })\n\n context.hook('kubb:hook:start', ({ id }) => {\n if (!id) {\n return\n }\n state.hooks.set(id, { hrStart: process.hrtime(), lines: [] })\n })\n\n context.hook('kubb:hook:line', ({ id, line }) => {\n const active = state.hooks.get(id)\n if (!active) {\n return\n }\n\n // A phase step redraws its own line, so its output waits until the phase ends.\n if (state.phase) {\n active.lines.push(line)\n return\n }\n writer.raw([line])\n })\n }\n\n return {\n renderSummary(lines, { status }) {\n if (silent || !state.groupOpen) {\n return\n }\n\n closeGroup(status)\n writer.diagnostic([...lines])\n },\n }\n }\n}\n","import { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { createLogger } from './createLogger.ts'\nimport type { Logger, LoggerWriter } from './defineLogger.ts'\n\n/**\n * Draws with clack: a gutter bar per group, animated steps, and a progress bar for the writes.\n */\nexport const clackWriter: LoggerWriter = {\n group: (title) => clack.intro(title),\n groupEnd: (text) => clack.outro(text),\n step: (text) => clack.log.step(text, { spacing: 0 }),\n info: (text) => clack.log.info(text),\n success: (text) => clack.log.success(text),\n warn: (text) => clack.log.warn(text),\n error: (text) => clack.log.error(text),\n block: (lines) => clack.log.message(lines, { spacing: 0 }),\n // A subprocess's output is not Kubb's tree, so it goes out past clack and its gutter bar. The\n // step above it is already stopped by the time this runs.\n raw: (lines) => console.log(styleText('dim', lines.join('\\n'))),\n // The diagnostic carries its own code and indented rows, so clear clack's gutter and bar and let\n // the block stand on its own.\n diagnostic: (lines) => clack.log.message(lines, { symbol: '', secondarySymbol: '' }),\n update: (lines, title) =>\n clack.box(lines.join('\\n'), title, {\n width: 'auto',\n formatBorder: (border: string) => styleText('yellow', border),\n rounded: true,\n withGuide: false,\n contentAlign: 'center',\n titleAlign: 'center',\n }),\n spinner: () => clack.spinner(),\n progress(max) {\n const bar = clack.progress({ style: 'block', max, size: 30 })\n\n return {\n start: (text) => bar.start(text),\n advance: (text) => bar.advance(1, text),\n stop: (text) => bar.stop(text),\n }\n },\n}\n\n/**\n * TTY logger for local development, with animated steps and progress bars.\n */\nexport const clackLogger: Logger = createLogger(clackWriter)\n","import { createLogger } from './createLogger.ts'\nimport type { Logger, LoggerWriter } from './defineLogger.ts'\n\n/**\n * Prefixes that stand in for the symbols clack draws, so plain output reads the same way.\n */\nexport const SYMBOLS = { info: 'ℹ', warn: '⚠', error: '✗', step: '◇' } as const\n\n/** Draws with one `write` call per line. Nothing animates, so a step prints at start and end. */\nfunction createWriter(write: (line: string) => void): LoggerWriter {\n return {\n group: write,\n groupEnd: write,\n step: (text) => write(`${SYMBOLS.step} ${text}`),\n info: write,\n success: write,\n warn: write,\n error: (text) => write(`${SYMBOLS.error} ${text}`),\n block: (lines) => write(lines.join('\\n')),\n raw: (lines) => write(lines.join('\\n')),\n diagnostic: (lines) => write(lines.join('\\n')),\n update: (lines, title) => write([title, ...lines].join('\\n')),\n spinner: () => ({\n start: write,\n message: write,\n clear: () => {},\n stop: (text) => text && write(text),\n error: (text) => write(`${SYMBOLS.error} ${text}`),\n }),\n progress: () => ({\n start: write,\n advance: write,\n stop: (text) => text && write(text),\n }),\n }\n}\n\n/** The plain logger writing through `write`, e.g. `console.error` so stdout carries only JSON. */\nexport function createPlainLogger(write: (line: string) => void): Logger {\n return createLogger(createWriter(write))\n}\n\n/** Draws on the console, for non-TTY environments and for an AI coding agent reading the output. */\nexport const plainWriter = createWriter((line) => console.log(line))\n\n/**\n * Console adapter for non-TTY environments, and for an AI coding agent reading the output. Reports\n * the same run in the same order as `clackLogger`, without the animation.\n */\nexport const plainLogger = createLogger(plainWriter)\n","import { styleText } from 'node:util'\nimport * as prompts from '@clack/prompts'\nimport { isRichOutput } from '../utils/env.ts'\nimport { getIntro } from './banner.ts'\nimport { clackWriter } from './clackLogger.ts'\nimport type { LoggerWriter, WriterSpinner } from './defineLogger.ts'\nimport { plainWriter, SYMBOLS } from './plainLogger.ts'\n\nconst SPONSOR_TIPS = [\n 'Your sponsorship keeps Kubb codegen, plugins, and docs maintained',\n 'Sponsor faster generators and better Kubb Studio workflows',\n 'Help keep Kubb free for TypeScript teams building APIs',\n 'Support React Query, Zod, Faker, and MSW integrations',\n 'Back open-source tools that turn OpenAPI into TypeScript',\n 'Sponsor fixes, releases, and new plugins for your API workflow',\n 'Help Kubb stay independent and focused on developer tools',\n] as const\n\nconst SPONSOR_LINKS = ['https://github.com/sponsors/stijnvanhulle', 'https://opencollective.com/kubb', 'https://kubb.dev/sponsors'] as const\n\n/** The writer the loggers draw with on this terminal, so a command's own lines look like its run. */\nfunction writer(): LoggerWriter {\n return isRichOutput() ? clackWriter : plainWriter\n}\n\nfunction nextTip(): string {\n const tip = SPONSOR_TIPS[Math.floor(Math.random() * SPONSOR_TIPS.length)]!\n const link = SPONSOR_LINKS[Math.floor(Math.random() * SPONSOR_LINKS.length)]!\n return `${tip}: ${link}`\n}\n\nfunction formatTip(tip: string): string {\n return styleText('magenta', ' Tip ') + styleText('yellow', tip)\n}\n\n/**\n * Prints one random tip outside every group. Rich terminals get the styled variant;\n * plain/CI output gets a stable text-only line so the tip is still visible as final output.\n */\nexport function logTip(): void {\n const tip = nextTip()\n if (!isRichOutput()) {\n console.log(`Tip: ${tip}`)\n return\n }\n\n console.log(`${styleText('magenta', '✦')}${formatTip(tip)}`)\n}\n\ntype Level = keyof typeof SYMBOLS\n\n// Not through the writers: in plain output a command's own info and warning carry their symbol, and clack's step keeps its spacing.\nfunction write(level: Level, message: string): void {\n if (isRichOutput()) {\n prompts.log[level](message)\n\n return\n }\n\n console.log(`${SYMBOLS[level]} ${message}`)\n}\n\ntype IntroOptions = {\n title?: string\n /**\n * Printed under the title, for a command that has a caveat to lead with.\n */\n warning?: string\n /**\n * Whether to open a block a later {@link logOutro} closes. Pass `false` for a command that\n * prints and exits, since nothing would ever close the block.\n *\n * @default true\n */\n block?: boolean\n}\n\n/**\n * Opens a command's output with its title.\n */\nexport function logIntro({ title, warning, block = true }: IntroOptions): void {\n if (block && isRichOutput()) {\n if (title) {\n prompts.intro(title)\n }\n\n if (warning) {\n prompts.log.warn(warning)\n }\n\n return\n }\n\n if (title) {\n console.log(title)\n }\n\n if (warning) {\n console.warn(warning)\n }\n\n if (title || warning) {\n console.log()\n }\n}\n\n/**\n * Closes the block {@link logIntro} opened. The closing gutter is not a written line, so plain\n * output prints the text on its own.\n */\nexport function logOutro(text: string): void {\n writer().groupEnd(text)\n}\n\n/**\n * Prints one empty line between two groups, without clack's gutter bar, since the bar belongs to a\n * group and a spacer sits outside every one.\n */\nexport function logSpacer(): void {\n console.log('')\n}\n\n/**\n * Opens the command with the Kubb mascot and version, or a single version line where the terminal\n * cannot draw it.\n */\nexport function logBanner(version: string): void {\n if (isRichOutput()) {\n console.log(`\\n${getIntro({ title: 'Turn your API spec into type-safe code', description: 'Ready to start', version, areEyesOpen: true })}\\n`)\n\n return\n }\n\n console.log(`Kubb CLI v${version}`)\n}\n\n/** Prints lines as one block, without a symbol in front of them. Not the writer's block, which drops clack's spacing around it. */\nexport function logBlock(lines: string | Array<string>): void {\n if (isRichOutput()) {\n prompts.log.message(lines)\n\n return\n }\n\n console.log([lines].flat().join('\\n'))\n}\n\nexport function logInfo(message: string): void {\n write('info', message)\n}\n\nexport function logWarn(message: string): void {\n write('warn', message)\n}\n\nexport function logError(message: string): void {\n write('error', message)\n}\n\n/**\n * Reports a step the command is taking, rather than something it found.\n */\nexport function logStep(message: string): void {\n write('step', message)\n}\n\n/**\n * A progress spinner, or a writer that prints each message it is given when the terminal cannot\n * animate one. Callers drive both the same way, including the failure state.\n */\nexport function createSpinner(): WriterSpinner {\n return writer().spinner()\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- const require_agent = require("./agent-DElUuYuy.cjs");
2
- const require_errors = require("./errors-BdA8M78q.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-CPE0t6oh.cjs");
2
+ const require_Telemetry = require("./Telemetry-iUSXePwR.cjs");
3
3
  let node_process = require("node:process");
4
- node_process = require_agent.__toESM(node_process, 1);
4
+ node_process = require_rolldown_runtime.__toESM(node_process, 1);
5
5
  let _kubb_core = require("@kubb/core");
6
6
  let verkit = require("verkit");
7
7
  const SLUG = "[a-z0-9]+(?:-[a-z0-9]+)*";
@@ -31,7 +31,7 @@ async function fetchJSON(url) {
31
31
  body: await response.json()
32
32
  };
33
33
  } catch (cause) {
34
- throw new Error(`Could not read ${url}: ${require_errors.getErrorMessage(cause)}`, { cause });
34
+ throw new Error(`Could not read ${url}: ${require_Telemetry.getErrorMessage(cause)}`, { cause });
35
35
  }
36
36
  }
37
37
  /** Fetches one extension's detail document. */
@@ -65,7 +65,7 @@ function incompatibility(manifest) {
65
65
  });
66
66
  return;
67
67
  } catch (error) {
68
- return require_errors.getErrorMessage(error);
68
+ return require_Telemetry.getErrorMessage(error);
69
69
  }
70
70
  }
71
71
  /**
@@ -120,4 +120,4 @@ Object.defineProperty(exports, "toRegistryId", {
120
120
  }
121
121
  });
122
122
 
123
- //# sourceMappingURL=registry-DER9aRyg.cjs.map
123
+ //# sourceMappingURL=registry-DTPOQwZN.cjs.map