@kubb/cli 4.27.0 → 4.27.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 (33) hide show
  1. package/README.md +14 -3
  2. package/dist/{agent-_H9DOOPd.js → agent-CEvWvnIe.js} +2 -2
  3. package/dist/{agent-_H9DOOPd.js.map → agent-CEvWvnIe.js.map} +1 -1
  4. package/dist/{agent-BFRqrVF_.cjs → agent-i7gxtADx.cjs} +2 -2
  5. package/dist/{agent-BFRqrVF_.cjs.map → agent-i7gxtADx.cjs.map} +1 -1
  6. package/dist/{generate-sTQnT8vH.js → generate-A5atS0Ir.js} +2 -2
  7. package/dist/{generate-sTQnT8vH.js.map → generate-A5atS0Ir.js.map} +1 -1
  8. package/dist/{generate-10eNJXJo.cjs → generate-BGgXoAEi.cjs} +2 -2
  9. package/dist/{generate-10eNJXJo.cjs.map → generate-BGgXoAEi.cjs.map} +1 -1
  10. package/dist/index.cjs +5 -5
  11. package/dist/index.js +5 -5
  12. package/dist/{init-BwzStiaK.js → init-V3TV3ZeX.js} +85 -51
  13. package/dist/init-V3TV3ZeX.js.map +1 -0
  14. package/dist/{init-DOhq5sjS.cjs → init-b68oWxnW.cjs} +85 -51
  15. package/dist/init-b68oWxnW.cjs.map +1 -0
  16. package/dist/package-8snsQf8H.js +6 -0
  17. package/dist/package-8snsQf8H.js.map +1 -0
  18. package/dist/{package-DcbrXbFT.cjs → package-Dn-k49ZM.cjs} +2 -2
  19. package/dist/package-Dn-k49ZM.cjs.map +1 -0
  20. package/dist/{start-Dp1iN5KU.cjs → start-BPR_UFp2.cjs} +11 -11
  21. package/dist/start-BPR_UFp2.cjs.map +1 -0
  22. package/dist/{start-D9LsCoNJ.js → start-DNbpCv53.js} +11 -11
  23. package/dist/start-DNbpCv53.js.map +1 -0
  24. package/package.json +6 -6
  25. package/src/commands/agent/start.ts +11 -27
  26. package/src/commands/init.ts +94 -57
  27. package/dist/init-BwzStiaK.js.map +0 -1
  28. package/dist/init-DOhq5sjS.cjs.map +0 -1
  29. package/dist/package-C3VLYHj-.js +0 -6
  30. package/dist/package-C3VLYHj-.js.map +0 -1
  31. package/dist/package-DcbrXbFT.cjs.map +0 -1
  32. package/dist/start-D9LsCoNJ.js.map +0 -1
  33. package/dist/start-Dp1iN5KU.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk-jHaXqnEa.js";
2
- import { t as version } from "./package-C3VLYHj-.js";
2
+ import { t as version } from "./package-8snsQf8H.js";
3
3
  import { defineCommand } from "citty";
4
4
  import path from "node:path";
5
5
  import process$1 from "node:process";
