@kubb/cli 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -309,19 +309,74 @@ async function getCosmiConfig(moduleName2, config) {
309
309
  }
310
310
  return result;
311
311
  }
312
+ var presets = {
313
+ simple: {
314
+ "kubb.config": `
315
+ import { defineConfig } from '@kubb/core'
316
+ import createSwagger from '@kubb/swagger'
317
+ import createSwaggerTS from '@kubb/swagger-ts'
318
+ import createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'
319
+
320
+ export default defineConfig({
321
+ root: '.',
322
+ input: {
323
+ path: './petStore.yaml',
324
+ },
325
+ output: {
326
+ path: './src/gen',
327
+ clean: true,
328
+ },
329
+ hooks: {
330
+ done: 'eslint --fix ./src/gen',
331
+ },
332
+ logLevel: 'info',
333
+ plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
334
+ })
335
+ `,
336
+ packages: ["@kubb/core", "@kubb/cli", "@kubb/swagger", "@kubb/swagger-ts", "@kubb/swagger-tanstack-query"]
337
+ }
338
+ };
339
+ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent", packageManager = "pnpm" }) {
340
+ try {
341
+ const presetMeta = presets[preset];
342
+ const path = pathParser__default.default.resolve(process.cwd(), "./kubb.config.js");
343
+ spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc__default.default.dim(path)}`);
344
+ await core.write(presetMeta["kubb.config"], path);
345
+ spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc__default.default.dim(path)}`);
346
+ const data = await Promise.all(
347
+ presetMeta.packages.map(async (pack) => {
348
+ spinner2.start(`\u{1F4C0} Installing ${pc__default.default.dim(pack)}`);
349
+ const { stdout } = await execa.$({ preferLocal: false })`${packageManager} install ${pack}`;
350
+ spinner2.succeed(`\u{1F4C0} Installed ${pc__default.default.dim(pack)}`);
351
+ return stdout;
352
+ })
353
+ );
354
+ if (logLevel === "info") {
355
+ data.forEach((text) => console.log(text));
356
+ }
357
+ } catch (error) {
358
+ spinner2.fail(pc__default.default.red(`Something went wrong
359
+
360
+ ${error?.message}`));
361
+ }
362
+ }
312
363
 
313
364
  // package.json
314
- var version = "1.1.3";
365
+ var version = "1.1.4";
315
366
 
316
367
  // src/index.ts
317
368
  var moduleName = "kubb";
318
369
  var spinner = ora__default.default({
319
- color: "blue",
320
- text: pc__default.default.blue("\u{1F3CE}\uFE0F Kubb generation started"),
321
370
  spinner: "clock"
322
371
  }).start();
323
372
  var program = new commander.Command(moduleName).description("Kubb").action(async (options) => {
324
373
  try {
374
+ if (options.init) {
375
+ spinner.start("\u{1F4E6} Initializing Kubb");
376
+ await init({ spinner, logLevel: options.logLevel });
377
+ spinner.succeed(`\u{1F4E6} initialized Kubb`);
378
+ return;
379
+ }
325
380
  spinner.start("\u{1F4BE} Loading config");
326
381
  const result = await getCosmiConfig(moduleName, options.config);
327
382
  spinner.succeed(`\u{1F4BE} Config loaded(${pc__default.default.dim(pathParser__default.default.relative(process.cwd(), result.filepath))})`);
@@ -345,5 +400,5 @@ var program = new commander.Command(moduleName).description("Kubb").action(async
345
400
  } catch (e) {
346
401
  process.exit(1);
347
402
  }
348
- }).addOption(new commander.Option("-c, --config <path>", "Path to the Kubb config")).addOption(new commander.Option("-i, --input <path>", "Path of the input file(overrides the one in `kubb.config.js`)")).addOption(new commander.Option("-l, --logLevel <type>", "Type of the logging(overrides the one in `kubb.config.js`)").choices(["error", "info", "silent"])).addOption(new commander.Option("-d, --debug", "Debug mode").default(false)).addOption(new commander.Option("-w, --watch", "Watch mode based on the input file"));
403
+ }).addOption(new commander.Option("-c, --config <path>", "Path to the Kubb config")).addOption(new commander.Option("-i, --input <path>", "Path of the input file(overrides the one in `kubb.config.js`)")).addOption(new commander.Option("-l, --logLevel <type>", "Type of the logging(overrides the one in `kubb.config.js`)").choices(["error", "info", "silent"])).addOption(new commander.Option("--init", "Init Kubb")).addOption(new commander.Option("-d, --debug", "Debug mode").default(false)).addOption(new commander.Option("-w, --watch", "Watch mode based on the input file"));
349
404
  program.name(moduleName).description("Generate").version(version, "-v").parse();
