@kubb/cli 5.1.0 → 5.2.1
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 +66 -0
- package/dist/{Telemetry-Fiymfxez.js → Telemetry-BCTY-Nzq.js} +3 -49
- package/dist/Telemetry-BCTY-Nzq.js.map +1 -0
- package/dist/{Telemetry-D-Jpt27O.cjs → Telemetry-DKfJQxnC.cjs} +8 -60
- package/dist/Telemetry-DKfJQxnC.cjs.map +1 -0
- package/dist/constants-CdxpgX3_.cjs +115 -0
- package/dist/constants-CdxpgX3_.cjs.map +1 -0
- package/dist/constants-DHRspBTo.js +92 -0
- package/dist/constants-DHRspBTo.js.map +1 -0
- package/dist/env-DHaFBZTX.cjs +82 -0
- package/dist/env-DHaFBZTX.cjs.map +1 -0
- package/dist/env-DqPKEL59.js +59 -0
- package/dist/env-DqPKEL59.js.map +1 -0
- package/dist/{errors-CZtH2dKk.cjs → errors-C-wEou02.cjs} +2 -19
- package/dist/errors-C-wEou02.cjs.map +1 -0
- package/dist/errors-C8yNfV7w.js +20 -0
- package/dist/errors-C8yNfV7w.js.map +1 -0
- package/dist/{generate-HzSh9v2l.js → generate-CEHA2OSd.js} +9 -6
- package/dist/generate-CEHA2OSd.js.map +1 -0
- package/dist/{generate-BO_Gv-vi.cjs → generate-P5PWAa7J.cjs} +9 -6
- package/dist/generate-P5PWAa7J.cjs.map +1 -0
- package/dist/index.cjs +14 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/dist/{init-BslRoYhh.js → init-CgQnnwbc.js} +3 -3
- package/dist/{init-BslRoYhh.js.map → init-CgQnnwbc.js.map} +1 -1
- package/dist/{init-EJOY4K6y.cjs → init-_p5e5VuD.cjs} +3 -3
- package/dist/{init-EJOY4K6y.cjs.map → init-_p5e5VuD.cjs.map} +1 -1
- package/dist/{mcp-CtV0d0Dc.js → mcp-B-GxGgVr.js} +8 -10
- package/dist/mcp-B-GxGgVr.js.map +1 -0
- package/dist/{mcp-BIcX2H1u.cjs → mcp-B3B-rE7W.cjs} +8 -10
- package/dist/mcp-B3B-rE7W.cjs.map +1 -0
- package/dist/output-B2V2MN_C.cjs +137 -0
- package/dist/output-B2V2MN_C.cjs.map +1 -0
- package/dist/output-LZvrgF3z.js +89 -0
- package/dist/output-LZvrgF3z.js.map +1 -0
- package/dist/package-GR1Pi9JF.js +6 -0
- package/dist/package-GR1Pi9JF.js.map +1 -0
- package/dist/{package-CnUMuss9.cjs → package-vVVyiYqL.cjs} +2 -2
- package/dist/package-vVVyiYqL.cjs.map +1 -0
- package/dist/{run-DSgLksGj.js → run-BzvsJ0Ek.js} +80 -112
- package/dist/run-BzvsJ0Ek.js.map +1 -0
- package/dist/run-CH9jQeET.js +499 -0
- package/dist/run-CH9jQeET.js.map +1 -0
- package/dist/run-D-XYvWxQ.js +281 -0
- package/dist/run-D-XYvWxQ.js.map +1 -0
- package/dist/{run-BV2tMjuz.cjs → run-D6yr3HEE.cjs} +15 -4
- package/dist/run-D6yr3HEE.cjs.map +1 -0
- package/dist/{run-FPqeAEF4.cjs → run-DRBqVXX0.cjs} +93 -125
- package/dist/run-DRBqVXX0.cjs.map +1 -0
- package/dist/{run-DCfdTu52.js → run-DgV0unjs.js} +11 -4
- package/dist/run-DgV0unjs.js.map +1 -0
- package/dist/{run-Cs5FunVC.cjs → run-FLh61kzq.cjs} +11 -4
- package/dist/run-FLh61kzq.cjs.map +1 -0
- package/dist/run-Z_y-m4dQ.cjs +283 -0
- package/dist/run-Z_y-m4dQ.cjs.map +1 -0
- package/dist/{run-ChKPZlIB.js → run-n7yOll1q.js} +15 -4
- package/dist/run-n7yOll1q.js.map +1 -0
- package/dist/run-pPsQ2MsX.cjs +502 -0
- package/dist/run-pPsQ2MsX.cjs.map +1 -0
- package/dist/studio-DKv2YLJZ.js +77 -0
- package/dist/studio-DKv2YLJZ.js.map +1 -0
- package/dist/studio-PDMxqFN0.cjs +76 -0
- package/dist/studio-PDMxqFN0.cjs.map +1 -0
- package/dist/{run-DAGbErY0.cjs → utils-B0SrWoNh.cjs} +303 -323
- package/dist/utils-B0SrWoNh.cjs.map +1 -0
- package/dist/{run-CLGgnrjg.js → utils-CzoNURwq.js} +274 -364
- package/dist/utils-CzoNURwq.js.map +1 -0
- package/dist/{validate-BxCwQou-.cjs → validate-BcB0tFQ6.cjs} +8 -13
- package/dist/validate-BcB0tFQ6.cjs.map +1 -0
- package/dist/{validate-DD2S9ffV.js → validate-QpkCbIFJ.js} +8 -13
- package/dist/validate-QpkCbIFJ.js.map +1 -0
- package/package.json +18 -9
- package/dist/Telemetry-D-Jpt27O.cjs.map +0 -1
- package/dist/Telemetry-Fiymfxez.js.map +0 -1
- package/dist/errors-CMvLO2NE.js +0 -31
- package/dist/errors-CMvLO2NE.js.map +0 -1
- package/dist/errors-CZtH2dKk.cjs.map +0 -1
- package/dist/generate-BO_Gv-vi.cjs.map +0 -1
- package/dist/generate-HzSh9v2l.js.map +0 -1
- package/dist/mcp-BIcX2H1u.cjs.map +0 -1
- package/dist/mcp-CtV0d0Dc.js.map +0 -1
- package/dist/package-CnUMuss9.cjs.map +0 -1
- package/dist/package-DiBDd6nT.js +0 -6
- package/dist/package-DiBDd6nT.js.map +0 -1
- package/dist/run-BV2tMjuz.cjs.map +0 -1
- package/dist/run-CLGgnrjg.js.map +0 -1
- package/dist/run-ChKPZlIB.js.map +0 -1
- package/dist/run-Cs5FunVC.cjs.map +0 -1
- package/dist/run-DAGbErY0.cjs.map +0 -1
- package/dist/run-DCfdTu52.js.map +0 -1
- package/dist/run-DSgLksGj.js.map +0 -1
- package/dist/run-FPqeAEF4.cjs.map +0 -1
- package/dist/tools-DH1a7ZJH.js +0 -152
- package/dist/tools-DH1a7ZJH.js.map +0 -1
- package/dist/tools-bwKAf_r-.cjs +0 -175
- package/dist/tools-bwKAf_r-.cjs.map +0 -1
- package/dist/validate-BxCwQou-.cjs.map +0 -1
- package/dist/validate-DD2S9ffV.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-qbf5tadS.cjs");
|
|
2
|
-
const
|
|
2
|
+
const require_output = require("./output-B2V2MN_C.cjs");
|
|
3
|
+
const require_constants = require("./constants-CdxpgX3_.cjs");
|
|
3
4
|
let node_util = require("node:util");
|
|
4
5
|
let node_process = require("node:process");
|
|
5
6
|
node_process = require_rolldown_runtime.__toESM(node_process, 1);
|
|
@@ -10,95 +11,6 @@ node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
|
|
|
10
11
|
let _clack_prompts = require("@clack/prompts");
|
|
11
12
|
_clack_prompts = require_rolldown_runtime.__toESM(_clack_prompts, 1);
|
|
12
13
|
let tinyexec = require("tinyexec");
|
|
13
|
-
//#region ../../internals/shared/src/constants.ts
|
|
14
|
-
const KUBB_CONFIG_FILENAME = "kubb.config.ts";
|
|
15
|
-
const KUBB_PACKAGE_NAME = "kubb";
|
|
16
|
-
const initDefaults = {
|
|
17
|
-
inputPath: "./openapi.yaml",
|
|
18
|
-
outputPath: "./src/gen",
|
|
19
|
-
plugins: ["plugin-ts"]
|
|
20
|
-
};
|
|
21
|
-
const availablePlugins = [
|
|
22
|
-
{
|
|
23
|
-
value: "plugin-ts",
|
|
24
|
-
label: "TypeScript",
|
|
25
|
-
hint: "Recommended",
|
|
26
|
-
packageName: "@kubb/plugin-ts",
|
|
27
|
-
importName: "pluginTs",
|
|
28
|
-
category: "types"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
value: "plugin-axios",
|
|
32
|
-
label: "Axios Client",
|
|
33
|
-
packageName: "@kubb/plugin-axios",
|
|
34
|
-
importName: "pluginAxios",
|
|
35
|
-
category: "client"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
value: "plugin-fetch",
|
|
39
|
-
label: "Fetch Client",
|
|
40
|
-
packageName: "@kubb/plugin-fetch",
|
|
41
|
-
importName: "pluginFetch",
|
|
42
|
-
category: "client"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
value: "plugin-react-query",
|
|
46
|
-
label: "React Query / TanStack Query",
|
|
47
|
-
packageName: "@kubb/plugin-react-query",
|
|
48
|
-
importName: "pluginReactQuery",
|
|
49
|
-
category: "framework"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
value: "plugin-vue-query",
|
|
53
|
-
label: "Vue Query",
|
|
54
|
-
packageName: "@kubb/plugin-vue-query",
|
|
55
|
-
importName: "pluginVueQuery",
|
|
56
|
-
category: "framework"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
value: "plugin-zod",
|
|
60
|
-
label: "Zod Schemas",
|
|
61
|
-
packageName: "@kubb/plugin-zod",
|
|
62
|
-
importName: "pluginZod",
|
|
63
|
-
category: "validation"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
value: "plugin-faker",
|
|
67
|
-
label: "Faker.js Mocks",
|
|
68
|
-
packageName: "@kubb/plugin-faker",
|
|
69
|
-
importName: "pluginFaker",
|
|
70
|
-
category: "mocks"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
value: "plugin-msw",
|
|
74
|
-
label: "MSW Handlers",
|
|
75
|
-
packageName: "@kubb/plugin-msw",
|
|
76
|
-
importName: "pluginMsw",
|
|
77
|
-
category: "mocks"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
value: "plugin-cypress",
|
|
81
|
-
label: "Cypress Tests",
|
|
82
|
-
packageName: "@kubb/plugin-cypress",
|
|
83
|
-
importName: "pluginCypress",
|
|
84
|
-
category: "testing"
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
value: "plugin-mcp",
|
|
88
|
-
label: "MCP Server (AI / Model Context Protocol)",
|
|
89
|
-
packageName: "@kubb/plugin-mcp",
|
|
90
|
-
importName: "pluginMcp",
|
|
91
|
-
category: "ai"
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
value: "plugin-redoc",
|
|
95
|
-
label: "ReDoc Documentation",
|
|
96
|
-
packageName: "@kubb/plugin-redoc",
|
|
97
|
-
importName: "pluginRedoc",
|
|
98
|
-
category: "documentation"
|
|
99
|
-
}
|
|
100
|
-
];
|
|
101
|
-
//#endregion
|
|
102
14
|
//#region ../../internals/shared/src/init.ts
|
|
103
15
|
/**
|
|
104
16
|
* Resolves a comma-separated plugin flag (e.g. `--plugins plugin-ts,plugin-zod`) into the
|
|
@@ -108,7 +20,7 @@ const availablePlugins = [
|
|
|
108
20
|
function resolvePlugins(pluginsFlag) {
|
|
109
21
|
if (!pluginsFlag) return [];
|
|
110
22
|
const requested = pluginsFlag.split(",").map((value) => value.trim()).filter(Boolean);
|
|
111
|
-
return availablePlugins.filter((plugin) => requested.includes(plugin.value));
|
|
23
|
+
return require_constants.availablePlugins.filter((plugin) => requested.includes(plugin.value));
|
|
112
24
|
}
|
|
113
25
|
function generateConfigFile({ selectedPlugins, inputPath, outputPath }) {
|
|
114
26
|
return `import { defineConfig } from 'kubb/config'
|
|
@@ -139,6 +51,62 @@ function resolveInstallVersions({ packages, version }) {
|
|
|
139
51
|
return packages.map((name) => name === "kubb" ? `${name}@${version}` : `${name}@${tag}`);
|
|
140
52
|
}
|
|
141
53
|
//#endregion
|
|
54
|
+
//#region src/tools.ts
|
|
55
|
+
/**
|
|
56
|
+
* Metadata for each supported package manager, keyed by its short name.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* packageManagers.pnpm.installCommand // ['add', '-D']
|
|
61
|
+
* packageManagers.npm.lockFile // 'package-lock.json'
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
const packageManagers = {
|
|
65
|
+
pnpm: {
|
|
66
|
+
name: "pnpm",
|
|
67
|
+
lockFile: "pnpm-lock.yaml",
|
|
68
|
+
installCommand: ["add", "-D"]
|
|
69
|
+
},
|
|
70
|
+
yarn: {
|
|
71
|
+
name: "yarn",
|
|
72
|
+
lockFile: "yarn.lock",
|
|
73
|
+
installCommand: ["add", "-D"]
|
|
74
|
+
},
|
|
75
|
+
bun: {
|
|
76
|
+
name: "bun",
|
|
77
|
+
lockFile: "bun.lockb",
|
|
78
|
+
installCommand: ["add", "-d"]
|
|
79
|
+
},
|
|
80
|
+
npm: {
|
|
81
|
+
name: "npm",
|
|
82
|
+
lockFile: "package-lock.json",
|
|
83
|
+
installCommand: ["install", "--save-dev"]
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Detects the active package manager for the given directory.
|
|
88
|
+
* Resolution order: `packageManager` field in `package.json`, then presence of a lock file.
|
|
89
|
+
* Falls back to `npm` when no signal is found.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* detectPackageManager('/my/project') // { name: 'pnpm', lockFile: 'pnpm-lock.yaml', ... }
|
|
94
|
+
* detectPackageManager() // falls back to npm when no lock file is found
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function detectPackageManager(cwd = process.cwd()) {
|
|
98
|
+
const packageJsonPath = (0, node_path.join)(cwd, "package.json");
|
|
99
|
+
if ((0, node_fs.existsSync)(packageJsonPath)) try {
|
|
100
|
+
const pmField = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8")).packageManager;
|
|
101
|
+
if (typeof pmField === "string") {
|
|
102
|
+
const name = pmField.split("@")[0];
|
|
103
|
+
if (name && name in packageManagers) return packageManagers[name];
|
|
104
|
+
}
|
|
105
|
+
} catch {}
|
|
106
|
+
for (const pm of Object.values(packageManagers)) if ((0, node_fs.existsSync)((0, node_path.join)(cwd, pm.lockFile))) return pm;
|
|
107
|
+
return packageManagers.npm;
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
142
110
|
//#region src/runners/init/utils.ts
|
|
143
111
|
/**
|
|
144
112
|
* Returns `true` when a `package.json` exists at `cwd`.
|
|
@@ -188,18 +156,18 @@ function cancelAndExit(message = "Operation canceled.") {
|
|
|
188
156
|
*/
|
|
189
157
|
async function run({ yes, version, input: inputFlag, output: outputFlag, plugins: pluginsFlag, dryRun }) {
|
|
190
158
|
const cwd = node_process.default.cwd();
|
|
191
|
-
|
|
159
|
+
require_output.logIntro({ title: (0, node_util.styleText)("bgCyan", (0, node_util.styleText)("black", " Kubb Init ")) });
|
|
192
160
|
/**
|
|
193
161
|
* Returns `flag` when provided, the `defaultValue` when `yes` is set,
|
|
194
162
|
* or calls `prompt()` for interactive input. Exits on cancellation.
|
|
195
163
|
*/
|
|
196
164
|
async function resolveOrPrompt(flag, defaultValue, logLabel, prompt) {
|
|
197
165
|
if (flag !== void 0) {
|
|
198
|
-
|
|
166
|
+
require_output.logInfo(`${logLabel}: ${(0, node_util.styleText)("cyan", String(flag))}`);
|
|
199
167
|
return flag;
|
|
200
168
|
}
|
|
201
169
|
if (yes) {
|
|
202
|
-
|
|
170
|
+
require_output.logInfo(`${logLabel}: ${(0, node_util.styleText)("cyan", String(defaultValue))}`);
|
|
203
171
|
return defaultValue;
|
|
204
172
|
}
|
|
205
173
|
const result = await prompt();
|
|
@@ -215,64 +183,64 @@ async function run({ yes, version, input: inputFlag, output: outputFlag, plugins
|
|
|
215
183
|
});
|
|
216
184
|
if (_clack_prompts.isCancel(shouldInit) || !shouldInit) cancelAndExit();
|
|
217
185
|
}
|
|
218
|
-
const packageManager =
|
|
219
|
-
const spinner =
|
|
186
|
+
const packageManager = detectPackageManager(cwd);
|
|
187
|
+
const spinner = require_output.createSpinner();
|
|
220
188
|
spinner.start(`Initializing package.json with ${packageManager.name}`);
|
|
221
189
|
await initPackageJson(cwd, packageManager);
|
|
222
190
|
spinner.stop(`Created package.json with ${packageManager.name}`);
|
|
223
191
|
}
|
|
224
|
-
const packageManager =
|
|
225
|
-
if (hasPackageJson(cwd))
|
|
226
|
-
const inputPath = await resolveOrPrompt(inputFlag, initDefaults.inputPath, "Using input path", () => _clack_prompts.text({
|
|
192
|
+
const packageManager = detectPackageManager(cwd);
|
|
193
|
+
if (hasPackageJson(cwd)) require_output.logInfo(`Detected package manager: ${(0, node_util.styleText)("cyan", packageManager.name)}`);
|
|
194
|
+
const inputPath = await resolveOrPrompt(inputFlag, require_constants.initDefaults.inputPath, "Using input path", () => _clack_prompts.text({
|
|
227
195
|
message: "Where is your OpenAPI specification located?",
|
|
228
|
-
placeholder: initDefaults.inputPath,
|
|
229
|
-
defaultValue: initDefaults.inputPath,
|
|
196
|
+
placeholder: require_constants.initDefaults.inputPath,
|
|
197
|
+
defaultValue: require_constants.initDefaults.inputPath,
|
|
230
198
|
validate: (value) => {
|
|
231
199
|
if (!value) return "Input path is required";
|
|
232
200
|
}
|
|
233
201
|
}));
|
|
234
|
-
const outputPath = await resolveOrPrompt(outputFlag, initDefaults.outputPath, "Using output path", () => _clack_prompts.text({
|
|
202
|
+
const outputPath = await resolveOrPrompt(outputFlag, require_constants.initDefaults.outputPath, "Using output path", () => _clack_prompts.text({
|
|
235
203
|
message: "Where should the generated files be output?",
|
|
236
|
-
placeholder: initDefaults.outputPath,
|
|
237
|
-
defaultValue: initDefaults.outputPath,
|
|
204
|
+
placeholder: require_constants.initDefaults.outputPath,
|
|
205
|
+
defaultValue: require_constants.initDefaults.outputPath,
|
|
238
206
|
validate: (value) => {
|
|
239
207
|
if (!value) return "Output path is required";
|
|
240
208
|
}
|
|
241
209
|
}));
|
|
242
|
-
const defaultPlugins = availablePlugins.filter((p) => initDefaults.plugins.includes(p.value));
|
|
210
|
+
const defaultPlugins = require_constants.availablePlugins.filter((p) => require_constants.initDefaults.plugins.includes(p.value));
|
|
243
211
|
const pluginLabel = (plugins) => (0, node_util.styleText)("cyan", plugins.map((p) => p.label).join(", "));
|
|
244
212
|
const selectedPlugins = await (async () => {
|
|
245
213
|
if (pluginsFlag) {
|
|
246
214
|
const plugins = resolvePlugins(pluginsFlag);
|
|
247
215
|
if (plugins.length === 0) {
|
|
248
|
-
|
|
216
|
+
require_output.logWarn(`No valid plugins found in --plugins value; falling back to default: ${pluginLabel(defaultPlugins)}`);
|
|
249
217
|
return defaultPlugins;
|
|
250
218
|
}
|
|
251
|
-
|
|
219
|
+
require_output.logInfo(`Using plugins: ${pluginLabel(plugins)}`);
|
|
252
220
|
return plugins;
|
|
253
221
|
}
|
|
254
222
|
if (yes) {
|
|
255
|
-
|
|
223
|
+
require_output.logInfo(`Using plugins: ${pluginLabel(defaultPlugins)}`);
|
|
256
224
|
return defaultPlugins;
|
|
257
225
|
}
|
|
258
226
|
const values = await _clack_prompts.multiselect({
|
|
259
227
|
message: "Select plugins to use:",
|
|
260
|
-
options: availablePlugins.map(({ value, label, hint }) => ({
|
|
228
|
+
options: require_constants.availablePlugins.map(({ value, label, hint }) => ({
|
|
261
229
|
value,
|
|
262
230
|
label,
|
|
263
231
|
hint
|
|
264
232
|
})),
|
|
265
|
-
initialValues: [...initDefaults.plugins],
|
|
233
|
+
initialValues: [...require_constants.initDefaults.plugins],
|
|
266
234
|
required: true
|
|
267
235
|
});
|
|
268
236
|
if (_clack_prompts.isCancel(values)) cancelAndExit();
|
|
269
|
-
return availablePlugins.filter((p) => values.includes(p.value));
|
|
237
|
+
return require_constants.availablePlugins.filter((p) => values.includes(p.value));
|
|
270
238
|
})();
|
|
271
239
|
const packagesToInstall = resolveInstallVersions({
|
|
272
|
-
packages: [KUBB_PACKAGE_NAME, ...selectedPlugins.map((p) => p.packageName)],
|
|
240
|
+
packages: [require_constants.KUBB_PACKAGE_NAME, ...selectedPlugins.map((p) => p.packageName)],
|
|
273
241
|
version
|
|
274
242
|
});
|
|
275
|
-
const spinner =
|
|
243
|
+
const spinner = require_output.createSpinner();
|
|
276
244
|
spinner.start(`Installing ${packagesToInstall.length} packages with ${packageManager.name}`);
|
|
277
245
|
try {
|
|
278
246
|
await dryRun.run(() => installPackages(packagesToInstall, packageManager, cwd), { message: `install ${packagesToInstall.length} packages with ${packageManager.name}` });
|
|
@@ -281,35 +249,35 @@ async function run({ yes, version, input: inputFlag, output: outputFlag, plugins
|
|
|
281
249
|
spinner.stop("Installation failed");
|
|
282
250
|
throw error;
|
|
283
251
|
}
|
|
284
|
-
const configSpinner =
|
|
285
|
-
configSpinner.start(`Creating ${KUBB_CONFIG_FILENAME}`);
|
|
252
|
+
const configSpinner = require_output.createSpinner();
|
|
253
|
+
configSpinner.start(`Creating ${require_constants.KUBB_CONFIG_FILENAME}`);
|
|
286
254
|
const configContent = generateConfigFile({
|
|
287
255
|
selectedPlugins,
|
|
288
256
|
inputPath,
|
|
289
257
|
outputPath
|
|
290
258
|
});
|
|
291
|
-
const configPath = node_path.default.join(cwd, KUBB_CONFIG_FILENAME);
|
|
259
|
+
const configPath = node_path.default.join(cwd, require_constants.KUBB_CONFIG_FILENAME);
|
|
292
260
|
if (node_fs.default.existsSync(configPath)) {
|
|
293
|
-
configSpinner.stop(`${KUBB_CONFIG_FILENAME} already exists`);
|
|
261
|
+
configSpinner.stop(`${require_constants.KUBB_CONFIG_FILENAME} already exists`);
|
|
294
262
|
if (!yes) {
|
|
295
263
|
const shouldOverwrite = await _clack_prompts.confirm({
|
|
296
|
-
message: `${KUBB_CONFIG_FILENAME} already exists. Overwrite?`,
|
|
264
|
+
message: `${require_constants.KUBB_CONFIG_FILENAME} already exists. Overwrite?`,
|
|
297
265
|
initialValue: false
|
|
298
266
|
});
|
|
299
267
|
if (_clack_prompts.isCancel(shouldOverwrite) || !shouldOverwrite) cancelAndExit("Keeping existing configuration. Packages have been installed.");
|
|
300
268
|
}
|
|
301
|
-
configSpinner.start(`Overwriting ${KUBB_CONFIG_FILENAME}`);
|
|
269
|
+
configSpinner.start(`Overwriting ${require_constants.KUBB_CONFIG_FILENAME}`);
|
|
302
270
|
}
|
|
303
|
-
await dryRun.run(() => node_fs.default.promises.writeFile(configPath, configContent, "utf-8"), { message: `write ${KUBB_CONFIG_FILENAME}` });
|
|
304
|
-
configSpinner.stop(`Created ${KUBB_CONFIG_FILENAME}`);
|
|
305
|
-
|
|
271
|
+
await dryRun.run(() => node_fs.default.promises.writeFile(configPath, configContent, "utf-8"), { message: `write ${require_constants.KUBB_CONFIG_FILENAME}` });
|
|
272
|
+
configSpinner.stop(`Created ${require_constants.KUBB_CONFIG_FILENAME}`);
|
|
273
|
+
require_output.logOutro((0, node_util.styleText)("green", "✓ All set!") + "\n\n" + (0, node_util.styleText)("dim", "Next steps:") + "\n" + (0, node_util.styleText)("cyan", ` 1. Make sure your OpenAPI spec is at: ${inputPath}`) + "\n" + (0, node_util.styleText)("cyan", " 2. Generate code with: npx kubb generate") + "\n" + (0, node_util.styleText)("cyan", ` 3. Find generated files in: ${outputPath}`) + "\n\n" + (0, node_util.styleText)("dim", `Using ${packageManager.name} • Kubb v${version}`));
|
|
306
274
|
} catch (error) {
|
|
307
|
-
|
|
308
|
-
if (error instanceof Error)
|
|
275
|
+
require_output.logError((0, node_util.styleText)("red", "An error occurred during initialization"));
|
|
276
|
+
if (error instanceof Error) require_output.logError(error.message);
|
|
309
277
|
node_process.default.exit(1);
|
|
310
278
|
}
|
|
311
279
|
}
|
|
312
280
|
//#endregion
|
|
313
281
|
exports.run = run;
|
|
314
282
|
|
|
315
|
-
//# sourceMappingURL=run-
|
|
283
|
+
//# sourceMappingURL=run-DRBqVXX0.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-DRBqVXX0.cjs","names":["availablePlugins","join","existsSync","readFileSync","process","fs","path","x","process","styleText","clack","createSpinner","initDefaults","availablePlugins","KUBB_PACKAGE_NAME","KUBB_CONFIG_FILENAME","path","fs"],"sources":["../../../internals/shared/src/init.ts","../src/tools.ts","../src/runners/init/utils.ts","../src/runners/init/run.ts"],"sourcesContent":["import { availablePlugins, KUBB_PACKAGE_NAME } from './constants.ts'\nimport type { PluginOption } from './types.ts'\n\n/**\n * Resolves a comma-separated plugin flag (e.g. `--plugins plugin-ts,plugin-zod`) into the\n * matching known plugin options. Unrecognized names are dropped, and a missing flag yields\n * an empty list.\n */\nexport function resolvePlugins(pluginsFlag: string | undefined): Array<PluginOption> {\n if (!pluginsFlag) {\n return []\n }\n const requested = pluginsFlag\n .split(',')\n .map((value) => value.trim())\n .filter(Boolean)\n return availablePlugins.filter((plugin) => requested.includes(plugin.value))\n}\n\nexport function generateConfigFile({\n selectedPlugins,\n inputPath,\n outputPath,\n}: {\n selectedPlugins: Array<PluginOption>\n inputPath: string\n outputPath: string\n}): string {\n const imports = selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join('\\n')\n\n const pluginConfigs = selectedPlugins.map((plugin) => ` ${plugin.importName}(),`).join('\\n')\n\n return `import { defineConfig } from 'kubb/config'\n${imports}\n\nexport default defineConfig({\n input: '${inputPath}',\n output: {\n path: '${outputPath}',\n clean: true,\n },\n plugins: [\n${pluginConfigs}\n ],\n})\n`\n}\n\n/**\n * Turns package names into install specifiers for the wizard.\n *\n * `kubb` is pinned to the exact version of the running CLI, since both ship from the same release\n * and resolving `kubb@beta` separately can land on a different version than the CLI doing the\n * scaffolding. Plugins release from their own repo on their own cadence, so they follow the\n * release channel of the CLI through its dist-tag.\n */\nexport function resolveInstallVersions({ packages, version }: { packages: Array<string>; version: string }): Array<string> {\n const prerelease = version.match(/-([a-z]+)/)?.[1]\n const tag = prerelease ?? 'latest'\n\n return packages.map((name) => (name === KUBB_PACKAGE_NAME ? `${name}@${version}` : `${name}@${tag}`))\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { formatters, linters } from '@internals/utils'\nimport type { Config } from '@kubb/core'\n\n/**\n * The configurable formatter names, mirrored from `Config['output'].format`. Excludes `'auto'`\n * (detection, not a tool) and `false` (skip). The `formatters`/`linters` tables below are pinned to\n * these so adding a tool to the config union without a descriptor fails to compile.\n */\ntype FormatterName = Exclude<NonNullable<Config['output']['format']>, 'auto' | false>\ntype LinterName = Exclude<NonNullable<Config['output']['lint']>, 'auto' | false>\n\n// Pinned to core's union here rather than in `@internals/utils`, which must not import `@kubb/core`:\n// adding a tool to the config union without a descriptor stays a compile error.\nformatters satisfies Record<FormatterName, unknown>\nlinters satisfies Record<LinterName, unknown>\n\nexport { detectTool, formatters, linters } from '@internals/utils'\n\nexport type PackageManagerName = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\n/**\n * Metadata describing a package manager's lock file and install command.\n */\nexport interface PackageManagerInfo {\n /**\n * Identifier used in CLI commands, e.g. `pnpm`, `yarn`.\n */\n name: PackageManagerName\n /**\n * Lock file name that uniquely identifies this package manager in a project root.\n */\n lockFile: string\n /**\n * Subcommands passed to the package manager binary to install a dev dependency.\n */\n installCommand: ReadonlyArray<string>\n}\n\n/**\n * Metadata for each supported package manager, keyed by its short name.\n *\n * @example\n * ```ts\n * packageManagers.pnpm.installCommand // ['add', '-D']\n * packageManagers.npm.lockFile // 'package-lock.json'\n * ```\n */\nconst packageManagers: Record<PackageManagerName, PackageManagerInfo> = {\n pnpm: {\n name: 'pnpm',\n lockFile: 'pnpm-lock.yaml',\n installCommand: ['add', '-D'],\n },\n yarn: {\n name: 'yarn',\n lockFile: 'yarn.lock',\n installCommand: ['add', '-D'],\n },\n bun: {\n name: 'bun',\n lockFile: 'bun.lockb',\n installCommand: ['add', '-d'],\n },\n npm: {\n name: 'npm',\n lockFile: 'package-lock.json',\n installCommand: ['install', '--save-dev'],\n },\n}\n\n/**\n * Minimal shape of `package.json` fields read during detection.\n */\ntype PackageJson = {\n /**\n * The `packageManager` field from `package.json` (e.g. `\"pnpm@9.0.0\"`).\n */\n packageManager?: string\n}\n\n/**\n * Detects the active package manager for the given directory.\n * Resolution order: `packageManager` field in `package.json`, then presence of a lock file.\n * Falls back to `npm` when no signal is found.\n *\n * @example\n * ```ts\n * detectPackageManager('/my/project') // { name: 'pnpm', lockFile: 'pnpm-lock.yaml', ... }\n * detectPackageManager() // falls back to npm when no lock file is found\n * ```\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManagerInfo {\n const packageJsonPath = join(cwd, 'package.json')\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageJson\n const pmField = packageJson.packageManager\n if (typeof pmField === 'string') {\n const name = pmField.split('@')[0]\n if (name && name in packageManagers) {\n return packageManagers[name as PackageManagerName]\n }\n }\n } catch {\n // Continue to lock file detection\n }\n }\n\n for (const pm of Object.values(packageManagers)) {\n if (existsSync(join(cwd, pm.lockFile))) {\n return pm\n }\n }\n\n return packageManagers.npm\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { x } from 'tinyexec'\nimport type { PackageManagerInfo, PackageManagerName } from '../../tools.ts'\n\n/**\n * Returns `true` when a `package.json` exists at `cwd`.\n */\nexport function hasPackageJson(cwd: string = process.cwd()): boolean {\n return fs.existsSync(path.join(cwd, 'package.json'))\n}\n\n/**\n * Initializes a new `package.json` at `cwd` using the detected package manager.\n */\nexport async function initPackageJson(cwd: string, packageManager: PackageManagerInfo): Promise<void> {\n const commands: Record<PackageManagerName, Array<string>> = {\n npm: ['init', '-y'],\n pnpm: ['init'],\n yarn: ['init', '-y'],\n bun: ['init', '-y'],\n }\n\n await x(packageManager.name, commands[packageManager.name], {\n nodeOptions: { cwd, stdio: 'inherit' },\n throwOnError: true,\n })\n}\n\n/**\n * Installs the given packages at `cwd` using the detected package manager.\n */\nexport async function installPackages(packages: Array<string>, packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n await x(packageManager.name, [...packageManager.installCommand, ...packages], {\n nodeOptions: { cwd, stdio: 'inherit' },\n throwOnError: true,\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport type { DryRunExtension } from '@gunshi/plugin-dryrun'\nimport {\n availablePlugins,\n generateConfigFile,\n initDefaults,\n KUBB_CONFIG_FILENAME,\n KUBB_PACKAGE_NAME,\n type PluginOption,\n resolveInstallVersions,\n resolvePlugins,\n} from '@internals/shared'\nimport { createSpinner, logError, logInfo, logIntro, logOutro, logWarn } from '../../loggers/output.ts'\nimport { hasPackageJson, initPackageJson, installPackages } from './utils.ts'\nimport { detectPackageManager } from '../../tools.ts'\n\nfunction cancelAndExit(message = 'Operation canceled.'): never {\n clack.cancel(message)\n process.exit(0)\n}\n\ntype InitOptions = {\n /**\n * When `true`, skips all interactive prompts and uses default values.\n */\n yes: boolean\n /**\n * Current `@kubb/cli` version string, shown in the closing outro.\n */\n version: string\n /**\n * Input path flag value from `--input`. When provided, skips the input prompt.\n */\n input?: string\n /**\n * Output directory flag value from `--output`. When provided, skips the output prompt.\n */\n output?: string\n /**\n * Comma-separated plugin list from `--plugins`, e.g. `'plugin-ts,plugin-zod'`. When provided, skips the plugin selection prompt.\n */\n plugins?: string\n /**\n * Dry-run extension from `@gunshi/plugin-dryrun`. When enabled, package installation and the\n * config file write are skipped.\n */\n dryRun: DryRunExtension\n}\n\n/**\n * Runs the interactive Kubb scaffolding wizard.\n * Detects the package manager, prompts for input/output paths and plugins, installs packages, and writes `kubb.config.ts`.\n * Pass `yes: true` to skip all prompts and use defaults.\n */\nexport async function run({ yes, version, input: inputFlag, output: outputFlag, plugins: pluginsFlag, dryRun }: InitOptions): Promise<void> {\n const cwd = process.cwd()\n\n logIntro({ title: styleText('bgCyan', styleText('black', ' Kubb Init ')) })\n\n /**\n * Returns `flag` when provided, the `defaultValue` when `yes` is set,\n * or calls `prompt()` for interactive input. Exits on cancellation.\n */\n async function resolveOrPrompt<T>(flag: T | undefined, defaultValue: T, logLabel: string, prompt: () => Promise<T | symbol>): Promise<T> {\n if (flag !== undefined) {\n logInfo(`${logLabel}: ${styleText('cyan', String(flag))}`)\n return flag\n }\n if (yes) {\n logInfo(`${logLabel}: ${styleText('cyan', String(defaultValue))}`)\n return defaultValue\n }\n const result = await prompt()\n if (clack.isCancel(result)) cancelAndExit()\n return result as T\n }\n\n try {\n // Check/create package.json, detect package manager once after the block\n if (!hasPackageJson(cwd)) {\n if (!yes) {\n const shouldInit = await clack.confirm({\n message: 'No package.json found. Would you like to create one?',\n initialValue: true,\n })\n\n if (clack.isCancel(shouldInit) || !shouldInit) {\n cancelAndExit()\n }\n }\n\n const packageManager = detectPackageManager(cwd)\n const spinner = createSpinner()\n spinner.start(`Initializing package.json with ${packageManager.name}`)\n await initPackageJson(cwd, packageManager)\n spinner.stop(`Created package.json with ${packageManager.name}`)\n }\n\n const packageManager = detectPackageManager(cwd)\n if (hasPackageJson(cwd)) {\n logInfo(`Detected package manager: ${styleText('cyan', packageManager.name)}`)\n }\n\n // Prompt for OpenAPI spec path\n const inputPath = await resolveOrPrompt(inputFlag, initDefaults.inputPath, 'Using input path', () =>\n clack.text({\n message: 'Where is your OpenAPI specification located?',\n placeholder: initDefaults.inputPath,\n defaultValue: initDefaults.inputPath,\n validate: (value) => {\n if (!value) return 'Input path is required'\n },\n }),\n )\n\n // Prompt for output directory\n const outputPath = await resolveOrPrompt(outputFlag, initDefaults.outputPath, 'Using output path', () =>\n clack.text({\n message: 'Where should the generated files be output?',\n placeholder: initDefaults.outputPath,\n defaultValue: initDefaults.outputPath,\n validate: (value) => {\n if (!value) return 'Output path is required'\n },\n }),\n )\n\n // Plugin selection\n const defaultPlugins = availablePlugins.filter((p) => (initDefaults.plugins as ReadonlyArray<string>).includes(p.value))\n const pluginLabel = (plugins: Array<PluginOption>) => styleText('cyan', plugins.map((p) => p.label).join(', '))\n\n const selectedPlugins: Array<PluginOption> = await (async () => {\n if (pluginsFlag) {\n const plugins = resolvePlugins(pluginsFlag)\n if (plugins.length === 0) {\n logWarn(`No valid plugins found in --plugins value; falling back to default: ${pluginLabel(defaultPlugins)}`)\n return defaultPlugins\n }\n logInfo(`Using plugins: ${pluginLabel(plugins)}`)\n return plugins\n }\n if (yes) {\n logInfo(`Using plugins: ${pluginLabel(defaultPlugins)}`)\n return defaultPlugins\n }\n const values = await clack.multiselect({\n message: 'Select plugins to use:',\n options: availablePlugins.map(({ value, label, hint }) => ({ value, label, hint })),\n initialValues: [...initDefaults.plugins],\n required: true,\n })\n if (clack.isCancel(values)) cancelAndExit()\n return availablePlugins.filter((p) => (values as Array<string>).includes(p.value))\n })()\n\n // Install packages, matching the release of the running CLI\n const packagesToInstall = resolveInstallVersions({ packages: [KUBB_PACKAGE_NAME, ...selectedPlugins.map((p) => p.packageName)], version })\n\n const spinner = createSpinner()\n spinner.start(`Installing ${packagesToInstall.length} packages with ${packageManager.name}`)\n\n try {\n await dryRun.run(() => installPackages(packagesToInstall, packageManager, cwd), {\n message: `install ${packagesToInstall.length} packages with ${packageManager.name}`,\n })\n spinner.stop(`Installed ${packagesToInstall.length} packages`)\n } catch (error) {\n spinner.stop('Installation failed')\n throw error\n }\n\n // Generate config file\n const configSpinner = createSpinner()\n configSpinner.start(`Creating ${KUBB_CONFIG_FILENAME}`)\n\n const configContent = generateConfigFile({ selectedPlugins, inputPath, outputPath })\n const configPath = path.join(cwd, KUBB_CONFIG_FILENAME)\n\n if (fs.existsSync(configPath)) {\n configSpinner.stop(`${KUBB_CONFIG_FILENAME} already exists`)\n\n if (!yes) {\n const shouldOverwrite = await clack.confirm({\n message: `${KUBB_CONFIG_FILENAME} already exists. Overwrite?`,\n initialValue: false,\n })\n\n if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {\n cancelAndExit('Keeping existing configuration. Packages have been installed.')\n }\n }\n\n configSpinner.start(`Overwriting ${KUBB_CONFIG_FILENAME}`)\n }\n\n await dryRun.run(() => fs.promises.writeFile(configPath, configContent, 'utf-8'), { message: `write ${KUBB_CONFIG_FILENAME}` })\n\n configSpinner.stop(`Created ${KUBB_CONFIG_FILENAME}`)\n\n logOutro(\n styleText('green', '✓ All set!') +\n '\\n\\n' +\n styleText('dim', 'Next steps:') +\n '\\n' +\n styleText('cyan', ` 1. Make sure your OpenAPI spec is at: ${inputPath}`) +\n '\\n' +\n styleText('cyan', ' 2. Generate code with: npx kubb generate') +\n '\\n' +\n styleText('cyan', ` 3. Find generated files in: ${outputPath}`) +\n '\\n\\n' +\n styleText('dim', `Using ${packageManager.name} • Kubb v${version}`),\n )\n } catch (error) {\n logError(styleText('red', 'An error occurred during initialization'))\n if (error instanceof Error) {\n logError(error.message)\n }\n process.exit(1)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "./rolldown-runtime-C0LytTxp.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { t as toError } from "./errors-C8yNfV7w.js";
|
|
3
|
+
import { r as sendTelemetry, t as buildTelemetryEvent } from "./Telemetry-BCTY-Nzq.js";
|
|
4
|
+
import { t as version } from "./package-GR1Pi9JF.js";
|
|
4
5
|
import { styleText } from "node:util";
|
|
5
6
|
import process from "node:process";
|
|
6
7
|
//#region src/runners/mcp/run.ts
|
|
@@ -27,7 +28,13 @@ async function run({ version }) {
|
|
|
27
28
|
process.exitCode = 1;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.
|
|
33
|
+
*/
|
|
34
|
+
const runner = async () => {
|
|
35
|
+
await run({ version });
|
|
36
|
+
};
|
|
30
37
|
//#endregion
|
|
31
|
-
export {
|
|
38
|
+
export { runner };
|
|
32
39
|
|
|
33
|
-
//# sourceMappingURL=run-
|
|
40
|
+
//# sourceMappingURL=run-DgV0unjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-DgV0unjs.js","names":[],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/mcp.ts'\n\ntype McpOptions = {\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run({ version }: McpOptions): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status }))\n\n try {\n console.log(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n\n await startMcpServer()\n await report('success')\n } catch (error) {\n await report('failed')\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async () => {\n await run({ version })\n}\n"],"mappings":";;;;;;;;;;AAmBA,eAAsB,IAAI,EAAE,WAAsC;CAChE,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,UAAU,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiC,cAAc,oBAAoB;EAAE,SAAS;EAAO,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAE7I,IAAI;EACF,QAAQ,IAAI,UAAU,QAAQ,0BAA0B,CAAC;EACzD,QAAQ,KAAK,UAAU,UAAU,2DAA2D,CAAC;EAE7F,MAAM,eAAe;EACrB,MAAM,OAAO,SAAS;CACxB,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,QAAQ,WAAW;CACrB;AACF;;;;AAKA,MAAa,SAA0E,YAAY;CACjG,MAAM,IAAI,EAAE,QAAQ,CAAC;AACvB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-qbf5tadS.cjs");
|
|
2
|
-
const
|
|
3
|
-
const
|
|
2
|
+
const require_errors = require("./errors-C-wEou02.cjs");
|
|
3
|
+
const require_Telemetry = require("./Telemetry-DKfJQxnC.cjs");
|
|
4
|
+
const require_package = require("./package-vVVyiYqL.cjs");
|
|
4
5
|
let node_util = require("node:util");
|
|
5
6
|
let node_process = require("node:process");
|
|
6
7
|
node_process = require_rolldown_runtime.__toESM(node_process, 1);
|
|
@@ -28,7 +29,13 @@ async function run({ version }) {
|
|
|
28
29
|
node_process.default.exitCode = 1;
|
|
29
30
|
}
|
|
30
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.
|
|
34
|
+
*/
|
|
35
|
+
const runner = async () => {
|
|
36
|
+
await run({ version: require_package.version });
|
|
37
|
+
};
|
|
31
38
|
//#endregion
|
|
32
|
-
exports.
|
|
39
|
+
exports.runner = runner;
|
|
33
40
|
|
|
34
|
-
//# sourceMappingURL=run-
|
|
41
|
+
//# sourceMappingURL=run-FLh61kzq.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-FLh61kzq.cjs","names":["process","sendTelemetry","buildTelemetryEvent","styleText","toError"],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/mcp.ts'\n\ntype McpOptions = {\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run({ version }: McpOptions): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status }))\n\n try {\n console.log(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n\n await startMcpServer()\n await report('success')\n } catch (error) {\n await report('failed')\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async () => {\n await run({ version })\n}\n"],"mappings":";;;;;;;;;;;AAmBA,eAAsB,IAAI,EAAE,WAAsC;CAChE,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,UAAUA,aAAAA,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiCC,kBAAAA,cAAcC,kBAAAA,oBAAoB;EAAE,SAAS;EAAO,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAE7I,IAAI;EACF,QAAQ,KAAA,GAAIC,UAAAA,UAAAA,CAAU,QAAQ,0BAA0B,CAAC;EACzD,QAAQ,MAAA,GAAKA,UAAAA,UAAAA,CAAU,UAAU,2DAA2D,CAAC;EAE7F,MAAM,eAAe;EACrB,MAAM,OAAO,SAAS;CACxB,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,aAAA,QAAA,WAAmB;CACrB;AACF;;;;AAKA,MAAa,SAA0E,YAAY;CACjG,MAAM,IAAI,EAAE,SAAA,gBAAA,QAAQ,CAAC;AACvB"}
|