@@ -190,24 +190,36 @@ ${selectedPlugins.map((plugin) => {
190
190
  })
191
191
  `;
192
192
  }
193
+ const DEFAULT_INPUT_PATH = "./openapi.yaml";
194
+ const DEFAULT_OUTPUT_PATH = "./src/gen";
195
+ const DEFAULT_PLUGINS = ["plugin-oas", "plugin-ts"];
193
196
  const command = defineCommand({
194
197
  meta: {
195
198
  name: "init",
196
199
  description: "Initialize a new Kubb project with interactive setup"
197
200
  },
198
- async run() {
201
+ args: { yes: {
202
+ type: "boolean",
203
+ alias: "y",
204
+ description: "Skip prompts and use default options",
205
+ default: false
206
+ } },
207
+ async run({ args }) {
199
208
  const cwd = process$1.cwd();
209
+ const yes = args.yes;
200
210
  clack.intro(pc.bgCyan(pc.black(" Kubb Init ")));
201
211
  try {
202
212
  let packageManager;
203
213
  if (!hasPackageJson(cwd)) {
204
- const shouldInit = await clack.confirm({
205
- message: "No package.json found. Would you like to create one?",
206
- initialValue: true
207
- });
208
- if (clack.isCancel(shouldInit) || !shouldInit) {
209
- clack.cancel("Operation cancelled.");
210
- process$1.exit(0);
214
+ if (!yes) {
215
+ const shouldInit = await clack.confirm({
216
+ message: "No package.json found. Would you like to create one?",
217
+ initialValue: true
218
+ });
219
+ if (clack.isCancel(shouldInit) || !shouldInit) {
220
+ clack.cancel("Operation cancelled.");
221
+ process$1.exit(0);
222
+ }
211
223
  }
212
224
  packageManager = detectPackageManager(cwd);
213
225
  const spinner$1 = clack.spinner();
@@ -218,45 +230,65 @@ const command = defineCommand({
218
230
  packageManager = detectPackageManager(cwd);
219
231
  clack.log.info(`Detected package manager: ${pc.cyan(packageManager.name)}`);
220
232
  }
221
- const inputPath = await clack.text({
222
- message: "Where is your OpenAPI specification located?",
223
- placeholder: "./openapi.yaml",
224
- defaultValue: "./openapi.yaml",
225
- validate: (value) => {
226
- if (!value) return "Input path is required";
233
+ let inputPath;
234
+ if (yes) {
235
+ inputPath = DEFAULT_INPUT_PATH;
236
+ clack.log.info(`Using input path: ${pc.cyan(inputPath)}`);
237
+ } else {
238
+ const inputPathResult = await clack.text({
239
+ message: "Where is your OpenAPI specification located?",
240
+ placeholder: DEFAULT_INPUT_PATH,
241
+ defaultValue: DEFAULT_INPUT_PATH,
242
+ validate: (value) => {
243
+ if (!value) return "Input path is required";
244
+ }
245
+ });
246
+ if (clack.isCancel(inputPathResult)) {
247
+ clack.cancel("Operation cancelled.");
248
+ process$1.exit(0);
227
249
  }
228
- });
229
- if (clack.isCancel(inputPath)) {
230
- clack.cancel("Operation cancelled.");
231
- process$1.exit(0);
250
+ inputPath = inputPathResult;
232
251
  }
233
- const outputPath = await clack.text({
234
- message: "Where should the generated files be output?",
235
- placeholder: "./src/gen",
236
- defaultValue: "./src/gen",
237
- validate: (value) => {
238
- if (!value) return "Output path is required";
252
+ let outputPath;
253
+ if (yes) {
254
+ outputPath = DEFAULT_OUTPUT_PATH;
255
+ clack.log.info(`Using output path: ${pc.cyan(outputPath)}`);
256
+ } else {
257
+ const outputPathResult = await clack.text({
258
+ message: "Where should the generated files be output?",
259
+ placeholder: DEFAULT_OUTPUT_PATH,
260
+ defaultValue: DEFAULT_OUTPUT_PATH,
261
+ validate: (value) => {
262
+ if (!value) return "Output path is required";
263
+ }
264
+ });
265
+ if (clack.isCancel(outputPathResult)) {
266
+ clack.cancel("Operation cancelled.");
267
+ process$1.exit(0);
239
268
  }
240
- });
241
- if (clack.isCancel(outputPath)) {
242
- clack.cancel("Operation cancelled.");
243
- process$1.exit(0);
269
+ outputPath = outputPathResult;
244
270
  }
245
- const selectedPluginValues = await clack.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: ["plugin-oas", "plugin-ts"],
253
- required: true
254
- });
255
- if (clack.isCancel(selectedPluginValues)) {
256
- clack.cancel("Operation cancelled.");
257
- process$1.exit(0);
271
+ let selectedPlugins;
272
+ if (yes) {
273
+ selectedPlugins = plugins.filter((plugin) => DEFAULT_PLUGINS.includes(plugin.value));
274
+ clack.log.info(`Using plugins: ${pc.cyan(selectedPlugins.map((p) => p.label).join(", "))}`);
275
+ } else {
276
+ const selectedPluginValues = await clack.multiselect({
277
+ message: "Select plugins to use:",
278
+ options: plugins.map((plugin) => ({
279
+ value: plugin.value,
280
+ label: plugin.label,
281
+ hint: plugin.hint
282
+ })),
283
+ initialValues: DEFAULT_PLUGINS,
284
+ required: true
285
+ });
286
+ if (clack.isCancel(selectedPluginValues)) {
287
+ clack.cancel("Operation cancelled.");
288
+ process$1.exit(0);
289
+ }
290
+ selectedPlugins = plugins.filter((plugin) => selectedPluginValues.includes(plugin.value));
258
291
  }
259
- const selectedPlugins = plugins.filter((plugin) => selectedPluginValues.includes(plugin.value));
260
292
  if (!selectedPlugins.find((p) => p.value === "plugin-oas")) selectedPlugins.unshift(plugins.find((p) => p.value === "plugin-oas"));
261
293
  const packagesToInstall = [
262
294
  "@kubb/core",
@@ -279,13 +311,15 @@ const command = defineCommand({
279
311
  const configPath = path.join(cwd, "kubb.config.ts");
280
312
  if (fs.existsSync(configPath)) {
281
313
  configSpinner.stop("kubb.config.ts already exists");
282
- const shouldOverwrite = await clack.confirm({
283
- message: "kubb.config.ts already exists. Overwrite?",
284
- initialValue: false
285
- });
286
- if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {
287
- clack.cancel("Keeping existing configuration. Packages have been installed.");
288
- process$1.exit(0);
314
+ if (!yes) {
315
+ const shouldOverwrite = await clack.confirm({
316
+ message: "kubb.config.ts already exists. Overwrite?",
317
+ initialValue: false
318
+ });
319
+ if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {
320
+ clack.cancel("Keeping existing configuration. Packages have been installed.");
321
+ process$1.exit(0);
322
+ }
289
323
  }
290
324
  configSpinner.start("Overwriting kubb.config.ts");
291
325
  }
@@ -303,4 +337,4 @@ var init_default = command;
303
337
 
304
338
  //#endregion
305
339
  export { init_default as default };
306
- //# sourceMappingURL=init-BwzStiaK.js.map
340
+ //# sourceMappingURL=init-V3TV3ZeX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-V3TV3ZeX.js","names":["process","spinner"],"sources":["../src/utils/packageManager.ts","../src/commands/init.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { execa } from 'execa'\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\nexport interface PackageManagerInfo {\n name: PackageManager\n lockFile: string\n installCommand: string[]\n}\n\nconst packageManagers: Record<PackageManager, 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\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManagerInfo {\n // Check for packageManager field in package.json\n const packageJsonPath = path.join(cwd, 'package.json')\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n if (packageJson.packageManager) {\n const [name] = packageJson.packageManager.split('@')\n if (name in packageManagers) {\n return packageManagers[name as PackageManager]\n }\n }\n } catch {\n // Continue to lock file detection\n }\n }\n\n // Check for lock files\n for (const pm of Object.values(packageManagers)) {\n if (fs.existsSync(path.join(cwd, pm.lockFile))) {\n return pm\n }\n }\n\n // Default to npm\n return packageManagers.npm\n}\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<PackageManager, string[]> = {\n npm: ['init', '-y'],\n pnpm: ['init'],\n yarn: ['init', '-y'],\n bun: ['init', '-y'],\n }\n\n await execa(packageManager.name, commands[packageManager.name], {\n cwd,\n stdio: 'inherit',\n })\n}\n\nexport async function installPackages(packages: string[], packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n await execa(packageManager.name, [...packageManager.installCommand, ...packages], {\n cwd,\n stdio: 'inherit',\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport * as clack from '@clack/prompts'\nimport { defineCommand } from 'citty'\nimport pc from 'picocolors'\nimport { version } from '../../package.json'\nimport { detectPackageManager, hasPackageJson, initPackageJson, installPackages, type PackageManagerInfo } 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(pc.bgCyan(pc.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: ${pc.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: ${pc.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: ${pc.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: ${pc.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 pc.green('✓ All set!') +\n '\\n\\n' +\n pc.dim('Next steps:') +\n '\\n' +\n pc.cyan(` 1. Make sure your OpenAPI spec is at: ${inputPath}`) +\n '\\n' +\n pc.cyan(' 2. Generate code with: npx kubb generate') +\n '\\n' +\n pc.cyan(' Or start a stream server with: npx kubb start') +\n '\\n' +\n pc.cyan(` 3. Find generated files in: ${outputPath}`) +\n '\\n\\n' +\n pc.dim(`Using ${packageManager.name} • Kubb v${version}`),\n )\n } catch (error) {\n clack.log.error(pc.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":";;;;;;;;;;;AAYA,MAAM,kBAA8D;CAClE,MAAM;EACJ,MAAM;EACN,UAAU;EACV,gBAAgB,CAAC,OAAO,KAAK;EAC9B;CACD,MAAM;EACJ,MAAM;EACN,UAAU;EACV,gBAAgB,CAAC,OAAO,KAAK;EAC9B;CACD,KAAK;EACH,MAAM;EACN,UAAU;EACV,gBAAgB,CAAC,OAAO,KAAK;EAC9B;CACD,KAAK;EACH,MAAM;EACN,UAAU;EACV,gBAAgB,CAAC,WAAW,aAAa;EAC1C;CACF;AAED,SAAgB,qBAAqB,MAAc,QAAQ,KAAK,EAAsB;CAEpF,MAAM,kBAAkB,KAAK,KAAK,KAAK,eAAe;AACtD,KAAI,GAAG,WAAW,gBAAgB,CAChC,KAAI;EACF,MAAM,cAAc,KAAK,MAAM,GAAG,aAAa,iBAAiB,QAAQ,CAAC;AACzE,MAAI,YAAY,gBAAgB;GAC9B,MAAM,CAAC,QAAQ,YAAY,eAAe,MAAM,IAAI;AACpD,OAAI,QAAQ,gBACV,QAAO,gBAAgB;;SAGrB;AAMV,MAAK,MAAM,MAAM,OAAO,OAAO,gBAAgB,CAC7C,KAAI,GAAG,WAAW,KAAK,KAAK,KAAK,GAAG,SAAS,CAAC,CAC5C,QAAO;AAKX,QAAO,gBAAgB;;AAGzB,SAAgB,eAAe,MAAc,QAAQ,KAAK,EAAW;AACnE,QAAO,GAAG,WAAW,KAAK,KAAK,KAAK,eAAe,CAAC;;AAGtD,eAAsB,gBAAgB,KAAa,gBAAmD;AAQpG,OAAM,MAAM,eAAe,MAPwB;EACjD,KAAK,CAAC,QAAQ,KAAK;EACnB,MAAM,CAAC,OAAO;EACd,MAAM,CAAC,QAAQ,KAAK;EACpB,KAAK,CAAC,QAAQ,KAAK;EACpB,CAEyC,eAAe,OAAO;EAC9D;EACA,OAAO;EACR,CAAC;;AAGJ,eAAsB,gBAAgB,UAAoB,gBAAoC,MAAc,QAAQ,KAAK,EAAiB;AACxI,OAAM,MAAM,eAAe,MAAM,CAAC,GAAG,eAAe,gBAAgB,GAAG,SAAS,EAAE;EAChF;EACA,OAAO;EACR,CAAC;;;;;ACnEJ,MAAM,UAA0B;CAC9B;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,YAAY;EACZ,UAAU;EACX;CACF;AAED,SAAS,mBAAmB,iBAAiC,WAAmB,YAA4B;AAkC1G,QAAO;EAjCS,gBAAgB,KAAK,WAAW,YAAY,OAAO,WAAW,WAAW,OAAO,YAAY,GAAG,CAAC,KAAK,KAAK,CAkClH;;;;;aAKG,UAAU;;;aAGV,WAAW;;;;EAxCA,gBACnB,KAAK,WAAW;AACf,MAAI,OAAO,UAAU,aACnB,QAAO;AAET,MAAI,OAAO,UAAU,YACnB,QAAO;AAET,MAAI,OAAO,UAAU,gBACnB,QAAO;AAET,MAAI,OAAO,UAAU,qBACnB,QAAO;AAET,MAAI,OAAO,UAAU,aACnB,QAAO;AAET,MAAI,OAAO,UAAU,eACnB,QAAO;AAET,MAAI,OAAO,UAAU,aACnB,QAAO;AAET,MAAI,OAAO,UAAU,aACnB,QAAO;AAGT,SAAO,OAAO,OAAO,WAAW;GAChC,CACD,KAAK,KAAK,CAeC;;;;;AAMhB,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,kBAAkB,CAAC,cAAc,YAAY;AAEnD,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAAM,EACJ,KAAK;EACH,MAAM;EACN,OAAO;EACP,aAAa;EACb,SAAS;EACV,EACF;CACD,MAAM,IAAI,EAAE,QAAQ;EAClB,MAAM,MAAMA,UAAQ,KAAK;EACzB,MAAM,MAAM,KAAK;AAEjB,QAAM,MAAM,GAAG,OAAO,GAAG,MAAM,cAAc,CAAC,CAAC;AAE/C,MAAI;GAEF,IAAI;AACJ,OAAI,CAAC,eAAe,IAAI,EAAE;AACxB,QAAI,CAAC,KAAK;KACR,MAAM,aAAa,MAAM,MAAM,QAAQ;MACrC,SAAS;MACT,cAAc;MACf,CAAC;AAEF,SAAI,MAAM,SAAS,WAAW,IAAI,CAAC,YAAY;AAC7C,YAAM,OAAO,uBAAuB;AACpC,gBAAQ,KAAK,EAAE;;;AAKnB,qBAAiB,qBAAqB,IAAI;IAE1C,MAAMC,YAAU,MAAM,SAAS;AAC/B,cAAQ,MAAM,kCAAkC,eAAe,OAAO;AAEtE,UAAM,gBAAgB,KAAK,eAAe;AAE1C,cAAQ,KAAK,6BAA6B,eAAe,OAAO;UAC3D;AACL,qBAAiB,qBAAqB,IAAI;AAC1C,UAAM,IAAI,KAAK,6BAA6B,GAAG,KAAK,eAAe,KAAK,GAAG;;GAI7E,IAAI;AACJ,OAAI,KAAK;AACP,gBAAY;AACZ,UAAM,IAAI,KAAK,qBAAqB,GAAG,KAAK,UAAU,GAAG;UACpD;IACL,MAAM,kBAAkB,MAAM,MAAM,KAAK;KACvC,SAAS;KACT,aAAa;KACb,cAAc;KACd,WAAW,UAAU;AACnB,UAAI,CAAC,MAAO,QAAO;;KAEtB,CAAC;AAEF,QAAI,MAAM,SAAS,gBAAgB,EAAE;AACnC,WAAM,OAAO,uBAAuB;AACpC,eAAQ,KAAK,EAAE;;AAEjB,gBAAY;;GAId,IAAI;AACJ,OAAI,KAAK;AACP,iBAAa;AACb,UAAM,IAAI,KAAK,sBAAsB,GAAG,KAAK,WAAW,GAAG;UACtD;IACL,MAAM,mBAAmB,MAAM,MAAM,KAAK;KACxC,SAAS;KACT,aAAa;KACb,cAAc;KACd,WAAW,UAAU;AACnB,UAAI,CAAC,MAAO,QAAO;;KAEtB,CAAC;AAEF,QAAI,MAAM,SAAS,iBAAiB,EAAE;AACpC,WAAM,OAAO,uBAAuB;AACpC,eAAQ,KAAK,EAAE;;AAEjB,iBAAa;;GAIf,IAAI;AACJ,OAAI,KAAK;AACP,sBAAkB,QAAQ,QAAQ,WAAW,gBAAgB,SAAS,OAAO,MAAM,CAAC;AACpF,UAAM,IAAI,KAAK,kBAAkB,GAAG,KAAK,gBAAgB,KAAK,MAAM,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,GAAG;UACtF;IACL,MAAM,uBAAuB,MAAM,MAAM,YAAY;KACnD,SAAS;KACT,SAAS,QAAQ,KAAK,YAAY;MAChC,OAAO,OAAO;MACd,OAAO,OAAO;MACd,MAAM,OAAO;MACd,EAAE;KACH,eAAe;KACf,UAAU;KACX,CAAC;AAEF,QAAI,MAAM,SAAS,qBAAqB,EAAE;AACxC,WAAM,OAAO,uBAAuB;AACpC,eAAQ,KAAK,EAAE;;AAGjB,sBAAkB,QAAQ,QAAQ,WAAY,qBAAkC,SAAS,OAAO,MAAM,CAAC;;AAIzG,OAAI,CAAC,gBAAgB,MAAM,MAAM,EAAE,UAAU,aAAa,CACxD,iBAAgB,QAAQ,QAAQ,MAAM,MAAM,EAAE,UAAU,aAAa,CAAE;GAIzE,MAAM,oBAAoB;IAAC;IAAc;IAAa;IAAe,GAAG,gBAAgB,KAAK,MAAM,EAAE,YAAY;IAAC;GAElH,MAAM,UAAU,MAAM,SAAS;AAC/B,WAAQ,MAAM,cAAc,kBAAkB,OAAO,iBAAiB,eAAe,OAAO;AAE5F,OAAI;AACF,UAAM,gBAAgB,mBAAmB,gBAAgB,IAAI;AAC7D,YAAQ,KAAK,aAAa,kBAAkB,OAAO,WAAW;YACvD,OAAO;AACd,YAAQ,KAAK,sBAAsB;AACnC,UAAM;;GAIR,MAAM,gBAAgB,MAAM,SAAS;AACrC,iBAAc,MAAM,0BAA0B;GAE9C,MAAM,gBAAgB,mBAAmB,iBAAiB,WAAW,WAAW;GAChF,MAAM,aAAa,KAAK,KAAK,KAAK,iBAAiB;AAGnD,OAAI,GAAG,WAAW,WAAW,EAAE;AAC7B,kBAAc,KAAK,gCAAgC;AAEnD,QAAI,CAAC,KAAK;KACR,MAAM,kBAAkB,MAAM,MAAM,QAAQ;MAC1C,SAAS;MACT,cAAc;MACf,CAAC;AAEF,SAAI,MAAM,SAAS,gBAAgB,IAAI,CAAC,iBAAiB;AACvD,YAAM,OAAO,gEAAgE;AAC7E,gBAAQ,KAAK,EAAE;;;AAInB,kBAAc,MAAM,6BAA6B;;AAGnD,MAAG,cAAc,YAAY,eAAe,QAAQ;AAEpD,iBAAc,KAAK,yBAAyB;AAG5C,SAAM,MACJ,GAAG,MAAM,aAAa,GACpB,SACA,GAAG,IAAI,cAAc,GACrB,OACA,GAAG,KAAK,2CAA2C,YAAY,GAC/D,OACA,GAAG,KAAK,6CAA6C,GACrD,OACA,GAAG,KAAK,qDAAqD,GAC7D,OACA,GAAG,KAAK,iCAAiC,aAAa,GACtD,SACA,GAAG,IAAI,SAAS,eAAe,KAAK,WAAW,UAAU,CAC5D;WACM,OAAO;AACd,SAAM,IAAI,MAAM,GAAG,IAAI,0CAA0C,CAAC;AAClE,OAAI,iBAAiB,MACnB,OAAM,IAAI,MAAM,MAAM,QAAQ;AAEhC,aAAQ,KAAK,EAAE;;;CAGpB,CAAC;AAEF,mBAAe"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-C1_xRkKa.cjs');
2
- const require_package = require('./package-DcbrXbFT.cjs');
2
+ const require_package = require('./package-Dn-k49ZM.cjs');
3
3
  let citty = require("citty");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -195,24 +195,36 @@ ${selectedPlugins.map((plugin) => {
195
195
  })
196
196
  `;
197
197
  }