package/dist/index.js CHANGED
@@ -4,10 +4,10 @@ import pathParser from 'node:path';
4
4
  import { Command, Option } from 'commander';
5
5
  import pc from 'picocolors';
6
6
  import ora from 'ora';
7
- import { execa } from 'execa';
7
+ import { $, execa } from 'execa';
8
8
  import { parseArgsStringToArgv } from 'string-argv';
9
9
  import PrettyError from 'pretty-error';
10
- import { build, PluginError, ParallelPluginError, isPromise } from '@kubb/core';
10
+ import { build, PluginError, ParallelPluginError, isPromise, write } from '@kubb/core';
11
11
  import { pathToFileURL } from 'node:url';
12
12
  import mod from 'node:module';
13
13
  import { cosmiconfig } from 'cosmiconfig';
@@ -298,19 +298,74 @@ async function getCosmiConfig(moduleName2, config) {
298
298
  }
299
299
  return result;
300
300
  }
301
+ var presets = {
302
+ simple: {
303
+ "kubb.config": `
304
+ import { defineConfig } from '@kubb/core'
305
+ import createSwagger from '@kubb/swagger'
306
+ import createSwaggerTS from '@kubb/swagger-ts'
307
+ import createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'
308
+
309
+ export default defineConfig({
310
+ root: '.',
311
+ input: {
312
+ path: './petStore.yaml',
313
+ },
314
+ output: {
315
+ path: './src/gen',
316
+ clean: true,
317
+ },
318
+ hooks: {
319
+ done: 'eslint --fix ./src/gen',
320
+ },
321
+ logLevel: 'info',
322
+ plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
323
+ })
324
+ `,
325
+ packages: ["@kubb/core", "@kubb/cli", "@kubb/swagger", "@kubb/swagger-ts", "@kubb/swagger-tanstack-query"]
326
+ }
327
+ };
328
+ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent", packageManager = "pnpm" }) {
329
+ try {
330
+ const presetMeta = presets[preset];
331
+ const path = pathParser.resolve(process.cwd(), "./kubb.config.js");
332
+ spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc.dim(path)}`);
333
+ await write(presetMeta["kubb.config"], path);
334
+ spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc.dim(path)}`);
335
+ const data = await Promise.all(
336
+ presetMeta.packages.map(async (pack) => {
337
+ spinner2.start(`\u{1F4C0} Installing ${pc.dim(pack)}`);
338
+ const { stdout } = await $({ preferLocal: false })`${packageManager} install ${pack}`;
339
+ spinner2.succeed(`\u{1F4C0} Installed ${pc.dim(pack)}`);
340
+ return stdout;
341
+ })
342
+ );
343
+ if (logLevel === "info") {
344
+ data.forEach((text) => console.log(text));
345
+ }
346
+ } catch (error) {
347
+ spinner2.fail(pc.red(`Something went wrong
348
+
349
+ ${error?.message}`));
350
+ }
351
+ }
301
352
 
302
353
  // package.json
303
- var version = "1.1.3";
354
+ var version = "1.1.4";
304
355
 
305
356
  // src/index.ts
306
357
  var moduleName = "kubb";
307
358
  var spinner = ora({
308
- color: "blue",
309
- text: pc.blue("\u{1F3CE}\uFE0F Kubb generation started"),
310
359
  spinner: "clock"
311
360
  }).start();
