@kubb/cli 3.0.0-alpha.3 → 3.0.0-alpha.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.
@@ -1,74 +1,56 @@
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, LogMapper as LogMapper2 } 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
+ import * as process2 from "process";
15
+ var ConsolaWritable = class extends Writable {
16
+ constructor(consola, command, opts) {
24
17
  super(opts);
25
18
  this.command = command;
26
- this.spinner = spinner2;
19
+ this.consola = consola;
27
20
  }
28
21
  _write(chunk, _encoding, callback) {
29
- this.spinner.suffixText = `
30
-
31
- ${c.bold(c.blue(this.command))}: ${chunk?.toString()}`;
22
+ process2.stdout.write(c.dim(chunk?.toString()));
32
23
  callback();
33
24
  }
34
25
  };
35
26
 
36
27
  // 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);
47
- const abortController = new AbortController();
28
+ import { LogMapper } from "@kubb/core/logger";
29
+ import PQueue from "p-queue";
30
+ async function executeHooks({ hooks, logger }) {
31
+ const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean);
32
+ const queue = new PQueue({ concurrency: 1 });
33
+ const promises = commands.map(async (command) => {
34
+ const consolaWritable = new ConsolaWritable(logger.consola, command);
48
35
  const [cmd, ..._args] = [...parseArgsStringToArgv(command)];
49
36
  if (!cmd) {
50
37
  return null;
51
38
  }
52
- spinner.start(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
53
- const subProcess = await execa(cmd, _args, {
54
- detached: true,
55
- cancelSignal: abortController.signal,
56
- stdout: ["pipe", oraWritable]
57
- });
58
- spinner.suffixText = "";
59
- if (logLevel === LogLevel.silent) {
60
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
39
+ await queue.add(async () => {
40
+ logger.emit("start", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
41
+ const subProcess = await execa(cmd, _args, {
42
+ detached: true,
43
+ stdout: logger.logLevel === LogMapper.silent ? void 0 : ["pipe", consolaWritable],
44
+ stripFinalNewline: true
45
+ });
46
+ logger.emit("success", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
61
47
  if (subProcess) {
62
- console.log(subProcess.stdout);
48
+ logger.emit("debug", [subProcess.stdout]);
63
49
  }
64
- }
65
- oraWritable.destroy();
66
- return { subProcess, abort: abortController.abort.bind(abortController) };
67
- }).filter(Boolean);
68
- await Promise.all(executers);
69
- if (logLevel === LogLevel.silent) {
70
- spinner.succeed("Executing hooks");
71
- }
50
+ });
51
+ });
52
+ await Promise.all(promises);
53
+ logger.emit("success", "Executing hooks");
72
54
  }
73
55
 
74
56
  // src/utils/getErrorCauses.ts
@@ -96,10 +78,9 @@ function parseHrtimeToSeconds(hrtime) {
96
78
  }
97
79
 
98
80
  // src/utils/getSummary.ts
99
- function getSummary({ pluginManager, status, hrstart, config, logger }) {
100
- const { logLevel } = logger;
81
+ function getSummary({ pluginManager, status, hrStart, config, logger }) {
101
82
  const logs = [];
102
- const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
83
+ const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart));
103
84
  const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
104
85
  const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === "buildEnd" && item.plugin.name !== "core").map((item) => item.plugin.name);
105
86
  const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
@@ -117,29 +98,19 @@ function getSummary({ pluginManager, status, hrstart, config, logger }) {
117
98
  return 0;
118
99
  });
