@kubb/cli 4.32.4 → 4.33.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.
Files changed (133) hide show
  1. package/dist/agent-Bd1QdPVV.cjs +91 -0
  2. package/dist/agent-Bd1QdPVV.cjs.map +1 -0
  3. package/dist/agent-D83d9Pud.cjs +60 -0
  4. package/dist/agent-D83d9Pud.cjs.map +1 -0
  5. package/dist/agent-DgKQXSmR.js +57 -0
  6. package/dist/agent-DgKQXSmR.js.map +1 -0
  7. package/dist/agent-u_Ehwz6r.js +87 -0
  8. package/dist/agent-u_Ehwz6r.js.map +1 -0
  9. package/dist/constants-BTUap0zs.cjs +108 -0
  10. package/dist/constants-BTUap0zs.cjs.map +1 -0
  11. package/dist/constants-CM3dJzjK.js +67 -0
  12. package/dist/constants-CM3dJzjK.js.map +1 -0
  13. package/dist/define--M_JMcDC.js +25 -0
  14. package/dist/define--M_JMcDC.js.map +1 -0
  15. package/dist/define-D6Kfm7-Z.cjs +36 -0
  16. package/dist/define-D6Kfm7-Z.cjs.map +1 -0
  17. package/dist/errors-6mF_WKxg.js +27 -0
  18. package/dist/errors-6mF_WKxg.js.map +1 -0
  19. package/dist/errors-DBW0N9w4.cjs +44 -0
  20. package/dist/errors-DBW0N9w4.cjs.map +1 -0
  21. package/dist/generate-Bn8n4w1O.cjs +65 -0
  22. package/dist/generate-Bn8n4w1O.cjs.map +1 -0
  23. package/dist/{generate-CpWtSc45.js → generate-CAsV9wSx.js} +656 -689
  24. package/dist/generate-CAsV9wSx.js.map +1 -0
  25. package/dist/generate-D-59YK0L.js +66 -0
  26. package/dist/generate-D-59YK0L.js.map +1 -0
  27. package/dist/{generate-COj0aMS6.cjs → generate-JC65igQh.cjs} +662 -694
  28. package/dist/generate-JC65igQh.cjs.map +1 -0
  29. package/dist/index.cjs +226 -35
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.js +226 -35
  33. package/dist/index.js.map +1 -1
  34. package/dist/init-C-InrmSY.js +302 -0
  35. package/dist/init-C-InrmSY.js.map +1 -0
  36. package/dist/init-CXP8OfMe.js +25 -0
  37. package/dist/init-CXP8OfMe.js.map +1 -0
  38. package/dist/init-CbeE-L-0.cjs +25 -0
  39. package/dist/init-CbeE-L-0.cjs.map +1 -0
  40. package/dist/init-hmolV6B4.cjs +306 -0
  41. package/dist/init-hmolV6B4.cjs.map +1 -0
  42. package/dist/jiti-Cd3S0xwr.cjs +16 -0
  43. package/dist/jiti-Cd3S0xwr.cjs.map +1 -0
  44. package/dist/jiti-e08mD2Ph.js +11 -0
  45. package/dist/jiti-e08mD2Ph.js.map +1 -0
  46. package/dist/mcp-BDxg2oJm.cjs +16 -0
  47. package/dist/mcp-BDxg2oJm.cjs.map +1 -0
  48. package/dist/mcp-ChHFPRzD.cjs +42 -0
  49. package/dist/mcp-ChHFPRzD.cjs.map +1 -0
  50. package/dist/mcp-D2SHEg_d.js +41 -0
  51. package/dist/mcp-D2SHEg_d.js.map +1 -0
  52. package/dist/mcp-MSoE4vNA.js +16 -0
  53. package/dist/mcp-MSoE4vNA.js.map +1 -0
  54. package/dist/{package-aNQWvWbS.cjs → package-CUVyeIbt.cjs} +2 -2
  55. package/dist/package-CUVyeIbt.cjs.map +1 -0
  56. package/dist/package-Cbd8OC6q.js +6 -0
  57. package/dist/package-Cbd8OC6q.js.map +1 -0
  58. package/dist/shell-7HPrTCJ5.cjs +57 -0
  59. package/dist/shell-7HPrTCJ5.cjs.map +1 -0
  60. package/dist/shell-DqqWsHCD.js +46 -0
  61. package/dist/shell-DqqWsHCD.js.map +1 -0
  62. package/dist/{telemetry-BDSSqUiG.cjs → telemetry-Cn9X1I5B.cjs} +79 -9
  63. package/dist/telemetry-Cn9X1I5B.cjs.map +1 -0
  64. package/dist/{telemetry-DYWvlxqs.js → telemetry-DxiR7clS.js} +63 -11
  65. package/dist/telemetry-DxiR7clS.js.map +1 -0
  66. package/dist/validate-BG8A3aQS.cjs +25 -0
  67. package/dist/validate-BG8A3aQS.cjs.map +1 -0
  68. package/dist/validate-BZ1UFkwA.js +25 -0
  69. package/dist/validate-BZ1UFkwA.js.map +1 -0
  70. package/dist/validate-Bbrn3Q-A.cjs +42 -0
  71. package/dist/validate-Bbrn3Q-A.cjs.map +1 -0
  72. package/dist/validate-l8vLmwKA.js +41 -0
  73. package/dist/validate-l8vLmwKA.js.map +1 -0
  74. package/package.json +6 -6
  75. package/src/commands/agent/start.ts +27 -136
  76. package/src/commands/agent.ts +6 -25
  77. package/src/commands/generate.ts +26 -158
  78. package/src/commands/init.ts +9 -360
  79. package/src/commands/mcp.ts +7 -52
  80. package/src/commands/validate.ts +9 -60
  81. package/src/constants.ts +76 -0
  82. package/src/index.ts +36 -42
  83. package/src/loggers/clackLogger.ts +65 -165
  84. package/src/loggers/fileSystemLogger.ts +2 -14
  85. package/src/loggers/githubActionsLogger.ts +58 -125
  86. package/src/loggers/plainLogger.ts +44 -92
  87. package/src/loggers/utils.ts +67 -4
  88. package/src/runners/agent.ts +100 -0
  89. package/src/runners/generate.ts +223 -102
  90. package/src/runners/init.ts +323 -0
  91. package/src/runners/mcp.ts +32 -0
  92. package/src/runners/validate.ts +35 -0
  93. package/src/utils/Writables.ts +2 -2
  94. package/src/utils/executeHooks.ts +20 -8
  95. package/src/utils/getCosmiConfig.ts +10 -11
  96. package/src/utils/getIntro.ts +1 -81
  97. package/src/utils/getSummary.ts +12 -17
  98. package/src/utils/jiti.ts +9 -0
  99. package/src/utils/packageManager.ts +4 -4
  100. package/src/utils/runHook.ts +75 -0
  101. package/src/utils/telemetry.ts +8 -26
  102. package/src/utils/watcher.ts +2 -4
  103. package/dist/agent-6COck3B9.cjs +0 -20
  104. package/dist/agent-6COck3B9.cjs.map +0 -1
  105. package/dist/agent-DMm6c5Vg.js +0 -20
  106. package/dist/agent-DMm6c5Vg.js.map +0 -1
  107. package/dist/generate-COj0aMS6.cjs.map +0 -1
  108. package/dist/generate-CpWtSc45.js.map +0 -1
  109. package/dist/init-Bdn3_qir.js +0 -304
  110. package/dist/init-Bdn3_qir.js.map +0 -1
  111. package/dist/init-CFW2kWY8.cjs +0 -308
  112. package/dist/init-CFW2kWY8.cjs.map +0 -1
  113. package/dist/mcp-DkwtARfo.cjs +0 -57
  114. package/dist/mcp-DkwtARfo.cjs.map +0 -1
  115. package/dist/mcp-DrH93Vq4.js +0 -57
  116. package/dist/mcp-DrH93Vq4.js.map +0 -1
  117. package/dist/package-BnJbGmLm.js +0 -6
  118. package/dist/package-BnJbGmLm.js.map +0 -1
  119. package/dist/package-aNQWvWbS.cjs.map +0 -1
  120. package/dist/start-CqTUu14n.js +0 -131
  121. package/dist/start-CqTUu14n.js.map +0 -1
  122. package/dist/start-D-rsIJGo.cjs +0 -134
  123. package/dist/start-D-rsIJGo.cjs.map +0 -1
  124. package/dist/telemetry-BDSSqUiG.cjs.map +0 -1
  125. package/dist/telemetry-DYWvlxqs.js.map +0 -1
  126. package/dist/validate-BlV8L8gC.js +0 -66
  127. package/dist/validate-BlV8L8gC.js.map +0 -1
  128. package/dist/validate-COhZUXF8.cjs +0 -66
  129. package/dist/validate-COhZUXF8.cjs.map +0 -1
  130. package/src/loggers/envDetection.ts +0 -28
  131. package/src/loggers/index.ts +0 -5
  132. package/src/utils/formatMsWithColor.ts +0 -22
  133. package/src/utils/randomColor.ts +0 -23
