@kubb/cli 5.0.0-alpha.3 → 5.0.0-alpha.30
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/{agent-EkZmkNy6.cjs → agent-BCuaVkEd.cjs} +5 -5
- package/dist/{agent-EkZmkNy6.cjs.map → agent-BCuaVkEd.cjs.map} +1 -1
- package/dist/{agent-L50VNhXv.js → agent-DTyw-mt7.js} +4 -4
- package/dist/{agent-L50VNhXv.js.map → agent-DTyw-mt7.js.map} +1 -1
- package/dist/{agent-C6o_6GSJ.cjs → agent-DpzeyN1s.cjs} +4 -4
- package/dist/{agent-C6o_6GSJ.cjs.map → agent-DpzeyN1s.cjs.map} +1 -1
- package/dist/{agent-C0bAlvWn.js → agent-a8pLjRwh.js} +5 -5
- package/dist/{agent-C0bAlvWn.js.map → agent-a8pLjRwh.js.map} +1 -1
- package/dist/{constants-BTUap0zs.cjs → constants-D0XHAHeZ.cjs} +78 -8
- package/dist/constants-D0XHAHeZ.cjs.map +1 -0
- package/dist/{constants-CM3dJzjK.js → constants-DJM9zCXm.js} +73 -9
- package/dist/constants-DJM9zCXm.js.map +1 -0
- package/dist/define-Bdn8j5VM.cjs +54 -0
- package/dist/define-Bdn8j5VM.cjs.map +1 -0
- package/dist/define-Ctii4bel.js +43 -0
- package/dist/define-Ctii4bel.js.map +1 -0
- package/dist/{errors-DBW0N9w4.cjs → errors-CLCjoSg0.cjs} +22 -6
- package/dist/errors-CLCjoSg0.cjs.map +1 -0
- package/dist/errors-CjPmyZHy.js +43 -0
- package/dist/errors-CjPmyZHy.js.map +1 -0
- package/dist/{generate-B1et6yyL.cjs → generate-BMkY2JhZ.cjs} +3 -3
- package/dist/{generate-B1et6yyL.cjs.map → generate-BMkY2JhZ.cjs.map} +1 -1
- package/dist/{generate-C0Lnz3VU.cjs → generate-C-gO_6QU.cjs} +187 -88
- package/dist/generate-C-gO_6QU.cjs.map +1 -0
- package/dist/{generate-DnmnwWSE.js → generate-CPY_n5OL.js} +3 -3
- package/dist/{generate-DnmnwWSE.js.map → generate-CPY_n5OL.js.map} +1 -1
- package/dist/{generate-vf3X_h_u.js → generate-D7w3tiCk.js} +188 -89
- package/dist/generate-D7w3tiCk.js.map +1 -0
- package/dist/index.cjs +49 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +49 -21
- package/dist/index.js.map +1 -1
- package/dist/{init-hmolV6B4.cjs → init-BlriFVH6.cjs} +19 -4
- package/dist/init-BlriFVH6.cjs.map +1 -0
- package/dist/{init-CMu6JTPI.js → init-Bxv30QR0.js} +4 -4
- package/dist/{init-CMu6JTPI.js.map → init-Bxv30QR0.js.map} +1 -1
- package/dist/{init-BvVLmKcJ.cjs → init-IVpqf3Ks.cjs} +4 -4
- package/dist/{init-BvVLmKcJ.cjs.map → init-IVpqf3Ks.cjs.map} +1 -1
- package/dist/{init-C-InrmSY.js → init-Y1TNCdzh.js} +19 -4
- package/dist/init-Y1TNCdzh.js.map +1 -0
- package/dist/{mcp-BwXRVY1N.js → mcp-Cjovctp3.js} +4 -4
- package/dist/{mcp-BwXRVY1N.js.map → mcp-Cjovctp3.js.map} +1 -1
- package/dist/{mcp-D2SHEg_d.js → mcp-CxuctqmK.js} +3 -3
- package/dist/{mcp-D2SHEg_d.js.map → mcp-CxuctqmK.js.map} +1 -1
- package/dist/{mcp-DPU081OK.cjs → mcp-DFxGUufs.cjs} +4 -4
- package/dist/{mcp-DPU081OK.cjs.map → mcp-DFxGUufs.cjs.map} +1 -1
- package/dist/{mcp-ChHFPRzD.cjs → mcp-jMZ56bqT.cjs} +3 -3
- package/dist/{mcp-ChHFPRzD.cjs.map → mcp-jMZ56bqT.cjs.map} +1 -1
- package/dist/{package-BsZ_vsP1.cjs → package-DApgJdUF.cjs} +2 -2
- package/dist/package-DApgJdUF.cjs.map +1 -0
- package/dist/package-DajRuqoe.js +6 -0
- package/dist/package-DajRuqoe.js.map +1 -0
- package/dist/{shell-7HPrTCJ5.cjs → shell-475fQKaX.cjs} +8 -3
- package/dist/shell-475fQKaX.cjs.map +1 -0
- package/dist/{shell-DqqWsHCD.js → shell-DLzN4fRo.js} +8 -3
- package/dist/shell-DLzN4fRo.js.map +1 -0
- package/dist/{telemetry-DxiR7clS.js → telemetry-CBISr5w4.js} +48 -6
- package/dist/telemetry-CBISr5w4.js.map +1 -0
- package/dist/{telemetry-Cn9X1I5B.cjs → telemetry-YO-uwAbf.cjs} +48 -6
- package/dist/telemetry-YO-uwAbf.cjs.map +1 -0
- package/dist/{validate-Bbrn3Q-A.cjs → validate-B-LfVNlS.cjs} +3 -3
- package/dist/{validate-Bbrn3Q-A.cjs.map → validate-B-LfVNlS.cjs.map} +1 -1
- package/dist/{validate--6d6ZZTO.js → validate-BiC3bzBI.js} +4 -4
- package/dist/{validate--6d6ZZTO.js.map → validate-BiC3bzBI.js.map} +1 -1
- package/dist/{validate-BSaNWrhu.cjs → validate-BmlSA_cw.cjs} +4 -4
- package/dist/{validate-BSaNWrhu.cjs.map → validate-BmlSA_cw.cjs.map} +1 -1
- package/dist/{validate-l8vLmwKA.js → validate-CIS8nJdd.js} +3 -3
- package/dist/{validate-l8vLmwKA.js.map → validate-CIS8nJdd.js.map} +1 -1
- package/package.json +6 -6
- package/src/constants.ts +57 -10
- package/src/index.ts +10 -12
- package/src/loggers/clackLogger.ts +30 -22
- package/src/loggers/fileSystemLogger.ts +3 -1
- package/src/runners/generate.ts +22 -23
- package/src/types.ts +11 -0
- package/src/utils/flags.ts +10 -0
- package/src/utils/getCosmiConfig.ts +6 -0
- package/dist/constants-BTUap0zs.cjs.map +0 -1
- package/dist/constants-CM3dJzjK.js.map +0 -1
- package/dist/define--M_JMcDC.js +0 -25
- package/dist/define--M_JMcDC.js.map +0 -1
- package/dist/define-D6Kfm7-Z.cjs +0 -36
- package/dist/define-D6Kfm7-Z.cjs.map +0 -1
- package/dist/errors-6mF_WKxg.js +0 -27
- package/dist/errors-6mF_WKxg.js.map +0 -1
- package/dist/errors-DBW0N9w4.cjs.map +0 -1
- package/dist/generate-C0Lnz3VU.cjs.map +0 -1
- package/dist/generate-vf3X_h_u.js.map +0 -1
- package/dist/init-C-InrmSY.js.map +0 -1
- package/dist/init-hmolV6B4.cjs.map +0 -1
- package/dist/package-BsZ_vsP1.cjs.map +0 -1
- package/dist/package-iZbDdtad.js +0 -6
- package/dist/package-iZbDdtad.js.map +0 -1
- package/dist/shell-7HPrTCJ5.cjs.map +0 -1
- package/dist/shell-DqqWsHCD.js.map +0 -1
- package/dist/telemetry-Cn9X1I5B.cjs.map +0 -1
- package/dist/telemetry-DxiR7clS.js.map +0 -1
- package/src/utils/getIntro.ts +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import "./chunk--u3MIqq1.js";
|
|
2
|
+
//#region ../../internals/utils/src/errors.ts
|
|
3
|
+
/**
|
|
4
|
+
* Coerces an unknown thrown value to an `Error` instance.
|
|
5
|
+
* Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* try { ... } catch(err) {
|
|
10
|
+
* throw new BuildError('Build failed', { cause: toError(err), errors: [] })
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function toError(value) {
|
|
15
|
+
return value instanceof Error ? value : new Error(String(value));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extracts a human-readable message from any thrown value.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* getErrorMessage(new Error('oops')) // 'oops'
|
|
23
|
+
* getErrorMessage('plain string') // 'plain string'
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
function getErrorMessage(value) {
|
|
27
|
+
return value instanceof Error ? value.message : String(value);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const cause = toCause(buildError) // Error | undefined
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
function toCause(error) {
|
|
38
|
+
return error.cause instanceof Error ? error.cause : void 0;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { toCause as n, toError as r, getErrorMessage as t };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=errors-CjPmyZHy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors-CjPmyZHy.js","names":[],"sources":["../../../internals/utils/src/errors.ts"],"sourcesContent":["/** Thrown when a plugin's configuration or input fails validation.\n *\n * @example\n * ```ts\n * throw new ValidationPluginError('Invalid config: \"output.path\" is required')\n * ```\n */\nexport class ValidationPluginError extends Error {}\n\n/**\n * Thrown when one or more errors occur during a Kubb build.\n * Carries the full list of underlying errors on `errors`.\n *\n * @example\n * ```ts\n * throw new BuildError('Build failed', { errors: [err1, err2] })\n * ```\n */\nexport class BuildError extends Error {\n errors: Array<Error>\n\n constructor(message: string, options: { cause?: Error; errors: Array<Error> }) {\n super(message, { cause: options.cause })\n this.name = 'BuildError'\n this.errors = options.errors\n }\n}\n\n/**\n * Coerces an unknown thrown value to an `Error` instance.\n * Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.\n *\n * @example\n * ```ts\n * try { ... } catch(err) {\n * throw new BuildError('Build failed', { cause: toError(err), errors: [] })\n * }\n * ```\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\n/**\n * Extracts a human-readable message from any thrown value.\n *\n * @example\n * ```ts\n * getErrorMessage(new Error('oops')) // 'oops'\n * getErrorMessage('plain string') // 'plain string'\n * ```\n */\nexport function getErrorMessage(value: unknown): string {\n return value instanceof Error ? value.message : String(value)\n}\n\n/**\n * Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.\n *\n * @example\n * ```ts\n * const cause = toCause(buildError) // Error | undefined\n * ```\n */\nexport function toCause(error: Error): Error | undefined {\n return error.cause instanceof Error ? error.cause : undefined\n}\n"],"mappings":";;;;;;;;;;;;;AAuCA,SAAgB,QAAQ,OAAuB;AAC7C,QAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;;;;;;;;;;;AAYlE,SAAgB,gBAAgB,OAAwB;AACtD,QAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;;;;;;;;;;AAW/D,SAAgB,QAAQ,OAAiC;AACvD,QAAO,MAAM,iBAAiB,QAAQ,MAAM,QAAQ,KAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require("./chunk-ByKO4r7w.cjs");
|
|
2
2
|
//#region src/commands/generate.ts
|
|
3
|
-
const command = require("./define-
|
|
3
|
+
const command = require("./define-Bdn8j5VM.cjs").defineCommand({
|
|
4
4
|
name: "generate",
|
|
5
5
|
description: "[input] Generate files based on a 'kubb.config.ts' file",
|
|
6
6
|
arguments: ["[input]"],
|
|
@@ -50,7 +50,7 @@ const command = require("./define-D6Kfm7-Z.cjs").defineCommand({
|
|
|
50
50
|
},
|
|
51
51
|
async run({ values, positionals }) {
|
|
52
52
|
const logLevel = values.debug ? "debug" : values.verbose ? "verbose" : values.silent ? "silent" : values.logLevel;
|
|
53
|
-
const { runGenerateCommand } = await Promise.resolve().then(() => require("./generate-
|
|
53
|
+
const { runGenerateCommand } = await Promise.resolve().then(() => require("./generate-C-gO_6QU.cjs"));
|
|
54
54
|
await runGenerateCommand({
|
|
55
55
|
input: positionals[0],
|
|
56
56
|
configPath: values.config,
|
|
@@ -62,4 +62,4 @@ const command = require("./define-D6Kfm7-Z.cjs").defineCommand({
|
|
|
62
62
|
//#endregion
|
|
63
63
|
exports.command = command;
|
|
64
64
|
|
|
65
|
-
//# sourceMappingURL=generate-
|
|
65
|
+
//# sourceMappingURL=generate-BMkY2JhZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-
|
|
1
|
+
{"version":3,"file":"generate-BMkY2JhZ.cjs","names":["defineCommand"],"sources":["../src/commands/generate.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\n\nexport const command = defineCommand({\n name: 'generate',\n description: \"[input] Generate files based on a 'kubb.config.ts' file\",\n arguments: ['[input]'],\n options: {\n config: { type: 'string', description: 'Path to the Kubb config', short: 'c' },\n logLevel: {\n type: 'string',\n description: 'Info, silent, verbose or debug',\n short: 'l',\n default: 'info',\n hint: 'silent|info|verbose|debug',\n enum: ['silent', 'info', 'verbose', 'debug'],\n },\n watch: { type: 'boolean', description: 'Watch mode based on the input file', short: 'w', default: false },\n debug: { type: 'boolean', description: 'Override logLevel to debug', short: 'd', default: false },\n verbose: { type: 'boolean', description: 'Override logLevel to verbose', short: 'v', default: false },\n silent: { type: 'boolean', description: 'Override logLevel to silent', short: 's', default: false },\n },\n async run({ values, positionals }) {\n const logLevel = values.debug ? 'debug' : values.verbose ? 'verbose' : values.silent ? 'silent' : values.logLevel\n const { runGenerateCommand } = await import('../runners/generate.ts')\n\n await runGenerateCommand({ input: positionals[0], configPath: values.config, logLevel, watch: values.watch })\n },\n})\n"],"mappings":";;AAEA,MAAa,2CAAUA,cAAc;CACnC,MAAM;CACN,aAAa;CACb,WAAW,CAAC,UAAU;CACtB,SAAS;EACP,QAAQ;GAAE,MAAM;GAAU,aAAa;GAA2B,OAAO;GAAK;EAC9E,UAAU;GACR,MAAM;GACN,aAAa;GACb,OAAO;GACP,SAAS;GACT,MAAM;GACN,MAAM;IAAC;IAAU;IAAQ;IAAW;IAAQ;GAC7C;EACD,OAAO;GAAE,MAAM;GAAW,aAAa;GAAsC,OAAO;GAAK,SAAS;GAAO;EACzG,OAAO;GAAE,MAAM;GAAW,aAAa;GAA8B,OAAO;GAAK,SAAS;GAAO;EACjG,SAAS;GAAE,MAAM;GAAW,aAAa;GAAgC,OAAO;GAAK,SAAS;GAAO;EACrG,QAAQ;GAAE,MAAM;GAAW,aAAa;GAA+B,OAAO;GAAK,SAAS;GAAO;EACpG;CACD,MAAM,IAAI,EAAE,QAAQ,eAAe;EACjC,MAAM,WAAW,OAAO,QAAQ,UAAU,OAAO,UAAU,YAAY,OAAO,SAAS,WAAW,OAAO;EACzG,MAAM,EAAE,uBAAuB,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,0BAAA,CAAA;AAErC,QAAM,mBAAmB;GAAE,OAAO,YAAY;GAAI,YAAY,OAAO;GAAQ;GAAU,OAAO,OAAO;GAAO,CAAC;;CAEhH,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-ByKO4r7w.cjs");
|
|
2
|
-
const require_errors = require("./errors-
|
|
3
|
-
const require_telemetry = require("./telemetry-
|
|
4
|
-
const require_shell = require("./shell-
|
|
5
|
-
const require_package = require("./package-
|
|
6
|
-
const require_constants = require("./constants-
|
|
2
|
+
const require_errors = require("./errors-CLCjoSg0.cjs");
|
|
3
|
+
const require_telemetry = require("./telemetry-YO-uwAbf.cjs");
|
|
4
|
+
const require_shell = require("./shell-475fQKaX.cjs");
|
|
5
|
+
const require_package = require("./package-DApgJdUF.cjs");
|
|
6
|
+
const require_constants = require("./constants-D0XHAHeZ.cjs");
|
|
7
7
|
let node_util = require("node:util");
|
|
8
8
|
let node_events = require("node:events");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -22,12 +22,19 @@ let cosmiconfig = require("cosmiconfig");
|
|
|
22
22
|
let jiti = require("jiti");
|
|
23
23
|
//#region ../../internals/utils/src/asyncEventEmitter.ts
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Typed `EventEmitter` that awaits all async listeners before resolving.
|
|
26
26
|
* Wraps Node's `EventEmitter` with full TypeScript event-map inference.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const emitter = new AsyncEventEmitter<{ build: [name: string] }>()
|
|
31
|
+
* emitter.on('build', async (name) => { console.log(name) })
|
|
32
|
+
* await emitter.emit('build', 'petstore') // all listeners awaited
|
|
33
|
+
* ```
|
|
27
34
|
*/
|
|
28
35
|
var AsyncEventEmitter = class {
|
|
29
36
|
/**
|
|
30
|
-
*
|
|
37
|
+
* Maximum number of listeners per event before Node emits a memory-leak warning.
|
|
31
38
|
* @default 10
|
|
32
39
|
*/
|
|
33
40
|
constructor(maxListener = 10) {
|
|
@@ -35,31 +42,48 @@ var AsyncEventEmitter = class {
|
|
|
35
42
|
}
|
|
36
43
|
#emitter = new node_events.EventEmitter();
|
|
37
44
|
/**
|
|
38
|
-
* Emits
|
|
45
|
+
* Emits `eventName` and awaits all registered listeners sequentially.
|
|
39
46
|
* Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* await emitter.emit('build', 'petstore')
|
|
51
|
+
* ```
|
|
40
52
|
*/
|
|
41
53
|
async emit(eventName, ...eventArgs) {
|
|
42
54
|
const listeners = this.#emitter.listeners(eventName);
|
|
43
55
|
if (listeners.length === 0) return;
|
|
44
|
-
|
|
56
|
+
for (const listener of listeners) try {
|
|
57
|
+
await listener(...eventArgs);
|
|
58
|
+
} catch (err) {
|
|
59
|
+
let serializedArgs;
|
|
45
60
|
try {
|
|
46
|
-
|
|
47
|
-
} catch
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
serializedArgs = JSON.stringify(eventArgs);
|
|
51
|
-
} catch {
|
|
52
|
-
serializedArgs = String(eventArgs);
|
|
53
|
-
}
|
|
54
|
-
throw new Error(`Error in async listener for "${eventName}" with eventArgs ${serializedArgs}`, { cause: require_errors.toError(err) });
|
|
61
|
+
serializedArgs = JSON.stringify(eventArgs);
|
|
62
|
+
} catch {
|
|
63
|
+
serializedArgs = String(eventArgs);
|
|
55
64
|
}
|
|
56
|
-
|
|
65
|
+
throw new Error(`Error in async listener for "${eventName}" with eventArgs ${serializedArgs}`, { cause: require_errors.toError(err) });
|
|
66
|
+
}
|
|
57
67
|
}
|
|
58
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Registers a persistent listener for `eventName`.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* emitter.on('build', async (name) => { console.log(name) })
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
59
76
|
on(eventName, handler) {
|
|
60
77
|
this.#emitter.on(eventName, handler);
|
|
61
78
|
}
|
|
62
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Registers a one-shot listener that removes itself after the first invocation.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* emitter.onOnce('build', async (name) => { console.log(name) })
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
63
87
|
onOnce(eventName, handler) {
|
|
64
88
|
const wrapper = (...args) => {
|
|
65
89
|
this.off(eventName, wrapper);
|
|
@@ -67,11 +91,25 @@ var AsyncEventEmitter = class {
|
|
|
67
91
|
};
|
|
68
92
|
this.on(eventName, wrapper);
|
|
69
93
|
}
|
|
70
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Removes a previously registered listener.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* emitter.off('build', handler)
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
71
102
|
off(eventName, handler) {
|
|
72
103
|
this.#emitter.off(eventName, handler);
|
|
73
104
|
}
|
|
74
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Removes all listeners from every event channel.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* emitter.removeAll()
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
75
113
|
removeAll() {
|
|
76
114
|
this.#emitter.removeAllListeners();
|
|
77
115
|
}
|
|
@@ -79,8 +117,15 @@ var AsyncEventEmitter = class {
|
|
|
79
117
|
//#endregion
|
|
80
118
|
//#region ../../internals/utils/src/time.ts
|
|
81
119
|
/**
|
|
82
|
-
* Calculates elapsed time in milliseconds from a high-resolution start time.
|
|
83
|
-
* Rounds to 2 decimal places
|
|
120
|
+
* Calculates elapsed time in milliseconds from a high-resolution `process.hrtime` start time.
|
|
121
|
+
* Rounds to 2 decimal places for sub-millisecond precision without noise.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```ts
|
|
125
|
+
* const start = process.hrtime()
|
|
126
|
+
* doWork()
|
|
127
|
+
* getElapsedMs(start) // 42.35
|
|
128
|
+
* ```
|
|
84
129
|
*/
|
|
85
130
|
function getElapsedMs(hrStart) {
|
|
86
131
|
const [seconds, nanoseconds] = process.hrtime(hrStart);
|
|
@@ -88,8 +133,14 @@ function getElapsedMs(hrStart) {
|
|
|
88
133
|
return Math.round(ms * 100) / 100;
|
|
89
134
|
}
|
|
90
135
|
/**
|
|
91
|
-
* Converts a millisecond duration into a human-readable string.
|
|
92
|
-
*
|
|
136
|
+
* Converts a millisecond duration into a human-readable string (`ms`, `s`, or `m s`).
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* formatMs(250) // '250ms'
|
|
141
|
+
* formatMs(1500) // '1.50s'
|
|
142
|
+
* formatMs(90000) // '1m 30.0s'
|
|
143
|
+
* ```
|
|
93
144
|
*/
|
|
94
145
|
function formatMs(ms) {
|
|
95
146
|
if (ms >= 6e4) return `${Math.floor(ms / 6e4)}m ${(ms % 6e4 / 1e3).toFixed(1)}s`;
|
|
@@ -97,7 +148,14 @@ function formatMs(ms) {
|
|
|
97
148
|
return `${Math.round(ms)}ms`;
|
|
98
149
|
}
|
|
99
150
|
/**
|
|
100
|
-
*
|
|
151
|
+
* Formats the elapsed time since `hrStart` as a human-readable string.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* const start = process.hrtime()
|
|
156
|
+
* doWork()
|
|
157
|
+
* formatHrtime(start) // '1.50s'
|
|
158
|
+
* ```
|
|
101
159
|
*/
|
|
102
160
|
function formatHrtime(hrStart) {
|
|
103
161
|
return formatMs(getElapsedMs(hrStart));
|
|
@@ -139,7 +197,9 @@ function gradient(colorStops, text) {
|
|
|
139
197
|
return `\x1b[38;2;${Math.round(from.r + (to.r - from.r) * lt)};${Math.round(from.g + (to.g - from.g) * lt)};${Math.round(from.b + (to.b - from.b) * lt)}m${char}\x1b[0m`;
|
|
140
198
|
}).join("");
|
|
141
199
|
}
|
|
142
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* ANSI color functions for each part of the Kubb mascot illustration.
|
|
202
|
+
*/
|
|
143
203
|
const palette = {
|
|
144
204
|
lid: hex("#F55A17"),
|
|
145
205
|
woodTop: hex("#F5A217"),
|
|
@@ -150,7 +210,12 @@ const palette = {
|
|
|
150
210
|
blush: hex("#FDA4AF")
|
|
151
211
|
};
|
|
152
212
|
/**
|
|
153
|
-
* Generates the Kubb mascot welcome banner.
|
|
213
|
+
* Generates the Kubb mascot welcome banner as an ANSI-colored string.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```ts
|
|
217
|
+
* console.log(getIntro({ title: 'kubb.config.ts', description: 'generating…', version: '5.0.0', areEyesOpen: true }))
|
|
218
|
+
* ```
|
|
154
219
|
*/
|
|
155
220
|
function getIntro({ title, description, version, areEyesOpen }) {
|
|
156
221
|
const kubbVersion = gradient([
|
|
@@ -168,7 +233,13 @@ function getIntro({ title, description, version, areEyesOpen }) {
|
|
|
168
233
|
${palette.woodBase("▀▀▀▀▀▀▀▀▀▀▀▀▀")}
|
|
169
234
|
`;
|
|
170
235
|
}
|
|
171
|
-
/** ANSI color names available for terminal
|
|
236
|
+
/** ANSI color names available for deterministic terminal coloring.
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```ts
|
|
240
|
+
* const color = randomColors[2] // 'green'
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
172
243
|
const randomColors = [
|
|
173
244
|
"black",
|
|
174
245
|
"red",
|
|
@@ -181,15 +252,27 @@ const randomColors = [
|
|
|
181
252
|
"gray"
|
|
182
253
|
];
|
|
183
254
|
/**
|
|
184
|
-
*
|
|
255
|
+
* Wraps `text` in a deterministic ANSI color derived from the text's SHA-256 hash.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```ts
|
|
259
|
+
* randomCliColor('petstore') // '\x1b[33mpetstore\x1b[39m' (always the same color for 'petstore')
|
|
260
|
+
* ```
|
|
185
261
|
*/
|
|
186
262
|
function randomCliColor(text) {
|
|
187
263
|
if (!text) return "";
|
|
188
264
|
return (0, node_util.styleText)(randomColors[(0, node_crypto.createHash)("sha256").update(text).digest().readUInt32BE(0) % randomColors.length] ?? "white", text);
|
|
189
265
|
}
|
|
190
266
|
/**
|
|
191
|
-
* Formats a millisecond duration with
|
|
192
|
-
*
|
|
267
|
+
* Formats a millisecond duration with a threshold-based ANSI color.
|
|
268
|
+
* `≤ 500 ms` → green · `≤ 1 000 ms` → yellow · `> 1 000 ms` → red.
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* ```ts
|
|
272
|
+
* formatMsWithColor(200) // '\x1b[32m200ms\x1b[39m'
|
|
273
|
+
* formatMsWithColor(800) // '\x1b[33m800ms\x1b[39m'
|
|
274
|
+
* formatMsWithColor(1500) // '\x1b[31m1.50s\x1b[39m'
|
|
275
|
+
* ```
|
|
193
276
|
*/
|
|
194
277
|
function formatMsWithColor(ms) {
|
|
195
278
|
const formatted = formatMs(ms);
|
|
@@ -201,24 +284,29 @@ function formatMsWithColor(ms) {
|
|
|
201
284
|
//#region ../../internals/utils/src/fs.ts
|
|
202
285
|
/**
|
|
203
286
|
* Writes `data` to `path`, trimming leading/trailing whitespace before saving.
|
|
204
|
-
* Skips the write
|
|
205
|
-
* identical to what is already on disk.
|
|
287
|
+
* Skips the write when the trimmed content is empty or identical to what is already on disk.
|
|
206
288
|
* Creates any missing parent directories automatically.
|
|
207
|
-
* When `sanity` is `true`, re-reads the file after writing and throws if the
|
|
208
|
-
*
|
|
289
|
+
* When `sanity` is `true`, re-reads the file after writing and throws if the content does not match.
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* ```ts
|
|
293
|
+
* await write('./src/Pet.ts', source) // writes and returns trimmed content
|
|
294
|
+
* await write('./src/Pet.ts', source) // null — file unchanged
|
|
295
|
+
* await write('./src/Pet.ts', ' ') // null — empty content skipped
|
|
296
|
+
* ```
|
|
209
297
|
*/
|
|
210
298
|
async function write(path, data, options = {}) {
|
|
211
299
|
const trimmed = data.trim();
|
|
212
|
-
if (trimmed === "") return
|
|
300
|
+
if (trimmed === "") return null;
|
|
213
301
|
const resolved = (0, node_path.resolve)(path);
|
|
214
302
|
if (typeof Bun !== "undefined") {
|
|
215
303
|
const file = Bun.file(resolved);
|
|
216
|
-
if ((await file.exists() ? await file.text() : null) === trimmed) return
|
|
304
|
+
if ((await file.exists() ? await file.text() : null) === trimmed) return null;
|
|
217
305
|
await Bun.write(resolved, trimmed);
|
|
218
306
|
return trimmed;
|
|
219
307
|
}
|
|
220
308
|
try {
|
|
221
|
-
if (await (0, node_fs_promises.readFile)(resolved, { encoding: "utf-8" }) === trimmed) return
|
|
309
|
+
if (await (0, node_fs_promises.readFile)(resolved, { encoding: "utf-8" }) === trimmed) return null;
|
|
222
310
|
} catch {}
|
|
223
311
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(resolved), { recursive: true });
|
|
224
312
|
await (0, node_fs_promises.writeFile)(resolved, trimmed, { encoding: "utf-8" });
|
|
@@ -435,15 +523,20 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
435
523
|
});
|
|
436
524
|
context.on("version:new", (version, latestVersion) => {
|
|
437
525
|
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
438
|
-
|
|
526
|
+
try {
|
|
527
|
+
_clack_prompts.box(`\`v${version}\` → \`v${latestVersion}\`
|
|
439
528
|
Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
529
|
+
width: "auto",
|
|
530
|
+
formatBorder: (s) => (0, node_util.styleText)("yellow", s),
|
|
531
|
+
rounded: true,
|
|
532
|
+
withGuide: false,
|
|
533
|
+
contentAlign: "center",
|
|
534
|
+
titleAlign: "center"
|
|
535
|
+
});
|
|
536
|
+
} catch {
|
|
537
|
+
console.log(`Update available for Kubb: v${version} → v${latestVersion}`);
|
|
538
|
+
console.log("Run `npm install -g @kubb/cli` to update");
|
|
539
|
+
}
|
|
447
540
|
});
|
|
448
541
|
context.on("lifecycle:start", async (version) => {
|
|
449
542
|
console.log(`\n${getIntro({
|
|
@@ -613,14 +706,18 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
613
706
|
summary.unshift("\n");
|
|
614
707
|
summary.push("\n");
|
|
615
708
|
const borderColor = status === "success" ? "green" : "red";
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
709
|
+
try {
|
|
710
|
+
_clack_prompts.box(summary.join("\n"), getMessage(title), {
|
|
711
|
+
width: "auto",
|
|
712
|
+
formatBorder: (s) => (0, node_util.styleText)(borderColor, s),
|
|
713
|
+
rounded: true,
|
|
714
|
+
withGuide: false,
|
|
715
|
+
contentAlign: "left",
|
|
716
|
+
titleAlign: "center"
|
|
717
|
+
});
|
|
718
|
+
} catch {
|
|
719
|
+
console.log(summary.join("\n"));
|
|
720
|
+
}
|
|
624
721
|
});
|
|
625
722
|
context.on("lifecycle:end", () => {
|
|
626
723
|
reset();
|
|
@@ -663,7 +760,7 @@ const fileSystemLogger = (0, _kubb_core.defineLogger)({
|
|
|
663
760
|
files[pathName].push(`[${timestamp}]\n${log.logs.join("\n")}`);
|
|
664
761
|
}
|
|
665
762
|
}
|
|
666
|
-
|
|
763
|
+
for (const [fileName, logs] of Object.entries(files)) await write(fileName, logs.join("\n\n"));
|
|
667
764
|
return Object.keys(files);
|
|
668
765
|
}
|
|
669
766
|
context.on("info", (message, info) => {
|
|
@@ -1207,10 +1304,14 @@ async function getCosmiConfig(moduleName, config) {
|
|
|
1207
1304
|
`.${moduleName}rc.yaml`,
|
|
1208
1305
|
`.${moduleName}rc.yml`,
|
|
1209
1306
|
`.${moduleName}rc.ts`,
|
|
1307
|
+
`.${moduleName}rc.mts`,
|
|
1308
|
+
`.${moduleName}rc.cts`,
|
|
1210
1309
|
`.${moduleName}rc.js`,
|
|
1211
1310
|
`.${moduleName}rc.mjs`,
|
|
1212
1311
|
`.${moduleName}rc.cjs`,
|
|
1213
1312
|
`${moduleName}.config.ts`,
|
|
1313
|
+
`${moduleName}.config.mts`,
|
|
1314
|
+
`${moduleName}.config.cts`,
|
|
1214
1315
|
`${moduleName}.config.js`,
|
|
1215
1316
|
`${moduleName}.config.mjs`,
|
|
1216
1317
|
`${moduleName}.config.cjs`
|
|
@@ -1226,7 +1327,11 @@ async function getCosmiConfig(moduleName, config) {
|
|
|
1226
1327
|
}),
|
|
1227
1328
|
...searchPlaces
|
|
1228
1329
|
],
|
|
1229
|
-
loaders: {
|
|
1330
|
+
loaders: {
|
|
1331
|
+
".ts": tsLoader,
|
|
1332
|
+
".mts": tsLoader,
|
|
1333
|
+
".cts": tsLoader
|
|
1334
|
+
}
|
|
1230
1335
|
});
|
|
1231
1336
|
try {
|
|
1232
1337
|
result = config ? await explorer.load(config) : await explorer.search();
|
|
@@ -1265,6 +1370,7 @@ async function runToolPass({ toolValue, detect, toolMap, toolLabel, successPrefi
|
|
|
1265
1370
|
await events.emit("info", `Auto-detected ${toolLabel}: ${(0, node_util.styleText)("dim", resolvedTool)}`);
|
|
1266
1371
|
}
|
|
1267
1372
|
}
|
|
1373
|
+
let toolError;
|
|
1268
1374
|
if (resolvedTool && resolvedTool !== "auto" && resolvedTool in toolMap) {
|
|
1269
1375
|
const toolConfig = toolMap[resolvedTool];
|
|
1270
1376
|
try {
|
|
@@ -1295,9 +1401,11 @@ async function runToolPass({ toolValue, detect, toolMap, toolLabel, successPrefi
|
|
|
1295
1401
|
const err = new Error(toolConfig.errorMessage);
|
|
1296
1402
|
err.cause = caughtError;
|
|
1297
1403
|
await events.emit("error", err);
|
|
1404
|
+
toolError = err;
|
|
1298
1405
|
}
|
|
1299
1406
|
}
|
|
1300
1407
|
await onEnd();
|
|
1408
|
+
if (toolError) throw toolError;
|
|
1301
1409
|
}
|
|
1302
1410
|
async function generate({ input, config: userConfig, events, logLevel }) {
|
|
1303
1411
|
const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
|
|
@@ -1319,7 +1427,7 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1319
1427
|
};
|
|
1320
1428
|
await events.emit("generation:start", config);
|
|
1321
1429
|
await events.emit("info", config.name ? `Setup generation ${(0, node_util.styleText)("bold", config.name)}` : "Setup generation", inputPath);
|
|
1322
|
-
const { sources, fabric,
|
|
1430
|
+
const { sources, fabric, driver } = await (0, _kubb_core.setup)({
|
|
1323
1431
|
config,
|
|
1324
1432
|
events
|
|
1325
1433
|
});
|
|
@@ -1328,7 +1436,7 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1328
1436
|
config,
|
|
1329
1437
|
events
|
|
1330
1438
|
}, {
|
|
1331
|
-
|
|
1439
|
+
driver,
|
|
1332
1440
|
fabric,
|
|
1333
1441
|
events,
|
|
1334
1442
|
sources
|
|
@@ -1348,7 +1456,7 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1348
1456
|
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
1349
1457
|
command: "generate",
|
|
1350
1458
|
kubbVersion: require_package.version,
|
|
1351
|
-
plugins:
|
|
1459
|
+
plugins: Array.from(driver.plugins.values(), (p) => ({
|
|
1352
1460
|
name: p.name,
|
|
1353
1461
|
options: p.options
|
|
1354
1462
|
})),
|
|
@@ -1407,7 +1515,7 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1407
1515
|
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
1408
1516
|
command: "generate",
|
|
1409
1517
|
kubbVersion: require_package.version,
|
|
1410
|
-
plugins:
|
|
1518
|
+
plugins: Array.from(driver.plugins.values(), (p) => ({
|
|
1411
1519
|
name: p.name,
|
|
1412
1520
|
options: p.options
|
|
1413
1521
|
})),
|
|
@@ -1419,7 +1527,6 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1419
1527
|
async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, watch }) {
|
|
1420
1528
|
const logLevel = _kubb_core.logLevel[logLevelKey] ?? _kubb_core.logLevel.info;
|
|
1421
1529
|
const events = new AsyncEventEmitter();
|
|
1422
|
-
const promiseManager = new _kubb_core.PromiseManager();
|
|
1423
1530
|
await setupLogger(events, { logLevel });
|
|
1424
1531
|
await require_telemetry.executeIfOnline(async () => {
|
|
1425
1532
|
try {
|
|
@@ -1435,30 +1542,22 @@ async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, wa
|
|
|
1435
1542
|
await events.emit("success", "Config loaded successfully", node_path.default.relative(node_process.default.cwd(), result.filepath));
|
|
1436
1543
|
await events.emit("config:end", configs);
|
|
1437
1544
|
await events.emit("lifecycle:start", require_package.version);
|
|
1438
|
-
const
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
await generate({
|
|
1454
|
-
input,
|
|
1455
|
-
config,
|
|
1456
|
-
logLevel,
|
|
1457
|
-
events
|
|
1458
|
-
});
|
|
1459
|
-
};
|
|
1545
|
+
for (const config of configs) if ((0, _kubb_core.isInputPath)(config) && watch) await startWatcher([input || config.input.path], async (paths) => {
|
|
1546
|
+
events.removeAll();
|
|
1547
|
+
await generate({
|
|
1548
|
+
input,
|
|
1549
|
+
config,
|
|
1550
|
+
logLevel,
|
|
1551
|
+
events
|
|
1552
|
+
});
|
|
1553
|
+
_clack_prompts.log.step((0, node_util.styleText)("yellow", `Watching for changes in ${paths.join(" and ")}`));
|
|
1554
|
+
});
|
|
1555
|
+
else await generate({
|
|
1556
|
+
input,
|
|
1557
|
+
config,
|
|
1558
|
+
logLevel,
|
|
1559
|
+
events
|
|
1460
1560
|
});
|
|
1461
|
-
await promiseManager.run("seq", promises);
|
|
1462
1561
|
await events.emit("lifecycle:end");
|
|
1463
1562
|
} catch (error) {
|
|
1464
1563
|
await events.emit("error", require_errors.toError(error));
|
|
@@ -1468,4 +1567,4 @@ async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, wa
|
|
|
1468
1567
|
//#endregion
|
|
1469
1568
|
exports.runGenerateCommand = runGenerateCommand;
|
|
1470
1569
|
|
|
1471
|
-
//# sourceMappingURL=generate-
|
|
1570
|
+
//# sourceMappingURL=generate-C-gO_6QU.cjs.map
|