312
361
  var program = new Command(moduleName).description("Kubb").action(async (options) => {
313
362
  try {
363
+ if (options.init) {
364
+ spinner.start("\u{1F4E6} Initializing Kubb");
365
+ await init({ spinner, logLevel: options.logLevel });
366
+ spinner.succeed(`\u{1F4E6} initialized Kubb`);
367
+ return;
368
+ }
314
369
  spinner.start("\u{1F4BE} Loading config");
315
370
  const result = await getCosmiConfig(moduleName, options.config);
316
371
  spinner.succeed(`\u{1F4BE} Config loaded(${pc.dim(pathParser.relative(process.cwd(), result.filepath))})`);
@@ -334,5 +389,5 @@ var program = new Command(moduleName).description("Kubb").action(async (options)
334
389
  } catch (e) {
335
390
  process.exit(1);
336
391
  }
337
- }).addOption(new Option("-c, --config <path>", "Path to the Kubb config")).addOption(new Option("-i, --input <path>", "Path of the input file(overrides the one in `kubb.config.js`)")).addOption(new Option("-l, --logLevel <type>", "Type of the logging(overrides the one in `kubb.config.js`)").choices(["error", "info", "silent"])).addOption(new Option("-d, --debug", "Debug mode").default(false)).addOption(new Option("-w, --watch", "Watch mode based on the input file"));
392
+ }).addOption(new Option("-c, --config <path>", "Path to the Kubb config")).addOption(new Option("-i, --input <path>", "Path of the input file(overrides the one in `kubb.config.js`)")).addOption(new Option("-l, --logLevel <type>", "Type of the logging(overrides the one in `kubb.config.js`)").choices(["error", "info", "silent"])).addOption(new Option("--init", "Init Kubb")).addOption(new Option("-d, --debug", "Debug mode").default(false)).addOption(new Option("-w, --watch", "Watch mode based on the input file"));
338
393
  program.name(moduleName).description("Generate").version(version, "-v").parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Generator cli",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,13 +43,13 @@
43
43
  "yaml": "^2.3.1",
44
44
  "@swc/core": "^1.3.62",
45
45
  "pretty-error": "^4.0.0",
46
- "@kubb/core": "1.1.3"
46
+ "@kubb/core": "1.1.4"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/node": "^20.2.5",
50
50
  "tsup": "^6.7.0",
51
51
  "typescript": "^5.1.3",
52
- "@kubb/swagger": "1.1.3"
52
+ "@kubb/swagger": "1.1.4"
53
53
  },
54
54
  "publishConfig": {
55
55
  "access": "public",
@@ -66,8 +66,7 @@
66
66
  "pre-commit": "echo 'pre-commit not configured'",
67
67
  "pre-push": "pnpm typecheck",
68
68
  "test": "vitest --passWithNoTests",
69
- "upgrade": "ncu -u",
70
- "upgrade:local": "ncu --interactive --doctor",
69
+ "upgrade": "pnpm update",
71
70
  "typecheck": "tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false"
72
71
  }
73
72
  }
package/src/index.ts CHANGED
@@ -10,14 +10,13 @@ import type { CLIOptions } from '@kubb/core'
10
10
 
11
11
  import { run } from './run.ts'
12
12
  import { startWatcher, getConfig, getCosmiConfig } from './utils/index.ts'
13
+ import { init } from './init.ts'
13
14
 
14
15
  import { version } from '../package.json'
15
16
 
16
17
  const moduleName = 'kubb'
17
18
 
18
19
  const spinner = ora({
19
- color: 'blue',
20
- text: pc.blue('🏎️ Kubb generation started'),
21
20
  spinner: 'clock',
22
21
  }).start()
23
22
 
@@ -25,6 +24,13 @@ const program = new Command(moduleName)
25
24
  .description('Kubb')
