@kubb/cli 4.11.1 → 4.11.3
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/{generate-mP1U-zi4.js → generate-CYBFB3tU.js} +11 -4
- package/dist/generate-CYBFB3tU.js.map +1 -0
- package/dist/{generate-BGADYMY6.js → generate-CpBJ2Y-n.js} +109 -57
- package/dist/generate-CpBJ2Y-n.js.map +1 -0
- package/dist/{generate-LbioowO-.cjs → generate-DpHvARzf.cjs} +109 -57
- package/dist/generate-DpHvARzf.cjs.map +1 -0
- package/dist/{generate-CVRHD5GD.cjs → generate-KUqCSnZp.cjs} +11 -4
- package/dist/generate-KUqCSnZp.cjs.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/generate.ts +12 -2
- package/src/runners/generate.ts +88 -49
- package/src/utils/getSummary.ts +52 -8
- package/dist/generate-BGADYMY6.js.map +0 -1
- package/dist/generate-CVRHD5GD.cjs.map +0 -1
- package/dist/generate-LbioowO-.cjs.map +0 -1
- package/dist/generate-mP1U-zi4.js.map +0 -1
- package/src/utils/getErrorCauses.ts +0 -14
|
@@ -46,20 +46,6 @@ async function executeHooks({ hooks, logger }) {
|
|
|
46
46
|
logger?.emit("success", "Executed hooks");
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
//#endregion
|
|
50
|
-
//#region src/utils/getErrorCauses.ts
|
|
51
|
-
function getErrorCauses(errors) {
|
|
52
|
-
return errors.reduce((prev, error) => {
|
|
53
|
-
const causedError = error?.cause;
|
|
54
|
-
if (causedError) {
|
|
55
|
-
prev = [...prev, ...getErrorCauses([causedError])];
|
|
56
|
-
return prev;
|
|
57
|
-
}
|
|
58
|
-
prev = [...prev, error];
|
|
59
|
-
return prev;
|
|
60
|
-
}, []).filter(Boolean);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
49
|
//#endregion
|
|
64
50
|
//#region src/utils/parseHrtimeToSeconds.ts
|
|
65
51
|
function parseHrtimeToSeconds(hrtime) {
|
|
@@ -68,24 +54,50 @@ function parseHrtimeToSeconds(hrtime) {
|
|
|
68
54
|
|
|
69
55
|
//#endregion
|
|
70
56
|
//#region src/utils/getSummary.ts
|
|
71
|
-
function getSummary({ failedPlugins, filesCreated, status, hrStart, config }) {
|
|
57
|
+
function getSummary({ failedPlugins, filesCreated, status, hrStart, config, pluginTimings }) {
|
|
72
58
|
const logs = /* @__PURE__ */ new Set();
|
|
73
59
|
const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart));
|
|
74
60
|
const pluginsCount = config.plugins?.length || 0;
|
|
75
61
|
const successCount = pluginsCount - failedPlugins.size;
|
|
76
62
|
const meta = {
|
|
77
|
-
plugins: status === "success" ? `${picocolors.default.green(`${successCount} successful`)}, ${pluginsCount} total` : `${picocolors.default.red(`${failedPlugins.size
|
|
63
|
+
plugins: status === "success" ? `${picocolors.default.green(`${successCount} successful`)}, ${pluginsCount} total` : `${picocolors.default.green(`${successCount} successful`)}, ${picocolors.default.red(`${failedPlugins.size} failed`)}, ${pluginsCount} total`,
|
|
78
64
|
pluginsFailed: status === "failed" ? [...failedPlugins]?.map(({ plugin }) => (0, __kubb_core_logger.randomCliColour)(plugin.name))?.join(", ") : void 0,
|
|
79
65
|
filesCreated,
|
|
80
66
|
time: `${picocolors.default.yellow(`${elapsedSeconds}s`)}`,
|
|
81
67
|
output: node_path.default.isAbsolute(config.root) ? node_path.default.resolve(config.root, config.output.path) : config.root
|
|
82
68
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
const labels = {
|
|
70
|
+
plugins: "Plugins:",
|
|
71
|
+
failed: "Failed:",
|
|
72
|
+
generated: "Generated:",
|
|
73
|
+
output: "Output:"
|
|
74
|
+
};
|
|
75
|
+
const maxLabelLength = Math.max(...Object.values(labels).map((l) => l.length));
|
|
76
|
+
const summaryLines = [
|
|
77
|
+
[`${picocolors.default.bold(labels.plugins.padEnd(maxLabelLength))} ${meta.plugins}`, true],
|
|
78
|
+
[`${picocolors.default.dim(labels.failed.padEnd(maxLabelLength))} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
|
|
79
|
+
[`${picocolors.default.bold(labels.generated.padEnd(maxLabelLength))} ${meta.filesCreated} files in ${meta.time}`, true]
|
|
80
|
+
];
|
|
81
|
+
if (pluginTimings && pluginTimings.size > 0) {
|
|
82
|
+
const MAX_TOP_PLUGINS = 5;
|
|
83
|
+
const TIME_SCALE_DIVISOR = 100;
|
|
84
|
+
const MAX_BAR_LENGTH = 20;
|
|
85
|
+
const sortedTimings = Array.from(pluginTimings.entries()).sort((a, b) => b[1] - a[1]).slice(0, MAX_TOP_PLUGINS);
|
|
86
|
+
if (sortedTimings.length > 0) {
|
|
87
|
+
summaryLines.push(["Plugin Timings:", true]);
|
|
88
|
+
const maxNameLength = Math.max(...sortedTimings.map(([name]) => name.length));
|
|
89
|
+
const indent = " ".repeat(maxLabelLength + 1);
|
|
90
|
+
sortedTimings.forEach(([name, time]) => {
|
|
91
|
+
const timeStr = time >= 1e3 ? `${(time / 1e3).toFixed(2)}s` : `${Math.round(time)}ms`;
|
|
92
|
+
const barLength = Math.min(Math.ceil(time / TIME_SCALE_DIVISOR), MAX_BAR_LENGTH);
|
|
93
|
+
const bar = "█".repeat(barLength);
|
|
94
|
+
const paddedName = name.padStart(maxNameLength, " ");
|
|
95
|
+
summaryLines.push([`${indent}${(0, __kubb_core_logger.randomCliColour)(paddedName)} ${picocolors.default.dim(bar)} ${picocolors.default.yellow(timeStr)}`, true]);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
summaryLines.push([`${picocolors.default.bold(labels.output.padEnd(maxLabelLength))} ${meta.output}`, true]);
|
|
100
|
+
logs.add(summaryLines.map((item) => {
|
|
89
101
|
if (item.at(1)) return item.at(0);
|
|
90
102
|
}).filter(Boolean).join("\n"));
|
|
91
103
|
return [...logs];
|
|
@@ -151,50 +163,35 @@ async function generate({ input, config, progressCache, args }) {
|
|
|
151
163
|
logger
|
|
152
164
|
});
|
|
153
165
|
logger.emit("start", `Building ${logger.logLevel !== __kubb_core_logger.LogMapper.silent ? picocolors.default.dim(inputPath) : ""}`);
|
|
154
|
-
const { files, failedPlugins, error } = await (0, __kubb_core.safeBuild)({
|
|
166
|
+
const { files, failedPlugins, pluginTimings, error } = await (0, __kubb_core.safeBuild)({
|
|
155
167
|
config: definedConfig,
|
|
156
168
|
logger
|
|
157
169
|
}, {
|
|
158
170
|
pluginManager,
|
|
159
|
-
fabric
|
|
171
|
+
fabric,
|
|
172
|
+
logger
|
|
160
173
|
});
|
|
161
|
-
if (logger.logLevel
|
|
174
|
+
if (logger.logLevel >= __kubb_core_logger.LogMapper.debug) {
|
|
162
175
|
logger.consola?.start("Writing logs");
|
|
163
|
-
|
|
164
|
-
logger.consola?.success(
|
|
176
|
+
await logger.writeLogs();
|
|
177
|
+
logger.consola?.success("Written logs");
|
|
165
178
|
}
|
|
166
179
|
const summary = getSummary({
|
|
167
180
|
failedPlugins,
|
|
168
181
|
filesCreated: files.length,
|
|
169
182
|
config: definedConfig,
|
|
170
183
|
status: failedPlugins.size > 0 || error ? "failed" : "success",
|
|
171
|
-
hrStart
|
|
184
|
+
hrStart,
|
|
185
|
+
pluginTimings: logger.logLevel >= __kubb_core_logger.LogMapper.verbose ? pluginTimings : void 0
|
|
172
186
|
});
|
|
173
|
-
if (failedPlugins.size && logger.consola) {
|
|
187
|
+
if ((failedPlugins.size > 0 || error) && logger.consola) {
|
|
174
188
|
logger.consola?.resumeLogs();
|
|
175
|
-
logger.consola
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
message: summary.join(""),
|
|
179
|
-
style: {
|
|
180
|
-
padding: 2,
|
|
181
|
-
borderColor: "red",
|
|
182
|
-
borderStyle: "rounded"
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
const errors = getErrorCauses([...failedPlugins].filter((it) => it.error).map((it) => it.error));
|
|
186
|
-
if (logger.consola && errors.length && logger.logLevel === __kubb_core_logger.LogMapper.debug) errors.forEach((err) => {
|
|
189
|
+
logger.consola?.log(`✗ Build failed ${logger.logLevel !== __kubb_core_logger.LogMapper.silent ? picocolors.default.dim(inputPath) : ""}`);
|
|
190
|
+
[error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
|
|
191
|
+
if (logger.logLevel >= __kubb_core_logger.LogMapper.debug && err.cause) logger.consola?.error(err.cause);
|
|
187
192
|
logger.consola?.error(err);
|
|
188
193
|
});
|
|
189
|
-
|
|
190
|
-
logger.consola?.error(it.error);
|
|
191
|
-
});
|
|
192
|
-
node_process.default.exit(1);
|
|
193
|
-
}
|
|
194
|
-
if (error && logger.consola) {
|
|
195
|
-
logger.consola?.resumeLogs();
|
|
196
|
-
logger.consola.error(`Build failed ${logger.logLevel !== __kubb_core_logger.LogMapper.silent ? picocolors.default.dim(inputPath) : ""}`);
|
|
197
|
-
logger.consola.box({
|
|
194
|
+
logger.consola?.box({
|
|
198
195
|
title: `${config.name || ""}`,
|
|
199
196
|
message: summary.join(""),
|
|
200
197
|
style: {
|
|
@@ -203,72 +200,127 @@ async function generate({ input, config, progressCache, args }) {
|
|
|
203
200
|
borderStyle: "rounded"
|
|
204
201
|
}
|
|
205
202
|
});
|
|
206
|
-
const errors = getErrorCauses([error]);
|
|
207
|
-
if (logger.consola && errors.length && logger.logLevel === __kubb_core_logger.LogMapper.debug) errors.forEach((err) => {
|
|
208
|
-
logger.consola?.error(err);
|
|
209
|
-
});
|
|
210
|
-
logger.consola?.error(error);
|
|
211
203
|
node_process.default.exit(1);
|
|
212
204
|
}
|
|
213
205
|
if (config.output.format === "prettier") {
|
|
214
206
|
logger?.emit("start", `Formatting with ${config.output.format}`);
|
|
207
|
+
logger?.emit("debug", {
|
|
208
|
+
date: /* @__PURE__ */ new Date(),
|
|
209
|
+
logs: [`Running prettier on ${node_path.default.resolve(definedConfig.root, definedConfig.output.path)}`]
|
|
210
|
+
});
|
|
215
211
|
try {
|
|
216
212
|
await (0, execa.execa)("prettier", [
|
|
217
213
|
"--ignore-unknown",
|
|
218
214
|
"--write",
|
|
219
215
|
node_path.default.resolve(definedConfig.root, definedConfig.output.path)
|
|
220
216
|
]);
|
|
217
|
+
logger?.emit("debug", {
|
|
218
|
+
date: /* @__PURE__ */ new Date(),
|
|
219
|
+
logs: ["Prettier formatting completed successfully"]
|
|
220
|
+
});
|
|
221
221
|
} catch (e) {
|
|
222
222
|
logger.consola?.warn("Prettier not found");
|
|
223
223
|
logger.consola?.error(e);
|
|
224
|
+
logger?.emit("debug", {
|
|
225
|
+
date: /* @__PURE__ */ new Date(),
|
|
226
|
+
logs: [`Prettier formatting failed: ${e.message}`]
|
|
227
|
+
});
|
|
224
228
|
}
|
|
225
229
|
logger?.emit("success", `Formatted with ${config.output.format}`);
|
|
226
230
|
}
|
|
227
231
|
if (config.output.format === "biome") {
|
|
228
232
|
logger?.emit("start", `Formatting with ${config.output.format}`);
|
|
233
|
+
logger?.emit("debug", {
|
|
234
|
+
date: /* @__PURE__ */ new Date(),
|
|
235
|
+
logs: [`Running biome format on ${node_path.default.resolve(definedConfig.root, definedConfig.output.path)}`]
|
|
236
|
+
});
|
|
229
237
|
try {
|
|
230
238
|
await (0, execa.execa)("biome", [
|
|
231
239
|
"format",
|
|
232
240
|
"--write",
|
|
233
241
|
node_path.default.resolve(definedConfig.root, definedConfig.output.path)
|
|
234
242
|
]);
|
|
243
|
+
logger?.emit("debug", {
|
|
244
|
+
date: /* @__PURE__ */ new Date(),
|
|
245
|
+
logs: ["Biome formatting completed successfully"]
|
|
246
|
+
});
|
|
235
247
|
} catch (e) {
|
|
236
248
|
logger.consola?.warn("Biome not found");
|
|
237
249
|
logger.consola?.error(e);
|
|
250
|
+
logger?.emit("debug", {
|
|
251
|
+
date: /* @__PURE__ */ new Date(),
|
|
252
|
+
logs: [`Biome formatting failed: ${e.message}`]
|
|
253
|
+
});
|
|
238
254
|
}
|
|
239
255
|
logger?.emit("success", `Formatted with ${config.output.format}`);
|
|
240
256
|
}
|
|
241
257
|
if (config.output.lint === "eslint") {
|
|
242
258
|
logger?.emit("start", `Linting with ${config.output.lint}`);
|
|
259
|
+
logger?.emit("debug", {
|
|
260
|
+
date: /* @__PURE__ */ new Date(),
|
|
261
|
+
logs: [`Running eslint on ${node_path.default.resolve(definedConfig.root, definedConfig.output.path)}`]
|
|
262
|
+
});
|
|
243
263
|
try {
|
|
244
264
|
await (0, execa.execa)("eslint", [node_path.default.resolve(definedConfig.root, definedConfig.output.path), "--fix"]);
|
|
265
|
+
logger?.emit("debug", {
|
|
266
|
+
date: /* @__PURE__ */ new Date(),
|
|
267
|
+
logs: ["ESLint linting completed successfully"]
|
|
268
|
+
});
|
|
245
269
|
} catch (e) {
|
|
246
270
|
logger.consola?.warn("Eslint not found");
|
|
247
271
|
logger.consola?.error(e);
|
|
272
|
+
logger?.emit("debug", {
|
|
273
|
+
date: /* @__PURE__ */ new Date(),
|
|
274
|
+
logs: [`ESLint linting failed: ${e.message}`]
|
|
275
|
+
});
|
|
248
276
|
}
|
|
249
277
|
logger?.emit("success", `Linted with ${config.output.lint}`);
|
|
250
278
|
}
|
|
251
279
|
if (config.output.lint === "biome") {
|
|
252
280
|
logger?.emit("start", `Linting with ${config.output.lint}`);
|
|
281
|
+
logger?.emit("debug", {
|
|
282
|
+
date: /* @__PURE__ */ new Date(),
|
|
283
|
+
logs: [`Running biome lint on ${node_path.default.resolve(definedConfig.root, definedConfig.output.path)}`]
|
|
284
|
+
});
|
|
253
285
|
try {
|
|
254
286
|
await (0, execa.execa)("biome", [
|
|
255
287
|
"lint",
|
|
256
288
|
"--fix",
|
|
257
289
|
node_path.default.resolve(definedConfig.root, definedConfig.output.path)
|
|
258
290
|
]);
|
|
291
|
+
logger?.emit("debug", {
|
|
292
|
+
date: /* @__PURE__ */ new Date(),
|
|
293
|
+
logs: ["Biome linting completed successfully"]
|
|
294
|
+
});
|
|
259
295
|
} catch (e) {
|
|
260
296
|
logger.consola?.warn("Biome not found");
|
|
261
297
|
logger.consola?.error(e);
|
|
298
|
+
logger?.emit("debug", {
|
|
299
|
+
date: /* @__PURE__ */ new Date(),
|
|
300
|
+
logs: [`✗ Biome linting failed: ${e.message}`]
|
|
301
|
+
});
|
|
262
302
|
}
|
|
263
303
|
logger?.emit("success", `Linted with ${config.output.lint}`);
|
|
264
304
|
}
|
|
265
305
|
if (config.output.lint === "oxlint") {
|
|
266
306
|
logger?.emit("start", `Linting with ${config.output.lint}`);
|
|
307
|
+
logger?.emit("debug", {
|
|
308
|
+
date: /* @__PURE__ */ new Date(),
|
|
309
|
+
logs: [`Running oxlint on ${node_path.default.resolve(definedConfig.root, definedConfig.output.path)}`]
|
|
310
|
+
});
|
|
267
311
|
try {
|
|
268
312
|
await (0, execa.execa)("oxlint", ["--fix", node_path.default.resolve(definedConfig.root, definedConfig.output.path)]);
|
|
313
|
+
logger?.emit("debug", {
|
|
314
|
+
date: /* @__PURE__ */ new Date(),
|
|
315
|
+
logs: ["Oxlint linting completed successfully"]
|
|
316
|
+
});
|
|
269
317
|
} catch (e) {
|
|
270
318
|
logger.consola?.warn("Oxlint not found");
|
|
271
319
|
logger.consola?.error(e);
|
|
320
|
+
logger?.emit("debug", {
|
|
321
|
+
date: /* @__PURE__ */ new Date(),
|
|
322
|
+
logs: [`✗ Oxlint linting failed: ${e.message}`]
|
|
323
|
+
});
|
|
272
324
|
}
|
|
273
325
|
logger?.emit("success", `Linted with ${config.output.lint}`);
|
|
274
326
|
}
|
|
@@ -276,7 +328,7 @@ async function generate({ input, config, progressCache, args }) {
|
|
|
276
328
|
hooks: config.hooks,
|
|
277
329
|
logger
|
|
278
330
|
});
|
|
279
|
-
logger.consola?.log(`⚡Build completed ${logger.logLevel !== __kubb_core_logger.LogMapper.silent ? picocolors.default.dim(inputPath) : ""}`);
|
|
331
|
+
logger.consola?.log(`⚡ Build completed ${logger.logLevel !== __kubb_core_logger.LogMapper.silent ? picocolors.default.dim(inputPath) : ""}`);
|
|
280
332
|
logger.consola?.box({
|
|
281
333
|
title: `${config.name || ""}`,
|
|
282
334
|
message: summary.join(""),
|
|
@@ -290,4 +342,4 @@ async function generate({ input, config, progressCache, args }) {
|
|
|
290
342
|
|
|
291
343
|
//#endregion
|
|
292
344
|
exports.generate = generate;
|
|
293
|
-
//# sourceMappingURL=generate-
|
|
345
|
+
//# sourceMappingURL=generate-DpHvARzf.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-DpHvARzf.cjs","names":["Writable","pc","LogMapper","pc","pc","path","summaryLines: Array<[string, boolean]>","process","LogMapper","SingleBar","Presets","definedConfig: Config","pc","path"],"sources":["../src/utils/Writables.ts","../src/utils/executeHooks.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/getSummary.ts","../src/runners/generate.ts"],"sourcesContent":["import * as process from 'node:process'\nimport type { WritableOptions } from 'node:stream'\nimport { Writable } from 'node:stream'\nimport type { ConsolaInstance } from 'consola'\nimport pc from 'picocolors'\n\nexport class ConsolaWritable extends Writable {\n consola: ConsolaInstance | undefined\n command: string\n constructor(consola: ConsolaInstance | undefined, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.consola = consola\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n process.stdout.write(`${pc.dim(chunk?.toString())}`)\n\n callback()\n }\n}\n","import type { Config } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\nimport { LogMapper } from '@kubb/core/logger'\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport { ConsolaWritable } from './Writables.ts'\n\ntype ExecutingHooksProps = {\n hooks: NonNullable<Config['hooks']>\n logger: Logger\n}\n\nexport async function executeHooks({ hooks, logger }: ExecutingHooksProps): Promise<void> {\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)\n\n for (const command of commands) {\n const consolaWritable = new ConsolaWritable(logger.consola!, command)\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n continue\n }\n\n logger?.emit('start', `Executing hook ${logger.logLevel !== LogMapper.silent ? pc.dim(command) : ''}`)\n\n await execa(cmd, _args, {\n detached: true,\n stdout: logger?.logLevel === LogMapper.silent ? undefined : ['pipe', consolaWritable],\n stripFinalNewline: true,\n })\n\n logger?.emit('success', `Executed hook ${logger.logLevel !== LogMapper.silent ? pc.dim(command) : ''}`)\n }\n\n logger?.emit('success', 'Executed hooks')\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","import path from 'node:path'\nimport type { Config, Plugin } from '@kubb/core'\nimport { randomCliColour } from '@kubb/core/logger'\nimport pc from 'picocolors'\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\ntype SummaryProps = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n status: 'success' | 'failed'\n hrStart: [number, number]\n filesCreated: number\n config: Config\n pluginTimings?: Map<string, number>\n}\n\nexport function getSummary({ failedPlugins, filesCreated, status, hrStart, config, pluginTimings }: SummaryProps): string[] {\n const logs = new Set<string>()\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart))\n\n const pluginsCount = config.plugins?.length || 0\n const successCount = pluginsCount - failedPlugins.size\n\n const meta = {\n plugins:\n status === 'success'\n ? `${pc.green(`${successCount} successful`)}, ${pluginsCount} total`\n : `${pc.green(`${successCount} successful`)}, ${pc.red(`${failedPlugins.size} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? [...failedPlugins]?.map(({ plugin }) => randomCliColour(plugin.name))?.join(', ') : undefined,\n filesCreated: filesCreated,\n time: `${pc.yellow(`${elapsedSeconds}s`)}`,\n output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root,\n } as const\n\n // Calculate label padding for perfect alignment\n const labels = {\n plugins: 'Plugins:',\n failed: 'Failed:',\n generated: 'Generated:',\n output: 'Output:',\n }\n const maxLabelLength = Math.max(...Object.values(labels).map((l) => l.length))\n\n const summaryLines: Array<[string, boolean]> = [\n [`${pc.bold(labels.plugins.padEnd(maxLabelLength))} ${meta.plugins}`, true],\n [`${pc.dim(labels.failed.padEnd(maxLabelLength))} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${pc.bold(labels.generated.padEnd(maxLabelLength))} ${meta.filesCreated} files in ${meta.time}`, true],\n ]\n\n // Add plugin timing breakdown if available\n if (pluginTimings && pluginTimings.size > 0) {\n const MAX_TOP_PLUGINS = 5\n const TIME_SCALE_DIVISOR = 100 // Each 100ms = 1 bar character\n const MAX_BAR_LENGTH = 20\n\n const sortedTimings = Array.from(pluginTimings.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, MAX_TOP_PLUGINS)\n\n if (sortedTimings.length > 0) {\n summaryLines.push(['Plugin Timings:', true])\n\n // Find the longest plugin name for alignment\n const maxNameLength = Math.max(...sortedTimings.map(([name]) => name.length))\n\n // Indent plugin timing bars to align with summary values (e.g., \"7 successful\", \"60 files\")\n const indent = ' '.repeat(maxLabelLength + 1)\n\n sortedTimings.forEach(([name, time]) => {\n const timeStr = time >= 1000 ? `${(time / 1000).toFixed(2)}s` : `${Math.round(time)}ms`\n const barLength = Math.min(Math.ceil(time / TIME_SCALE_DIVISOR), MAX_BAR_LENGTH)\n const bar = '█'.repeat(barLength)\n\n // Right-align plugin names, left-align bars, with consistent spacing\n const paddedName = name.padStart(maxNameLength, ' ')\n summaryLines.push([`${indent}${randomCliColour(paddedName)} ${pc.dim(bar)} ${pc.yellow(timeStr)}`, true])\n })\n }\n }\n\n summaryLines.push([`${pc.bold(labels.output.padEnd(maxLabelLength))} ${meta.output}`, true])\n\n logs.add(\n summaryLines\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return [...logs]\n}\n","import path from 'node:path'\nimport process from 'node:process'\nimport { type Config, safeBuild, setup } from '@kubb/core'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\nimport { Presets, SingleBar } from 'cli-progress'\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport type { Args } from '../commands/generate.ts'\nimport { executeHooks } from '../utils/executeHooks.ts'\nimport { getSummary } from '../utils/getSummary.ts'\n\ntype GenerateProps = {\n input?: string\n config: Config\n args: Args\n progressCache: Map<string, SingleBar>\n}\n\nexport async function generate({ input, config, progressCache, args }: GenerateProps): Promise<void> {\n const hrStart = process.hrtime()\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n\n const logger = createLogger({\n logLevel,\n name: config.name,\n })\n\n const { root = process.cwd(), ...userConfig } = config\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n if (logger.logLevel !== LogMapper.debug) {\n logger.on('progress_start', ({ id, size, message = '' }) => {\n logger.consola?.pauseLogs()\n const payload = { id, message }\n const progressBar = new SingleBar(\n {\n format: '{percentage}% {bar} {value}/{total} | {message}',\n barsize: 30,\n clearOnComplete: true,\n emptyOnZero: true,\n },\n Presets.shades_grey,\n )\n\n if (!progressCache.has(id)) {\n progressCache.set(id, progressBar)\n progressBar.start(size, 1, payload)\n }\n })\n\n logger.on('progress_stop', ({ id }) => {\n progressCache.get(id)?.stop()\n logger.consola?.resumeLogs()\n })\n\n logger.on('progressed', ({ id, message = '' }) => {\n const payload = { id, message }\n\n progressCache.get(id)?.increment(1, payload)\n })\n }\n\n const definedConfig: Config = {\n root,\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n format: 'prettier',\n ...userConfig.output,\n },\n }\n\n const { fabric, pluginManager } = await setup({\n config: definedConfig,\n logger,\n })\n\n logger.emit('start', `Building ${logger.logLevel !== LogMapper.silent ? pc.dim(inputPath!) : ''}`)\n\n const { files, failedPlugins, pluginTimings, error } = await safeBuild(\n {\n config: definedConfig,\n logger,\n },\n { pluginManager, fabric, logger },\n )\n\n if (logger.logLevel >= LogMapper.debug) {\n logger.consola?.start('Writing logs')\n\n await logger.writeLogs()\n\n logger.consola?.success('Written logs')\n }\n\n const summary = getSummary({\n failedPlugins,\n filesCreated: files.length,\n config: definedConfig,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings: logger.logLevel >= LogMapper.verbose ? pluginTimings : undefined,\n })\n\n // Handle build failures (either from failed plugins or general errors)\n const hasFailures = failedPlugins.size > 0 || error\n\n if (hasFailures && logger.consola) {\n logger.consola?.resumeLogs()\n logger.consola?.log(`✗ Build failed ${logger.logLevel !== LogMapper.silent ? pc.dim(inputPath!) : ''}`)\n\n // Collect all errors from failed plugins and general error\n const allErrors: Error[] = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n // Display error causes in debug mode\n if (logger.logLevel >= LogMapper.debug && err.cause) {\n logger.consola?.error(err.cause)\n }\n\n logger.consola?.error(err)\n })\n\n logger.consola?.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'red',\n borderStyle: 'rounded',\n },\n })\n\n process.exit(1)\n }\n\n // formatting\n if (config.output.format === 'prettier') {\n logger?.emit('start', `Formatting with ${config.output.format}`)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Running prettier on ${path.resolve(definedConfig.root, definedConfig.output.path)}`],\n })\n\n try {\n await execa('prettier', ['--ignore-unknown', '--write', path.resolve(definedConfig.root, definedConfig.output.path)])\n logger?.emit('debug', {\n date: new Date(),\n logs: ['Prettier formatting completed successfully'],\n })\n } catch (e) {\n logger.consola?.warn('Prettier not found')\n logger.consola?.error(e)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Prettier formatting failed: ${(e as Error).message}`],\n })\n }\n\n logger?.emit('success', `Formatted with ${config.output.format}`)\n }\n\n if (config.output.format === 'biome') {\n logger?.emit('start', `Formatting with ${config.output.format}`)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Running biome format on ${path.resolve(definedConfig.root, definedConfig.output.path)}`],\n })\n\n try {\n await execa('biome', ['format', '--write', path.resolve(definedConfig.root, definedConfig.output.path)])\n logger?.emit('debug', {\n date: new Date(),\n logs: ['Biome formatting completed successfully'],\n })\n } catch (e) {\n logger.consola?.warn('Biome not found')\n logger.consola?.error(e)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Biome formatting failed: ${(e as Error).message}`],\n })\n }\n\n logger?.emit('success', `Formatted with ${config.output.format}`)\n }\n\n // linting\n if (config.output.lint === 'eslint') {\n logger?.emit('start', `Linting with ${config.output.lint}`)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Running eslint on ${path.resolve(definedConfig.root, definedConfig.output.path)}`],\n })\n\n try {\n await execa('eslint', [path.resolve(definedConfig.root, definedConfig.output.path), '--fix'])\n logger?.emit('debug', {\n date: new Date(),\n logs: ['ESLint linting completed successfully'],\n })\n } catch (e) {\n logger.consola?.warn('Eslint not found')\n logger.consola?.error(e)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`ESLint linting failed: ${(e as Error).message}`],\n })\n }\n\n logger?.emit('success', `Linted with ${config.output.lint}`)\n }\n\n if (config.output.lint === 'biome') {\n logger?.emit('start', `Linting with ${config.output.lint}`)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Running biome lint on ${path.resolve(definedConfig.root, definedConfig.output.path)}`],\n })\n\n try {\n await execa('biome', ['lint', '--fix', path.resolve(definedConfig.root, definedConfig.output.path)])\n logger?.emit('debug', {\n date: new Date(),\n logs: ['Biome linting completed successfully'],\n })\n } catch (e) {\n logger.consola?.warn('Biome not found')\n logger.consola?.error(e)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`✗ Biome linting failed: ${(e as Error).message}`],\n })\n }\n\n logger?.emit('success', `Linted with ${config.output.lint}`)\n }\n\n if (config.output.lint === 'oxlint') {\n logger?.emit('start', `Linting with ${config.output.lint}`)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`Running oxlint on ${path.resolve(definedConfig.root, definedConfig.output.path)}`],\n })\n\n try {\n await execa('oxlint', ['--fix', path.resolve(definedConfig.root, definedConfig.output.path)])\n logger?.emit('debug', {\n date: new Date(),\n logs: ['Oxlint linting completed successfully'],\n })\n } catch (e) {\n logger.consola?.warn('Oxlint not found')\n logger.consola?.error(e)\n logger?.emit('debug', {\n date: new Date(),\n logs: [`✗ Oxlint linting failed: ${(e as Error).message}`],\n })\n }\n\n logger?.emit('success', `Linted with ${config.output.lint}`)\n }\n\n if (config.hooks) {\n await executeHooks({ hooks: config.hooks, logger })\n }\n\n logger.consola?.log(`⚡ Build completed ${logger.logLevel !== LogMapper.silent ? pc.dim(inputPath!) : ''}`)\n logger.consola?.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'green',\n borderStyle: 'rounded',\n },\n })\n}\n"],"mappings":"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"}
|
|
@@ -137,10 +137,10 @@ const command = (0, citty.defineCommand)({
|
|
|
137
137
|
},
|
|
138
138
|
logLevel: {
|
|
139
139
|
type: "string",
|
|
140
|
-
description: "Info, silent or debug",
|
|
140
|
+
description: "Info, silent, verbose or debug",
|
|
141
141
|
alias: "l",
|
|
142
142
|
default: "info",
|
|
143
|
-
valueHint: "silent|info|debug"
|
|
143
|
+
valueHint: "silent|info|verbose|debug"
|
|
144
144
|
},
|
|
145
145
|
watch: {
|
|
146
146
|
type: "boolean",
|
|
@@ -154,6 +154,12 @@ const command = (0, citty.defineCommand)({
|
|
|
154
154
|
alias: "d",
|
|
155
155
|
default: false
|
|
156
156
|
},
|
|
157
|
+
verbose: {
|
|
158
|
+
type: "boolean",
|
|
159
|
+
description: "Override logLevel to verbose",
|
|
160
|
+
alias: "v",
|
|
161
|
+
default: false
|
|
162
|
+
},
|
|
157
163
|
help: {
|
|
158
164
|
type: "boolean",
|
|
159
165
|
description: "Show help",
|
|
@@ -167,8 +173,9 @@ const command = (0, citty.defineCommand)({
|
|
|
167
173
|
const input = args._[0];
|
|
168
174
|
if (args.help) return (0, citty.showUsage)(command);
|
|
169
175
|
if (args.debug) args.logLevel = "debug";
|
|
176
|
+
if (args.verbose) args.logLevel = "verbose";
|
|
170
177
|
const logger = (0, __kubb_core_logger.createLogger)({ logLevel: __kubb_core_logger.LogMapper[args.logLevel] || 3 });
|
|
171
|
-
const { generate } = await Promise.resolve().then(() => require("./generate-
|
|
178
|
+
const { generate } = await Promise.resolve().then(() => require("./generate-DpHvARzf.cjs"));
|
|
172
179
|
logger.emit("start", "Loading config");
|
|
173
180
|
const result = await getCosmiConfig("kubb", args.config);
|
|
174
181
|
logger.emit("success", `Config loaded(${picocolors.default.dim(node_path.default.relative(node_process.cwd(), result.filepath))})`);
|
|
@@ -215,4 +222,4 @@ var generate_default = command;
|
|
|
215
222
|
|
|
216
223
|
//#endregion
|
|
217
224
|
exports.default = generate_default;
|
|
218
|
-
//# sourceMappingURL=generate-
|
|
225
|
+
//# sourceMappingURL=generate-KUqCSnZp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-KUqCSnZp.cjs","names":["results: Array<Config>","path","pc","LogMapper","pc","path","process","PromiseManager"],"sources":["../src/utils/getPlugins.ts","../src/utils/getConfig.ts","../src/utils/getCosmiConfig.ts","../src/utils/watcher.ts","../src/commands/generate.ts"],"sourcesContent":["import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import type { CLIOptions, Config, UserConfig } from '@kubb/core'\nimport { isPromise } from '@kubb/core/utils'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\nimport { getPlugins } from './getPlugins.ts'\n\n/**\n * Converting UserConfig to Config without a change in the object beside the JSON convert.\n */\nexport async function getConfig(result: CosmiconfigResult, args: Args): Promise<Array<Config> | Config> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args as 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 results: Array<Config> = []\n\n for (const item of JSONConfig) {\n const plugins = item.plugins ? await getPlugins(item.plugins) : undefined\n\n results.push({\n ...item,\n plugins,\n } as Config)\n }\n\n return results\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as Config\n}\n","import type { defineConfig, UserConfig } from '@kubb/core'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { createJiti } from 'jiti'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const jiti = createJiti(import.meta.url, {\n jsx: {\n runtime: 'automatic',\n importSource: '@kubb/react-fabric',\n },\n sourceMaps: true,\n })\n\n const mod = await jiti.import(configFile, { default: true })\n\n return mod\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","import { createLogger } from '@kubb/core/logger'\nimport pc from 'picocolors'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n const logger = createLogger()\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 logger?.emit('info', pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n\n try {\n cb(path)\n } catch (_e) {\n logger?.emit('warning', pc.red('Watcher failed'))\n }\n })\n}\n","import path from 'node:path'\nimport * as process from 'node:process'\nimport { isInputPath, PromiseManager } from '@kubb/core'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { defineCommand, showUsage } from 'citty'\nimport type { SingleBar } from 'cli-progress'\nimport pc from 'picocolors'\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\ndeclare global {\n var isDevtoolsEnabled: any\n}\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n logLevel: {\n type: 'string',\n description: 'Info, silent, verbose or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|verbose|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\n default: false,\n },\n verbose: {\n type: 'boolean',\n description: 'Override logLevel to verbose',\n alias: 'v',\n default: false,\n },\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nexport type Args = ParsedArgs<typeof args>\n\nconst command = defineCommand({\n meta: {\n name: 'generate',\n description: \"[input] Generate files based on a 'kubb.config.ts' file\",\n },\n args,\n async run(commandContext) {\n const progressCache = new Map<string, SingleBar>()\n\n const { args } = commandContext\n\n const input = args._[0]\n\n if (args.help) {\n return showUsage(command)\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.verbose) {\n args.logLevel = 'verbose'\n }\n\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n })\n const { generate } = await import('../runners/generate.ts')\n\n logger.emit('start', 'Loading config')\n\n const result = await getCosmiConfig('kubb', args.config)\n logger.emit('success', `Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, args)\n\n const start = async () => {\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((c) => () => {\n progressCache.clear()\n\n return generate({\n input,\n config: c,\n args,\n progressCache,\n })\n })\n\n await promiseManager.run('seq', promises)\n return\n }\n\n progressCache.clear()\n\n await generate({\n input,\n config,\n progressCache,\n args,\n })\n\n return\n }\n\n if (args.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple Configs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await start()\n logger.emit('start', pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n await start()\n\n if (globalThis.isDevtoolsEnabled) {\n const canRestart = await logger.consola?.prompt('Restart(could be used to validate the profiler)?', {\n type: 'confirm',\n initial: false,\n })\n\n if (canRestart) {\n await start()\n } else {\n process.exit(1)\n }\n }\n },\n})\n\nexport default command\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -9,7 +9,7 @@ latest_version = require_chunk.__toESM(latest_version);
|
|
|
9
9
|
let semver = require("semver");
|
|
10
10
|
|
|
11
11
|
//#region package.json
|
|
12
|
-
var version = "4.11.
|
|
12
|
+
var version = "4.11.3";
|
|
13
13
|
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region src/index.ts
|
|
@@ -52,12 +52,12 @@ Run \`npm install -g @kubb/cli\` to update`,
|
|
|
52
52
|
"validate",
|
|
53
53
|
"mcp"
|
|
54
54
|
].includes(rawArgs[0])) {
|
|
55
|
-
await (0, citty.runCommand)(await Promise.resolve().then(() => require("./generate-
|
|
55
|
+
await (0, citty.runCommand)(await Promise.resolve().then(() => require("./generate-KUqCSnZp.cjs")).then((r) => r.default), { rawArgs });
|
|
56
56
|
process.exit(0);
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
subCommands: {
|
|
60
|
-
generate: () => Promise.resolve().then(() => require("./generate-
|
|
60
|
+
generate: () => Promise.resolve().then(() => require("./generate-KUqCSnZp.cjs")).then((r) => r.default),
|
|
61
61
|
validate: () => Promise.resolve().then(() => require("./validate-6F-VPZR7.cjs")).then((r) => r.default),
|
|
62
62
|
mcp: () => Promise.resolve().then(() => require("./mcp-BQjDRDXR.cjs")).then((r) => r.default)
|
|
63
63
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@kubb/cli\",\n \"version\": \"4.11.
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@kubb/cli\",\n \"version\": \"4.11.3\",\n \"description\": \"Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.\",\n \"keywords\": [\n \"cli\",\n \"command-line\",\n \"typescript\",\n \"openapi\",\n \"swagger\",\n \"code-generator\",\n \"codegen\",\n \"plugins\",\n \"kubb\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kubb-labs/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"stijnvanhulle\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"require\": \"./dist/index.cjs\",\n \"import\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.cts\",\n \"bin\": {\n \"kubb\": \"bin/kubb.cjs\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"size-limit\": [\n {\n \"path\": \"./dist/*.js\",\n \"limit\": \"510 KiB\",\n \"gzip\": true\n }\n ],\n \"scripts\": {\n \"build\": \"tsdown && size-limit\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"bun biome lint .\",\n \"lint:fix\": \"bun biome lint --fix --unsafe .\",\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\": \"tsdown --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"chokidar\": \"^4.0.3\",\n \"citty\": \"^0.1.6\",\n \"cli-progress\": \"^3.12.0\",\n \"consola\": \"^3.4.2\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^9.6.1\",\n \"gradient-string\": \"^3.0.0\",\n \"jiti\": \"^2.6.1\",\n \"latest-version\": \"^9.0.0\",\n \"picocolors\": \"^1.1.1\",\n \"semver\": \"^7.7.3\",\n \"string-argv\": \"^0.3.2\"\n },\n \"devDependencies\": {\n \"@kubb/mcp\": \"workspace:*\",\n \"@kubb/oas\": \"workspace:*\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/semver\": \"^7.7.1\",\n \"source-map-support\": \"^0.5.21\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { defineCommand, runCommand, runMain } from 'citty'\nimport consola from 'consola'\nimport { default as gradientString } from 'gradient-string'\nimport getLatestVersion from 'latest-version'\nimport { lt } from 'semver'\nimport { version } from '../package.json'\n\nconst name = 'kubb'\n\nconst main = defineCommand({\n meta: {\n name,\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n try {\n consola.log(gradientString(['#F58517', '#F5A217', '#F55A17'])('Kubb CLI:'))\n\n const latestVersion = await getLatestVersion('@kubb/cli')\n\n if (lt(version, latestVersion)) {\n consola.box({\n title: 'Update available for `Kubb` ',\n message: `\\`v${version}\\` → \\`v${latestVersion}\\`\nRun \\`npm install -g @kubb/cli\\` to update`,\n style: {\n padding: 2,\n borderColor: 'yellow',\n borderStyle: 'rounded',\n },\n })\n }\n } catch (_e) {}\n\n if (!['generate', 'validate', 'mcp'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;;;;;;;cAEa;;;;ACOb,MAAM,gCAAqB;CACzB,MAAM;EACJ,MAJS;EAKT;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAI,QAAQ;AACpB,WAAQ,KAAK,EAAE;;AAEjB,MAAI;AACF,mBAAQ,iCAAmB;IAAC;IAAW;IAAW;IAAU,CAAC,CAAC,YAAY,CAAC;GAE3E,MAAM,gBAAgB,kCAAuB,YAAY;AAEzD,sBAAO,SAAS,cAAc,CAC5B,iBAAQ,IAAI;IACV,OAAO;IACP,SAAS,MAAM,QAAQ,UAAU,cAAc;;IAE/C,OAAO;KACL,SAAS;KACT,aAAa;KACb,aAAa;KACd;IACF,CAAC;WAEG,IAAI;AAEb,MAAI,CAAC;GAAC;GAAY;GAAY;GAAM,CAAC,SAAS,QAAQ,GAAa,EAAE;AAInE,+BAFwB,2CAAM,4BAAiC,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,gDAAW,uBAA4B,MAAM,MAAM,EAAE,QAAQ;EAC9D;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,0BAAc,KAAK"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import getLatestVersion from "latest-version";
|
|
|
5
5
|
import { lt } from "semver";
|
|
6
6
|
|
|
7
7
|
//#region package.json
|
|
8
|
-
var version = "4.11.
|
|
8
|
+
var version = "4.11.3";
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/index.ts
|
|
@@ -48,12 +48,12 @@ Run \`npm install -g @kubb/cli\` to update`,
|
|
|
48
48
|
"validate",
|
|
49
49
|
"mcp"
|
|
50
50
|
].includes(rawArgs[0])) {
|
|
51
|
-
await runCommand(await import("./generate-
|
|
51
|
+
await runCommand(await import("./generate-CYBFB3tU.js").then((r) => r.default), { rawArgs });
|
|
52
52
|
process.exit(0);
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
55
|
subCommands: {
|
|
56
|
-
generate: () => import("./generate-
|
|
56
|
+
generate: () => import("./generate-CYBFB3tU.js").then((r) => r.default),
|
|
57
57
|
validate: () => import("./validate-0i6Q9eIy.js").then((r) => r.default),
|
|
58
58
|
mcp: () => import("./mcp-BIRDY8xn.js").then((r) => r.default)
|
|
59
59
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@kubb/cli\",\n \"version\": \"4.11.
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@kubb/cli\",\n \"version\": \"4.11.3\",\n \"description\": \"Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.\",\n \"keywords\": [\n \"cli\",\n \"command-line\",\n \"typescript\",\n \"openapi\",\n \"swagger\",\n \"code-generator\",\n \"codegen\",\n \"plugins\",\n \"kubb\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kubb-labs/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"stijnvanhulle\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"require\": \"./dist/index.cjs\",\n \"import\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.cts\",\n \"bin\": {\n \"kubb\": \"bin/kubb.cjs\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"size-limit\": [\n {\n \"path\": \"./dist/*.js\",\n \"limit\": \"510 KiB\",\n \"gzip\": true\n }\n ],\n \"scripts\": {\n \"build\": \"tsdown && size-limit\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"bun biome lint .\",\n \"lint:fix\": \"bun biome lint --fix --unsafe .\",\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\": \"tsdown --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"chokidar\": \"^4.0.3\",\n \"citty\": \"^0.1.6\",\n \"cli-progress\": \"^3.12.0\",\n \"consola\": \"^3.4.2\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^9.6.1\",\n \"gradient-string\": \"^3.0.0\",\n \"jiti\": \"^2.6.1\",\n \"latest-version\": \"^9.0.0\",\n \"picocolors\": \"^1.1.1\",\n \"semver\": \"^7.7.3\",\n \"string-argv\": \"^0.3.2\"\n },\n \"devDependencies\": {\n \"@kubb/mcp\": \"workspace:*\",\n \"@kubb/oas\": \"workspace:*\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/semver\": \"^7.7.1\",\n \"source-map-support\": \"^0.5.21\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { defineCommand, runCommand, runMain } from 'citty'\nimport consola from 'consola'\nimport { default as gradientString } from 'gradient-string'\nimport getLatestVersion from 'latest-version'\nimport { lt } from 'semver'\nimport { version } from '../package.json'\n\nconst name = 'kubb'\n\nconst main = defineCommand({\n meta: {\n name,\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n try {\n consola.log(gradientString(['#F58517', '#F5A217', '#F55A17'])('Kubb CLI:'))\n\n const latestVersion = await getLatestVersion('@kubb/cli')\n\n if (lt(version, latestVersion)) {\n consola.box({\n title: 'Update available for `Kubb` ',\n message: `\\`v${version}\\` → \\`v${latestVersion}\\`\nRun \\`npm install -g @kubb/cli\\` to update`,\n style: {\n padding: 2,\n borderColor: 'yellow',\n borderStyle: 'rounded',\n },\n })\n }\n } catch (_e) {}\n\n if (!['generate', 'validate', 'mcp'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;;;cAEa;;;;ACOb,MAAM,OAAO,cAAc;CACzB,MAAM;EACJ,MAJS;EAKT;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAI,QAAQ;AACpB,WAAQ,KAAK,EAAE;;AAEjB,MAAI;AACF,WAAQ,IAAI,eAAe;IAAC;IAAW;IAAW;IAAU,CAAC,CAAC,YAAY,CAAC;GAE3E,MAAM,gBAAgB,MAAM,iBAAiB,YAAY;AAEzD,OAAI,GAAG,SAAS,cAAc,CAC5B,SAAQ,IAAI;IACV,OAAO;IACP,SAAS,MAAM,QAAQ,UAAU,cAAc;;IAE/C,OAAO;KACL,SAAS;KACT,aAAa;KACb,aAAa;KACd;IACF,CAAC;WAEG,IAAI;AAEb,MAAI,CAAC;GAAC;GAAY;GAAY;GAAM,CAAC,SAAS,QAAQ,GAAa,EAAE;AAInE,SAAM,WAFkB,MAAM,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,WAAW,OAAO,qBAAqB,MAAM,MAAM,EAAE,QAAQ;EAC9D;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,OAAM,QAAQ,KAAK"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/cli",
|
|
3
|
-
"version": "4.11.
|
|
3
|
+
"version": "4.11.3",
|
|
4
4
|
"description": "Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -62,14 +62,14 @@
|
|
|
62
62
|
"picocolors": "^1.1.1",
|
|
63
63
|
"semver": "^7.7.3",
|
|
64
64
|
"string-argv": "^0.3.2",
|
|
65
|
-
"@kubb/core": "4.11.
|
|
65
|
+
"@kubb/core": "4.11.3"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/cli-progress": "^3.11.6",
|
|
69
69
|
"@types/semver": "^7.7.1",
|
|
70
70
|
"source-map-support": "^0.5.21",
|
|
71
|
-
"@kubb/mcp": "4.11.
|
|
72
|
-
"@kubb/oas": "4.11.
|
|
71
|
+
"@kubb/mcp": "4.11.3",
|
|
72
|
+
"@kubb/oas": "4.11.3"
|
|
73
73
|
},
|
|
74
74
|
"engines": {
|
|
75
75
|
"node": ">=20"
|
package/src/commands/generate.ts
CHANGED
|
@@ -22,10 +22,10 @@ const args = {
|
|
|
22
22
|
},
|
|
23
23
|
logLevel: {
|
|
24
24
|
type: 'string',
|
|
25
|
-
description: 'Info, silent or debug',
|
|
25
|
+
description: 'Info, silent, verbose or debug',
|
|
26
26
|
alias: 'l',
|
|
27
27
|
default: 'info',
|
|
28
|
-
valueHint: 'silent|info|debug',
|
|
28
|
+
valueHint: 'silent|info|verbose|debug',
|
|
29
29
|
},
|
|
30
30
|
watch: {
|
|
31
31
|
type: 'boolean',
|
|
@@ -39,6 +39,12 @@ const args = {
|
|
|
39
39
|
alias: 'd',
|
|
40
40
|
default: false,
|
|
41
41
|
},
|
|
42
|
+
verbose: {
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
description: 'Override logLevel to verbose',
|
|
45
|
+
alias: 'v',
|
|
46
|
+
default: false,
|
|
47
|
+
},
|
|
42
48
|
help: {
|
|
43
49
|
type: 'boolean',
|
|
44
50
|
description: 'Show help',
|
|
@@ -70,6 +76,10 @@ const command = defineCommand({
|
|
|
70
76
|
args.logLevel = 'debug'
|
|
71
77
|
}
|
|
72
78
|
|
|
79
|
+
if (args.verbose) {
|
|
80
|
+
args.logLevel = 'verbose'
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3
|
|
74
84
|
const logger = createLogger({
|
|
75
85
|
logLevel,
|