@kubb/cli 2.21.1 → 2.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,476 +0,0 @@
1
- // src/commands/generate.ts
2
- import { LogLevel as LogLevel3 } from "@kubb/core/logger";
3
- import { defineCommand, showUsage } from "citty";
4
- import { execa as execa2 } from "execa";
5
- import c6 from "tinyrainbow";
6
- import path2 from "path";
7
-
8
- // src/utils/getConfig.ts
9
- import { isPromise } from "@kubb/core/utils";
10
-
11
- // src/utils/getPlugins.ts
12
- import { PackageManager } from "@kubb/core";
13
- function isJSONPlugins(plugins) {
14
- return !!plugins?.some((plugin) => {
15
- return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
16
- });
17
- }
18
- function isObjectPlugins(plugins) {
19
- return plugins instanceof Object && !Array.isArray(plugins);
20
- }
21
- async function importPlugin(name, options) {
22
- const packageManager = new PackageManager(process.cwd());
23
- const importedPlugin = process.env.NODE_ENV === "test" ? await import(name) : await packageManager.import(name);
24
- return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options);
25
- }
26
- function getPlugins(plugins) {
27
- if (isObjectPlugins(plugins)) {
28
- throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/guide/configure#json");
29
- }
30
- if (isJSONPlugins(plugins)) {
31
- const jsonPlugins = plugins;
32
- const promises = jsonPlugins.map((plugin) => {
33
- const [name, options = {}] = plugin;
34
- return importPlugin(name, options);
35
- });
36
- return Promise.all(promises);
37
- }
38
- return Promise.resolve(plugins);
39
- }
40
-
41
- // src/utils/getConfig.ts
42
- async function getConfig(result, args2) {
43
- const config = result?.config;
44
- let kubbUserConfig = Promise.resolve(config);
45
- if (typeof config === "function") {
46
- const possiblePromise = config(args2);
47
- if (isPromise(possiblePromise)) {
48
- kubbUserConfig = possiblePromise;
49
- }
50
- kubbUserConfig = Promise.resolve(possiblePromise);
51
- }
52
- let JSONConfig = await kubbUserConfig;
53
- if (Array.isArray(JSONConfig)) {
54
- const promises = JSONConfig.map(async (item) => {
55
- return {
56
- ...item,
57
- plugins: item.plugins ? await getPlugins(item.plugins) : void 0
58
- };
59
- });
60
- return Promise.all(promises);
61
- }
62
- JSONConfig = {
63
- ...JSONConfig,
64
- plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : void 0
65
- };
66
- return JSONConfig;
67
- }
68
-
69
- // src/utils/getCosmiConfig.ts
70
- import { bundleRequire } from "bundle-require";
71
- import { cosmiconfig } from "cosmiconfig";
72
- var tsLoader = async (configFile) => {
73
- const { mod } = await bundleRequire({
74
- filepath: configFile,
75
- preserveTemporaryFile: false
76
- });
77
- return mod.default;
78
- };
79
- async function getCosmiConfig(moduleName, config) {
80
- const searchPlaces = [
81
- "package.json",
82
- `.${moduleName}rc`,
83
- `.${moduleName}rc.json`,
84
- `.${moduleName}rc.yaml`,
85
- `.${moduleName}rc.yml`,
86
- `.${moduleName}rc.ts`,
87
- `.${moduleName}rc.js`,
88
- `.${moduleName}rc.mjs`,
89
- `.${moduleName}rc.cjs`,
90
- `${moduleName}.config.ts`,
91
- `${moduleName}.config.js`,
92
- `${moduleName}.config.mjs`,
93
- `${moduleName}.config.cjs`
94
- ];
95
- const explorer = cosmiconfig(moduleName, {
96
- cache: false,
97
- searchPlaces: [
98
- ...searchPlaces.map((searchPlace) => {
99
- return `.config/${searchPlace}`;
100
- }),
101
- ...searchPlaces.map((searchPlace) => {
102
- return `configs/${searchPlace}`;
103
- }),
104
- ...searchPlaces
105
- ],
106
- loaders: {
107
- ".ts": tsLoader
108
- }
109
- });
110
- const result = config ? await explorer.load(config) : await explorer.search();
111
- if (result?.isEmpty || !result || !result.config) {
112
- throw new Error("Config not defined, create a kubb.config.js or pass through your config with the option --config");
113
- }
114
- return result;
115
- }
116
-
117
- // src/utils/spinner.ts
118
- import ora from "ora";
119
- var spinner = ora({
120
- spinner: "clock"
121
- });
122
-
123
- // src/utils/watcher.ts
124
- import c from "tinyrainbow";
125
- async function startWatcher(path3, cb) {
126
- const { watch } = await import("chokidar");
127
- const ignored = ["**/{.git,node_modules}/**"];
128
- const watcher = watch(path3, {
129
- ignorePermissionErrors: true,
130
- ignored
131
- });
132
- watcher.on("all", (type, file) => {
133
- spinner.succeed(c.yellow(c.bold(`Change detected: ${type} ${file}`)));
134
- spinner.spinner = "clock";
135
- try {
136
- cb(path3);
137
- } catch (e) {
138
- spinner.warn(c.red("Watcher failed"));
139
- }
140
- });
141
- return;
142
- }
143
-
144
- // src/commands/generate.ts
145
- import { PromiseManager, isInputPath } from "@kubb/core";
146
-
147
- // src/generate.ts
148
- import { LogLevel as LogLevel2, LogMapper, createLogger, randomCliColour as randomCliColour2 } from "@kubb/core/logger";
149
- import c5 from "tinyrainbow";
150
- import { Warning, safeBuild } from "@kubb/core";
151
- import { createConsola } from "consola";
152
-
153
- // src/utils/executeHooks.ts
154
- import { LogLevel } from "@kubb/core/logger";
155
- import { execa } from "execa";
156
- import { parseArgsStringToArgv } from "string-argv";
157
- import c3 from "tinyrainbow";
158
-
159
- // src/utils/OraWritable.ts
160
- import { Writable } from "stream";
161
- import c2 from "tinyrainbow";
162
- var OraWritable = class extends Writable {
163
- constructor(spinner2, command2, opts) {
164
- super(opts);
165
- this.command = command2;
166
- this.spinner = spinner2;
167
- }
168
- _write(chunk, _encoding, callback) {
169
- this.spinner.suffixText = `
170
-
171
- ${c2.bold(c2.blue(this.command))}: ${chunk?.toString()}`;
172
- callback();
173
- }
174
- };
175
-
176
- // src/utils/executeHooks.ts
177
- async function executeHooks({ hooks, logLevel }) {
178
- if (!hooks?.done) {
179
- return;
180
- }
181
- const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done];
182
- if (logLevel === LogLevel.silent) {
183
- spinner.start("Executing hooks");
184
- }
185
- const executers = commands.map(async (command2) => {
186
- const oraWritable = new OraWritable(spinner, command2);
187
- const abortController = new AbortController();
188
- const [cmd, ..._args] = [...parseArgsStringToArgv(command2)];
189
- if (!cmd) {
190
- return null;
191
- }
192
- spinner.start(`Executing hook ${logLevel !== "silent" ? c3.dim(command2) : ""}`);
193
- const subProcess = await execa(cmd, _args, {
194
- detached: true,
195
- signal: abortController.signal
196
- }).pipeStdout?.(oraWritable);
197
- spinner.suffixText = "";
198
- if (logLevel === LogLevel.silent) {
199
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? c3.dim(command2) : ""}`);
200
- if (subProcess) {
201
- console.log(subProcess.stdout);
202
- }
203
- }
204
- oraWritable.destroy();
205
- return { subProcess, abort: abortController.abort.bind(abortController) };
206
- }).filter(Boolean);
207
- await Promise.all(executers);
208
- if (logLevel === LogLevel.silent) {
209
- spinner.succeed("Executing hooks");
210
- }
211
- }
212
-
213
- // src/utils/getErrorCauses.ts
214
- function getErrorCauses(errors) {
215
- return errors.reduce((prev, error) => {
216
- const causedError = error?.cause;
217
- if (causedError) {
218
- prev = [...prev, ...getErrorCauses([causedError])];
219
- return prev;
220
- }
221
- prev = [...prev, error];
222
- return prev;
223
- }, []).filter(Boolean);
224
- }
225
-
226
- // src/utils/getSummary.ts
227
- import path from "path";
228
- import { randomCliColour } from "@kubb/core/logger";
229
- import c4 from "tinyrainbow";
230
-
231
- // src/utils/parseHrtimeToSeconds.ts
232
- function parseHrtimeToSeconds(hrtime) {
233
- const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
234
- return seconds;
235
- }
236
-
237
- // src/utils/getSummary.ts
238
- function getSummary({ pluginManager, status, hrstart, config, logger }) {
239
- const { logLevel } = logger;
240
- const logs = [];
241
- const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
242
- const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
243
- const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === "buildEnd" && item.plugin.name !== "core").map((item) => item.plugin.name);
244
- const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
245
- const pluginsCount = config.plugins?.length || 0;
246
- const files = pluginManager.fileManager.files.sort((a, b) => {
247
- if (!a.meta?.pluginKey?.[0] || !b.meta?.pluginKey?.[0]) {
248
- return 0;
249
- }
250
- if (a.meta?.pluginKey?.[0]?.length < b.meta?.pluginKey?.[0]?.length) {
251
- return 1;
252
- }
253
- if (a.meta?.pluginKey?.[0]?.length > b.meta?.pluginKey?.[0]?.length) {
254
- return -1;
255
- }
256
- return 0;
257
- });
258
- const meta = {
259
- name: config.name,
260
- plugins: status === "success" ? `${c4.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c4.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
261
- pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
262
- filesCreated: files.length,
263
- time: c4.yellow(`${elapsedSeconds}s`),
264
- endTime: c4.yellow(Date()),
265
- output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root
266
- };
267
- logger.emit("debug", ["\nGenerated files:\n"]);
268
- logger.emit(
269
- "debug",
270
- files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`)
271
- );
272
- logs.push(
273
- [
274
- ["\n", true],
275
- [` ${c4.bold("Name:")} ${meta.name}`, !!meta.name],
276
- [` ${c4.bold("Plugins:")} ${meta.plugins}`, true],
277
- [` ${c4.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
278
- [`${c4.bold("Generated:")} ${meta.filesCreated} files`, true],
279
- [` ${c4.bold("Time:")} ${meta.time}`, true],
280
- [` ${c4.bold("Ended:")} ${meta.endTime}`, true],
281
- [` ${c4.bold("Output:")} ${meta.output}`, true]
282
- ].map((item) => {
283
- if (item.at(1)) {
284
- return item.at(0);
285
- }
286
- return void 0;
287
- }).filter(Boolean).join("\n")
288
- );
289
- return logs;
290
- }
291
-
292
- // src/utils/writeLog.ts
293
- import { resolve } from "path";
294
- import { read, write } from "@kubb/fs";
295
- async function writeLog(data) {
296
- if (data.trim() === "") {
297
- return void 0;
298
- }
299
- const path3 = resolve(process.cwd(), "kubb-log.log");
300
- let previousLogs = "";
301
- try {
302
- previousLogs = await read(resolve(path3));
303
- } catch (_err) {
304
- }
305
- return write(path3, [previousLogs, data.trim()].filter(Boolean).join("\n\n\n"), { sanity: false });
306
- }
307
-
308
- // src/generate.ts
309
- async function generate({ input, config, args: args2 }) {
310
- const logLevel = args2.logLevel || LogLevel2.silent;
311
- const logger = createLogger({
312
- logLevel,
313
- name: config.name,
314
- spinner,
315
- consola: createConsola({
316
- level: LogMapper[logLevel] || 3
317
- })
318
- });
319
- logger.on("debug", async (messages) => {
320
- if (logLevel === LogLevel2.debug) {
321
- await writeLog(messages.join("\n"));
322
- }
323
- });
324
- logger.consola?.wrapConsole();
325
- if (logger.name) {
326
- spinner.prefixText = randomCliColour2(logger.name);
327
- }
328
- const hrstart = process.hrtime();
329
- if (args2.logLevel === LogLevel2.debug) {
330
- const { performance, PerformanceObserver } = await import("perf_hooks");
331
- const performanceOpserver = new PerformanceObserver((items) => {
332
- const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
333
- spinner.suffixText = c5.yellow(message);
334
- performance.clearMarks();
335
- });
336
- performanceOpserver.observe({ type: "measure" });
337
- }
338
- const { root = process.cwd(), ...userConfig } = config;
339
- const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
340
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c5.dim(inputPath) : ""}`);
341
- const definedConfig = {
342
- root,
343
- ...userConfig,
344
- input: inputPath ? {
345
- ...userConfig.input,
346
- path: inputPath
347
- } : userConfig.input,
348
- output: {
349
- write: true,
350
- ...userConfig.output
351
- }
352
- };
353
- const { pluginManager, error } = await safeBuild({
354
- config: definedConfig,
355
- logger
356
- });
357
- const summary = getSummary({
358
- pluginManager,
359
- config: definedConfig,
360
- status: error ? "failed" : "success",
361
- hrstart,
362
- logger
363
- });
364
- if (error) {
365
- spinner.suffixText = "";
366
- spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? c5.dim(inputPath) : ""}`);
367
- console.log(summary.join(""));
368
- if (error instanceof Warning) {
369
- spinner.warn(c5.yellow(error.message));
370
- process.exit(0);
371
- }
372
- const errors = getErrorCauses([error]);
373
- if (logger.consola && errors.length && logLevel === LogLevel2.debug) {
374
- errors.forEach((err) => {
375
- logger.consola.error(err);
376
- });
377
- }
378
- logger.consola?.error(error);
379
- process.exit(0);
380
- }
381
- await executeHooks({ hooks: config.hooks, logLevel });
382
- spinner.suffixText = "";
383
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? c5.dim(inputPath) : ""}`);
384
- console.log(summary.join(""));
385
- }
386
-
387
- // src/commands/generate.ts
388
- var args = {
389
- config: {
390
- type: "string",
391
- description: "Path to the Kubb config",
392
- alias: "c"
393
- },
394
- logLevel: {
395
- type: "string",
396
- description: "Info, silent or debug",
397
- alias: "l",
398
- default: LogLevel3.info,
399
- valueHint: `${LogLevel3.silent}|${LogLevel3.info}|${LogLevel3.debug}`
400
- },
401
- watch: {
402
- type: "boolean",
403
- description: "Watch mode based on the input file",
404
- alias: "w",
405
- default: false
406
- },
407
- bun: {
408
- type: "boolean",
409
- description: "Run Kubb with Bun",
410
- alias: "b",
411
- default: false
412
- },
413
- debug: {
414
- type: "boolean",
415
- description: "Override logLevel to debug",
416
- alias: "d",
417
- default: false
418
- },
419
- help: {
420
- type: "boolean",
421
- description: "Show help",
422
- alias: "h",
423
- default: false
424
- }
425
- };
426
- var command = defineCommand({
427
- meta: {
428
- name: "generate",
429
- description: "[input] Generate files based on a 'kubb.config.ts' file"
430
- },
431
- args,
432
- setup() {
433
- spinner.start("\u{1F50D} Loading config");
434
- },
435
- async run({ args: args2 }) {
436
- const input = args2._[0];
437
- if (args2.help) {
438
- showUsage(command);
439
- return;
440
- }
441
- if (args2.debug) {
442
- args2.logLevel = LogLevel3.debug;
443
- }
444
- if (args2.bun) {
445
- const command2 = process.argv.splice(2).filter((item) => item !== "--bun");
446
- await execa2("bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
447
- return;
448
- }
449
- const result = await getCosmiConfig("kubb", args2.config);
450
- spinner.succeed(`\u{1F50D} Config loaded(${c6.dim(path2.relative(process.cwd(), result.filepath))})`);
451
- const config = await getConfig(result, args2);
452
- if (args2.watch) {
453
- if (Array.isArray(config)) {
454
- throw new Error("Cannot use watcher with multiple Configs(array)");
455
- }
456
- if (isInputPath(config)) {
457
- return startWatcher([input || config.input.path], async (paths) => {
458
- await generate({ config, args: args2 });
459
- spinner.spinner = "simpleDotsScrolling";
460
- spinner.start(c6.yellow(c6.bold(`Watching for changes in ${paths.join(" and ")}`)));
461
- });
462
- }
463
- }
464
- if (Array.isArray(config)) {
465
- const promiseManager = new PromiseManager();
466
- const promises = config.map((item) => () => generate({ input, config: item, args: args2 }));
467
- return promiseManager.run("seq", promises);
468
- }
469
- await generate({ input, config, args: args2 });
470
- }
471
- });
472
- var generate_default = command;
473
- export {
474
- generate_default as default
475
- };
476
- //# sourceMappingURL=generate-SXM56MPF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/generate.ts","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/executeHooks.ts","../src/utils/OraWritable.ts","../src/utils/getErrorCauses.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/writeLog.ts"],"sourcesContent":["import { LogLevel } from '@kubb/core/logger'\nimport { defineCommand, showUsage } from 'citty'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { execa } from 'execa'\nimport c from 'tinyrainbow'\n\nimport path from 'node:path'\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { spinner } from '../utils/spinner.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nimport { PromiseManager, isInputPath } from '@kubb/core'\nimport { generate } from '../generate.ts'\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n logLevel: {\n type: 'string',\n description: 'Info, silent or debug',\n alias: 'l',\n default: LogLevel.info,\n valueHint: `${LogLevel.silent}|${LogLevel.info}|${LogLevel.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 setup() {\n spinner.start('🔍 Loading config')\n },\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 = 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 result = await getCosmiConfig('kubb', args.config)\n spinner.succeed(`🔍 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 spinner.spinner = 'simpleDotsScrolling'\n spinner.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 { PackageManager } from '@kubb/core'\n\nimport type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\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\nasync function importPlugin(name: string, options: object): Promise<UserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\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/guide/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n const jsonPlugins = plugins as Array<[name: string, options: object]>\n const promises = jsonPlugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options)\n })\n return Promise.all(promises) as Promise<UserConfig['plugins']>\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 ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import c from 'tinyrainbow'\n\nimport { spinner } from './spinner.ts'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n spinner.succeed(c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(c.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { LogLevel, LogMapper, createLogger, randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { spinner } from './utils/spinner.ts'\n\nimport { type Config, Warning, safeBuild } from '@kubb/core'\nimport { createConsola } from 'consola'\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'\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 = (args.logLevel as LogLevel) || LogLevel.silent\n const logger = createLogger({\n logLevel,\n name: config.name,\n spinner,\n consola: createConsola({\n level: LogMapper[logLevel] || 3,\n }),\n })\n\n logger.on('debug', async (messages: string[]) => {\n if (logLevel === LogLevel.debug) {\n await writeLog(messages.join('\\n'))\n }\n })\n\n logger.consola?.wrapConsole()\n\n if (logger.name) {\n spinner.prefixText = randomCliColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (args.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = c.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n const { root = process.cwd(), ...userConfig } = config\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== '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 { 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) {\n spinner.suffixText = ''\n spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n\n if (error instanceof Warning) {\n spinner.warn(c.yellow(error.message))\n process.exit(0)\n }\n\n const errors = getErrorCauses([error])\n if (logger.consola && errors.length && logLevel === LogLevel.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 await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n}\n","import { LogLevel } from '@kubb/core/logger'\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { OraWritable } from './OraWritable.ts'\nimport { spinner } from './spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { Config } from '@kubb/core'\n\ntype ExecutingHooksProps = {\n hooks: Config['hooks']\n logLevel: LogLevel\n}\n\nexport async function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start('Executing hooks')\n }\n\n const executers = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, {\n detached: true,\n signal: abortController.signal,\n }).pipeStdout?.(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)\n\n if (subProcess) {\n console.log(subProcess.stdout)\n }\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed('Executing hooks')\n }\n}\n","import { Writable } from 'node:stream'\n\nimport c from 'tinyrainbow'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${c.bold(c.blue(this.command))}: ${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 { logLevel } = logger\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 name: config.name,\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`),\n endTime: c.yellow(Date()),\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 ['\\n', true],\n [` ${c.bold('Name:')} ${meta.name}`, !!meta.name],\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('Ended:')} ${meta.endTime}`, 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":["LogLevel","execa","c","path","args","path","LogLevel","randomCliColour","c","c","c","spinner","command","command","c","c","c","path","args","LogLevel","randomCliColour","c","LogLevel","args","command","execa","c","path"]}