@kubb/cli 2.0.0-beta.10 → 2.0.0-beta.12

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.
package/dist/index.cjs CHANGED
@@ -5,20 +5,22 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var path = require('path');
6
6
  var core = require('@kubb/core');
7
7
  var cac = require('cac');
8
- var pc2 = require('picocolors');
8
+ var c2 = require('tinyrainbow');
9
9
  var utils = require('@kubb/core/utils');
10
10
  var cosmiconfig = require('cosmiconfig');
11
11
  var tsNode = require('ts-node');
12
+ var logger = require('@kubb/core/logger');
12
13
  var PrettyError = require('pretty-error');
13
14
  var ora = require('ora');
14
15
  var execa = require('execa');
15
16
  var stringArgv = require('string-argv');
16
17
  var stream = require('stream');
18
+ var fs = require('@kubb/core/fs');
17
19
 
18
20
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
21
 
20
22
  var path__default = /*#__PURE__*/_interopDefault(path);
21
- var pc2__default = /*#__PURE__*/_interopDefault(pc2);
23
+ var c2__default = /*#__PURE__*/_interopDefault(c2);
22
24
  var tsNode__default = /*#__PURE__*/_interopDefault(tsNode);
23
25
  var PrettyError__default = /*#__PURE__*/_interopDefault(PrettyError);
24
26
  var ora__default = /*#__PURE__*/_interopDefault(ora);
@@ -32,7 +34,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
32
34
  });
33
35
 
34
36
  // package.json
