@kubb/cli 1.15.0-canary.20231027T175002 → 1.15.0-canary.20231027T201044

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,24 +1,21 @@
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
- var utils = require('@kubb/core/utils');
8
5
  var cac = require('cac');
9
- var pc2 = require('picocolors');
6
+ var pc3 = require('picocolors');
10
7
  var cosmiconfig = require('cosmiconfig');
11
8
  var tsNode = require('ts-node');
9
+ var stream = require('stream');
12
10
  var PrettyError = require('pretty-error');
13
11
  var ora = require('ora');
14
12
  var execa = require('execa');
15
13
  var stringArgv = require('string-argv');
16
- var stream = require('stream');
17
14
 
18
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
16
 
20
- var path__default = /*#__PURE__*/_interopDefault(path);
21
- var pc2__default = /*#__PURE__*/_interopDefault(pc2);
17
+ var pathParser__default = /*#__PURE__*/_interopDefault(pathParser);
18
+ var pc3__default = /*#__PURE__*/_interopDefault(pc3);
22
19
  var tsNode__default = /*#__PURE__*/_interopDefault(tsNode);
23
20
  var PrettyError__default = /*#__PURE__*/_interopDefault(PrettyError);
24
21
  var ora__default = /*#__PURE__*/_interopDefault(ora);
@@ -35,7 +32,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
35
32
  var version = "1.14.5";
36
33
  function isJSONPlugins(plugins) {
37
34
  return !!plugins?.some((plugin) => {
38
- return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
35
+ return typeof plugin?.[0] === "string";
39
36
  });
40
37
  }
41
38
  function isObjectPlugins(plugins) {
@@ -43,16 +40,18 @@ function isObjectPlugins(plugins) {
43
40
  }
44
41
  async function importPlugin(name, options) {
45
42
  const packageManager = new core.PackageManager(process.cwd());
46
- 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());
47
44
  return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options);
48
45
  }
49
46
  function getPlugins(plugins) {
50
47
  if (isObjectPlugins(plugins)) {
51
- 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);
52
52
  }
