@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 +59 -4
- package/dist/index.js +61 -6
- package/package.json +4 -5
- package/src/index.ts +9 -2
- package/src/init.ts +88 -0
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.
|
|
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.
|
|
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
|
+
"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.
|
|
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.
|
|
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": "
|
|
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
|
+
}
|