@kubb/cli 4.33.0 → 4.33.2
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-D0A3RQho.js → agent-BGWY8Iow.js} +5 -5
- package/dist/agent-BGWY8Iow.js.map +1 -0
- package/dist/{agent-CduUX7Ye.cjs → agent-Bd1QdPVV.cjs} +7 -7
- package/dist/agent-Bd1QdPVV.cjs.map +1 -0
- package/dist/{agent-DrnwQBZf.cjs → agent-CmQJU9h7.cjs} +7 -7
- package/dist/agent-CmQJU9h7.cjs.map +1 -0
- package/dist/{agent-CJ69TqoO.js → agent-u_Ehwz6r.js} +5 -5
- package/dist/agent-u_Ehwz6r.js.map +1 -0
- package/dist/{constants-CnPOlsJq.cjs → constants-BTUap0zs.cjs} +1 -19
- package/dist/{constants-CnPOlsJq.cjs.map → constants-BTUap0zs.cjs.map} +1 -1
- package/dist/{constants-CEKRremI.js → constants-CM3dJzjK.js} +2 -14
- package/dist/{constants-CEKRremI.js.map → constants-CM3dJzjK.js.map} +1 -1
- package/dist/{types-CLtz0jem.js → define--M_JMcDC.js} +6 -6
- package/dist/define--M_JMcDC.js.map +1 -0
- package/dist/{types-Ck2lzFON.cjs → define-D6Kfm7-Z.cjs} +6 -6
- package/dist/define-D6Kfm7-Z.cjs.map +1 -0
- package/dist/{errors-bSLTEh4e.js → errors-6mF_WKxg.js} +5 -5
- package/dist/errors-6mF_WKxg.js.map +1 -0
- package/dist/{errors-BUjJsNoe.cjs → errors-DBW0N9w4.cjs} +5 -5
- package/dist/errors-DBW0N9w4.cjs.map +1 -0
- package/dist/{generate-ByMgAV76.cjs → generate-6Cm1AK2n.cjs} +275 -153
- package/dist/generate-6Cm1AK2n.cjs.map +1 -0
- package/dist/{generate-HP5ySfjV.js → generate-DcNp9Owd.js} +271 -149
- package/dist/generate-DcNp9Owd.js.map +1 -0
- package/dist/{generate-CiUPO5ds.cjs → generate-DqmjK5Lc.cjs} +3 -3
- package/dist/generate-DqmjK5Lc.cjs.map +1 -0
- package/dist/{generate-DIIxtkWT.js → generate-rtsmgWhO.js} +3 -3
- package/dist/generate-rtsmgWhO.js.map +1 -0
- package/dist/index.cjs +13 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/{init-DLNrkDF4.js → init--9nMhvx6.js} +4 -4
- package/dist/init--9nMhvx6.js.map +1 -0
- package/dist/{init-Df_aXezV.cjs → init-BvjtU-sC.cjs} +5 -4
- package/dist/init-BvjtU-sC.cjs.map +1 -0
- package/dist/{init-DyKK2fTp.js → init-C-InrmSY.js} +42 -31
- package/dist/init-C-InrmSY.js.map +1 -0
- package/dist/{init-Cd1hCb7q.cjs → init-hmolV6B4.cjs} +47 -37
- package/dist/init-hmolV6B4.cjs.map +1 -0
- package/dist/{jiti-BdskUHhD.cjs → jiti-Cd3S0xwr.cjs} +1 -1
- package/dist/{jiti-BdskUHhD.cjs.map → jiti-Cd3S0xwr.cjs.map} +1 -1
- package/dist/{jiti-Cl7t20dO.js → jiti-e08mD2Ph.js} +1 -1
- package/dist/{jiti-Cl7t20dO.js.map → jiti-e08mD2Ph.js.map} +1 -1
- package/dist/{mcp-Clg-Qnkr.cjs → mcp-Bd-DXHWV.cjs} +5 -4
- package/dist/mcp-Bd-DXHWV.cjs.map +1 -0
- package/dist/{mcp-Bd9LITaI.js → mcp-CZzxfbHW.js} +4 -4
- package/dist/mcp-CZzxfbHW.js.map +1 -0
- package/dist/{mcp-B73FC8dF.cjs → mcp-ChHFPRzD.cjs} +4 -4
- package/dist/mcp-ChHFPRzD.cjs.map +1 -0
- package/dist/{mcp-Cf-1dsB-.js → mcp-D2SHEg_d.js} +4 -4
- package/dist/mcp-D2SHEg_d.js.map +1 -0
- package/dist/{package-aKgzEJtp.cjs → package-BXijqaX5.cjs} +2 -2
- package/dist/package-BXijqaX5.cjs.map +1 -0
- package/dist/package-DeOlqJ31.js +6 -0
- package/dist/package-DeOlqJ31.js.map +1 -0
- package/dist/shell-7HPrTCJ5.cjs +57 -0
- package/dist/shell-7HPrTCJ5.cjs.map +1 -0
- package/dist/shell-DqqWsHCD.js +46 -0
- package/dist/shell-DqqWsHCD.js.map +1 -0
- package/dist/{telemetry-T5IA2dWA.cjs → telemetry-Cn9X1I5B.cjs} +46 -9
- package/dist/telemetry-Cn9X1I5B.cjs.map +1 -0
- package/dist/{telemetry-C4gOKX2x.js → telemetry-DxiR7clS.js} +40 -9
- package/dist/telemetry-DxiR7clS.js.map +1 -0
- package/dist/{validate-Cr26q5xX.js → validate-BH2Ysgxr.js} +4 -4
- package/dist/validate-BH2Ysgxr.js.map +1 -0
- package/dist/{validate-DURmg-2Q.cjs → validate-BQvsoQz-.cjs} +5 -4
- package/dist/validate-BQvsoQz-.cjs.map +1 -0
- package/dist/{validate-Dqi9T_c4.cjs → validate-Bbrn3Q-A.cjs} +4 -4
- package/dist/validate-Bbrn3Q-A.cjs.map +1 -0
- package/dist/{validate-Chjg23AE.js → validate-l8vLmwKA.js} +4 -4
- package/dist/validate-l8vLmwKA.js.map +1 -0
- package/package.json +6 -5
- package/src/commands/agent/start.ts +1 -1
- package/src/commands/agent.ts +1 -1
- package/src/commands/generate.ts +1 -1
- package/src/commands/init.ts +1 -1
- package/src/commands/mcp.ts +1 -1
- package/src/commands/validate.ts +1 -1
- package/src/constants.ts +0 -1
- package/src/index.ts +1 -1
- package/src/loggers/clackLogger.ts +26 -28
- package/src/loggers/fileSystemLogger.ts +1 -2
- package/src/loggers/githubActionsLogger.ts +26 -28
- package/src/loggers/plainLogger.ts +25 -26
- package/src/loggers/utils.ts +4 -5
- package/src/runners/agent.ts +1 -1
- package/src/runners/generate.ts +20 -7
- package/src/runners/init.ts +2 -1
- package/src/runners/mcp.ts +1 -1
- package/src/runners/validate.ts +1 -1
- package/src/utils/executeHooks.ts +2 -2
- package/src/utils/getIntro.ts +1 -80
- package/src/utils/getSummary.ts +1 -2
- package/src/utils/packageManager.ts +2 -2
- package/src/utils/runHook.ts +2 -2
- package/src/utils/telemetry.ts +1 -2
- package/dist/agent-CJ69TqoO.js.map +0 -1
- package/dist/agent-CduUX7Ye.cjs.map +0 -1
- package/dist/agent-D0A3RQho.js.map +0 -1
- package/dist/agent-DrnwQBZf.cjs.map +0 -1
- package/dist/errors-BUjJsNoe.cjs.map +0 -1
- package/dist/errors-bSLTEh4e.js.map +0 -1
- package/dist/generate-ByMgAV76.cjs.map +0 -1
- package/dist/generate-CiUPO5ds.cjs.map +0 -1
- package/dist/generate-DIIxtkWT.js.map +0 -1
- package/dist/generate-HP5ySfjV.js.map +0 -1
- package/dist/init-Cd1hCb7q.cjs.map +0 -1
- package/dist/init-DLNrkDF4.js.map +0 -1
- package/dist/init-Df_aXezV.cjs.map +0 -1
- package/dist/init-DyKK2fTp.js.map +0 -1
- package/dist/mcp-B73FC8dF.cjs.map +0 -1
- package/dist/mcp-Bd9LITaI.js.map +0 -1
- package/dist/mcp-Cf-1dsB-.js.map +0 -1
- package/dist/mcp-Clg-Qnkr.cjs.map +0 -1
- package/dist/package-681jTtCk.js +0 -6
- package/dist/package-681jTtCk.js.map +0 -1
- package/dist/package-aKgzEJtp.cjs.map +0 -1
- package/dist/telemetry-C4gOKX2x.js.map +0 -1
- package/dist/telemetry-T5IA2dWA.cjs.map +0 -1
- package/dist/types-CLtz0jem.js.map +0 -1
- package/dist/types-Ck2lzFON.cjs.map +0 -1
- package/dist/validate-Chjg23AE.js.map +0 -1
- package/dist/validate-Cr26q5xX.js.map +0 -1
- package/dist/validate-DURmg-2Q.cjs.map +0 -1
- package/dist/validate-Dqi9T_c4.cjs.map +0 -1
- package/src/cli/adapters/nodeAdapter.ts +0 -159
- package/src/cli/help.ts +0 -36
- package/src/cli/index.ts +0 -16
- package/src/cli/parse.ts +0 -18
- package/src/cli/schema.ts +0 -38
- package/src/cli/types.ts +0 -95
- package/src/utils/envDetection.ts +0 -34
- package/src/utils/errors.ts +0 -23
- package/src/utils/formatMsWithColor.ts +0 -22
- package/src/utils/randomColor.ts +0 -14
- package/src/utils/spawnAsync.ts +0 -47
|
@@ -1,77 +1,146 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-ByKO4r7w.cjs");
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
2
|
+
const require_errors = require("./errors-DBW0N9w4.cjs");
|
|
3
|
+
const require_telemetry = require("./telemetry-Cn9X1I5B.cjs");
|
|
4
|
+
const require_shell = require("./shell-7HPrTCJ5.cjs");
|
|
5
|
+
const require_package = require("./package-BXijqaX5.cjs");
|
|
6
|
+
const require_constants = require("./constants-BTUap0zs.cjs");
|
|
6
7
|
let node_util = require("node:util");
|
|
8
|
+
let node_events = require("node:events");
|
|
7
9
|
let node_crypto = require("node:crypto");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
let _kubb_core_utils = require("@kubb/core/utils");
|
|
10
|
+
require("node:fs");
|
|
11
|
+
let node_fs_promises = require("node:fs/promises");
|
|
11
12
|
let node_path = require("node:path");
|
|
12
13
|
node_path = require_chunk.__toESM(node_path);
|
|
14
|
+
let node_process = require("node:process");
|
|
15
|
+
node_process = require_chunk.__toESM(node_process);
|
|
13
16
|
let _clack_prompts = require("@clack/prompts");
|
|
14
17
|
_clack_prompts = require_chunk.__toESM(_clack_prompts);
|
|
15
18
|
let _kubb_core = require("@kubb/core");
|
|
16
19
|
let tinyexec = require("tinyexec");
|
|
17
20
|
let node_stream = require("node:stream");
|
|
18
|
-
let _kubb_core_fs = require("@kubb/core/fs");
|
|
19
21
|
let cosmiconfig = require("cosmiconfig");
|
|
20
22
|
let jiti = require("jiti");
|
|
21
|
-
//#region
|
|
23
|
+
//#region ../../internals/utils/src/asyncEventEmitter.ts
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* - Yellow: > 500ms and <= 1000ms
|
|
26
|
-
* - Red: > 1000ms
|
|
25
|
+
* A typed EventEmitter that awaits all async listeners before resolving.
|
|
26
|
+
* Wraps Node's `EventEmitter` with full TypeScript event-map inference.
|
|
27
27
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
var AsyncEventEmitter = class {
|
|
29
|
+
/**
|
|
30
|
+
* `maxListener` controls the maximum number of listeners per event before Node emits a memory-leak warning.
|
|
31
|
+
* @default 10
|
|
32
|
+
*/
|
|
33
|
+
constructor(maxListener = 10) {
|
|
34
|
+
this.#emitter.setMaxListeners(maxListener);
|
|
35
|
+
}
|
|
36
|
+
#emitter = new node_events.EventEmitter();
|
|
37
|
+
/**
|
|
38
|
+
* Emits an event and awaits all registered listeners in parallel.
|
|
39
|
+
* Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.
|
|
40
|
+
*/
|
|
41
|
+
async emit(eventName, ...eventArgs) {
|
|
42
|
+
const listeners = this.#emitter.listeners(eventName);
|
|
43
|
+
if (listeners.length === 0) return;
|
|
44
|
+
await Promise.all(listeners.map(async (listener) => {
|
|
45
|
+
try {
|
|
46
|
+
return await listener(...eventArgs);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
let serializedArgs;
|
|
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) });
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
/** Registers a persistent listener for the given event. */
|
|
59
|
+
on(eventName, handler) {
|
|
60
|
+
this.#emitter.on(eventName, handler);
|
|
61
|
+
}
|
|
62
|
+
/** Registers a one-shot listener that removes itself after the first invocation. */
|
|
63
|
+
onOnce(eventName, handler) {
|
|
64
|
+
const wrapper = (...args) => {
|
|
65
|
+
this.off(eventName, wrapper);
|
|
66
|
+
return handler(...args);
|
|
67
|
+
};
|
|
68
|
+
this.on(eventName, wrapper);
|
|
69
|
+
}
|
|
70
|
+
/** Removes a previously registered listener. */
|
|
71
|
+
off(eventName, handler) {
|
|
72
|
+
this.#emitter.off(eventName, handler);
|
|
73
|
+
}
|
|
74
|
+
/** Removes all listeners from every event channel. */
|
|
75
|
+
removeAll() {
|
|
76
|
+
this.#emitter.removeAllListeners();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region ../../internals/utils/src/time.ts
|
|
81
|
+
/**
|
|
82
|
+
* Calculates elapsed time in milliseconds from a high-resolution start time.
|
|
83
|
+
* Rounds to 2 decimal places to provide sub-millisecond precision without noise.
|
|
84
|
+
*/
|
|
85
|
+
function getElapsedMs(hrStart) {
|
|
86
|
+
const [seconds, nanoseconds] = process.hrtime(hrStart);
|
|
87
|
+
const ms = seconds * 1e3 + nanoseconds / 1e6;
|
|
88
|
+
return Math.round(ms * 100) / 100;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Converts a millisecond duration into a human-readable string.
|
|
92
|
+
* Adjusts units (ms, s, m s) based on the magnitude of the duration.
|
|
93
|
+
*/
|
|
94
|
+
function formatMs(ms) {
|
|
95
|
+
if (ms >= 6e4) return `${Math.floor(ms / 6e4)}m ${(ms % 6e4 / 1e3).toFixed(1)}s`;
|
|
96
|
+
if (ms >= 1e3) return `${(ms / 1e3).toFixed(2)}s`;
|
|
97
|
+
return `${Math.round(ms)}ms`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Convenience helper: formats the elapsed time since `hrStart` in one step.
|
|
101
|
+
*/
|
|
102
|
+
function formatHrtime(hrStart) {
|
|
103
|
+
return formatMs(getElapsedMs(hrStart));
|
|
33
104
|
}
|
|
34
105
|
//#endregion
|
|
35
|
-
//#region
|
|
106
|
+
//#region ../../internals/utils/src/colors.ts
|
|
36
107
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
108
|
+
* Parses a CSS hex color string (`#RGB`) into its RGB channels.
|
|
109
|
+
* Falls back to `255` for any channel that cannot be parsed.
|
|
39
110
|
*/
|
|
40
|
-
/** Parse a hex color string into RGB components, defaulting to 255 on invalid input. */
|
|
41
111
|
function parseHex(color) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
112
|
+
const int = Number.parseInt(color.replace("#", ""), 16);
|
|
113
|
+
return Number.isNaN(int) ? {
|
|
114
|
+
r: 255,
|
|
115
|
+
g: 255,
|
|
116
|
+
b: 255
|
|
117
|
+
} : {
|
|
118
|
+
r: int >> 16 & 255,
|
|
119
|
+
g: int >> 8 & 255,
|
|
120
|
+
b: int & 255
|
|
50
121
|
};
|
|
51
122
|
}
|
|
52
123
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* @returns Function that wraps text with the color
|
|
124
|
+
* Returns a function that wraps a string in a 24-bit ANSI true-color escape sequence
|
|
125
|
+
* for the given hex color.
|
|
56
126
|
*/
|
|
57
127
|
function hex(color) {
|
|
58
128
|
const { r, g, b } = parseHex(color);
|
|
59
129
|
return (text) => `\x1b[38;2;${r};${g};${b}m${text}\x1b[0m`;
|
|
60
130
|
}
|
|
61
|
-
function gradient(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}).join("");
|
|
72
|
-
};
|
|
131
|
+
function gradient(colorStops, text) {
|
|
132
|
+
const chars = text.split("");
|
|
133
|
+
return chars.map((char, i) => {
|
|
134
|
+
const t = chars.length <= 1 ? 0 : i / (chars.length - 1);
|
|
135
|
+
const seg = Math.min(Math.floor(t * (colorStops.length - 1)), colorStops.length - 2);
|
|
136
|
+
const lt = t * (colorStops.length - 1) - seg;
|
|
137
|
+
const from = parseHex(colorStops[seg]);
|
|
138
|
+
const to = parseHex(colorStops[seg + 1]);
|
|
139
|
+
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
|
+
}).join("");
|
|
73
141
|
}
|
|
74
|
-
|
|
142
|
+
/** ANSI color functions for each part of the Kubb mascot illustration. */
|
|
143
|
+
const palette = {
|
|
75
144
|
lid: hex("#F55A17"),
|
|
76
145
|
woodTop: hex("#F5A217"),
|
|
77
146
|
woodMid: hex("#F58517"),
|
|
@@ -81,36 +150,89 @@ const colors = {
|
|
|
81
150
|
blush: hex("#FDA4AF")
|
|
82
151
|
};
|
|
83
152
|
/**
|
|
84
|
-
* Generates the Kubb mascot
|
|
85
|
-
* @param version - The version string to display
|
|
86
|
-
* @returns Formatted mascot face string
|
|
153
|
+
* Generates the Kubb mascot welcome banner.
|
|
87
154
|
*/
|
|
88
155
|
function getIntro({ title, description, version, areEyesOpen }) {
|
|
89
156
|
const kubbVersion = gradient([
|
|
90
157
|
"#F58517",
|
|
91
158
|
"#F5A217",
|
|
92
159
|
"#F55A17"
|
|
93
|
-
]
|
|
94
|
-
const eyeTop = areEyesOpen ?
|
|
95
|
-
const eyeBottom = areEyesOpen ?
|
|
160
|
+
], `KUBB v${version}`);
|
|
161
|
+
const eyeTop = areEyesOpen ? palette.eye("█▀█") : palette.eye("───");
|
|
162
|
+
const eyeBottom = areEyesOpen ? palette.eye("▀▀▀") : palette.eye("───");
|
|
96
163
|
return `
|
|
97
|
-
${
|
|
98
|
-
${
|
|
99
|
-
${
|
|
100
|
-
${
|
|
101
|
-
${
|
|
164
|
+
${palette.lid("▄▄▄▄▄▄▄▄▄▄▄▄▄")}
|
|
165
|
+
${palette.woodTop("█ ")}${palette.highlight("▄▄")}${palette.woodTop(" ")}${palette.highlight("▄▄")}${palette.woodTop(" █")} ${kubbVersion}
|
|
166
|
+
${palette.woodMid("█ ")}${eyeTop}${palette.woodMid(" ")}${eyeTop}${palette.woodMid(" █")} ${(0, node_util.styleText)("gray", title)}
|
|
167
|
+
${palette.woodMid("█ ")}${eyeBottom}${palette.woodMid(" ")}${palette.blush("◡")}${palette.woodMid(" ")}${eyeBottom}${palette.woodMid(" █")} ${(0, node_util.styleText)("yellow", "➜")} ${(0, node_util.styleText)("white", description)}
|
|
168
|
+
${palette.woodBase("▀▀▀▀▀▀▀▀▀▀▀▀▀")}
|
|
102
169
|
`;
|
|
103
170
|
}
|
|
104
|
-
|
|
105
|
-
|
|
171
|
+
/** ANSI color names available for terminal output. */
|
|
172
|
+
const randomColors = [
|
|
173
|
+
"black",
|
|
174
|
+
"red",
|
|
175
|
+
"green",
|
|
176
|
+
"yellow",
|
|
177
|
+
"blue",
|
|
178
|
+
"white",
|
|
179
|
+
"magenta",
|
|
180
|
+
"cyan",
|
|
181
|
+
"gray"
|
|
182
|
+
];
|
|
183
|
+
/**
|
|
184
|
+
* Returns the text wrapped in a deterministic ANSI color derived from the text's SHA-256 hash.
|
|
185
|
+
*/
|
|
106
186
|
function randomCliColor(text) {
|
|
107
187
|
if (!text) return "";
|
|
108
|
-
return (0, node_util.styleText)(
|
|
188
|
+
return (0, node_util.styleText)(randomColors[(0, node_crypto.createHash)("sha256").update(text).digest().readUInt32BE(0) % randomColors.length] ?? "white", text);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Formats a millisecond duration with an ANSI color based on thresholds:
|
|
192
|
+
* green ≤ 500 ms · yellow ≤ 1 000 ms · red > 1 000 ms
|
|
193
|
+
*/
|
|
194
|
+
function formatMsWithColor(ms) {
|
|
195
|
+
const formatted = formatMs(ms);
|
|
196
|
+
if (ms <= 500) return (0, node_util.styleText)("green", formatted);
|
|
197
|
+
if (ms <= 1e3) return (0, node_util.styleText)("yellow", formatted);
|
|
198
|
+
return (0, node_util.styleText)("red", formatted);
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region ../../internals/utils/src/fs.ts
|
|
202
|
+
/**
|
|
203
|
+
* Writes `data` to `path`, trimming leading/trailing whitespace before saving.
|
|
204
|
+
* Skips the write and returns `undefined` when the trimmed content is empty or
|
|
205
|
+
* identical to what is already on disk.
|
|
206
|
+
* Creates any missing parent directories automatically.
|
|
207
|
+
* When `sanity` is `true`, re-reads the file after writing and throws if the
|
|
208
|
+
* content does not match — useful for catching write failures on unreliable file systems.
|
|
209
|
+
*/
|
|
210
|
+
async function write(path, data, options = {}) {
|
|
211
|
+
const trimmed = data.trim();
|
|
212
|
+
if (trimmed === "") return void 0;
|
|
213
|
+
const resolved = (0, node_path.resolve)(path);
|
|
214
|
+
if (typeof Bun !== "undefined") {
|
|
215
|
+
const file = Bun.file(resolved);
|
|
216
|
+
if ((await file.exists() ? await file.text() : null) === trimmed) return void 0;
|
|
217
|
+
await Bun.write(resolved, trimmed);
|
|
218
|
+
return trimmed;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
if (await (0, node_fs_promises.readFile)(resolved, { encoding: "utf-8" }) === trimmed) return void 0;
|
|
222
|
+
} catch {}
|
|
223
|
+
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(resolved), { recursive: true });
|
|
224
|
+
await (0, node_fs_promises.writeFile)(resolved, trimmed, { encoding: "utf-8" });
|
|
225
|
+
if (options.sanity) {
|
|
226
|
+
const savedData = await (0, node_fs_promises.readFile)(resolved, { encoding: "utf-8" });
|
|
227
|
+
if (savedData !== trimmed) throw new Error(`Sanity check failed for ${path}\n\nData[${data.length}]:\n${data}\n\nSaved[${savedData.length}]:\n${savedData}\n`);
|
|
228
|
+
return savedData;
|
|
229
|
+
}
|
|
230
|
+
return trimmed;
|
|
109
231
|
}
|
|
110
232
|
//#endregion
|
|
111
233
|
//#region src/utils/getSummary.ts
|
|
112
234
|
function getSummary({ failedPlugins, filesCreated, status, hrStart, config, pluginTimings }) {
|
|
113
|
-
const duration =
|
|
235
|
+
const duration = formatHrtime(hrStart);
|
|
114
236
|
const pluginsCount = config.plugins?.length ?? 0;
|
|
115
237
|
const successCount = pluginsCount - failedPlugins.size;
|
|
116
238
|
const meta = {
|
|
@@ -224,7 +346,7 @@ var ClackWritable = class extends node_stream.Writable {
|
|
|
224
346
|
const clackLogger = (0, _kubb_core.defineLogger)({
|
|
225
347
|
name: "clack",
|
|
226
348
|
install(context, options) {
|
|
227
|
-
const logLevel = options?.logLevel ?? _kubb_core.
|
|
349
|
+
const logLevel = options?.logLevel ?? _kubb_core.logLevel.info;
|
|
228
350
|
const state = {
|
|
229
351
|
totalPlugins: 0,
|
|
230
352
|
completedPlugins: 0,
|
|
@@ -252,7 +374,7 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
252
374
|
state.activeProgress.clear();
|
|
253
375
|
}
|
|
254
376
|
function showProgressStep() {
|
|
255
|
-
if (logLevel <= _kubb_core.
|
|
377
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
256
378
|
const line = buildProgressLine(state);
|
|
257
379
|
if (line) _clack_prompts.log.step(getMessage(line));
|
|
258
380
|
}
|
|
@@ -268,7 +390,7 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
268
390
|
state.isSpinning = false;
|
|
269
391
|
}
|
|
270
392
|
context.on("info", (message, info = "") => {
|
|
271
|
-
if (logLevel <= _kubb_core.
|
|
393
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
272
394
|
const text = getMessage([
|
|
273
395
|
(0, node_util.styleText)("blue", "ℹ"),
|
|
274
396
|
message,
|
|
@@ -278,21 +400,21 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
278
400
|
else _clack_prompts.log.info(text);
|
|
279
401
|
});
|
|
280
402
|
context.on("success", (message, info = "") => {
|
|
281
|
-
if (logLevel <= _kubb_core.
|
|
403
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
282
404
|
const text = getMessage([
|
|
283
405
|
(0, node_util.styleText)("blue", "✓"),
|
|
284
406
|
message,
|
|
285
|
-
logLevel >= _kubb_core.
|
|
407
|
+
logLevel >= _kubb_core.logLevel.info ? (0, node_util.styleText)("dim", info) : void 0
|
|
286
408
|
].filter(Boolean).join(" "));
|
|
287
409
|
if (state.isSpinning) stopSpinner(text);
|
|
288
410
|
else _clack_prompts.log.success(text);
|
|
289
411
|
});
|
|
290
412
|
context.on("warn", (message, info) => {
|
|
291
|
-
if (logLevel < _kubb_core.
|
|
413
|
+
if (logLevel < _kubb_core.logLevel.warn) return;
|
|
292
414
|
const text = getMessage([
|
|
293
415
|
(0, node_util.styleText)("yellow", "⚠"),
|
|
294
416
|
message,
|
|
295
|
-
logLevel >= _kubb_core.
|
|
417
|
+
logLevel >= _kubb_core.logLevel.info && info ? (0, node_util.styleText)("dim", info) : void 0
|
|
296
418
|
].filter(Boolean).join(" "));
|
|
297
419
|
_clack_prompts.log.warn(text);
|
|
298
420
|
});
|
|
@@ -301,7 +423,7 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
301
423
|
const text = [(0, node_util.styleText)("red", "✗"), error.message].join(" ");
|
|
302
424
|
if (state.isSpinning) stopSpinner(getMessage(text));
|
|
303
425
|
else _clack_prompts.log.error(getMessage(text));
|
|
304
|
-
if (logLevel >= _kubb_core.
|
|
426
|
+
if (logLevel >= _kubb_core.logLevel.debug && error.stack) {
|
|
305
427
|
const frames = error.stack.split("\n").slice(1, 4);
|
|
306
428
|
for (const frame of frames) _clack_prompts.log.message(getMessage((0, node_util.styleText)("dim", frame.trim())));
|
|
307
429
|
if (caused?.stack) {
|
|
@@ -312,7 +434,7 @@ const clackLogger = (0, _kubb_core.defineLogger)({
|
|
|
312
434
|
}
|
|
313
435
|
});
|
|
314
436
|
context.on("version:new", (version, latestVersion) => {
|
|
315
|
-
if (logLevel <= _kubb_core.
|
|
437
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
316
438
|
_clack_prompts.box(`\`v${version}\` → \`v${latestVersion}\`
|
|
317
439
|
Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
318
440
|
width: "auto",
|
|
@@ -333,13 +455,13 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
333
455
|
reset();
|
|
334
456
|
});
|
|
335
457
|
context.on("config:start", () => {
|
|
336
|
-
if (logLevel <= _kubb_core.
|
|
458
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
337
459
|
const text = getMessage("Configuration started");
|
|
338
460
|
_clack_prompts.intro(text);
|
|
339
461
|
startSpinner(getMessage("Configuration loading"));
|
|
340
462
|
});
|
|
341
463
|
context.on("config:end", (_configs) => {
|
|
342
|
-
if (logLevel <= _kubb_core.
|
|
464
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
343
465
|
const text = getMessage("Configuration completed");
|
|
344
466
|
_clack_prompts.outro(text);
|
|
345
467
|
});
|
|
@@ -350,7 +472,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
350
472
|
_clack_prompts.intro(text);
|
|
351
473
|
});
|
|
352
474
|
context.on("plugin:start", (plugin) => {
|
|
353
|
-
if (logLevel <= _kubb_core.
|
|
475
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
354
476
|
stopSpinner();
|
|
355
477
|
const progressBar = _clack_prompts.progress({
|
|
356
478
|
style: "block",
|
|
@@ -370,18 +492,18 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
370
492
|
context.on("plugin:end", (plugin, { duration, success }) => {
|
|
371
493
|
stopSpinner();
|
|
372
494
|
const active = state.activeProgress.get(plugin.name);
|
|
373
|
-
if (!active || logLevel === _kubb_core.
|
|
495
|
+
if (!active || logLevel === _kubb_core.logLevel.silent) return;
|
|
374
496
|
clearInterval(active.interval);
|
|
375
497
|
if (success) state.completedPlugins++;
|
|
376
498
|
else state.failedPlugins++;
|
|
377
499
|
const durationStr = formatMsWithColor(duration);
|
|
378
|
-
const text = getMessage(success ? `${(0, node_util.styleText)("bold", plugin.name)} completed in ${durationStr}` : `${(0, node_util.styleText)("bold", plugin.name)} failed in ${(0, node_util.styleText)("red",
|
|
500
|
+
const text = getMessage(success ? `${(0, node_util.styleText)("bold", plugin.name)} completed in ${durationStr}` : `${(0, node_util.styleText)("bold", plugin.name)} failed in ${(0, node_util.styleText)("red", formatMs(duration))}`);
|
|
379
501
|
active.progressBar.stop(text);
|
|
380
502
|
state.activeProgress.delete(plugin.name);
|
|
381
503
|
showProgressStep();
|
|
382
504
|
});
|
|
383
505
|
context.on("files:processing:start", (files) => {
|
|
384
|
-
if (logLevel <= _kubb_core.
|
|
506
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
385
507
|
stopSpinner();
|
|
386
508
|
state.totalFiles = files.length;
|
|
387
509
|
state.processedFiles = 0;
|
|
@@ -396,7 +518,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
396
518
|
state.activeProgress.set("files", { progressBar });
|
|
397
519
|
});
|
|
398
520
|
context.on("file:processing:update", ({ file, config }) => {
|
|
399
|
-
if (logLevel <= _kubb_core.
|
|
521
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
400
522
|
stopSpinner();
|
|
401
523
|
state.processedFiles++;
|
|
402
524
|
const text = `Writing ${(0, node_path.relative)(config.root, file.path)}`;
|
|
@@ -405,7 +527,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
405
527
|
active.progressBar.advance(void 0, text);
|
|
406
528
|
});
|
|
407
529
|
context.on("files:processing:end", () => {
|
|
408
|
-
if (logLevel <= _kubb_core.
|
|
530
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
409
531
|
stopSpinner();
|
|
410
532
|
const text = getMessage("Files written successfully");
|
|
411
533
|
const active = state.activeProgress.get("files");
|
|
@@ -419,22 +541,22 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
419
541
|
_clack_prompts.outro(text);
|
|
420
542
|
});
|
|
421
543
|
context.on("format:start", () => {
|
|
422
|
-
if (logLevel <= _kubb_core.
|
|
544
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
423
545
|
const text = getMessage("Format started");
|
|
424
546
|
_clack_prompts.intro(text);
|
|
425
547
|
});
|
|
426
548
|
context.on("format:end", () => {
|
|
427
|
-
if (logLevel <= _kubb_core.
|
|
549
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
428
550
|
const text = getMessage("Format completed");
|
|
429
551
|
_clack_prompts.outro(text);
|
|
430
552
|
});
|
|
431
553
|
context.on("lint:start", () => {
|
|
432
|
-
if (logLevel <= _kubb_core.
|
|
554
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
433
555
|
const text = getMessage("Lint started");
|
|
434
556
|
_clack_prompts.intro(text);
|
|
435
557
|
});
|
|
436
558
|
context.on("lint:end", () => {
|
|
437
|
-
if (logLevel <= _kubb_core.
|
|
559
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
438
560
|
const text = getMessage("Lint completed");
|
|
439
561
|
_clack_prompts.outro(text);
|
|
440
562
|
});
|
|
@@ -442,7 +564,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
442
564
|
const commandWithArgs = formatCommandWithArgs(command, args);
|
|
443
565
|
const text = getMessage(`Hook ${(0, node_util.styleText)("dim", commandWithArgs)} started`);
|
|
444
566
|
if (!id) return;
|
|
445
|
-
if (logLevel <= _kubb_core.
|
|
567
|
+
if (logLevel <= _kubb_core.logLevel.silent) {
|
|
446
568
|
await runHook({
|
|
447
569
|
id,
|
|
448
570
|
command,
|
|
@@ -457,7 +579,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
457
579
|
return;
|
|
458
580
|
}
|
|
459
581
|
_clack_prompts.intro(text);
|
|
460
|
-
const logger = _clack_prompts.taskLog({ title: getMessage(["Executing hook", logLevel >= _kubb_core.
|
|
582
|
+
const logger = _clack_prompts.taskLog({ title: getMessage(["Executing hook", logLevel >= _kubb_core.logLevel.info ? (0, node_util.styleText)("dim", commandWithArgs) : void 0].filter(Boolean).join(" ")) });
|
|
461
583
|
const writable = new ClackWritable(logger);
|
|
462
584
|
await runHook({
|
|
463
585
|
id,
|
|
@@ -474,7 +596,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
474
596
|
});
|
|
475
597
|
});
|
|
476
598
|
context.on("hook:end", ({ command, args }) => {
|
|
477
|
-
if (logLevel <= _kubb_core.
|
|
599
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
478
600
|
const text = getMessage(`Hook ${(0, node_util.styleText)("dim", formatCommandWithArgs(command, args))} successfully executed`);
|
|
479
601
|
_clack_prompts.outro(text);
|
|
480
602
|
});
|
|
@@ -485,7 +607,7 @@ Run \`npm install -g @kubb/cli\` to update`, "Update available for `Kubb`", {
|
|
|
485
607
|
config,
|
|
486
608
|
status,
|
|
487
609
|
hrStart,
|
|
488
|
-
pluginTimings: logLevel >= _kubb_core.
|
|
610
|
+
pluginTimings: logLevel >= _kubb_core.logLevel.verbose ? pluginTimings : void 0
|
|
489
611
|
});
|
|
490
612
|
const title = config.name || "";
|
|
491
613
|
summary.unshift("\n");
|
|
@@ -542,7 +664,7 @@ const fileSystemLogger = (0, _kubb_core.defineLogger)({
|
|
|
542
664
|
}
|
|
543
665
|
}
|
|
544
666
|
await Promise.all(Object.entries(files).map(async ([fileName, logs]) => {
|
|
545
|
-
return
|
|
667
|
+
return write(fileName, logs.join("\n\n"));
|
|
546
668
|
}));
|
|
547
669
|
return Object.keys(files);
|
|
548
670
|
}
|
|
@@ -583,7 +705,7 @@ const fileSystemLogger = (0, _kubb_core.defineLogger)({
|
|
|
583
705
|
});
|
|
584
706
|
});
|
|
585
707
|
context.on("plugin:end", (plugin, { duration, success }) => {
|
|
586
|
-
const durationStr =
|
|
708
|
+
const durationStr = formatMs(duration);
|
|
587
709
|
state.cachedLogs.add({
|
|
588
710
|
date: /* @__PURE__ */ new Date(),
|
|
589
711
|
logs: [success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`]
|
|
@@ -620,7 +742,7 @@ const fileSystemLogger = (0, _kubb_core.defineLogger)({
|
|
|
620
742
|
const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
621
743
|
name: "github-actions",
|
|
622
744
|
install(context, options) {
|
|
623
|
-
const logLevel = options?.logLevel ?? _kubb_core.
|
|
745
|
+
const logLevel = options?.logLevel ?? _kubb_core.logLevel.info;
|
|
624
746
|
const state = {
|
|
625
747
|
totalPlugins: 0,
|
|
626
748
|
completedPlugins: 0,
|
|
@@ -640,7 +762,7 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
640
762
|
state.currentConfigs = [];
|
|
641
763
|
}
|
|
642
764
|
function showProgressStep() {
|
|
643
|
-
if (logLevel <= _kubb_core.
|
|
765
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
644
766
|
const line = buildProgressLine(state);
|
|
645
767
|
if (line) console.log(getMessage(line));
|
|
646
768
|
}
|
|
@@ -654,7 +776,7 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
654
776
|
console.log("::endgroup::");
|
|
655
777
|
}
|
|
656
778
|
context.on("info", (message, info = "") => {
|
|
657
|
-
if (logLevel <= _kubb_core.
|
|
779
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
658
780
|
const text = getMessage([
|
|
659
781
|
(0, node_util.styleText)("blue", "ℹ"),
|
|
660
782
|
message,
|
|
@@ -663,29 +785,29 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
663
785
|
console.log(text);
|
|
664
786
|
});
|
|
665
787
|
context.on("success", (message, info = "") => {
|
|
666
|
-
if (logLevel <= _kubb_core.
|
|
788
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
667
789
|
const text = getMessage([
|
|
668
790
|
(0, node_util.styleText)("blue", "✓"),
|
|
669
791
|
message,
|
|
670
|
-
logLevel >= _kubb_core.
|
|
792
|
+
logLevel >= _kubb_core.logLevel.info ? (0, node_util.styleText)("dim", info) : void 0
|
|
671
793
|
].filter(Boolean).join(" "));
|
|
672
794
|
console.log(text);
|
|
673
795
|
});
|
|
674
796
|
context.on("warn", (message, info = "") => {
|
|
675
|
-
if (logLevel <= _kubb_core.
|
|
797
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
676
798
|
const text = getMessage([
|
|
677
799
|
(0, node_util.styleText)("yellow", "⚠"),
|
|
678
800
|
message,
|
|
679
|
-
logLevel >= _kubb_core.
|
|
801
|
+
logLevel >= _kubb_core.logLevel.info ? (0, node_util.styleText)("dim", info) : void 0
|
|
680
802
|
].filter(Boolean).join(" "));
|
|
681
803
|
console.warn(`::warning::${text}`);
|
|
682
804
|
});
|
|
683
805
|
context.on("error", (error) => {
|
|
684
806
|
const caused = require_errors.toCause(error);
|
|
685
|
-
if (logLevel <= _kubb_core.
|
|
807
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
686
808
|
const message = error.message || String(error);
|
|
687
809
|
console.error(`::error::${message}`);
|
|
688
|
-
if (logLevel >= _kubb_core.
|
|
810
|
+
if (logLevel >= _kubb_core.logLevel.debug && error.stack) {
|
|
689
811
|
const frames = error.stack.split("\n").slice(1, 4);
|
|
690
812
|
for (const frame of frames) console.log(getMessage((0, node_util.styleText)("dim", frame.trim())));
|
|
691
813
|
if (caused?.stack) {
|
|
@@ -700,14 +822,14 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
700
822
|
reset();
|
|
701
823
|
});
|
|
702
824
|
context.on("config:start", () => {
|
|
703
|
-
if (logLevel <= _kubb_core.
|
|
825
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
704
826
|
const text = getMessage("Configuration started");
|
|
705
827
|
openGroup("Configuration");
|
|
706
828
|
console.log(text);
|
|
707
829
|
});
|
|
708
830
|
context.on("config:end", (configs) => {
|
|
709
831
|
state.currentConfigs = configs;
|
|
710
|
-
if (logLevel <= _kubb_core.
|
|
832
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
711
833
|
const text = getMessage("Configuration completed");
|
|
712
834
|
console.log(text);
|
|
713
835
|
closeGroup("Configuration");
|
|
@@ -720,24 +842,24 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
720
842
|
if (state.currentConfigs.length === 1) console.log(getMessage(text));
|
|
721
843
|
});
|
|
722
844
|
context.on("plugin:start", (plugin) => {
|
|
723
|
-
if (logLevel <= _kubb_core.
|
|
845
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
724
846
|
const text = getMessage(`Generating ${(0, node_util.styleText)("bold", plugin.name)}`);
|
|
725
847
|
if (state.currentConfigs.length === 1) openGroup(`Plugin: ${plugin.name}`);
|
|
726
848
|
console.log(text);
|
|
727
849
|
});
|
|
728
850
|
context.on("plugin:end", (plugin, { duration, success }) => {
|
|
729
|
-
if (logLevel <= _kubb_core.
|
|
851
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
730
852
|
if (success) state.completedPlugins++;
|
|
731
853
|
else state.failedPlugins++;
|
|
732
854
|
const durationStr = formatMsWithColor(duration);
|
|
733
|
-
const text = getMessage(success ? `${(0, node_util.styleText)("bold", plugin.name)} completed in ${durationStr}` : `${(0, node_util.styleText)("bold", plugin.name)} failed in ${(0, node_util.styleText)("red",
|
|
855
|
+
const text = getMessage(success ? `${(0, node_util.styleText)("bold", plugin.name)} completed in ${durationStr}` : `${(0, node_util.styleText)("bold", plugin.name)} failed in ${(0, node_util.styleText)("red", formatMs(duration))}`);
|
|
734
856
|
console.log(text);
|
|
735
857
|
if (state.currentConfigs.length > 1) console.log(" ");
|
|
736
858
|
if (state.currentConfigs.length === 1) closeGroup(`Plugin: ${plugin.name}`);
|
|
737
859
|
showProgressStep();
|
|
738
860
|
});
|
|
739
861
|
context.on("files:processing:start", (files) => {
|
|
740
|
-
if (logLevel <= _kubb_core.
|
|
862
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
741
863
|
state.totalFiles = files.length;
|
|
742
864
|
state.processedFiles = 0;
|
|
743
865
|
if (state.currentConfigs.length === 1) openGroup("File Generation");
|
|
@@ -745,14 +867,14 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
745
867
|
console.log(text);
|
|
746
868
|
});
|
|
747
869
|
context.on("files:processing:end", () => {
|
|
748
|
-
if (logLevel <= _kubb_core.
|
|
870
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
749
871
|
const text = getMessage("Files written successfully");
|
|
750
872
|
console.log(text);
|
|
751
873
|
if (state.currentConfigs.length === 1) closeGroup("File Generation");
|
|
752
874
|
showProgressStep();
|
|
753
875
|
});
|
|
754
876
|
context.on("file:processing:update", () => {
|
|
755
|
-
if (logLevel <= _kubb_core.
|
|
877
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
756
878
|
state.processedFiles++;
|
|
757
879
|
});
|
|
758
880
|
context.on("generation:end", (config) => {
|
|
@@ -760,25 +882,25 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
760
882
|
console.log(text);
|
|
761
883
|
});
|
|
762
884
|
context.on("format:start", () => {
|
|
763
|
-
if (logLevel <= _kubb_core.
|
|
885
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
764
886
|
const text = getMessage("Format started");
|
|
765
887
|
if (state.currentConfigs.length === 1) openGroup("Formatting");
|
|
766
888
|
console.log(text);
|
|
767
889
|
});
|
|
768
890
|
context.on("format:end", () => {
|
|
769
|
-
if (logLevel <= _kubb_core.
|
|
891
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
770
892
|
const text = getMessage("Format completed");
|
|
771
893
|
console.log(text);
|
|
772
894
|
if (state.currentConfigs.length === 1) closeGroup("Formatting");
|
|
773
895
|
});
|
|
774
896
|
context.on("lint:start", () => {
|
|
775
|
-
if (logLevel <= _kubb_core.
|
|
897
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
776
898
|
const text = getMessage("Lint started");
|
|
777
899
|
if (state.currentConfigs.length === 1) openGroup("Linting");
|
|
778
900
|
console.log(text);
|
|
779
901
|
});
|
|
780
902
|
context.on("lint:end", () => {
|
|
781
|
-
if (logLevel <= _kubb_core.
|
|
903
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
782
904
|
const text = getMessage("Lint completed");
|
|
783
905
|
console.log(text);
|
|
784
906
|
if (state.currentConfigs.length === 1) closeGroup("Linting");
|
|
@@ -786,7 +908,7 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
786
908
|
context.on("hook:start", async ({ id, command, args }) => {
|
|
787
909
|
const commandWithArgs = formatCommandWithArgs(command, args);
|
|
788
910
|
const text = getMessage(`Hook ${(0, node_util.styleText)("dim", commandWithArgs)} started`);
|
|
789
|
-
if (logLevel > _kubb_core.
|
|
911
|
+
if (logLevel > _kubb_core.logLevel.silent) {
|
|
790
912
|
if (state.currentConfigs.length === 1) openGroup(`Hook ${commandWithArgs}`);
|
|
791
913
|
console.log(text);
|
|
792
914
|
}
|
|
@@ -798,13 +920,13 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
798
920
|
commandWithArgs,
|
|
799
921
|
context,
|
|
800
922
|
sink: {
|
|
801
|
-
onStdout: logLevel > _kubb_core.
|
|
802
|
-
onStderr: logLevel > _kubb_core.
|
|
923
|
+
onStdout: logLevel > _kubb_core.logLevel.silent ? (s) => console.log(s) : void 0,
|
|
924
|
+
onStderr: logLevel > _kubb_core.logLevel.silent ? (s) => console.error(`::error::${s}`) : void 0
|
|
803
925
|
}
|
|
804
926
|
});
|
|
805
927
|
});
|
|
806
928
|
context.on("hook:end", ({ command, args }) => {
|
|
807
|
-
if (logLevel <= _kubb_core.
|
|
929
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
808
930
|
const commandWithArgs = formatCommandWithArgs(command, args);
|
|
809
931
|
const text = getMessage(`Hook ${(0, node_util.styleText)("dim", commandWithArgs)} completed`);
|
|
810
932
|
console.log(text);
|
|
@@ -813,7 +935,7 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
813
935
|
context.on("generation:summary", (config, { status, hrStart, failedPlugins }) => {
|
|
814
936
|
const pluginsCount = config.plugins?.length ?? 0;
|
|
815
937
|
const successCount = pluginsCount - failedPlugins.size;
|
|
816
|
-
const duration =
|
|
938
|
+
const duration = formatHrtime(hrStart);
|
|
817
939
|
if (state.currentConfigs.length > 1) console.log(" ");
|
|
818
940
|
console.log(status === "success" ? `Kubb Summary: ${(0, node_util.styleText)("blue", "✓")} ${`${successCount} successful`}, ${pluginsCount} total, ${(0, node_util.styleText)("green", duration)}` : `Kubb Summary: ${(0, node_util.styleText)("blue", "✓")} ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total, ${(0, node_util.styleText)("green", duration)}`);
|
|
819
941
|
if (state.currentConfigs.length > 1) closeGroup(config.name ? `Generation for ${(0, node_util.styleText)("bold", config.name)}` : "Generation");
|
|
@@ -832,12 +954,12 @@ const githubActionsLogger = (0, _kubb_core.defineLogger)({
|
|
|
832
954
|
const plainLogger = (0, _kubb_core.defineLogger)({
|
|
833
955
|
name: "plain",
|
|
834
956
|
install(context, options) {
|
|
835
|
-
const logLevel = options?.logLevel ?? _kubb_core.
|
|
957
|
+
const logLevel = options?.logLevel ?? _kubb_core.logLevel.info;
|
|
836
958
|
function getMessage(message) {
|
|
837
959
|
return formatMessage(message, logLevel);
|
|
838
960
|
}
|
|
839
961
|
context.on("info", (message, info) => {
|
|
840
|
-
if (logLevel <= _kubb_core.
|
|
962
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
841
963
|
const text = getMessage([
|
|
842
964
|
"ℹ",
|
|
843
965
|
message,
|
|
@@ -846,20 +968,20 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
846
968
|
console.log(text);
|
|
847
969
|
});
|
|
848
970
|
context.on("success", (message, info = "") => {
|
|
849
|
-
if (logLevel <= _kubb_core.
|
|
971
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
850
972
|
const text = getMessage([
|
|
851
973
|
"✓",
|
|
852
974
|
message,
|
|
853
|
-
logLevel >= _kubb_core.
|
|
975
|
+
logLevel >= _kubb_core.logLevel.info ? info : void 0
|
|
854
976
|
].filter(Boolean).join(" "));
|
|
855
977
|
console.log(text);
|
|
856
978
|
});
|
|
857
979
|
context.on("warn", (message, info) => {
|
|
858
|
-
if (logLevel < _kubb_core.
|
|
980
|
+
if (logLevel < _kubb_core.logLevel.warn) return;
|
|
859
981
|
const text = getMessage([
|
|
860
982
|
"⚠",
|
|
861
983
|
message,
|
|
862
|
-
logLevel >= _kubb_core.
|
|
984
|
+
logLevel >= _kubb_core.logLevel.info ? info : void 0
|
|
863
985
|
].filter(Boolean).join(" "));
|
|
864
986
|
console.log(text);
|
|
865
987
|
});
|
|
@@ -867,7 +989,7 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
867
989
|
const caused = require_errors.toCause(error);
|
|
868
990
|
const text = getMessage(["✗", error.message].join(" "));
|
|
869
991
|
console.log(text);
|
|
870
|
-
if (logLevel >= _kubb_core.
|
|
992
|
+
if (logLevel >= _kubb_core.logLevel.debug && error.stack) {
|
|
871
993
|
const frames = error.stack.split("\n").slice(1, 4);
|
|
872
994
|
for (const frame of frames) console.log(getMessage(frame.trim()));
|
|
873
995
|
if (caused?.stack) {
|
|
@@ -881,12 +1003,12 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
881
1003
|
console.log("Kubb CLI 🧩");
|
|
882
1004
|
});
|
|
883
1005
|
context.on("config:start", () => {
|
|
884
|
-
if (logLevel <= _kubb_core.
|
|
1006
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
885
1007
|
const text = getMessage("Configuration started");
|
|
886
1008
|
console.log(text);
|
|
887
1009
|
});
|
|
888
1010
|
context.on("config:end", () => {
|
|
889
|
-
if (logLevel <= _kubb_core.
|
|
1011
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
890
1012
|
const text = getMessage("Configuration completed");
|
|
891
1013
|
console.log(text);
|
|
892
1014
|
});
|
|
@@ -895,28 +1017,28 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
895
1017
|
console.log(text);
|
|
896
1018
|
});
|
|
897
1019
|
context.on("plugin:start", (plugin) => {
|
|
898
|
-
if (logLevel <= _kubb_core.
|
|
1020
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
899
1021
|
const text = getMessage(`Generating ${plugin.name}`);
|
|
900
1022
|
console.log(text);
|
|
901
1023
|
});
|
|
902
1024
|
context.on("plugin:end", (plugin, { duration, success }) => {
|
|
903
|
-
if (logLevel <= _kubb_core.
|
|
904
|
-
const durationStr =
|
|
1025
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
1026
|
+
const durationStr = formatMs(duration);
|
|
905
1027
|
const text = getMessage(success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`);
|
|
906
1028
|
console.log(text);
|
|
907
1029
|
});
|
|
908
1030
|
context.on("files:processing:start", (files) => {
|
|
909
|
-
if (logLevel <= _kubb_core.
|
|
1031
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
910
1032
|
const text = getMessage(`Writing ${files.length} files`);
|
|
911
1033
|
console.log(text);
|
|
912
1034
|
});
|
|
913
1035
|
context.on("file:processing:update", ({ file, config }) => {
|
|
914
|
-
if (logLevel <= _kubb_core.
|
|
1036
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
915
1037
|
const text = getMessage(`Writing ${(0, node_path.relative)(config.root, file.path)}`);
|
|
916
1038
|
console.log(text);
|
|
917
1039
|
});
|
|
918
1040
|
context.on("files:processing:end", () => {
|
|
919
|
-
if (logLevel <= _kubb_core.
|
|
1041
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
920
1042
|
const text = getMessage("Files written successfully");
|
|
921
1043
|
console.log(text);
|
|
922
1044
|
});
|
|
@@ -925,29 +1047,29 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
925
1047
|
console.log(text);
|
|
926
1048
|
});
|
|
927
1049
|
context.on("format:start", () => {
|
|
928
|
-
if (logLevel <= _kubb_core.
|
|
1050
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
929
1051
|
const text = getMessage("Format started");
|
|
930
1052
|
console.log(text);
|
|
931
1053
|
});
|
|
932
1054
|
context.on("format:end", () => {
|
|
933
|
-
if (logLevel <= _kubb_core.
|
|
1055
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
934
1056
|
const text = getMessage("Format completed");
|
|
935
1057
|
console.log(text);
|
|
936
1058
|
});
|
|
937
1059
|
context.on("lint:start", () => {
|
|
938
|
-
if (logLevel <= _kubb_core.
|
|
1060
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
939
1061
|
const text = getMessage("Lint started");
|
|
940
1062
|
console.log(text);
|
|
941
1063
|
});
|
|
942
1064
|
context.on("lint:end", () => {
|
|
943
|
-
if (logLevel <= _kubb_core.
|
|
1065
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
944
1066
|
const text = getMessage("Lint completed");
|
|
945
1067
|
console.log(text);
|
|
946
1068
|
});
|
|
947
1069
|
context.on("hook:start", async ({ id, command, args }) => {
|
|
948
1070
|
const commandWithArgs = formatCommandWithArgs(command, args);
|
|
949
1071
|
const text = getMessage(`Hook ${commandWithArgs} started`);
|
|
950
|
-
if (logLevel > _kubb_core.
|
|
1072
|
+
if (logLevel > _kubb_core.logLevel.silent) console.log(text);
|
|
951
1073
|
if (!id) return;
|
|
952
1074
|
await runHook({
|
|
953
1075
|
id,
|
|
@@ -956,13 +1078,13 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
956
1078
|
commandWithArgs,
|
|
957
1079
|
context,
|
|
958
1080
|
sink: {
|
|
959
|
-
onStdout: logLevel > _kubb_core.
|
|
960
|
-
onStderr: logLevel > _kubb_core.
|
|
1081
|
+
onStdout: logLevel > _kubb_core.logLevel.silent ? (s) => console.log(s) : void 0,
|
|
1082
|
+
onStderr: logLevel > _kubb_core.logLevel.silent ? (s) => console.error(s) : void 0
|
|
961
1083
|
}
|
|
962
1084
|
});
|
|
963
1085
|
});
|
|
964
1086
|
context.on("hook:end", ({ command, args }) => {
|
|
965
|
-
if (logLevel <= _kubb_core.
|
|
1087
|
+
if (logLevel <= _kubb_core.logLevel.silent) return;
|
|
966
1088
|
const text = getMessage(`Hook ${formatCommandWithArgs(command, args)} completed`);
|
|
967
1089
|
console.log(text);
|
|
968
1090
|
});
|
|
@@ -973,7 +1095,7 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
973
1095
|
config,
|
|
974
1096
|
status,
|
|
975
1097
|
hrStart,
|
|
976
|
-
pluginTimings: logLevel >= _kubb_core.
|
|
1098
|
+
pluginTimings: logLevel >= _kubb_core.logLevel.verbose ? pluginTimings : void 0
|
|
977
1099
|
});
|
|
978
1100
|
console.log(require_constants.SUMMARY_SEPARATOR);
|
|
979
1101
|
console.log(summary.join("\n"));
|
|
@@ -988,7 +1110,7 @@ const plainLogger = (0, _kubb_core.defineLogger)({
|
|
|
988
1110
|
* Shared across all logger adapters to avoid duplication.
|
|
989
1111
|
*/
|
|
990
1112
|
function formatMessage(message, logLevel) {
|
|
991
|
-
if (logLevel >= _kubb_core.
|
|
1113
|
+
if (logLevel >= _kubb_core.logLevel.verbose) return `${(0, node_util.styleText)("dim", `[${(/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", {
|
|
992
1114
|
hour12: false,
|
|
993
1115
|
hour: "2-digit",
|
|
994
1116
|
minute: "2-digit",
|
|
@@ -1002,7 +1124,7 @@ function formatMessage(message, logLevel) {
|
|
|
1002
1124
|
*/
|
|
1003
1125
|
function buildProgressLine(state) {
|
|
1004
1126
|
const parts = [];
|
|
1005
|
-
const duration =
|
|
1127
|
+
const duration = formatHrtime(state.hrStart);
|
|
1006
1128
|
if (state.totalPlugins > 0) {
|
|
1007
1129
|
const pluginStr = state.failedPlugins > 0 ? `Plugins ${(0, node_util.styleText)("green", state.completedPlugins.toString())}/${state.totalPlugins} ${(0, node_util.styleText)("red", `(${state.failedPlugins} failed)`)}` : `Plugins ${(0, node_util.styleText)("green", state.completedPlugins.toString())}/${state.totalPlugins}`;
|
|
1008
1130
|
parts.push(pluginStr);
|
|
@@ -1034,7 +1156,7 @@ async function setupLogger(context, { logLevel }) {
|
|
|
1034
1156
|
const logger = logMapper[type];
|
|
1035
1157
|
if (!logger) throw new Error(`Unknown adapter type: ${type}`);
|
|
1036
1158
|
const cleanup = await logger.install(context, { logLevel });
|
|
1037
|
-
if (logLevel >= _kubb_core.
|
|
1159
|
+
if (logLevel >= _kubb_core.logLevel.debug) await fileSystemLogger.install(context, { logLevel });
|
|
1038
1160
|
return cleanup;
|
|
1039
1161
|
}
|
|
1040
1162
|
//#endregion
|
|
@@ -1042,7 +1164,7 @@ async function setupLogger(context, { logLevel }) {
|
|
|
1042
1164
|
async function executeHooks({ hooks, events }) {
|
|
1043
1165
|
const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean);
|
|
1044
1166
|
for (const command of commands) {
|
|
1045
|
-
const [cmd, ...args] =
|
|
1167
|
+
const [cmd, ...args] = require_shell.tokenize(command);
|
|
1046
1168
|
if (!cmd) continue;
|
|
1047
1169
|
const hookId = (0, node_crypto.createHash)("sha256").update(command).digest("hex");
|
|
1048
1170
|
const hookEndPromise = new Promise((resolve, reject) => {
|
|
@@ -1159,7 +1281,7 @@ async function runToolPass({ toolValue, detect, toolMap, toolLabel, successPrefi
|
|
|
1159
1281
|
}
|
|
1160
1282
|
events.emit("success", [
|
|
1161
1283
|
`${successPrefix} with ${(0, node_util.styleText)("dim", resolvedTool)}`,
|
|
1162
|
-
logLevel >= _kubb_core.
|
|
1284
|
+
logLevel >= _kubb_core.logLevel.info ? `on ${(0, node_util.styleText)("dim", outputPath)}` : void 0,
|
|
1163
1285
|
"successfully"
|
|
1164
1286
|
].filter(Boolean).join(" ")).then(resolve).catch(reject);
|
|
1165
1287
|
};
|
|
@@ -1223,7 +1345,7 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1223
1345
|
filesCreated: files.length,
|
|
1224
1346
|
status: "failed",
|
|
1225
1347
|
hrStart,
|
|
1226
|
-
pluginTimings: logLevel >= _kubb_core.
|
|
1348
|
+
pluginTimings: logLevel >= _kubb_core.logLevel.verbose ? pluginTimings : void 0
|
|
1227
1349
|
});
|
|
1228
1350
|
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
1229
1351
|
command: "generate",
|
|
@@ -1243,8 +1365,8 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1243
1365
|
const outputPath = node_path.default.resolve(config.root, config.output.path);
|
|
1244
1366
|
if (config.output.format) await runToolPass({
|
|
1245
1367
|
toolValue: config.output.format,
|
|
1246
|
-
detect:
|
|
1247
|
-
toolMap:
|
|
1368
|
+
detect: _kubb_core.detectFormatter,
|
|
1369
|
+
toolMap: _kubb_core.formatters,
|
|
1248
1370
|
toolLabel: "formatter",
|
|
1249
1371
|
successPrefix: "Formatting",
|
|
1250
1372
|
noToolMessage: "No formatter found (biome, prettier, or oxfmt). Skipping formatting.",
|
|
@@ -1257,8 +1379,8 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1257
1379
|
});
|
|
1258
1380
|
if (config.output.lint) await runToolPass({
|
|
1259
1381
|
toolValue: config.output.lint,
|
|
1260
|
-
detect:
|
|
1261
|
-
toolMap:
|
|
1382
|
+
detect: _kubb_core.detectLinter,
|
|
1383
|
+
toolMap: _kubb_core.linters,
|
|
1262
1384
|
toolLabel: "linter",
|
|
1263
1385
|
successPrefix: "Linting",
|
|
1264
1386
|
noToolMessage: "No linter found (biome, oxlint, or eslint). Skipping linting.",
|
|
@@ -1297,11 +1419,11 @@ async function generate({ input, config: userConfig, events, logLevel }) {
|
|
|
1297
1419
|
}));
|
|
1298
1420
|
}
|
|
1299
1421
|
async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, watch }) {
|
|
1300
|
-
const logLevel = _kubb_core.
|
|
1301
|
-
const events = new
|
|
1422
|
+
const logLevel = _kubb_core.logLevel[logLevelKey] ?? _kubb_core.logLevel.info;
|
|
1423
|
+
const events = new AsyncEventEmitter();
|
|
1302
1424
|
const promiseManager = new _kubb_core.PromiseManager();
|
|
1303
1425
|
await setupLogger(events, { logLevel });
|
|
1304
|
-
await
|
|
1426
|
+
await require_telemetry.executeIfOnline(async () => {
|
|
1305
1427
|
try {
|
|
1306
1428
|
const latestVersion = (await (await fetch(require_constants.KUBB_NPM_PACKAGE_URL)).json()).version;
|
|
1307
1429
|
if (latestVersion && require_package.version < latestVersion) await events.emit("version:new", require_package.version, latestVersion);
|
|
@@ -1309,7 +1431,7 @@ async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, wa
|
|
|
1309
1431
|
});
|
|
1310
1432
|
try {
|
|
1311
1433
|
const result = await getCosmiConfig("kubb", configPath);
|
|
1312
|
-
const configs = await (0,
|
|
1434
|
+
const configs = await (0, _kubb_core.getConfigs)(result.config, { input });
|
|
1313
1435
|
await events.emit("config:start");
|
|
1314
1436
|
await events.emit("info", "Config loaded", node_path.default.relative(node_process.default.cwd(), result.filepath));
|
|
1315
1437
|
await events.emit("success", "Config loaded successfully", node_path.default.relative(node_process.default.cwd(), result.filepath));
|
|
@@ -1348,4 +1470,4 @@ async function runGenerateCommand({ input, configPath, logLevel: logLevelKey, wa
|
|
|
1348
1470
|
//#endregion
|
|
1349
1471
|
exports.runGenerateCommand = runGenerateCommand;
|
|
1350
1472
|
|
|
1351
|
-
//# sourceMappingURL=generate-
|
|
1473
|
+
//# sourceMappingURL=generate-6Cm1AK2n.cjs.map
|