35
- var version = "2.0.0-beta.10";
37
+ var version = "2.0.0-beta.12";
36
38
  function isJSONPlugins(plugins) {
37
39
  return !!plugins?.some((plugin) => {
38
40
  return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
@@ -160,11 +162,11 @@ function getErrorCauses(errors) {
160
162
  return prev;
161
163
  }, []).filter(Boolean);
162
164
  }
163
- function renderErrors(error, { logLevel = utils.LogLevel.silent }) {
165
+ function renderErrors(error, { logLevel = logger.LogLevel.silent }) {
164
166
  if (!error) {
165
167
  return "";
166
168
  }
167
- if (logLevel === utils.LogLevel.silent) {
169
+ if (logLevel === logger.LogLevel.silent) {
168
170
  prettyError.skipNodeFiles();
169
171
  prettyError.skip(function skip() {
170
172
  return true;
@@ -185,12 +187,12 @@ async function startWatcher(path4, cb) {
185
187
  ignored
186
188
  });
187
189
  watcher.on("all", (type, file) => {
188
- spinner.succeed(pc2__default.default.yellow(pc2__default.default.bold(`Change detected: ${type} ${file}`)));
190
+ spinner.succeed(c2__default.default.yellow(c2__default.default.bold(`Change detected: ${type} ${file}`)));
189
191
  spinner.spinner = "clock";
190
192
  try {
191
193
  cb(path4);
192
194
  } catch (e) {
193
- spinner.warn(pc2__default.default.red("Watcher failed"));
195
+ spinner.warn(c2__default.default.red("Watcher failed"));
194
196
  }
195
197
  });
196
198
  return;
@@ -224,26 +226,26 @@ function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
224
226
  });
225
227
  const meta = {
226
228
  name: config.name,
227
- plugins: status === "success" ? `${pc2__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc2__default.default.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
228
- pluginsFailed: status === "failed" ? failedPlugins?.map((name) => utils.randomPicoColour(name))?.join(", ") : void 0,
229
+ plugins: status === "success" ? `${c2__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c2__default.default.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
230
+ pluginsFailed: status === "failed" ? failedPlugins?.map((name) => logger.randomCliColour(name))?.join(", ") : void 0,
229
231
  filesCreated: files.length,
230
- time: pc2__default.default.yellow(`${elapsedSeconds}s`),
232
+ time: c2__default.default.yellow(`${elapsedSeconds}s`),
231
233
  output: path__default.default.resolve(config.root, config.output.path)
232
234
  };
233
- if (logLevel === utils.LogLevel.debug) {
234
- logs.push(pc2__default.default.bold("\nGenerated files:\n"));
235
- logs.push(files.map((file) => `${utils.randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
235
+ if (logLevel === logger.LogLevel.debug) {
236
+ logs.push(c2__default.default.bold("\nGenerated files:\n"));
237
+ logs.push(files.map((file) => `${logger.randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
236
238
  }
237
239
  logs.push(
238
240
  [
239
241
  [`
240
242
  `, true],
241
- [` ${pc2__default.default.bold("Name:")} ${meta.name}`, !!meta.name],
242
- [` ${pc2__default.default.bold("Plugins:")} ${meta.plugins}`, true],
243
- [` ${pc2__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
244
- [`${pc2__default.default.bold("Generated:")} ${meta.filesCreated} files`, true],
245
- [` ${pc2__default.default.bold("Time:")} ${meta.time}`, true],
246
- [` ${pc2__default.default.bold("Output:")} ${meta.output}`, true],
243
+ [` ${c2__default.default.bold("Name:")} ${meta.name}`, !!meta.name],
244
+ [` ${c2__default.default.bold("Plugins:")} ${meta.plugins}`, true],
245
+ [` ${c2__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
246
+ [`${c2__default.default.bold("Generated:")} ${meta.filesCreated} files`, true],
247
+ [` ${c2__default.default.bold("Time:")} ${meta.time}`, true],
248
+ [` ${c2__default.default.bold("Output:")} ${meta.output}`, true],
247
249
  [`
248
250
  `, true]
249
251
  ].map((item) => {
@@ -264,7 +266,7 @@ var OraWritable = class extends stream.Writable {
264
266
  _write(chunk, _encoding, callback2) {
265
267
  this.spinner.suffixText = `
266
268
 
267
- ${pc2__default.default.bold(pc2__default.default.blue(this.command))}: ${chunk?.toString()}`;
269
+ ${c2__default.default.bold(c2__default.default.blue(this.command))}: ${chunk?.toString()}`;
268
270
  callback2();
269
271
  }
270
272
  };
@@ -275,7 +277,7 @@ async function executeHooks({ hooks, logLevel }) {
275
277
  return;
276
278
  }
277
279
  const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done];
278
- if (logLevel === utils.LogLevel.silent) {
280
+ if (logLevel === logger.LogLevel.silent) {
279
281
  spinner.start(`Executing hooks`);
280
282
  }
281
283
  const executers = commands.map(async (command) => {
@@ -285,40 +287,40 @@ async function executeHooks({ hooks, logLevel }) {
285
287
  if (!cmd) {
286
288
  return null;
287
289
  }
288
- spinner.start(`Executing hook ${logLevel !== "silent" ? pc2__default.default.dim(command) : ""}`);
290
+ spinner.start(`Executing hook ${logLevel !== "silent" ? c2__default.default.dim(command) : ""}`);
289
291
  const subProcess = await execa.execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
290
292
  spinner.suffixText = "";
291
- if (logLevel === utils.LogLevel.silent) {
292
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc2__default.default.dim(command) : ""}`);
293
+ if (logLevel === logger.LogLevel.silent) {
294
+ spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2__default.default.dim(command) : ""}`);
293
295
  console.log(subProcess.stdout);
294
296
  }
295
297
  oraWritable.destroy();
296
298
  return { subProcess, abort: abortController.abort.bind(abortController) };
297
299
  }).filter(Boolean);
298
300
  await Promise.all(executers);
299
- if (logLevel === utils.LogLevel.silent) {
301
+ if (logLevel === logger.LogLevel.silent) {
300
302
  spinner.succeed(`Executing hooks`);
301
303
  }
302
304
  }
303
305
  async function generate({ input, config, CLIOptions }) {
304
- const logger = utils.createLogger({ logLevel: CLIOptions.logLevel || utils.LogLevel.silent, name: config.name, spinner });
305
- if (logger.name) {
306
- spinner.prefixText = utils.randomPicoColour(logger.name);
306
+ const logger$1 = logger.createLogger({ logLevel: CLIOptions.logLevel || logger.LogLevel.silent, name: config.name, spinner });
307
+ if (logger$1.name) {
308
+ spinner.prefixText = logger.randomCliColour(logger$1.name);
307
309
  }
308
310
  const hrstart = process.hrtime();
309
- if (CLIOptions.logLevel === utils.LogLevel.debug) {
311
+ if (CLIOptions.logLevel === logger.LogLevel.debug) {
310
312
  const { performance, PerformanceObserver } = await import('perf_hooks');
311
313
  const performanceOpserver = new PerformanceObserver((items) => {
312
314
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
313
- spinner.suffixText = pc2__default.default.yellow(message);
315
+ spinner.suffixText = c2__default.default.yellow(message);
314
316
  performance.clearMarks();
315
317
  });
316
318
  performanceOpserver.observe({ type: "measure" });
317
319
  }
318
320
  const { root: _root, ...userConfig } = config;
319
- const logLevel = logger.logLevel;
321
+ const logLevel = logger$1.logLevel;
320
322
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
321
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc2__default.default.dim(inputPath) : ""}`);
323
+ spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c2__default.default.dim(inputPath) : ""}`);
322
324
  const { pluginManager, error } = await core.safeBuild({
323
325
  config: {
324
326
  root: process.cwd(),
@@ -332,18 +334,18 @@ async function generate({ input, config, CLIOptions }) {
332
334
  ...userConfig.output
333
335
  }
334
336
  },
335
- logger
337
+ logger: logger$1
336
338
  });
337
339
  const summary = getSummary({ pluginManager, config, status: error ? "failed" : "success", hrstart, logLevel: CLIOptions.logLevel });
338
340
  if (error) {
339
341
  spinner.suffixText = "";
340
- spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? pc2__default.default.dim(inputPath) : ""}`);
342
+ spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? c2__default.default.dim(inputPath) : ""}`);
341
343
  console.log(summary.join(""));
342
344
  throw error;
343
345
  }
344
346
  await executeHooks({ hooks: config.hooks, logLevel });
345
347
  spinner.suffixText = "";
346
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc2__default.default.dim(inputPath) : ""}`);
348
+ spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? c2__default.default.dim(inputPath) : ""}`);
347
349
  console.log(summary.join(""));
348
350
  }
349
351
  var presets = {
@@ -372,24 +374,24 @@ export default defineConfig({
372
374
  packages: ["@kubb/core", "@kubb/cli", "@kubb/swagger", "@kubb/swagger-ts", "@kubb/swagger-tanstack-query"]
373
375
  }
374
376
  };
375
- async function init({ preset = "simple", logLevel = utils.LogLevel.silent, packageManager = "pnpm" }) {
377
+ async function init({ preset = "simple", logLevel = logger.LogLevel.silent, packageManager = "pnpm" }) {
376
378
  spinner.start("\u{1F4E6} Initializing Kubb");
377
379
  const presetMeta = presets[preset];
378
380
  const configPath = path__default.default.resolve(process.cwd(), "./kubb.config.js");
379
381
  const installCommand = packageManager === "npm" ? "install" : "add";
380
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc2__default.default.dim(configPath)}`);
381
- await utils.write(presetMeta["kubb.config"], configPath);
382
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc2__default.default.dim(configPath)}`);
382
+ spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${c2__default.default.dim(configPath)}`);
383
+ await fs.write(presetMeta["kubb.config"], configPath);
384
+ spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${c2__default.default.dim(configPath)}`);
383
385
  const results = await Promise.allSettled([
384
386
  execa.$`npm init es6 -y`,
385
387
  ...presetMeta.packages.map(async (pack) => {
386
- spinner.start(`\u{1F4C0} Installing ${pc2__default.default.dim(pack)}`);
388
+ spinner.start(`\u{1F4C0} Installing ${c2__default.default.dim(pack)}`);
387
389
  const { stdout } = await execa.$({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
388
- spinner.succeed(`\u{1F4C0} Installed ${pc2__default.default.dim(pack)}`);
390
+ spinner.succeed(`\u{1F4C0} Installed ${c2__default.default.dim(pack)}`);
389
391
  return stdout;
390
392
  })
391
393
  ]);
392
- if (logLevel === utils.LogLevel.info) {
394
+ if (logLevel === logger.LogLevel.info) {
393
395
  results.forEach((result) => {
394
396
  if (utils.isPromiseFulfilledResult(result)) {
395
397
  console.log(result.value);
@@ -406,7 +408,7 @@ function programCatcher(e, CLIOptions) {
406
408
  const error = e;
407
409
  const message = renderErrors(error, { logLevel: CLIOptions.logLevel });
408
410
  if (error instanceof core.Warning) {
409
- spinner.warn(pc2__default.default.yellow(error.message));
411
+ spinner.warn(c2__default.default.yellow(error.message));
410
412
  process.exit(0);
411
413
  }
412
414
  spinner.fail(message);
@@ -415,7 +417,7 @@ function programCatcher(e, CLIOptions) {
415
417
  async function generateAction(input, CLIOptions) {
416
418
  spinner.start("\u{1F50D} Loading config");
417
419
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
418
- spinner.succeed(`\u{1F50D} Config loaded(${pc2__default.default.dim(path__default.default.relative(process.cwd(), result.filepath))})`);
420
+ spinner.succeed(`\u{1F50D} Config loaded(${c2__default.default.dim(path__default.default.relative(process.cwd(), result.filepath))})`);
419
421
  const config = await getConfig(result, CLIOptions);
420
422
  if (CLIOptions.watch) {
421
423
  if (Array.isArray(config)) {
@@ -425,7 +427,7 @@ async function generateAction(input, CLIOptions) {
425
427
  return startWatcher([input || config.input.path], async (paths) => {
426
428
  await generate({ config, CLIOptions });
427
429
  spinner.spinner = "simpleDotsScrolling";
428
- spinner.start(pc2__default.default.yellow(pc2__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
430
+ spinner.start(c2__default.default.yellow(c2__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
429
431
  });
430
432
  }
431
433
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","pc","moduleName","LogLevel","randomPicoColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.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, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-beta.10\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^8.3.6\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"picocolors\": \"^1.0.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.10.1\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^8.0.1\",\n \"typescript\": \"^5.3.2\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\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 { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\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 KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['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: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['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 // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['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<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\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","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\n}\n","import ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import pc from 'picocolors'\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(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(pc.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync 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: Promise<Executer | null>[] = 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' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\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\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.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 = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n const { root: _root, ...userConfig } = config\n const logLevel = logger.logLevel\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\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 logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })\n\n if (error) {\n spinner.suffixText = ''\n spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n\n throw error\n }\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { KubbConfig, PluginManager } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: 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\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .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: status === 'success'\n ? `${pc.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${pc.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomPicoColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: pc.yellow(`${elapsedSeconds}s`),\n output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(pc.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\n [` ${pc.bold('Name:')} ${meta.name}`, !!meta.name],\n [` ${pc.bold('Plugins:')} ${meta.plugins}`, true],\n [` ${pc.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${pc.bold('Generated:')} ${meta.filesCreated} files`, true],\n [` ${pc.bold('Time:')} ${meta.time}`, true],\n [` ${pc.bold('Output:')} ${meta.output}`, true],\n [`\\n`, 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","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\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${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${pc.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${pc.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","c","moduleName","LogLevel","randomCliColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport c from 'tinyrainbow'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(c.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\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, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-beta.12\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"tinyrainbow\": \"^1.1.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.10.3\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^8.0.1\",\n \"typescript\": \"^5.3.2\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\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 { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\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 KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['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: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['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 // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['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<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\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","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/logger'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\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 { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync 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: Promise<Executer | null>[] = 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, { detached: true, signal: abortController.signal }).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 console.log(subProcess.stdout)\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\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomCliColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.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: _root, ...userConfig } = config\n const logLevel = logger.logLevel\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 { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\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 logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })\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 throw error\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 path from 'node:path'\n\nimport { LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { KubbConfig, PluginManager } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: 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\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .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: 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 output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(c.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\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('Output:')} ${meta.output}`, true],\n [`\\n`, 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","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { 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","import path from 'node:path'\n\nimport { write } from '@kubb/core/fs'\nimport { LogLevel } from '@kubb/core/logger'\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${c.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${c.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${c.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${c.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
package/dist/index.js CHANGED
@@ -2,15 +2,17 @@ import { createRequire } from 'module';
2
2
  import path from 'path';
3
3
  import { Warning, isInputPath, PromiseManager, safeBuild, PackageManager } from '@kubb/core';
4
4
  import { cac } from 'cac';
5
- import pc2 from 'picocolors';
6
- import { write, LogLevel, isPromiseFulfilledResult, isPromise, createLogger, randomPicoColour } from '@kubb/core/utils';
5
+ import c2 from 'tinyrainbow';
6
+ import { isPromiseFulfilledResult, isPromise } from '@kubb/core/utils';
7
7
  import { cosmiconfig } from 'cosmiconfig';
8
8
  import tsNode from 'ts-node';
9
+ import { LogLevel, createLogger, randomCliColour } from '@kubb/core/logger';
9
10
  import PrettyError from 'pretty-error';
10
11
  import ora from 'ora';
11
12
  import { $, execa } from 'execa';
12
13
  import { parseArgsStringToArgv } from 'string-argv';
13
14
  import { Writable } from 'stream';
15
+ import { write } from '@kubb/core/fs';
14
16
 
15
17
  const require = createRequire(import.meta.url);
16
18
 
@@ -23,7 +25,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
23
25
  });
24
26
 
25
27
  // package.json
26
- var version = "2.0.0-beta.10";
28
+ var version = "2.0.0-beta.12";
27
29
  function isJSONPlugins(plugins) {
28
30
  return !!plugins?.some((plugin) => {
29
31
  return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
@@ -176,12 +178,12 @@ async function startWatcher(path4, cb) {
176
178
  ignored
177
179
  });
178
180
  watcher.on("all", (type, file) => {
179
- spinner.succeed(pc2.yellow(pc2.bold(`Change detected: ${type} ${file}`)));
181
+ spinner.succeed(c2.yellow(c2.bold(`Change detected: ${type} ${file}`)));
180
182
  spinner.spinner = "clock";
181
183
  try {
182
184
  cb(path4);
183
185
  } catch (e) {
184
- spinner.warn(pc2.red("Watcher failed"));
186
+ spinner.warn(c2.red("Watcher failed"));
185
187
  }
186
188
  });
187
189
  return;
@@ -215,26 +217,26 @@ function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
215
217
  });
216
218
  const meta = {
217
219
  name: config.name,
218
- plugins: status === "success" ? `${pc2.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc2.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
219
- pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomPicoColour(name))?.join(", ") : void 0,
220
+ plugins: status === "success" ? `${c2.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c2.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
221
+ pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
220
222
  filesCreated: files.length,
221
- time: pc2.yellow(`${elapsedSeconds}s`),
223
+ time: c2.yellow(`${elapsedSeconds}s`),
222
224
  output: path.resolve(config.root, config.output.path)
223
225
  };
224
226
  if (logLevel === LogLevel.debug) {
225
- logs.push(pc2.bold("\nGenerated files:\n"));
226
- logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
227
+ logs.push(c2.bold("\nGenerated files:\n"));
228
+ logs.push(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
227
229
  }
228
230
  logs.push(
229
231
  [
230
232
  [`
231
233
  `, true],
232
- [` ${pc2.bold("Name:")} ${meta.name}`, !!meta.name],
233
- [` ${pc2.bold("Plugins:")} ${meta.plugins}`, true],
234
- [` ${pc2.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
235
- [`${pc2.bold("Generated:")} ${meta.filesCreated} files`, true],
236
- [` ${pc2.bold("Time:")} ${meta.time}`, true],
237
- [` ${pc2.bold("Output:")} ${meta.output}`, true],
234
+ [` ${c2.bold("Name:")} ${meta.name}`, !!meta.name],
235
+ [` ${c2.bold("Plugins:")} ${meta.plugins}`, true],
236
+ [` ${c2.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
237
+ [`${c2.bold("Generated:")} ${meta.filesCreated} files`, true],
238
+ [` ${c2.bold("Time:")} ${meta.time}`, true],
239
+ [` ${c2.bold("Output:")} ${meta.output}`, true],
238
240
  [`
239
241
  `, true]
240
242
  ].map((item) => {
@@ -255,7 +257,7 @@ var OraWritable = class extends Writable {
255
257
  _write(chunk, _encoding, callback2) {
256
258
  this.spinner.suffixText = `
257
259
 
258
- ${pc2.bold(pc2.blue(this.command))}: ${chunk?.toString()}`;
260
+ ${c2.bold(c2.blue(this.command))}: ${chunk?.toString()}`;
259
261
  callback2();
260
262
  }
261
263
  };
@@ -276,11 +278,11 @@ async function executeHooks({ hooks, logLevel }) {
276
278
  if (!cmd) {
277
279
  return null;
278
280
  }
279
- spinner.start(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
281
+ spinner.start(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
280
282
  const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
281
283
  spinner.suffixText = "";
282
284
  if (logLevel === LogLevel.silent) {
283
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
285
+ spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
284
286
  console.log(subProcess.stdout);
285
287
  }
286
288
  oraWritable.destroy();
@@ -294,14 +296,14 @@ async function executeHooks({ hooks, logLevel }) {
294
296
  async function generate({ input, config, CLIOptions }) {
295
297
  const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner });
296
298
  if (logger.name) {
297
- spinner.prefixText = randomPicoColour(logger.name);
299
+ spinner.prefixText = randomCliColour(logger.name);
298
300
  }
299
301
  const hrstart = process.hrtime();
300
302
  if (CLIOptions.logLevel === LogLevel.debug) {
301
303
  const { performance, PerformanceObserver } = await import('perf_hooks');
302
304
  const performanceOpserver = new PerformanceObserver((items) => {
303
305
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
304
- spinner.suffixText = pc2.yellow(message);
306
+ spinner.suffixText = c2.yellow(message);
305
307
  performance.clearMarks();
306
308
  });
307
309
  performanceOpserver.observe({ type: "measure" });
@@ -309,7 +311,7 @@ async function generate({ input, config, CLIOptions }) {
309
311
  const { root: _root, ...userConfig } = config;
310
312
  const logLevel = logger.logLevel;
311
313
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
312
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
314
+ spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
313
315
  const { pluginManager, error } = await safeBuild({
314
316
  config: {
315
317
  root: process.cwd(),
@@ -328,13 +330,13 @@ async function generate({ input, config, CLIOptions }) {
328
330
  const summary = getSummary({ pluginManager, config, status: error ? "failed" : "success", hrstart, logLevel: CLIOptions.logLevel });
329
331
  if (error) {
330
332
  spinner.suffixText = "";
331
- spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
333
+ spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
332
334
  console.log(summary.join(""));
333
335
  throw error;
334
336
  }
335
337
  await executeHooks({ hooks: config.hooks, logLevel });
336
338
  spinner.suffixText = "";
337
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
339
+ spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
338
340
  console.log(summary.join(""));
339
341
  }
340
342
  var presets = {
@@ -368,15 +370,15 @@ async function init({ preset = "simple", logLevel = LogLevel.silent, packageMana
368
370
  const presetMeta = presets[preset];
369
371
  const configPath = path.resolve(process.cwd(), "./kubb.config.js");
370
372
  const installCommand = packageManager === "npm" ? "install" : "add";
371
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc2.dim(configPath)}`);
373
+ spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${c2.dim(configPath)}`);
372
374
  await write(presetMeta["kubb.config"], configPath);
373
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc2.dim(configPath)}`);
375
+ spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${c2.dim(configPath)}`);
374
376
  const results = await Promise.allSettled([
375
377
  $`npm init es6 -y`,
376
378
  ...presetMeta.packages.map(async (pack) => {
377
- spinner.start(`\u{1F4C0} Installing ${pc2.dim(pack)}`);
379
+ spinner.start(`\u{1F4C0} Installing ${c2.dim(pack)}`);
378
380
  const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
379
- spinner.succeed(`\u{1F4C0} Installed ${pc2.dim(pack)}`);
381
+ spinner.succeed(`\u{1F4C0} Installed ${c2.dim(pack)}`);
380
382
  return stdout;
381
383
  })
382
384
  ]);
@@ -397,7 +399,7 @@ function programCatcher(e, CLIOptions) {
397
399
  const error = e;
398
400
  const message = renderErrors(error, { logLevel: CLIOptions.logLevel });
399
401
  if (error instanceof Warning) {
400
- spinner.warn(pc2.yellow(error.message));
402
+ spinner.warn(c2.yellow(error.message));
401
403
  process.exit(0);
402
404
  }
403
405
  spinner.fail(message);
@@ -406,7 +408,7 @@ function programCatcher(e, CLIOptions) {
406
408
  async function generateAction(input, CLIOptions) {
407
409
  spinner.start("\u{1F50D} Loading config");
408
410
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
409
- spinner.succeed(`\u{1F50D} Config loaded(${pc2.dim(path.relative(process.cwd(), result.filepath))})`);
411
+ spinner.succeed(`\u{1F50D} Config loaded(${c2.dim(path.relative(process.cwd(), result.filepath))})`);
410
412
  const config = await getConfig(result, CLIOptions);
411
413
  if (CLIOptions.watch) {
412
414
  if (Array.isArray(config)) {
@@ -416,7 +418,7 @@ async function generateAction(input, CLIOptions) {
416
418
  return startWatcher([input || config.input.path], async (paths) => {
417
419
  await generate({ config, CLIOptions });
418
420
  spinner.spinner = "simpleDotsScrolling";
419
- spinner.start(pc2.yellow(pc2.bold(`Watching for changes in ${paths.join(" and ")}`)));
421
+ spinner.start(c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
420
422
  });
421
423
  }
422
424
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","pc","moduleName","LogLevel","randomPicoColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.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, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-beta.10\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^8.3.6\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"picocolors\": \"^1.0.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.10.1\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^8.0.1\",\n \"typescript\": \"^5.3.2\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\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 { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\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 KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['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: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['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 // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['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<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\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","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\n}\n","import ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import pc from 'picocolors'\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(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(pc.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync 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: Promise<Executer | null>[] = 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' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\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\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.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 = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n const { root: _root, ...userConfig } = config\n const logLevel = logger.logLevel\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\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 logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })\n\n if (error) {\n spinner.suffixText = ''\n spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n\n throw error\n }\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { KubbConfig, PluginManager } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: 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\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .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: status === 'success'\n ? `${pc.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${pc.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomPicoColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: pc.yellow(`${elapsedSeconds}s`),\n output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(pc.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\n [` ${pc.bold('Name:')} ${meta.name}`, !!meta.name],\n [` ${pc.bold('Plugins:')} ${meta.plugins}`, true],\n [` ${pc.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${pc.bold('Generated:')} ${meta.filesCreated} files`, true],\n [` ${pc.bold('Time:')} ${meta.time}`, true],\n [` ${pc.bold('Output:')} ${meta.output}`, true],\n [`\\n`, 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","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\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${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${pc.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${pc.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","c","moduleName","LogLevel","randomCliColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport c from 'tinyrainbow'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(c.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\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, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-beta.12\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"tinyrainbow\": \"^1.1.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.10.3\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^8.0.1\",\n \"typescript\": \"^5.3.2\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\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 { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\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 KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['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: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['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 // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['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<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\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","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/logger'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\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 { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync 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: Promise<Executer | null>[] = 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, { detached: true, signal: abortController.signal }).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 console.log(subProcess.stdout)\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\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomCliColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.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: _root, ...userConfig } = config\n const logLevel = logger.logLevel\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 { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\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 logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })\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 throw error\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 path from 'node:path'\n\nimport { LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { KubbConfig, PluginManager } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: 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\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .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: 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 output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(c.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\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('Output:')} ${meta.output}`, true],\n [`\\n`, 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","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { 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","import path from 'node:path'\n\nimport { write } from '@kubb/core/fs'\nimport { LogLevel } from '@kubb/core/logger'\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${c.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${c.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${c.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${c.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "2.0.0-beta.10",
3
+ "version": "2.0.0-beta.12",
4
4
  "description": "Generator cli",
5
5
  "keywords": [
6
6
  "typescript",
@@ -41,21 +41,21 @@
41
41
  "dependencies": {
42
42
  "cac": "^6.7.14",
43
43
  "chokidar": "^3.5.3",
44
- "cosmiconfig": "^8.3.6",
44
+ "cosmiconfig": "^9.0.0",
45
45
  "execa": "^8.0.1",
46
46
  "ora": "^7.0.1",
47
- "picocolors": "^1.0.0",
47
+ "tinyrainbow": "^1.1.0",
48
48
  "pretty-error": "^4.0.0",
49
49
  "string-argv": "^0.3.2",
50
50
  "ts-node": "^10.9.1",
51
- "@kubb/core": "2.0.0-beta.10"
51
+ "@kubb/core": "2.0.0-beta.12"
52
52
  },
53
53
  "devDependencies": {
54
- "@types/node": "^20.10.1",
54
+ "@types/node": "^20.10.3",
55
55
  "source-map-support": "^0.5.21",
56
56
  "tsup": "^8.0.1",
57
57
  "typescript": "^5.3.2",
58
- "@kubb/swagger": "2.0.0-beta.10",
58
+ "@kubb/swagger": "2.0.0-beta.12",
59
59
  "@kubb/ts-config": "0.1.0",
60
60
  "@kubb/tsup-config": "1.1.8"
61
61
  },
package/src/generate.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { safeBuild } from '@kubb/core'
2
- import { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'
2
+ import { createLogger, LogLevel, randomCliColour } from '@kubb/core/logger'
3
3
 
4
4
  import { execa } from 'execa'
5
- import pc from 'picocolors'
6
5
  import { parseArgsStringToArgv } from 'string-argv'
6
+ import c from 'tinyrainbow'
7
7
 
8
8
  import { getSummary } from './utils/getSummary.ts'
9
9
  import { OraWritable } from './utils/OraWritable.ts'
@@ -47,13 +47,13 @@ async function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<v
47
47
  return null
48
48
  }
49
49
 
50
- spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)
50
+ spinner.start(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)
51
51
 
52
52
  const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)
53
53
  spinner.suffixText = ''
54
54
 
55
55
  if (logLevel === LogLevel.silent) {
56
- spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)
56
+ spinner.succeed(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)
57
57
 
58
58
  console.log(subProcess.stdout)
59
59
  }
@@ -74,7 +74,7 @@ export async function generate({ input, config, CLIOptions }: GenerateProps): Pr
74
74
  const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })
75
75
 
76
76
  if (logger.name) {
77
- spinner.prefixText = randomPicoColour(logger.name)
77
+ spinner.prefixText = randomCliColour(logger.name)
78
78
  }
79
79
 
80
80
  const hrstart = process.hrtime()
@@ -85,7 +85,7 @@ export async function generate({ input, config, CLIOptions }: GenerateProps): Pr
85
85
  const performanceOpserver = new PerformanceObserver((items) => {
86
86
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`
87
87
 
88
- spinner.suffixText = pc.yellow(message)
88
+ spinner.suffixText = c.yellow(message)
89
89
 
90
90
  performance.clearMarks()
91
91
  })
@@ -97,7 +97,7 @@ export async function generate({ input, config, CLIOptions }: GenerateProps): Pr
97
97
  const logLevel = logger.logLevel
98
98
  const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)
99
99
 
100
- spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
100
+ spinner.start(`🚀 Building ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)
101
101
 
102
102
  const { pluginManager, error } = await safeBuild({
103
103
  config: {
@@ -121,7 +121,7 @@ export async function generate({ input, config, CLIOptions }: GenerateProps): Pr
121
121
 
122
122
  if (error) {
123
123
  spinner.suffixText = ''
124
- spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
124
+ spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)
125
125
 
126
126
  console.log(summary.join(''))
127
127
 
@@ -131,7 +131,7 @@ export async function generate({ input, config, CLIOptions }: GenerateProps): Pr
131
131
  await executeHooks({ hooks: config.hooks, logLevel })
132
132
 
133
133
  spinner.suffixText = ''
134
- spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
134
+ spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)
135
135
 
136
136
  console.log(summary.join(''))
137
137
  }
package/src/index.ts CHANGED
@@ -3,7 +3,7 @@ import path from 'node:path'
3
3
  import { isInputPath, PromiseManager, Warning } from '@kubb/core'
4
4
 
5
5
  import { cac } from 'cac'
6
- import pc from 'picocolors'
6
+ import c from 'tinyrainbow'
7
7
 
8
8
  import { version } from '../package.json'
9
9
  import { getConfig } from './utils/getConfig.ts'
@@ -23,7 +23,7 @@ function programCatcher(e: unknown, CLIOptions: CLIOptions): void {
23
23
  const message = renderErrors(error, { logLevel: CLIOptions.logLevel })
24
24
 
25
25
  if (error instanceof Warning) {
26
- spinner.warn(pc.yellow(error.message))
26
+ spinner.warn(c.yellow(error.message))
27
27
  process.exit(0)
28
28
  }
29
29
 
@@ -34,7 +34,7 @@ function programCatcher(e: unknown, CLIOptions: CLIOptions): void {
34
34
  async function generateAction(input: string, CLIOptions: CLIOptions) {
35
35
  spinner.start('🔍 Loading config')
36
36
  const result = await getCosmiConfig(moduleName, CLIOptions.config)
37
- spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)
37
+ spinner.succeed(`🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)
38
38
 
39
39
  const config = await getConfig(result, CLIOptions)
40
40
 
@@ -47,7 +47,7 @@ async function generateAction(input: string, CLIOptions: CLIOptions) {
47
47
  return startWatcher([input || config.input.path], async (paths) => {
48
48
  await generate({ config, CLIOptions })
49
49
  spinner.spinner = 'simpleDotsScrolling'
50
- spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))
50
+ spinner.start(c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))
51
51
  })
52
52
  }
53
53
  }
package/src/init.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import path from 'node:path'
2
2
 
3
+ import { write } from '@kubb/core/fs'
4
+ import { LogLevel } from '@kubb/core/logger'
3
5
  import { isPromiseFulfilledResult } from '@kubb/core/utils'
4
- import { LogLevel, write } from '@kubb/core/utils'
5
6
 
6
7
  import { $ } from 'execa'
7
- import pc from 'picocolors'
8
+ import c from 'tinyrainbow'
8
9
 
9
10
  import { spinner } from './utils/spinner.ts'
10
11
 
@@ -66,16 +67,16 @@ export async function init({ preset = 'simple', logLevel = LogLevel.silent, pack
66
67
  const configPath = path.resolve(process.cwd(), './kubb.config.js')
67
68
  const installCommand = packageManager === 'npm' ? 'install' : 'add'
68
69
 
69
- spinner.start(`📀 Writing \`kubb.config.js\` ${pc.dim(configPath)}`)
70
+ spinner.start(`📀 Writing \`kubb.config.js\` ${c.dim(configPath)}`)
70
71
  await write(presetMeta['kubb.config'], configPath)
71
- spinner.succeed(`📀 Wrote \`kubb.config.js\` ${pc.dim(configPath)}`)
72
+ spinner.succeed(`📀 Wrote \`kubb.config.js\` ${c.dim(configPath)}`)
72
73
 
73
74
  const results = await Promise.allSettled([
74
75
  $`npm init es6 -y`,
75
76
  ...presetMeta.packages.map(async (pack) => {
76
- spinner.start(`📀 Installing ${pc.dim(pack)}`)
77
+ spinner.start(`📀 Installing ${c.dim(pack)}`)
77
78
  const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`
78
- spinner.succeed(`📀 Installed ${pc.dim(pack)}`)
79
+ spinner.succeed(`📀 Installed ${c.dim(pack)}`)
79
80
 
80
81
  return stdout
81
82
  }),
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Writable } from 'node:stream'
7
7
 
8
- import pc from 'picocolors'
8
+ import c from 'tinyrainbow'
9
9
 
10
10
  import type { WritableOptions } from 'node:stream'
11
11
  import type { Ora } from 'ora'
@@ -20,7 +20,7 @@ export class OraWritable extends Writable {
20
20
  this.spinner = spinner
21
21
  }
22
22
  _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {
23
- this.spinner.suffixText = `\n\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`
23
+ this.spinner.suffixText = `\n\n${c.bold(c.blue(this.command))}: ${chunk?.toString()}`
24
24
 
25
25
  callback()
26
26
  }
@@ -1,8 +1,8 @@
1
1
  import path from 'node:path'
2
2
 
3
- import { LogLevel, randomPicoColour } from '@kubb/core/utils'
3
+ import { LogLevel, randomCliColour } from '@kubb/core/logger'
4
4
 
5
- import pc from 'picocolors'
5
+ import c from 'tinyrainbow'
6
6
 
7
7
  import { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'
8
8
 
@@ -46,28 +46,28 @@ export function getSummary({ pluginManager, status, hrstart, config, logLevel }:
46
46
  const meta = {
47
47
  name: config.name,
48
48
  plugins: status === 'success'
49
- ? `${pc.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`
50
- : `${pc.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
51
- pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomPicoColour(name))?.join(', ') : undefined,
49
+ ? `${c.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`
50
+ : `${c.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
51
+ pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomCliColour(name))?.join(', ') : undefined,
52
52
  filesCreated: files.length,
53
- time: pc.yellow(`${elapsedSeconds}s`),
53
+ time: c.yellow(`${elapsedSeconds}s`),
54
54
  output: path.resolve(config.root, config.output.path),
55
55
  } as const
56
56
 
57
57
  if (logLevel === LogLevel.debug) {
58
- logs.push(pc.bold('\nGenerated files:\n'))
59
- logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\n'))
58
+ logs.push(c.bold('\nGenerated files:\n'))
59
+ logs.push(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\n'))
60
60
  }
61
61
 
62
62
  logs.push(
63
63
  [
64
64
  [`\n`, true],
65
- [` ${pc.bold('Name:')} ${meta.name}`, !!meta.name],
66
- [` ${pc.bold('Plugins:')} ${meta.plugins}`, true],
67
- [` ${pc.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],
68
- [`${pc.bold('Generated:')} ${meta.filesCreated} files`, true],
69
- [` ${pc.bold('Time:')} ${meta.time}`, true],
70
- [` ${pc.bold('Output:')} ${meta.output}`, true],
65
+ [` ${c.bold('Name:')} ${meta.name}`, !!meta.name],
66
+ [` ${c.bold('Plugins:')} ${meta.plugins}`, true],
67
+ [` ${c.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],
68
+ [`${c.bold('Generated:')} ${meta.filesCreated} files`, true],
69
+ [` ${c.bold('Time:')} ${meta.time}`, true],
70
+ [` ${c.bold('Output:')} ${meta.output}`, true],
71
71
  [`\n`, true],
72
72
  ]
73
73
  .map((item) => {
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
4
4
 
5
- import { LogLevel } from '@kubb/core/utils'
5
+ import { LogLevel } from '@kubb/core/logger'
6
6
 
7
7
  import PrettyError from 'pretty-error'
8
8
 
@@ -1,4 +1,4 @@
1
- import pc from 'picocolors'
1
+ import c from 'tinyrainbow'
2
2
 
3
3
  import { spinner } from './spinner.ts'
4
4
 
@@ -12,14 +12,14 @@ export async function startWatcher(path: string[], cb: (path: string[]) => Promi
12
12
  ignored,
13
13
  })
14
14
  watcher.on('all', (type, file) => {
15
- spinner.succeed(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))
15
+ spinner.succeed(c.yellow(c.bold(`Change detected: ${type} ${file}`)))
16
16
  // revert back
17
17
  spinner.spinner = 'clock'
18
18
 
19
19
  try {
20
20
  cb(path)
21
21
  } catch (e) {
22
- spinner.warn(pc.red('Watcher failed'))
22
+ spinner.warn(c.red('Watcher failed'))
23
23
  }
24
24
  })
25
25