@kubb/cli 3.0.0-alpha.3 → 3.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,74 +1,59 @@
1
- // src/utils/spinner.ts
2
- import ora from "ora";
3
- var spinner = ora({
4
- spinner: "clock"
5
- });
6
-
7
1
  // src/generate.ts
8
- import { LogLevel as LogLevel2, LogMapper, createLogger, randomCliColour as randomCliColour2 } from "@kubb/core/logger";
2
+ import { createLogger } from "@kubb/core/logger";
9
3
  import c4 from "tinyrainbow";
10
- import { Warning, safeBuild } from "@kubb/core";
11
- import { createConsola } from "consola";
4
+ import { safeBuild } from "@kubb/core";
12
5
 
13
6
  // src/utils/executeHooks.ts
14
- import { LogLevel } from "@kubb/core/logger";
15
7
  import { execa } from "execa";
16
8
  import { parseArgsStringToArgv } from "string-argv";
17
9
  import c2 from "tinyrainbow";
18
10
 
19
- // src/utils/OraWritable.ts
11
+ // src/utils/Writables.ts
20
12
  import { Writable } from "stream";
21
13
  import c from "tinyrainbow";
22
- var OraWritable = class extends Writable {
23
- constructor(spinner2, command, opts) {
14
+ var ConsolaWritable = class extends Writable {
15
+ constructor(consola, command, opts) {
24
16
  super(opts);
25
17
  this.command = command;
26
- this.spinner = spinner2;
18
+ this.consola = consola;
27
19
  }
28
20
  _write(chunk, _encoding, callback) {
29
- this.spinner.suffixText = `
30
-
31
- ${c.bold(c.blue(this.command))}: ${chunk?.toString()}`;
21
+ if (this.command) {
22
+ this.consola.log(`${c.bold(c.blue(this.command))}: ${chunk?.toString()}`);
23
+ } else {
24
+ this.consola.log(`${c.bold(c.blue(this.command))}: ${chunk?.toString()}`);
25
+ }
32
26
  callback();
33
27
  }
34
28
  };
35
29
 
36
30
  // src/utils/executeHooks.ts
37
- async function executeHooks({ hooks, logLevel }) {
38
- if (!hooks?.done) {
39
- return;
40
- }
41
- const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done];
42
- if (logLevel === LogLevel.silent) {
43
- spinner.start("Executing hooks");
44
- }
45
- const executers = commands.map(async (command) => {
46
- const oraWritable = new OraWritable(spinner, command);
31
+ import { LogMapper } from "@kubb/core/logger";
32
+ async function executeHooks({ hooks, logger }) {
33
+ const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean);
34
+ const executors = commands.map(async (command) => {
35
+ const consolaWritable = new ConsolaWritable(logger.consola, command);
47
36
  const abortController = new AbortController();
48
37
  const [cmd, ..._args] = [...parseArgsStringToArgv(command)];
49
38
  if (!cmd) {
50
39
  return null;
51
40
  }
52
- spinner.start(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
41
+ logger.emit("start", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
53
42
  const subProcess = await execa(cmd, _args, {
54
43
  detached: true,
55
44
  cancelSignal: abortController.signal,
56
- stdout: ["pipe", oraWritable]
45
+ stdout: logger.logLevel === LogMapper.silent ? void 0 : ["pipe", consolaWritable]
57
46
  });
58
- spinner.suffixText = "";
59
- if (logLevel === LogLevel.silent) {
60
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
61
- if (subProcess) {
62
- console.log(subProcess.stdout);
63
- }
47
+ logger.emit("success", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
48
+ if (subProcess) {
49
+ logger.emit("info", `Executing hooks
50
+ ${subProcess.stdout}`);
64
51
  }
65
- oraWritable.destroy();
52
+ consolaWritable.destroy();
66
53
  return { subProcess, abort: abortController.abort.bind(abortController) };
67
54
  }).filter(Boolean);
68
- await Promise.all(executers);
69
- if (logLevel === LogLevel.silent) {
70
- spinner.succeed("Executing hooks");
71
- }
55
+ await Promise.all(executors);
56
+ logger.emit("success", "Executing hooks");
72
57
  }
73
58
 
74
59
  // src/utils/getErrorCauses.ts
@@ -96,10 +81,9 @@ function parseHrtimeToSeconds(hrtime) {
96
81
  }
97
82
 
98
83
  // src/utils/getSummary.ts
99
- function getSummary({ pluginManager, status, hrstart, config, logger }) {
100
- const { logLevel } = logger;
84
+ function getSummary({ pluginManager, status, hrStart, config, logger }) {
101
85
  const logs = [];
102
- const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
86
+ const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart));
103
87
  const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
104
88
  const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === "buildEnd" && item.plugin.name !== "core").map((item) => item.plugin.name);
105
89
  const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
@@ -117,12 +101,10 @@ function getSummary({ pluginManager, status, hrstart, config, logger }) {
117
101
  return 0;
118
102
  });
119
103
  const meta = {
120
- name: config.name,
121
104
  plugins: status === "success" ? `${c3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c3.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
122
105
  pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
123
106
  filesCreated: files.length,
124
- time: c3.yellow(`${elapsedSeconds}s`),
125
- endTime: c3.yellow(Date()),
107
+ time: `${c3.yellow(`${elapsedSeconds}s`)} - finished at ${c3.yellow((/* @__PURE__ */ new Date()).toLocaleString("en-GB", { timeZone: "UTC" }))}`,
126
108
  output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root
127
109
  };
128
110
  logger.emit("debug", ["\nGenerated files:\n"]);
@@ -132,14 +114,11 @@ function getSummary({ pluginManager, status, hrstart, config, logger }) {
132
114
  );
133
115
  logs.push(
134
116
  [
135
- ["\n", true],
136
- [` ${c3.bold("Name:")} ${meta.name}`, !!meta.name],
137
- [` ${c3.bold("Plugins:")} ${meta.plugins}`, true],
138
- [` ${c3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
117
+ [`${c3.bold("Plugins:")} ${meta.plugins}`, true],
118
+ [`${c3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
139
119
  [`${c3.bold("Generated:")} ${meta.filesCreated} files`, true],
140
- [` ${c3.bold("Time:")} ${meta.time}`, true],
141
- [` ${c3.bold("Ended:")} ${meta.endTime}`, true],
142
- [` ${c3.bold("Output:")} ${meta.output}`, true]
120
+ [`${c3.bold("Time:")} ${meta.time}`, true],
121
+ [`${c3.bold("Output:")} ${meta.output}`, true]
143
122
  ].map((item) => {
144
123
  if (item.at(1)) {
145
124
  return item.at(0);
@@ -167,38 +146,20 @@ async function writeLog(data) {
167
146
  }
168
147
 
169
148
  // src/generate.ts
149
+ import { LogMapper as LogMapper2 } from "@kubb/core/logger";
150
+ import { MultiBar, Presets } from "cli-progress";
170
151
  async function generate({ input, config, args }) {
171
- const logLevel = args.logLevel || LogLevel2.silent;
152
+ const logLevel = LogMapper2[args.logLevel] || 3;
172
153
  const logger = createLogger({
173
154
  logLevel,
174
- name: config.name,
175
- spinner,
176
- consola: createConsola({
177
- level: LogMapper[logLevel] || 3
178
- })
155
+ name: config.name
179
156
  });
180
157
  logger.on("debug", async (messages) => {
181
- if (logLevel === LogLevel2.debug) {
182
- await writeLog(messages.join("\n"));
183
- }
158
+ await writeLog(messages.join("\n"));
184
159
  });
185
- logger.consola?.wrapConsole();
186
- if (logger.name) {
187
- spinner.prefixText = randomCliColour2(logger.name);
188
- }
189
- const hrstart = process.hrtime();
190
- if (args.logLevel === LogLevel2.debug) {
191
- const { performance, PerformanceObserver } = await import("perf_hooks");
192
- const performanceOpserver = new PerformanceObserver((items) => {
193
- const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
194
- spinner.suffixText = c4.yellow(message);
195
- performance.clearMarks();
196
- });
197
- performanceOpserver.observe({ type: "measure" });
198
- }
199
160
  const { root = process.cwd(), ...userConfig } = config;
200
161
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
201
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c4.dim(inputPath) : ""}`);
162
+ logger.emit("start", `\u{1F680} Building ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
202
163
  const definedConfig = {
203
164
  root,
204
165
  ...userConfig,
@@ -211,6 +172,7 @@ async function generate({ input, config, args }) {
211
172
  ...userConfig.output
212
173
  }
213
174
  };
175
+ const hrStart = process.hrtime();
214
176
  const { pluginManager, error } = await safeBuild({
215
177
  config: definedConfig,
216
178
  logger
@@ -219,34 +181,45 @@ async function generate({ input, config, args }) {
219
181
  pluginManager,
220
182
  config: definedConfig,
221
183
  status: error ? "failed" : "success",
222
- hrstart,
184
+ hrStart,
223
185
  logger
224
186
  });
225
- if (error) {
226
- spinner.suffixText = "";
227
- spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? c4.dim(inputPath) : ""}`);
228
- console.log(summary.join(""));
229
- if (error instanceof Warning) {
230
- spinner.warn(c4.yellow(error.message));
231
- process.exit(0);
232
- }
187
+ if (error && logger.consola) {
188
+ logger.consola.error(`\u{1F680} Build failed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
189
+ logger.consola.box({
190
+ title: `${config.name || ""}`,
191
+ message: summary.join(""),
192
+ style: {
193
+ padding: 2,
194
+ borderColor: "red",
195
+ borderStyle: "rounded"
196
+ }
197
+ });
233
198
  const errors = getErrorCauses([error]);
234
- if (logger.consola && errors.length && logLevel === LogLevel2.debug) {
199
+ if (logger.consola && errors.length && logLevel === LogMapper2.debug) {
235
200
  errors.forEach((err) => {
236
- logger.consola.error(err);
201
+ logger.consola?.error(err);
237
202
  });
238
203
  }
239
204
  logger.consola?.error(error);
240
205
  process.exit(0);
241
206
  }
242
- await executeHooks({ hooks: config.hooks, logLevel });
243
- spinner.suffixText = "";
244
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? c4.dim(inputPath) : ""}`);
245
- console.log(summary.join(""));
207
+ if (config.hooks) {
208
+ await executeHooks({ hooks: config.hooks, logger });
209
+ }
210
+ logger.consola?.success(`\u{1F680} Build completed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
211
+ logger.consola?.box({
212
+ title: `${config.name || ""}`,
213
+ message: summary.join(""),
214
+ style: {
215
+ padding: 2,
216
+ borderColor: "green",
217
+ borderStyle: "rounded"
218
+ }
219
+ });
246
220
  }
247
221
 
248
222
  export {
249
- spinner,
250
223
  generate
251
224
  };
252
- //# sourceMappingURL=chunk-VGYRBGKV.js.map
225
+ //# sourceMappingURL=chunk-Y35VLSP2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generate.ts","../src/utils/executeHooks.ts","../src/utils/Writables.ts","../src/utils/getErrorCauses.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/writeLog.ts"],"sourcesContent":["import { createLogger } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { type Config, safeBuild } from '@kubb/core'\nimport type { Args } from './commands/generate.ts'\nimport { executeHooks } from './utils/executeHooks.ts'\nimport { getErrorCauses } from './utils/getErrorCauses.ts'\nimport { getSummary } from './utils/getSummary.ts'\nimport { writeLog } from './utils/writeLog.ts'\nimport { LogMapper } from '@kubb/core/logger'\n\nimport { MultiBar, Presets } from 'cli-progress'\n\ntype GenerateProps = {\n input?: string\n config: Config\n args: Args\n}\n\nexport function createMultiProgressBar() {\n return new MultiBar(\n {\n format: 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}',\n barsize: 40,\n fps: 5,\n stream: process.stderr,\n clearOnComplete: true,\n },\n Presets.shades_grey,\n )\n}\n\nexport async function generate({ input, config, args }: GenerateProps): Promise<void> {\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n name: config.name,\n })\n\n // const progress = createMultiProgressBar()\n // let progressFiles: any\n //\n // logger.on('progress', (count, size) => {\n // if (count === 0) {\n // progressFiles = progress.create(size, 0)\n // }\n // progressFiles.update(count)\n // if (count === size) {\n // progressFiles.stop()\n // }\n // })\n\n logger.on('debug', async (messages: string[]) => {\n await writeLog(messages.join('\\n'))\n })\n\n const { root = process.cwd(), ...userConfig } = config\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n logger.emit('start', `🚀 Building ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n const definedConfig: Config = {\n root,\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n ...userConfig.output,\n },\n }\n const hrStart = process.hrtime()\n const { pluginManager, error } = await safeBuild({\n config: definedConfig,\n logger,\n })\n\n const summary = getSummary({\n pluginManager,\n config: definedConfig,\n status: error ? 'failed' : 'success',\n hrStart,\n logger,\n })\n\n if (error && logger.consola) {\n logger.consola.error(`🚀 Build failed ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n logger.consola.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'red',\n borderStyle: 'rounded',\n },\n })\n\n const errors = getErrorCauses([error])\n if (logger.consola && errors.length && logLevel === LogMapper.debug) {\n errors.forEach((err) => {\n logger.consola?.error(err)\n })\n }\n\n logger.consola?.error(error)\n\n process.exit(0)\n }\n\n if (config.hooks) {\n await executeHooks({ hooks: config.hooks, logger })\n }\n\n logger.consola?.success(`🚀 Build completed ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n logger.consola?.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'green',\n borderStyle: 'rounded',\n },\n })\n}\n","import type { Logger } from '@kubb/core/logger'\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { ConsolaWritable } from './Writables.ts'\n\nimport type { Config } from '@kubb/core'\nimport { LogMapper } from '@kubb/core/logger'\n\ntype ExecutingHooksProps = {\n hooks: NonNullable<Config['hooks']>\n logger: Logger\n}\n\nexport async function executeHooks({ hooks, logger }: ExecutingHooksProps): Promise<void> {\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)\n\n const executors = commands\n .map(async (command) => {\n const consolaWritable = new ConsolaWritable(logger.consola!, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n logger.emit('start', `Executing hook ${logger.logLevel !== LogMapper.silent ? c.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, {\n detached: true,\n cancelSignal: abortController.signal,\n stdout: logger.logLevel === LogMapper.silent ? undefined : ['pipe', consolaWritable],\n })\n\n logger.emit('success', `Executing hook ${logger.logLevel !== LogMapper.silent ? c.dim(command) : ''}`)\n\n if (subProcess) {\n logger.emit('info', `Executing hooks\\n ${subProcess.stdout}`)\n }\n\n consolaWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executors)\n\n logger.emit('success', 'Executing hooks')\n}\n","import { Writable } from 'node:stream'\n\nimport c from 'tinyrainbow'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { ConsolaInstance } from 'consola'\n\nexport class BasicWritables extends Writable {\n #frame = 'Loading ...'\n set frame(frame: string) {\n this.#frame = frame\n }\n get frame() {\n return this.#frame\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n if (chunk?.toString() !== this.frame && chunk?.toString()) {\n this.frame = chunk?.toString()\n }\n\n callback()\n }\n}\n\nexport class ConsolaWritable extends Writable {\n consola: ConsolaInstance\n command: string\n constructor(consola: ConsolaInstance, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.consola = consola\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n if (this.command) {\n this.consola.log(`${c.bold(c.blue(this.command))}: ${chunk?.toString()}`)\n } else {\n this.consola.log(`${c.bold(c.blue(this.command))}: ${chunk?.toString()}`)\n }\n\n callback()\n }\n}\n","export function getErrorCauses(errors: Error[]): Error[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n return prev\n }\n prev = [...prev, error]\n\n return prev\n }, [] as Error[])\n .filter(Boolean)\n}\n","import path from 'node:path'\n\nimport { randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { Config, PluginManager } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrStart: [number, number]\n config: Config\n logger: Logger\n}\n\nexport function getSummary({ pluginManager, status, hrStart, config, logger }: SummaryProps): string[] {\n const logs: string[] = []\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart))\n\n const buildStartPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core').map((item) => item.plugin.name)\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name)\n const pluginsCount = config.plugins?.length || 0\n const files = pluginManager.fileManager.files.sort((a, b) => {\n if (!a.meta?.pluginKey?.[0] || !b.meta?.pluginKey?.[0]) {\n return 0\n }\n if (a.meta?.pluginKey?.[0]?.length < b.meta?.pluginKey?.[0]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[0]?.length > b.meta?.pluginKey?.[0]?.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\n plugins:\n status === 'success'\n ? `${c.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${c.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomCliColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: `${c.yellow(`${elapsedSeconds}s`)} - finished at ${c.yellow(new Date().toLocaleString('en-GB', { timeZone: 'UTC' }))}`,\n output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root,\n } as const\n\n logger.emit('debug', ['\\nGenerated files:\\n'])\n logger.emit(\n 'debug',\n files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`),\n )\n\n logs.push(\n [\n [`${c.bold('Plugins:')} ${meta.plugins}`, true],\n [`${c.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${c.bold('Generated:')} ${meta.filesCreated} files`, true],\n [`${c.bold('Time:')} ${meta.time}`, true],\n [`${c.bold('Output:')} ${meta.output}`, true],\n ]\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return logs\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","import { resolve } from 'node:path'\nimport { read, write } from '@kubb/fs'\n\nexport async function writeLog(data: string): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n const path = resolve(process.cwd(), 'kubb-log.log')\n let previousLogs = ''\n\n try {\n previousLogs = await read(resolve(path))\n } catch (_err) {\n /* empty */\n }\n\n return write(path, [previousLogs, data.trim()].filter(Boolean).join('\\n\\n\\n'), { sanity: false })\n}\n"],"mappings":"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","names":["c","c","c","c","c","path","LogMapper","LogMapper","c"]}
@@ -1,20 +1,16 @@
1
1
  import {
2
- generate,
3
- spinner
4
- } from "./chunk-VGYRBGKV.js";
2
+ generate
3
+ } from "./chunk-Y35VLSP2.js";
5
4
 
6
5
  // src/commands/generate.ts
7
- import { LogLevel } from "@kubb/core/logger";
8
6
  import { defineCommand, showUsage } from "citty";
9
7
  import { execa } from "execa";
10
8
  import c2 from "tinyrainbow";
11
- import path from "path";
12
9
 
13
10
  // src/utils/getConfig.ts
14
11
  import { isPromise } from "@kubb/core/utils";
15
12
 
16
13
  // src/utils/getPlugins.ts
17
- import { PackageManager } from "@kubb/core";
18
14
  function isJSONPlugins(plugins) {
19
15
  return !!plugins?.some((plugin) => {
20
16
  return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
@@ -111,20 +107,21 @@ async function getCosmiConfig(moduleName, config) {
111
107
 
112
108
  // src/utils/watcher.ts
113
109
  import c from "tinyrainbow";
110
+ import { createLogger } from "@kubb/core/logger";
114
111
  async function startWatcher(path2, cb) {
115
112
  const { watch } = await import("chokidar");
116
113
  const ignored = ["**/{.git,node_modules}/**"];
114
+ const logger = createLogger();
117
115
  const watcher = watch(path2, {
118
116
  ignorePermissionErrors: true,
119
117
  ignored
120
118
  });
121
119
  watcher.on("all", (type, file) => {
122
- spinner.succeed(c.yellow(c.bold(`Change detected: ${type} ${file}`)));
123
- spinner.spinner = "clock";
120
+ logger.emit("info", c.yellow(c.bold(`Change detected: ${type} ${file}`)));
124
121
  try {
125
122
  cb(path2);
126
123
  } catch (e) {
127
- spinner.warn(c.red("Watcher failed"));
124
+ logger?.emit("warning", c.red("Watcher failed"));
128
125
  }
129
126
  });
130
127
  return;
@@ -132,6 +129,8 @@ async function startWatcher(path2, cb) {
132
129
 
133
130
  // src/commands/generate.ts
134
131
  import { PromiseManager, isInputPath } from "@kubb/core";
132
+ import path from "path";
133
+ import { createLogger as createLogger2, LogMapper } from "@kubb/core/logger";
135
134
  var args = {
136
135
  config: {
137
136
  type: "string",
@@ -142,8 +141,8 @@ var args = {
142
141
  type: "string",
143
142
  description: "Info, silent or debug",
144
143
  alias: "l",
145
- default: LogLevel.info,
146
- valueHint: `${LogLevel.silent}|${LogLevel.info}|${LogLevel.debug}`
144
+ default: "info",
145
+ valueHint: "silent|info|debug"
147
146
  },
148
147
  watch: {
149
148
  type: "boolean",
@@ -176,9 +175,6 @@ var command = defineCommand({
176
175
  description: "[input] Generate files based on a 'kubb.config.ts' file"
177
176
  },
178
177
  args,
179
- setup() {
180
- spinner.start("\u{1F50D} Loading config");
181
- },
182
178
  async run({ args: args2 }) {
183
179
  const input = args2._[0];
184
180
  if (args2.help) {
@@ -186,15 +182,20 @@ var command = defineCommand({
186
182
  return;
187
183
  }
188
184
  if (args2.debug) {
189
- args2.logLevel = LogLevel.debug;
185
+ args2.logLevel = "debug";
190
186
  }
191
187
  if (args2.bun) {
192
188
  const command2 = process.argv.splice(2).filter((item) => item !== "--bun");
193
189
  await execa("bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
194
190
  return;
195
191
  }
192
+ const logLevel = LogMapper[args2.logLevel] || 3;
193
+ const logger = createLogger2({
194
+ logLevel
195
+ });
196
+ logger.emit("start", "\u{1F50D} Loading config");
196
197
  const result = await getCosmiConfig("kubb", args2.config);
197
- spinner.succeed(`\u{1F50D} Config loaded(${c2.dim(path.relative(process.cwd(), result.filepath))})`);
198
+ logger.emit("success", `\u{1F50D} Config loaded(${c2.dim(path.relative(process.cwd(), result.filepath))})`);
198
199
  const config = await getConfig(result, args2);
199
200
  if (args2.watch) {
200
201
  if (Array.isArray(config)) {
@@ -203,8 +204,7 @@ var command = defineCommand({
203
204
  if (isInputPath(config)) {
204
205
  return startWatcher([input || config.input.path], async (paths) => {
205
206
  await generate({ config, args: args2 });
206
- spinner.spinner = "simpleDotsScrolling";
207
- spinner.start(c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
207
+ logger.emit("start", c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
208
208
  });
209
209
  }
210
210
  }
@@ -220,4 +220,4 @@ var generate_default = command;
220
220
  export {
221
221
  generate_default as default
222
222
  };
223
- //# sourceMappingURL=generate-IC27XOTA.js.map
223
+ //# sourceMappingURL=generate-FHYQHKKR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/generate.ts","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/watcher.ts"],"sourcesContent":["import { defineCommand, showUsage } from 'citty'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { execa } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nimport { PromiseManager, isInputPath } from '@kubb/core'\nimport { generate } from '../generate.ts'\nimport path from 'node:path'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\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 or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n bun: {\n type: 'boolean',\n description: 'Run Kubb with Bun',\n alias: 'b',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\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({ args }) {\n const input = args._[0]\n\n if (args.help) {\n showUsage(command)\n return\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.bun) {\n const command = process.argv.splice(2).filter((item) => item !== '--bun')\n\n await execa('bkubb', command, { stdout: process.stdout, stderr: process.stderr })\n return\n }\n\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n })\n\n logger.emit('start', '🔍 Loading config')\n\n const result = await getCosmiConfig('kubb', args.config)\n logger.emit('success', `🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, args)\n\n if (args.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple Configs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, args })\n logger.emit('start', c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, args }))\n\n return promiseManager.run('seq', promises)\n }\n\n await generate({ input, config, args })\n },\n})\n\nexport default command\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { Config, UserConfig } from '@kubb/core'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\n/**\n * Converting UserConfig to Config without a change in the object beside the JSON convert.\n */\nexport async function getConfig(result: CosmiconfigResult, args: Args): Promise<Array<Config> | Config> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return {\n ...item,\n plugins: item.plugins ? await getPlugins(item.plugins) : undefined,\n }\n }) as unknown as Array<Promise<Config>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as Config\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import { bundleRequire } from 'bundle-require'\nimport { cosmiconfig } from 'cosmiconfig'\n\nimport type { UserConfig, defineConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n })\n\n return mod.default\n}\n\nconst jsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n format: 'cjs',\n })\n\n return mod.default || mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","import c from 'tinyrainbow'\nimport { createLogger } from '@kubb/core/logger'\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 const logger = createLogger()\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n logger.emit('info', c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n\n try {\n cb(path)\n } catch (e) {\n logger?.emit('warning', c.red('Watcher failed'))\n }\n })\n\n return\n}\n"],"mappings":"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","names":["c","args","path","createLogger","args","command","c"]}
@@ -3,22 +3,18 @@
3
3
 
