@kubb/cli 2.0.0-canary.20231030T125136 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,16 +1,18 @@
1
1
  import { createRequire } from 'module';
2
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';
3
+ import { Warning, isInputPath, PromiseManager, safeBuild, PackageManager } from '@kubb/core';
5
4
  import { cac } from 'cac';
6
- import pc2 from 'picocolors';
5
+ import c2 from 'tinyrainbow';
6
+ import { isPromiseFulfilledResult, isPromise } from '@kubb/core/utils';
7
7
  import { cosmiconfig } from 'cosmiconfig';
8
8
  import tsNode from 'ts-node';
9
+ import { LogLevel, createLogger, randomCliColour } from '@kubb/core/logger';
9
10
  import PrettyError from 'pretty-error';
10
11
  import ora from 'ora';
11
12
  import { $, execa } from 'execa';
12
13
  import { parseArgsStringToArgv } from 'string-argv';
13
14
  import { Writable } from 'stream';
15
+ import { write } from '@kubb/core/fs';
14
16
 
15
17
  const require = createRequire(import.meta.url);
16
18
 
@@ -23,7 +25,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
23
25
  });
24
26
 
25
27
  // package.json
26
- var version = "2.0.0-alpha.2";
28
+ var version = "2.0.0";
27
29
  function isJSONPlugins(plugins) {
28
30
  return !!plugins?.some((plugin) => {
29
31
  return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
@@ -39,7 +41,7 @@ async function importPlugin(name, options) {
39
41
  }
40
42
  function getPlugins(plugins) {
41
43
  if (isObjectPlugins(plugins)) {
42
- throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/configuration/configure#json");
44
+ throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/guide/configure#json");
43
45
  }
44
46
  if (isJSONPlugins(plugins)) {
45
47
  const jsonPlugins = plugins;
@@ -106,12 +108,12 @@ async function getCosmiConfig(moduleName2, config) {
106
108
  `.${moduleName2}rc.yml`,
107
109
  `.${moduleName2}rc.ts`,
108
110
  `.${moduleName2}rc.js`,
109
- `.${moduleName2}rc.cjs`,
110
111
  `.${moduleName2}rc.mjs`,
112
+ `.${moduleName2}rc.cjs`,
111
113
  `${moduleName2}.config.ts`,
112
114
  `${moduleName2}.config.js`,
113
- `${moduleName2}.config.cjs`,
114
- `${moduleName2}.config.mjs`
115
+ `${moduleName2}.config.mjs`,
116
+ `${moduleName2}.config.cjs`
115
117
  ];
116
118
  const explorer = cosmiconfig(moduleName2, {
117
119
  cache: false,
@@ -151,22 +153,19 @@ function getErrorCauses(errors) {
151
153
  return prev;
152
154
  }, []).filter(Boolean);
153
155
  }
154
- function renderErrors(error, { prefixText, logLevel = LogLevel.silent }) {
156
+ function renderErrors(error, { logLevel = LogLevel.silent }) {
155
157
  if (!error) {
156
158
  return "";
157
159
  }
158
- if (error instanceof ParallelPluginError) {
159
- return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join("\n");
160
- }
161
160
  if (logLevel === LogLevel.silent) {
162
161
  prettyError.skipNodeFiles();
163
162
  prettyError.skip(function skip() {
164
163
  return true;
165
164
  });
166
- return [prefixText, prettyError.render(error)].filter(Boolean).join("\n");
165
+ return [prettyError.render(error)].filter(Boolean).join("\n");
167
166
  }
168
167
  const errors = getErrorCauses([error]);
169
- return [prefixText, ...errors].filter(Boolean).join("\n");
168
+ return errors.filter(Boolean).join("\n");
170
169
  }
171
170
  var spinner = ora({
172
171
  spinner: "clock"
@@ -179,12 +178,12 @@ async function startWatcher(path4, cb) {
179
178
  ignored
180
179
  });
181
180
  watcher.on("all", (type, file) => {
182
- spinner.succeed(pc2.yellow(pc2.bold(`Change detected: ${type} ${file}`)));
181
+ spinner.succeed(c2.yellow(c2.bold(`Change detected: ${type} ${file}`)));
183
182
  spinner.spinner = "clock";
184
183
  try {
185
184
  cb(path4);
186
185
  } catch (e) {
187
- spinner.warn(pc2.red("Watcher failed"));
186
+ spinner.warn(c2.red("Watcher failed"));
188
187
  }
189
188
  });
190
189
  return;
@@ -197,46 +196,48 @@ function parseHrtimeToSeconds(hrtime) {
197
196
  }
198
197
 
199
198
  // src/utils/getSummary.ts
200
- function getSummary({ pluginManager, status, hrstart, config, logLevel }) {
199
+ function getSummary({ pluginManager, status, hrstart, config, logger }) {
200
+ const { logLevel } = logger;
201
201
  const logs = [];
202
202
  const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
203
203
  const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
204
- const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
204
+ const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === "buildEnd" && item.plugin.name !== "core").map((item) => item.plugin.name);
205
+ const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
205
206
  const pluginsCount = config.plugins?.length || 0;
206
207
  const files = pluginManager.fileManager.files.sort((a, b) => {
207
- if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {
208
+ if (!a.meta?.pluginKey?.[0] || !b.meta?.pluginKey?.[0]) {
208
209
  return 0;
209
210
  }
210
- if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {
211
+ if (a.meta?.pluginKey?.[0]?.length < b.meta?.pluginKey?.[0]?.length) {
211
212
  return 1;
212
213
  }
213
- if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {
214
+ if (a.meta?.pluginKey?.[0]?.length > b.meta?.pluginKey?.[0]?.length) {
214
215
  return -1;
215
216
  }
216
217
  return 0;
217
218
  });
218
219
  const meta = {
219
220
  name: config.name,
220
- plugins: status === "success" ? `${pc2.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc2.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
221
- pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomPicoColour(name))?.join(", ") : void 0,
221
+ plugins: status === "success" ? `${c2.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c2.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
222
+ pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
222
223
  filesCreated: files.length,
223
- time: pc2.yellow(`${elapsedSeconds}s`),
224
+ time: c2.yellow(`${elapsedSeconds}s`),
224
225
  output: path.resolve(config.root, config.output.path)
225
226
  };
226
227
  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"));
228
+ logger.debug(c2.bold("\nGenerated files:\n"));
229
+ logger.debug(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join("\n"));
229
230
  }
230
231
  logs.push(
231
232
  [
232
233
  [`
233
234
  `, 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],
235
+ [` ${c2.bold("Name:")} ${meta.name}`, !!meta.name],
236
+ [` ${c2.bold("Plugins:")} ${meta.plugins}`, true],
237
+ [` ${c2.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
238
+ [`${c2.bold("Generated:")} ${meta.filesCreated} files`, true],
239
+ [` ${c2.bold("Time:")} ${meta.time}`, true],
240
+ [` ${c2.bold("Output:")} ${meta.output}`, true],
240
241
  [`
241
242
  `, true]
242
243
  ].map((item) => {
@@ -257,7 +258,7 @@ var OraWritable = class extends Writable {
257
258
  _write(chunk, _encoding, callback2) {
258
259
  this.spinner.suffixText = `
259
260
 
260
- ${pc2.bold(pc2.blue(this.command))}: ${chunk?.toString()}`;
261
+ ${c2.bold(c2.blue(this.command))}: ${chunk?.toString()}`;
261
262
  callback2();
262
263
  }
263
264
  };
@@ -278,11 +279,11 @@ async function executeHooks({ hooks, logLevel }) {
278
279
  if (!cmd) {
279
280
  return null;
280
281
  }
281
- spinner.start(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
282
+ spinner.start(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
282
283
  const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout(oraWritable);
283
284
  spinner.suffixText = "";
284
285
  if (logLevel === LogLevel.silent) {
285
- spinner.succeed(`Executing hook ${logLevel !== "silent" ? pc2.dim(command) : ""}`);
286
+ spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
286
287
  console.log(subProcess.stdout);
287
288
  }
288
289
  oraWritable.destroy();
@@ -296,50 +297,48 @@ async function executeHooks({ hooks, logLevel }) {
296
297
  async function generate({ input, config, CLIOptions }) {
297
298
  const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner });
298
299
  if (logger.name) {
299
- spinner.prefixText = randomPicoColour(logger.name);
300
+ spinner.prefixText = randomCliColour(logger.name);
300
301
  }
301
302
  const hrstart = process.hrtime();
302
303
  if (CLIOptions.logLevel === LogLevel.debug) {
303
304
  const { performance, PerformanceObserver } = await import('perf_hooks');
304
305
  const performanceOpserver = new PerformanceObserver((items) => {
305
306
  const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
306
- spinner.suffixText = pc2.yellow(message);
307
+ spinner.suffixText = c2.yellow(message);
307
308
  performance.clearMarks();
308
309
  });
309
310
  performanceOpserver.observe({ type: "measure" });
310
311
  }
311
- try {
312
- const { root: _root, ...userConfig } = config;
313
- const logLevel = logger.logLevel;
314
- const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
315
- spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
316
- const output = await build({
317
- config: {
318
- root: process.cwd(),
319
- ...userConfig,
320
- input: inputPath ? {
321
- ...userConfig.input,
322
- path: inputPath
323
- } : userConfig.input,
324
- output: {
325
- write: true,
326
- ...userConfig.output
327
- }
328
- },
329
- logger
330
- });
331
- await executeHooks({ hooks: config.hooks, logLevel });
312
+ const { root: _root, ...userConfig } = config;
313
+ const logLevel = logger.logLevel;
314
+ const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
315
+ spinner.start(`\u{1F680} Building ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
316
+ const { pluginManager, error } = await safeBuild({
317
+ config: {
318
+ root: process.cwd(),
319
+ ...userConfig,
320
+ input: inputPath ? {
321
+ ...userConfig.input,
322
+ path: inputPath
323
+ } : userConfig.input,
324
+ output: {
325
+ write: true,
326
+ ...userConfig.output
327
+ }
328
+ },
329
+ logger
330
+ });
331
+ const summary = getSummary({ pluginManager, config, status: error ? "failed" : "success", hrstart, logger });
332
+ if (error) {
332
333
  spinner.suffixText = "";
333
- spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? pc2.dim(inputPath) : ""}`);
334
- const summary = getSummary({ pluginManager: output.pluginManager, config, status: "success", hrstart, logLevel: CLIOptions.logLevel });
334
+ spinner.fail(`\u{1F680} Build failed ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
335
335
  console.log(summary.join(""));
336
- } catch (error) {
337
- let summary = [];
338
- if (error instanceof PluginError || error instanceof ParallelPluginError) {
339
- summary = getSummary({ pluginManager: error.pluginManager, config, status: "failed", hrstart, logLevel: CLIOptions.logLevel });
340
- }
341
- throw new SummaryError("Something went wrong\n", { cause: error, summary });
336
+ throw error;
342
337
  }
338
+ await executeHooks({ hooks: config.hooks, logLevel });
339
+ spinner.suffixText = "";
340
+ spinner.succeed(`\u{1F680} Build completed ${logLevel !== "silent" ? c2.dim(inputPath) : ""}`);
341
+ console.log(summary.join(""));
343
342
  }
344
343
  var presets = {
345
344
  simple: {
@@ -361,7 +360,7 @@ export default defineConfig({
361
360
  hooks: {
362
361
  done: ['echo "\u{1F389} done"'],
363
362
  },
364
- plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
363
+ plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],
365
364
  })
366
365
  `,
367
366
  packages: ["@kubb/core", "@kubb/cli", "@kubb/swagger", "@kubb/swagger-ts", "@kubb/swagger-tanstack-query"]
@@ -372,15 +371,15 @@ async function init({ preset = "simple", logLevel = LogLevel.silent, packageMana
372
371
  const presetMeta = presets[preset];
373
372
  const configPath = path.resolve(process.cwd(), "./kubb.config.js");
374
373
  const installCommand = packageManager === "npm" ? "install" : "add";
375
- spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc2.dim(configPath)}`);
374
+ spinner.start(`\u{1F4C0} Writing \`kubb.config.js\` ${c2.dim(configPath)}`);
376
375
  await write(presetMeta["kubb.config"], configPath);
377
- spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc2.dim(configPath)}`);
376
+ spinner.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${c2.dim(configPath)}`);
378
377
  const results = await Promise.allSettled([
379
378
  $`npm init es6 -y`,
380
379
  ...presetMeta.packages.map(async (pack) => {
381
- spinner.start(`\u{1F4C0} Installing ${pc2.dim(pack)}`);
380
+ spinner.start(`\u{1F4C0} Installing ${c2.dim(pack)}`);
382
381
  const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
383
- spinner.succeed(`\u{1F4C0} Installed ${pc2.dim(pack)}`);
382
+ spinner.succeed(`\u{1F4C0} Installed ${c2.dim(pack)}`);
384
383
  return stdout;
385
384
  })
386
385
  ]);
@@ -398,28 +397,19 @@ async function init({ preset = "simple", logLevel = LogLevel.silent, packageMana
398
397
  // src/index.ts
399
398
  var moduleName = "kubb";
400
399
  function programCatcher(e, CLIOptions) {
401
- const originalError = e;
402
- let error = originalError;
403
- const summaryError = error instanceof SummaryError ? error : void 0;
404
- if (summaryError) {
405
- error = summaryError.cause;
406
- }
407
- const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc2.red(originalError?.message) });
400
+ const error = e;
401
+ const message = renderErrors(error, { logLevel: CLIOptions.logLevel });
408
402
  if (error instanceof Warning) {
409
- spinner.warn(pc2.yellow(error.message));
403
+ spinner.warn(c2.yellow(error.message));
410
404
  process.exit(0);
411
405
  }
412
- if (CLIOptions.logLevel === LogLevel.silent) {
413
- spinner.fail(message);
414
- process.exit(1);
415
- }
416
- spinner.fail([message, ...summaryError?.summary || []].join("\n"));
406
+ spinner.fail(message);
417
407
  process.exit(1);
418
408
  }
419
409
  async function generateAction(input, CLIOptions) {
420
410
  spinner.start("\u{1F50D} Loading config");
421
411
  const result = await getCosmiConfig(moduleName, CLIOptions.config);
422
- spinner.succeed(`\u{1F50D} Config loaded(${pc2.dim(path.relative(process.cwd(), result.filepath))})`);
412
+ spinner.succeed(`\u{1F50D} Config loaded(${c2.dim(path.relative(process.cwd(), result.filepath))})`);
423
413
  const config = await getConfig(result, CLIOptions);
424
414
  if (CLIOptions.watch) {
425
415
  if (Array.isArray(config)) {
@@ -429,7 +419,7 @@ async function generateAction(input, CLIOptions) {
429
419
  return startWatcher([input || config.input.path], async (paths) => {
430
420
  await generate({ config, CLIOptions });
431
421
  spinner.spinner = "simpleDotsScrolling";
432
- spinner.start(pc2.yellow(pc2.bold(`Watching for changes in ${paths.join(" and ")}`)));
422
+ spinner.start(c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
433
423
  });
434
424
  }
435
425
  }
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\": \"2.0.0-alpha.2\",\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/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","c","moduleName","LogLevel","randomCliColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport c from 'tinyrainbow'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(c.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"tinyrainbow\": \"^1.1.1\",\n \"ts-node\": \"^10.9.2\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.10.4\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^8.0.1\",\n \"typescript\": \"^5.3.3\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/guide/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n const jsonPlugins = plugins as Array<[name: string, options: object]>\n const promises = jsonPlugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options)\n })\n return Promise.all(promises) as Promise<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/logger'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\n}\n","import ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import c from 'tinyrainbow'\n\nimport { spinner } from './spinner.ts'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n spinner.succeed(c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(c.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start(`Executing hooks`)\n }\n\n const executers: Promise<Executer | null>[] = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? c.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomCliColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = c.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n const { root: _root, ...userConfig } = config\n const logLevel = logger.logLevel\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)\n\n const { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n ...userConfig.output,\n },\n },\n logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logger })\n\n if (error) {\n spinner.suffixText = ''\n spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n\n throw error\n }\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? c.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { KubbConfig, PluginManager } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logger: Logger\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logger }: SummaryProps): string[] {\n const { logLevel } = logger\n const logs: string[] = []\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart))\n\n const buildStartPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const buildEndPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name)\n const pluginsCount = config.plugins?.length || 0\n const files = pluginManager.fileManager.files.sort((a, b) => {\n if (!a.meta?.pluginKey?.[0] || !b.meta?.pluginKey?.[0]) {\n return 0\n }\n if (a.meta?.pluginKey?.[0]?.length < b.meta?.pluginKey?.[0]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[0]?.length > b.meta?.pluginKey?.[0]?.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\n name: config.name,\n plugins: status === 'success'\n ? `${c.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${c.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomCliColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: c.yellow(`${elapsedSeconds}s`),\n output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logger.debug(c.bold('\\nGenerated files:\\n'))\n logger.debug(files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\n [` ${c.bold('Name:')} ${meta.name}`, !!meta.name],\n [` ${c.bold('Plugins:')} ${meta.plugins}`, true],\n [` ${c.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${c.bold('Generated:')} ${meta.filesCreated} files`, true],\n [` ${c.bold('Time:')} ${meta.time}`, true],\n [` ${c.bold('Output:')} ${meta.output}`, true],\n [`\\n`, true],\n ]\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return logs\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport c from 'tinyrainbow'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${c.bold(c.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { write } from '@kubb/core/fs'\nimport { LogLevel } from '@kubb/core/logger'\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: { path: 'models'}, enumType: 'enum' }), createSwaggerTanstackQuery({ output: { path: './hooks' } })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${c.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${c.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${c.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${c.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "2.0.0-canary.20231030T125136",
3
+ "version": "2.0.0",
4
4
  "description": "Generator cli",
5
5
  "keywords": [
6
6
  "typescript",
@@ -21,35 +21,43 @@
21
21
  "main": "dist/index.cjs",
22
22
  "module": "dist/index.js",
23
23
  "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/index.js",
27
+ "require": "./dist/index.cjs",
28
+ "default": "./dist/index.cjs"
29
+ }
30
+ },
24
31
  "bin": {
25
32
  "kubb": "bin/kubb.js"
26
33
  },
27
34
  "files": [
35
+ "src",
28
36
  "dist",
29
37
  "bin",
30
38
  "!/**/**.test.**",
31
39
  "!/**/__tests__/**"
32
40
  ],
33
41
  "dependencies": {
34
- "@kubb/core": "canary",
35
42
  "cac": "^6.7.14",
36
43
  "chokidar": "^3.5.3",
37
- "cosmiconfig": "^8.3.6",
44
+ "cosmiconfig": "^9.0.0",
38
45
  "execa": "^8.0.1",
39
46
  "ora": "^7.0.1",
40
- "picocolors": "^1.0.0",
41
47
  "pretty-error": "^4.0.0",
42
48
  "string-argv": "^0.3.2",
43
- "ts-node": "^10.9.1"
49
+ "tinyrainbow": "^1.1.1",
50
+ "ts-node": "^10.9.2",
51
+ "@kubb/core": "2.0.0"
44
52
  },
45
53
  "devDependencies": {
46
- "@kubb/swagger": "canary",
47
- "@kubb/ts-config": "canary",
48
- "@kubb/tsup-config": "canary",
49
- "@types/node": "^20.8.9",
54
+ "@types/node": "^20.10.4",
50
55
  "source-map-support": "^0.5.21",
51
- "tsup": "^7.2.0",
52
- "typescript": "^5.2.2"
56
+ "tsup": "^8.0.1",
57
+ "typescript": "^5.3.3",
58
+ "@kubb/swagger": "2.0.0",
59
+ "@kubb/ts-config": "0.1.0",
60
+ "@kubb/tsup-config": "1.1.8"
53
61
  },
54
62
  "packageManager": "pnpm@8.3.0",
55
63
  "engines": {
@@ -67,8 +75,7 @@
67
75
  "lint": "ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .",
68
76
  "lint-fix": "bun run lint --quiet --fix",
69
77
  "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",
78
+ "release:canary": "bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check",
72
79
  "start": "tsup --watch",
73
80
  "test": "vitest --passWithNoTests",
74
81
  "typecheck": "tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false"