119
100
  const meta = {
120
- name: config.name,
121
101
  plugins: status === "success" ? `${c3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c3.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
122
102
  pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
123
103
  filesCreated: files.length,
124
- time: c3.yellow(`${elapsedSeconds}s`),
125
- endTime: c3.yellow(Date()),
104
+ time: `${c3.yellow(`${elapsedSeconds}s`)} - finished at ${c3.yellow((/* @__PURE__ */ new Date()).toLocaleString("en-GB", { timeZone: "UTC" }))}`,
126
105
  output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root
127
106
  };
128
- logger.emit("debug", ["\nGenerated files:\n"]);
129
- logger.emit(
130
- "debug",
131
- files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`)
132
- );
133
107
  logs.push(
134
108
  [
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],
109
+ [`${c3.bold("Plugins:")} ${meta.plugins}`, true],
110
+ [`${c3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
139
111
  [`${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]
112
+ [`${c3.bold("Time:")} ${meta.time}`, true],
113
+ [`${c3.bold("Output:")} ${meta.output}`, true]
143
114
  ].map((item) => {
144
115
  if (item.at(1)) {
145
116
  return item.at(0);
@@ -167,38 +138,39 @@ async function writeLog(data) {
167
138
  }
168
139
 
169
140
  // src/generate.ts
141
+ import { SingleBar, Presets } from "cli-progress";
142
+ import "@kubb/fs";
143
+ import { relative } from "path";
170
144
  async function generate({ input, config, args }) {
171
- const logLevel = args.logLevel || LogLevel2.silent;
145
+ const logLevel = LogMapper2[args.logLevel] || 3;
172
146
  const logger = createLogger({
173
147
  logLevel,
174
- name: config.name,
175
- spinner,
176
- consola: createConsola({
177
- level: LogMapper[logLevel] || 3
178
- })
148
+ name: config.name
179
149
  });
180
- logger.on("debug", async (messages) => {
181
- if (logLevel === LogLevel2.debug) {
182
- await writeLog(messages.join("\n"));
150
+ const progress = new SingleBar(
151
+ {
152
+ format: logLevel === LogMapper2.info ? "{percentage}% {bar} {value}/{total} files | ETA: {eta}s | {filename}" : "{percentage}% {bar} ETA: {eta}s",
153
+ barsize: 40,
154
+ fps: 5,
155
+ clearOnComplete: true
156
+ },
157
+ Presets.shades_grey
158
+ );
159
+ logger.on("progress", ({ count, size, file }) => {
160
+ if (count === 0) {
161
+ progress.start(size, 0);
162
+ } else if (count === size) {
163
+ progress.stop();
164
+ } else {
165
+ progress.update(count, { filename: relative(config.root, file.path) || "" });
183
166
  }
184
167
  });
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
- }
168
+ logger.on("debug", async (messages) => {
169
+ await writeLog(messages.join("\n"));
170
+ });
199
171
  const { root = process.cwd(), ...userConfig } = config;
200
172
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
201
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c4.dim(inputPath) : ""}`);
173
+ logger.emit("start", `Building ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
202
174
  const definedConfig = {
203
175
  root,
204
176
  ...userConfig,
@@ -211,6 +183,7 @@ async function generate({ input, config, args }) {
211
183
  ...userConfig.output
212
184
  }
213
185
  };
186
+ const hrStart = process.hrtime();
214
187
  const { pluginManager, error } = await safeBuild({
215
188
  config: definedConfig,
216
189
  logger
@@ -219,34 +192,45 @@ async function generate({ input, config, args }) {
219
192
  pluginManager,
220
193
  config: definedConfig,
221
194
  status: error ? "failed" : "success",
222
- hrstart,
195
+ hrStart,
223
196
  logger
224
197
  });
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
- }
198
+ if (error && logger.consola) {
199
+ logger.consola.error(`Build failed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
200
+ logger.consola.box({
201
+ title: `${config.name || ""}`,
202
+ message: summary.join(""),
203
+ style: {
204
+ padding: 2,
205
+ borderColor: "red",
206
+ borderStyle: "rounded"
207
+ }
208
+ });
233
209
  const errors = getErrorCauses([error]);
234
- if (logger.consola && errors.length && logLevel === LogLevel2.debug) {
210
+ if (logger.consola && errors.length && logLevel === LogMapper2.debug) {
235
211
  errors.forEach((err) => {
236
- logger.consola.error(err);
212
+ logger.consola?.error(err);
237
213
  });
238
214
  }
239
215
  logger.consola?.error(error);
240
216
  process.exit(0);
241
217
  }
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(""));
218
+ if (config.hooks) {
219
+ await executeHooks({ hooks: config.hooks, logger });
220
+ }
221
+ logger.consola?.log(`\u26A1\uFE0FBuild completed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
222
+ logger.consola?.box({
223
+ title: `${config.name || ""}`,
224
+ message: summary.join(""),
225
+ style: {
226
+ padding: 2,
227
+ borderColor: "green",
228
+ borderStyle: "rounded"
229
+ }
230
+ });
246
231
  }
247
232
 
248
233
  export {
249
- spinner,
250
234
  generate
251
235
  };
252
- //# sourceMappingURL=chunk-VGYRBGKV.js.map
236
+ //# sourceMappingURL=chunk-WJ72QPXS.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, LogMapper } 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 type * as KubbFile from '@kubb/fs/types'\n\nimport { SingleBar, Presets } from 'cli-progress'\nimport { getRelativePath } from '@kubb/fs'\nimport { relative } from 'node:path'\n\ntype GenerateProps = {\n input?: string\n config: Config\n args: Args\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 = new SingleBar(\n {\n format: logLevel === LogMapper.info ? '{percentage}% {bar} {value}/{total} files | ETA: {eta}s | {filename}' : '{percentage}% {bar} ETA: {eta}s',\n barsize: 40,\n fps: 5,\n clearOnComplete: true,\n },\n Presets.shades_grey,\n )\n\n logger.on('progress', ({ count, size, file }) => {\n if (count === 0) {\n progress.start(size, 0)\n } else if (count === size) {\n progress.stop()\n } else {\n progress.update(count, { filename: relative(config.root, file.path) || '' })\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?.log(`⚡️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'\nimport PQueue from 'p-queue'\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 const queue = new PQueue({ concurrency: 1 })\n\n const promises = commands.map(async (command) => {\n const consolaWritable = new ConsolaWritable(logger.consola!, command)\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n await queue.add(async () => {\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 stdout: logger.logLevel === LogMapper.silent ? undefined : ['pipe', consolaWritable],\n stripFinalNewline: true,\n })\n\n logger.emit('success', `Executing hook ${logger.logLevel !== LogMapper.silent ? c.dim(command) : ''}`)\n\n if (subProcess) {\n logger.emit('debug', [subProcess.stdout])\n }\n })\n })\n\n await Promise.all(promises)\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'\nimport * as process from 'node:process'\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 process.stdout.write(c.dim(chunk?.toString()))\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 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":["LogMapper","c","c","process","c","c","c","path","LogMapper","c"]}
@@ -1,20 +1,16 @@
1
1
  import {
2
- generate,
3
- spinner
4
- } from "./chunk-VGYRBGKV.js";
2
+ generate
3
+ } from "./chunk-WJ72QPXS.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", "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", `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-LZOUPH5K.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 _chunkH3BA33NFcjs = require('./chunk-H3BA33NF.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
+ _chunkH3BA33NFcjs.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
+ _chunkH3BA33NFcjs.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
+ _chunkH3BA33NFcjs.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
+ _chunkH3BA33NFcjs.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
+ _chunkH3BA33NFcjs.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", _chunkH3BA33NFcjs.p.yellow(_chunkH3BA33NFcjs.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", _chunkH3BA33NFcjs.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 _chunkH3BA33NFcjs.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", "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", `Config loaded(${_chunkH3BA33NFcjs.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 _chunkH3BA33NFcjs.generate.call(void 0, { config, args: args2 });
212
+ logger.emit("start", _chunkH3BA33NFcjs.p.yellow(_chunkH3BA33NFcjs.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) => () => _chunkH3BA33NFcjs.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 _chunkH3BA33NFcjs.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-M3IAQ4OY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/cli/dist/generate-M3IAQ4OY.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-M3IAQ4OY.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"]}