@kubb/cli 5.0.0-beta.4 → 5.0.0-beta.41
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/README.md +209 -51
- package/dist/agent-D3K_-kiv.js +68 -0
- package/dist/agent-D3K_-kiv.js.map +1 -0
- package/dist/agent-DTqKBULa.cjs +70 -0
- package/dist/agent-DTqKBULa.cjs.map +1 -0
- package/dist/{chunk--u3MIqq1.js → chunk-CRm0XQPb.js} +1 -0
- package/dist/constants-84a47qA-.js +35 -0
- package/dist/constants-84a47qA-.js.map +1 -0
- package/dist/constants-AHhyFH15.cjs +139 -0
- package/dist/constants-AHhyFH15.cjs.map +1 -0
- package/dist/constants-BtmponZ3.cjs +58 -0
- package/dist/constants-BtmponZ3.cjs.map +1 -0
- package/dist/constants-C94RKp3A.js +116 -0
- package/dist/constants-C94RKp3A.js.map +1 -0
- package/dist/{define-Bdn8j5VM.cjs → define-C4AB3POr.cjs} +2 -2
- package/dist/{define-Bdn8j5VM.cjs.map → define-C4AB3POr.cjs.map} +1 -1
- package/dist/{define-Ctii4bel.js → define-DNG1U8ha.js} +2 -2
- package/dist/{define-Ctii4bel.js.map → define-DNG1U8ha.js.map} +1 -1
- package/dist/{errors-CjPmyZHy.js → errors-CoxrNXaA.js} +2 -2
- package/dist/{errors-CjPmyZHy.js.map → errors-CoxrNXaA.js.map} +1 -1
- package/dist/{errors-CLCjoSg0.cjs → errors-DykI11xo.cjs} +2 -2
- package/dist/{errors-CLCjoSg0.cjs.map → errors-DykI11xo.cjs.map} +1 -1
- package/dist/generate-CZYIOngX.cjs +76 -0
- package/dist/generate-CZYIOngX.cjs.map +1 -0
- package/dist/generate-HcvbU80u.js +77 -0
- package/dist/generate-HcvbU80u.js.map +1 -0
- package/dist/index.cjs +23 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/init-BMtuczv8.js +53 -0
- package/dist/init-BMtuczv8.js.map +1 -0
- package/dist/init-DybfkgNy.cjs +53 -0
- package/dist/init-DybfkgNy.cjs.map +1 -0
- package/dist/mcp-BF9dnH_F.js +39 -0
- package/dist/mcp-BF9dnH_F.js.map +1 -0
- package/dist/mcp-YzKoU6_l.cjs +39 -0
- package/dist/mcp-YzKoU6_l.cjs.map +1 -0
- package/dist/package-BCwMApnr.js +6 -0
- package/dist/package-BCwMApnr.js.map +1 -0
- package/dist/{package-BapVyQ-w.cjs → package-DPe5CA4S.cjs} +2 -2
- package/dist/package-DPe5CA4S.cjs.map +1 -0
- package/dist/{agent-sdYBBgrd.js → run-BQ3Qj0xB.js} +46 -43
- package/dist/run-BQ3Qj0xB.js.map +1 -0
- package/dist/run-BQzoaxjR.js +32 -0
- package/dist/run-BQzoaxjR.js.map +1 -0
- package/dist/run-CGf0KEts.js +51 -0
- package/dist/run-CGf0KEts.js.map +1 -0
- package/dist/{init-CZ5Xq2Hd.cjs → run-C_NMctua.cjs} +107 -149
- package/dist/run-C_NMctua.cjs.map +1 -0
- package/dist/run-CkTpemme.cjs +52 -0
- package/dist/run-CkTpemme.cjs.map +1 -0
- package/dist/run-Cl4SrSob.cjs +33 -0
- package/dist/run-Cl4SrSob.cjs.map +1 -0
- package/dist/{agent-B4cAAab2.cjs → run-D-s2LdlW.cjs} +46 -43
- package/dist/run-D-s2LdlW.cjs.map +1 -0
- package/dist/{init-eNRlotJK.js → run-D8dCWepS.js} +107 -149
- package/dist/run-D8dCWepS.js.map +1 -0
- package/dist/run-DaV_NiKR.js +1509 -0
- package/dist/run-DaV_NiKR.js.map +1 -0
- package/dist/run-UWQ9wImP.cjs +1512 -0
- package/dist/run-UWQ9wImP.cjs.map +1 -0
- package/dist/{shell-DLzN4fRo.js → shell-BrqyJdB7.js} +2 -2
- package/dist/{shell-DLzN4fRo.js.map → shell-BrqyJdB7.js.map} +1 -1
- package/dist/{shell-475fQKaX.cjs → shell-Lh-vLWwH.cjs} +2 -2
- package/dist/{shell-475fQKaX.cjs.map → shell-Lh-vLWwH.cjs.map} +1 -1
- package/dist/validate-BHc3lUKB.js +26 -0
- package/dist/validate-BHc3lUKB.js.map +1 -0
- package/dist/validate-CqRqJxmQ.cjs +26 -0
- package/dist/validate-CqRqJxmQ.cjs.map +1 -0
- package/package.json +16 -15
- package/src/commands/agent/start.ts +10 -7
- package/src/commands/agent.ts +3 -1
- package/src/commands/generate.ts +21 -13
- package/src/commands/init.ts +34 -3
- package/src/commands/mcp.ts +28 -4
- package/src/commands/validate.ts +6 -4
- package/src/constants.ts +3 -74
- package/src/index.ts +6 -4
- package/src/loggers/clackLogger.ts +137 -178
- package/src/loggers/plainLogger.ts +49 -102
- package/src/loggers/types.ts +6 -1
- package/src/loggers/utils.ts +141 -26
- package/src/runners/agent/run.ts +113 -0
- package/src/runners/agent/utils.ts +98 -0
- package/src/runners/generate/run.ts +404 -0
- package/src/runners/generate/utils.ts +219 -0
- package/src/runners/init/run.ts +212 -0
- package/src/{utils/packageManager.ts → runners/init/utils.ts} +12 -2
- package/src/runners/mcp/run.ts +37 -0
- package/src/runners/validate/run.ts +63 -0
- package/dist/agent-B4cAAab2.cjs.map +0 -1
- package/dist/agent-CR6Z96og.js +0 -56
- package/dist/agent-CR6Z96og.js.map +0 -1
- package/dist/agent-Dmxzqg4d.cjs +0 -58
- package/dist/agent-Dmxzqg4d.cjs.map +0 -1
- package/dist/agent-sdYBBgrd.js.map +0 -1
- package/dist/constants-CnDXa1R6.cjs +0 -148
- package/dist/constants-CnDXa1R6.cjs.map +0 -1
- package/dist/constants-aL3CP_Wq.js +0 -95
- package/dist/constants-aL3CP_Wq.js.map +0 -1
- package/dist/generate-B1Pa2ho-.cjs +0 -1756
- package/dist/generate-B1Pa2ho-.cjs.map +0 -1
- package/dist/generate-BDGOOsBM.cjs +0 -65
- package/dist/generate-BDGOOsBM.cjs.map +0 -1
- package/dist/generate-CNrRLY4n.js +0 -1753
- package/dist/generate-CNrRLY4n.js.map +0 -1
- package/dist/generate-DuhxPLGr.js +0 -66
- package/dist/generate-DuhxPLGr.js.map +0 -1
- package/dist/init-CZ5Xq2Hd.cjs.map +0 -1
- package/dist/init-CnZXHrbq.js +0 -25
- package/dist/init-CnZXHrbq.js.map +0 -1
- package/dist/init-NYJSZJSb.cjs +0 -25
- package/dist/init-NYJSZJSb.cjs.map +0 -1
- package/dist/init-eNRlotJK.js.map +0 -1
- package/dist/mcp-CYOgxB82.cjs +0 -47
- package/dist/mcp-CYOgxB82.cjs.map +0 -1
- package/dist/mcp-CdFWyrwi.cjs +0 -16
- package/dist/mcp-CdFWyrwi.cjs.map +0 -1
- package/dist/mcp-DhSxuDMD.js +0 -16
- package/dist/mcp-DhSxuDMD.js.map +0 -1
- package/dist/mcp-DmJm3TrU.js +0 -46
- package/dist/mcp-DmJm3TrU.js.map +0 -1
- package/dist/package-BapVyQ-w.cjs.map +0 -1
- package/dist/package-DyJE-qNq.js +0 -6
- package/dist/package-DyJE-qNq.js.map +0 -1
- package/dist/telemetry-DN95_2pF.cjs +0 -282
- package/dist/telemetry-DN95_2pF.cjs.map +0 -1
- package/dist/telemetry-LgT_sdPe.js +0 -245
- package/dist/telemetry-LgT_sdPe.js.map +0 -1
- package/dist/validate-C6npXzel.cjs +0 -25
- package/dist/validate-C6npXzel.cjs.map +0 -1
- package/dist/validate-kLJoT_hi.js +0 -33
- package/dist/validate-kLJoT_hi.js.map +0 -1
- package/dist/validate-n38Rh-Y7.js +0 -25
- package/dist/validate-n38Rh-Y7.js.map +0 -1
- package/dist/validate-yKKzqEZ5.cjs +0 -34
- package/dist/validate-yKKzqEZ5.cjs.map +0 -1
- package/src/loggers/fileSystemLogger.ts +0 -138
- package/src/loggers/githubActionsLogger.ts +0 -379
- package/src/runners/agent.ts +0 -155
- package/src/runners/generate.ts +0 -333
- package/src/runners/init.ts +0 -296
- package/src/runners/mcp.ts +0 -51
- package/src/runners/validate.ts +0 -39
- package/src/types.ts +0 -11
- package/src/utils/Writables.ts +0 -17
- package/src/utils/executeHooks.ts +0 -45
- package/src/utils/flags.ts +0 -9
- package/src/utils/getConfig.ts +0 -10
- package/src/utils/getCosmiConfig.ts +0 -80
- package/src/utils/getSummary.ts +0 -68
- package/src/utils/runHook.ts +0 -91
- package/src/utils/telemetry.ts +0 -273
- package/src/utils/watcher.ts +0 -19
- /package/dist/{chunk-ByKO4r7w.cjs → chunk-Bx3C2hgW.cjs} +0 -0
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require("./chunk-ByKO4r7w.cjs");
|
|
2
|
-
const require_define = require("./define-Bdn8j5VM.cjs");
|
|
3
|
-
const require_package = require("./package-BapVyQ-w.cjs");
|
|
4
|
-
//#region src/commands/validate.ts
|
|
5
|
-
const command = require_define.defineCommand({
|
|
6
|
-
name: "validate",
|
|
7
|
-
description: "Validate a Swagger/OpenAPI file",
|
|
8
|
-
options: { input: {
|
|
9
|
-
type: "string",
|
|
10
|
-
description: "Path to Swagger/OpenAPI file",
|
|
11
|
-
short: "i",
|
|
12
|
-
required: true
|
|
13
|
-
} },
|
|
14
|
-
async run({ values }) {
|
|
15
|
-
const { runValidate } = await Promise.resolve().then(() => require("./validate-yKKzqEZ5.cjs"));
|
|
16
|
-
await runValidate({
|
|
17
|
-
input: values.input,
|
|
18
|
-
version: require_package.version
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
//#endregion
|
|
23
|
-
exports.command = command;
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=validate-C6npXzel.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-C6npXzel.cjs","names":["defineCommand"],"sources":["../src/commands/validate.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'validate',\n description: 'Validate a Swagger/OpenAPI file',\n options: {\n input: {\n type: 'string',\n description: 'Path to Swagger/OpenAPI file',\n short: 'i',\n required: true,\n },\n },\n async run({ values }) {\n const { runValidate } = await import('../runners/validate.ts')\n\n await runValidate({ input: values.input, version })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAUA,eAAAA,cAAc;CACnC,MAAM;CACN,aAAa;CACb,SAAS,EACP,OAAO;EACL,MAAM;EACN,aAAa;EACb,OAAO;EACP,UAAU;EACX,EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,gBAAgB,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,0BAAA,CAAA;AAE9B,QAAM,YAAY;GAAE,OAAO,OAAO;GAAO,SAAA,gBAAA;GAAS,CAAC;;CAEtD,CAAC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import "./chunk--u3MIqq1.js";
|
|
2
|
-
import { t as getErrorMessage } from "./errors-CjPmyZHy.js";
|
|
3
|
-
import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-LgT_sdPe.js";
|
|
4
|
-
import process from "node:process";
|
|
5
|
-
import { parseDocument, validateDocument } from "@kubb/adapter-oas";
|
|
6
|
-
//#region src/runners/validate.ts
|
|
7
|
-
async function runValidate({ input, version }) {
|
|
8
|
-
const hrStart = process.hrtime();
|
|
9
|
-
try {
|
|
10
|
-
await validateDocument(await parseDocument(input), { throwOnError: true });
|
|
11
|
-
await sendTelemetry(buildTelemetryEvent({
|
|
12
|
-
command: "validate",
|
|
13
|
-
kubbVersion: version,
|
|
14
|
-
hrStart,
|
|
15
|
-
status: "success"
|
|
16
|
-
}));
|
|
17
|
-
console.log("✅ Validation success");
|
|
18
|
-
} catch (error) {
|
|
19
|
-
await sendTelemetry(buildTelemetryEvent({
|
|
20
|
-
command: "validate",
|
|
21
|
-
kubbVersion: version,
|
|
22
|
-
hrStart,
|
|
23
|
-
status: "failed"
|
|
24
|
-
}));
|
|
25
|
-
console.error("❌ Validation failed");
|
|
26
|
-
console.error(getErrorMessage(error));
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//#endregion
|
|
31
|
-
export { runValidate };
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=validate-kLJoT_hi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-kLJoT_hi.js","names":[],"sources":["../src/runners/validate.ts"],"sourcesContent":["import process from 'node:process'\nimport { getErrorMessage } from '@internals/utils'\nimport { parseDocument, validateDocument } from '@kubb/adapter-oas'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype ValidateOptions = {\n input: string\n version: string\n}\n\nexport async function runValidate({ input, version }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n try {\n const document = await parseDocument(input)\n await validateDocument(document, { throwOnError: true })\n\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'validate',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n console.log('✅ Validation success')\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'validate',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n console.error('❌ Validation failed')\n console.error(getErrorMessage(error))\n process.exit(1)\n }\n}\n"],"mappings":";;;;;;AAUA,eAAsB,YAAY,EAAE,OAAO,WAA2C;CACpF,MAAM,UAAU,QAAQ,QAAQ;AAChC,KAAI;AAEF,QAAM,iBAAiB,MADA,cAAc,MAAM,EACV,EAAE,cAAc,MAAM,CAAC;AAExD,QAAM,cACJ,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;AACD,UAAQ,IAAI,uBAAuB;UAC5B,OAAO;AACd,QAAM,cACJ,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;AACD,UAAQ,MAAM,sBAAsB;AACpC,UAAQ,MAAM,gBAAgB,MAAM,CAAC;AACrC,UAAQ,KAAK,EAAE"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import "./chunk--u3MIqq1.js";
|
|
2
|
-
import { n as defineCommand } from "./define-Ctii4bel.js";
|
|
3
|
-
import { t as version } from "./package-DyJE-qNq.js";
|
|
4
|
-
//#region src/commands/validate.ts
|
|
5
|
-
const command = defineCommand({
|
|
6
|
-
name: "validate",
|
|
7
|
-
description: "Validate a Swagger/OpenAPI file",
|
|
8
|
-
options: { input: {
|
|
9
|
-
type: "string",
|
|
10
|
-
description: "Path to Swagger/OpenAPI file",
|
|
11
|
-
short: "i",
|
|
12
|
-
required: true
|
|
13
|
-
} },
|
|
14
|
-
async run({ values }) {
|
|
15
|
-
const { runValidate } = await import("./validate-kLJoT_hi.js");
|
|
16
|
-
await runValidate({
|
|
17
|
-
input: values.input,
|
|
18
|
-
version
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
//#endregion
|
|
23
|
-
export { command };
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=validate-n38Rh-Y7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-n38Rh-Y7.js","names":[],"sources":["../src/commands/validate.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'validate',\n description: 'Validate a Swagger/OpenAPI file',\n options: {\n input: {\n type: 'string',\n description: 'Path to Swagger/OpenAPI file',\n short: 'i',\n required: true,\n },\n },\n async run({ values }) {\n const { runValidate } = await import('../runners/validate.ts')\n\n await runValidate({ input: values.input, version })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAU,cAAc;CACnC,MAAM;CACN,aAAa;CACb,SAAS,EACP,OAAO;EACL,MAAM;EACN,aAAa;EACb,OAAO;EACP,UAAU;EACX,EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,gBAAgB,MAAM,OAAO;AAErC,QAAM,YAAY;GAAE,OAAO,OAAO;GAAO;GAAS,CAAC;;CAEtD,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const require_chunk = require("./chunk-ByKO4r7w.cjs");
|
|
2
|
-
const require_errors = require("./errors-CLCjoSg0.cjs");
|
|
3
|
-
const require_telemetry = require("./telemetry-DN95_2pF.cjs");
|
|
4
|
-
let node_process = require("node:process");
|
|
5
|
-
node_process = require_chunk.__toESM(node_process, 1);
|
|
6
|
-
let _kubb_adapter_oas = require("@kubb/adapter-oas");
|
|
7
|
-
//#region src/runners/validate.ts
|
|
8
|
-
async function runValidate({ input, version }) {
|
|
9
|
-
const hrStart = node_process.default.hrtime();
|
|
10
|
-
try {
|
|
11
|
-
await (0, _kubb_adapter_oas.validateDocument)(await (0, _kubb_adapter_oas.parseDocument)(input), { throwOnError: true });
|
|
12
|
-
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
13
|
-
command: "validate",
|
|
14
|
-
kubbVersion: version,
|
|
15
|
-
hrStart,
|
|
16
|
-
status: "success"
|
|
17
|
-
}));
|
|
18
|
-
console.log("✅ Validation success");
|
|
19
|
-
} catch (error) {
|
|
20
|
-
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
21
|
-
command: "validate",
|
|
22
|
-
kubbVersion: version,
|
|
23
|
-
hrStart,
|
|
24
|
-
status: "failed"
|
|
25
|
-
}));
|
|
26
|
-
console.error("❌ Validation failed");
|
|
27
|
-
console.error(require_errors.getErrorMessage(error));
|
|
28
|
-
node_process.default.exit(1);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//#endregion
|
|
32
|
-
exports.runValidate = runValidate;
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=validate-yKKzqEZ5.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-yKKzqEZ5.cjs","names":["process","sendTelemetry","buildTelemetryEvent","getErrorMessage"],"sources":["../src/runners/validate.ts"],"sourcesContent":["import process from 'node:process'\nimport { getErrorMessage } from '@internals/utils'\nimport { parseDocument, validateDocument } from '@kubb/adapter-oas'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype ValidateOptions = {\n input: string\n version: string\n}\n\nexport async function runValidate({ input, version }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n try {\n const document = await parseDocument(input)\n await validateDocument(document, { throwOnError: true })\n\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'validate',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n console.log('✅ Validation success')\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'validate',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n console.error('❌ Validation failed')\n console.error(getErrorMessage(error))\n process.exit(1)\n }\n}\n"],"mappings":";;;;;;;AAUA,eAAsB,YAAY,EAAE,OAAO,WAA2C;CACpF,MAAM,UAAUA,aAAAA,QAAQ,QAAQ;AAChC,KAAI;AAEF,SAAA,GAAA,kBAAA,kBAAuB,OAAA,GAAA,kBAAA,eADc,MAAM,EACV,EAAE,cAAc,MAAM,CAAC;AAExD,QAAMC,kBAAAA,cACJC,kBAAAA,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;AACD,UAAQ,IAAI,uBAAuB;UAC5B,OAAO;AACd,QAAMD,kBAAAA,cACJC,kBAAAA,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;AACD,UAAQ,MAAM,sBAAsB;AACpC,UAAQ,MAAMC,eAAAA,gBAAgB,MAAM,CAAC;AACrC,eAAA,QAAQ,KAAK,EAAE"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { relative, resolve } from 'node:path'
|
|
2
|
-
import process from 'node:process'
|
|
3
|
-
import { formatMs, write } from '@internals/utils'
|
|
4
|
-
import { defineLogger } from '@kubb/core'
|
|
5
|
-
|
|
6
|
-
type CachedEvent = {
|
|
7
|
-
date: Date
|
|
8
|
-
logs: string[]
|
|
9
|
-
fileName?: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* FileSystem logger that captures debug events and writes them to `.kubb` directory files.
|
|
14
|
-
* Note: Logs write on `lifecycle:end` or process exit. Cached logs may be lost if the process crashes before these events.
|
|
15
|
-
*/
|
|
16
|
-
export const fileSystemLogger = defineLogger({
|
|
17
|
-
name: 'filesystem',
|
|
18
|
-
install(context) {
|
|
19
|
-
const state = {
|
|
20
|
-
cachedLogs: new Set<CachedEvent>(),
|
|
21
|
-
startDate: Date.now(),
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function reset() {
|
|
25
|
-
state.cachedLogs = new Set<CachedEvent>()
|
|
26
|
-
state.startDate = Date.now()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async function writeLogs(name?: string) {
|
|
30
|
-
if (state.cachedLogs.size === 0) {
|
|
31
|
-
return []
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const files: Record<string, string[]> = {}
|
|
35
|
-
|
|
36
|
-
for (const log of state.cachedLogs) {
|
|
37
|
-
const baseName = log.fileName || `${['kubb', name, state.startDate].filter(Boolean).join('-')}.log`
|
|
38
|
-
const pathName = resolve(process.cwd(), '.kubb', baseName)
|
|
39
|
-
|
|
40
|
-
if (!files[pathName]) {
|
|
41
|
-
files[pathName] = []
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (log.logs.length > 0) {
|
|
45
|
-
const timestamp = log.date.toLocaleString()
|
|
46
|
-
files[pathName].push(`[${timestamp}]\n${log.logs.join('\n')}`)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
for (const [fileName, logs] of Object.entries(files)) {
|
|
51
|
-
await write(fileName, logs.join('\n\n'))
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return Object.keys(files)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
context.on('kubb:info', ({ message, info }) => {
|
|
58
|
-
state.cachedLogs.add({
|
|
59
|
-
date: new Date(),
|
|
60
|
-
logs: [`ℹ ${message} ${info}`],
|
|
61
|
-
})
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
context.on('kubb:success', ({ message, info }) => {
|
|
65
|
-
state.cachedLogs.add({
|
|
66
|
-
date: new Date(),
|
|
67
|
-
logs: [`✓ ${message} ${info}`],
|
|
68
|
-
})
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
context.on('kubb:warn', ({ message, info }) => {
|
|
72
|
-
state.cachedLogs.add({
|
|
73
|
-
date: new Date(),
|
|
74
|
-
logs: [`⚠ ${message} ${info}`],
|
|
75
|
-
})
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
context.on('kubb:error', ({ error }) => {
|
|
79
|
-
state.cachedLogs.add({
|
|
80
|
-
date: new Date(),
|
|
81
|
-
logs: [`✗ ${error.message}`, error.stack || 'unknown stack'],
|
|
82
|
-
})
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
context.on('kubb:debug', (message) => {
|
|
86
|
-
state.cachedLogs.add({
|
|
87
|
-
date: new Date(),
|
|
88
|
-
logs: message.logs,
|
|
89
|
-
})
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
context.on('kubb:plugin:start', ({ plugin }) => {
|
|
93
|
-
state.cachedLogs.add({
|
|
94
|
-
date: new Date(),
|
|
95
|
-
logs: [`Generating ${plugin.name}`],
|
|
96
|
-
})
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
context.on('kubb:plugin:end', ({ plugin, duration, success }) => {
|
|
100
|
-
const durationStr = formatMs(duration)
|
|
101
|
-
|
|
102
|
-
state.cachedLogs.add({
|
|
103
|
-
date: new Date(),
|
|
104
|
-
logs: [success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`],
|
|
105
|
-
})
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
context.on('kubb:files:processing:start', ({ files }) => {
|
|
109
|
-
state.cachedLogs.add({
|
|
110
|
-
date: new Date(),
|
|
111
|
-
logs: [`Start ${files.length} writing:`, ...files.map((file) => file.path)],
|
|
112
|
-
})
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
context.on('kubb:generation:end', async ({ config }) => {
|
|
116
|
-
const writtenFilePaths = await writeLogs(config.name)
|
|
117
|
-
if (writtenFilePaths.length > 0) {
|
|
118
|
-
const files = writtenFilePaths.map((f) => relative(process.cwd(), f))
|
|
119
|
-
await context.emit('kubb:info', { message: 'Debug files written to:', info: files.join(', ') })
|
|
120
|
-
}
|
|
121
|
-
reset()
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
// Fallback: Write logs on process exit to handle crashes
|
|
125
|
-
const exitHandler = () => {
|
|
126
|
-
// Synchronous write on exit - best effort
|
|
127
|
-
if (state.cachedLogs.size > 0) {
|
|
128
|
-
writeLogs().catch(() => {
|
|
129
|
-
// Ignore errors on exit
|
|
130
|
-
})
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
process.once('exit', exitHandler)
|
|
135
|
-
process.once('SIGINT', exitHandler)
|
|
136
|
-
process.once('SIGTERM', exitHandler)
|
|
137
|
-
},
|
|
138
|
-
})
|
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
import { styleText } from 'node:util'
|
|
2
|
-
import { formatHrtime, formatMs, formatMsWithColor, toCause } from '@internals/utils'
|
|
3
|
-
import { type Config, defineLogger, logLevel as logLevelMap } from '@kubb/core'
|
|
4
|
-
import { runHook } from '../utils/runHook.ts'
|
|
5
|
-
import { buildProgressLine, formatCommandWithArgs, formatMessage } from './utils.ts'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* GitHub Actions logger using group annotations for collapsible sections in CI.
|
|
9
|
-
*/
|
|
10
|
-
export const githubActionsLogger = defineLogger({
|
|
11
|
-
name: 'github-actions',
|
|
12
|
-
install(context, options) {
|
|
13
|
-
const logLevel = options?.logLevel ?? logLevelMap.info
|
|
14
|
-
const state = {
|
|
15
|
-
totalPlugins: 0,
|
|
16
|
-
completedPlugins: 0,
|
|
17
|
-
failedPlugins: 0,
|
|
18
|
-
totalFiles: 0,
|
|
19
|
-
processedFiles: 0,
|
|
20
|
-
hrStart: process.hrtime(),
|
|
21
|
-
currentConfigs: [] as Array<Config>,
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function reset() {
|
|
25
|
-
state.totalPlugins = 0
|
|
26
|
-
state.completedPlugins = 0
|
|
27
|
-
state.failedPlugins = 0
|
|
28
|
-
state.totalFiles = 0
|
|
29
|
-
state.processedFiles = 0
|
|
30
|
-
state.hrStart = process.hrtime()
|
|
31
|
-
state.currentConfigs = []
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function showProgressStep() {
|
|
35
|
-
if (logLevel <= logLevelMap.silent) {
|
|
36
|
-
return
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const line = buildProgressLine(state)
|
|
40
|
-
if (line) {
|
|
41
|
-
console.log(getMessage(line))
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function getMessage(message: string): string {
|
|
46
|
-
return formatMessage(message, logLevel)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function openGroup(name: string) {
|
|
50
|
-
console.log(`::group::${name}`)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function closeGroup(_name: string) {
|
|
54
|
-
console.log('::endgroup::')
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
context.on('kubb:info', ({ message, info = '' }) => {
|
|
58
|
-
if (logLevel <= logLevelMap.silent) {
|
|
59
|
-
return
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const text = getMessage([styleText('blue', 'ℹ'), message, styleText('dim', info)].join(' '))
|
|
63
|
-
|
|
64
|
-
console.log(text)
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
context.on('kubb:success', ({ message, info = '' }) => {
|
|
68
|
-
if (logLevel <= logLevelMap.silent) {
|
|
69
|
-
return
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const text = getMessage([styleText('blue', '✓'), message, logLevel >= logLevelMap.info ? styleText('dim', info) : undefined].filter(Boolean).join(' '))
|
|
73
|
-
|
|
74
|
-
console.log(text)
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
context.on('kubb:warn', ({ message, info = '' }) => {
|
|
78
|
-
if (logLevel <= logLevelMap.silent) {
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const text = getMessage([styleText('yellow', '⚠'), message, logLevel >= logLevelMap.info ? styleText('dim', info) : undefined].filter(Boolean).join(' '))
|
|
83
|
-
|
|
84
|
-
console.warn(`::warning::${text}`)
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
context.on('kubb:error', ({ error }) => {
|
|
88
|
-
const caused = toCause(error)
|
|
89
|
-
|
|
90
|
-
if (logLevel <= logLevelMap.silent) {
|
|
91
|
-
return
|
|
92
|
-
}
|
|
93
|
-
const message = error.message || String(error)
|
|
94
|
-
console.error(`::error::${message}`)
|
|
95
|
-
|
|
96
|
-
// Show stack trace in debug mode (first 3 frames)
|
|
97
|
-
if (logLevel >= logLevelMap.debug && error.stack) {
|
|
98
|
-
const frames = error.stack.split('\n').slice(1, 4)
|
|
99
|
-
for (const frame of frames) {
|
|
100
|
-
console.log(getMessage(styleText('dim', frame.trim())))
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (caused?.stack) {
|
|
104
|
-
console.log(styleText('dim', `└─ caused by ${caused.message}`))
|
|
105
|
-
|
|
106
|
-
const frames = caused.stack.split('\n').slice(1, 4)
|
|
107
|
-
for (const frame of frames) {
|
|
108
|
-
console.log(getMessage(` ${styleText('dim', frame.trim())}`))
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
context.on('kubb:lifecycle:start', ({ version }) => {
|
|
115
|
-
console.log(styleText('yellow', `Kubb ${version} 🧩`))
|
|
116
|
-
reset()
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
context.on('kubb:config:start', () => {
|
|
120
|
-
if (logLevel <= logLevelMap.silent) {
|
|
121
|
-
return
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const text = getMessage('Configuration started')
|
|
125
|
-
|
|
126
|
-
openGroup('Configuration')
|
|
127
|
-
|
|
128
|
-
console.log(text)
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
context.on('kubb:config:end', ({ configs }) => {
|
|
132
|
-
state.currentConfigs = configs
|
|
133
|
-
|
|
134
|
-
if (logLevel <= logLevelMap.silent) {
|
|
135
|
-
return
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const text = getMessage('Configuration completed')
|
|
139
|
-
|
|
140
|
-
console.log(text)
|
|
141
|
-
|
|
142
|
-
closeGroup('Configuration')
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
context.on('kubb:generation:start', ({ config }) => {
|
|
146
|
-
reset()
|
|
147
|
-
|
|
148
|
-
// Initialize progress tracking for this generation
|
|
149
|
-
state.totalPlugins = config.plugins?.length ?? 0
|
|
150
|
-
|
|
151
|
-
const text = config.name ? `Generation for ${styleText('bold', config.name)}` : 'Generation'
|
|
152
|
-
|
|
153
|
-
if (state.currentConfigs.length > 1) {
|
|
154
|
-
openGroup(text)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (state.currentConfigs.length === 1) {
|
|
158
|
-
console.log(getMessage(text))
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
context.on('kubb:plugin:start', ({ plugin }) => {
|
|
163
|
-
if (logLevel <= logLevelMap.silent) {
|
|
164
|
-
return
|
|
165
|
-
}
|
|
166
|
-
const text = getMessage(`Generating ${styleText('bold', plugin.name)}`)
|
|
167
|
-
|
|
168
|
-
if (state.currentConfigs.length === 1) {
|
|
169
|
-
openGroup(`Plugin: ${plugin.name}`)
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
console.log(text)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
context.on('kubb:plugin:end', ({ plugin, duration, success }) => {
|
|
176
|
-
if (logLevel <= logLevelMap.silent) {
|
|
177
|
-
return
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (success) {
|
|
181
|
-
state.completedPlugins++
|
|
182
|
-
} else {
|
|
183
|
-
state.failedPlugins++
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const durationStr = formatMsWithColor(duration)
|
|
187
|
-
const text = getMessage(
|
|
188
|
-
success
|
|
189
|
-
? `${styleText('bold', plugin.name)} completed in ${durationStr}`
|
|
190
|
-
: `${styleText('bold', plugin.name)} failed in ${styleText('red', formatMs(duration))}`,
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
console.log(text)
|
|
194
|
-
if (state.currentConfigs.length > 1) {
|
|
195
|
-
console.log(' ')
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (state.currentConfigs.length === 1) {
|
|
199
|
-
closeGroup(`Plugin: ${plugin.name}`)
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Show progress step after each plugin
|
|
203
|
-
showProgressStep()
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
context.on('kubb:files:processing:start', ({ files }) => {
|
|
207
|
-
if (logLevel <= logLevelMap.silent) {
|
|
208
|
-
return
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
state.totalFiles = files.length
|
|
212
|
-
state.processedFiles = 0
|
|
213
|
-
|
|
214
|
-
if (state.currentConfigs.length === 1) {
|
|
215
|
-
openGroup('File Generation')
|
|
216
|
-
}
|
|
217
|
-
const text = getMessage(`Writing ${files.length} files`)
|
|
218
|
-
|
|
219
|
-
console.log(text)
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
context.on('kubb:files:processing:end', () => {
|
|
223
|
-
if (logLevel <= logLevelMap.silent) {
|
|
224
|
-
return
|
|
225
|
-
}
|
|
226
|
-
const text = getMessage('Files written successfully')
|
|
227
|
-
|
|
228
|
-
console.log(text)
|
|
229
|
-
|
|
230
|
-
if (state.currentConfigs.length === 1) {
|
|
231
|
-
closeGroup('File Generation')
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Show final progress step after files are written
|
|
235
|
-
showProgressStep()
|
|
236
|
-
})
|
|
237
|
-
|
|
238
|
-
context.on('kubb:file:processing:update', () => {
|
|
239
|
-
if (logLevel <= logLevelMap.silent) {
|
|
240
|
-
return
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
state.processedFiles++
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
context.on('kubb:generation:end', ({ config }) => {
|
|
247
|
-
const text = getMessage(
|
|
248
|
-
config.name ? `${styleText('blue', '✓')} Generation completed for ${styleText('dim', config.name)}` : `${styleText('blue', '✓')} Generation completed`,
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
console.log(text)
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
context.on('kubb:format:start', () => {
|
|
255
|
-
if (logLevel <= logLevelMap.silent) {
|
|
256
|
-
return
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
const text = getMessage('Format started')
|
|
260
|
-
|
|
261
|
-
if (state.currentConfigs.length === 1) {
|
|
262
|
-
openGroup('Formatting')
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
console.log(text)
|
|
266
|
-
})
|
|
267
|
-
|
|
268
|
-
context.on('kubb:format:end', () => {
|
|
269
|
-
if (logLevel <= logLevelMap.silent) {
|
|
270
|
-
return
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
const text = getMessage('Format completed')
|
|
274
|
-
|
|
275
|
-
console.log(text)
|
|
276
|
-
|
|
277
|
-
if (state.currentConfigs.length === 1) {
|
|
278
|
-
closeGroup('Formatting')
|
|
279
|
-
}
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
context.on('kubb:lint:start', () => {
|
|
283
|
-
if (logLevel <= logLevelMap.silent) {
|
|
284
|
-
return
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
const text = getMessage('Lint started')
|
|
288
|
-
|
|
289
|
-
if (state.currentConfigs.length === 1) {
|
|
290
|
-
openGroup('Linting')
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
console.log(text)
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
context.on('kubb:lint:end', () => {
|
|
297
|
-
if (logLevel <= logLevelMap.silent) {
|
|
298
|
-
return
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
const text = getMessage('Lint completed')
|
|
302
|
-
|
|
303
|
-
console.log(text)
|
|
304
|
-
|
|
305
|
-
if (state.currentConfigs.length === 1) {
|
|
306
|
-
closeGroup('Linting')
|
|
307
|
-
}
|
|
308
|
-
})
|
|
309
|
-
|
|
310
|
-
context.on('kubb:hook:start', async ({ id, command, args }) => {
|
|
311
|
-
const commandWithArgs = formatCommandWithArgs(command, args)
|
|
312
|
-
const text = getMessage(`Hook ${styleText('dim', commandWithArgs)} started`)
|
|
313
|
-
|
|
314
|
-
if (logLevel > logLevelMap.silent) {
|
|
315
|
-
if (state.currentConfigs.length === 1) {
|
|
316
|
-
openGroup(`Hook ${commandWithArgs}`)
|
|
317
|
-
}
|
|
318
|
-
console.log(text)
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// Skip hook execution if no id is provided (e.g., during benchmarks or tests)
|
|
322
|
-
if (!id) {
|
|
323
|
-
return
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
await runHook({
|
|
327
|
-
id,
|
|
328
|
-
command,
|
|
329
|
-
args,
|
|
330
|
-
commandWithArgs,
|
|
331
|
-
context,
|
|
332
|
-
sink: {
|
|
333
|
-
// GHA formats errors with the ::error:: annotation
|
|
334
|
-
onStdout: logLevel > logLevelMap.silent ? (s) => console.log(s) : undefined,
|
|
335
|
-
onStderr: logLevel > logLevelMap.silent ? (s) => console.error(`::error::${s}`) : undefined,
|
|
336
|
-
},
|
|
337
|
-
})
|
|
338
|
-
})
|
|
339
|
-
|
|
340
|
-
context.on('kubb:hook:end', ({ command, args }) => {
|
|
341
|
-
if (logLevel <= logLevelMap.silent) {
|
|
342
|
-
return
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
const commandWithArgs = formatCommandWithArgs(command, args)
|
|
346
|
-
const text = getMessage(`Hook ${styleText('dim', commandWithArgs)} completed`)
|
|
347
|
-
|
|
348
|
-
console.log(text)
|
|
349
|
-
|
|
350
|
-
if (state.currentConfigs.length === 1) {
|
|
351
|
-
closeGroup(`Hook ${commandWithArgs}`)
|
|
352
|
-
}
|
|
353
|
-
})
|
|
354
|
-
|
|
355
|
-
context.on('kubb:generation:summary', ({ config, status, hrStart, failedPlugins }) => {
|
|
356
|
-
const pluginsCount = config.plugins?.length ?? 0
|
|
357
|
-
const successCount = pluginsCount - failedPlugins.size
|
|
358
|
-
const duration = formatHrtime(hrStart)
|
|
359
|
-
|
|
360
|
-
if (state.currentConfigs.length > 1) {
|
|
361
|
-
console.log(' ')
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
console.log(
|
|
365
|
-
status === 'success'
|
|
366
|
-
? `Kubb Summary: ${styleText('blue', '✓')} ${`${successCount} successful`}, ${pluginsCount} total, ${styleText('green', duration)}`
|
|
367
|
-
: `Kubb Summary: ${styleText('blue', '✓')} ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total, ${styleText('green', duration)}`,
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
if (state.currentConfigs.length > 1) {
|
|
371
|
-
closeGroup(config.name ? `Generation for ${styleText('bold', config.name)}` : 'Generation')
|
|
372
|
-
}
|
|
373
|
-
})
|
|
374
|
-
|
|
375
|
-
context.on('kubb:lifecycle:end', () => {
|
|
376
|
-
reset()
|
|
377
|
-
})
|
|
378
|
-
},
|
|
379
|
-
})
|