53
53
  if (isJSONPlugins(plugins)) {
54
- const jsonPlugins = plugins;
55
- const promises = jsonPlugins.map((plugin) => {
54
+ const promises = plugins.map((plugin) => {
56
55
  const [name, options = {}] = plugin;
57
56
  return importPlugin(name, options);
58
57
  });
@@ -67,18 +66,12 @@ async function getConfig(result, CLIOptions) {
67
66
  let kubbUserConfig = Promise.resolve(config);
68
67
  if (typeof config === "function") {
69
68
  const possiblePromise = config(CLIOptions);
70
- if (utils.isPromise(possiblePromise)) {
69
+ if (core.isPromise(possiblePromise)) {
71
70
  kubbUserConfig = possiblePromise;
72
71
  }
73
72
  kubbUserConfig = Promise.resolve(possiblePromise);
74
73
  }
75
74
  let JSONConfig = await kubbUserConfig;
76
- if (Array.isArray(JSONConfig)) {
77
- const promises = JSONConfig.map(async (item) => {
78
- return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : void 0 };
79
- });
80
- return Promise.all(promises);
81
- }
82
75
  JSONConfig = {
83
76
  ...JSONConfig,
84
77
  plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : void 0
@@ -143,6 +136,27 @@ async function getCosmiConfig(moduleName2, config) {
143
136
  }
144
137
  return result;
145
138
  }
139
+ var OraWritable = class extends stream.Writable {
140
+ command;
141
+ spinner;
142
+ constructor(spinner2, command, opts) {
143
+ super(opts);
144
+ this.command = command;
145
+ this.spinner = spinner2;
146
+ }
147
+ _write(chunk, _encoding, callback2) {
148
+ this.spinner.suffixText = `
149
+
150
+ ${pc3__default.default.bold(pc3__default.default.blue(this.command))}: ${chunk?.toString()}`;
151
+ callback2();
152
+ }
153
+ };
154
+
155
+ // src/utils/parseHrtimeToSeconds.ts
156
+ function parseHrtimeToSeconds(hrtime) {
157
+ const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
158
+ return seconds;
159
+ }
146
160
  var prettyError = new PrettyError__default.default().skipPackage("commander").skip(function callback(traceLine) {
147
161
  const pattern = new RegExp("renderErrors");
148
162
  const hasMatch = traceLine?.file?.match(pattern);
@@ -160,14 +174,14 @@ function getErrorCauses(errors) {
160
174
  return prev;
161
175
  }, []).filter(Boolean);
162
176
  }
163
- function renderErrors(error, { prefixText, logLevel = utils.LogLevel.silent }) {
177
+ function renderErrors(error, { prefixText, logLevel = core.LogLevel.silent }) {
164
178
  if (!error) {
165
179
  return "";
166
180
  }
167
181
  if (error instanceof core.ParallelPluginError) {
168
182
  return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join("\n");
169
183
  }
170
- if (logLevel === utils.LogLevel.silent) {
184
+ if (logLevel === core.LogLevel.silent) {
171
185
  prettyError.skipNodeFiles();
172
186
  prettyError.skip(function skip() {
173
187
  return true;
@@ -180,72 +194,64 @@ function renderErrors(error, { prefixText, logLevel = utils.LogLevel.silent }) {
180
194
  var spinner = ora__default.default({
181
195
  spinner: "clock"
182
196
  });
183
- async function startWatcher(path4, cb) {
197
+ async function startWatcher(path, cb) {
184
198
  const { watch } = await import('chokidar');
185
199
  const ignored = ["**/{.git,node_modules}/**"];
186
- const watcher = watch(path4, {
200
+ const watcher = watch(path, {
187
201
  ignorePermissionErrors: true,
188
202
  ignored
189
203
  });
190
204
  watcher.on("all", (type, file) => {
191
- spinner.succeed(pc2__default.default.yellow(pc2__default.default.bold(`Change detected: ${type} ${file}`)));
205
+ spinner.succeed(pc3__default.default.yellow(pc3__default.default.bold(`Change detected: ${type} ${file}`)));
192
206
  spinner.spinner = "clock";
193
207
  try {
194
- cb(path4);
208
+ cb(path);
195
209
  } catch (e) {
196
- spinner.warn(pc2__default.default.red("Watcher failed"));
210
+ spinner.warn(pc3__default.default.red("Watcher failed"));
197
211
  }
198
212
  });
199
213
  return;
200
214
  }
201
-
202
- // src/utils/parseHrtimeToSeconds.ts
203
- function parseHrtimeToSeconds(hrtime) {
204
- const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
205
- return seconds;
206
- }
207
-
208
- // src/utils/getSummary.ts
209
215
  function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
210
216
  const logs = [];
211
217
  const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
212
- 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
+ ];
213
221
  const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
214
222
  const pluginsCount = config.plugins?.length || 0;
215
223
  const files = pluginManager.fileManager.files.sort((a, b) => {
216
- if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {
224
+ if (!a.meta?.pluginName || !b.meta?.pluginName) {
217
225
  return 0;
218
226
  }
219
- if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {
227
+ if (a.meta?.pluginName.length < b.meta?.pluginName.length) {
220
228
  return 1;
221
229
  }
222
- if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {
230
+ if (a.meta?.pluginName.length > b.meta?.pluginName.length) {
223
231
  return -1;
224
232
  }
225
233
  return 0;
226
234
  });
227
235
  const meta = {
228
- name: config.name,
229
- plugins: status === "success" ? `${pc2__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc2__default.default.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
230
- pluginsFailed: status === "failed" ? failedPlugins?.map((name) => utils.randomPicoColour(name))?.join(", ") : void 0,
236
+ plugins: status === "success" ? `${pc3__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3__default.default.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
237
+ pluginsFailed: status === "failed" ? failedPlugins?.map((name) => core.randomPicoColour(name))?.join(", ") : void 0,
231
238
  filesCreated: files.length,
232
- time: pc2__default.default.yellow(`${elapsedSeconds}s`),
233
- output: path__default.default.resolve(config.root, config.output.path)
239
+ time: pc3__default.default.yellow(`${elapsedSeconds}s`),
240
+ output: pathParser__default.default.resolve(config.root, config.output.path)
234
241
  };
235
- if (logLevel === utils.LogLevel.debug) {
236
- logs.push(pc2__default.default.bold("\nGenerated files:\n"));
237
- logs.push(files.map((file) => `${utils.randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
242
+ if (logLevel === core.LogLevel.debug) {
243
+ logs.push(pc3__default.default.bold("\nGenerated files:\n"));
244
+ logs.push(files.map((file) => `${core.randomPicoColour(file.meta?.pluginName)} ${file.path}`).join("\n"));
238
245
  }
239
246
  logs.push(
240
247
  [
241
248
  [`
242
249
  `, true],
243
- [` ${pc2__default.default.bold("Name:")} ${meta.name}`, !!meta.name],
244
- [` ${pc2__default.default.bold("Plugins:")} ${meta.plugins}`, true],
245
- [` ${pc2__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
246
- [`${pc2__default.default.bold("Generated:")} ${meta.filesCreated} files`, true],
247
- [` ${pc2__default.default.bold("Time:")} ${meta.time}`, true],
248
- [` ${pc2__default.default.bold("Output:")} ${meta.output}`, true],
250
+ [` ${pc3__default.default.bold("Plugins:")} ${meta.plugins}`, true],
251
+ [` ${pc3__default.default.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
252
+ [`${pc3__default.default.bold("Generated:")} ${meta.filesCreated} files`, true],
253
+ [` ${pc3__default.default.bold("Time:")} ${meta.time}`, true],
254
+ [` ${pc3__default.default.bold("Output:")} ${meta.output}`, true],
249
255
  [`
250
256
  `, true]
251
257
  ].map((item) => {
@@ -257,19 +263,6 @@ function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
257
263
  );
258
264
  return logs;
259
265
  }
260
- var OraWritable = class extends stream.Writable {
261
- constructor(spinner2, command, opts) {
262
- super(opts);
263
- this.command = command;
264
- this.spinner = spinner2;
265
- }
266
- _write(chunk, _encoding, callback2) {
267
- this.spinner.suffixText = `
268
-
269
- ${pc2__default.default.bold(pc2__default.default.blue(this.command))}: ${chunk?.toString()}`;
270
- callback2();
271
- }
272
- };
273
266
 
274
267
  // src/generate.ts
275
268
  async function executeHooks({ hooks, logLevel }) {
@@ -277,7 +270,7 @@ async function executeHooks({ hooks, logLevel }) {
277
270
  return;
278
271
  }
279
272
  const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done];
280
- if (logLevel === utils.LogLevel.silent) {
273
+ if (logLevel === core.LogLevel.silent) {
281
274
  spinner.start(`Executing hooks`);
282
275
  }
283
276
  const executers = commands.map(async (command) => {
@@ -287,41 +280,39 @@ async function executeHooks({ hooks, logLevel }) {
287
280
  if (!cmd) {
288
281
  return null;
289
282
  }
290
- spinner.start(`Executing hook ${logLevel !== "silent" ? pc2__default.default.dim(command) : ""}`);
283
+ await core.timeout(100);
284
+ spinner.start(`Executing hook ${logLevel !== "silent" ? pc3__default.default.dim(command) : ""}`);
291
285
  const subProcess = await execa.execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
292
286
  spinner.suffixText = "";
293
- if (logLevel === utils.LogLevel.silent) {
294
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc2__default.default.dim(command) : ""}`);
287
+ if (logLevel === core.LogLevel.silent) {
288
+ spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc3__default.default.dim(command) : ""}`);
295
289
  console.log(subProcess.stdout);
296
290
  }
297
291
  oraWritable.destroy();
298
292
  return { subProcess, abort: abortController.abort.bind(abortController) };
299
293
  }).filter(Boolean);
294
+ await core.timeout(100);
300
295
  await Promise.all(executers);
301
- if (logLevel === utils.LogLevel.silent) {
296
+ if (logLevel === core.LogLevel.silent) {
302
297
  spinner.succeed(`Executing hooks`);
303
298
  }
304
299
  }
305
- async function generate({ input, config, CLIOptions }) {
306
- const logger = utils.createLogger({ logLevel: CLIOptions.logLevel || utils.LogLevel.silent, name: config.name, spinner });
307
- if (logger.name) {
308
- spinner.prefixText = utils.randomPicoColour(logger.name);
309
- }
300
+ async function generate({ input, config, CLIOptions, logger: logger2 }) {
310
301
  const hrstart = process.hrtime();
311
- if (CLIOptions.logLevel === utils.LogLevel.debug) {
302
+ if (CLIOptions.logLevel === core.LogLevel.debug) {
312
303
  const { performance, PerformanceObserver } = await import('perf_hooks');
313
304
  const performanceOpserver = new PerformanceObserver((items) => {
314
305
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
315
- spinner.suffixText = pc2__default.default.yellow(message);
306
+ spinner.suffixText = pc3__default.default.yellow(message);
316
307
  performance.clearMarks();
317
308
  });
318
309
  performanceOpserver.observe({ type: "measure" });
319
310
  }
320
311
  try {
321
312
  const { root: _root, ...userConfig } = config;
322
- const logLevel = logger.logLevel;
313
+ const logLevel = CLIOptions.logLevel ?? core.LogLevel.silent;
323
314
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
324
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc2__default.default.dim(inputPath) : ""}`);
315
+ spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc3__default.default.dim(inputPath) : ""}`);
325
316
  const output = await core.build({
326
317
  config: {
327
318
  root: process.cwd(),
@@ -335,11 +326,11 @@ async function generate({ input, config, CLIOptions }) {
335
326
  ...userConfig.output
336
327
  }
337
328
  },
338
- logger
329
+ logger: logger2
339
330
  });
340
- await executeHooks({ hooks: config.hooks, logLevel });
341
331
  spinner.suffixText = "";
342
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc2__default.default.dim(inputPath) : ""}`);
332
+ spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc3__default.default.dim(inputPath) : ""}`);
333
+ await executeHooks({ hooks: config.hooks, logLevel });
343
334
  const summary = getSummary({ pluginManager: output.pluginManager, config, status: "success", hrstart, logLevel: CLIOptions.logLevel });
344
335
  console.log(summary.join(""));
345
336
  } catch (error) {
@@ -368,7 +359,7 @@ export default defineConfig({
368
359
  clean: true,
369
360
  },
370
361
  hooks: {
371
- done: ['echo "\u{1F389} done"'],
362
+ done: 'echo "\u{1F389} done"',
372
363
  },
373
364
  plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
374
365
  })
@@ -376,26 +367,26 @@ export default defineConfig({
376
367
  packages: ["@kubb/core", "@kubb/cli", "@kubb/swagger", "@kubb/swagger-ts", "@kubb/swagger-tanstack-query"]
377
368
  }
378
369
  };
379
- async function init({ preset = "simple", logLevel = utils.LogLevel.silent, packageManager = "pnpm" }) {
370
+ async function init({ preset = "simple", logLevel = core.LogLevel.silent, packageManager = "pnpm" }) {
380
371
  spinner.start("\u{1F4E6} Initializing Kubb");
381
372
  const presetMeta = presets[preset];
382
- const configPath = path__default.default.resolve(process.cwd(), "./kubb.config.js");
373
+ const path = pathParser__default.default.resolve(process.cwd(), "./kubb.config.js");
383
374
  const installCommand = packageManager === "npm" ? "install" : "add";
384
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc2__default.default.dim(configPath)}`);
385
- await utils.write(presetMeta["kubb.config"], configPath);
386
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc2__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)}`);
387
378
  const results = await Promise.allSettled([
388
379
  execa.$`npm init es6 -y`,
389
380
  ...presetMeta.packages.map(async (pack) => {
390
- spinner.start(`\u{1F4C0} Installing ${pc2__default.default.dim(pack)}`);
381
+ spinner.start(`\u{1F4C0} Installing ${pc3__default.default.dim(pack)}`);
391
382
  const { stdout } = await execa.$({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
392
- spinner.succeed(`\u{1F4C0} Installed ${pc2__default.default.dim(pack)}`);
383
+ spinner.succeed(`\u{1F4C0} Installed ${pc3__default.default.dim(pack)}`);
393
384
  return stdout;
394
385
  })
395
386
  ]);
396
- if (logLevel === utils.LogLevel.info) {
387
+ if (logLevel === core.LogLevel.info) {
397
388
  results.forEach((result) => {
398
- if (utils.isPromiseFulfilledResult(result)) {
389
+ if (core.isPromiseFulfilledResult(result)) {
399
390
  console.log(result.value);
400
391
  }
401
392
  });
@@ -406,6 +397,7 @@ async function init({ preset = "simple", logLevel = utils.LogLevel.silent, packa
406
397
 
407
398
  // src/index.ts
408
399
  var moduleName = "kubb";
400
+ var logger = core.createLogger(spinner);
409
401
  function programCatcher(e, CLIOptions) {
410
402
  const originalError = e;
411
403
  let error = originalError;
@@ -413,12 +405,12 @@ function programCatcher(e, CLIOptions) {
413
405
  if (summaryError) {
414
406
  error = summaryError.cause;
415
407
  }
416
- const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc2__default.default.red(originalError?.message) });
408
+ const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc3__default.default.red(originalError?.message) });
417
409
  if (error instanceof core.Warning) {
418
- spinner.warn(pc2__default.default.yellow(error.message));
410
+ spinner.warn(pc3__default.default.yellow(error.message));
419
411
  process.exit(0);
420
412
  }
421
- if (CLIOptions.logLevel === utils.LogLevel.silent) {
413
+ if (CLIOptions.logLevel === core.LogLevel.silent) {
422
414
  spinner.fail(message);
423
415
  process.exit(1);
424
416
  }
@@ -426,31 +418,20 @@ function programCatcher(e, CLIOptions) {
426
418
  process.exit(1);
427
419
  }
428
420
  async function generateAction(input, CLIOptions) {
429
- spinner.start("\u{1F50D} Loading config");
421
+ spinner.start("\u{1F4BE} Loading config");
430
422
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
431
- spinner.succeed(`\u{1F50D} Config loaded(${pc2__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))})`);
432
424
  const config = await getConfig(result, CLIOptions);
433
- if (CLIOptions.watch) {
434
- if (Array.isArray(config)) {
435
- throw new Error("Cannot use watcher with multiple KubbConfigs(array)");
436
- }
437
- if (core.isInputPath(config)) {
438
- return startWatcher([input || config.input.path], async (paths) => {
439
- await generate({ config, CLIOptions });
440
- spinner.spinner = "simpleDotsScrolling";
441
- spinner.start(pc2__default.default.yellow(pc2__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
442
- });
443
- }
444
- }
445
- if (Array.isArray(config)) {
446
- const promiseManager = new core.PromiseManager();
447
- const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }));
448
- await promiseManager.run("seq", promises);
449
- 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
+ });
450
431
  }
451
- await generate({ input, config, CLIOptions });
432
+ await generate({ input, config, CLIOptions, logger });
452
433
  }
453
- async function run(argv) {
434
+ async function runCLI(argv) {
454
435
  const program = cac.cac(moduleName);
455
436
  program.command("[input]", "Path of the input file(overrides the one in `kubb.config.js`)").action(generateAction);
456
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);
@@ -467,9 +448,7 @@ async function run(argv) {
467
448
  programCatcher(e, program.options);
468
449
  }
469
450
  }
470
- var src_default = run;
471
451
 
472
- exports.default = src_default;
473
- exports.run = run;
452
+ module.exports = runCLI;
474
453
  //# sourceMappingURL=out.js.map
475
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/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","SummaryError","LogLevel","pc","moduleName","ParallelPluginError","randomPicoColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, SummaryError, Warning } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const 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 promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"1.14.5\",\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 && node ../../scripts/build.js canary && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && node ../../scripts/build.js alpha && 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.9\",\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/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/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 { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { ParallelPluginError } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { 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, ParallelPluginError, PluginError, SummaryError } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start(`Executing hooks`)\n }\n\n const executers: Promise<Executer | null>[] = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n 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/utils'\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","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: '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.5\",\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.9\",\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,16 +1,15 @@
1
1
  import { createRequire } from 'module';
2
- import path from 'path';
3
- import { Warning, isInputPath, PromiseManager, ParallelPluginError, build, PluginError, SummaryError, PackageManager } from '@kubb/core';
4
- import { write, LogLevel, isPromiseFulfilledResult, isPromise, createLogger, randomPicoColour } from '@kubb/core/utils';
2
+ import pathParser from 'path';
3
+ import { createLogger, write, LogLevel, isPromiseFulfilledResult, Warning, isPromise, ParallelPluginError, build, PluginError, SummaryError, randomPicoColour, timeout, PackageManager } from '@kubb/core';
5
4
  import { cac } from 'cac';
6
- import pc2 from 'picocolors';
5
+ import pc3 from 'picocolors';
7
6
  import { cosmiconfig } from 'cosmiconfig';
8
7
  import tsNode from 'ts-node';
8
+ import { Writable } from 'stream';
9
9
  import PrettyError from 'pretty-error';
10
10
  import ora from 'ora';
11
11
  import { $, execa } from 'execa';
12
12
  import { parseArgsStringToArgv } from 'string-argv';
13
- import { Writable } from 'stream';
14
13
 
15
14
  const require = createRequire(import.meta.url);
16
15
 
@@ -26,7 +25,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
26
25
  var version = "1.14.5";
27
26
  function isJSONPlugins(plugins) {
28
27
  return !!plugins?.some((plugin) => {
29
- return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
28
+ return typeof plugin?.[0] === "string";
30
29
  });
31
30
  }
32
31
  function isObjectPlugins(plugins) {
@@ -34,16 +33,18 @@ function isObjectPlugins(plugins) {
34
33
  }
35
34
  async function importPlugin(name, options) {
36
35
  const packageManager = new PackageManager(process.cwd());
37
- 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());
38
37
  return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options);
39
38
  }
40
39
  function getPlugins(plugins) {
41
40
  if (isObjectPlugins(plugins)) {
42
- 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);
43
45
  }
44
46
  if (isJSONPlugins(plugins)) {
45
- const jsonPlugins = plugins;
46
- const promises = jsonPlugins.map((plugin) => {
47
+ const promises = plugins.map((plugin) => {
47
48
  const [name, options = {}] = plugin;
48
49
  return importPlugin(name, options);
49
50
  });
@@ -64,12 +65,6 @@ async function getConfig(result, CLIOptions) {
64
65
  kubbUserConfig = Promise.resolve(possiblePromise);
65
66
  }
66
67
  let JSONConfig = await kubbUserConfig;
67
- if (Array.isArray(JSONConfig)) {
68
- const promises = JSONConfig.map(async (item) => {
69
- return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : void 0 };
70
- });
71
- return Promise.all(promises);
72
- }
73
68
  JSONConfig = {
74
69
  ...JSONConfig,
75
70
  plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : void 0
@@ -134,6 +129,27 @@ async function getCosmiConfig(moduleName2, config) {
134
129
  }
135
130
  return result;
136
131
  }
132
+ var OraWritable = class extends Writable {
133
+ command;
134
+ spinner;
135
+ constructor(spinner2, command, opts) {
136
+ super(opts);
137
+ this.command = command;
138
+ this.spinner = spinner2;
139
+ }
140
+ _write(chunk, _encoding, callback2) {
141
+ this.spinner.suffixText = `
142
+
143
+ ${pc3.bold(pc3.blue(this.command))}: ${chunk?.toString()}`;
144
+ callback2();
145
+ }
146
+ };
147
+
148
+ // src/utils/parseHrtimeToSeconds.ts
149
+ function parseHrtimeToSeconds(hrtime) {
150
+ const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
151
+ return seconds;
152
+ }
137
153
  var prettyError = new PrettyError().skipPackage("commander").skip(function callback(traceLine) {
138
154
  const pattern = new RegExp("renderErrors");
139
155
  const hasMatch = traceLine?.file?.match(pattern);
@@ -171,72 +187,64 @@ function renderErrors(error, { prefixText, logLevel = LogLevel.silent }) {
171
187
  var spinner = ora({
172
188
  spinner: "clock"
173
189
  });
174
- async function startWatcher(path4, cb) {
190
+ async function startWatcher(path, cb) {
175
191
  const { watch } = await import('chokidar');
176
192
  const ignored = ["**/{.git,node_modules}/**"];
177
- const watcher = watch(path4, {
193
+ const watcher = watch(path, {
178
194
  ignorePermissionErrors: true,
179
195
  ignored
180
196
  });
181
197
  watcher.on("all", (type, file) => {
182
- spinner.succeed(pc2.yellow(pc2.bold(`Change detected: ${type} ${file}`)));
198
+ spinner.succeed(pc3.yellow(pc3.bold(`Change detected: ${type} ${file}`)));
183
199
  spinner.spinner = "clock";
184
200
  try {
185
- cb(path4);
201
+ cb(path);
186
202
  } catch (e) {
187
- spinner.warn(pc2.red("Watcher failed"));
203
+ spinner.warn(pc3.red("Watcher failed"));
188
204
  }
189
205
  });
190
206
  return;
191
207
  }
192
-
193
- // src/utils/parseHrtimeToSeconds.ts
194
- function parseHrtimeToSeconds(hrtime) {
195
- const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
196
- return seconds;
197
- }
198
-
199
- // src/utils/getSummary.ts
200
208
  function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
201
209
  const logs = [];
202
210
  const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
203
- 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
+ ];
204
214
  const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
205
215
  const pluginsCount = config.plugins?.length || 0;
206
216
  const files = pluginManager.fileManager.files.sort((a, b) => {
207
- if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {
217
+ if (!a.meta?.pluginName || !b.meta?.pluginName) {
208
218
  return 0;
209
219
  }
210
- if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {
220
+ if (a.meta?.pluginName.length < b.meta?.pluginName.length) {
211
221
  return 1;
212
222
  }
213
- if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {
223
+ if (a.meta?.pluginName.length > b.meta?.pluginName.length) {
214
224
  return -1;
215
225
  }
216
226
  return 0;
217
227
  });
218
228
  const meta = {
219
- name: config.name,
220
- plugins: status === "success" ? `${pc2.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc2.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
229
+ plugins: status === "success" ? `${pc3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
221
230
  pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomPicoColour(name))?.join(", ") : void 0,
222
231
  filesCreated: files.length,
223
- time: pc2.yellow(`${elapsedSeconds}s`),
224
- output: path.resolve(config.root, config.output.path)
232
+ time: pc3.yellow(`${elapsedSeconds}s`),
233
+ output: pathParser.resolve(config.root, config.output.path)
225
234
  };
226
235
  if (logLevel === LogLevel.debug) {
227
- logs.push(pc2.bold("\nGenerated files:\n"));
228
- logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
236
+ logs.push(pc3.bold("\nGenerated files:\n"));
237
+ logs.push(files.map((file) => `${randomPicoColour(file.meta?.pluginName)} ${file.path}`).join("\n"));
229
238
  }
230
239
  logs.push(
231
240
  [
232
241
  [`
233
242
  `, true],
234
- [` ${pc2.bold("Name:")} ${meta.name}`, !!meta.name],
235
- [` ${pc2.bold("Plugins:")} ${meta.plugins}`, true],
236
- [` ${pc2.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
237
- [`${pc2.bold("Generated:")} ${meta.filesCreated} files`, true],
238
- [` ${pc2.bold("Time:")} ${meta.time}`, true],
239
- [` ${pc2.bold("Output:")} ${meta.output}`, true],
243
+ [` ${pc3.bold("Plugins:")} ${meta.plugins}`, true],
244
+ [` ${pc3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
245
+ [`${pc3.bold("Generated:")} ${meta.filesCreated} files`, true],
246
+ [` ${pc3.bold("Time:")} ${meta.time}`, true],
247
+ [` ${pc3.bold("Output:")} ${meta.output}`, true],
240
248
  [`
241
249
  `, true]
242
250
  ].map((item) => {
@@ -248,19 +256,6 @@ function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
248
256
  );
249
257
  return logs;
250
258
  }
251
- var OraWritable = class extends Writable {
252
- constructor(spinner2, command, opts) {
253
- super(opts);
254
- this.command = command;
255
- this.spinner = spinner2;
256
- }
257
- _write(chunk, _encoding, callback2) {
258
- this.spinner.suffixText = `
259
-
260
- ${pc2.bold(pc2.blue(this.command))}: ${chunk?.toString()}`;
261
- callback2();
262
- }
263
- };
264
259
 
265
260
  // src/generate.ts
266
261
  async function executeHooks({ hooks, logLevel }) {
@@ -278,41 +273,39 @@ async function executeHooks({ hooks, logLevel }) {
278
273
  if (!cmd) {
279
274
  return null;
280
275
  }
281
- spinner.start(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
276
+ await timeout(100);
277
+ spinner.start(`Executing hook ${logLevel !== "silent" ? pc3.dim(command) : ""}`);
282
278
  const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
283
279
  spinner.suffixText = "";
284
280
  if (logLevel === LogLevel.silent) {
285
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
281
+ spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc3.dim(command) : ""}`);
286
282
  console.log(subProcess.stdout);
287
283
  }
288
284
  oraWritable.destroy();
289
285
  return { subProcess, abort: abortController.abort.bind(abortController) };
290
286
  }).filter(Boolean);
287
+ await timeout(100);
291
288
  await Promise.all(executers);
292
289
  if (logLevel === LogLevel.silent) {
293
290
  spinner.succeed(`Executing hooks`);
294
291
  }
295
292
  }
296
- async function generate({ input, config, CLIOptions }) {
297
- const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner });
298
- if (logger.name) {
299
- spinner.prefixText = randomPicoColour(logger.name);
300
- }
293
+ async function generate({ input, config, CLIOptions, logger: logger2 }) {
301
294
  const hrstart = process.hrtime();
302
295
  if (CLIOptions.logLevel === LogLevel.debug) {
303
296
  const { performance, PerformanceObserver } = await import('perf_hooks');
304
297
  const performanceOpserver = new PerformanceObserver((items) => {
305
298
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
306
- spinner.suffixText = pc2.yellow(message);
299
+ spinner.suffixText = pc3.yellow(message);
307
300
  performance.clearMarks();
308
301
  });
309
302
  performanceOpserver.observe({ type: "measure" });
310
303
  }
311
304
  try {
312
305
  const { root: _root, ...userConfig } = config;
313
- const logLevel = logger.logLevel;
306
+ const logLevel = CLIOptions.logLevel ?? LogLevel.silent;
314
307
  const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
315
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
308
+ spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc3.dim(inputPath) : ""}`);
316
309
  const output = await build({
317
310
  config: {
318
311
  root: process.cwd(),
@@ -326,11 +319,11 @@ async function generate({ input, config, CLIOptions }) {
326
319
  ...userConfig.output
327
320
  }
328
321
  },
329
- logger
322
+ logger: logger2
330
323
  });
331
- await executeHooks({ hooks: config.hooks, logLevel });
332
324
  spinner.suffixText = "";
333
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
325
+ spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc3.dim(inputPath) : ""}`);
326
+ await executeHooks({ hooks: config.hooks, logLevel });
334
327
  const summary = getSummary({ pluginManager: output.pluginManager, config, status: "success", hrstart, logLevel: CLIOptions.logLevel });
335
328
  console.log(summary.join(""));
336
329
  } catch (error) {
@@ -359,7 +352,7 @@ export default defineConfig({
359
352
  clean: true,
360
353
  },
361
354
  hooks: {
362
- done: ['echo "\u{1F389} done"'],
355
+ done: 'echo "\u{1F389} done"',
363
356
  },
364
357
  plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
365
358
  })
@@ -370,17 +363,17 @@ export default defineConfig({
370
363
  async function init({ preset = "simple", logLevel = LogLevel.silent, packageManager = "pnpm" }) {
371
364
  spinner.start("\u{1F4E6} Initializing Kubb");
372
365
  const presetMeta = presets[preset];
373
- const configPath = path.resolve(process.cwd(), "./kubb.config.js");
366
+ const path = pathParser.resolve(process.cwd(), "./kubb.config.js");
374
367
  const installCommand = packageManager === "npm" ? "install" : "add";
375
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc2.dim(configPath)}`);
376
- await write(presetMeta["kubb.config"], configPath);
377
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc2.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)}`);
378
371
  const results = await Promise.allSettled([
379
372
  $`npm init es6 -y`,
380
373
  ...presetMeta.packages.map(async (pack) => {
381
- spinner.start(`\u{1F4C0} Installing ${pc2.dim(pack)}`);
374
+ spinner.start(`\u{1F4C0} Installing ${pc3.dim(pack)}`);
382
375
  const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
383
- spinner.succeed(`\u{1F4C0} Installed ${pc2.dim(pack)}`);
376
+ spinner.succeed(`\u{1F4C0} Installed ${pc3.dim(pack)}`);
384
377
  return stdout;
385
378
  })
386
379
  ]);
@@ -397,6 +390,7 @@ async function init({ preset = "simple", logLevel = LogLevel.silent, packageMana
397
390
 
398
391
  // src/index.ts
399
392
  var moduleName = "kubb";
393
+ var logger = createLogger(spinner);
400
394
  function programCatcher(e, CLIOptions) {
401
395
  const originalError = e;
402
396
  let error = originalError;
@@ -404,9 +398,9 @@ function programCatcher(e, CLIOptions) {
404
398
  if (summaryError) {
405
399
  error = summaryError.cause;
406
400
  }
407
- const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc2.red(originalError?.message) });
401
+ const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc3.red(originalError?.message) });
408
402
  if (error instanceof Warning) {
409
- spinner.warn(pc2.yellow(error.message));
403
+ spinner.warn(pc3.yellow(error.message));
410
404
  process.exit(0);
411
405
  }
412
406
  if (CLIOptions.logLevel === LogLevel.silent) {
@@ -417,31 +411,20 @@ function programCatcher(e, CLIOptions) {
417
411
  process.exit(1);
418
412
  }
419
413
  async function generateAction(input, CLIOptions) {
420
- spinner.start("\u{1F50D} Loading config");
414
+ spinner.start("\u{1F4BE} Loading config");
421
415
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
422
- spinner.succeed(`\u{1F50D} Config loaded(${pc2.dim(path.relative(process.cwd(), result.filepath))})`);
416
+ spinner.succeed(`\u{1F4BE} Config loaded(${pc3.dim(pathParser.relative(process.cwd(), result.filepath))})`);
423
417
  const config = await getConfig(result, CLIOptions);
424
- if (CLIOptions.watch) {
425
- if (Array.isArray(config)) {
426
- throw new Error("Cannot use watcher with multiple KubbConfigs(array)");
427
- }
428
- if (isInputPath(config)) {
429
- return startWatcher([input || config.input.path], async (paths) => {
430
- await generate({ config, CLIOptions });
431
- spinner.spinner = "simpleDotsScrolling";
432
- spinner.start(pc2.yellow(pc2.bold(`Watching for changes in ${paths.join(" and ")}`)));
433
- });
434
- }
435
- }
436
- if (Array.isArray(config)) {
437
- const promiseManager = new PromiseManager();
438
- const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }));
439
- await promiseManager.run("seq", promises);
440
- 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
+ });
441
424
  }
442
- await generate({ input, config, CLIOptions });
425
+ await generate({ input, config, CLIOptions, logger });
443
426
  }
444
- async function run(argv) {
427
+ async function runCLI(argv) {
445
428
  const program = cac(moduleName);
446
429
  program.command("[input]", "Path of the input file(overrides the one in `kubb.config.js`)").action(generateAction);
447
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);
@@ -458,8 +441,7 @@ async function run(argv) {
458
441
  programCatcher(e, program.options);
459
442
  }
460
443
  }
461
- var src_default = run;
462
444
 
463
- export { src_default as default, run };
445
+ export { runCLI as default };
464
446
  //# sourceMappingURL=out.js.map
465
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/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","SummaryError","LogLevel","pc","moduleName","ParallelPluginError","randomPicoColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, SummaryError, Warning } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const 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 promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"1.14.5\",\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 && node ../../scripts/build.js canary && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && node ../../scripts/build.js alpha && 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.9\",\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/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/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 { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.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/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { ParallelPluginError } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { 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, ParallelPluginError, PluginError, SummaryError } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start(`Executing hooks`)\n }\n\n const executers: Promise<Executer | null>[] = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n 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/utils'\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","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: '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.5\",\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.9\",\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.20231027T175002",
3
+ "version": "1.15.0-canary.20231027T201044",
4
4
  "description": "Generator cli",
5
5
  "keywords": [
6
6
  "typescript",
@@ -31,7 +31,6 @@
31
31
  "!/**/__tests__/**"
32
32
  ],
33
33
  "dependencies": {
34
- "@kubb/core": "alpha",
35
34
  "cac": "^6.7.14",
36
35
  "chokidar": "^3.5.3",
37
36
  "cosmiconfig": "^8.3.6",
@@ -40,16 +39,17 @@
40
39
  "picocolors": "^1.0.0",
41
40
  "pretty-error": "^4.0.0",
42
41
  "string-argv": "^0.3.2",
43
- "ts-node": "^10.9.1"
42
+ "ts-node": "^10.9.1",
43
+ "@kubb/core": "1.15.0-canary.20231027T200912"
44
44
  },
45
45
  "devDependencies": {
46
- "@kubb/swagger": "alpha",
47
- "@kubb/ts-config": "alpha",
48
- "@kubb/tsup-config": "alpha",
49
46
  "@types/node": "^20.8.9",
50
47
  "source-map-support": "^0.5.21",
51
48
  "tsup": "^7.2.0",
52
- "typescript": "^5.2.2"
49
+ "typescript": "^5.2.2",
50
+ "@kubb/swagger": "1.15.0-canary.20231027T200956",
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": {
@@ -67,8 +67,8 @@
67
67
  "lint": "ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .",
68
68
  "lint-fix": "bun run lint --quiet --fix",
69
69
  "release": "pnpm publish --no-git-check",
70
- "release:canary": "bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check -tag canary",
71
- "release:alpha": "bash ../../.github/canary.sh && node ../../scripts/build.js alpha && pnpm publish --no-git-check -tag alpha",
70
+ "release:canary": "bash ../../.github/canary.sh && pnpm publish --no-git-check -tag canary",
71
+ "release:alpha": "bash ../../.github/canary.sh && pnpm publish --no-git-check -tag alpha",
72
72
  "start": "tsup --watch",
73
73
  "test": "vitest --passWithNoTests",
74
74
  "typecheck": "tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false"