@kubb/cli 3.0.0-alpha.3 → 3.0.0-alpha.5
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/{chunk-NKSXZ2SM.cjs → chunk-H3BA33NF.cjs} +905 -3236
- package/dist/chunk-H3BA33NF.cjs.map +1 -0
- package/dist/{chunk-VGYRBGKV.js → chunk-WJ72QPXS.js} +89 -105
- package/dist/chunk-WJ72QPXS.js.map +1 -0
- package/dist/{generate-IC27XOTA.js → generate-LZOUPH5K.js} +19 -19
- package/dist/generate-LZOUPH5K.js.map +1 -0
- package/dist/{generate-SW6IGE4J.cjs → generate-M3IAQ4OY.cjs} +27 -27
- package/dist/generate-M3IAQ4OY.cjs.map +1 -0
- package/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +9 -7
- package/src/commands/generate.ts +14 -12
- package/src/generate.ts +58 -52
- package/src/utils/Writables.ts +23 -0
- package/src/utils/executeHooks.ts +25 -41
- package/src/utils/getPlugins.ts +0 -10
- package/src/utils/getSummary.ts +8 -20
- package/src/utils/watcher.ts +4 -6
- package/dist/chunk-NKSXZ2SM.cjs.map +0 -1
- package/dist/chunk-VGYRBGKV.js.map +0 -1
- package/dist/generate-IC27XOTA.js.map +0 -1
- package/dist/generate-SW6IGE4J.cjs.map +0 -1
- package/src/utils/OraWritable.ts +0 -22
- package/src/utils/spinner.ts +0 -5
|
@@ -1,74 +1,56 @@
|
|
|
1
|
-
// src/utils/spinner.ts
|
|
2
|
-
import ora from "ora";
|
|
3
|
-
var spinner = ora({
|
|
4
|
-
spinner: "clock"
|
|
5
|
-
});
|
|
6
|
-
|
|
7
1
|
// src/generate.ts
|
|
8
|
-
import {
|
|
2
|
+
import { createLogger, LogMapper as LogMapper2 } from "@kubb/core/logger";
|
|
9
3
|
import c4 from "tinyrainbow";
|
|
10
|
-
import {
|
|
11
|
-
import { createConsola } from "consola";
|
|
4
|
+
import { safeBuild } from "@kubb/core";
|
|
12
5
|
|
|
13
6
|
// src/utils/executeHooks.ts
|
|
14
|
-
import { LogLevel } from "@kubb/core/logger";
|
|
15
7
|
import { execa } from "execa";
|
|
16
8
|
import { parseArgsStringToArgv } from "string-argv";
|
|
17
9
|
import c2 from "tinyrainbow";
|
|
18
10
|
|
|
19
|
-
// src/utils/
|
|
11
|
+
// src/utils/Writables.ts
|
|
20
12
|
import { Writable } from "stream";
|
|
21
13
|
import c from "tinyrainbow";
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
import * as process2 from "process";
|
|
15
|
+
var ConsolaWritable = class extends Writable {
|
|
16
|
+
constructor(consola, command, opts) {
|
|
24
17
|
super(opts);
|
|
25
18
|
this.command = command;
|
|
26
|
-
this.
|
|
19
|
+
this.consola = consola;
|
|
27
20
|
}
|
|
28
21
|
_write(chunk, _encoding, callback) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
${c.bold(c.blue(this.command))}: ${chunk?.toString()}`;
|
|
22
|
+
process2.stdout.write(c.dim(chunk?.toString()));
|
|
32
23
|
callback();
|
|
33
24
|
}
|
|
34
25
|
};
|
|
35
26
|
|
|
36
27
|
// src/utils/executeHooks.ts
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
const executers = commands.map(async (command) => {
|
|
46
|
-
const oraWritable = new OraWritable(spinner, command);
|
|
47
|
-
const abortController = new AbortController();
|
|
28
|
+
import { LogMapper } from "@kubb/core/logger";
|
|
29
|
+
import PQueue from "p-queue";
|
|
30
|
+
async function executeHooks({ hooks, logger }) {
|
|
31
|
+
const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean);
|
|
32
|
+
const queue = new PQueue({ concurrency: 1 });
|
|
33
|
+
const promises = commands.map(async (command) => {
|
|
34
|
+
const consolaWritable = new ConsolaWritable(logger.consola, command);
|
|
48
35
|
const [cmd, ..._args] = [...parseArgsStringToArgv(command)];
|
|
49
36
|
if (!cmd) {
|
|
50
37
|
return null;
|
|
51
38
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
spinner.succeed(`Executing hook ${logLevel !== "silent" ? c2.dim(command) : ""}`);
|
|
39
|
+
await queue.add(async () => {
|
|
40
|
+
logger.emit("start", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
|
|
41
|
+
const subProcess = await execa(cmd, _args, {
|
|
42
|
+
detached: true,
|
|
43
|
+
stdout: logger.logLevel === LogMapper.silent ? void 0 : ["pipe", consolaWritable],
|
|
44
|
+
stripFinalNewline: true
|
|
45
|
+
});
|
|
46
|
+
logger.emit("success", `Executing hook ${logger.logLevel !== LogMapper.silent ? c2.dim(command) : ""}`);
|
|
61
47
|
if (subProcess) {
|
|
62
|
-
|
|
48
|
+
logger.emit("debug", [subProcess.stdout]);
|
|
63
49
|
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
await Promise.all(executers);
|
|
69
|
-
if (logLevel === LogLevel.silent) {
|
|
70
|
-
spinner.succeed("Executing hooks");
|
|
71
|
-
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
await Promise.all(promises);
|
|
53
|
+
logger.emit("success", "Executing hooks");
|
|
72
54
|
}
|
|
73
55
|
|
|
74
56
|
// src/utils/getErrorCauses.ts
|
|
@@ -96,10 +78,9 @@ function parseHrtimeToSeconds(hrtime) {
|
|
|
96
78
|
}
|
|
97
79
|
|
|
98
80
|
// src/utils/getSummary.ts
|
|
99
|
-
function getSummary({ pluginManager, status,
|
|
100
|
-
const { logLevel } = logger;
|
|
81
|
+
function getSummary({ pluginManager, status, hrStart, config, logger }) {
|
|
101
82
|
const logs = [];
|
|
102
|
-
const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(
|
|
83
|
+
const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart));
|
|
103
84
|
const buildStartPlugins = pluginManager.executed.filter((item) => item.hookName === "buildStart" && item.plugin.name !== "core").map((item) => item.plugin.name);
|
|
104
85
|
const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === "buildEnd" && item.plugin.name !== "core").map((item) => item.plugin.name);
|
|
105
86
|
const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name);
|
|
@@ -117,29 +98,19 @@ function getSummary({ pluginManager, status, hrstart, config, logger }) {
|
|
|
117
98
|
return 0;
|
|
118
99
|
});
|
|
119
100
|
const meta = {
|
|
120
|
-
name: config.name,
|
|
121
101
|
plugins: status === "success" ? `${c3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${c3.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,
|
|
122
102
|
pluginsFailed: status === "failed" ? failedPlugins?.map((name) => randomCliColour(name))?.join(", ") : void 0,
|
|
123
103
|
filesCreated: files.length,
|
|
124
|
-
time: c3.yellow(`${elapsedSeconds}s`),
|
|
125
|
-
endTime: c3.yellow(Date()),
|
|
104
|
+
time: `${c3.yellow(`${elapsedSeconds}s`)} - finished at ${c3.yellow((/* @__PURE__ */ new Date()).toLocaleString("en-GB", { timeZone: "UTC" }))}`,
|
|
126
105
|
output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root
|
|
127
106
|
};
|
|
128
|
-
logger.emit("debug", ["\nGenerated files:\n"]);
|
|
129
|
-
logger.emit(
|
|
130
|
-
"debug",
|
|
131
|
-
files.map((file) => `${randomCliColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`)
|
|
132
|
-
);
|
|
133
107
|
logs.push(
|
|
134
108
|
[
|
|
135
|
-
["
|
|
136
|
-
[
|
|
137
|
-
[` ${c3.bold("Plugins:")} ${meta.plugins}`, true],
|
|
138
|
-
[` ${c3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
|
|
109
|
+
[`${c3.bold("Plugins:")} ${meta.plugins}`, true],
|
|
110
|
+
[`${c3.dim("Failed:")} ${meta.pluginsFailed || "none"}`, !!meta.pluginsFailed],
|
|
139
111
|
[`${c3.bold("Generated:")} ${meta.filesCreated} files`, true],
|
|
140
|
-
[
|
|
141
|
-
[
|
|
142
|
-
[` ${c3.bold("Output:")} ${meta.output}`, true]
|
|
112
|
+
[`${c3.bold("Time:")} ${meta.time}`, true],
|
|
113
|
+
[`${c3.bold("Output:")} ${meta.output}`, true]
|
|
143
114
|
].map((item) => {
|
|
144
115
|
if (item.at(1)) {
|
|
145
116
|
return item.at(0);
|
|
@@ -167,38 +138,39 @@ async function writeLog(data) {
|
|
|
167
138
|
}
|
|
168
139
|
|
|
169
140
|
// src/generate.ts
|
|
141
|
+
import { SingleBar, Presets } from "cli-progress";
|
|
142
|
+
import "@kubb/fs";
|
|
143
|
+
import { relative } from "path";
|
|
170
144
|
async function generate({ input, config, args }) {
|
|
171
|
-
const logLevel = args.logLevel ||
|
|
145
|
+
const logLevel = LogMapper2[args.logLevel] || 3;
|
|
172
146
|
const logger = createLogger({
|
|
173
147
|
logLevel,
|
|
174
|
-
name: config.name
|
|
175
|
-
spinner,
|
|
176
|
-
consola: createConsola({
|
|
177
|
-
level: LogMapper[logLevel] || 3
|
|
178
|
-
})
|
|
148
|
+
name: config.name
|
|
179
149
|
});
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
150
|
+
const progress = new SingleBar(
|
|
151
|
+
{
|
|
152
|
+
format: logLevel === LogMapper2.info ? "{percentage}% {bar} {value}/{total} files | ETA: {eta}s | {filename}" : "{percentage}% {bar} ETA: {eta}s",
|
|
153
|
+
barsize: 40,
|
|
154
|
+
fps: 5,
|
|
155
|
+
clearOnComplete: true
|
|
156
|
+
},
|
|
157
|
+
Presets.shades_grey
|
|
158
|
+
);
|
|
159
|
+
logger.on("progress", ({ count, size, file }) => {
|
|
160
|
+
if (count === 0) {
|
|
161
|
+
progress.start(size, 0);
|
|
162
|
+
} else if (count === size) {
|
|
163
|
+
progress.stop();
|
|
164
|
+
} else {
|
|
165
|
+
progress.update(count, { filename: relative(config.root, file.path) || "" });
|
|
183
166
|
}
|
|
184
167
|
});
|
|
185
|
-
logger.
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
const hrstart = process.hrtime();
|
|
190
|
-
if (args.logLevel === LogLevel2.debug) {
|
|
191
|
-
const { performance, PerformanceObserver } = await import("perf_hooks");
|
|
192
|
-
const performanceOpserver = new PerformanceObserver((items) => {
|
|
193
|
-
const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`;
|
|
194
|
-
spinner.suffixText = c4.yellow(message);
|
|
195
|
-
performance.clearMarks();
|
|
196
|
-
});
|
|
197
|
-
performanceOpserver.observe({ type: "measure" });
|
|
198
|
-
}
|
|
168
|
+
logger.on("debug", async (messages) => {
|
|
169
|
+
await writeLog(messages.join("\n"));
|
|
170
|
+
});
|
|
199
171
|
const { root = process.cwd(), ...userConfig } = config;
|
|
200
172
|
const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
|
|
201
|
-
|
|
173
|
+
logger.emit("start", `Building ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
|
|
202
174
|
const definedConfig = {
|
|
203
175
|
root,
|
|
204
176
|
...userConfig,
|
|
@@ -211,6 +183,7 @@ async function generate({ input, config, args }) {
|
|
|
211
183
|
...userConfig.output
|
|
212
184
|
}
|
|
213
185
|
};
|
|
186
|
+
const hrStart = process.hrtime();
|
|
214
187
|
const { pluginManager, error } = await safeBuild({
|
|
215
188
|
config: definedConfig,
|
|
216
189
|
logger
|
|
@@ -219,34 +192,45 @@ async function generate({ input, config, args }) {
|
|
|
219
192
|
pluginManager,
|
|
220
193
|
config: definedConfig,
|
|
221
194
|
status: error ? "failed" : "success",
|
|
222
|
-
|
|
195
|
+
hrStart,
|
|
223
196
|
logger
|
|
224
197
|
});
|
|
225
|
-
if (error) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
198
|
+
if (error && logger.consola) {
|
|
199
|
+
logger.consola.error(`Build failed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
|
|
200
|
+
logger.consola.box({
|
|
201
|
+
title: `${config.name || ""}`,
|
|
202
|
+
message: summary.join(""),
|
|
203
|
+
style: {
|
|
204
|
+
padding: 2,
|
|
205
|
+
borderColor: "red",
|
|
206
|
+
borderStyle: "rounded"
|
|
207
|
+
}
|
|
208
|
+
});
|
|
233
209
|
const errors = getErrorCauses([error]);
|
|
234
|
-
if (logger.consola && errors.length && logLevel ===
|
|
210
|
+
if (logger.consola && errors.length && logLevel === LogMapper2.debug) {
|
|
235
211
|
errors.forEach((err) => {
|
|
236
|
-
logger.consola
|
|
212
|
+
logger.consola?.error(err);
|
|
237
213
|
});
|
|
238
214
|
}
|
|
239
215
|
logger.consola?.error(error);
|
|
240
216
|
process.exit(0);
|
|
241
217
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
218
|
+
if (config.hooks) {
|
|
219
|
+
await executeHooks({ hooks: config.hooks, logger });
|
|
220
|
+
}
|
|
221
|
+
logger.consola?.log(`\u26A1\uFE0FBuild completed ${logLevel !== LogMapper2.silent ? c4.dim(inputPath) : ""}`);
|
|
222
|
+
logger.consola?.box({
|
|
223
|
+
title: `${config.name || ""}`,
|
|
224
|
+
message: summary.join(""),
|
|
225
|
+
style: {
|
|
226
|
+
padding: 2,
|
|
227
|
+
borderColor: "green",
|
|
228
|
+
borderStyle: "rounded"
|
|
229
|
+
}
|
|
230
|
+
});
|
|
246
231
|
}
|
|
247
232
|
|
|
248
233
|
export {
|
|
249
|
-
spinner,
|
|
250
234
|
generate
|
|
251
235
|
};
|
|
252
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-WJ72QPXS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/generate.ts","../src/utils/executeHooks.ts","../src/utils/Writables.ts","../src/utils/getErrorCauses.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/writeLog.ts"],"sourcesContent":["import { createLogger, LogMapper } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { type Config, safeBuild } from '@kubb/core'\nimport type { Args } from './commands/generate.ts'\nimport { executeHooks } from './utils/executeHooks.ts'\nimport { getErrorCauses } from './utils/getErrorCauses.ts'\nimport { getSummary } from './utils/getSummary.ts'\nimport { writeLog } from './utils/writeLog.ts'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport { SingleBar, Presets } from 'cli-progress'\nimport { getRelativePath } from '@kubb/fs'\nimport { relative } from 'node:path'\n\ntype GenerateProps = {\n input?: string\n config: Config\n args: Args\n}\n\nexport async function generate({ input, config, args }: GenerateProps): Promise<void> {\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n name: config.name,\n })\n\n const progress = new SingleBar(\n {\n format: logLevel === LogMapper.info ? '{percentage}% {bar} {value}/{total} files | ETA: {eta}s | {filename}' : '{percentage}% {bar} ETA: {eta}s',\n barsize: 40,\n fps: 5,\n clearOnComplete: true,\n },\n Presets.shades_grey,\n )\n\n logger.on('progress', ({ count, size, file }) => {\n if (count === 0) {\n progress.start(size, 0)\n } else if (count === size) {\n progress.stop()\n } else {\n progress.update(count, { filename: relative(config.root, file.path) || '' })\n }\n })\n\n logger.on('debug', async (messages: string[]) => {\n await writeLog(messages.join('\\n'))\n })\n\n const { root = process.cwd(), ...userConfig } = config\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n logger.emit('start', `Building ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n const definedConfig: Config = {\n root,\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n ...userConfig.output,\n },\n }\n const hrStart = process.hrtime()\n const { pluginManager, error } = await safeBuild({\n config: definedConfig,\n logger,\n })\n\n const summary = getSummary({\n pluginManager,\n config: definedConfig,\n status: error ? 'failed' : 'success',\n hrStart,\n logger,\n })\n\n if (error && logger.consola) {\n logger.consola.error(`Build failed ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n logger.consola.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'red',\n borderStyle: 'rounded',\n },\n })\n\n const errors = getErrorCauses([error])\n if (logger.consola && errors.length && logLevel === LogMapper.debug) {\n errors.forEach((err) => {\n logger.consola?.error(err)\n })\n }\n\n logger.consola?.error(error)\n\n process.exit(0)\n }\n\n if (config.hooks) {\n await executeHooks({ hooks: config.hooks, logger })\n }\n\n logger.consola?.log(`⚡️Build completed ${logLevel !== LogMapper.silent ? c.dim(inputPath) : ''}`)\n\n logger.consola?.box({\n title: `${config.name || ''}`,\n message: summary.join(''),\n style: {\n padding: 2,\n borderColor: 'green',\n borderStyle: 'rounded',\n },\n })\n}\n","import type { Logger } from '@kubb/core/logger'\nimport { execa } from 'execa'\nimport { parseArgsStringToArgv } from 'string-argv'\nimport c from 'tinyrainbow'\n\nimport { ConsolaWritable } from './Writables.ts'\n\nimport type { Config } from '@kubb/core'\nimport { LogMapper } from '@kubb/core/logger'\nimport PQueue from 'p-queue'\n\ntype ExecutingHooksProps = {\n hooks: NonNullable<Config['hooks']>\n logger: Logger\n}\n\nexport async function executeHooks({ hooks, logger }: ExecutingHooksProps): Promise<void> {\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)\n const queue = new PQueue({ concurrency: 1 })\n\n const promises = commands.map(async (command) => {\n const consolaWritable = new ConsolaWritable(logger.consola!, command)\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n await queue.add(async () => {\n logger.emit('start', `Executing hook ${logger.logLevel !== LogMapper.silent ? c.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, {\n detached: true,\n stdout: logger.logLevel === LogMapper.silent ? undefined : ['pipe', consolaWritable],\n stripFinalNewline: true,\n })\n\n logger.emit('success', `Executing hook ${logger.logLevel !== LogMapper.silent ? c.dim(command) : ''}`)\n\n if (subProcess) {\n logger.emit('debug', [subProcess.stdout])\n }\n })\n })\n\n await Promise.all(promises)\n\n logger.emit('success', 'Executing hooks')\n}\n","import { Writable } from 'node:stream'\n\nimport c from 'tinyrainbow'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { ConsolaInstance } from 'consola'\nimport * as process from 'node:process'\n\nexport class ConsolaWritable extends Writable {\n consola: ConsolaInstance\n command: string\n constructor(consola: ConsolaInstance, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.consola = consola\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n process.stdout.write(c.dim(chunk?.toString()))\n\n callback()\n }\n}\n","export function getErrorCauses(errors: Error[]): Error[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n return prev\n }\n prev = [...prev, error]\n\n return prev\n }, [] as Error[])\n .filter(Boolean)\n}\n","import path from 'node:path'\n\nimport { randomCliColour } from '@kubb/core/logger'\n\nimport c from 'tinyrainbow'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { Config, PluginManager } from '@kubb/core'\nimport type { Logger } from '@kubb/core/logger'\n\ntype SummaryProps = {\n pluginManager: PluginManager\n status: 'success' | 'failed'\n hrStart: [number, number]\n config: Config\n logger: Logger\n}\n\nexport function getSummary({ pluginManager, status, hrStart, config, logger }: SummaryProps): string[] {\n const logs: string[] = []\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrStart))\n\n const buildStartPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const buildEndPlugins = pluginManager.executed.filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core').map((item) => item.plugin.name)\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name)\n const pluginsCount = config.plugins?.length || 0\n const files = pluginManager.fileManager.files.sort((a, b) => {\n if (!a.meta?.pluginKey?.[0] || !b.meta?.pluginKey?.[0]) {\n return 0\n }\n if (a.meta?.pluginKey?.[0]?.length < b.meta?.pluginKey?.[0]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[0]?.length > b.meta?.pluginKey?.[0]?.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\n plugins:\n status === 'success'\n ? `${c.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${c.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomCliColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: `${c.yellow(`${elapsedSeconds}s`)} - finished at ${c.yellow(new Date().toLocaleString('en-GB', { timeZone: 'UTC' }))}`,\n output: path.isAbsolute(config.root) ? path.resolve(config.root, config.output.path) : config.root,\n } as const\n\n logs.push(\n [\n [`${c.bold('Plugins:')} ${meta.plugins}`, true],\n [`${c.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${c.bold('Generated:')} ${meta.filesCreated} files`, true],\n [`${c.bold('Time:')} ${meta.time}`, true],\n [`${c.bold('Output:')} ${meta.output}`, true],\n ]\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return logs\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","import { resolve } from 'node:path'\nimport { read, write } from '@kubb/fs'\n\nexport async function writeLog(data: string): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n const path = resolve(process.cwd(), 'kubb-log.log')\n let previousLogs = ''\n\n try {\n previousLogs = await read(resolve(path))\n } catch (_err) {\n /* empty */\n }\n\n return write(path, [previousLogs, data.trim()].filter(Boolean).join('\\n\\n\\n'), { sanity: false })\n}\n"],"mappings":"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","names":["LogMapper","c","c","process","c","c","c","path","LogMapper","c"]}
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
generate
|
|
3
|
-
|
|
4
|
-
} from "./chunk-VGYRBGKV.js";
|
|
2
|
+
generate
|
|
3
|
+
} from "./chunk-WJ72QPXS.js";
|
|
5
4
|
|
|
6
5
|
// src/commands/generate.ts
|
|
7
|
-
import { LogLevel } from "@kubb/core/logger";
|
|
8
6
|
import { defineCommand, showUsage } from "citty";
|
|
9
7
|
import { execa } from "execa";
|
|
10
8
|
import c2 from "tinyrainbow";
|
|
11
|
-
import path from "path";
|
|
12
9
|
|
|
13
10
|
// src/utils/getConfig.ts
|
|
14
11
|
import { isPromise } from "@kubb/core/utils";
|
|
15
12
|
|
|
16
13
|
// src/utils/getPlugins.ts
|
|
17
|
-
import { PackageManager } from "@kubb/core";
|
|
18
14
|
function isJSONPlugins(plugins) {
|
|
19
15
|
return !!plugins?.some((plugin) => {
|
|
20
16
|
return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
|
|
@@ -111,20 +107,21 @@ async function getCosmiConfig(moduleName, config) {
|
|
|
111
107
|
|
|
112
108
|
// src/utils/watcher.ts
|
|
113
109
|
import c from "tinyrainbow";
|
|
110
|
+
import { createLogger } from "@kubb/core/logger";
|
|
114
111
|
async function startWatcher(path2, cb) {
|
|
115
112
|
const { watch } = await import("chokidar");
|
|
116
113
|
const ignored = ["**/{.git,node_modules}/**"];
|
|
114
|
+
const logger = createLogger();
|
|
117
115
|
const watcher = watch(path2, {
|
|
118
116
|
ignorePermissionErrors: true,
|
|
119
117
|
ignored
|
|
120
118
|
});
|
|
121
119
|
watcher.on("all", (type, file) => {
|
|
122
|
-
|
|
123
|
-
spinner.spinner = "clock";
|
|
120
|
+
logger.emit("info", c.yellow(c.bold(`Change detected: ${type} ${file}`)));
|
|
124
121
|
try {
|
|
125
122
|
cb(path2);
|
|
126
123
|
} catch (e) {
|
|
127
|
-
|
|
124
|
+
logger?.emit("warning", c.red("Watcher failed"));
|
|
128
125
|
}
|
|
129
126
|
});
|
|
130
127
|
return;
|
|
@@ -132,6 +129,8 @@ async function startWatcher(path2, cb) {
|
|
|
132
129
|
|
|
133
130
|
// src/commands/generate.ts
|
|
134
131
|
import { PromiseManager, isInputPath } from "@kubb/core";
|
|
132
|
+
import path from "path";
|
|
133
|
+
import { createLogger as createLogger2, LogMapper } from "@kubb/core/logger";
|
|
135
134
|
var args = {
|
|
136
135
|
config: {
|
|
137
136
|
type: "string",
|
|
@@ -142,8 +141,8 @@ var args = {
|
|
|
142
141
|
type: "string",
|
|
143
142
|
description: "Info, silent or debug",
|
|
144
143
|
alias: "l",
|
|
145
|
-
default:
|
|
146
|
-
valueHint:
|
|
144
|
+
default: "info",
|
|
145
|
+
valueHint: "silent|info|debug"
|
|
147
146
|
},
|
|
148
147
|
watch: {
|
|
149
148
|
type: "boolean",
|
|
@@ -176,9 +175,6 @@ var command = defineCommand({
|
|
|
176
175
|
description: "[input] Generate files based on a 'kubb.config.ts' file"
|
|
177
176
|
},
|
|
178
177
|
args,
|
|
179
|
-
setup() {
|
|
180
|
-
spinner.start("\u{1F50D} Loading config");
|
|
181
|
-
},
|
|
182
178
|
async run({ args: args2 }) {
|
|
183
179
|
const input = args2._[0];
|
|
184
180
|
if (args2.help) {
|
|
@@ -186,15 +182,20 @@ var command = defineCommand({
|
|
|
186
182
|
return;
|
|
187
183
|
}
|
|
188
184
|
if (args2.debug) {
|
|
189
|
-
args2.logLevel =
|
|
185
|
+
args2.logLevel = "debug";
|
|
190
186
|
}
|
|
191
187
|
if (args2.bun) {
|
|
192
188
|
const command2 = process.argv.splice(2).filter((item) => item !== "--bun");
|
|
193
189
|
await execa("bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
|
|
194
190
|
return;
|
|
195
191
|
}
|
|
192
|
+
const logLevel = LogMapper[args2.logLevel] || 3;
|
|
193
|
+
const logger = createLogger2({
|
|
194
|
+
logLevel
|
|
195
|
+
});
|
|
196
|
+
logger.emit("start", "Loading config");
|
|
196
197
|
const result = await getCosmiConfig("kubb", args2.config);
|
|
197
|
-
|
|
198
|
+
logger.emit("success", `Config loaded(${c2.dim(path.relative(process.cwd(), result.filepath))})`);
|
|
198
199
|
const config = await getConfig(result, args2);
|
|
199
200
|
if (args2.watch) {
|
|
200
201
|
if (Array.isArray(config)) {
|
|
@@ -203,8 +204,7 @@ var command = defineCommand({
|
|
|
203
204
|
if (isInputPath(config)) {
|
|
204
205
|
return startWatcher([input || config.input.path], async (paths) => {
|
|
205
206
|
await generate({ config, args: args2 });
|
|
206
|
-
|
|
207
|
-
spinner.start(c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
207
|
+
logger.emit("start", c2.yellow(c2.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
208
208
|
});
|
|
209
209
|
}
|
|
210
210
|
}
|
|
@@ -220,4 +220,4 @@ var generate_default = command;
|
|
|
220
220
|
export {
|
|
221
221
|
generate_default as default
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=generate-
|
|
223
|
+
//# sourceMappingURL=generate-LZOUPH5K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/generate.ts","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/watcher.ts"],"sourcesContent":["import { defineCommand, showUsage } from 'citty'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { execa } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nimport { PromiseManager, isInputPath } from '@kubb/core'\nimport { generate } from '../generate.ts'\nimport path from 'node:path'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n logLevel: {\n type: 'string',\n description: 'Info, silent or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n bun: {\n type: 'boolean',\n description: 'Run Kubb with Bun',\n alias: 'b',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\n default: false,\n },\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nexport type Args = ParsedArgs<typeof args>\n\nconst command = defineCommand({\n meta: {\n name: 'generate',\n description: \"[input] Generate files based on a 'kubb.config.ts' file\",\n },\n args,\n async run({ args }) {\n const input = args._[0]\n\n if (args.help) {\n showUsage(command)\n return\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.bun) {\n const command = process.argv.splice(2).filter((item) => item !== '--bun')\n\n await execa('bkubb', command, { stdout: process.stdout, stderr: process.stderr })\n return\n }\n\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n })\n\n logger.emit('start', 'Loading config')\n\n const result = await getCosmiConfig('kubb', args.config)\n logger.emit('success', `Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, args)\n\n if (args.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple Configs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, args })\n logger.emit('start', c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, args }))\n\n return promiseManager.run('seq', promises)\n }\n\n await generate({ input, config, args })\n },\n})\n\nexport default command\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { Config, UserConfig } from '@kubb/core'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\n/**\n * Converting UserConfig to Config without a change in the object beside the JSON convert.\n */\nexport async function getConfig(result: CosmiconfigResult, args: Args): Promise<Array<Config> | Config> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return {\n ...item,\n plugins: item.plugins ? await getPlugins(item.plugins) : undefined,\n }\n }) as unknown as Array<Promise<Config>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as Config\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import { bundleRequire } from 'bundle-require'\nimport { cosmiconfig } from 'cosmiconfig'\n\nimport type { UserConfig, defineConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n })\n\n return mod.default\n}\n\nconst jsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n format: 'cjs',\n })\n\n return mod.default || mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","import c from 'tinyrainbow'\nimport { createLogger } from '@kubb/core/logger'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n const logger = createLogger()\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n logger.emit('info', c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n\n try {\n cb(path)\n } catch (e) {\n logger?.emit('warning', c.red('Watcher failed'))\n }\n })\n\n return\n}\n"],"mappings":"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","names":["c","args","path","createLogger","args","command","c"]}
|
|
@@ -3,22 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
var _chunkNKSXZ2SMcjs = require('./chunk-NKSXZ2SM.cjs');
|
|
6
|
+
var _chunkH3BA33NFcjs = require('./chunk-H3BA33NF.cjs');
|
|
8
7
|
|
|
9
8
|
// src/commands/generate.ts
|
|
10
|
-
|
|
11
|
-
var _logger = require('@kubb/core/logger');
|
|
9
|
+
_chunkH3BA33NFcjs.init_cjs_shims.call(void 0, );
|
|
12
10
|
var _citty = require('citty');
|
|
13
|
-
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
14
11
|
|
|
15
12
|
// src/utils/getConfig.ts
|
|
16
|
-
|
|
13
|
+
_chunkH3BA33NFcjs.init_cjs_shims.call(void 0, );
|
|
17
14
|
var _utils = require('@kubb/core/utils');
|
|
18
15
|
|
|
19
16
|
// src/utils/getPlugins.ts
|
|
20
|
-
|
|
21
|
-
var _core = require('@kubb/core');
|
|
17
|
+
_chunkH3BA33NFcjs.init_cjs_shims.call(void 0, );
|
|
22
18
|
function isJSONPlugins(plugins) {
|
|
23
19
|
return !!_optionalChain([plugins, 'optionalAccess', _2 => _2.some, 'call', _3 => _3((plugin) => {
|
|
24
20
|
return Array.isArray(plugin) && typeof _optionalChain([plugin, 'optionalAccess', _4 => _4.at, 'call', _5 => _5(0)]) === "string";
|
|
@@ -66,7 +62,7 @@ async function getConfig(result, args2) {
|
|
|
66
62
|
}
|
|
67
63
|
|
|
68
64
|
// src/utils/getCosmiConfig.ts
|
|
69
|
-
|
|
65
|
+
_chunkH3BA33NFcjs.init_cjs_shims.call(void 0, );
|
|
70
66
|
var _bundlerequire = require('bundle-require');
|
|
71
67
|
var _cosmiconfig = require('cosmiconfig');
|
|
72
68
|
var tsLoader = async (configFile) => {
|
|
@@ -115,27 +111,30 @@ async function getCosmiConfig(moduleName, config) {
|
|
|
115
111
|
}
|
|
116
112
|
|
|
117
113
|
// src/utils/watcher.ts
|
|
118
|
-
|
|
114
|
+
_chunkH3BA33NFcjs.init_cjs_shims.call(void 0, );
|
|
115
|
+
var _logger = require('@kubb/core/logger');
|
|
119
116
|
async function startWatcher(path2, cb) {
|
|
120
117
|
const { watch } = await Promise.resolve().then(() => _interopRequireWildcard(require("chokidar")));
|
|
121
118
|
const ignored = ["**/{.git,node_modules}/**"];
|
|
119
|
+
const logger = _logger.createLogger.call(void 0, );
|
|
122
120
|
const watcher = watch(path2, {
|
|
123
121
|
ignorePermissionErrors: true,
|
|
124
122
|
ignored
|
|
125
123
|
});
|
|
126
124
|
watcher.on("all", (type, file) => {
|
|
127
|
-
|
|
128
|
-
_chunkNKSXZ2SMcjs.spinner.spinner = "clock";
|
|
125
|
+
logger.emit("info", _chunkH3BA33NFcjs.p.yellow(_chunkH3BA33NFcjs.p.bold(`Change detected: ${type} ${file}`)));
|
|
129
126
|
try {
|
|
130
127
|
cb(path2);
|
|
131
128
|
} catch (e) {
|
|
132
|
-
|
|
129
|
+
_optionalChain([logger, 'optionalAccess', _8 => _8.emit, 'call', _9 => _9("warning", _chunkH3BA33NFcjs.p.red("Watcher failed"))]);
|
|
133
130
|
}
|
|
134
131
|
});
|
|
135
132
|
return;
|
|
136
133
|
}
|
|
137
134
|
|
|
138
135
|
// src/commands/generate.ts
|
|
136
|
+
var _core = require('@kubb/core');
|
|
137
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
139
138
|
|
|
140
139
|
var args = {
|
|
141
140
|
config: {
|
|
@@ -147,8 +146,8 @@ var args = {
|
|
|
147
146
|
type: "string",
|
|
148
147
|
description: "Info, silent or debug",
|
|
149
148
|
alias: "l",
|
|
150
|
-
default:
|
|
151
|
-
valueHint:
|
|
149
|
+
default: "info",
|
|
150
|
+
valueHint: "silent|info|debug"
|
|
152
151
|
},
|
|
153
152
|
watch: {
|
|
154
153
|
type: "boolean",
|
|
@@ -181,9 +180,6 @@ var command = _citty.defineCommand.call(void 0, {
|
|
|
181
180
|
description: "[input] Generate files based on a 'kubb.config.ts' file"
|
|
182
181
|
},
|
|
183
182
|
args,
|
|
184
|
-
setup() {
|
|
185
|
-
_chunkNKSXZ2SMcjs.spinner.start("\u{1F50D} Loading config");
|
|
186
|
-
},
|
|
187
183
|
async run({ args: args2 }) {
|
|
188
184
|
const input = args2._[0];
|
|
189
185
|
if (args2.help) {
|
|
@@ -191,15 +187,20 @@ var command = _citty.defineCommand.call(void 0, {
|
|
|
191
187
|
return;
|
|
192
188
|
}
|
|
193
189
|
if (args2.debug) {
|
|
194
|
-
args2.logLevel =
|
|
190
|
+
args2.logLevel = "debug";
|
|
195
191
|
}
|
|
196
192
|
if (args2.bun) {
|
|
197
193
|
const command2 = process.argv.splice(2).filter((item) => item !== "--bun");
|
|
198
|
-
await
|
|
194
|
+
await _chunkH3BA33NFcjs.execa.call(void 0, "bkubb", command2, { stdout: process.stdout, stderr: process.stderr });
|
|
199
195
|
return;
|
|
200
196
|
}
|
|
197
|
+
const logLevel = _logger.LogMapper[args2.logLevel] || 3;
|
|
198
|
+
const logger = _logger.createLogger.call(void 0, {
|
|
199
|
+
logLevel
|
|
200
|
+
});
|
|
201
|
+
logger.emit("start", "Loading config");
|
|
201
202
|
const result = await getCosmiConfig("kubb", args2.config);
|
|
202
|
-
|
|
203
|
+
logger.emit("success", `Config loaded(${_chunkH3BA33NFcjs.p.dim(_path2.default.relative(process.cwd(), result.filepath))})`);
|
|
203
204
|
const config = await getConfig(result, args2);
|
|
204
205
|
if (args2.watch) {
|
|
205
206
|
if (Array.isArray(config)) {
|
|
@@ -207,22 +208,21 @@ var command = _citty.defineCommand.call(void 0, {
|
|
|
207
208
|
}
|
|
208
209
|
if (_core.isInputPath.call(void 0, config)) {
|
|
209
210
|
return startWatcher([input || config.input.path], async (paths) => {
|
|
210
|
-
await
|
|
211
|
-
|
|
212
|
-
_chunkNKSXZ2SMcjs.spinner.start(_chunkNKSXZ2SMcjs.p.yellow(_chunkNKSXZ2SMcjs.p.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
211
|
+
await _chunkH3BA33NFcjs.generate.call(void 0, { config, args: args2 });
|
|
212
|
+
logger.emit("start", _chunkH3BA33NFcjs.p.yellow(_chunkH3BA33NFcjs.p.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
if (Array.isArray(config)) {
|
|
217
217
|
const promiseManager = new (0, _core.PromiseManager)();
|
|
218
|
-
const promises = config.map((item) => () =>
|
|
218
|
+
const promises = config.map((item) => () => _chunkH3BA33NFcjs.generate.call(void 0, { input, config: item, args: args2 }));
|
|
219
219
|
return promiseManager.run("seq", promises);
|
|
220
220
|
}
|
|
221
|
-
await
|
|
221
|
+
await _chunkH3BA33NFcjs.generate.call(void 0, { input, config, args: args2 });
|
|
222
222
|
}
|
|
223
223
|
});
|
|
224
224
|
var generate_default = command;
|
|
225
225
|
|
|
226
226
|
|
|
227
227
|
exports.default = generate_default;
|
|
228
|
-
//# sourceMappingURL=generate-
|
|
228
|
+
//# sourceMappingURL=generate-M3IAQ4OY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/kubb/kubb/packages/cli/dist/generate-M3IAQ4OY.cjs","../src/commands/generate.ts","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/watcher.ts"],"names":["args"],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACPA,8CAAA,CAAA;AAAA,8BAAyC;ADUzC;AACA;AEXA,8CAAA,CAAA;AAAA,yCAA0B;AFc1B;AACA;AGfA,8CAAA,CAAA;AAEA,SAAS,aAAA,CAAc,OAAA,EAAgC;AACrD,EAAA,OAAO,CAAC,iBAAE,OAAA,6BAAiB,IAAA,mBAAK,CAAC,MAAA,EAAA,GAAgB;AAC/C,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,EAAA,GAAK,uBAAO,MAAA,6BAAQ,EAAA,mBAAG,CAAC,IAAA,IAAM,QAAA;AAAA,EAC3D,CAAC,GAAA;AACH;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAgD;AACvE,EAAA,OAAO,QAAA,WAAmB,OAAA,GAAU,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAC5D;AAEO,SAAS,UAAA,CAAW,OAAA,EAAgE;AACzF,EAAA,GAAA,CAAI,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,sGAAsG,CAAA;AAAA,EACxH;AAEA,EAAA,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA,CAAM,oGAAoG,CAAA;AAAA,EACtH;AAEA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAChC;AHYA;AACA;AExBA,MAAA,SAAsB,SAAA,CAAU,MAAA,EAA2BA,KAAAA,EAA6C;AACtG,EAAA,MAAM,OAAA,kBAAS,MAAA,6BAAQ,QAAA;AACvB,EAAA,IAAI,eAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAG3C,EAAA,GAAA,CAAI,OAAO,OAAA,IAAW,UAAA,EAAY;AAChC,IAAA,MAAM,gBAAA,EAAkB,MAAA,CAAOA,KAAI,CAAA;AACnC,IAAA,GAAA,CAAI,8BAAA,eAAyB,CAAA,EAAG;AAC9B,MAAA,eAAA,EAAiB,eAAA;AAAA,IACnB;AACA,IAAA,eAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,eAAe,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,WAAA,EAAa,MAAM,cAAA;AAEvB,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAA,MAAM,SAAA,EAAW,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,IAAA,EAAA,GAAS;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,OAAA,EAAS,IAAA,CAAK,QAAA,EAAU,MAAM,UAAA,CAAW,IAAA,CAAK,OAAO,EAAA,EAAI,KAAA;AAAA,MAC3D,CAAA;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,EAC7B;AAEA,EAAA,WAAA,EAAa;AAAA,IACX,GAAG,UAAA;AAAA,IACH,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,MAAM,UAAA,CAAW,UAAA,CAAW,OAAO,EAAA,EAAI,KAAA;AAAA,EACvE,CAAA;AAEA,EAAA,OAAO,UAAA;AACT;AFmBA;AACA;AI/DA,8CAAA,CAAA;AAAA,+CAA8B;AAC9B,0CAA4B;AAU5B,IAAM,SAAA,EAAW,MAAA,CAAO,UAAA,EAAA,GAAuB;AAC7C,EAAA,MAAM,EAAE,IAAI,EAAA,EAAI,MAAM,0CAAA;AAAc,IAClC,QAAA,EAAU,UAAA;AAAA,IACV,qBAAA,EAAuB;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,OAAO,GAAA,CAAI,OAAA;AACb,CAAA;AAYA,MAAA,SAAsB,cAAA,CAAe,UAAA,EAAoB,MAAA,EAA6C;AACpG,EAAA,MAAM,aAAA,EAAe;AAAA,IACnB,cAAA;AAAA,IACA,CAAA,CAAA,EAAI,UAAU,CAAA,EAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,OAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,OAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,MAAA,CAAA;AAAA,IAEd,CAAA,CAAA,EAAI,UAAU,CAAA,KAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,KAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,MAAA,CAAA;AAAA,IACd,CAAA,CAAA,EAAI,UAAU,CAAA,MAAA,CAAA;AAAA,IAEd,CAAA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AAAc,MAAA;AAEV,QAAA;AAA6B,MAAA;AAC9B,MAAA;AAEC,QAAA;AAA6B,MAAA;AAC9B,MAAA;AAEH,IAAA;AACA,IAAA;AAAS,MAAA;AAET,IAAA;AACD,EAAA;AAED,EAAA;AAEA,EAAA;AACE,IAAA;AACF,EAAA;AAEA,EAAA;AACF;AJwCK;AACA;AKhHL;AACA;AAEA;AACE,EAAA;AAEA,EAAA;AACA,EAAA;AAEA,EAAA;AACE,IAAA;AACA,IAAA;AACD,EAAA;AACD,EAAA;AACE,IAAA;AAEA,IAAA;AACE,MAAA;AACF,IAAA;AACE,sBAAA;AACF,IAAA;AACD,EAAA;AAED,EAAA;AACF;AL6GK;AACA;AC7HL;AAEA;AACA;AAEM;AACJ,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAIM;AACJ,EAAA;AACE,IAAA;AACA,IAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACE,IAAA;AAEA,IAAA;AACE,MAAA;AACA,MAAA;AACF,IAAA;AAEA,IAAA;AACE,MAAA;AACF,IAAA;AAEA,IAAA;AACE,MAAA;AAEA,MAAA;AACA,MAAA;AACF,IAAA;AAEA,IAAA;AACA,IAAA;AAA4B,MAAA;AAE3B,IAAA;AAED,IAAA;AAEA,IAAA;AACA,IAAA;AAEA,IAAA;AAEA,IAAA;AACE,MAAA;AACE,QAAA;AAAiE,MAAA;AAGnE,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AAAuF,QAAA;AACxF,MAAA;AAEL,IAAA;AAEA,IAAA;AACE,MAAA;AACA,MAAA;AAEA,MAAA;AACF,IAAA;AAEA,IAAA;AACF,EAAA;AACD;AAEM;AD4GF;AACA;AACA","file":"/home/runner/work/kubb/kubb/packages/cli/dist/generate-M3IAQ4OY.cjs","sourcesContent":[null,"import { defineCommand, showUsage } from 'citty'\nimport type { ArgsDef, ParsedArgs } from 'citty'\nimport { execa } from 'execa'\nimport c from 'tinyrainbow'\n\nimport { getConfig } from '../utils/getConfig.ts'\nimport { getCosmiConfig } from '../utils/getCosmiConfig.ts'\nimport { startWatcher } from '../utils/watcher.ts'\n\nimport { PromiseManager, isInputPath } from '@kubb/core'\nimport { generate } from '../generate.ts'\nimport path from 'node:path'\nimport { createLogger, LogMapper } from '@kubb/core/logger'\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n logLevel: {\n type: 'string',\n description: 'Info, silent or debug',\n alias: 'l',\n default: 'info',\n valueHint: 'silent|info|debug',\n },\n watch: {\n type: 'boolean',\n description: 'Watch mode based on the input file',\n alias: 'w',\n default: false,\n },\n bun: {\n type: 'boolean',\n description: 'Run Kubb with Bun',\n alias: 'b',\n default: false,\n },\n debug: {\n type: 'boolean',\n description: 'Override logLevel to debug',\n alias: 'd',\n default: false,\n },\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nexport type Args = ParsedArgs<typeof args>\n\nconst command = defineCommand({\n meta: {\n name: 'generate',\n description: \"[input] Generate files based on a 'kubb.config.ts' file\",\n },\n args,\n async run({ args }) {\n const input = args._[0]\n\n if (args.help) {\n showUsage(command)\n return\n }\n\n if (args.debug) {\n args.logLevel = 'debug'\n }\n\n if (args.bun) {\n const command = process.argv.splice(2).filter((item) => item !== '--bun')\n\n await execa('bkubb', command, { stdout: process.stdout, stderr: process.stderr })\n return\n }\n\n const logLevel = LogMapper[args.logLevel as keyof typeof LogMapper] || 3\n const logger = createLogger({\n logLevel,\n })\n\n logger.emit('start', 'Loading config')\n\n const result = await getCosmiConfig('kubb', args.config)\n logger.emit('success', `Config loaded(${c.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, args)\n\n if (args.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple Configs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, args })\n logger.emit('start', c.yellow(c.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, args }))\n\n return promiseManager.run('seq', promises)\n }\n\n await generate({ input, config, args })\n },\n})\n\nexport default command\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { Config, UserConfig } from '@kubb/core'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\n/**\n * Converting UserConfig to Config without a change in the object beside the JSON convert.\n */\nexport async function getConfig(result: CosmiconfigResult, args: Args): Promise<Array<Config> | Config> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return {\n ...item,\n plugins: item.plugins ? await getPlugins(item.plugins) : undefined,\n }\n }) as unknown as Array<Promise<Config>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as Config\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import { bundleRequire } from 'bundle-require'\nimport { cosmiconfig } from 'cosmiconfig'\n\nimport type { UserConfig, defineConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n })\n\n return mod.default\n}\n\nconst jsLoader = async (configFile: string) => {\n const { mod } = await bundleRequire({\n filepath: configFile,\n preserveTemporaryFile: false,\n format: 'cjs',\n })\n\n return mod.default || mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","import c from 'tinyrainbow'\nimport { createLogger } from '@kubb/core/logger'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n const logger = createLogger()\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n logger.emit('info', c.yellow(c.bold(`Change detected: ${type} ${file}`)))\n\n try {\n cb(path)\n } catch (e) {\n logger?.emit('warning', c.red('Watcher failed'))\n }\n })\n\n return\n}\n"]}
|