@kubb/cli 1.1.9 → 1.1.11
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/index.cjs +64 -33
- package/dist/index.js +64 -33
- package/package.json +6 -6
- package/src/run.ts +25 -9
- package/src/utils/OraWritable.ts +20 -0
- package/src/utils/index.ts +1 -0
package/dist/index.cjs
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
var pathParser = require('path');
|
|
5
5
|
var commander = require('commander');
|
|
6
6
|
var ora = require('ora');
|
|
7
|
-
var
|
|
7
|
+
var pc3 = require('picocolors');
|
|
8
8
|
var core = require('@kubb/core');
|
|
9
9
|
var execa = require('execa');
|
|
10
10
|
var PrettyError = require('pretty-error');
|
|
11
11
|
var stringArgv = require('string-argv');
|
|
12
|
+
var stream = require('stream');
|
|
12
13
|
var mod = require('module');
|
|
13
14
|
var url = require('url');
|
|
14
15
|
var cosmiconfig = require('cosmiconfig');
|
|
@@ -19,7 +20,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
19
20
|
|
|
20
21
|
var pathParser__default = /*#__PURE__*/_interopDefault(pathParser);
|
|
21
22
|
var ora__default = /*#__PURE__*/_interopDefault(ora);
|
|
22
|
-
var
|
|
23
|
+
var pc3__default = /*#__PURE__*/_interopDefault(pc3);
|
|
23
24
|
var PrettyError__default = /*#__PURE__*/_interopDefault(PrettyError);
|
|
24
25
|
var mod__default = /*#__PURE__*/_interopDefault(mod);
|
|
25
26
|
var tsNode__default = /*#__PURE__*/_interopDefault(tsNode);
|
|
@@ -34,7 +35,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
34
35
|
});
|
|
35
36
|
|
|
36
37
|
// package.json
|
|
37
|
-
var version = "1.1.
|
|
38
|
+
var version = "1.1.11";
|
|
38
39
|
var presets = {
|
|
39
40
|
simple: {
|
|
40
41
|
"kubb.config": `
|
|
@@ -67,15 +68,15 @@ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent",
|
|
|
67
68
|
const presetMeta = presets[preset];
|
|
68
69
|
const path = pathParser__default.default.resolve(process.cwd(), "./kubb.config.js");
|
|
69
70
|
const installCommand = packageManager === "npm" ? "install" : "add";
|
|
70
|
-
spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${
|
|
71
|
+
spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3__default.default.dim(path)}`);
|
|
71
72
|
await core.write(presetMeta["kubb.config"], path);
|
|
72
|
-
spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${
|
|
73
|
+
spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3__default.default.dim(path)}`);
|
|
73
74
|
const data = await Promise.all([
|
|
74
75
|
execa.$`npm init es6 -y`,
|
|
75
76
|
...presetMeta.packages.map(async (pack) => {
|
|
76
|
-
spinner2.start(`\u{1F4C0} Installing ${
|
|
77
|
+
spinner2.start(`\u{1F4C0} Installing ${pc3__default.default.dim(pack)}`);
|
|
77
78
|
const { stdout } = await execa.$({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
|
|
78
|
-
spinner2.succeed(`\u{1F4C0} Installed ${
|
|
79
|
+
spinner2.succeed(`\u{1F4C0} Installed ${pc3__default.default.dim(pack)}`);
|
|
79
80
|
return stdout;
|
|
80
81
|
})
|
|
81
82
|
]);
|
|
@@ -83,7 +84,7 @@ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent",
|
|
|
83
84
|
data.forEach((text) => console.log(text));
|
|
84
85
|
}
|
|
85
86
|
} catch (error) {
|
|
86
|
-
spinner2.fail(
|
|
87
|
+
spinner2.fail(pc3__default.default.red(`Something went wrong
|
|
87
88
|
|
|
88
89
|
${error?.message}`));
|
|
89
90
|
}
|
|
@@ -99,18 +100,42 @@ function parseHrtimeToSeconds(hrtime) {
|
|
|
99
100
|
function parseText(baseText, config, logLevel = "silent") {
|
|
100
101
|
return `${baseText}${config[logLevel] || ""}`;
|
|
101
102
|
}
|
|
103
|
+
var OraWritable = class extends stream.Writable {
|
|
104
|
+
command;
|
|
105
|
+
spinner;
|
|
106
|
+
constructor(spinner2, command, opts) {
|
|
107
|
+
super(opts);
|
|
108
|
+
this.command = command;
|
|
109
|
+
this.spinner = spinner2;
|
|
110
|
+
}
|
|
111
|
+
_write(chunk, _encoding, callback) {
|
|
112
|
+
this.spinner.suffixText = `
|
|
113
|
+
|
|
114
|
+
${pc3__default.default.bold(pc3__default.default.blue(this.command))}: ${chunk?.toString()}`;
|
|
115
|
+
callback();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
102
118
|
|
|
103
119
|
// src/run.ts
|
|
104
120
|
async function run({ config, options, spinner: spinner2 }) {
|
|
105
121
|
const hrstart = process.hrtime();
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
122
|
+
const [log] = core.throttle((message, { logLevel, params }) => {
|
|
123
|
+
if (logLevel === "error") {
|
|
124
|
+
spinner2.fail(pc3__default.default.red(`${message}
|
|
125
|
+
|
|
126
|
+
` || `Something went wrong
|
|
127
|
+
|
|
128
|
+
`));
|
|
129
|
+
} else if (logLevel === "info") {
|
|
130
|
+
if (message) {
|
|
131
|
+
spinner2.text = message;
|
|
110
132
|
} else {
|
|
111
|
-
spinner2.
|
|
133
|
+
spinner2.text = `\u{1FA82} Executing ${params?.hookName || "unknown"}(${pc3__default.default.yellow(params?.pluginName || "unknown")})`;
|
|
112
134
|
}
|
|
113
|
-
}
|
|
135
|
+
}
|
|
136
|
+
}, 100);
|
|
137
|
+
const logger = {
|
|
138
|
+
log,
|
|
114
139
|
spinner: spinner2
|
|
115
140
|
};
|
|
116
141
|
const onDone = async (hooks, logLevel) => {
|
|
@@ -124,15 +149,21 @@ async function run({ config, options, spinner: spinner2 }) {
|
|
|
124
149
|
commands = hooks.done;
|
|
125
150
|
}
|
|
126
151
|
const promises = commands.map(async (command) => {
|
|
152
|
+
const oraWritable = new OraWritable(spinner2, command);
|
|
127
153
|
const [cmd, ..._args] = [...stringArgv.parseArgsStringToArgv(command)];
|
|
128
|
-
spinner2.start(parseText(`\u{1FA82} Executing hooks(${
|
|
129
|
-
const { stdout } = await execa.execa(cmd, _args);
|
|
130
|
-
spinner2.
|
|
154
|
+
spinner2.start(parseText(`\u{1FA82} Executing hooks(${pc3__default.default.yellow("done")})`, { info: ` ${pc3__default.default.dim(command)}` }, logLevel));
|
|
155
|
+
const { stdout } = await execa.execa(cmd, _args, {}).pipeStdout(oraWritable);
|
|
156
|
+
spinner2.suffixText = "";
|
|
157
|
+
oraWritable.destroy();
|
|
131
158
|
if (logLevel === "info") {
|
|
159
|
+
spinner2.succeed(parseText(`\u{1FA82} Executing hooks(${pc3__default.default.yellow("done")})`, { info: ` ${pc3__default.default.dim(command)}` }, logLevel));
|
|
132
160
|
console.log(stdout);
|
|
133
161
|
}
|
|
134
162
|
});
|
|
135
163
|
await Promise.all(promises);
|
|
164
|
+
if (logLevel === "silent") {
|
|
165
|
+
spinner2.succeed(parseText(`\u{1FA82} Executing hooks(${pc3__default.default.yellow("done")})`, {}, logLevel));
|
|
166
|
+
}
|
|
136
167
|
};
|
|
137
168
|
const printSummary = (pluginManager, status) => {
|
|
138
169
|
const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
|
|
@@ -153,26 +184,26 @@ async function run({ config, options, spinner: spinner2 }) {
|
|
|
153
184
|
return 0;
|
|
154
185
|
});
|
|
155
186
|
const meta = {
|
|
156
|
-
plugins: status === "success" ? `${
|
|
187
|
+
plugins: status === "success" ? `${pc3__default.default.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3__default.default.red(`${pluginsCount - buildStartPlugins.length} failed`)}, ${pluginsCount} total`,
|
|
157
188
|
filesCreated: files.length,
|
|
158
|
-
time:
|
|
189
|
+
time: pc3__default.default.yellow(`${elapsedSeconds}s`),
|
|
159
190
|
output: pathParser__default.default.resolve(config.root, config.output.path)
|
|
160
191
|
};
|
|
161
192
|
console.log(`
|
|
162
|
-
${
|
|
163
|
-
${
|
|
164
|
-
${
|
|
165
|
-
${
|
|
193
|
+
${pc3__default.default.bold("Plugins:")} ${meta.plugins}
|
|
194
|
+
${pc3__default.default.bold("Generated:")} ${meta.filesCreated} files
|
|
195
|
+
${pc3__default.default.bold("Time:")} ${meta.time}
|
|
196
|
+
${pc3__default.default.bold("Output:")} ${meta.output}
|
|
166
197
|
`);
|
|
167
198
|
if (options.debug) {
|
|
168
|
-
console.log(`${
|
|
169
|
-
console.log(`${files.map((file) => `${
|
|
199
|
+
console.log(`${pc3__default.default.bold("Generated files:")}`);
|
|
200
|
+
console.log(`${files.map((file) => `${pc3__default.default.blue(file.meta?.pluginName)} ${file.path}`).join("\n")}`);
|
|
170
201
|
}
|
|
171
202
|
};
|
|
172
203
|
const printErrors = (error) => {
|
|
173
204
|
const pe = new PrettyError__default.default();
|
|
174
205
|
if (options.debug) {
|
|
175
|
-
spinner2.fail(
|
|
206
|
+
spinner2.fail(pc3__default.default.red(`Something went wrong
|
|
176
207
|
|
|
177
208
|
`));
|
|
178
209
|
const causedError = error?.cause;
|
|
@@ -181,7 +212,7 @@ ${pc2__default.default.bold("Generated:")} ${meta.filesCreated} files
|
|
|
181
212
|
console.log(pe.render(causedError));
|
|
182
213
|
}
|
|
183
214
|
} else {
|
|
184
|
-
spinner2.fail(
|
|
215
|
+
spinner2.fail(pc3__default.default.red(`Something went wrong
|
|
185
216
|
|
|
186
217
|
${error?.message}`));
|
|
187
218
|
}
|
|
@@ -190,7 +221,7 @@ ${error?.message}`));
|
|
|
190
221
|
const { root, ...userConfig } = config;
|
|
191
222
|
const logLevel = options.logLevel ?? userConfig.logLevel ?? "silent";
|
|
192
223
|
const inputPath = options.input ?? userConfig.input.path;
|
|
193
|
-
spinner2.start(parseText(`\u{1F680} Building`, { info: `(${
|
|
224
|
+
spinner2.start(parseText(`\u{1F680} Building`, { info: `(${pc3__default.default.dim(inputPath)})` }, logLevel));
|
|
194
225
|
const output = await core.build({
|
|
195
226
|
config: {
|
|
196
227
|
root: process.cwd(),
|
|
@@ -207,7 +238,7 @@ ${error?.message}`));
|
|
|
207
238
|
},
|
|
208
239
|
logger
|
|
209
240
|
});
|
|
210
|
-
spinner2.succeed(parseText(`\u{1F680} Build completed`, { info: `(${
|
|
241
|
+
spinner2.succeed(parseText(`\u{1F680} Build completed`, { info: `(${pc3__default.default.dim(inputPath)})` }, logLevel));
|
|
211
242
|
await onDone(config.hooks, logLevel);
|
|
212
243
|
printSummary(output.pluginManager, "success");
|
|
213
244
|
} catch (error) {
|
|
@@ -296,12 +327,12 @@ async function startWatcher(cb, options) {
|
|
|
296
327
|
ignored
|
|
297
328
|
});
|
|
298
329
|
watcher.on("all", (type, file) => {
|
|
299
|
-
spinner2.succeed(
|
|
330
|
+
spinner2.succeed(pc3__default.default.yellow(pc3__default.default.bold(`Change detected: ${type} ${file}`)));
|
|
300
331
|
spinner2.spinner = "clock";
|
|
301
332
|
try {
|
|
302
333
|
cb(options.path);
|
|
303
334
|
} catch (e) {
|
|
304
|
-
spinner2.warn(
|
|
335
|
+
spinner2.warn(pc3__default.default.red("Watcher failed"));
|
|
305
336
|
}
|
|
306
337
|
});
|
|
307
338
|
}
|
|
@@ -382,14 +413,14 @@ var program = new commander.Command(moduleName).description("Kubb").action(async
|
|
|
382
413
|
}
|
|
383
414
|
spinner.start("\u{1F4BE} Loading config");
|
|
384
415
|
const result = await getCosmiConfig(moduleName, options.config);
|
|
385
|
-
spinner.succeed(`\u{1F4BE} Config loaded(${
|
|
416
|
+
spinner.succeed(`\u{1F4BE} Config loaded(${pc3__default.default.dim(pathParser__default.default.relative(process.cwd(), result.filepath))})`);
|
|
386
417
|
if (options.watch) {
|
|
387
418
|
const config = await getConfig(result, options);
|
|
388
419
|
startWatcher(
|
|
389
420
|
async (paths) => {
|
|
390
421
|
await run({ config, spinner, options });
|
|
391
422
|
spinner.spinner = "simpleDotsScrolling";
|
|
392
|
-
spinner.start(
|
|
423
|
+
spinner.start(pc3__default.default.yellow(pc3__default.default.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
393
424
|
},
|
|
394
425
|
{
|
|
395
426
|
spinner,
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,12 @@ import { createRequire } from 'module';
|
|
|
3
3
|
import pathParser from 'node:path';
|
|
4
4
|
import { Command, Option } from 'commander';
|
|
5
5
|
import ora from 'ora';
|
|
6
|
-
import
|
|
7
|
-
import { write, build, ParallelPluginError, PluginError, isPromise } from '@kubb/core';
|
|
6
|
+
import pc3 from 'picocolors';
|
|
7
|
+
import { write, throttle, build, ParallelPluginError, PluginError, isPromise } from '@kubb/core';
|
|
8
8
|
import { $, execa } from 'execa';
|
|
9
9
|
import PrettyError from 'pretty-error';
|
|
10
10
|
import { parseArgsStringToArgv } from 'string-argv';
|
|
11
|
+
import { Writable } from 'node:stream';
|
|
11
12
|
import mod from 'node:module';
|
|
12
13
|
import { pathToFileURL } from 'node:url';
|
|
13
14
|
import { cosmiconfig } from 'cosmiconfig';
|
|
@@ -25,7 +26,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
// package.json
|
|
28
|
-
var version = "1.1.
|
|
29
|
+
var version = "1.1.11";
|
|
29
30
|
var presets = {
|
|
30
31
|
simple: {
|
|
31
32
|
"kubb.config": `
|
|
@@ -58,15 +59,15 @@ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent",
|
|
|
58
59
|
const presetMeta = presets[preset];
|
|
59
60
|
const path = pathParser.resolve(process.cwd(), "./kubb.config.js");
|
|
60
61
|
const installCommand = packageManager === "npm" ? "install" : "add";
|
|
61
|
-
spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${
|
|
62
|
+
spinner2.start(`\u{1F4C0} Writing \`kubb.config.js\` ${pc3.dim(path)}`);
|
|
62
63
|
await write(presetMeta["kubb.config"], path);
|
|
63
|
-
spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${
|
|
64
|
+
spinner2.succeed(`\u{1F4C0} Wrote \`kubb.config.js\` ${pc3.dim(path)}`);
|
|
64
65
|
const data = await Promise.all([
|
|
65
66
|
$`npm init es6 -y`,
|
|
66
67
|
...presetMeta.packages.map(async (pack) => {
|
|
67
|
-
spinner2.start(`\u{1F4C0} Installing ${
|
|
68
|
+
spinner2.start(`\u{1F4C0} Installing ${pc3.dim(pack)}`);
|
|
68
69
|
const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`;
|
|
69
|
-
spinner2.succeed(`\u{1F4C0} Installed ${
|
|
70
|
+
spinner2.succeed(`\u{1F4C0} Installed ${pc3.dim(pack)}`);
|
|
70
71
|
return stdout;
|
|
71
72
|
})
|
|
72
73
|
]);
|
|
@@ -74,7 +75,7 @@ async function init({ spinner: spinner2, preset = "simple", logLevel = "silent",
|
|
|
74
75
|
data.forEach((text) => console.log(text));
|
|
75
76
|
}
|
|
76
77
|
} catch (error) {
|
|
77
|
-
spinner2.fail(
|
|
78
|
+
spinner2.fail(pc3.red(`Something went wrong
|
|
78
79
|
|
|
79
80
|
${error?.message}`));
|
|
80
81
|
}
|
|
@@ -90,18 +91,42 @@ function parseHrtimeToSeconds(hrtime) {
|
|
|
90
91
|
function parseText(baseText, config, logLevel = "silent") {
|
|
91
92
|
return `${baseText}${config[logLevel] || ""}`;
|
|
92
93
|
}
|
|
94
|
+
var OraWritable = class extends Writable {
|
|
95
|
+
command;
|
|
96
|
+
spinner;
|
|
97
|
+
constructor(spinner2, command, opts) {
|
|
98
|
+
super(opts);
|
|
99
|
+
this.command = command;
|
|
100
|
+
this.spinner = spinner2;
|
|
101
|
+
}
|
|
102
|
+
_write(chunk, _encoding, callback) {
|
|
103
|
+
this.spinner.suffixText = `
|
|
104
|
+
|
|
105
|
+
${pc3.bold(pc3.blue(this.command))}: ${chunk?.toString()}`;
|
|
106
|
+
callback();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
93
109
|
|
|
94
110
|
// src/run.ts
|
|
95
111
|
async function run({ config, options, spinner: spinner2 }) {
|
|
96
112
|
const hrstart = process.hrtime();
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
113
|
+
const [log] = throttle((message, { logLevel, params }) => {
|
|
114
|
+
if (logLevel === "error") {
|
|
115
|
+
spinner2.fail(pc3.red(`${message}
|
|
116
|
+
|
|
117
|
+
` || `Something went wrong
|
|
118
|
+
|
|
119
|
+
`));
|
|
120
|
+
} else if (logLevel === "info") {
|
|
121
|
+
if (message) {
|
|
122
|
+
spinner2.text = message;
|
|
101
123
|
} else {
|
|
102
|
-
spinner2.
|
|
124
|
+
spinner2.text = `\u{1FA82} Executing ${params?.hookName || "unknown"}(${pc3.yellow(params?.pluginName || "unknown")})`;
|
|
103
125
|
}
|
|
104
|
-
}
|
|
126
|
+
}
|
|
127
|
+
}, 100);
|
|
128
|
+
const logger = {
|
|
129
|
+
log,
|
|
105
130
|
spinner: spinner2
|
|
106
131
|
};
|
|
107
132
|
const onDone = async (hooks, logLevel) => {
|
|
@@ -115,15 +140,21 @@ async function run({ config, options, spinner: spinner2 }) {
|
|
|
115
140
|
commands = hooks.done;
|
|
116
141
|
}
|
|
117
142
|
const promises = commands.map(async (command) => {
|
|
143
|
+
const oraWritable = new OraWritable(spinner2, command);
|
|
118
144
|
const [cmd, ..._args] = [...parseArgsStringToArgv(command)];
|
|
119
|
-
spinner2.start(parseText(`\u{1FA82} Executing hooks(${
|
|
120
|
-
const { stdout } = await execa(cmd, _args);
|
|
121
|
-
spinner2.
|
|
145
|
+
spinner2.start(parseText(`\u{1FA82} Executing hooks(${pc3.yellow("done")})`, { info: ` ${pc3.dim(command)}` }, logLevel));
|
|
146
|
+
const { stdout } = await execa(cmd, _args, {}).pipeStdout(oraWritable);
|
|
147
|
+
spinner2.suffixText = "";
|
|
148
|
+
oraWritable.destroy();
|
|
122
149
|
if (logLevel === "info") {
|
|
150
|
+
spinner2.succeed(parseText(`\u{1FA82} Executing hooks(${pc3.yellow("done")})`, { info: ` ${pc3.dim(command)}` }, logLevel));
|
|
123
151
|
console.log(stdout);
|
|
124
152
|
}
|
|
125
153
|
});
|
|
126
154
|
await Promise.all(promises);
|
|
155
|
+
if (logLevel === "silent") {
|
|
156
|
+
spinner2.succeed(parseText(`\u{1FA82} Executing hooks(${pc3.yellow("done")})`, {}, logLevel));
|
|
157
|
+
}
|
|
127
158
|
};
|
|
128
159
|
const printSummary = (pluginManager, status) => {
|
|
129
160
|
const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart));
|
|
@@ -144,26 +175,26 @@ async function run({ config, options, spinner: spinner2 }) {
|
|
|
144
175
|
return 0;
|
|
145
176
|
});
|
|
146
177
|
const meta = {
|
|
147
|
-
plugins: status === "success" ? `${
|
|
178
|
+
plugins: status === "success" ? `${pc3.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total` : `${pc3.red(`${pluginsCount - buildStartPlugins.length} failed`)}, ${pluginsCount} total`,
|
|
148
179
|
filesCreated: files.length,
|
|
149
|
-
time:
|
|
180
|
+
time: pc3.yellow(`${elapsedSeconds}s`),
|
|
150
181
|
output: pathParser.resolve(config.root, config.output.path)
|
|
151
182
|
};
|
|
152
183
|
console.log(`
|
|
153
|
-
${
|
|
154
|
-
${
|
|
155
|
-
${
|
|
156
|
-
${
|
|
184
|
+
${pc3.bold("Plugins:")} ${meta.plugins}
|
|
185
|
+
${pc3.bold("Generated:")} ${meta.filesCreated} files
|
|
186
|
+
${pc3.bold("Time:")} ${meta.time}
|
|
187
|
+
${pc3.bold("Output:")} ${meta.output}
|
|
157
188
|
`);
|
|
158
189
|
if (options.debug) {
|
|
159
|
-
console.log(`${
|
|
160
|
-
console.log(`${files.map((file) => `${
|
|
190
|
+
console.log(`${pc3.bold("Generated files:")}`);
|
|
191
|
+
console.log(`${files.map((file) => `${pc3.blue(file.meta?.pluginName)} ${file.path}`).join("\n")}`);
|
|
161
192
|
}
|
|
162
193
|
};
|
|
163
194
|
const printErrors = (error) => {
|
|
164
195
|
const pe = new PrettyError();
|
|
165
196
|
if (options.debug) {
|
|
166
|
-
spinner2.fail(
|
|
197
|
+
spinner2.fail(pc3.red(`Something went wrong
|
|
167
198
|
|
|
168
199
|
`));
|
|
169
200
|
const causedError = error?.cause;
|
|
@@ -172,7 +203,7 @@ ${pc2.bold("Generated:")} ${meta.filesCreated} files
|
|
|
172
203
|
console.log(pe.render(causedError));
|
|
173
204
|
}
|
|
174
205
|
} else {
|
|
175
|
-
spinner2.fail(
|
|
206
|
+
spinner2.fail(pc3.red(`Something went wrong
|
|
176
207
|
|
|
177
208
|
${error?.message}`));
|
|
178
209
|
}
|
|
@@ -181,7 +212,7 @@ ${error?.message}`));
|
|
|
181
212
|
const { root, ...userConfig } = config;
|
|
182
213
|
const logLevel = options.logLevel ?? userConfig.logLevel ?? "silent";
|
|
183
214
|
const inputPath = options.input ?? userConfig.input.path;
|
|
184
|
-
spinner2.start(parseText(`\u{1F680} Building`, { info: `(${
|
|
215
|
+
spinner2.start(parseText(`\u{1F680} Building`, { info: `(${pc3.dim(inputPath)})` }, logLevel));
|
|
185
216
|
const output = await build({
|
|
186
217
|
config: {
|
|
187
218
|
root: process.cwd(),
|
|
@@ -198,7 +229,7 @@ ${error?.message}`));
|
|
|
198
229
|
},
|
|
199
230
|
logger
|
|
200
231
|
});
|
|
201
|
-
spinner2.succeed(parseText(`\u{1F680} Build completed`, { info: `(${
|
|
232
|
+
spinner2.succeed(parseText(`\u{1F680} Build completed`, { info: `(${pc3.dim(inputPath)})` }, logLevel));
|
|
202
233
|
await onDone(config.hooks, logLevel);
|
|
203
234
|
printSummary(output.pluginManager, "success");
|
|
204
235
|
} catch (error) {
|
|
@@ -287,12 +318,12 @@ async function startWatcher(cb, options) {
|
|
|
287
318
|
ignored
|
|
288
319
|
});
|
|
289
320
|
watcher.on("all", (type, file) => {
|
|
290
|
-
spinner2.succeed(
|
|
321
|
+
spinner2.succeed(pc3.yellow(pc3.bold(`Change detected: ${type} ${file}`)));
|
|
291
322
|
spinner2.spinner = "clock";
|
|
292
323
|
try {
|
|
293
324
|
cb(options.path);
|
|
294
325
|
} catch (e) {
|
|
295
|
-
spinner2.warn(
|
|
326
|
+
spinner2.warn(pc3.red("Watcher failed"));
|
|
296
327
|
}
|
|
297
328
|
});
|
|
298
329
|
}
|
|
@@ -373,14 +404,14 @@ var program = new Command(moduleName).description("Kubb").action(async (options)
|
|
|
373
404
|
}
|
|
374
405
|
spinner.start("\u{1F4BE} Loading config");
|
|
375
406
|
const result = await getCosmiConfig(moduleName, options.config);
|
|
376
|
-
spinner.succeed(`\u{1F4BE} Config loaded(${
|
|
407
|
+
spinner.succeed(`\u{1F4BE} Config loaded(${pc3.dim(pathParser.relative(process.cwd(), result.filepath))})`);
|
|
377
408
|
if (options.watch) {
|
|
378
409
|
const config = await getConfig(result, options);
|
|
379
410
|
startWatcher(
|
|
380
411
|
async (paths) => {
|
|
381
412
|
await run({ config, spinner, options });
|
|
382
413
|
spinner.spinner = "simpleDotsScrolling";
|
|
383
|
-
spinner.start(
|
|
414
|
+
spinner.start(pc3.yellow(pc3.bold(`Watching for changes in ${paths.join(" and ")}`)));
|
|
384
415
|
},
|
|
385
416
|
{
|
|
386
417
|
spinner,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.11",
|
|
4
4
|
"description": "Generator cli",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
"string-argv": "^0.3.2",
|
|
44
44
|
"ts-node": "^10.9.1",
|
|
45
45
|
"yaml": "^2.3.1",
|
|
46
|
-
"@kubb/core": "1.1.
|
|
46
|
+
"@kubb/core": "1.1.11"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@types/node": "^20.
|
|
49
|
+
"@types/node": "^20.3.0",
|
|
50
50
|
"tsup": "^6.7.0",
|
|
51
51
|
"typescript": "^5.1.3",
|
|
52
|
+
"@kubb/swagger": "1.1.11",
|
|
52
53
|
"@kubb/ts-config": "0.1.0",
|
|
53
|
-
"@kubb/tsup-config": "1.1.8"
|
|
54
|
-
"@kubb/swagger": "1.1.9"
|
|
54
|
+
"@kubb/tsup-config": "1.1.8"
|
|
55
55
|
},
|
|
56
56
|
"packageManager": "pnpm@8.3.0",
|
|
57
57
|
"engines": {
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"build": "tsup",
|
|
68
68
|
"clean": "rimraf ./dist",
|
|
69
69
|
"lint": "eslint \"**/*.{ts,tsx}\"",
|
|
70
|
-
"lint-fix": "
|
|
70
|
+
"lint-fix": "bun run lint --quiet --fix",
|
|
71
71
|
"release": "pnpm publish --no-git-check",
|
|
72
72
|
"start": "tsup --watch",
|
|
73
73
|
"test": "vitest --passWithNoTests",
|
package/src/run.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import pathParser from 'node:path'
|
|
2
2
|
|
|
3
|
-
import { build, ParallelPluginError, PluginError } from '@kubb/core'
|
|
3
|
+
import { build, throttle, ParallelPluginError, PluginError } from '@kubb/core'
|
|
4
4
|
|
|
5
5
|
import { execa } from 'execa'
|
|
6
6
|
import pc from 'picocolors'
|
|
@@ -12,6 +12,7 @@ import { parseText } from './utils/parseText.ts'
|
|
|
12
12
|
|
|
13
13
|
import type { BuildOutput, CLIOptions, KubbConfig, Logger, LogLevel } from '@kubb/core'
|
|
14
14
|
import type { Ora } from 'ora'
|
|
15
|
+
import { OraWritable } from './utils/OraWritable.ts'
|
|
15
16
|
|
|
16
17
|
type RunProps = {
|
|
17
18
|
config: KubbConfig
|
|
@@ -21,14 +22,20 @@ type RunProps = {
|
|
|
21
22
|
|
|
22
23
|
export async function run({ config, options, spinner }: RunProps): Promise<void> {
|
|
23
24
|
const hrstart = process.hrtime()
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const [log] = throttle<void, Parameters<Logger['log']>>((message, { logLevel, params }) => {
|
|
26
|
+
if (logLevel === 'error') {
|
|
27
|
+
spinner.fail(pc.red(`${message}\n\n` || `Something went wrong\n\n`))
|
|
28
|
+
} else if (logLevel === 'info') {
|
|
29
|
+
if (message) {
|
|
30
|
+
spinner.text = message
|
|
28
31
|
} else {
|
|
29
|
-
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
33
|
+
spinner.text = `🪂 Executing ${params?.hookName || 'unknown'}(${pc.yellow(params?.pluginName || 'unknown')})`
|
|
30
34
|
}
|
|
31
|
-
}
|
|
35
|
+
}
|
|
36
|
+
}, 100)
|
|
37
|
+
const logger: Logger = {
|
|
38
|
+
log,
|
|
32
39
|
spinner,
|
|
33
40
|
}
|
|
34
41
|
|
|
@@ -45,17 +52,26 @@ export async function run({ config, options, spinner }: RunProps): Promise<void>
|
|
|
45
52
|
}
|
|
46
53
|
|
|
47
54
|
const promises = commands.map(async (command) => {
|
|
55
|
+
const oraWritable = new OraWritable(spinner, command)
|
|
48
56
|
const [cmd, ..._args] = [...parseArgsStringToArgv(command)]
|
|
49
57
|
spinner.start(parseText(`🪂 Executing hooks(${pc.yellow('done')})`, { info: ` ${pc.dim(command)}` }, logLevel))
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
|
|
59
|
+
const { stdout } = await execa(cmd, _args, {}).pipeStdout!(oraWritable)
|
|
60
|
+
spinner.suffixText = ''
|
|
61
|
+
oraWritable.destroy()
|
|
52
62
|
|
|
53
63
|
if (logLevel === 'info') {
|
|
64
|
+
spinner.succeed(parseText(`🪂 Executing hooks(${pc.yellow('done')})`, { info: ` ${pc.dim(command)}` }, logLevel))
|
|
65
|
+
|
|
54
66
|
console.log(stdout)
|
|
55
67
|
}
|
|
56
68
|
})
|
|
57
69
|
|
|
58
70
|
await Promise.all(promises)
|
|
71
|
+
|
|
72
|
+
if (logLevel === 'silent') {
|
|
73
|
+
spinner.succeed(parseText(`🪂 Executing hooks(${pc.yellow('done')})`, {}, logLevel))
|
|
74
|
+
}
|
|
59
75
|
}
|
|
60
76
|
|
|
61
77
|
const printSummary = (pluginManager: BuildOutput['pluginManager'], status: 'success' | 'failed') => {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WritableOptions } from 'node:stream'
|
|
2
|
+
import { Writable } from 'node:stream'
|
|
3
|
+
import type { Ora } from 'ora'
|
|
4
|
+
import pc from 'picocolors'
|
|
5
|
+
|
|
6
|
+
export class OraWritable extends Writable {
|
|
7
|
+
public command: string
|
|
8
|
+
public spinner: Ora
|
|
9
|
+
constructor(spinner: Ora, command: string, opts?: WritableOptions) {
|
|
10
|
+
super(opts)
|
|
11
|
+
|
|
12
|
+
this.command = command
|
|
13
|
+
this.spinner = spinner
|
|
14
|
+
}
|
|
15
|
+
_write(chunk: any, _encoding: NodeJS.BufferEncoding, callback: (error?: Error | null) => void) {
|
|
16
|
+
this.spinner.suffixText = `\n\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`
|
|
17
|
+
|
|
18
|
+
callback()
|
|
19
|
+
}
|
|
20
|
+
}
|
package/src/utils/index.ts
CHANGED