198
+ const DEFAULT_INPUT_PATH = "./openapi.yaml";
199
+ const DEFAULT_OUTPUT_PATH = "./src/gen";
200
+ const DEFAULT_PLUGINS = ["plugin-oas", "plugin-ts"];
198
201
  const command = (0, citty.defineCommand)({
199
202
  meta: {
200
203
  name: "init",
201
204
  description: "Initialize a new Kubb project with interactive setup"
202
205
  },
203
- async run() {
206
+ args: { yes: {
207
+ type: "boolean",
208
+ alias: "y",
209
+ description: "Skip prompts and use default options",
210
+ default: false
211
+ } },
212
+ async run({ args }) {
204
213
  const cwd = node_process.default.cwd();
214
+ const yes = args.yes;
205
215
  _clack_prompts.intro(picocolors.default.bgCyan(picocolors.default.black(" Kubb Init ")));
206
216
  try {
207
217
  let packageManager;
208
218
  if (!hasPackageJson(cwd)) {
209
- const shouldInit = await _clack_prompts.confirm({
210
- message: "No package.json found. Would you like to create one?",
211
- initialValue: true
212
- });
213
- if (_clack_prompts.isCancel(shouldInit) || !shouldInit) {
214
- _clack_prompts.cancel("Operation cancelled.");
215
- node_process.default.exit(0);
219
+ if (!yes) {
220
+ const shouldInit = await _clack_prompts.confirm({
221
+ message: "No package.json found. Would you like to create one?",
222
+ initialValue: true
223
+ });
224
+ if (_clack_prompts.isCancel(shouldInit) || !shouldInit) {
225
+ _clack_prompts.cancel("Operation cancelled.");
226
+ node_process.default.exit(0);
227
+ }
216
228
  }
217
229
  packageManager = detectPackageManager(cwd);
218
230
  const spinner$1 = _clack_prompts.spinner();
@@ -223,45 +235,65 @@ const command = (0, citty.defineCommand)({
223
235
  packageManager = detectPackageManager(cwd);
224
236
  _clack_prompts.log.info(`Detected package manager: ${picocolors.default.cyan(packageManager.name)}`);
225
237
  }
226
- const inputPath = await _clack_prompts.text({
227
- message: "Where is your OpenAPI specification located?",
228
- placeholder: "./openapi.yaml",
229
- defaultValue: "./openapi.yaml",
230
- validate: (value) => {
231
- if (!value) return "Input path is required";
238
+ let inputPath;
239
+ if (yes) {
240
+ inputPath = DEFAULT_INPUT_PATH;
241
+ _clack_prompts.log.info(`Using input path: ${picocolors.default.cyan(inputPath)}`);
242
+ } else {
243
+ const inputPathResult = await _clack_prompts.text({
244
+ message: "Where is your OpenAPI specification located?",
245
+ placeholder: DEFAULT_INPUT_PATH,
246
+ defaultValue: DEFAULT_INPUT_PATH,
247
+ validate: (value) => {
248
+ if (!value) return "Input path is required";
249
+ }
250
+ });
251
+ if (_clack_prompts.isCancel(inputPathResult)) {
252
+ _clack_prompts.cancel("Operation cancelled.");
253
+ node_process.default.exit(0);
232
254
  }
233
- });
234
- if (_clack_prompts.isCancel(inputPath)) {
235
- _clack_prompts.cancel("Operation cancelled.");
236
- node_process.default.exit(0);
255
+ inputPath = inputPathResult;
237
256
  }
238
- const outputPath = await _clack_prompts.text({
239
- message: "Where should the generated files be output?",
240
- placeholder: "./src/gen",
241
- defaultValue: "./src/gen",
242
- validate: (value) => {
243
- if (!value) return "Output path is required";
257
+ let outputPath;
258
+ if (yes) {
259
+ outputPath = DEFAULT_OUTPUT_PATH;
260
+ _clack_prompts.log.info(`Using output path: ${picocolors.default.cyan(outputPath)}`);
261
+ } else {
262
+ const outputPathResult = await _clack_prompts.text({
263
+ message: "Where should the generated files be output?",
264
+ placeholder: DEFAULT_OUTPUT_PATH,
265
+ defaultValue: DEFAULT_OUTPUT_PATH,
266
+ validate: (value) => {
267
+ if (!value) return "Output path is required";
268
+ }
269
+ });
270
+ if (_clack_prompts.isCancel(outputPathResult)) {
271
+ _clack_prompts.cancel("Operation cancelled.");
272
+ node_process.default.exit(0);
244
273
  }
245
- });
246
- if (_clack_prompts.isCancel(outputPath)) {
247
- _clack_prompts.cancel("Operation cancelled.");
248
- node_process.default.exit(0);
274
+ outputPath = outputPathResult;
249
275
  }
250
- const selectedPluginValues = await _clack_prompts.multiselect({
251
- message: "Select plugins to use:",
252
- options: plugins.map((plugin) => ({
253
- value: plugin.value,
254
- label: plugin.label,
255
- hint: plugin.hint
256
- })),
257
- initialValues: ["plugin-oas", "plugin-ts"],
258
- required: true
259
- });
260
- if (_clack_prompts.isCancel(selectedPluginValues)) {
261
- _clack_prompts.cancel("Operation cancelled.");
262
- node_process.default.exit(0);
276
+ let selectedPlugins;
277
+ if (yes) {
278
+ selectedPlugins = plugins.filter((plugin) => DEFAULT_PLUGINS.includes(plugin.value));
279
+ _clack_prompts.log.info(`Using plugins: ${picocolors.default.cyan(selectedPlugins.map((p) => p.label).join(", "))}`);
280
+ } else {
281
+ const selectedPluginValues = await _clack_prompts.multiselect({
282
+ message: "Select plugins to use:",
283
+ options: plugins.map((plugin) => ({
284
+ value: plugin.value,
285
+ label: plugin.label,
286
+ hint: plugin.hint
287
+ })),
288
+ initialValues: DEFAULT_PLUGINS,
289
+ required: true
290
+ });
291
+ if (_clack_prompts.isCancel(selectedPluginValues)) {
292
+ _clack_prompts.cancel("Operation cancelled.");
293
+ node_process.default.exit(0);
294
+ }
295
+ selectedPlugins = plugins.filter((plugin) => selectedPluginValues.includes(plugin.value));
263
296
  }
264
- const selectedPlugins = plugins.filter((plugin) => selectedPluginValues.includes(plugin.value));
265
297
  if (!selectedPlugins.find((p) => p.value === "plugin-oas")) selectedPlugins.unshift(plugins.find((p) => p.value === "plugin-oas"));
266
298
  const packagesToInstall = [
267
299
  "@kubb/core",
@@ -284,13 +316,15 @@ const command = (0, citty.defineCommand)({
284
316
  const configPath = node_path.default.join(cwd, "kubb.config.ts");
285
317
  if (node_fs.default.existsSync(configPath)) {
286
318
  configSpinner.stop("kubb.config.ts already exists");
287
- const shouldOverwrite = await _clack_prompts.confirm({
288
- message: "kubb.config.ts already exists. Overwrite?",
289
- initialValue: false
290
- });
291
- if (_clack_prompts.isCancel(shouldOverwrite) || !shouldOverwrite) {
292
- _clack_prompts.cancel("Keeping existing configuration. Packages have been installed.");
293
- node_process.default.exit(0);
319
+ if (!yes) {
320
+ const shouldOverwrite = await _clack_prompts.confirm({
321
+ message: "kubb.config.ts already exists. Overwrite?",
322
+ initialValue: false
323
+ });
324
+ if (_clack_prompts.isCancel(shouldOverwrite) || !shouldOverwrite) {
325
+ _clack_prompts.cancel("Keeping existing configuration. Packages have been installed.");
326
+ node_process.default.exit(0);
327
+ }
294
328
  }
295
329
  configSpinner.start("Overwriting kubb.config.ts");
296
330
  }
@@ -308,4 +342,4 @@ var init_default = command;
308
342
 
309
343
  //#endregion
310
344
  exports.default = init_default;
311
- //# sourceMappingURL=init-DOhq5sjS.cjs.map
345
+ //# sourceMappingURL=init-b68oWxnW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-b68oWxnW.cjs","names":["path","fs","process","pc","clack","spinner","path","fs","version"],"sources":["../src/utils/packageManager.ts","../src/commands/init.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { execa } from 'execa'\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\nexport interface PackageManagerInfo {\n name: PackageManager\n lockFile: string\n installCommand: string[]\n}\n\nconst packageManagers: Record<PackageManager, 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\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManagerInfo {\n // Check for packageManager field in package.json\n const packageJsonPath = path.join(cwd, 'package.json')\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n if (packageJson.packageManager) {\n const [name] = packageJson.packageManager.split('@')\n if (name in packageManagers) {\n return packageManagers[name as PackageManager]\n }\n }\n } catch {\n // Continue to lock file detection\n }\n }\n\n // Check for lock files\n for (const pm of Object.values(packageManagers)) {\n if (fs.existsSync(path.join(cwd, pm.lockFile))) {\n return pm\n }\n }\n\n // Default to npm\n return packageManagers.npm\n}\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<PackageManager, string[]> = {\n npm: ['init', '-y'],\n pnpm: ['init'],\n yarn: ['init', '-y'],\n bun: ['init', '-y'],\n }\n\n await execa(packageManager.name, commands[packageManager.name], {\n cwd,\n stdio: 'inherit',\n })\n}\n\nexport async function installPackages(packages: string[], packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n await execa(packageManager.name, [...packageManager.installCommand, ...packages], {\n cwd,\n stdio: 'inherit',\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport * as clack from '@clack/prompts'\nimport { defineCommand } from 'citty'\nimport pc from 'picocolors'\nimport { version } from '../../package.json'\nimport { detectPackageManager, hasPackageJson, initPackageJson, installPackages, type PackageManagerInfo } 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(pc.bgCyan(pc.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: ${pc.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: ${pc.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: ${pc.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: ${pc.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 pc.green('✓ All set!') +\n '\\n\\n' +\n pc.dim('Next steps:') +\n '\\n' +\n pc.cyan(` 1. Make sure your OpenAPI spec is at: ${inputPath}`) +\n '\\n' +\n pc.cyan(' 2. Generate code with: npx kubb generate') +\n '\\n' +\n pc.cyan(' Or start a stream server with: npx kubb start') +\n '\\n' +\n pc.cyan(` 3. Find generated files in: ${outputPath}`) +\n '\\n\\n' +\n pc.dim(`Using ${packageManager.name} • Kubb v${version}`),\n )\n } catch (error) {\n clack.log.error(pc.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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"}
@@ -0,0 +1,6 @@
1
+ //#region package.json
2
+ var version = "4.27.1";
3
+
4
+ //#endregion
5
+ export { version as t };
6
+ //# sourceMappingURL=package-8snsQf8H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-8snsQf8H.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1,6 +1,6 @@
1
1
 
2
2
  //#region package.json
3
- var version = "4.27.0";
3
+ var version = "4.27.1";
4
4
 
5
5
  //#endregion
6
6
  Object.defineProperty(exports, 'version', {
@@ -9,4 +9,4 @@ Object.defineProperty(exports, 'version', {
9
9
  return version;
10
10
  }
11
11
  });
12
- //# sourceMappingURL=package-DcbrXbFT.cjs.map
12
+ //# sourceMappingURL=package-Dn-k49ZM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-Dn-k49ZM.cjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -53,27 +53,27 @@ async function startServer({ port, host, configPath, noCache, allowWrite, allowA
53
53
  const serverPath = node_path.default.join(agentDir, ".output", "server", "index.mjs");
54
54
  const PORT = node_process.env.PORT || (port === 0 ? "3000" : String(port));
55
55
  const HOST = node_process.env.HOST || host || "0.0.0.0";
56
- const KUBB_ROOT = node_process.env.KUBB_ROOT || node_process.cwd();
57
- const KUBB_CONFIG = node_process.env.KUBB_CONFIG || configPath || "kubb.config.ts";
56
+ const KUBB_AGENT_ROOT = node_process.env.KUBB_AGENT_ROOT || node_process.cwd();
57
+ const KUBB_AGENT_CONFIG = node_process.env.KUBB_AGENT_CONFIG || configPath || "kubb.config.ts";
58
58
  const KUBB_AGENT_NO_CACHE = noCache ? "true" : "false";
59
- const KUBB_ALLOW_WRITE = allowAll || allowWrite ? "true" : node_process.env.KUBB_ALLOW_WRITE ?? "false";
60
- const KUBB_ALLOW_ALL = allowAll ? "true" : node_process.env.KUBB_ALLOW_ALL ?? "false";
59
+ const KUBB_AGENT_ALLOW_WRITE = allowAll || allowWrite ? "true" : node_process.env.KUBB_AGENT_ALLOW_WRITE ?? "false";
60
+ const KUBB_AGENT_ALLOW_ALL = allowAll ? "true" : node_process.env.KUBB_AGENT_ALLOW_ALL ?? "false";
61
61
  const KUBB_STUDIO_URL = node_process.env.KUBB_STUDIO_URL || "https://studio.kubb.dev";
62
62
  const KUBB_AGENT_TOKEN = node_process.env.KUBB_AGENT_TOKEN;
63
63
  const env = {
64
- KUBB_ROOT,
65
- KUBB_CONFIG,
64
+ KUBB_AGENT_ROOT,
65
+ KUBB_AGENT_CONFIG,
66
66
  PORT,
67
67
  HOST,
68
68
  KUBB_STUDIO_URL,
69
- KUBB_RETRY_TIMEOUT: node_process.env.KUBB_RETRY_TIMEOUT || "30000",
69
+ KUBB_AGENT_RETRY_TIMEOUT: node_process.env.KUBB_AGENT_RETRY_TIMEOUT || "30000",
70
70
  KUBB_AGENT_NO_CACHE,
71
71
  KUBB_AGENT_TOKEN,
72
- KUBB_ALLOW_WRITE,
73
- KUBB_ALLOW_ALL
72
+ KUBB_AGENT_ALLOW_WRITE,
73
+ KUBB_AGENT_ALLOW_ALL
74
74
  };
75
75
  _clack_prompts.log.step(picocolors.default.cyan("Starting agent server..."));
76
- _clack_prompts.log.info(picocolors.default.dim(`Config: ${KUBB_CONFIG}`));
76
+ _clack_prompts.log.info(picocolors.default.dim(`Config: ${KUBB_AGENT_CONFIG}`));
77
77
  _clack_prompts.log.info(picocolors.default.dim(`Host: ${HOST}`));
78
78
  _clack_prompts.log.info(picocolors.default.dim(`Port: ${PORT}`));
79
79
  if (noCache) _clack_prompts.log.info(picocolors.default.dim("Session caching: disabled"));
@@ -122,4 +122,4 @@ var start_default = command;
122
122
 
123
123
  //#endregion
124
124
  exports.default = start_default;
125
- //# sourceMappingURL=start-Dp1iN5KU.cjs.map
125
+ //# sourceMappingURL=start-BPR_UFp2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-BPR_UFp2.cjs","names":["path","process","pc","args"],"sources":["../src/commands/agent/start.ts"],"sourcesContent":["import path from 'node:path'\nimport * as process from 'node:process'\nimport { fileURLToPath } from 'node:url'\n\nimport * as clack from '@clack/prompts'\nimport type { ArgsDef } from 'citty'\nimport { defineCommand } from 'citty'\nimport { config as loadEnv } from 'dotenv'\nimport { execa } from 'execa'\nimport pc from 'picocolors'\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 noCache: boolean\n allowWrite: boolean\n allowAll: boolean\n}\n\nasync function startServer({ port, host, configPath, noCache, allowWrite, allowAll }: StartServerProps): Promise<void> {\n try {\n // Load .env files into process.env (supports .env, .env.local, .env.*.local)\n loadEnv() // .env\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_NO_CACHE = noCache ? 'true' : 'false'\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_STUDIO_URL = process.env.KUBB_STUDIO_URL || 'https://studio.kubb.dev'\n const KUBB_AGENT_TOKEN = process.env.KUBB_AGENT_TOKEN\n const KUBB_AGENT_RETRY_TIMEOUT = process.env.KUBB_AGENT_RETRY_TIMEOUT || '30000'\n\n // Set environment variables\n const env = {\n KUBB_AGENT_ROOT,\n KUBB_AGENT_CONFIG,\n PORT,\n HOST,\n KUBB_STUDIO_URL,\n KUBB_AGENT_RETRY_TIMEOUT,\n KUBB_AGENT_NO_CACHE,\n KUBB_AGENT_TOKEN,\n KUBB_AGENT_ALLOW_WRITE,\n KUBB_AGENT_ALLOW_ALL,\n }\n\n clack.log.step(pc.cyan('Starting agent server...'))\n clack.log.info(pc.dim(`Config: ${KUBB_AGENT_CONFIG}`))\n clack.log.info(pc.dim(`Host: ${HOST}`))\n clack.log.info(pc.dim(`Port: ${PORT}`))\n if (noCache) {\n clack.log.info(pc.dim('Session caching: disabled'))\n }\n if (!allowWrite && !allowAll) {\n clack.log.warn(pc.yellow('Filesystem writes disabled. Use --allow-write or --allow-all to enable.'))\n }\n\n // Use execa to spawn the server process\n await execa('node', [serverPath], {\n 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\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 noCache = args['no-cache']\n const allowWrite = args['allow-write']\n const allowAll = args['allow-all']\n\n await startServer({ port, host, configPath, noCache, allowWrite, allowAll })\n } catch (error) {\n clack.log.error(pc.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;AAWD,eAAe,YAAY,EAAE,MAAM,MAAM,YAAY,SAAS,YAAY,YAA6C;AACrH,KAAI;AAEF,sBAAS;EAIT,MAAM,8CAD0B,QAAQ,2BAA2B,CACpB;EAC/C,MAAM,WAAWA,kBAAK,QAAQ,aAAa;EAC3C,MAAM,aAAaA,kBAAK,KAAK,UAAU,WAAW,UAAU,YAAY;EAGxE,MAAM,OAAOC,aAAQ,IAAI,SAAS,SAAS,IAAI,SAAS,OAAO,KAAK;EACpE,MAAM,OAAOA,aAAQ,IAAI,QAAQ,QAAQ;EAGzC,MAAM,kBAAkBA,aAAQ,IAAI,mBAAmBA,aAAQ,KAAK;EACpE,MAAM,oBAAoBA,aAAQ,IAAI,qBAAqB,cAAc;EACzE,MAAM,sBAAsB,UAAU,SAAS;EAC/C,MAAM,yBAAyB,YAAY,aAAa,SAAUA,aAAQ,IAAI,0BAA0B;EACxG,MAAM,uBAAuB,WAAW,SAAUA,aAAQ,IAAI,wBAAwB;EACtF,MAAM,kBAAkBA,aAAQ,IAAI,mBAAmB;EACvD,MAAM,mBAAmBA,aAAQ,IAAI;EAIrC,MAAM,MAAM;GACV;GACA;GACA;GACA;GACA;GACA,0BAT+BA,aAAQ,IAAI,4BAA4B;GAUvE;GACA;GACA;GACA;GACD;AAED,iBAAM,IAAI,KAAKC,mBAAG,KAAK,2BAA2B,CAAC;AACnD,iBAAM,IAAI,KAAKA,mBAAG,IAAI,WAAW,oBAAoB,CAAC;AACtD,iBAAM,IAAI,KAAKA,mBAAG,IAAI,SAAS,OAAO,CAAC;AACvC,iBAAM,IAAI,KAAKA,mBAAG,IAAI,SAAS,OAAO,CAAC;AACvC,MAAI,QACF,gBAAM,IAAI,KAAKA,mBAAG,IAAI,4BAA4B,CAAC;AAErD,MAAI,CAAC,cAAc,CAAC,SAClB,gBAAM,IAAI,KAAKA,mBAAG,OAAO,0EAA0E,CAAC;AAItG,yBAAY,QAAQ,CAAC,WAAW,EAAE;GAChC;GACA,OAAO;GACP,KAAKD,aAAQ,KAAK;GACnB,CAAC;UACK,OAAO;AACd,UAAQ,MAAM,iCAAiC,MAAM;AACrD,eAAQ,KAAK,EAAE;;;AAInB,MAAM,mCAAwB;CAC5B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD;CACA,MAAM,IAAI,gBAAgB;EACxB,MAAM,EAAE,iBAAS;AAEjB,MAAI;GACF,MAAM,aAAaD,kBAAK,QAAQC,aAAQ,KAAK,EAAEE,OAAK,UAAU,iBAAiB;GAC/E,MAAM,OAAOA,OAAK,OAAO,OAAO,SAASA,OAAK,MAAM,GAAG,GAAG;GAC1D,MAAM,OAAOA,OAAK;GAClB,MAAM,UAAUA,OAAK;GACrB,MAAM,aAAaA,OAAK;GACxB,MAAM,WAAWA,OAAK;AAEtB,SAAM,YAAY;IAAE;IAAM;IAAM;IAAY;IAAS;IAAY;IAAU,CAAC;WACrE,OAAO;AACd,kBAAM,IAAI,MAAMD,mBAAG,IAAI,+BAA+B,CAAC;AACvD,WAAQ,MAAM,MAAM;AACpB,gBAAQ,KAAK,EAAE;;;CAGpB,CAAC;AAEF,oBAAe"}
@@ -49,27 +49,27 @@ async function startServer({ port, host, configPath, noCache, allowWrite, allowA
49
49
  const serverPath = path.join(agentDir, ".output", "server", "index.mjs");
50
50
  const PORT = process$1.env.PORT || (port === 0 ? "3000" : String(port));
51
51
  const HOST = process$1.env.HOST || host || "0.0.0.0";
52
- const KUBB_ROOT = process$1.env.KUBB_ROOT || process$1.cwd();
53
- const KUBB_CONFIG = process$1.env.KUBB_CONFIG || configPath || "kubb.config.ts";
52
+ const KUBB_AGENT_ROOT = process$1.env.KUBB_AGENT_ROOT || process$1.cwd();
53
+ const KUBB_AGENT_CONFIG = process$1.env.KUBB_AGENT_CONFIG || configPath || "kubb.config.ts";
54
54
  const KUBB_AGENT_NO_CACHE = noCache ? "true" : "false";
55
- const KUBB_ALLOW_WRITE = allowAll || allowWrite ? "true" : process$1.env.KUBB_ALLOW_WRITE ?? "false";
56
- const KUBB_ALLOW_ALL = allowAll ? "true" : process$1.env.KUBB_ALLOW_ALL ?? "false";
55
+ const KUBB_AGENT_ALLOW_WRITE = allowAll || allowWrite ? "true" : process$1.env.KUBB_AGENT_ALLOW_WRITE ?? "false";
56
+ const KUBB_AGENT_ALLOW_ALL = allowAll ? "true" : process$1.env.KUBB_AGENT_ALLOW_ALL ?? "false";
57
57
  const KUBB_STUDIO_URL = process$1.env.KUBB_STUDIO_URL || "https://studio.kubb.dev";
58
58
  const KUBB_AGENT_TOKEN = process$1.env.KUBB_AGENT_TOKEN;
59
59
  const env = {
60
- KUBB_ROOT,
61
- KUBB_CONFIG,
60
+ KUBB_AGENT_ROOT,
61
+ KUBB_AGENT_CONFIG,
62
62
  PORT,
63
63
  HOST,
64
64
  KUBB_STUDIO_URL,
65
- KUBB_RETRY_TIMEOUT: process$1.env.KUBB_RETRY_TIMEOUT || "30000",
65
+ KUBB_AGENT_RETRY_TIMEOUT: process$1.env.KUBB_AGENT_RETRY_TIMEOUT || "30000",
66
66
  KUBB_AGENT_NO_CACHE,
67
67
  KUBB_AGENT_TOKEN,
68
- KUBB_ALLOW_WRITE,
69
- KUBB_ALLOW_ALL
68
+ KUBB_AGENT_ALLOW_WRITE,
69
+ KUBB_AGENT_ALLOW_ALL
70
70
  };
71
71
  clack.log.step(pc.cyan("Starting agent server..."));
72
- clack.log.info(pc.dim(`Config: ${KUBB_CONFIG}`));
72
+ clack.log.info(pc.dim(`Config: ${KUBB_AGENT_CONFIG}`));
73
73
  clack.log.info(pc.dim(`Host: ${HOST}`));
74
74
  clack.log.info(pc.dim(`Port: ${PORT}`));
75
75
  if (noCache) clack.log.info(pc.dim("Session caching: disabled"));
@@ -118,4 +118,4 @@ var start_default = command;
118
118
 
119
119
  //#endregion
120
120
  export { start_default as default };
121
- //# sourceMappingURL=start-D9LsCoNJ.js.map
121
+ //# sourceMappingURL=start-DNbpCv53.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-DNbpCv53.js","names":["process","args"],"sources":["../src/commands/agent/start.ts"],"sourcesContent":["import path from 'node:path'\nimport * as process from 'node:process'\nimport { fileURLToPath } from 'node:url'\n\nimport * as clack from '@clack/prompts'\nimport type { ArgsDef } from 'citty'\nimport { defineCommand } from 'citty'\nimport { config as loadEnv } from 'dotenv'\nimport { execa } from 'execa'\nimport pc from 'picocolors'\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 noCache: boolean\n allowWrite: boolean\n allowAll: boolean\n}\n\nasync function startServer({ port, host, configPath, noCache, allowWrite, allowAll }: StartServerProps): Promise<void> {\n try {\n // Load .env files into process.env (supports .env, .env.local, .env.*.local)\n loadEnv() // .env\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_NO_CACHE = noCache ? 'true' : 'false'\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_STUDIO_URL = process.env.KUBB_STUDIO_URL || 'https://studio.kubb.dev'\n const KUBB_AGENT_TOKEN = process.env.KUBB_AGENT_TOKEN\n const KUBB_AGENT_RETRY_TIMEOUT = process.env.KUBB_AGENT_RETRY_TIMEOUT || '30000'\n\n // Set environment variables\n const env = {\n KUBB_AGENT_ROOT,\n KUBB_AGENT_CONFIG,\n PORT,\n HOST,\n KUBB_STUDIO_URL,\n KUBB_AGENT_RETRY_TIMEOUT,\n KUBB_AGENT_NO_CACHE,\n KUBB_AGENT_TOKEN,\n KUBB_AGENT_ALLOW_WRITE,\n KUBB_AGENT_ALLOW_ALL,\n }\n\n clack.log.step(pc.cyan('Starting agent server...'))\n clack.log.info(pc.dim(`Config: ${KUBB_AGENT_CONFIG}`))\n clack.log.info(pc.dim(`Host: ${HOST}`))\n clack.log.info(pc.dim(`Port: ${PORT}`))\n if (noCache) {\n clack.log.info(pc.dim('Session caching: disabled'))\n }\n if (!allowWrite && !allowAll) {\n clack.log.warn(pc.yellow('Filesystem writes disabled. Use --allow-write or --allow-all to enable.'))\n }\n\n // Use execa to spawn the server process\n await execa('node', [serverPath], {\n 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\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 noCache = args['no-cache']\n const allowWrite = args['allow-write']\n const allowAll = args['allow-all']\n\n await startServer({ port, host, configPath, noCache, allowWrite, allowAll })\n } catch (error) {\n clack.log.error(pc.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;AAWD,eAAe,YAAY,EAAE,MAAM,MAAM,YAAY,SAAS,YAAY,YAA6C;AACrH,KAAI;AAEF,UAAS;EAIT,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,sBAAsB,UAAU,SAAS;EAC/C,MAAM,yBAAyB,YAAY,aAAa,SAAUA,UAAQ,IAAI,0BAA0B;EACxG,MAAM,uBAAuB,WAAW,SAAUA,UAAQ,IAAI,wBAAwB;EACtF,MAAM,kBAAkBA,UAAQ,IAAI,mBAAmB;EACvD,MAAM,mBAAmBA,UAAQ,IAAI;EAIrC,MAAM,MAAM;GACV;GACA;GACA;GACA;GACA;GACA,0BAT+BA,UAAQ,IAAI,4BAA4B;GAUvE;GACA;GACA;GACA;GACD;AAED,QAAM,IAAI,KAAK,GAAG,KAAK,2BAA2B,CAAC;AACnD,QAAM,IAAI,KAAK,GAAG,IAAI,WAAW,oBAAoB,CAAC;AACtD,QAAM,IAAI,KAAK,GAAG,IAAI,SAAS,OAAO,CAAC;AACvC,QAAM,IAAI,KAAK,GAAG,IAAI,SAAS,OAAO,CAAC;AACvC,MAAI,QACF,OAAM,IAAI,KAAK,GAAG,IAAI,4BAA4B,CAAC;AAErD,MAAI,CAAC,cAAc,CAAC,SAClB,OAAM,IAAI,KAAK,GAAG,OAAO,0EAA0E,CAAC;AAItG,QAAM,MAAM,QAAQ,CAAC,WAAW,EAAE;GAChC;GACA,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,iBAAS;AAEjB,MAAI;GACF,MAAM,aAAa,KAAK,QAAQA,UAAQ,KAAK,EAAEC,OAAK,UAAU,iBAAiB;GAC/E,MAAM,OAAOA,OAAK,OAAO,OAAO,SAASA,OAAK,MAAM,GAAG,GAAG;GAC1D,MAAM,OAAOA,OAAK;GAClB,MAAM,UAAUA,OAAK;GACrB,MAAM,aAAaA,OAAK;GACxB,MAAM,WAAWA,OAAK;AAEtB,SAAM,YAAY;IAAE;IAAM;IAAM;IAAY;IAAS;IAAY;IAAU,CAAC;WACrE,OAAO;AACd,SAAM,IAAI,MAAM,GAAG,IAAI,+BAA+B,CAAC;AACvD,WAAQ,MAAM,MAAM;AACpB,aAAQ,KAAK,EAAE;;;CAGpB,CAAC;AAEF,oBAAe"}