@kubb/cli 1.15.0-canary.20231024T104437 → 1.15.0-canary.20231025T103503

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/bin/kubb.js CHANGED
@@ -5,7 +5,7 @@ try {
5
5
  })
6
6
  } catch (err) {}
7
7
 
8
- import('../dist/index.js').then(({ run }) => {
8
+ import('../dist/index.js').then(({ default: runCLI }) => {
9
9
  process.title = 'Kubb'
10
- run(process.argv)
10
+ runCLI(process.argv)
11
11
  })
package/dist/index.cjs CHANGED
@@ -1,8 +1,6 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var path = require('path');
3
+ var pathParser = require('path');
6
4
  var core = require('@kubb/core');
7
5
  var cac = require('cac');
8
6
  var pc3 = require('picocolors');
@@ -16,7 +14,7 @@ var stringArgv = require('string-argv');
16
14
 
17
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
18
16
 
19
- var path__default = /*#__PURE__*/_interopDefault(path);
17
+ var pathParser__default = /*#__PURE__*/_interopDefault(pathParser);
20
18
  var pc3__default = /*#__PURE__*/_interopDefault(pc3);
21
19
  var tsNode__default = /*#__PURE__*/_interopDefault(tsNode);
22
20
  var PrettyError__default = /*#__PURE__*/_interopDefault(PrettyError);
@@ -34,7 +32,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
34
32
  var version = "1.14.3";
35
33
  function isJSONPlugins(plugins) {
36
34
  return !!plugins?.some((plugin) => {
37
- return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
35
+ return typeof plugin?.[0] === "string";
38
36
  });
39
37
  }
40
38
  function isObjectPlugins(plugins) {
@@ -42,16 +40,18 @@ function isObjectPlugins(plugins) {
42
40
  }
43
41
  async function importPlugin(name, options) {
44
42
  const packageManager = new core.PackageManager(process.cwd());
45
- const importedPlugin = process.env.NODE_ENV === "test" ? await import(name) : await packageManager.import(name);
43
+ const importedPlugin = process.env.NODE_ENV === "test" ? await import(name) : await packageManager.import(name, process.cwd());
46
44
  return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options);
47
45
  }
48
46
  function getPlugins(plugins) {
49
47
  if (isObjectPlugins(plugins)) {
50
- throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/configuration/configure#json");
48
+ const promises = Object.keys(plugins).map((name) => {
49
+ return importPlugin(name, plugins[name]);
50
+ });
51
+ return Promise.all(promises);
51
52
  }
52
53
  if (isJSONPlugins(plugins)) {
53
- const jsonPlugins = plugins;
54
- const promises = jsonPlugins.map((plugin) => {
54
+ const promises = plugins.map((plugin) => {
55
55
  const [name, options = {}] = plugin;
56
56
  return importPlugin(name, options);
57
57
  });
@@ -72,12 +72,6 @@ async function getConfig(result, CLIOptions) {
72
72
  kubbUserConfig = Promise.resolve(possiblePromise);
73
73
  }
74
74
  let JSONConfig = await kubbUserConfig;
75
- if (Array.isArray(JSONConfig)) {
76
- const promises = JSONConfig.map(async (item) => {
77
- return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : void 0 };
78
- });
79
- return Promise.all(promises);
80
- }
81
75
  JSONConfig = {
82
76
  ...JSONConfig,
83
77
  plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : void 0
@@ -200,10 +194,10 @@ function renderErrors(error, { prefixText, logLevel = core.LogLevel.silent }) {
200
194
  var spinner = ora__default.default({
201
195
  spinner: "clock"
202
196
  });
203
- async function startWatcher(path4, cb) {
197
+ async function startWatcher(path, cb) {
204
198
  const { watch } = await import('chokidar');
205
199
  const ignored = ["**/{.git,node_modules}/**"];
206
- const watcher = watch(path4, {
200
+ const watcher = watch(path, {
207
201
  ignorePermissionErrors: true,
208
202
  ignored
209
203
  });
@@ -211,7 +205,7 @@ async function startWatcher(path4, cb) {
211
205
  spinner.succeed(pc3__default.default.yellow(pc3__default.default.bold(`Change detected: ${type} ${file}`)));
212
206
  spinner.spinner = "clock";
213
207
  try {
214
- cb(path4);
208
+ cb(path);
215
209
  } catch (e) {
216
210
  spinner.warn(pc3__default.default.red("Watcher failed"));
217
211
  }
@@ -221,40 +215,40 @@ async function startWatcher(path4, cb) {
221
215
  function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
222
216
  const logs = [];
223
217
  const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
224
- const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
218
+ const buildStartPlugins = [
219
+ ...new Set(pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name))
220
+ ];
225
221
  const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
226
222
  const pluginsCount = config.plugins?.length || 0;
227
223
  const files = pluginManager.fileManager.files.sort((a, b) => {
228
- if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {
224
+ if (!a.meta?.pluginName || !b.meta?.pluginName) {
229
225
  return 0;
230
226
  }
231
- if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {
227
+ if (a.meta?.pluginName.length < b.meta?.pluginName.length) {
232
228
  return 1;
233
229
  }
234
- if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {
230
+ if (a.meta?.pluginName.length > b.meta?.pluginName.length) {
235
231
  return -1;
236
232
  }
237
233
  return 0;
238
234
  });
239
235
  const meta = {
240
- name: config.name,
241
236
  plugins: status === "success" ? `${pc3__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3__default.default.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
242
237
  pluginsFailed: status === "failed" ? failedPlugins?.map((name) => core.randomPicoColour(name))?.join(", ") : void 0,
243
238
  filesCreated: files.length,
244
239
  time: pc3__default.default.yellow(`${elapsedSeconds}s`),
245
- output: path__default.default.resolve(config.root, config.output.path)
240
+ output: pathParser__default.default.resolve(config.root, config.output.path)
246
241
  };
247
242
  if (logLevel === core.LogLevel.debug) {
248
243
  logs.push(pc3__default.default.bold("\nGenerated files:\n"));
249
- logs.push(files.map((file) => `${core.randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
244
+ logs.push(files.map((file) => `${core.randomPicoColour(file.meta?.pluginName)} ${file.path}`).join("\n"));
250
245
  }
251
246
  logs.push(
252
247
  [
253
248
  [`
254
249
  `, true],
255
- [` ${pc3__default.default.bold("Name:")} ${meta.name}`, !!meta.name],
256
250
  [` ${pc3__default.default.bold("Plugins:")} ${meta.plugins}`, true],
257
- [` ${pc3__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
251
+ [` ${pc3__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
258
252
  [`${pc3__default.default.bold("Generated:")} ${meta.filesCreated} files`, true],
259
253
  [` ${pc3__default.default.bold("Time:")} ${meta.time}`, true],
260
254
  [` ${pc3__default.default.bold("Output:")} ${meta.output}`, true],
@@ -286,6 +280,7 @@ async function executeHooks({ hooks, logLevel }) {
286
280
  if (!cmd) {
287
281
  return null;
288
282
  }
283
+ await core.timeout(100);
289
284
  spinner.start(`Executing hook ${logLevel !== "silent" ? pc3__default.default.dim(command) : ""}`);
290
285
  const subProcess = await execa.execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
291
286
  spinner.suffixText = "";
@@ -296,16 +291,13 @@ async function executeHooks({ hooks, logLevel }) {
296
291
  oraWritable.destroy();
297
292
  return { subProcess, abort: abortController.abort.bind(abortController) };
298
293
  }).filter(Boolean);
294
+ await core.timeout(100);
299
295
  await Promise.all(executers);
300
296
  if (logLevel === core.LogLevel.silent) {
301
297
  spinner.succeed(`Executing hooks`);
302
298
  }
303
299
  }
304
- async function generate({ input, config, CLIOptions }) {
305
- const logger = core.createLogger({ logLevel: CLIOptions.logLevel || core.LogLevel.silent, name: config.name, spinner });
306
- if (config.name) {
307
- spinner.prefixText = core.randomPicoColour(config.name);
308
- }
300
+ async function generate({ input, config, CLIOptions, logger: logger2 }) {
309
301
  const hrstart = process.hrtime();
310
302
  if (CLIOptions.logLevel === core.LogLevel.debug) {
311
303
  const { performance, PerformanceObserver } = await import('perf_hooks');
@@ -318,7 +310,7 @@ async function generate({ input, config, CLIOptions }) {
318
310
  }
319
311
  try {
320
312
  const { root: _root, ...userConfig } = config;
321
- const logLevel = logger.logLevel;
313
+ const logLevel = CLIOptions.logLevel ?? core.LogLevel.silent;
322
314
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
323
315
  spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc3__default.default.dim(inputPath) : ""}`);
324
316
  const output = await core.build({
@@ -334,11 +326,11 @@ async function generate({ input, config, CLIOptions }) {
334
326
  ...userConfig.output
335
327
  }
336
328
  },
337
- logger
329
+ logger: logger2
338
330
  });
339
- await executeHooks({ hooks: config.hooks, logLevel });
340
331
  spinner.suffixText = "";
341
332
  spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc3__default.default.dim(inputPath) : ""}`);
333
+ await executeHooks({ hooks: config.hooks, logLevel });
342
334
  const summary = getSummary({ pluginManager: output.pluginManager, config, status: "success", hrstart, logLevel: CLIOptions.logLevel });
343
335
  console.log(summary.join(""));
344
336
  } catch (error) {
@@ -367,7 +359,7 @@ export default defineConfig({
367
359
  clean: true,
368
360
  },
369
361
  hooks: {
370
- done: ['echo "\u{1F389} done"'],
362
+ done: 'echo "\u{1F389} done"',
371
363
  },
372
364
  plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
373
365
  })
@@ -378,11 +370,11 @@ export default defineConfig({
378
370
  async function init({ preset = "simple", logLevel = core.LogLevel.silent, packageManager = "pnpm" }) {
379
371
  spinner.start("\u{1F4E6} Initializing Kubb");
380
372
  const presetMeta = presets[preset];
381
- const configPath = path__default.default.resolve(process.cwd(), "./kubb.config.js");
373
+ const path = pathParser__default.default.resolve(process.cwd(), "./kubb.config.js");
382
374
  const installCommand = packageManager === "npm" ? "install" : "add";
383
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3__default.default.dim(configPath)}`);
384
- await core.write(presetMeta["kubb.config"], configPath);
385
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3__default.default.dim(configPath)}`);
375
+ spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3__default.default.dim(path)}`);
376
+ await core.write(presetMeta["kubb.config"], path);
377
+ spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3__default.default.dim(path)}`);
386
378
  const results = await Promise.allSettled([
387
379
  execa.$`npm init es6 -y`,
388
380
  ...presetMeta.packages.map(async (pack) => {
@@ -405,6 +397,7 @@ async function init({ preset = "simple", logLevel = core.LogLevel.silent, packag
405
397
 
406
398
  // src/index.ts
407
399
  var moduleName = "kubb";
400
+ var logger = core.createLogger(spinner);
408
401
  function programCatcher(e, CLIOptions) {
409
402
  const originalError = e;
410
403
  let error = originalError;
@@ -425,30 +418,20 @@ function programCatcher(e, CLIOptions) {
425
418
  process.exit(1);
426
419
  }
427
420
  async function generateAction(input, CLIOptions) {
428
- spinner.start("\u{1F50D} Loading config");
421
+ spinner.start("\u{1F4BE} Loading config");
429
422
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
430
- spinner.succeed(`\u{1F50D} Config loaded(${pc3__default.default.dim(path__default.default.relative(process.cwd(), result.filepath))})`);
423
+ spinner.succeed(`\u{1F4BE} Config loaded(${pc3__default.default.dim(pathParser__default.default.relative(process.cwd(), result.filepath))})`);
431
424
  const config = await getConfig(result, CLIOptions);
432
- if (CLIOptions.watch) {
433
- if (Array.isArray(config)) {
434
- throw new Error("Cannot use watcher with multiple KubbConfigs(array)");
435
- }
436
- if (core.isInputPath(config)) {
437
- return startWatcher([input || config.input.path], async (paths) => {
438
- await generate({ config, CLIOptions });
439
- spinner.spinner = "simpleDotsScrolling";
440
- spinner.start(pc3__default.default.yellow(pc3__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
441
- });
442
- }
443
- }
444
- if (Array.isArray(config)) {
445
- const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }));
446
- await core.executeStrategies.hookSeq(promises);
447
- return;
425
+ if (CLIOptions.watch && "path" in config.input) {
426
+ return startWatcher([input || config.input.path], async (paths) => {
427
+ await generate({ config, CLIOptions, logger });
428
+ spinner.spinner = "simpleDotsScrolling";
429
+ spinner.start(pc3__default.default.yellow(pc3__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
430
+ });
448
431
  }
449
- await generate({ input, config, CLIOptions });
432
+ await generate({ input, config, CLIOptions, logger });
450
433
  }
451
- async function run(argv) {
434
+ async function runCLI(argv) {
452
435
  const program = cac.cac(moduleName);
453
436
  program.command("[input]", "Path of the input file(overrides the one in `kubb.config.js`)").action(generateAction);
454
437
  program.command("generate [input]", "Path of the input file(overrides the one in `kubb.config.js`)").option("-c, --config <path>", "Path to the Kubb config").option("-l, --log-level <type>", "Info, silent or debug").option("-w, --watch", "Watch mode based on the input file").action(generateAction);
@@ -465,9 +448,7 @@ async function run(argv) {
465
448
  programCatcher(e, program.options);
466
449
  }
467
450
  }
468
- var src_default = run;
469
451
 
470
- exports.default = src_default;
471
- exports.run = run;
452
+ module.exports = runCLI;
472
453
  //# sourceMappingURL=out.js.map
473
454
  //# sourceMappingURL=index.cjs.map
@@ -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/OraWritable.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/init.ts"],"names":["path","LogLevel","SummaryError","pc","moduleName","spinner","callback","ParallelPluginError","randomPicoColour"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { executeStrategies, isInputPath, LogLevel, SummaryError, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig, getCosmiConfig, renderErrors, spinner, startWatcher } from './utils/index.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 originalError = e as Error\n let error = originalError\n\n // summaryError check\n const summaryError = error instanceof SummaryError ? error : undefined\n\n if (summaryError) {\n // use the real error from summaryError and use the case of SummaryError to display a summary of plugins that failed\n error = summaryError.cause as Error\n }\n\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc.red(originalError?.message) })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n if (CLIOptions.logLevel === LogLevel.silent) {\n spinner.fail(message)\n process.exit(1)\n }\n\n spinner.fail([message, ...(summaryError?.summary || [])].join('\\n'))\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 promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await executeStrategies.hookSeq(promises)\n\n // await generate({ input, config: config[0]!, CLIOptions })\n // await generate({ input, config: config[1]!, CLIOptions })\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\": \"1.14.3\",\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 \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\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 && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && pnpm publish --no-git-check -tag alpha\",\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.8.8\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.2.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'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from '../types.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/configuration/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 { CosmiconfigResult } from '../types.ts'\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.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\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/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","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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel, ParallelPluginError } from '@kubb/core'\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, { prefixText, logLevel = LogLevel.silent }: { prefixText?: string; logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (error instanceof ParallelPluginError) {\n return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join('\\n')\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 [prefixText, prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return [prefixText, ...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 { build, createLogger, LogLevel, ParallelPluginError, PluginError, SummaryError } from '@kubb/core'\nimport { randomPicoColour } from '@kubb/core'\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 (config.name) {\n spinner.prefixText = randomPicoColour(config.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 try {\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 output = await build({\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 await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const summary = getSummary({ pluginManager: output.pluginManager, config, status: 'success', hrstart, logLevel: CLIOptions.logLevel })\n console.log(summary.join(''))\n } catch (error) {\n let summary: string[] = []\n\n if (error instanceof PluginError || error instanceof ParallelPluginError) {\n summary = getSummary({ pluginManager: error.pluginManager, config, status: 'failed', hrstart, logLevel: CLIOptions.logLevel })\n }\n\n throw new SummaryError('Something went wrong\\n', { cause: error as Error, summary })\n }\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['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 failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.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?.[1] || !b.meta?.pluginKey?.[1]) {\n return 0\n }\n if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.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","import path from 'node:path'\n\nimport { isPromiseFulfilledResult, LogLevel, write } from '@kubb/core'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\nexport type Preset = 'simple'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\nexport type 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: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './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/OraWritable.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/init.ts"],"names":["pathParser","LogLevel","SummaryError","pc","moduleName","spinner","callback","ParallelPluginError","logger"],"mappings":"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","sourcesContent":["import pathParser from 'node:path'\n\nimport { createLogger, LogLevel, SummaryError, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig, getCosmiConfig, renderErrors, spinner, startWatcher } from './utils/index.ts'\nimport generate from './generate.ts'\nimport init from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\nconst logger = createLogger(spinner)\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const originalError = e as Error\n let error = originalError\n\n // summaryError check\n const summaryError = error instanceof SummaryError ? error : undefined\n\n if (summaryError) {\n // use the real error from summaryError and use the case of SummaryError to display a summary of plugins that failed\n error = summaryError.cause as Error\n }\n\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc.red(originalError?.message) })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n if (CLIOptions.logLevel === LogLevel.silent) {\n spinner.fail(message)\n process.exit(1)\n }\n\n spinner.fail([message, ...(summaryError?.summary || [])].join('\\n'))\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(pathParser.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch && 'path' in config.input) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions, logger })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n\n await generate({ input, config, CLIOptions, logger })\n}\n\nexport default async function runCLI(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","{\n \"name\": \"@kubb/cli\",\n \"version\": \"1.14.3\",\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 \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\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 && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && pnpm publish --no-git-check -tag alpha\",\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.8.7\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.2.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'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from '../types.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<KubbConfig> {\n const config = result?.config\n let kubbUserConfig: Promise<KubbUserConfig> = Promise.resolve(config) as Promise<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 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// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbJSONPlugins, KubbObjectPlugin, KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[]): plugins is KubbJSONPlugins[] {\n return !!(plugins as KubbJSONPlugins[])?.some((plugin) => {\n return typeof plugin?.[0] === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[]): plugins is KubbObjectPlugin {\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, process.cwd())\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[] | KubbObjectPlugin[]): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n const promises = Object.keys(plugins).map((name) => {\n return importPlugin(name, plugins[name as keyof typeof plugins])\n })\n return Promise.all(promises)\n }\n\n if (isJSONPlugins(plugins)) {\n const promises = plugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options as object)\n })\n return Promise.all(promises)\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 { CosmiconfigResult } from '../types.ts'\n\n// TODO fix tsLoader for node 20 when using ESM only\n// https://github.com/TypeStrong/ts-node/issues/1997\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.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\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/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","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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel, ParallelPluginError } from '@kubb/core'\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, { prefixText, logLevel = LogLevel.silent }: { prefixText?: string; logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (error instanceof ParallelPluginError) {\n return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join('\\n')\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 [prefixText, prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return [prefixText, ...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 { build, LogLevel, ParallelPluginError, PluginError, SummaryError, timeout } from '@kubb/core'\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, Logger } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n logger: Logger\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 // wait for 100ms to be sure that all open files are close(fs)\n await timeout(100)\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 // wait for 100ms to be sure that all open files are close(fs)\n await timeout(100)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport default async function generate({ input, config, CLIOptions, logger }: GenerateProps): Promise<void> {\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 try {\n const { root: _root, ...userConfig } = config\n const logLevel = CLIOptions.logLevel ?? LogLevel.silent\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 output = await build({\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 spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n const summary = getSummary({ pluginManager: output.pluginManager, config, status: 'success', hrstart, logLevel: CLIOptions.logLevel })\n console.log(summary.join(''))\n } catch (error) {\n let summary: string[] = []\n\n if (error instanceof PluginError || error instanceof ParallelPluginError) {\n summary = getSummary({ pluginManager: error.pluginManager, config, status: 'failed', hrstart, logLevel: CLIOptions.logLevel })\n }\n\n throw new SummaryError('Something went wrong\\n', { cause: error as Error, summary })\n }\n}\n","import pathParser from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['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 = [\n ...new Set(pluginManager.executed.filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core').map((item) => item.plugin.name)),\n ]\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.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?.pluginName || !b.meta?.pluginName) {\n return 0\n }\n if (a.meta?.pluginName.length < b.meta?.pluginName.length) {\n return 1\n }\n if (a.meta?.pluginName.length > b.meta?.pluginName.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\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: pathParser.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(file.meta?.pluginName)} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\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","import pathParser from 'node:path'\n\nimport { isPromiseFulfilledResult, LogLevel, write } from '@kubb/core'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\nexport type Preset = 'simple'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\nexport type 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: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport default 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 path = pathParser.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(path)}`)\n await write(presetMeta['kubb.config'], path)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(path)}`)\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"]}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- declare function run(argv?: string[]): Promise<void>;
1
+ declare function runCLI(argv?: string[]): Promise<void>;
2
2
 
3
- export { run as default, run };
3
+ export { runCLI as default };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare function run(argv?: string[]): Promise<void>;
1
+ declare function runCLI(argv?: string[]): Promise<void>;
2
2
 
3
- export { run as default, run };
3
+ export { runCLI as default };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module';
2
- import path from 'path';
3
- import { write, LogLevel, isPromiseFulfilledResult, Warning, isInputPath, executeStrategies, isPromise, ParallelPluginError, createLogger, randomPicoColour, build, PluginError, SummaryError, PackageManager } from '@kubb/core';
2
+ import pathParser from 'path';
3
+ import { createLogger, write, LogLevel, isPromiseFulfilledResult, Warning, isPromise, ParallelPluginError, build, PluginError, SummaryError, randomPicoColour, timeout, PackageManager } from '@kubb/core';
4
4
  import { cac } from 'cac';
5
5
  import pc3 from 'picocolors';
6
6
  import { cosmiconfig } from 'cosmiconfig';
@@ -25,7 +25,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
25
25
  var version = "1.14.3";
26
26
  function isJSONPlugins(plugins) {
27
27
  return !!plugins?.some((plugin) => {
28
- return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
28
+ return typeof plugin?.[0] === "string";
29
29
  });
30
30
  }
31
31
  function isObjectPlugins(plugins) {
@@ -33,16 +33,18 @@ function isObjectPlugins(plugins) {
33
33
  }
34
34
  async function importPlugin(name, options) {
35
35
  const packageManager = new PackageManager(process.cwd());
36
- const importedPlugin = process.env.NODE_ENV === "test" ? await import(name) : await packageManager.import(name);
36
+ const importedPlugin = process.env.NODE_ENV === "test" ? await import(name) : await packageManager.import(name, process.cwd());
37
37
  return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options);
38
38
  }
39
39
  function getPlugins(plugins) {
40
40
  if (isObjectPlugins(plugins)) {
41
- throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/configuration/configure#json");
41
+ const promises = Object.keys(plugins).map((name) => {
42
+ return importPlugin(name, plugins[name]);
43
+ });
44
+ return Promise.all(promises);
42
45
  }
43
46
  if (isJSONPlugins(plugins)) {
44
- const jsonPlugins = plugins;
45
- const promises = jsonPlugins.map((plugin) => {
47
+ const promises = plugins.map((plugin) => {
46
48
  const [name, options = {}] = plugin;
47
49
  return importPlugin(name, options);
48
50
  });
@@ -63,12 +65,6 @@ async function getConfig(result, CLIOptions) {
63
65
  kubbUserConfig = Promise.resolve(possiblePromise);
64
66
  }
65
67
  let JSONConfig = await kubbUserConfig;
66
- if (Array.isArray(JSONConfig)) {
67
- const promises = JSONConfig.map(async (item) => {
68
- return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : void 0 };
69
- });
70
- return Promise.all(promises);
71
- }
72
68
  JSONConfig = {
73
69
  ...JSONConfig,
74
70
  plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : void 0
@@ -191,10 +187,10 @@ function renderErrors(error, { prefixText, logLevel = LogLevel.silent }) {
191
187
  var spinner = ora({
192
188
  spinner: "clock"
193
189
  });
194
- async function startWatcher(path4, cb) {
190
+ async function startWatcher(path, cb) {
195
191
  const { watch } = await import('chokidar');
196
192
  const ignored = ["**/{.git,node_modules}/**"];
197
- const watcher = watch(path4, {
193
+ const watcher = watch(path, {
198
194
  ignorePermissionErrors: true,
199
195
  ignored
200
196
  });
@@ -202,7 +198,7 @@ async function startWatcher(path4, cb) {
202
198
  spinner.succeed(pc3.yellow(pc3.bold(`Change detected: ${type} ${file}`)));
203
199
  spinner.spinner = "clock";
204
200
  try {
205
- cb(path4);
201
+ cb(path);
206
202
  } catch (e) {
207
203
  spinner.warn(pc3.red("Watcher failed"));
208
204
  }
@@ -212,40 +208,40 @@ async function startWatcher(path4, cb) {
212
208
  function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
213
209
  const logs = [];
214
210
  const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
215
- const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
211
+ const buildStartPlugins = [
212
+ ...new Set(pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name))
213
+ ];
216
214
  const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
217
215
  const pluginsCount = config.plugins?.length || 0;
218
216
  const files = pluginManager.fileManager.files.sort((a, b) => {
219
- if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {
217
+ if (!a.meta?.pluginName || !b.meta?.pluginName) {
220
218
  return 0;
221
219
  }
222
- if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {
220
+ if (a.meta?.pluginName.length < b.meta?.pluginName.length) {
223
221
  return 1;
224
222
  }
225
- if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {
223
+ if (a.meta?.pluginName.length > b.meta?.pluginName.length) {
226
224
  return -1;
227
225
  }
228
226
  return 0;
229
227
  });
230
228
  const meta = {
231
- name: config.name,
232
229
  plugins: status === "success" ? `${pc3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
233
230
  pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomPicoColour(name))?.join(", ") : void 0,
234
231
  filesCreated: files.length,
235
232
  time: pc3.yellow(`${elapsedSeconds}s`),
236
- output: path.resolve(config.root, config.output.path)
233
+ output: pathParser.resolve(config.root, config.output.path)
237
234
  };
238
235
  if (logLevel === LogLevel.debug) {
239
236
  logs.push(pc3.bold("\nGenerated files:\n"));
240
- logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
237
+ logs.push(files.map((file) => `${randomPicoColour(file.meta?.pluginName)} ${file.path}`).join("\n"));
241
238
  }
242
239
  logs.push(
243
240
  [
244
241
  [`
245
242
  `, true],
246
- [` ${pc3.bold("Name:")} ${meta.name}`, !!meta.name],
247
243
  [` ${pc3.bold("Plugins:")} ${meta.plugins}`, true],
248
- [` ${pc3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
244
+ [` ${pc3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
249
245
  [`${pc3.bold("Generated:")} ${meta.filesCreated} files`, true],
250
246
  [` ${pc3.bold("Time:")} ${meta.time}`, true],
251
247
  [` ${pc3.bold("Output:")} ${meta.output}`, true],
@@ -277,6 +273,7 @@ async function executeHooks({ hooks, logLevel }) {
277
273
  if (!cmd) {
278
274
  return null;
279
275
  }
276
+ await timeout(100);
280
277
  spinner.start(`Executing hook ${logLevel !== "silent" ? pc3.dim(command) : ""}`);
281
278
  const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
282
279
  spinner.suffixText = "";
@@ -287,16 +284,13 @@ async function executeHooks({ hooks, logLevel }) {
287
284
  oraWritable.destroy();
288
285
  return { subProcess, abort: abortController.abort.bind(abortController) };
289
286
  }).filter(Boolean);
287
+ await timeout(100);
290
288
  await Promise.all(executers);
291
289
  if (logLevel === LogLevel.silent) {
292
290
  spinner.succeed(`Executing hooks`);
293
291
  }
294
292
  }
295
- async function generate({ input, config, CLIOptions }) {
296
- const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner });
297
- if (config.name) {
298
- spinner.prefixText = randomPicoColour(config.name);
299
- }
293
+ async function generate({ input, config, CLIOptions, logger: logger2 }) {
300
294
  const hrstart = process.hrtime();
301
295
  if (CLIOptions.logLevel === LogLevel.debug) {
302
296
  const { performance, PerformanceObserver } = await import('perf_hooks');
@@ -309,7 +303,7 @@ async function generate({ input, config, CLIOptions }) {
309
303
  }
310
304
  try {
311
305
  const { root: _root, ...userConfig } = config;
312
- const logLevel = logger.logLevel;
306
+ const logLevel = CLIOptions.logLevel ?? LogLevel.silent;
313
307
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
314
308
  spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc3.dim(inputPath) : ""}`);
315
309
  const output = await build({
@@ -325,11 +319,11 @@ async function generate({ input, config, CLIOptions }) {
325
319
  ...userConfig.output
326
320
  }
327
321
  },
328
- logger
322
+ logger: logger2
329
323
  });
330
- await executeHooks({ hooks: config.hooks, logLevel });
331
324
  spinner.suffixText = "";
332
325
  spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc3.dim(inputPath) : ""}`);
326
+ await executeHooks({ hooks: config.hooks, logLevel });
333
327
  const summary = getSummary({ pluginManager: output.pluginManager, config, status: "success", hrstart, logLevel: CLIOptions.logLevel });
334
328
  console.log(summary.join(""));
335
329
  } catch (error) {
@@ -358,7 +352,7 @@ export default defineConfig({
358
352
  clean: true,
359
353
  },
360
354
  hooks: {
361
- done: ['echo "\u{1F389} done"'],
355
+ done: 'echo "\u{1F389} done"',
362
356
  },
363
357
  plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
364
358
  })
@@ -369,11 +363,11 @@ export default defineConfig({
369
363
  async function init({ preset = "simple", logLevel = LogLevel.silent, packageManager = "pnpm" }) {
370
364
  spinner.start("\u{1F4E6} Initializing Kubb");
371
365
  const presetMeta = presets[preset];
372
- const configPath = path.resolve(process.cwd(), "./kubb.config.js");
366
+ const path = pathParser.resolve(process.cwd(), "./kubb.config.js");
373
367
  const installCommand = packageManager === "npm" ? "install" : "add";
374
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3.dim(configPath)}`);
375
- await write(presetMeta["kubb.config"], configPath);
376
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3.dim(configPath)}`);
368
+ spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3.dim(path)}`);
369
+ await write(presetMeta["kubb.config"], path);
370
+ spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3.dim(path)}`);
377
371
  const results = await Promise.allSettled([
378
372
  $`npm init es6 -y`,
379
373
  ...presetMeta.packages.map(async (pack) => {
@@ -396,6 +390,7 @@ async function init({ preset = "simple", logLevel = LogLevel.silent, packageMana
396
390
 
397
391
  // src/index.ts
398
392
  var moduleName = "kubb";
393
+ var logger = createLogger(spinner);
399
394
  function programCatcher(e, CLIOptions) {
400
395
  const originalError = e;
401
396
  let error = originalError;
@@ -416,30 +411,20 @@ function programCatcher(e, CLIOptions) {
416
411
  process.exit(1);
417
412
  }
418
413
  async function generateAction(input, CLIOptions) {
419
- spinner.start("\u{1F50D} Loading config");
414
+ spinner.start("\u{1F4BE} Loading config");
420
415
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
421
- spinner.succeed(`\u{1F50D} Config loaded(${pc3.dim(path.relative(process.cwd(), result.filepath))})`);
416
+ spinner.succeed(`\u{1F4BE} Config loaded(${pc3.dim(pathParser.relative(process.cwd(), result.filepath))})`);
422
417
  const config = await getConfig(result, CLIOptions);
423
- if (CLIOptions.watch) {
424
- if (Array.isArray(config)) {
425
- throw new Error("Cannot use watcher with multiple KubbConfigs(array)");
426
- }
427
- if (isInputPath(config)) {
428
- return startWatcher([input || config.input.path], async (paths) => {
429
- await generate({ config, CLIOptions });
430
- spinner.spinner = "simpleDotsScrolling";
431
- spinner.start(pc3.yellow(pc3.bold(`Watching for changes in ${paths.join(" and ")}`)));
432
- });
433
- }
434
- }
435
- if (Array.isArray(config)) {
436
- const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }));
437
- await executeStrategies.hookSeq(promises);
438
- return;
418
+ if (CLIOptions.watch && "path" in config.input) {
419
+ return startWatcher([input || config.input.path], async (paths) => {
420
+ await generate({ config, CLIOptions, logger });
421
+ spinner.spinner = "simpleDotsScrolling";
422
+ spinner.start(pc3.yellow(pc3.bold(`Watching for changes in ${paths.join(" and ")}`)));
423
+ });
439
424
  }
440
- await generate({ input, config, CLIOptions });
425
+ await generate({ input, config, CLIOptions, logger });
441
426
  }
442
- async function run(argv) {
427
+ async function runCLI(argv) {
443
428
  const program = cac(moduleName);
444
429
  program.command("[input]", "Path of the input file(overrides the one in `kubb.config.js`)").action(generateAction);
445
430
  program.command("generate [input]", "Path of the input file(overrides the one in `kubb.config.js`)").option("-c, --config <path>", "Path to the Kubb config").option("-l, --log-level <type>", "Info, silent or debug").option("-w, --watch", "Watch mode based on the input file").action(generateAction);
@@ -456,8 +441,7 @@ async function run(argv) {
456
441
  programCatcher(e, program.options);
457
442
  }
458
443
  }
459
- var src_default = run;
460
444
 
461
- export { src_default as default, run };
445
+ export { runCLI as default };
462
446
  //# sourceMappingURL=out.js.map
463
447
  //# sourceMappingURL=index.js.map
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/OraWritable.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/init.ts"],"names":["path","LogLevel","SummaryError","pc","moduleName","spinner","callback","ParallelPluginError","randomPicoColour"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { executeStrategies, isInputPath, LogLevel, SummaryError, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig, getCosmiConfig, renderErrors, spinner, startWatcher } from './utils/index.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 originalError = e as Error\n let error = originalError\n\n // summaryError check\n const summaryError = error instanceof SummaryError ? error : undefined\n\n if (summaryError) {\n // use the real error from summaryError and use the case of SummaryError to display a summary of plugins that failed\n error = summaryError.cause as Error\n }\n\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc.red(originalError?.message) })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n if (CLIOptions.logLevel === LogLevel.silent) {\n spinner.fail(message)\n process.exit(1)\n }\n\n spinner.fail([message, ...(summaryError?.summary || [])].join('\\n'))\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 promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await executeStrategies.hookSeq(promises)\n\n // await generate({ input, config: config[0]!, CLIOptions })\n // await generate({ input, config: config[1]!, CLIOptions })\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\": \"1.14.3\",\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 \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\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 && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && pnpm publish --no-git-check -tag alpha\",\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.8.8\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.2.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'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from '../types.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/configuration/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 { CosmiconfigResult } from '../types.ts'\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.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\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/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","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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel, ParallelPluginError } from '@kubb/core'\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, { prefixText, logLevel = LogLevel.silent }: { prefixText?: string; logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (error instanceof ParallelPluginError) {\n return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join('\\n')\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 [prefixText, prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return [prefixText, ...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 { build, createLogger, LogLevel, ParallelPluginError, PluginError, SummaryError } from '@kubb/core'\nimport { randomPicoColour } from '@kubb/core'\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 (config.name) {\n spinner.prefixText = randomPicoColour(config.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 try {\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 output = await build({\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 await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const summary = getSummary({ pluginManager: output.pluginManager, config, status: 'success', hrstart, logLevel: CLIOptions.logLevel })\n console.log(summary.join(''))\n } catch (error) {\n let summary: string[] = []\n\n if (error instanceof PluginError || error instanceof ParallelPluginError) {\n summary = getSummary({ pluginManager: error.pluginManager, config, status: 'failed', hrstart, logLevel: CLIOptions.logLevel })\n }\n\n throw new SummaryError('Something went wrong\\n', { cause: error as Error, summary })\n }\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['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 failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.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?.[1] || !b.meta?.pluginKey?.[1]) {\n return 0\n }\n if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.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","import path from 'node:path'\n\nimport { isPromiseFulfilledResult, LogLevel, write } from '@kubb/core'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\nexport type Preset = 'simple'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\nexport type 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: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './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/OraWritable.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/init.ts"],"names":["pathParser","LogLevel","SummaryError","pc","moduleName","spinner","callback","ParallelPluginError","logger"],"mappings":"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","sourcesContent":["import pathParser from 'node:path'\n\nimport { createLogger, LogLevel, SummaryError, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig, getCosmiConfig, renderErrors, spinner, startWatcher } from './utils/index.ts'\nimport generate from './generate.ts'\nimport init from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\nconst logger = createLogger(spinner)\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const originalError = e as Error\n let error = originalError\n\n // summaryError check\n const summaryError = error instanceof SummaryError ? error : undefined\n\n if (summaryError) {\n // use the real error from summaryError and use the case of SummaryError to display a summary of plugins that failed\n error = summaryError.cause as Error\n }\n\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc.red(originalError?.message) })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n if (CLIOptions.logLevel === LogLevel.silent) {\n spinner.fail(message)\n process.exit(1)\n }\n\n spinner.fail([message, ...(summaryError?.summary || [])].join('\\n'))\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(pathParser.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch && 'path' in config.input) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions, logger })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n\n await generate({ input, config, CLIOptions, logger })\n}\n\nexport default async function runCLI(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","{\n \"name\": \"@kubb/cli\",\n \"version\": \"1.14.3\",\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 \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\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 && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && pnpm publish --no-git-check -tag alpha\",\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.8.7\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.2.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'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from '../types.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<KubbConfig> {\n const config = result?.config\n let kubbUserConfig: Promise<KubbUserConfig> = Promise.resolve(config) as Promise<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 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// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbJSONPlugins, KubbObjectPlugin, KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[]): plugins is KubbJSONPlugins[] {\n return !!(plugins as KubbJSONPlugins[])?.some((plugin) => {\n return typeof plugin?.[0] === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[]): plugins is KubbObjectPlugin {\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, process.cwd())\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins'] | KubbJSONPlugins[] | KubbObjectPlugin[]): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n const promises = Object.keys(plugins).map((name) => {\n return importPlugin(name, plugins[name as keyof typeof plugins])\n })\n return Promise.all(promises)\n }\n\n if (isJSONPlugins(plugins)) {\n const promises = plugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options as object)\n })\n return Promise.all(promises)\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 { CosmiconfigResult } from '../types.ts'\n\n// TODO fix tsLoader for node 20 when using ESM only\n// https://github.com/TypeStrong/ts-node/issues/1997\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.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\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/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","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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel, ParallelPluginError } from '@kubb/core'\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, { prefixText, logLevel = LogLevel.silent }: { prefixText?: string; logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (error instanceof ParallelPluginError) {\n return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join('\\n')\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 [prefixText, prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return [prefixText, ...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 { build, LogLevel, ParallelPluginError, PluginError, SummaryError, timeout } from '@kubb/core'\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, Logger } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n logger: Logger\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 // wait for 100ms to be sure that all open files are close(fs)\n await timeout(100)\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 // wait for 100ms to be sure that all open files are close(fs)\n await timeout(100)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport default async function generate({ input, config, CLIOptions, logger }: GenerateProps): Promise<void> {\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 try {\n const { root: _root, ...userConfig } = config\n const logLevel = CLIOptions.logLevel ?? LogLevel.silent\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 output = await build({\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 spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n const summary = getSummary({ pluginManager: output.pluginManager, config, status: 'success', hrstart, logLevel: CLIOptions.logLevel })\n console.log(summary.join(''))\n } catch (error) {\n let summary: string[] = []\n\n if (error instanceof PluginError || error instanceof ParallelPluginError) {\n summary = getSummary({ pluginManager: error.pluginManager, config, status: 'failed', hrstart, logLevel: CLIOptions.logLevel })\n }\n\n throw new SummaryError('Something went wrong\\n', { cause: error as Error, summary })\n }\n}\n","import pathParser from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['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 = [\n ...new Set(pluginManager.executed.filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core').map((item) => item.plugin.name)),\n ]\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.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?.pluginName || !b.meta?.pluginName) {\n return 0\n }\n if (a.meta?.pluginName.length < b.meta?.pluginName.length) {\n return 1\n }\n if (a.meta?.pluginName.length > b.meta?.pluginName.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\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: pathParser.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(file.meta?.pluginName)} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\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","import pathParser from 'node:path'\n\nimport { isPromiseFulfilledResult, LogLevel, write } from '@kubb/core'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\nexport type Preset = 'simple'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\nexport type 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: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport default 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 path = pathParser.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(path)}`)\n await write(presetMeta['kubb.config'], path)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(path)}`)\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "1.15.0-canary.20231024T104437",
3
+ "version": "1.15.0-canary.20231025T103503",
4
4
  "description": "Generator cli",
5
5
  "keywords": [
6
6
  "typescript",
@@ -40,16 +40,16 @@
40
40
  "pretty-error": "^4.0.0",
41
41
  "string-argv": "^0.3.2",
42
42
  "ts-node": "^10.9.1",
43
- "@kubb/core": "1.15.0-canary.20231024T104207"
43
+ "@kubb/core": "1.15.0-canary.20231025T103357"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/node": "^20.8.8",
46
+ "@types/node": "^20.8.7",
47
47
  "source-map-support": "^0.5.21",
48
48
  "tsup": "^7.2.0",
49
49
  "typescript": "^5.2.2",
50
- "@kubb/swagger": "1.15.0-canary.20231024T104349",
51
- "@kubb/tsup-config": "1.1.8",
52
- "@kubb/ts-config": "0.1.0"
50
+ "@kubb/swagger": "1.15.0-canary.20231025T103442",
51
+ "@kubb/ts-config": "0.1.0",
52
+ "@kubb/tsup-config": "1.1.8"
53
53
  },
54
54
  "packageManager": "pnpm@8.3.0",
55
55
  "engines": {