4
4
 
5
5
 
6
-
7
- var _chunkNKSXZ2SMcjs = require('./chunk-NKSXZ2SM.cjs');
6
+ var _chunk7CMTKETPcjs = require('./chunk-7CMTKETP.cjs');
8
7
 
9
8
  // src/commands/generate.ts
10
- _chunkNKSXZ2SMcjs.init_cjs_shims.call(void 0, );
11
- var _logger = require('@kubb/core/logger');
9
+ _chunk7CMTKETPcjs.init_cjs_shims.call(void 0, );
12
10
  var _citty = require('citty');
13
- var _path = require('path'); var _path2 = _interopRequireDefault(_path);
14
11
 
15
12
  // src/utils/getConfig.ts
16
- _chunkNKSXZ2SMcjs.init_cjs_shims.call(void 0, );
13
+ _chunk7CMTKETPcjs.init_cjs_shims.call(void 0, );
17
14
  var _utils = require('@kubb/core/utils');
18
15
 
19
16
  // src/utils/getPlugins.ts
20
- _chunkNKSXZ2SMcjs.init_cjs_shims.call(void 0, );
21
- var _core = require('@kubb/core');
17
+ _chunk7CMTKETPcjs.init_cjs_shims.call(void 0, );
22
18
  function isJSONPlugins(plugins) {
23
19
  return !!_optionalChain([plugins, 'optionalAccess', _2 => _2.some, 'call', _3 => _3((plugin) => {
24
20
  return Array.isArray(plugin) && typeof _optionalChain([plugin, 'optionalAccess', _4 => _4.at, 'call', _5 => _5(0)]) === "string";
@@ -66,7 +62,7 @@ async function getConfig(result, args2) {
66
62
  }
67
63
 
68
64
  // src/utils/getCosmiConfig.ts
69
- _chunkNKSXZ2SMcjs.init_cjs_shims.call(void 0, );
65
+ _chunk7CMTKETPcjs.init_cjs_shims.call(void 0, );
70
66
  var _bundlerequire = require('bundle-require');
71
67
  var _cosmiconfig = require('cosmiconfig');
72
68
  var tsLoader = async (configFile) => {
@@ -115,27 +111,30 @@ async function getCosmiConfig(moduleName, config) {
115
111
  }
116
112
 
117
113
  // src/utils/watcher.ts
118
- _chunkNKSXZ2SMcjs.init_cjs_shims.call(void 0, );
114
+ _chunk7CMTKETPcjs.init_cjs_shims.call(void 0, );
115
+ var _logger = require('@kubb/core/logger');
119
116
  async function startWatcher(path2, cb) {
120
117
  const { watch } = await Promise.resolve().then(() => _interopRequireWildcard(require("chokidar")));
121
118
  const ignored = ["**/{.git,node_modules}/**"];
119
+ const logger = _logger.createLogger.call(void 0, );
122
120
  const watcher = watch(path2, {
123
121
  ignorePermissionErrors: true,
124
122
  ignored
125
123
  });
126
124
  watcher.on("all", (type, file) => {
127
- _chunkNKSXZ2SMcjs.spinner.succeed(_chunkNKSXZ2SMcjs.p.yellow(_chunkNKSXZ2SMcjs.p.bold(`Change detected: ${type} ${file}`)));
128
- _chunkNKSXZ2SMcjs.spinner.spinner = "clock";
125
+ logger.emit("info", _chunk7CMTKETPcjs.p.yellow(_chunk7CMTKETPcjs.p.bold(`Change detected: ${type} ${file}`)));
129
126
  try {
130
127
  cb(path2);
131
128
  } catch (e) {
132
- _chunkNKSXZ2SMcjs.spinner.warn(_chunkNKSXZ2SMcjs.p.red("Watcher failed"));
129
+ _optionalChain([logger, 'optionalAccess', _8 => _8.emit, 'call', _9 => _9("warning", _chunk7CMTKETPcjs.p.red("Watcher failed"))]);
133
130
  }
134
131
  });
135
132
  return;
136
133
  }
137
134
 
138
135
  // src/commands/generate.ts
136
+ var _core = require('@kubb/core');
137
+ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
139
138
 
140
139
  var args = {
141
140
  config: {
@@ -147,8 +146,8 @@ var args = {
147
146
  type: "string",
148
147
  description: "Info, silent or debug",
149
148
  alias: "l",
150
- default: _logger.LogLevel.info,
151
- valueHint: `${_logger.LogLevel.silent}|${_logger.LogLevel.info}|${_logger.LogLevel.debug}`
149
+ default: "info",
150
+ valueHint: "silent|info|debug"
152
151
  },
153
152
  watch: {
154
153
  type: "boolean",
@@ -181,9 +180,6 @@ var command = _citty.defineCommand.call(void 0, {
181
180
  description: "[input] Generate files based on a 'kubb.config.ts' file"
182
181
  },
183
182
  args,
184
- setup() {
185
- _chunkNKSXZ2SMcjs.spinner.start("\u{1F50D} Loading config");
186
- },
187
183
  async run({ args: args2 }) {
188
184
  const input = args2._[0];
189
185
  if (args2.help) {
@@ -191,15 +187,20 @@ var command = _citty.defineCommand.call(void 0, {
191
187
  return;
192
188
  }
193
189
  if (args2.debug) {
194
- args2.logLevel = _logger.LogLevel.debug;
190
+ args2.logLevel = "debug";
195
191
  }
196
192
  if (args2.bun) {
197
193
  const command2 = process.argv.splice(2).filter((item) => item !== "--bun");
198
- await _chunkNKSXZ2SMcjs.execa.call(void 0, "bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
194
+ await _chunk7CMTKETPcjs.execa.call(void 0, "bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
199
195
  return;
200
196
  }
197
+ const logLevel = _logger.LogMapper[args2.logLevel] || 3;
198
+ const logger = _logger.createLogger.call(void 0, {
199
+ logLevel
200
+ });
201
+ logger.emit("start", "\u{1F50D} Loading config");
201
202
  const result = await getCosmiConfig("kubb", args2.config);
202
- _chunkNKSXZ2SMcjs.spinner.succeed(`\u{1F50D} Config loaded(${_chunkNKSXZ2SMcjs.p.dim(_path2.default.relative(process.cwd(), result.filepath))})`);
203
+ logger.emit("success", `\u{1F50D} Config loaded(${_chunk7CMTKETPcjs.p.dim(_path2.default.relative(process.cwd(), result.filepath))})`);
203
204
  const config = await getConfig(result, args2);
204
205
  if (args2.watch) {
205
206
  if (Array.isArray(config)) {
@@ -207,22 +208,21 @@ var command = _citty.defineCommand.call(void 0, {
207
208
  }
208
209
  if (_core.isInputPath.call(void 0, config)) {
209
210
  return startWatcher([input || config.input.path], async (paths) => {
210
- await _chunkNKSXZ2SMcjs.generate.call(void 0, { config, args: args2 });
211
- _chunkNKSXZ2SMcjs.spinner.spinner = "simpleDotsScrolling";
212
- _chunkNKSXZ2SMcjs.spinner.start(_chunkNKSXZ2SMcjs.p.yellow(_chunkNKSXZ2SMcjs.p.bold(`Watching for changes in ${paths.join(" and ")}`)));
211
+ await _chunk7CMTKETPcjs.generate.call(void 0, { config, args: args2 });
212
+ logger.emit("start", _chunk7CMTKETPcjs.p.yellow(_chunk7CMTKETPcjs.p.bold(`Watching for changes in ${paths.join(" and ")}`)));
213
213
  });
214
214
  }
215
215
  }
216
216
  if (Array.isArray(config)) {
217
217
  const promiseManager = new (0, _core.PromiseManager)();
218
- const promises = config.map((item) => () => _chunkNKSXZ2SMcjs.generate.call(void 0, { input, config: item, args: args2 }));
218
+ const promises = config.map((item) => () => _chunk7CMTKETPcjs.generate.call(void 0, { input, config: item, args: args2 }));
219
219
  return promiseManager.run("seq", promises);
220
220
  }
221
- await _chunkNKSXZ2SMcjs.generate.call(void 0, { input, config, args: args2 });
221
+ await _chunk7CMTKETPcjs.generate.call(void 0, { input, config, args: args2 });
222
222
  }
223
223
  });
224
224
  var generate_default = command;
225
225
 
226
226
 
227
227
  exports.default = generate_default;
228
- //# sourceMappingURL=generate-SW6IGE4J.cjs.map
228
+ //# sourceMappingURL=generate-ZGEX2WSJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/cli/dist/generate-ZGEX2WSJ.cjs","../src/commands/generate.ts","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/watcher.ts"],"names":["args"],"mappings":"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","file":"/home/runner/work/kubb/kubb/packages/cli/dist/generate-ZGEX2WSJ.cjs","sourcesContent":[null,"import { defineCommand, showUsage } from 'citty'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { execa } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nimport { PromiseManager, isInputPath } from '@kubb/core'\nimport { generate } from '../generate.ts'\nimport path from 'node:path'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\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 or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n bun: {\n type: 'boolean',\n description: 'Run Kubb with Bun',\n alias: 'b',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\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({ args }) {\n const input = args._[0]\n\n if (args.help) {\n showUsage(command)\n return\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.bun) {\n const command = process.argv.splice(2).filter((item) => item !== '--bun')\n\n await execa('bkubb', command, { stdout: process.stdout, stderr: process.stderr })\n return\n }\n\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n })\n\n logger.emit('start', '🔍 Loading config')\n\n const result = await getCosmiConfig('kubb', args.config)\n logger.emit('success', `🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, args)\n\n if (args.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple Configs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, args })\n logger.emit('start', c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, args }))\n\n return promiseManager.run('seq', promises)\n }\n\n await generate({ input, config, args })\n },\n})\n\nexport default command\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { Config, UserConfig } from '@kubb/core'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\n/**\n * Converting UserConfig to Config without a change in the object beside the JSON convert.\n */\nexport async function getConfig(result: CosmiconfigResult, args: Args): Promise<Array<Config> | Config> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return {\n ...item,\n plugins: item.plugins ? await getPlugins(item.plugins) : undefined,\n }\n }) as unknown as Array<Promise<Config>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as Config\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import { bundleRequire } from 'bundle-require'\nimport { cosmiconfig } from 'cosmiconfig'\n\nimport type { UserConfig, defineConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n })\n\n return mod.default\n}\n\nconst jsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n format: 'cjs',\n })\n\n return mod.default || mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","import c from 'tinyrainbow'\nimport { createLogger } from '@kubb/core/logger'\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 const logger = createLogger()\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n logger.emit('info', c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n\n try {\n cb(path)\n } catch (e) {\n logger?.emit('warning', c.red('Watcher failed'))\n }\n })\n\n return\n}\n"]}