@@ -1,308 +0,0 @@
1
- const require_chunk = require("./chunk-ByKO4r7w.cjs");
2
- const require_package = require("./package-aNQWvWbS.cjs");
3
- let node_util = require("node:util");
4
- let citty = require("citty");
5
- let node_process = require("node:process");
6
- node_process = require_chunk.__toESM(node_process);
7
- let node_child_process = require("node:child_process");
8
- let node_path = require("node:path");
9
- node_path = require_chunk.__toESM(node_path);
10
- let _clack_prompts = require("@clack/prompts");
11
- _clack_prompts = require_chunk.__toESM(_clack_prompts);
12
- let _kubb_core = require("@kubb/core");
13
- let node_fs = require("node:fs");
14
- node_fs = require_chunk.__toESM(node_fs);
15
- //#region src/utils/packageManager.ts
16
- function hasPackageJson(cwd = process.cwd()) {
17
- return node_fs.default.existsSync(node_path.default.join(cwd, "package.json"));
18
- }
19
- async function initPackageJson(cwd, packageManager) {
20
- (0, node_child_process.spawn)(packageManager.name, {
21
- npm: ["init", "-y"],
22
- pnpm: ["init"],
23
- yarn: ["init", "-y"],
24
- bun: ["init", "-y"]
25
- }[packageManager.name], {
26
- stdio: "inherit",
27
- cwd
28
- });
29
- }
30
- async function installPackages(packages, packageManager, cwd = process.cwd()) {
31
- (0, node_child_process.spawn)(packageManager.name, [...packageManager.installCommand, ...packages], {
32
- stdio: "inherit",
33
- cwd
34
- });
35
- }
36
- //#endregion
37
- //#region src/commands/init.ts
38
- const plugins = [
39
- {
40
- value: "plugin-oas",
41
- label: "OpenAPI Parser",
42
- hint: "Required",
43
- packageName: "@kubb/plugin-oas",
44
- importName: "pluginOas",
45
- category: "core"
46
- },
47
- {
48
- value: "plugin-ts",
49
- label: "TypeScript",
50
- hint: "Recommended",
51
- packageName: "@kubb/plugin-ts",
52
- importName: "pluginTs",
53
- category: "typescript"
54
- },
55
- {
56
- value: "plugin-client",
57
- label: "Client (Fetch/Axios)",
58
- packageName: "@kubb/plugin-client",
59
- importName: "pluginClient",
60
- category: "typescript"
61
- },
62
- {
63
- value: "plugin-react-query",
64
- label: "React Query / TanStack Query",
65
- packageName: "@kubb/plugin-react-query",
66
- importName: "pluginReactQuery",
67
- category: "query"
68
- },
69
- {
70
- value: "plugin-solid-query",
71
- label: "Solid Query",
72
- packageName: "@kubb/plugin-solid-query",
73
- importName: "pluginSolidQuery",
74
- category: "query"
75
- },
76
- {
77
- value: "plugin-svelte-query",
78
- label: "Svelte Query",
79
- packageName: "@kubb/plugin-svelte-query",
80
- importName: "pluginSvelteQuery",
81
- category: "query"
82
- },
83
- {
84
- value: "plugin-vue-query",
85
- label: "Vue Query",
86
- packageName: "@kubb/plugin-vue-query",
87
- importName: "pluginVueQuery",
88
- category: "query"
89
- },
90
- {
91
- value: "plugin-swr",
92
- label: "SWR",
93
- packageName: "@kubb/plugin-swr",
94
- importName: "pluginSwr",
95
- category: "query"
96
- },
97
- {
98
- value: "plugin-zod",
99
- label: "Zod Schemas",
100
- packageName: "@kubb/plugin-zod",
101
- importName: "pluginZod",
102
- category: "validation"
103
- },
104
- {
105
- value: "plugin-faker",
106
- label: "Faker.js Mocks",
107
- packageName: "@kubb/plugin-faker",
108
- importName: "pluginFaker",
109
- category: "mocking"
110
- },
111
- {
112
- value: "plugin-msw",
113
- label: "MSW Handlers",
114
- packageName: "@kubb/plugin-msw",
115
- importName: "pluginMsw",
116
- category: "mocking"
117
- },
118
- {
119
- value: "plugin-cypress",
120
- label: "Cypress Tests",
121
- packageName: "@kubb/plugin-cypress",
122
- importName: "pluginCypress",
123
- category: "testing"
124
- },
125
- {
126
- value: "plugin-redoc",
127
- label: "ReDoc Documentation",
128
- packageName: "@kubb/plugin-redoc",
129
- importName: "pluginRedoc",
130
- category: "docs"
131
- }
132
- ];
133
- function generateConfigFile(selectedPlugins, inputPath, outputPath) {
134
- return `import { defineConfig } from '@kubb/core'
135
- ${selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join("\n")}
136
-
137
- export default defineConfig({
138
- root: '.',
139
- input: {
140
- path: '${inputPath}',
141
- },
142
- output: {
143
- path: '${outputPath}',
144
- clean: true,
145
- },
146
- plugins: [
147
- ${selectedPlugins.map((plugin) => {
148
- if (plugin.value === "plugin-oas") return " pluginOas(),";
149
- if (plugin.value === "plugin-ts") return ` pluginTs({\n output: {\n path: 'models',\n },\n }),`;
150
- if (plugin.value === "plugin-client") return ` pluginClient({\n output: {\n path: 'clients',\n },\n }),`;
151
- if (plugin.value === "plugin-react-query") return ` pluginReactQuery({\n output: {\n path: 'hooks',\n },\n }),`;
152
- if (plugin.value === "plugin-zod") return ` pluginZod({\n output: {\n path: 'zod',\n },\n }),`;
153
- if (plugin.value === "plugin-faker") return ` pluginFaker({\n output: {\n path: 'mocks',\n },\n }),`;
154
- if (plugin.value === "plugin-msw") return ` pluginMsw({\n output: {\n path: 'msw',\n },\n }),`;
155
- if (plugin.value === "plugin-swr") return ` pluginSwr({\n output: {\n path: 'hooks',\n },\n }),`;
156
- return ` ${plugin.importName}(),`;
157
- }).join("\n")}
158
- ],
159
- })
160
- `;
161
- }
162
- const DEFAULT_INPUT_PATH = "./openapi.yaml";
163
- const DEFAULT_OUTPUT_PATH = "./src/gen";
164
- const DEFAULT_PLUGINS = ["plugin-oas", "plugin-ts"];
165
- const command = (0, citty.defineCommand)({
166
- meta: {
167
- name: "init",
168
- description: "Initialize a new Kubb project with interactive setup"
169
- },
170
- args: { yes: {
171
- type: "boolean",
172
- alias: "y",
173
- description: "Skip prompts and use default options",
174
- default: false
175
- } },
176
- async run({ args }) {
177
- const cwd = node_process.default.cwd();
178
- const yes = args.yes;
179
- _clack_prompts.intro((0, node_util.styleText)("bgCyan", (0, node_util.styleText)("black", " Kubb Init ")));
180
- try {
181
- let packageManager;
182
- if (!hasPackageJson(cwd)) {
183
- if (!yes) {
184
- const shouldInit = await _clack_prompts.confirm({
185
- message: "No package.json found. Would you like to create one?",
186
- initialValue: true
187
- });
188
- if (_clack_prompts.isCancel(shouldInit) || !shouldInit) {
189
- _clack_prompts.cancel("Operation cancelled.");
190
- node_process.default.exit(0);
191
- }
192
- }
193
- packageManager = (0, _kubb_core.detectPackageManager)(cwd);
194
- const spinner = _clack_prompts.spinner();
195
- spinner.start(`Initializing package.json with ${packageManager.name}`);
196
- await initPackageJson(cwd, packageManager);
197
- spinner.stop(`Created package.json with ${packageManager.name}`);
198
- } else {
199
- packageManager = (0, _kubb_core.detectPackageManager)(cwd);
200
- _clack_prompts.log.info(`Detected package manager: ${(0, node_util.styleText)("cyan", packageManager.name)}`);
201
- }
202
- let inputPath;
203
- if (yes) {
204
- inputPath = DEFAULT_INPUT_PATH;
205
- _clack_prompts.log.info(`Using input path: ${(0, node_util.styleText)("cyan", inputPath)}`);
206
- } else {
207
- const inputPathResult = await _clack_prompts.text({
208
- message: "Where is your OpenAPI specification located?",
209
- placeholder: DEFAULT_INPUT_PATH,
210
- defaultValue: DEFAULT_INPUT_PATH,
211
- validate: (value) => {
212
- if (!value) return "Input path is required";
213
- }
214
- });
215
- if (_clack_prompts.isCancel(inputPathResult)) {
216
- _clack_prompts.cancel("Operation cancelled.");
217
- node_process.default.exit(0);
218
- }
219
- inputPath = inputPathResult;
220
- }
221
- let outputPath;
222
- if (yes) {
223
- outputPath = DEFAULT_OUTPUT_PATH;
224
- _clack_prompts.log.info(`Using output path: ${(0, node_util.styleText)("cyan", outputPath)}`);
225
- } else {
226
- const outputPathResult = await _clack_prompts.text({
227
- message: "Where should the generated files be output?",
228
- placeholder: DEFAULT_OUTPUT_PATH,
229
- defaultValue: DEFAULT_OUTPUT_PATH,
230
- validate: (value) => {
231
- if (!value) return "Output path is required";
232
- }
233
- });
234
- if (_clack_prompts.isCancel(outputPathResult)) {
235
- _clack_prompts.cancel("Operation cancelled.");
236
- node_process.default.exit(0);
237
- }
238
- outputPath = outputPathResult;
239
- }
240
- let selectedPlugins;
241
- if (yes) {
242
- selectedPlugins = plugins.filter((plugin) => DEFAULT_PLUGINS.includes(plugin.value));
243
- _clack_prompts.log.info(`Using plugins: ${(0, node_util.styleText)("cyan", selectedPlugins.map((p) => p.label).join(", "))}`);
244
- } else {
245
- const selectedPluginValues = await _clack_prompts.multiselect({
246
- message: "Select plugins to use:",
247
- options: plugins.map((plugin) => ({
248
- value: plugin.value,
249
- label: plugin.label,
250
- hint: plugin.hint
251
- })),
252
- initialValues: DEFAULT_PLUGINS,
253
- required: true
254
- });
255
- if (_clack_prompts.isCancel(selectedPluginValues)) {
256
- _clack_prompts.cancel("Operation cancelled.");
257
- node_process.default.exit(0);
258
- }
259
- selectedPlugins = plugins.filter((plugin) => selectedPluginValues.includes(plugin.value));
260
- }
261
- if (!selectedPlugins.find((p) => p.value === "plugin-oas")) selectedPlugins.unshift(plugins.find((p) => p.value === "plugin-oas"));
262
- const packagesToInstall = [
263
- "@kubb/core",
264
- "@kubb/cli",
265
- "@kubb/agent",
266
- ...selectedPlugins.map((p) => p.packageName)
267
- ];
268
- const spinner = _clack_prompts.spinner();
269
- spinner.start(`Installing ${packagesToInstall.length} packages with ${packageManager.name}`);
270
- try {
271
- await installPackages(packagesToInstall, packageManager, cwd);
272
- spinner.stop(`Installed ${packagesToInstall.length} packages`);
273
- } catch (error) {
274
- spinner.stop("Installation failed");
275
- throw error;
276
- }
277
- const configSpinner = _clack_prompts.spinner();
278
- configSpinner.start("Creating kubb.config.ts");
279
- const configContent = generateConfigFile(selectedPlugins, inputPath, outputPath);
280
- const configPath = node_path.default.join(cwd, "kubb.config.ts");
281
- if (node_fs.default.existsSync(configPath)) {
282
- configSpinner.stop("kubb.config.ts already exists");
283
- if (!yes) {
284
- const shouldOverwrite = await _clack_prompts.confirm({
285
- message: "kubb.config.ts already exists. Overwrite?",
286
- initialValue: false
287
- });
288
- if (_clack_prompts.isCancel(shouldOverwrite) || !shouldOverwrite) {
289
- _clack_prompts.cancel("Keeping existing configuration. Packages have been installed.");
290
- node_process.default.exit(0);
291
- }
292
- }
293
- configSpinner.start("Overwriting kubb.config.ts");
294
- }
295
- node_fs.default.writeFileSync(configPath, configContent, "utf-8");
296
- configSpinner.stop("Created kubb.config.ts");
297
- _clack_prompts.outro((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", " Or start a stream server with: npx kubb start") + "\n" + (0, node_util.styleText)("cyan", ` 3. Find generated files in: ${outputPath}`) + "\n\n" + (0, node_util.styleText)("dim", `Using ${packageManager.name} • Kubb v${require_package.version}`));
298
- } catch (error) {
299
- _clack_prompts.log.error((0, node_util.styleText)("red", "An error occurred during initialization"));
300
- if (error instanceof Error) _clack_prompts.log.error(error.message);
301
- node_process.default.exit(1);
302
- }
303
- }
304
- });
305
- //#endregion
306
- exports.default = command;
307
-
308
- //# sourceMappingURL=init-CFW2kWY8.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-CFW2kWY8.cjs","names":["fs","path","process","clack","path","fs","version"],"sources":["../src/utils/packageManager.ts","../src/commands/init.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport type { PackageManagerInfo, PackageManagerName } from '@kubb/core'\n\nexport function hasPackageJson(cwd: string = process.cwd()): boolean {\n return fs.existsSync(path.join(cwd, 'package.json'))\n}\n\nexport async function initPackageJson(cwd: string, packageManager: PackageManagerInfo): Promise<void> {\n const commands: Record<PackageManagerName, string[]> = {\n npm: ['init', '-y'],\n pnpm: ['init'],\n yarn: ['init', '-y'],\n bun: ['init', '-y'],\n }\n\n spawn(packageManager.name, commands[packageManager.name], { stdio: 'inherit', cwd })\n}\n\nexport async function installPackages(packages: string[], packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n spawn(packageManager.name, [...packageManager.installCommand, ...packages], { stdio: 'inherit', cwd })\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 { detectPackageManager, type PackageManagerInfo } from '@kubb/core'\nimport { defineCommand } from 'citty'\nimport { version } from '../../package.json'\nimport { hasPackageJson, initPackageJson, installPackages } from '../utils/packageManager.ts'\n\ntype PluginOption = {\n value: string\n label: string\n hint?: string\n packageName: string\n importName: string\n category: 'core' | 'typescript' | 'query' | 'validation' | 'testing' | 'mocking' | 'docs'\n}\n\nconst plugins: PluginOption[] = [\n {\n value: 'plugin-oas',\n label: 'OpenAPI Parser',\n hint: 'Required',\n packageName: '@kubb/plugin-oas',\n importName: 'pluginOas',\n category: 'core',\n },\n {\n value: 'plugin-ts',\n label: 'TypeScript',\n hint: 'Recommended',\n packageName: '@kubb/plugin-ts',\n importName: 'pluginTs',\n category: 'typescript',\n },\n {\n value: 'plugin-client',\n label: 'Client (Fetch/Axios)',\n packageName: '@kubb/plugin-client',\n importName: 'pluginClient',\n category: 'typescript',\n },\n {\n value: 'plugin-react-query',\n label: 'React Query / TanStack Query',\n packageName: '@kubb/plugin-react-query',\n importName: 'pluginReactQuery',\n category: 'query',\n },\n {\n value: 'plugin-solid-query',\n label: 'Solid Query',\n packageName: '@kubb/plugin-solid-query',\n importName: 'pluginSolidQuery',\n category: 'query',\n },\n {\n value: 'plugin-svelte-query',\n label: 'Svelte Query',\n packageName: '@kubb/plugin-svelte-query',\n importName: 'pluginSvelteQuery',\n category: 'query',\n },\n {\n value: 'plugin-vue-query',\n label: 'Vue Query',\n packageName: '@kubb/plugin-vue-query',\n importName: 'pluginVueQuery',\n category: 'query',\n },\n {\n value: 'plugin-swr',\n label: 'SWR',\n packageName: '@kubb/plugin-swr',\n importName: 'pluginSwr',\n category: 'query',\n },\n {\n value: 'plugin-zod',\n label: 'Zod Schemas',\n packageName: '@kubb/plugin-zod',\n importName: 'pluginZod',\n category: 'validation',\n },\n {\n value: 'plugin-faker',\n label: 'Faker.js Mocks',\n packageName: '@kubb/plugin-faker',\n importName: 'pluginFaker',\n category: 'mocking',\n },\n {\n value: 'plugin-msw',\n label: 'MSW Handlers',\n packageName: '@kubb/plugin-msw',\n importName: 'pluginMsw',\n category: 'mocking',\n },\n {\n value: 'plugin-cypress',\n label: 'Cypress Tests',\n packageName: '@kubb/plugin-cypress',\n importName: 'pluginCypress',\n category: 'testing',\n },\n {\n value: 'plugin-redoc',\n label: 'ReDoc Documentation',\n packageName: '@kubb/plugin-redoc',\n importName: 'pluginRedoc',\n category: 'docs',\n },\n]\n\nfunction generateConfigFile(selectedPlugins: PluginOption[], inputPath: string, outputPath: string): string {\n const imports = selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join('\\n')\n\n const pluginConfigs = selectedPlugins\n .map((plugin) => {\n if (plugin.value === 'plugin-oas') {\n return ' pluginOas(),'\n }\n if (plugin.value === 'plugin-ts') {\n return ` pluginTs({\\n output: {\\n path: 'models',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-client') {\n return ` pluginClient({\\n output: {\\n path: 'clients',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-react-query') {\n return ` pluginReactQuery({\\n output: {\\n path: 'hooks',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-zod') {\n return ` pluginZod({\\n output: {\\n path: 'zod',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-faker') {\n return ` pluginFaker({\\n output: {\\n path: 'mocks',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-msw') {\n return ` pluginMsw({\\n output: {\\n path: 'msw',\\n },\\n }),`\n }\n if (plugin.value === 'plugin-swr') {\n return ` pluginSwr({\\n output: {\\n path: 'hooks',\\n },\\n }),`\n }\n // Default config for other plugins\n return ` ${plugin.importName}(),`\n })\n .join('\\n')\n\n return `import { defineConfig } from '@kubb/core'\n${imports}\n\nexport default defineConfig({\n root: '.',\n input: {\n path: '${inputPath}',\n },\n output: {\n path: '${outputPath}',\n clean: true,\n },\n plugins: [\n${pluginConfigs}\n ],\n})\n`\n}\n\nconst DEFAULT_INPUT_PATH = './openapi.yaml'\nconst DEFAULT_OUTPUT_PATH = './src/gen'\nconst DEFAULT_PLUGINS = ['plugin-oas', 'plugin-ts']\n\nconst command = defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new Kubb project with interactive setup',\n },\n args: {\n yes: {\n type: 'boolean',\n alias: 'y',\n description: 'Skip prompts and use default options',\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd()\n const yes = args.yes\n\n clack.intro(styleText('bgCyan', styleText('black', ' Kubb Init ')))\n\n try {\n // Check/create package.json\n let packageManager: PackageManagerInfo\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 clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n }\n\n // Detect package manager before initializing\n packageManager = detectPackageManager(cwd)\n\n const spinner = clack.spinner()\n spinner.start(`Initializing package.json with ${packageManager.name}`)\n\n await initPackageJson(cwd, packageManager)\n\n spinner.stop(`Created package.json with ${packageManager.name}`)\n } else {\n packageManager = detectPackageManager(cwd)\n clack.log.info(`Detected package manager: ${styleText('cyan', packageManager.name)}`)\n }\n\n // Prompt for OpenAPI spec path\n let inputPath: string\n if (yes) {\n inputPath = DEFAULT_INPUT_PATH\n clack.log.info(`Using input path: ${styleText('cyan', inputPath)}`)\n } else {\n const inputPathResult = await clack.text({\n message: 'Where is your OpenAPI specification located?',\n placeholder: DEFAULT_INPUT_PATH,\n defaultValue: DEFAULT_INPUT_PATH,\n validate: (value) => {\n if (!value) return 'Input path is required'\n },\n })\n\n if (clack.isCancel(inputPathResult)) {\n clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n inputPath = inputPathResult as string\n }\n\n // Prompt for output directory\n let outputPath: string\n if (yes) {\n outputPath = DEFAULT_OUTPUT_PATH\n clack.log.info(`Using output path: ${styleText('cyan', outputPath)}`)\n } else {\n const outputPathResult = await clack.text({\n message: 'Where should the generated files be output?',\n placeholder: DEFAULT_OUTPUT_PATH,\n defaultValue: DEFAULT_OUTPUT_PATH,\n validate: (value) => {\n if (!value) return 'Output path is required'\n },\n })\n\n if (clack.isCancel(outputPathResult)) {\n clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n outputPath = outputPathResult as string\n }\n\n // Plugin selection\n let selectedPlugins: PluginOption[]\n if (yes) {\n selectedPlugins = plugins.filter((plugin) => DEFAULT_PLUGINS.includes(plugin.value))\n clack.log.info(`Using plugins: ${styleText('cyan', selectedPlugins.map((p) => p.label).join(', '))}`)\n } else {\n const selectedPluginValues = await clack.multiselect({\n message: 'Select plugins to use:',\n options: plugins.map((plugin) => ({\n value: plugin.value,\n label: plugin.label,\n hint: plugin.hint,\n })),\n initialValues: DEFAULT_PLUGINS,\n required: true,\n })\n\n if (clack.isCancel(selectedPluginValues)) {\n clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n\n selectedPlugins = plugins.filter((plugin) => (selectedPluginValues as string[]).includes(plugin.value))\n }\n\n // Ensure plugin-oas is always included\n if (!selectedPlugins.find((p) => p.value === 'plugin-oas')) {\n selectedPlugins.unshift(plugins.find((p) => p.value === 'plugin-oas')!)\n }\n\n // Install packages\n const packagesToInstall = ['@kubb/core', '@kubb/cli', '@kubb/agent', ...selectedPlugins.map((p) => p.packageName)]\n\n const spinner = clack.spinner()\n spinner.start(`Installing ${packagesToInstall.length} packages with ${packageManager.name}`)\n\n try {\n await installPackages(packagesToInstall, packageManager, cwd)\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 = clack.spinner()\n configSpinner.start('Creating kubb.config.ts')\n\n const configContent = generateConfigFile(selectedPlugins, inputPath, outputPath)\n const configPath = path.join(cwd, 'kubb.config.ts')\n\n // Check if config already exists\n if (fs.existsSync(configPath)) {\n configSpinner.stop('kubb.config.ts already exists')\n\n if (!yes) {\n const shouldOverwrite = await clack.confirm({\n message: 'kubb.config.ts already exists. Overwrite?',\n initialValue: false,\n })\n\n if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {\n clack.cancel('Keeping existing configuration. Packages have been installed.')\n process.exit(0)\n }\n }\n\n configSpinner.start('Overwriting kubb.config.ts')\n }\n\n fs.writeFileSync(configPath, configContent, 'utf-8')\n\n configSpinner.stop('Created kubb.config.ts')\n\n // Success message\n clack.outro(\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', ' Or start a stream server with: npx kubb start') +\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 clack.log.error(styleText('red', 'An error occurred during initialization'))\n if (error instanceof Error) {\n clack.log.error(error.message)\n }\n process.exit(1)\n }\n },\n})\n\nexport default command\n"],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- const require_chunk = require("./chunk-ByKO4r7w.cjs");
2
- const require_package = require("./package-aNQWvWbS.cjs");
3
- const require_telemetry = require("./telemetry-BDSSqUiG.cjs");
4
- let node_util = require("node:util");
5
- let citty = require("citty");
6
- let node_process = require("node:process");
7
- node_process = require_chunk.__toESM(node_process);
8
- //#region src/commands/mcp.ts
9
- const jiti$1 = (0, require("jiti").createJiti)(require("url").pathToFileURL(__filename).href, { sourceMaps: true });
10
- const command = (0, citty.defineCommand)({
11
- meta: {
12
- name: "mcp",
13
- description: "Start the server to enable the MCP client to interact with the LLM."
14
- },
15
- args: { help: {
16
- type: "boolean",
17
- description: "Show help",
18
- alias: "h",
19
- default: false
20
- } },
21
- async run(commandContext) {
22
- const { args } = commandContext;
23
- if (args.help) return (0, citty.showUsage)(command);
24
- let mod;
25
- try {
26
- mod = await jiti$1.import("@kubb/mcp", { default: true });
27
- } catch (_e) {
28
- console.error(`Import of '@kubb/mcp' is required to start the MCP server`);
29
- node_process.default.exit(1);
30
- }
31
- const { run } = mod;
32
- const hrStart = node_process.default.hrtime();
33
- try {
34
- console.log("⏳ Starting MCP server...");
35
- console.warn((0, node_util.styleText)("yellow", "This feature is still under development — use with caution"));
36
- run();
37
- await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
38
- command: "mcp",
39
- kubbVersion: require_package.version,
40
- hrStart,
41
- status: "success"
42
- }));
43
- } catch (error) {
44
- await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
45
- command: "mcp",
46
- kubbVersion: require_package.version,
47
- hrStart,
48
- status: "failed"
49
- }));
50
- console.error(error?.message);
51
- }
52
- }
53
- });
54
- //#endregion
55
- exports.default = command;
56
-
57
- //# sourceMappingURL=mcp-DkwtARfo.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-DkwtARfo.cjs","names":["jiti","process","sendTelemetry","buildTelemetryEvent","version"],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport type { ArgsDef } from 'citty'\nimport { defineCommand, showUsage } from 'citty'\nimport { createJiti } from 'jiti'\nimport { version } from '../../package.json'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\nconst jiti = createJiti(import.meta.url, {\n sourceMaps: true,\n})\n\nconst args = {\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nconst command = defineCommand({\n meta: {\n name: 'mcp',\n description: 'Start the server to enable the MCP client to interact with the LLM.',\n },\n args,\n async run(commandContext) {\n const { args } = commandContext\n\n if (args.help) {\n return showUsage(command)\n }\n\n let mod: any\n try {\n mod = await jiti.import('@kubb/mcp', { default: true })\n } catch (_e) {\n console.error(`Import of '@kubb/mcp' is required to start the MCP server`)\n process.exit(1)\n }\n\n const { run } = mod\n const hrStart = process.hrtime()\n try {\n console.log('⏳ Starting MCP server...')\n console.warn(styleText('yellow', 'This feature is still under development — use with caution'))\n run()\n await sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status: 'success' }))\n } catch (error) {\n await sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status: 'failed' }))\n console.error((error as Error)?.message)\n }\n },\n})\n\nexport default command\n"],"mappings":";;;;;;;;AAQA,MAAMA,UAAAA,mBAAAA,YAAAA,QAAAA,MAAAA,CAAAA,cAAAA,WAAAA,CAAAA,MAAmC,EACvC,YAAY,MACb,CAAC;AAWF,MAAM,WAAA,GAAA,MAAA,eAAwB;CAC5B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAdW,EACX,MAAM;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,SAAS;EACV,EACF;CAQC,MAAM,IAAI,gBAAgB;EACxB,MAAM,EAAE,SAAS;AAEjB,MAAI,KAAK,KACP,SAAA,GAAA,MAAA,WAAiB,QAAQ;EAG3B,IAAI;AACJ,MAAI;AACF,SAAM,MAAMA,OAAK,OAAO,aAAa,EAAE,SAAS,MAAM,CAAC;WAChD,IAAI;AACX,WAAQ,MAAM,4DAA4D;AAC1E,gBAAA,QAAQ,KAAK,EAAE;;EAGjB,MAAM,EAAE,QAAQ;EAChB,MAAM,UAAUC,aAAAA,QAAQ,QAAQ;AAChC,MAAI;AACF,WAAQ,IAAI,2BAA2B;AACvC,WAAQ,MAAA,GAAA,UAAA,WAAe,UAAU,6DAA6D,CAAC;AAC/F,QAAK;AACL,SAAMC,kBAAAA,cAAcC,kBAAAA,oBAAoB;IAAE,SAAS;IAAO,aAAaC,gBAAAA;IAAS;IAAS,QAAQ;IAAW,CAAC,CAAC;WACvG,OAAO;AACd,SAAMF,kBAAAA,cAAcC,kBAAAA,oBAAoB;IAAE,SAAS;IAAO,aAAaC,gBAAAA;IAAS;IAAS,QAAQ;IAAU,CAAC,CAAC;AAC7G,WAAQ,MAAO,OAAiB,QAAQ;;;CAG7C,CAAC"}
@@ -1,57 +0,0 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { t as version } from "./package-BnJbGmLm.js";
3
- import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-DYWvlxqs.js";
4
- import { styleText } from "node:util";
5
- import { defineCommand, showUsage } from "citty";
6
- import process from "node:process";
7
- import { createJiti } from "jiti";
8
- //#region src/commands/mcp.ts
9
- const jiti = createJiti(import.meta.url, { sourceMaps: true });
10
- const command = defineCommand({
11
- meta: {
12
- name: "mcp",
13
- description: "Start the server to enable the MCP client to interact with the LLM."
14
- },
15
- args: { help: {
16
- type: "boolean",
17
- description: "Show help",
18
- alias: "h",
19
- default: false
20
- } },
21
- async run(commandContext) {
22
- const { args } = commandContext;
23
- if (args.help) return showUsage(command);
24
- let mod;
25
- try {
26
- mod = await jiti.import("@kubb/mcp", { default: true });
27
- } catch (_e) {
28
- console.error(`Import of '@kubb/mcp' is required to start the MCP server`);
29
- process.exit(1);
30
- }
31
- const { run } = mod;
32
- const hrStart = process.hrtime();
33
- try {
34
- console.log("⏳ Starting MCP server...");
35
- console.warn(styleText("yellow", "This feature is still under development — use with caution"));
36
- run();
37
- await sendTelemetry(buildTelemetryEvent({
38
- command: "mcp",
39
- kubbVersion: version,
40
- hrStart,
41
- status: "success"
42
- }));
43
- } catch (error) {
44
- await sendTelemetry(buildTelemetryEvent({
45
- command: "mcp",
46
- kubbVersion: version,
47
- hrStart,
48
- status: "failed"
49
- }));
50
- console.error(error?.message);
51
- }
52
- }
53
- });
54
- //#endregion
55
- export { command as default };
56
-
57
- //# sourceMappingURL=mcp-DrH93Vq4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-DrH93Vq4.js","names":[],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport type { ArgsDef } from 'citty'\nimport { defineCommand, showUsage } from 'citty'\nimport { createJiti } from 'jiti'\nimport { version } from '../../package.json'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\nconst jiti = createJiti(import.meta.url, {\n sourceMaps: true,\n})\n\nconst args = {\n help: {\n type: 'boolean',\n description: 'Show help',\n alias: 'h',\n default: false,\n },\n} as const satisfies ArgsDef\n\nconst command = defineCommand({\n meta: {\n name: 'mcp',\n description: 'Start the server to enable the MCP client to interact with the LLM.',\n },\n args,\n async run(commandContext) {\n const { args } = commandContext\n\n if (args.help) {\n return showUsage(command)\n }\n\n let mod: any\n try {\n mod = await jiti.import('@kubb/mcp', { default: true })\n } catch (_e) {\n console.error(`Import of '@kubb/mcp' is required to start the MCP server`)\n process.exit(1)\n }\n\n const { run } = mod\n const hrStart = process.hrtime()\n try {\n console.log('⏳ Starting MCP server...')\n console.warn(styleText('yellow', 'This feature is still under development — use with caution'))\n run()\n await sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status: 'success' }))\n } catch (error) {\n await sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status: 'failed' }))\n console.error((error as Error)?.message)\n }\n },\n})\n\nexport default command\n"],"mappings":";;;;;;;;AAQA,MAAM,OAAO,WAAW,OAAO,KAAK,KAAK,EACvC,YAAY,MACb,CAAC;AAWF,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAdW,EACX,MAAM;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,SAAS;EACV,EACF;CAQC,MAAM,IAAI,gBAAgB;EACxB,MAAM,EAAE,SAAS;AAEjB,MAAI,KAAK,KACP,QAAO,UAAU,QAAQ;EAG3B,IAAI;AACJ,MAAI;AACF,SAAM,MAAM,KAAK,OAAO,aAAa,EAAE,SAAS,MAAM,CAAC;WAChD,IAAI;AACX,WAAQ,MAAM,4DAA4D;AAC1E,WAAQ,KAAK,EAAE;;EAGjB,MAAM,EAAE,QAAQ;EAChB,MAAM,UAAU,QAAQ,QAAQ;AAChC,MAAI;AACF,WAAQ,IAAI,2BAA2B;AACvC,WAAQ,KAAK,UAAU,UAAU,6DAA6D,CAAC;AAC/F,QAAK;AACL,SAAM,cAAc,oBAAoB;IAAE,SAAS;IAAO,aAAa;IAAS;IAAS,QAAQ;IAAW,CAAC,CAAC;WACvG,OAAO;AACd,SAAM,cAAc,oBAAoB;IAAE,SAAS;IAAO,aAAa;IAAS;IAAS,QAAQ;IAAU,CAAC,CAAC;AAC7G,WAAQ,MAAO,OAAiB,QAAQ;;;CAG7C,CAAC"}
@@ -1,6 +0,0 @@
1
- //#region package.json
2
- var version = "4.32.4";
3
- //#endregion
4
- export { version as t };
5
-
6
- //# sourceMappingURL=package-BnJbGmLm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-BnJbGmLm.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-aNQWvWbS.cjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1,131 +0,0 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { t as version } from "./package-BnJbGmLm.js";
3
- import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-DYWvlxqs.js";
4
- import { styleText } from "node:util";
5
- import { defineCommand } from "citty";
6
- import * as process$1 from "node:process";
7
- import { spawn } from "node:child_process";
8
- import path from "node:path";
9
- import { fileURLToPath } from "node:url";
10
- import * as clack from "@clack/prompts";
11
- //#region src/commands/agent/start.ts
12
- const args = {
13
- config: {
14
- type: "string",
15
- description: "Path to the Kubb config",
16
- alias: "c"
17
- },
18
- port: {
19
- type: "string",
20
- description: "Port for the server. If not specified, an available port is automatically selected.",
21
- alias: "p"
22
- },
23
- host: {
24
- type: "string",
25
- description: "Host for the server",
26
- default: "localhost"
27
- },
28
- "no-cache": {
29
- type: "boolean",
30
- description: "Disable session caching",
31
- default: false
32
- },
33
- "allow-write": {
34
- type: "boolean",
35
- description: "Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.",
36
- default: false
37
- },
38
- "allow-all": {
39
- type: "boolean",
40
- description: "Grant all permissions (implies --allow-write).",
41
- default: false
42
- }
43
- };
44
- async function startServer({ port, host, configPath, allowWrite, allowAll }) {
45
- try {
46
- try {
47
- process$1.loadEnvFile();
48
- } catch {}
49
- const agentPkgPath = fileURLToPath(import.meta.resolve("@kubb/agent/package.json"));
50
- const agentDir = path.dirname(agentPkgPath);
51
- const serverPath = path.join(agentDir, ".output", "server", "index.mjs");
52
- const PORT = process$1.env.PORT || (port === 0 ? "3000" : String(port));
53
- const HOST = process$1.env.HOST || host || "0.0.0.0";
54
- const KUBB_AGENT_ROOT = process$1.env.KUBB_AGENT_ROOT || process$1.cwd();
55
- const KUBB_AGENT_CONFIG = process$1.env.KUBB_AGENT_CONFIG || configPath || "kubb.config.ts";
56
- const KUBB_AGENT_ALLOW_WRITE = allowAll || allowWrite ? "true" : process$1.env.KUBB_AGENT_ALLOW_WRITE ?? "false";
57
- const KUBB_AGENT_ALLOW_ALL = allowAll ? "true" : process$1.env.KUBB_AGENT_ALLOW_ALL ?? "false";
58
- const env = {
59
- PORT,
60
- HOST,
61
- KUBB_AGENT_ROOT,
62
- KUBB_AGENT_CONFIG,
63
- KUBB_AGENT_ALLOW_WRITE,
64
- KUBB_AGENT_ALLOW_ALL,
65
- KUBB_AGENT_TOKEN: process$1.env.KUBB_AGENT_TOKEN,
66
- KUBB_AGENT_RETRY_TIMEOUT: process$1.env.KUBB_AGENT_RETRY_TIMEOUT || "30000",
67
- KUBB_STUDIO_URL: process$1.env.KUBB_STUDIO_URL || "https://studio.kubb.dev"
68
- };
69
- clack.log.step(styleText("cyan", "Starting agent server..."));
70
- clack.log.info(styleText("dim", `Config: ${KUBB_AGENT_CONFIG}`));
71
- clack.log.info(styleText("dim", `Host: ${HOST}`));
72
- clack.log.info(styleText("dim", `Port: ${PORT}`));
73
- if (!KUBB_AGENT_ALLOW_WRITE && !KUBB_AGENT_ALLOW_ALL) clack.log.warn(styleText("yellow", "Filesystem writes disabled. Use --allow-write or --allow-all to enable."));
74
- spawn("node", [serverPath], {
75
- env: {
76
- ...process$1.env,
77
- ...env
78
- },
79
- stdio: "inherit",
80
- cwd: process$1.cwd()
81
- });
82
- } catch (error) {
83
- console.error("Failed to start agent server:", error);
84
- process$1.exit(1);
85
- }
86
- }
87
- const command = defineCommand({
88
- meta: {
89
- name: "start",
90
- description: "Start the Agent server"
91
- },
92
- args,
93
- async run(commandContext) {
94
- const { args } = commandContext;
95
- const hrStart = process$1.hrtime();
96
- try {
97
- const configPath = path.resolve(process$1.cwd(), args.config || "kubb.config.ts");
98
- const port = args.port ? Number.parseInt(args.port, 10) : 0;
99
- const host = args.host;
100
- const allowWrite = args["allow-write"];
101
- const allowAll = args["allow-all"];
102
- startServer({
103
- port,
104
- host,
105
- configPath,
106
- allowWrite,
107
- allowAll
108
- });
109
- await sendTelemetry(buildTelemetryEvent({
110
- command: "agent",
111
- kubbVersion: version,
112
- hrStart,
113
- status: "success"
114
- }));
115
- } catch (error) {
116
- await sendTelemetry(buildTelemetryEvent({
117
- command: "agent",
118
- kubbVersion: version,
119
- hrStart,
120
- status: "failed"
121
- }));
122
- clack.log.error(styleText("red", "Failed to start agent server"));
123
- console.error(error);
124
- process$1.exit(1);
125
- }
126
- }
127
- });
128
- //#endregion
129
- export { command as default };
130
-
131
- //# sourceMappingURL=start-CqTUu14n.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start-CqTUu14n.js","names":["process"],"sources":["../src/commands/agent/start.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\nimport path from 'node:path'\nimport * as process from 'node:process'\nimport { fileURLToPath } from 'node:url'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport type { ArgsDef } from 'citty'\nimport { defineCommand } from 'citty'\nimport { version } from '../../../package.json'\nimport { buildTelemetryEvent, sendTelemetry } from '../../utils/telemetry.ts'\n\nconst args = {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n alias: 'c',\n },\n port: {\n type: 'string',\n description: 'Port for the server. If not specified, an available port is automatically selected.',\n alias: 'p',\n },\n host: {\n type: 'string',\n description: 'Host for the server',\n default: 'localhost',\n },\n 'no-cache': {\n type: 'boolean',\n description: 'Disable session caching',\n default: false,\n },\n 'allow-write': {\n type: 'boolean',\n description: 'Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.',\n default: false,\n },\n 'allow-all': {\n type: 'boolean',\n description: 'Grant all permissions (implies --allow-write).',\n default: false,\n },\n} as const satisfies ArgsDef\n\ntype StartServerProps = {\n port: number\n host: string\n configPath: string\n allowWrite: boolean\n allowAll: boolean\n}\n\nasync function startServer({ port, host, configPath, allowWrite, allowAll }: StartServerProps): Promise<void> {\n try {\n // Load .env file into process.env using Node.js built-in (v20.12.0+)\n try {\n process.loadEnvFile()\n } catch {\n // .env file may not exist; ignore\n }\n\n // Resolve the @kubb/agent package path\n const agentPkgUrl = import.meta.resolve('@kubb/agent/package.json')\n const agentPkgPath = fileURLToPath(agentPkgUrl)\n const agentDir = path.dirname(agentPkgPath)\n const serverPath = path.join(agentDir, '.output', 'server', 'index.mjs')\n\n // nitro env\n const PORT = process.env.PORT || (port === 0 ? '3000' : String(port))\n const HOST = process.env.HOST || host || '0.0.0.0'\n\n // kubb env\n const KUBB_AGENT_ROOT = process.env.KUBB_AGENT_ROOT || process.cwd()\n const KUBB_AGENT_CONFIG = process.env.KUBB_AGENT_CONFIG || configPath || 'kubb.config.ts'\n const KUBB_AGENT_ALLOW_WRITE = allowAll || allowWrite ? 'true' : (process.env.KUBB_AGENT_ALLOW_WRITE ?? 'false')\n const KUBB_AGENT_ALLOW_ALL = allowAll ? 'true' : (process.env.KUBB_AGENT_ALLOW_ALL ?? 'false')\n const KUBB_AGENT_TOKEN = process.env.KUBB_AGENT_TOKEN\n const KUBB_AGENT_RETRY_TIMEOUT = process.env.KUBB_AGENT_RETRY_TIMEOUT || '30000'\n const KUBB_STUDIO_URL = process.env.KUBB_STUDIO_URL || 'https://studio.kubb.dev'\n\n // Set environment variables\n const env = {\n PORT,\n HOST,\n KUBB_AGENT_ROOT,\n KUBB_AGENT_CONFIG,\n KUBB_AGENT_ALLOW_WRITE,\n KUBB_AGENT_ALLOW_ALL,\n KUBB_AGENT_TOKEN,\n KUBB_AGENT_RETRY_TIMEOUT,\n KUBB_STUDIO_URL,\n }\n\n clack.log.step(styleText('cyan', 'Starting agent server...'))\n clack.log.info(styleText('dim', `Config: ${KUBB_AGENT_CONFIG}`))\n clack.log.info(styleText('dim', `Host: ${HOST}`))\n clack.log.info(styleText('dim', `Port: ${PORT}`))\n if (!KUBB_AGENT_ALLOW_WRITE && !KUBB_AGENT_ALLOW_ALL) {\n clack.log.warn(styleText('yellow', 'Filesystem writes disabled. Use --allow-write or --allow-all to enable.'))\n }\n\n spawn('node', [serverPath], {\n env: { ...process.env, ...env },\n stdio: 'inherit',\n cwd: process.cwd(),\n })\n } catch (error) {\n console.error('Failed to start agent server:', error)\n process.exit(1)\n }\n}\n\nconst command = defineCommand({\n meta: {\n name: 'start',\n description: 'Start the Agent server',\n },\n args,\n async run(commandContext) {\n const { args } = commandContext\n const hrStart = process.hrtime()\n\n try {\n const configPath = path.resolve(process.cwd(), args.config || 'kubb.config.ts')\n const port = args.port ? Number.parseInt(args.port, 10) : 0\n const host = args.host\n const allowWrite = args['allow-write']\n const allowAll = args['allow-all']\n\n startServer({ port, host, configPath, allowWrite, allowAll })\n await sendTelemetry(buildTelemetryEvent({ command: 'agent', kubbVersion: version, hrStart, status: 'success' }))\n } catch (error) {\n await sendTelemetry(buildTelemetryEvent({ command: 'agent', kubbVersion: version, hrStart, status: 'failed' }))\n clack.log.error(styleText('red', 'Failed to start agent server'))\n console.error(error)\n process.exit(1)\n }\n },\n})\n\nexport default command\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,OAAO;CACX,QAAQ;EACN,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD,MAAM;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD,MAAM;EACJ,MAAM;EACN,aAAa;EACb,SAAS;EACV;CACD,YAAY;EACV,MAAM;EACN,aAAa;EACb,SAAS;EACV;CACD,eAAe;EACb,MAAM;EACN,aAAa;EACb,SAAS;EACV;CACD,aAAa;EACX,MAAM;EACN,aAAa;EACb,SAAS;EACV;CACF;AAUD,eAAe,YAAY,EAAE,MAAM,MAAM,YAAY,YAAY,YAA6C;AAC5G,KAAI;AAEF,MAAI;AACF,aAAQ,aAAa;UACf;EAMR,MAAM,eAAe,cADD,OAAO,KAAK,QAAQ,2BAA2B,CACpB;EAC/C,MAAM,WAAW,KAAK,QAAQ,aAAa;EAC3C,MAAM,aAAa,KAAK,KAAK,UAAU,WAAW,UAAU,YAAY;EAGxE,MAAM,OAAOA,UAAQ,IAAI,SAAS,SAAS,IAAI,SAAS,OAAO,KAAK;EACpE,MAAM,OAAOA,UAAQ,IAAI,QAAQ,QAAQ;EAGzC,MAAM,kBAAkBA,UAAQ,IAAI,mBAAmBA,UAAQ,KAAK;EACpE,MAAM,oBAAoBA,UAAQ,IAAI,qBAAqB,cAAc;EACzE,MAAM,yBAAyB,YAAY,aAAa,SAAUA,UAAQ,IAAI,0BAA0B;EACxG,MAAM,uBAAuB,WAAW,SAAUA,UAAQ,IAAI,wBAAwB;EAMtF,MAAM,MAAM;GACV;GACA;GACA;GACA;GACA;GACA;GACA,kBAZuBA,UAAQ,IAAI;GAanC,0BAZ+BA,UAAQ,IAAI,4BAA4B;GAavE,iBAZsBA,UAAQ,IAAI,mBAAmB;GAatD;AAED,QAAM,IAAI,KAAK,UAAU,QAAQ,2BAA2B,CAAC;AAC7D,QAAM,IAAI,KAAK,UAAU,OAAO,WAAW,oBAAoB,CAAC;AAChE,QAAM,IAAI,KAAK,UAAU,OAAO,SAAS,OAAO,CAAC;AACjD,QAAM,IAAI,KAAK,UAAU,OAAO,SAAS,OAAO,CAAC;AACjD,MAAI,CAAC,0BAA0B,CAAC,qBAC9B,OAAM,IAAI,KAAK,UAAU,UAAU,0EAA0E,CAAC;AAGhH,QAAM,QAAQ,CAAC,WAAW,EAAE;GAC1B,KAAK;IAAE,GAAGA,UAAQ;IAAK,GAAG;IAAK;GAC/B,OAAO;GACP,KAAKA,UAAQ,KAAK;GACnB,CAAC;UACK,OAAO;AACd,UAAQ,MAAM,iCAAiC,MAAM;AACrD,YAAQ,KAAK,EAAE;;;AAInB,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD;CACA,MAAM,IAAI,gBAAgB;EACxB,MAAM,EAAE,SAAS;EACjB,MAAM,UAAUA,UAAQ,QAAQ;AAEhC,MAAI;GACF,MAAM,aAAa,KAAK,QAAQA,UAAQ,KAAK,EAAE,KAAK,UAAU,iBAAiB;GAC/E,MAAM,OAAO,KAAK,OAAO,OAAO,SAAS,KAAK,MAAM,GAAG,GAAG;GAC1D,MAAM,OAAO,KAAK;GAClB,MAAM,aAAa,KAAK;GACxB,MAAM,WAAW,KAAK;AAEtB,eAAY;IAAE;IAAM;IAAM;IAAY;IAAY;IAAU,CAAC;AAC7D,SAAM,cAAc,oBAAoB;IAAE,SAAS;IAAS,aAAa;IAAS;IAAS,QAAQ;IAAW,CAAC,CAAC;WACzG,OAAO;AACd,SAAM,cAAc,oBAAoB;IAAE,SAAS;IAAS,aAAa;IAAS;IAAS,QAAQ;IAAU,CAAC,CAAC;AAC/G,SAAM,IAAI,MAAM,UAAU,OAAO,+BAA+B,CAAC;AACjE,WAAQ,MAAM,MAAM;AACpB,aAAQ,KAAK,EAAE;;;CAGpB,CAAC"}