26
25
  .action(async (options: CLIOptions) => {
27
26
  try {
27
+ if (options.init) {
28
+ spinner.start('📦 Initializing Kubb')
29
+ await init({ spinner, logLevel: options.logLevel })
30
+ spinner.succeed(`📦 initialized Kubb`)
31
+ return
32
+ }
33
+
28
34
  // CONFIG
29
35
  spinner.start('💾 Loading config')
30
36
  const result = await getCosmiConfig(moduleName, options.config)
@@ -58,6 +64,7 @@ const program = new Command(moduleName)
58
64
  .addOption(new Option('-c, --config <path>', 'Path to the Kubb config'))
59
65
  .addOption(new Option('-i, --input <path>', 'Path of the input file(overrides the one in `kubb.config.js`)'))
60
66
  .addOption(new Option('-l, --logLevel <type>', 'Type of the logging(overrides the one in `kubb.config.js`)').choices(['error', 'info', 'silent']))
67
+ .addOption(new Option('--init', 'Init Kubb'))
61
68
  .addOption(new Option('-d, --debug', 'Debug mode').default(false))
62
69
  .addOption(new Option('-w, --watch', 'Watch mode based on the input file'))
63
70
 
package/src/init.ts ADDED
@@ -0,0 +1,88 @@
1
+ import pathParser from 'node:path'
2
+ import pc from 'picocolors'
3
+ import { $ } from 'execa'
4
+
5
+ import type { LogLevel } from '@kubb/core'
6
+ import { write } from '@kubb/core'
7
+
8
+ import type { Ora } from 'ora'
9
+
10
+ export type Preset = 'simple'
11
+
12
+ export type PackageManager = 'pnpm' | 'npm' | 'yarn'
13
+
14
+ export type PresetMeta = {
15
+ 'kubb.config': string
16
+ packages: string[]
17
+ }
18
+
19
+ type RunProps = {
20
+ spinner: Ora
21
+ /**
22
+ * @default `'silent'`
23
+ */
24
+ logLevel?: LogLevel
25
+ /**
26
+ * @default `'simple'`
27
+ */
28
+ preset?: Preset
29
+ /**
30
+ * @default `'pnpm'`
31
+ */
32
+ packageManager?: PackageManager
33
+ }
34
+
35
+ const presets: Record<Preset, PresetMeta> = {
36
+ simple: {
37
+ 'kubb.config': `
38
+ import { defineConfig } from '@kubb/core'
39
+ import createSwagger from '@kubb/swagger'
40
+ import createSwaggerTS from '@kubb/swagger-ts'
41
+ import createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'
42
+
43
+ export default defineConfig({
44
+ root: '.',
45
+ input: {
46
+ path: './petStore.yaml',
47
+ },
48
+ output: {
49
+ path: './src/gen',
50
+ clean: true,
51
+ },
52
+ hooks: {
53
+ done: 'eslint --fix ./src/gen',
54
+ },
55
+ logLevel: 'info',
56
+ plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
57
+ })
58
+ `,
59
+ packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],
60
+ },
61
+ }
62
+
63
+ export async function init({ spinner, preset = 'simple', logLevel = 'silent', packageManager = 'pnpm' }: RunProps): Promise<void> {
64
+ try {
65
+ const presetMeta = presets[preset]
66
+ const path = pathParser.resolve(process.cwd(), './kubb.config.js')
67
+
68
+ spinner.start(`📀 Writing \`kubb.config.js\` ${pc.dim(path)}`)
69
+ await write(presetMeta['kubb.config'], path)
70
+ spinner.succeed(`📀 Wrote \`kubb.config.js\` ${pc.dim(path)}`)
71
+
72
+ const data = await Promise.all(
73
+ presetMeta.packages.map(async (pack) => {
74
+ spinner.start(`📀 Installing ${pc.dim(pack)}`)
75
+ const { stdout } = await $({ preferLocal: false })`${packageManager} install ${pack}`
76
+ spinner.succeed(`📀 Installed ${pc.dim(pack)}`)
77
+
78
+ return stdout
79
+ })
80
+ )
81
+
82
+ if (logLevel === 'info') {
83
+ data.forEach((text) => console.log(text))
84
+ }
85
+ } catch (error) {
86
+ spinner.fail(pc.red(`Something went wrong\n\n${(error as Error)?.message}`))
87
+ }
88
+ }