@kubb/cli 5.0.0-beta.4 → 5.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-BJEvbSiP.js +68 -0
- package/dist/agent-BJEvbSiP.js.map +1 -0
- package/dist/agent-CXNO6dgj.cjs +70 -0
- package/dist/agent-CXNO6dgj.cjs.map +1 -0
- package/dist/{agent-B4cAAab2.cjs → agent-D9CKYh4K.cjs} +3 -3
- package/dist/{agent-B4cAAab2.cjs.map → agent-D9CKYh4K.cjs.map} +1 -1
- package/dist/{agent-sdYBBgrd.js → agent-VXKxLCho.js} +3 -3
- package/dist/{agent-sdYBBgrd.js.map → agent-VXKxLCho.js.map} +1 -1
- package/dist/constants-BPJBMT_6.js +45 -0
- package/dist/constants-BPJBMT_6.js.map +1 -0
- package/dist/constants-BYGmiFs0.cjs +139 -0
- package/dist/constants-BYGmiFs0.cjs.map +1 -0
- package/dist/constants-DSJ-Xrbv.js +116 -0
- package/dist/constants-DSJ-Xrbv.js.map +1 -0
- package/dist/constants-Rcaqzyd-.cjs +80 -0
- package/dist/constants-Rcaqzyd-.cjs.map +1 -0
- package/dist/define-Bdn8j5VM.cjs.map +1 -1
- package/dist/define-Ctii4bel.js.map +1 -1
- package/dist/errors-CLCjoSg0.cjs.map +1 -1
- package/dist/errors-CjPmyZHy.js.map +1 -1
- package/dist/{generate-BDGOOsBM.cjs → generate-BB2Q7I9s.cjs} +9 -3
- package/dist/{generate-BDGOOsBM.cjs.map → generate-BB2Q7I9s.cjs.map} +1 -1
- package/dist/{generate-B1Pa2ho-.cjs → generate-B_p5dl68.cjs} +13 -14
- package/dist/generate-B_p5dl68.cjs.map +1 -0
- package/dist/{generate-DuhxPLGr.js → generate-BmulGxIM.js} +9 -3
- package/dist/{generate-DuhxPLGr.js.map → generate-BmulGxIM.js.map} +1 -1
- package/dist/{generate-CNrRLY4n.js → generate-DAsdUw3z.js} +13 -14
- package/dist/{generate-CNrRLY4n.js.map → generate-DAsdUw3z.js.map} +1 -1
- package/dist/index.cjs +19 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -10
- package/dist/index.js.map +1 -1
- package/dist/init-BTp9if7K.js +53 -0
- package/dist/init-BTp9if7K.js.map +1 -0
- package/dist/{init-CZ5Xq2Hd.cjs → init-CJ80lKSP.cjs} +47 -101
- package/dist/init-CJ80lKSP.cjs.map +1 -0
- package/dist/{init-eNRlotJK.js → init-DCqcEq86.js} +44 -98
- package/dist/init-DCqcEq86.js.map +1 -0
- package/dist/init-Dpg8e1HN.cjs +53 -0
- package/dist/init-Dpg8e1HN.cjs.map +1 -0
- package/dist/mcp-C9RoU-Dg.js +39 -0
- package/dist/mcp-C9RoU-Dg.js.map +1 -0
- package/dist/{mcp-CYOgxB82.cjs → mcp-D1llTaRM.cjs} +7 -4
- package/dist/mcp-D1llTaRM.cjs.map +1 -0
- package/dist/{mcp-DmJm3TrU.js → mcp-DNUw8nqb.js} +7 -4
- package/dist/mcp-DNUw8nqb.js.map +1 -0
- package/dist/mcp-wpl6sYYR.cjs +39 -0
- package/dist/mcp-wpl6sYYR.cjs.map +1 -0
- package/dist/{package-BapVyQ-w.cjs → package-iheSdfas.cjs} +2 -2
- package/dist/package-iheSdfas.cjs.map +1 -0
- package/dist/package-vLafMWCe.js +6 -0
- package/dist/package-vLafMWCe.js.map +1 -0
- package/dist/shell-475fQKaX.cjs.map +1 -1
- package/dist/shell-DLzN4fRo.js.map +1 -1
- package/dist/{telemetry-DN95_2pF.cjs → telemetry-BLX0NzRk.cjs} +2 -2
- package/dist/{telemetry-DN95_2pF.cjs.map → telemetry-BLX0NzRk.cjs.map} +1 -1
- package/dist/{telemetry-LgT_sdPe.js → telemetry-juq4QBf7.js} +2 -2
- package/dist/{telemetry-LgT_sdPe.js.map → telemetry-juq4QBf7.js.map} +1 -1
- package/dist/validate-BU4fPTMc.cjs +47 -0
- package/dist/validate-BU4fPTMc.cjs.map +1 -0
- package/dist/validate-BfJoCxrC.js +26 -0
- package/dist/validate-BfJoCxrC.js.map +1 -0
- package/dist/validate-DIDBROB2.cjs +26 -0
- package/dist/validate-DIDBROB2.cjs.map +1 -0
- package/dist/validate-k9s_hFah.js +46 -0
- package/dist/validate-k9s_hFah.js.map +1 -0
- package/package.json +12 -7
- package/src/commands/agent/start.ts +8 -5
- package/src/commands/agent.ts +3 -1
- package/src/commands/generate.ts +3 -1
- package/src/commands/init.ts +33 -2
- package/src/commands/mcp.ts +27 -3
- package/src/commands/validate.ts +4 -2
- package/src/constants.ts +2 -54
- package/src/runners/init.ts +29 -118
- package/src/runners/mcp.ts +7 -2
- package/src/runners/validate.ts +23 -4
- package/src/utils/getCosmiConfig.ts +8 -13
- package/dist/agent-CR6Z96og.js +0 -56
- package/dist/agent-CR6Z96og.js.map +0 -1
- package/dist/agent-Dmxzqg4d.cjs +0 -58
- package/dist/agent-Dmxzqg4d.cjs.map +0 -1
- package/dist/constants-CnDXa1R6.cjs +0 -148
- package/dist/constants-CnDXa1R6.cjs.map +0 -1
- package/dist/constants-aL3CP_Wq.js +0 -95
- package/dist/constants-aL3CP_Wq.js.map +0 -1
- package/dist/generate-B1Pa2ho-.cjs.map +0 -1
- package/dist/init-CZ5Xq2Hd.cjs.map +0 -1
- package/dist/init-CnZXHrbq.js +0 -25
- package/dist/init-CnZXHrbq.js.map +0 -1
- package/dist/init-NYJSZJSb.cjs +0 -25
- package/dist/init-NYJSZJSb.cjs.map +0 -1
- package/dist/init-eNRlotJK.js.map +0 -1
- package/dist/mcp-CYOgxB82.cjs.map +0 -1
- package/dist/mcp-CdFWyrwi.cjs +0 -16
- package/dist/mcp-CdFWyrwi.cjs.map +0 -1
- package/dist/mcp-DhSxuDMD.js +0 -16
- package/dist/mcp-DhSxuDMD.js.map +0 -1
- package/dist/mcp-DmJm3TrU.js.map +0 -1
- package/dist/package-BapVyQ-w.cjs.map +0 -1
- package/dist/package-DyJE-qNq.js +0 -6
- package/dist/package-DyJE-qNq.js.map +0 -1
- package/dist/validate-C6npXzel.cjs +0 -25
- package/dist/validate-C6npXzel.cjs.map +0 -1
- package/dist/validate-kLJoT_hi.js +0 -33
- package/dist/validate-kLJoT_hi.js.map +0 -1
- package/dist/validate-n38Rh-Y7.js +0 -25
- package/dist/validate-n38Rh-Y7.js.map +0 -1
- package/dist/validate-yKKzqEZ5.cjs +0 -34
- package/dist/validate-yKKzqEZ5.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-CJ80lKSP.cjs","names":["pluginDefaultConfigs","fs","path","spawnAsync","process","clack","initDefaults","availablePlugins","KUBB_CONFIG_FILENAME","path","fs"],"sources":["../../../internals/utils/src/packageManager.ts","../../../internals/shared/src/init.ts","../src/utils/packageManager.ts","../src/runners/init.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\n/**\n * Supported package manager identifiers.\n *\n * @example\n * ```ts\n * const pm: PackageManagerName = 'pnpm'\n * ```\n */\nexport type PackageManagerName = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\n/**\n * Metadata describing a package manager's lock file and install command.\n */\nexport interface PackageManagerInfo {\n /**\n * Identifier used in CLI commands, e.g. `pnpm`, `yarn`.\n */\n name: PackageManagerName\n /**\n * Lock file name that uniquely identifies this package manager in a project root.\n */\n lockFile: string\n /**\n * Subcommands passed to the package manager binary to install a dev dependency.\n */\n installCommand: ReadonlyArray<string>\n}\n/**\n * Metadata for each supported package manager, keyed by its short name.\n *\n * @example\n * ```ts\n * packageManagers.pnpm.installCommand // ['add', '-D']\n * packageManagers.npm.lockFile // 'package-lock.json'\n * ```\n */\nconst packageManagers: Record<PackageManagerName, PackageManagerInfo> = {\n pnpm: {\n name: 'pnpm',\n lockFile: 'pnpm-lock.yaml',\n installCommand: ['add', '-D'],\n },\n yarn: {\n name: 'yarn',\n lockFile: 'yarn.lock',\n installCommand: ['add', '-D'],\n },\n bun: {\n name: 'bun',\n lockFile: 'bun.lockb',\n installCommand: ['add', '-d'],\n },\n npm: {\n name: 'npm',\n lockFile: 'package-lock.json',\n installCommand: ['install', '--save-dev'],\n },\n}\n\n/**\n * Minimal shape of `package.json` fields read during detection.\n */\ntype PackageJson = {\n /**\n * The `packageManager` field from `package.json` (e.g. `\"pnpm@9.0.0\"`).\n */\n packageManager?: string\n}\n\n/**\n * Detects the active package manager for the given directory.\n * Resolution order: `packageManager` field in `package.json`, then presence of a lock file.\n * Falls back to `npm` when no signal is found.\n *\n * @example\n * ```ts\n * detectPackageManager('/my/project') // { name: 'pnpm', lockFile: 'pnpm-lock.yaml', ... }\n * detectPackageManager() // falls back to npm when no lock file is found\n * ```\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManagerInfo {\n const packageJsonPath = join(cwd, 'package.json')\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageJson\n const pmField = packageJson.packageManager\n if (typeof pmField === 'string') {\n const name = pmField.split('@')[0]\n if (name && name in packageManagers) {\n return packageManagers[name as PackageManagerName]\n }\n }\n } catch {\n // Continue to lock file detection\n }\n }\n\n for (const pm of Object.values(packageManagers)) {\n if (existsSync(join(cwd, pm.lockFile))) {\n return pm\n }\n }\n\n return packageManagers.npm\n}\n","import { pluginDefaultConfigs } from './constants.ts'\nimport type { PluginOption } from './types.ts'\n\nexport function generateConfigFile({\n selectedPlugins,\n inputPath,\n outputPath,\n}: {\n selectedPlugins: PluginOption[]\n inputPath: string\n outputPath: string\n}): string {\n const imports = selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join('\\n')\n\n const pluginConfigs = selectedPlugins\n .map((plugin) => {\n const config = (pluginDefaultConfigs as Record<string, string>)[plugin.value] ?? `${plugin.importName}()`\n return ` ${config},`\n })\n .join('\\n')\n\n return `import { defineConfig } from 'kubb'\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","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { PackageManagerInfo, PackageManagerName } from '@internals/utils'\nimport { spawnAsync } from '@internals/utils'\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 await spawnAsync(packageManager.name, commands[packageManager.name], { cwd })\n}\n\nexport async function installPackages(packages: string[], packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n await spawnAsync(packageManager.name, [...packageManager.installCommand, ...packages], { 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 type { PackageManagerInfo } from '@internals/utils'\nimport { detectPackageManager } from '@internals/utils'\nimport { availablePlugins, generateConfigFile, initDefaults, KUBB_CONFIG_FILENAME, type PluginOption } from '@internals/shared'\nimport { hasPackageJson, initPackageJson, installPackages } from '../utils/packageManager.ts'\n\nfunction cancelAndExit(message = 'Operation cancelled.'): never {\n clack.cancel(message)\n process.exit(0)\n}\n\ntype InitOptions = {\n yes: boolean\n version: string\n input?: string\n output?: string\n plugins?: string\n}\n\nexport async function runInit({ yes, version, input: inputFlag, output: outputFlag, plugins: pluginsFlag }: InitOptions): Promise<void> {\n const cwd = process.cwd()\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 cancelAndExit()\n }\n }\n\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 (inputFlag) {\n inputPath = inputFlag\n clack.log.info(`Using input path: ${styleText('cyan', inputPath)}`)\n } else if (yes) {\n inputPath = initDefaults.inputPath\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: initDefaults.inputPath,\n defaultValue: initDefaults.inputPath,\n validate: (value) => {\n if (!value) return 'Input path is required'\n },\n })\n\n if (clack.isCancel(inputPathResult)) {\n cancelAndExit()\n }\n inputPath = inputPathResult as string\n }\n\n // Prompt for output directory\n let outputPath: string\n if (outputFlag) {\n outputPath = outputFlag\n clack.log.info(`Using output path: ${styleText('cyan', outputPath)}`)\n } else if (yes) {\n outputPath = initDefaults.outputPath\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: initDefaults.outputPath,\n defaultValue: initDefaults.outputPath,\n validate: (value) => {\n if (!value) return 'Output path is required'\n },\n })\n\n if (clack.isCancel(outputPathResult)) {\n cancelAndExit()\n }\n outputPath = outputPathResult as string\n }\n\n // Plugin selection\n let selectedPlugins: PluginOption[]\n if (pluginsFlag) {\n const requestedValues = pluginsFlag\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean)\n selectedPlugins = availablePlugins.filter((plugin) => requestedValues.includes(plugin.value))\n if (selectedPlugins.length === 0) {\n selectedPlugins = availablePlugins.filter((plugin) => (initDefaults.plugins as readonly string[]).includes(plugin.value))\n clack.log.warn(\n `No valid plugins found in --plugins value; falling back to default: ${styleText('cyan', selectedPlugins.map((p) => p.label).join(', '))}`,\n )\n } else {\n clack.log.info(`Using plugins: ${styleText('cyan', selectedPlugins.map((p) => p.label).join(', '))}`)\n }\n } else if (yes) {\n selectedPlugins = availablePlugins.filter((plugin) => (initDefaults.plugins as readonly string[]).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: availablePlugins.map((plugin) => ({\n value: plugin.value,\n label: plugin.label,\n hint: plugin.hint,\n })),\n initialValues: [...initDefaults.plugins],\n required: true,\n })\n\n if (clack.isCancel(selectedPluginValues)) {\n cancelAndExit()\n }\n\n selectedPlugins = availablePlugins.filter((plugin) => (selectedPluginValues as string[]).includes(plugin.value))\n }\n\n // Install packages\n const packagesToInstall = ['kubb', ...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_FILENAME}`)\n\n const configContent = generateConfigFile({ selectedPlugins, inputPath, outputPath })\n const configPath = path.join(cwd, KUBB_CONFIG_FILENAME)\n\n if (fs.existsSync(configPath)) {\n configSpinner.stop(`${KUBB_CONFIG_FILENAME} already exists`)\n\n if (!yes) {\n const shouldOverwrite = await clack.confirm({\n message: `${KUBB_CONFIG_FILENAME} already exists. Overwrite?`,\n initialValue: false,\n })\n\n if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {\n cancelAndExit('Keeping existing configuration. Packages have been installed.')\n }\n }\n\n configSpinner.start(`Overwriting ${KUBB_CONFIG_FILENAME}`)\n }\n\n fs.writeFileSync(configPath, configContent, 'utf-8')\n\n configSpinner.stop(`Created ${KUBB_CONFIG_FILENAME}`)\n\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"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./chunk--u3MIqq1.js";
|
|
2
2
|
import { t as spawnAsync } from "./shell-DLzN4fRo.js";
|
|
3
|
-
import {
|
|
3
|
+
import { i as pluginDefaultConfigs, n as availablePlugins, r as initDefaults, t as KUBB_CONFIG_FILENAME } from "./constants-DSJ-Xrbv.js";
|
|
4
4
|
import { styleText } from "node:util";
|
|
5
5
|
import fs, { existsSync, readFileSync } from "node:fs";
|
|
6
6
|
import path, { join } from "node:path";
|
|
@@ -62,97 +62,8 @@ function detectPackageManager(cwd = process.cwd()) {
|
|
|
62
62
|
return packageManagers.npm;
|
|
63
63
|
}
|
|
64
64
|
//#endregion
|
|
65
|
-
//#region src/
|
|
66
|
-
function
|
|
67
|
-
return fs.existsSync(path.join(cwd, "package.json"));
|
|
68
|
-
}
|
|
69
|
-
async function initPackageJson(cwd, packageManager) {
|
|
70
|
-
await spawnAsync(packageManager.name, {
|
|
71
|
-
npm: ["init", "-y"],
|
|
72
|
-
pnpm: ["init"],
|
|
73
|
-
yarn: ["init", "-y"],
|
|
74
|
-
bun: ["init", "-y"]
|
|
75
|
-
}[packageManager.name], { cwd });
|
|
76
|
-
}
|
|
77
|
-
async function installPackages(packages, packageManager, cwd = process.cwd()) {
|
|
78
|
-
await spawnAsync(packageManager.name, [...packageManager.installCommand, ...packages], { cwd });
|
|
79
|
-
}
|
|
80
|
-
//#endregion
|
|
81
|
-
//#region src/runners/init.ts
|
|
82
|
-
const availablePlugins = [
|
|
83
|
-
{
|
|
84
|
-
value: "plugin-ts",
|
|
85
|
-
label: "TypeScript",
|
|
86
|
-
hint: "Recommended",
|
|
87
|
-
packageName: "@kubb/plugin-ts",
|
|
88
|
-
importName: "pluginTs",
|
|
89
|
-
category: "types"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
value: "plugin-client",
|
|
93
|
-
label: "Client (Fetch/Axios)",
|
|
94
|
-
packageName: "@kubb/plugin-client",
|
|
95
|
-
importName: "pluginClient",
|
|
96
|
-
category: "client"
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
value: "plugin-react-query",
|
|
100
|
-
label: "React Query / TanStack Query",
|
|
101
|
-
packageName: "@kubb/plugin-react-query",
|
|
102
|
-
importName: "pluginReactQuery",
|
|
103
|
-
category: "framework"
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
value: "plugin-vue-query",
|
|
107
|
-
label: "Vue Query",
|
|
108
|
-
packageName: "@kubb/plugin-vue-query",
|
|
109
|
-
importName: "pluginVueQuery",
|
|
110
|
-
category: "framework"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
value: "plugin-zod",
|
|
114
|
-
label: "Zod Schemas",
|
|
115
|
-
packageName: "@kubb/plugin-zod",
|
|
116
|
-
importName: "pluginZod",
|
|
117
|
-
category: "validation"
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
value: "plugin-faker",
|
|
121
|
-
label: "Faker.js Mocks",
|
|
122
|
-
packageName: "@kubb/plugin-faker",
|
|
123
|
-
importName: "pluginFaker",
|
|
124
|
-
category: "mocks"
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
value: "plugin-msw",
|
|
128
|
-
label: "MSW Handlers",
|
|
129
|
-
packageName: "@kubb/plugin-msw",
|
|
130
|
-
importName: "pluginMsw",
|
|
131
|
-
category: "mocks"
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
value: "plugin-cypress",
|
|
135
|
-
label: "Cypress Tests",
|
|
136
|
-
packageName: "@kubb/plugin-cypress",
|
|
137
|
-
importName: "pluginCypress",
|
|
138
|
-
category: "testing"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
value: "plugin-mcp",
|
|
142
|
-
label: "MCP Server (AI / Model Context Protocol)",
|
|
143
|
-
packageName: "@kubb/plugin-mcp",
|
|
144
|
-
importName: "pluginMcp",
|
|
145
|
-
category: "ai"
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
value: "plugin-redoc",
|
|
149
|
-
label: "ReDoc Documentation",
|
|
150
|
-
packageName: "@kubb/plugin-redoc",
|
|
151
|
-
importName: "pluginRedoc",
|
|
152
|
-
category: "documentation"
|
|
153
|
-
}
|
|
154
|
-
];
|
|
155
|
-
function generateConfigFile(selectedPlugins, inputPath, outputPath) {
|
|
65
|
+
//#region ../../internals/shared/src/init.ts
|
|
66
|
+
function generateConfigFile({ selectedPlugins, inputPath, outputPath }) {
|
|
156
67
|
return `import { defineConfig } from 'kubb'
|
|
157
68
|
${selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join("\n")}
|
|
158
69
|
|
|
@@ -173,11 +84,29 @@ ${selectedPlugins.map((plugin) => {
|
|
|
173
84
|
})
|
|
174
85
|
`;
|
|
175
86
|
}
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/utils/packageManager.ts
|
|
89
|
+
function hasPackageJson(cwd = process.cwd()) {
|
|
90
|
+
return fs.existsSync(path.join(cwd, "package.json"));
|
|
91
|
+
}
|
|
92
|
+
async function initPackageJson(cwd, packageManager) {
|
|
93
|
+
await spawnAsync(packageManager.name, {
|
|
94
|
+
npm: ["init", "-y"],
|
|
95
|
+
pnpm: ["init"],
|
|
96
|
+
yarn: ["init", "-y"],
|
|
97
|
+
bun: ["init", "-y"]
|
|
98
|
+
}[packageManager.name], { cwd });
|
|
99
|
+
}
|
|
100
|
+
async function installPackages(packages, packageManager, cwd = process.cwd()) {
|
|
101
|
+
await spawnAsync(packageManager.name, [...packageManager.installCommand, ...packages], { cwd });
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/runners/init.ts
|
|
176
105
|
function cancelAndExit(message = "Operation cancelled.") {
|
|
177
106
|
clack.cancel(message);
|
|
178
107
|
process$1.exit(0);
|
|
179
108
|
}
|
|
180
|
-
async function runInit({ yes, version }) {
|
|
109
|
+
async function runInit({ yes, version, input: inputFlag, output: outputFlag, plugins: pluginsFlag }) {
|
|
181
110
|
const cwd = process$1.cwd();
|
|
182
111
|
clack.intro(styleText("bgCyan", styleText("black", " Kubb Init ")));
|
|
183
112
|
try {
|
|
@@ -200,7 +129,10 @@ async function runInit({ yes, version }) {
|
|
|
200
129
|
clack.log.info(`Detected package manager: ${styleText("cyan", packageManager.name)}`);
|
|
201
130
|
}
|
|
202
131
|
let inputPath;
|
|
203
|
-
if (
|
|
132
|
+
if (inputFlag) {
|
|
133
|
+
inputPath = inputFlag;
|
|
134
|
+
clack.log.info(`Using input path: ${styleText("cyan", inputPath)}`);
|
|
135
|
+
} else if (yes) {
|
|
204
136
|
inputPath = initDefaults.inputPath;
|
|
205
137
|
clack.log.info(`Using input path: ${styleText("cyan", inputPath)}`);
|
|
206
138
|
} else {
|
|
@@ -216,7 +148,10 @@ async function runInit({ yes, version }) {
|
|
|
216
148
|
inputPath = inputPathResult;
|
|
217
149
|
}
|
|
218
150
|
let outputPath;
|
|
219
|
-
if (
|
|
151
|
+
if (outputFlag) {
|
|
152
|
+
outputPath = outputFlag;
|
|
153
|
+
clack.log.info(`Using output path: ${styleText("cyan", outputPath)}`);
|
|
154
|
+
} else if (yes) {
|
|
220
155
|
outputPath = initDefaults.outputPath;
|
|
221
156
|
clack.log.info(`Using output path: ${styleText("cyan", outputPath)}`);
|
|
222
157
|
} else {
|
|
@@ -232,7 +167,14 @@ async function runInit({ yes, version }) {
|
|
|
232
167
|
outputPath = outputPathResult;
|
|
233
168
|
}
|
|
234
169
|
let selectedPlugins;
|
|
235
|
-
if (
|
|
170
|
+
if (pluginsFlag) {
|
|
171
|
+
const requestedValues = pluginsFlag.split(",").map((v) => v.trim()).filter(Boolean);
|
|
172
|
+
selectedPlugins = availablePlugins.filter((plugin) => requestedValues.includes(plugin.value));
|
|
173
|
+
if (selectedPlugins.length === 0) {
|
|
174
|
+
selectedPlugins = availablePlugins.filter((plugin) => initDefaults.plugins.includes(plugin.value));
|
|
175
|
+
clack.log.warn(`No valid plugins found in --plugins value; falling back to default: ${styleText("cyan", selectedPlugins.map((p) => p.label).join(", "))}`);
|
|
176
|
+
} else clack.log.info(`Using plugins: ${styleText("cyan", selectedPlugins.map((p) => p.label).join(", "))}`);
|
|
177
|
+
} else if (yes) {
|
|
236
178
|
selectedPlugins = availablePlugins.filter((plugin) => initDefaults.plugins.includes(plugin.value));
|
|
237
179
|
clack.log.info(`Using plugins: ${styleText("cyan", selectedPlugins.map((p) => p.label).join(", "))}`);
|
|
238
180
|
} else {
|
|
@@ -261,7 +203,11 @@ async function runInit({ yes, version }) {
|
|
|
261
203
|
}
|
|
262
204
|
const configSpinner = clack.spinner();
|
|
263
205
|
configSpinner.start(`Creating ${KUBB_CONFIG_FILENAME}`);
|
|
264
|
-
const configContent = generateConfigFile(
|
|
206
|
+
const configContent = generateConfigFile({
|
|
207
|
+
selectedPlugins,
|
|
208
|
+
inputPath,
|
|
209
|
+
outputPath
|
|
210
|
+
});
|
|
265
211
|
const configPath = path.join(cwd, KUBB_CONFIG_FILENAME);
|
|
266
212
|
if (fs.existsSync(configPath)) {
|
|
267
213
|
configSpinner.stop(`${KUBB_CONFIG_FILENAME} already exists`);
|
|
@@ -286,4 +232,4 @@ async function runInit({ yes, version }) {
|
|
|
286
232
|
//#endregion
|
|
287
233
|
export { runInit };
|
|
288
234
|
|
|
289
|
-
//# sourceMappingURL=init-
|
|
235
|
+
//# sourceMappingURL=init-DCqcEq86.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-DCqcEq86.js","names":["process"],"sources":["../../../internals/utils/src/packageManager.ts","../../../internals/shared/src/init.ts","../src/utils/packageManager.ts","../src/runners/init.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\n/**\n * Supported package manager identifiers.\n *\n * @example\n * ```ts\n * const pm: PackageManagerName = 'pnpm'\n * ```\n */\nexport type PackageManagerName = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\n/**\n * Metadata describing a package manager's lock file and install command.\n */\nexport interface PackageManagerInfo {\n /**\n * Identifier used in CLI commands, e.g. `pnpm`, `yarn`.\n */\n name: PackageManagerName\n /**\n * Lock file name that uniquely identifies this package manager in a project root.\n */\n lockFile: string\n /**\n * Subcommands passed to the package manager binary to install a dev dependency.\n */\n installCommand: ReadonlyArray<string>\n}\n/**\n * Metadata for each supported package manager, keyed by its short name.\n *\n * @example\n * ```ts\n * packageManagers.pnpm.installCommand // ['add', '-D']\n * packageManagers.npm.lockFile // 'package-lock.json'\n * ```\n */\nconst packageManagers: Record<PackageManagerName, PackageManagerInfo> = {\n pnpm: {\n name: 'pnpm',\n lockFile: 'pnpm-lock.yaml',\n installCommand: ['add', '-D'],\n },\n yarn: {\n name: 'yarn',\n lockFile: 'yarn.lock',\n installCommand: ['add', '-D'],\n },\n bun: {\n name: 'bun',\n lockFile: 'bun.lockb',\n installCommand: ['add', '-d'],\n },\n npm: {\n name: 'npm',\n lockFile: 'package-lock.json',\n installCommand: ['install', '--save-dev'],\n },\n}\n\n/**\n * Minimal shape of `package.json` fields read during detection.\n */\ntype PackageJson = {\n /**\n * The `packageManager` field from `package.json` (e.g. `\"pnpm@9.0.0\"`).\n */\n packageManager?: string\n}\n\n/**\n * Detects the active package manager for the given directory.\n * Resolution order: `packageManager` field in `package.json`, then presence of a lock file.\n * Falls back to `npm` when no signal is found.\n *\n * @example\n * ```ts\n * detectPackageManager('/my/project') // { name: 'pnpm', lockFile: 'pnpm-lock.yaml', ... }\n * detectPackageManager() // falls back to npm when no lock file is found\n * ```\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManagerInfo {\n const packageJsonPath = join(cwd, 'package.json')\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageJson\n const pmField = packageJson.packageManager\n if (typeof pmField === 'string') {\n const name = pmField.split('@')[0]\n if (name && name in packageManagers) {\n return packageManagers[name as PackageManagerName]\n }\n }\n } catch {\n // Continue to lock file detection\n }\n }\n\n for (const pm of Object.values(packageManagers)) {\n if (existsSync(join(cwd, pm.lockFile))) {\n return pm\n }\n }\n\n return packageManagers.npm\n}\n","import { pluginDefaultConfigs } from './constants.ts'\nimport type { PluginOption } from './types.ts'\n\nexport function generateConfigFile({\n selectedPlugins,\n inputPath,\n outputPath,\n}: {\n selectedPlugins: PluginOption[]\n inputPath: string\n outputPath: string\n}): string {\n const imports = selectedPlugins.map((plugin) => `import { ${plugin.importName} } from '${plugin.packageName}'`).join('\\n')\n\n const pluginConfigs = selectedPlugins\n .map((plugin) => {\n const config = (pluginDefaultConfigs as Record<string, string>)[plugin.value] ?? `${plugin.importName}()`\n return ` ${config},`\n })\n .join('\\n')\n\n return `import { defineConfig } from 'kubb'\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","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { PackageManagerInfo, PackageManagerName } from '@internals/utils'\nimport { spawnAsync } from '@internals/utils'\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 await spawnAsync(packageManager.name, commands[packageManager.name], { cwd })\n}\n\nexport async function installPackages(packages: string[], packageManager: PackageManagerInfo, cwd: string = process.cwd()): Promise<void> {\n await spawnAsync(packageManager.name, [...packageManager.installCommand, ...packages], { 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 type { PackageManagerInfo } from '@internals/utils'\nimport { detectPackageManager } from '@internals/utils'\nimport { availablePlugins, generateConfigFile, initDefaults, KUBB_CONFIG_FILENAME, type PluginOption } from '@internals/shared'\nimport { hasPackageJson, initPackageJson, installPackages } from '../utils/packageManager.ts'\n\nfunction cancelAndExit(message = 'Operation cancelled.'): never {\n clack.cancel(message)\n process.exit(0)\n}\n\ntype InitOptions = {\n yes: boolean\n version: string\n input?: string\n output?: string\n plugins?: string\n}\n\nexport async function runInit({ yes, version, input: inputFlag, output: outputFlag, plugins: pluginsFlag }: InitOptions): Promise<void> {\n const cwd = process.cwd()\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 cancelAndExit()\n }\n }\n\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 (inputFlag) {\n inputPath = inputFlag\n clack.log.info(`Using input path: ${styleText('cyan', inputPath)}`)\n } else if (yes) {\n inputPath = initDefaults.inputPath\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: initDefaults.inputPath,\n defaultValue: initDefaults.inputPath,\n validate: (value) => {\n if (!value) return 'Input path is required'\n },\n })\n\n if (clack.isCancel(inputPathResult)) {\n cancelAndExit()\n }\n inputPath = inputPathResult as string\n }\n\n // Prompt for output directory\n let outputPath: string\n if (outputFlag) {\n outputPath = outputFlag\n clack.log.info(`Using output path: ${styleText('cyan', outputPath)}`)\n } else if (yes) {\n outputPath = initDefaults.outputPath\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: initDefaults.outputPath,\n defaultValue: initDefaults.outputPath,\n validate: (value) => {\n if (!value) return 'Output path is required'\n },\n })\n\n if (clack.isCancel(outputPathResult)) {\n cancelAndExit()\n }\n outputPath = outputPathResult as string\n }\n\n // Plugin selection\n let selectedPlugins: PluginOption[]\n if (pluginsFlag) {\n const requestedValues = pluginsFlag\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean)\n selectedPlugins = availablePlugins.filter((plugin) => requestedValues.includes(plugin.value))\n if (selectedPlugins.length === 0) {\n selectedPlugins = availablePlugins.filter((plugin) => (initDefaults.plugins as readonly string[]).includes(plugin.value))\n clack.log.warn(\n `No valid plugins found in --plugins value; falling back to default: ${styleText('cyan', selectedPlugins.map((p) => p.label).join(', '))}`,\n )\n } else {\n clack.log.info(`Using plugins: ${styleText('cyan', selectedPlugins.map((p) => p.label).join(', '))}`)\n }\n } else if (yes) {\n selectedPlugins = availablePlugins.filter((plugin) => (initDefaults.plugins as readonly string[]).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: availablePlugins.map((plugin) => ({\n value: plugin.value,\n label: plugin.label,\n hint: plugin.hint,\n })),\n initialValues: [...initDefaults.plugins],\n required: true,\n })\n\n if (clack.isCancel(selectedPluginValues)) {\n cancelAndExit()\n }\n\n selectedPlugins = availablePlugins.filter((plugin) => (selectedPluginValues as string[]).includes(plugin.value))\n }\n\n // Install packages\n const packagesToInstall = ['kubb', ...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_FILENAME}`)\n\n const configContent = generateConfigFile({ selectedPlugins, inputPath, outputPath })\n const configPath = path.join(cwd, KUBB_CONFIG_FILENAME)\n\n if (fs.existsSync(configPath)) {\n configSpinner.stop(`${KUBB_CONFIG_FILENAME} already exists`)\n\n if (!yes) {\n const shouldOverwrite = await clack.confirm({\n message: `${KUBB_CONFIG_FILENAME} already exists. Overwrite?`,\n initialValue: false,\n })\n\n if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {\n cancelAndExit('Keeping existing configuration. Packages have been installed.')\n }\n }\n\n configSpinner.start(`Overwriting ${KUBB_CONFIG_FILENAME}`)\n }\n\n fs.writeFileSync(configPath, configContent, 'utf-8')\n\n configSpinner.stop(`Created ${KUBB_CONFIG_FILENAME}`)\n\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"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require("./chunk-ByKO4r7w.cjs");
|
|
2
|
+
const require_define = require("./define-Bdn8j5VM.cjs");
|
|
3
|
+
const require_package = require("./package-iheSdfas.cjs");
|
|
4
|
+
//#region src/commands/init.ts
|
|
5
|
+
const command = require_define.defineCommand({
|
|
6
|
+
name: "init",
|
|
7
|
+
description: "Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.",
|
|
8
|
+
examples: [
|
|
9
|
+
"kubb init",
|
|
10
|
+
"kubb init --yes",
|
|
11
|
+
"kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod",
|
|
12
|
+
"kubb init --plugins plugin-ts,plugin-client,plugin-react-query"
|
|
13
|
+
],
|
|
14
|
+
options: {
|
|
15
|
+
yes: {
|
|
16
|
+
type: "boolean",
|
|
17
|
+
description: "Skip prompts and use default options",
|
|
18
|
+
short: "y",
|
|
19
|
+
default: false
|
|
20
|
+
},
|
|
21
|
+
input: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "Path to the OpenAPI specification",
|
|
24
|
+
short: "i",
|
|
25
|
+
hint: "path"
|
|
26
|
+
},
|
|
27
|
+
output: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Output directory for generated files",
|
|
30
|
+
short: "o",
|
|
31
|
+
hint: "path"
|
|
32
|
+
},
|
|
33
|
+
plugins: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)",
|
|
36
|
+
hint: "plugin-ts,plugin-zod,..."
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
async run({ values }) {
|
|
40
|
+
const { runInit } = await Promise.resolve().then(() => require("./init-CJ80lKSP.cjs"));
|
|
41
|
+
await runInit({
|
|
42
|
+
yes: values.yes,
|
|
43
|
+
version: require_package.version,
|
|
44
|
+
input: values.input,
|
|
45
|
+
output: values.output,
|
|
46
|
+
plugins: values.plugins
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.command = command;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=init-Dpg8e1HN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-Dpg8e1HN.cjs","names":["defineCommand"],"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'init',\n description:\n 'Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.',\n examples: [\n 'kubb init',\n 'kubb init --yes',\n 'kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod',\n 'kubb init --plugins plugin-ts,plugin-client,plugin-react-query',\n ],\n options: {\n yes: {\n type: 'boolean',\n description: 'Skip prompts and use default options',\n short: 'y',\n default: false,\n },\n input: {\n type: 'string',\n description: 'Path to the OpenAPI specification',\n short: 'i',\n hint: 'path',\n },\n output: {\n type: 'string',\n description: 'Output directory for generated files',\n short: 'o',\n hint: 'path',\n },\n plugins: {\n type: 'string',\n description:\n 'Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)',\n hint: 'plugin-ts,plugin-zod,...',\n },\n },\n async run({ values }) {\n const { runInit } = await import('../runners/init.ts')\n\n await runInit({\n yes: values.yes,\n version,\n input: values.input,\n output: values.output,\n plugins: values.plugins,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAUA,eAAAA,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,KAAK;GACH,MAAM;GACN,aAAa;GACb,OAAO;GACP,SAAS;GACV;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,QAAQ;GACN,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,SAAS;GACP,MAAM;GACN,aACE;GACF,MAAM;GACP;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,YAAY,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,sBAAA,CAAA;EAE1B,MAAM,QAAQ;GACZ,KAAK,OAAO;GACZ,SAAA,gBAAA;GACA,OAAO,OAAO;GACd,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;CAEL,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "./chunk--u3MIqq1.js";
|
|
2
|
+
import { n as defineCommand } from "./define-Ctii4bel.js";
|
|
3
|
+
import { t as version } from "./package-vLafMWCe.js";
|
|
4
|
+
//#region src/commands/mcp.ts
|
|
5
|
+
const command = defineCommand({
|
|
6
|
+
name: "mcp",
|
|
7
|
+
description: "Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.",
|
|
8
|
+
examples: [
|
|
9
|
+
"kubb mcp",
|
|
10
|
+
"kubb mcp --port 3001",
|
|
11
|
+
"# Then add to your MCP client config:",
|
|
12
|
+
"# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }"
|
|
13
|
+
],
|
|
14
|
+
options: {
|
|
15
|
+
port: {
|
|
16
|
+
type: "string",
|
|
17
|
+
short: "p",
|
|
18
|
+
description: "Port for HTTP MCP server (omit for stdio)",
|
|
19
|
+
hint: "number"
|
|
20
|
+
},
|
|
21
|
+
host: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "Hostname to bind to (HTTP mode only)",
|
|
24
|
+
default: "localhost"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async run({ values }) {
|
|
28
|
+
const { runMcp } = await import("./mcp-DNUw8nqb.js");
|
|
29
|
+
await runMcp({
|
|
30
|
+
version,
|
|
31
|
+
port: values.port,
|
|
32
|
+
host: values.host
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
//#endregion
|
|
37
|
+
export { command };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=mcp-C9RoU-Dg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-C9RoU-Dg.js","names":[],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'mcp',\n description:\n 'Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.',\n examples: [\n 'kubb mcp',\n 'kubb mcp --port 3001',\n '# Then add to your MCP client config:',\n '# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }',\n ],\n options: {\n port: {\n type: 'string',\n short: 'p',\n description: 'Port for HTTP MCP server (omit for stdio)',\n hint: 'number',\n },\n host: {\n type: 'string',\n description: 'Hostname to bind to (HTTP mode only)',\n default: 'localhost',\n },\n },\n async run({ values }) {\n const { runMcp } = await import('../runners/mcp.ts')\n\n await runMcp({\n version,\n port: values.port,\n host: values.host,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAU,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,MAAM;GACJ,MAAM;GACN,OAAO;GACP,aAAa;GACb,MAAM;GACP;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,WAAW,MAAM,OAAO;EAEhC,MAAM,OAAO;GACX;GACA,MAAM,OAAO;GACb,MAAM,OAAO;GACd,CAAC;;CAEL,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-ByKO4r7w.cjs");
|
|
2
2
|
const require_errors = require("./errors-CLCjoSg0.cjs");
|
|
3
|
-
const require_telemetry = require("./telemetry-
|
|
3
|
+
const require_telemetry = require("./telemetry-BLX0NzRk.cjs");
|
|
4
4
|
let node_util = require("node:util");
|
|
5
5
|
let node_process = require("node:process");
|
|
6
6
|
node_process = require_chunk.__toESM(node_process, 1);
|
|
7
7
|
//#region src/runners/mcp.ts
|
|
8
|
-
async function runMcp({ version }) {
|
|
8
|
+
async function runMcp({ version, port, host }) {
|
|
9
9
|
let mod;
|
|
10
10
|
try {
|
|
11
11
|
mod = await import("@kubb/mcp");
|
|
@@ -24,7 +24,10 @@ async function runMcp({ version }) {
|
|
|
24
24
|
try {
|
|
25
25
|
console.log("⏳ Starting MCP server...");
|
|
26
26
|
console.warn((0, node_util.styleText)("yellow", "This feature is still under development — use with caution"));
|
|
27
|
-
run(
|
|
27
|
+
run(void 0, {
|
|
28
|
+
port: port !== void 0 ? Number(port) : void 0,
|
|
29
|
+
host
|
|
30
|
+
});
|
|
28
31
|
await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
|
|
29
32
|
command: "mcp",
|
|
30
33
|
kubbVersion: version,
|
|
@@ -44,4 +47,4 @@ async function runMcp({ version }) {
|
|
|
44
47
|
//#endregion
|
|
45
48
|
exports.runMcp = runMcp;
|
|
46
49
|
|
|
47
|
-
//# sourceMappingURL=mcp-
|
|
50
|
+
//# sourceMappingURL=mcp-D1llTaRM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-D1llTaRM.cjs","names":["process","sendTelemetry","buildTelemetryEvent","getErrorMessage"],"sources":["../src/runners/mcp.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { getErrorMessage } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype McpOptions = {\n version: string\n port?: string\n host?: string\n}\n\nexport async function runMcp({ version, port, host }: McpOptions): Promise<void> {\n let mod: typeof McpModule\n try {\n mod = (await import('@kubb/mcp')) as typeof McpModule\n } catch (_e) {\n console.error(styleText('red', 'The @kubb/mcp package is not installed.'))\n console.error('')\n console.error('Install it with:')\n console.error(styleText('cyan', ' npm install @kubb/mcp'))\n console.error(styleText('cyan', ' # or'))\n console.error(styleText('cyan', ' pnpm install @kubb/mcp'))\n console.error('')\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(undefined, {\n port: port !== undefined ? Number(port) : undefined,\n host,\n })\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'mcp',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'mcp',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n console.error(getErrorMessage(error))\n }\n}\n"],"mappings":";;;;;;;AAYA,eAAsB,OAAO,EAAE,SAAS,MAAM,QAAmC;CAC/E,IAAI;CACJ,IAAI;EACF,MAAO,MAAM,OAAO;UACb,IAAI;EACX,QAAQ,OAAA,GAAA,UAAA,WAAgB,OAAO,0CAA0C,CAAC;EAC1E,QAAQ,MAAM,GAAG;EACjB,QAAQ,MAAM,mBAAmB;EACjC,QAAQ,OAAA,GAAA,UAAA,WAAgB,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,OAAA,GAAA,UAAA,WAAgB,QAAQ,SAAS,CAAC;EAC1C,QAAQ,OAAA,GAAA,UAAA,WAAgB,QAAQ,2BAA2B,CAAC;EAC5D,QAAQ,MAAM,GAAG;EACjB,aAAA,QAAQ,KAAK,EAAE;;CAGjB,MAAM,EAAE,QAAQ;CAChB,MAAM,UAAUA,aAAAA,QAAQ,QAAQ;CAChC,IAAI;EACF,QAAQ,IAAI,2BAA2B;EACvC,QAAQ,MAAA,GAAA,UAAA,WAAe,UAAU,6DAA6D,CAAC;EAC/F,IAAI,KAAA,GAAW;GACb,MAAM,SAAS,KAAA,IAAY,OAAO,KAAK,GAAG,KAAA;GAC1C;GACD,CAAC;EACF,MAAMC,kBAAAA,cACJC,kBAAAA,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;UACM,OAAO;EACd,MAAMD,kBAAAA,cACJC,kBAAAA,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;EACD,QAAQ,MAAMC,eAAAA,gBAAgB,MAAM,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "./chunk--u3MIqq1.js";
|
|
2
2
|
import { t as getErrorMessage } from "./errors-CjPmyZHy.js";
|
|
3
|
-
import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-
|
|
3
|
+
import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-juq4QBf7.js";
|
|
4
4
|
import { styleText } from "node:util";
|
|
5
5
|
import process from "node:process";
|
|
6
6
|
//#region src/runners/mcp.ts
|
|
7
|
-
async function runMcp({ version }) {
|
|
7
|
+
async function runMcp({ version, port, host }) {
|
|
8
8
|
let mod;
|
|
9
9
|
try {
|
|
10
10
|
mod = await import("@kubb/mcp");
|
|
@@ -23,7 +23,10 @@ async function runMcp({ version }) {
|
|
|
23
23
|
try {
|
|
24
24
|
console.log("⏳ Starting MCP server...");
|
|
25
25
|
console.warn(styleText("yellow", "This feature is still under development — use with caution"));
|
|
26
|
-
run(
|
|
26
|
+
run(void 0, {
|
|
27
|
+
port: port !== void 0 ? Number(port) : void 0,
|
|
28
|
+
host
|
|
29
|
+
});
|
|
27
30
|
await sendTelemetry(buildTelemetryEvent({
|
|
28
31
|
command: "mcp",
|
|
29
32
|
kubbVersion: version,
|
|
@@ -43,4 +46,4 @@ async function runMcp({ version }) {
|
|
|
43
46
|
//#endregion
|
|
44
47
|
export { runMcp };
|
|
45
48
|
|
|
46
|
-
//# sourceMappingURL=mcp-
|
|
49
|
+
//# sourceMappingURL=mcp-DNUw8nqb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-DNUw8nqb.js","names":[],"sources":["../src/runners/mcp.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { getErrorMessage } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype McpOptions = {\n version: string\n port?: string\n host?: string\n}\n\nexport async function runMcp({ version, port, host }: McpOptions): Promise<void> {\n let mod: typeof McpModule\n try {\n mod = (await import('@kubb/mcp')) as typeof McpModule\n } catch (_e) {\n console.error(styleText('red', 'The @kubb/mcp package is not installed.'))\n console.error('')\n console.error('Install it with:')\n console.error(styleText('cyan', ' npm install @kubb/mcp'))\n console.error(styleText('cyan', ' # or'))\n console.error(styleText('cyan', ' pnpm install @kubb/mcp'))\n console.error('')\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(undefined, {\n port: port !== undefined ? Number(port) : undefined,\n host,\n })\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'mcp',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'mcp',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n console.error(getErrorMessage(error))\n }\n}\n"],"mappings":";;;;;;AAYA,eAAsB,OAAO,EAAE,SAAS,MAAM,QAAmC;CAC/E,IAAI;CACJ,IAAI;EACF,MAAO,MAAM,OAAO;UACb,IAAI;EACX,QAAQ,MAAM,UAAU,OAAO,0CAA0C,CAAC;EAC1E,QAAQ,MAAM,GAAG;EACjB,QAAQ,MAAM,mBAAmB;EACjC,QAAQ,MAAM,UAAU,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,MAAM,UAAU,QAAQ,SAAS,CAAC;EAC1C,QAAQ,MAAM,UAAU,QAAQ,2BAA2B,CAAC;EAC5D,QAAQ,MAAM,GAAG;EACjB,QAAQ,KAAK,EAAE;;CAGjB,MAAM,EAAE,QAAQ;CAChB,MAAM,UAAU,QAAQ,QAAQ;CAChC,IAAI;EACF,QAAQ,IAAI,2BAA2B;EACvC,QAAQ,KAAK,UAAU,UAAU,6DAA6D,CAAC;EAC/F,IAAI,KAAA,GAAW;GACb,MAAM,SAAS,KAAA,IAAY,OAAO,KAAK,GAAG,KAAA;GAC1C;GACD,CAAC;EACF,MAAM,cACJ,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;UACM,OAAO;EACd,MAAM,cACJ,oBAAoB;GAClB,SAAS;GACT,aAAa;GACb;GACA,QAAQ;GACT,CAAC,CACH;EACD,QAAQ,MAAM,gBAAgB,MAAM,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require("./chunk-ByKO4r7w.cjs");
|
|
2
|
+
const require_define = require("./define-Bdn8j5VM.cjs");
|
|
3
|
+
const require_package = require("./package-iheSdfas.cjs");
|
|
4
|
+
//#region src/commands/mcp.ts
|
|
5
|
+
const command = require_define.defineCommand({
|
|
6
|
+
name: "mcp",
|
|
7
|
+
description: "Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.",
|
|
8
|
+
examples: [
|
|
9
|
+
"kubb mcp",
|
|
10
|
+
"kubb mcp --port 3001",
|
|
11
|
+
"# Then add to your MCP client config:",
|
|
12
|
+
"# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }"
|
|
13
|
+
],
|
|
14
|
+
options: {
|
|
15
|
+
port: {
|
|
16
|
+
type: "string",
|
|
17
|
+
short: "p",
|
|
18
|
+
description: "Port for HTTP MCP server (omit for stdio)",
|
|
19
|
+
hint: "number"
|
|
20
|
+
},
|
|
21
|
+
host: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "Hostname to bind to (HTTP mode only)",
|
|
24
|
+
default: "localhost"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async run({ values }) {
|
|
28
|
+
const { runMcp } = await Promise.resolve().then(() => require("./mcp-D1llTaRM.cjs"));
|
|
29
|
+
await runMcp({
|
|
30
|
+
version: require_package.version,
|
|
31
|
+
port: values.port,
|
|
32
|
+
host: values.host
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.command = command;
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=mcp-wpl6sYYR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-wpl6sYYR.cjs","names":["defineCommand"],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'mcp',\n description:\n 'Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.',\n examples: [\n 'kubb mcp',\n 'kubb mcp --port 3001',\n '# Then add to your MCP client config:',\n '# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }',\n ],\n options: {\n port: {\n type: 'string',\n short: 'p',\n description: 'Port for HTTP MCP server (omit for stdio)',\n hint: 'number',\n },\n host: {\n type: 'string',\n description: 'Hostname to bind to (HTTP mode only)',\n default: 'localhost',\n },\n },\n async run({ values }) {\n const { runMcp } = await import('../runners/mcp.ts')\n\n await runMcp({\n version,\n port: values.port,\n host: values.host,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAUA,eAAAA,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,MAAM;GACJ,MAAM;GACN,OAAO;GACP,aAAa;GACb,MAAM;GACP;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,WAAW,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,qBAAA,CAAA;EAEzB,MAAM,OAAO;GACX,SAAA,gBAAA;GACA,MAAM,OAAO;GACb,MAAM,OAAO;GACd,CAAC;;CAEL,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region package.json
|
|
2
|
-
var version = "5.0.0-beta.
|
|
2
|
+
var version = "5.0.0-beta.6";
|
|
3
3
|
//#endregion
|
|
4
4
|
Object.defineProperty(exports, "version", {
|
|
5
5
|
enumerable: true,
|
|
@@ -8,4 +8,4 @@ Object.defineProperty(exports, "version", {
|
|
|
8
8
|
}
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
//# sourceMappingURL=package-
|
|
11
|
+
//# sourceMappingURL=package-iheSdfas.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-iheSdfas.cjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-vLafMWCe.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-475fQKaX.cjs","names":[],"sources":["../../../internals/utils/src/shell.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\n\n/**\n * Tokenizes a shell command string, respecting single and double quotes.\n *\n * @example\n * tokenize('git commit -m \"initial commit\"')\n * // → ['git', 'commit', '-m', 'initial commit']\n */\nexport function tokenize(command: string): string[] {\n return (command.match(/[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g) ?? []).map((token) => token.replace(/^[\"']|[\"']$/g, ''))\n}\n\ntype SpawnOptions = {\n /**\n * Working directory for the child process.\n * @default process.cwd()\n */\n cwd?: string\n /**\n * Environment variables passed to the child process.\n * @default process.env\n */\n env?: NodeJS.ProcessEnv\n /**\n * When `true`, spawns a detached background process and resolves immediately.\n * The child is unref'd so the parent process can exit independently.\n * @default false\n */\n detached?: boolean\n}\n\n/**\n * Spawns `cmd` with `args` and returns a promise that settles when the child process finishes.\n *\n * Foreground mode (default) inherits the parent's stdio and rejects on non-zero exit or signal.\n * Detached mode spawns the child in its own process group, unref's it, and resolves immediately.\n *\n * @example\n * ```ts\n * await spawnAsync('pnpm', ['install'])\n * await spawnAsync('node', ['server.js'], { detached: true }) // fire-and-forget\n * ```\n */\nexport function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<void> {\n const { cwd = process.cwd(), env, detached = false } = options\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: detached ? 'ignore' : 'inherit',\n cwd,\n env,\n detached,\n })\n\n if (detached) {\n child.unref()\n resolve()\n return\n }\n\n child.on('close', (code, signal) => {\n if (code === 0) {\n resolve()\n } else if (signal !== null) {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" was terminated by signal ${signal}`))\n } else {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" exited with code ${code}`))\n }\n })\n child.on('error', reject)\n })\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,SAAS,SAA2B;
|
|
1
|
+
{"version":3,"file":"shell-475fQKaX.cjs","names":[],"sources":["../../../internals/utils/src/shell.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\n\n/**\n * Tokenizes a shell command string, respecting single and double quotes.\n *\n * @example\n * tokenize('git commit -m \"initial commit\"')\n * // → ['git', 'commit', '-m', 'initial commit']\n */\nexport function tokenize(command: string): string[] {\n return (command.match(/[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g) ?? []).map((token) => token.replace(/^[\"']|[\"']$/g, ''))\n}\n\ntype SpawnOptions = {\n /**\n * Working directory for the child process.\n * @default process.cwd()\n */\n cwd?: string\n /**\n * Environment variables passed to the child process.\n * @default process.env\n */\n env?: NodeJS.ProcessEnv\n /**\n * When `true`, spawns a detached background process and resolves immediately.\n * The child is unref'd so the parent process can exit independently.\n * @default false\n */\n detached?: boolean\n}\n\n/**\n * Spawns `cmd` with `args` and returns a promise that settles when the child process finishes.\n *\n * Foreground mode (default) inherits the parent's stdio and rejects on non-zero exit or signal.\n * Detached mode spawns the child in its own process group, unref's it, and resolves immediately.\n *\n * @example\n * ```ts\n * await spawnAsync('pnpm', ['install'])\n * await spawnAsync('node', ['server.js'], { detached: true }) // fire-and-forget\n * ```\n */\nexport function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<void> {\n const { cwd = process.cwd(), env, detached = false } = options\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: detached ? 'ignore' : 'inherit',\n cwd,\n env,\n detached,\n })\n\n if (detached) {\n child.unref()\n resolve()\n return\n }\n\n child.on('close', (code, signal) => {\n if (code === 0) {\n resolve()\n } else if (signal !== null) {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" was terminated by signal ${signal}`))\n } else {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" exited with code ${code}`))\n }\n })\n child.on('error', reject)\n })\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,SAAS,SAA2B;CAClD,QAAQ,QAAQ,MAAM,gCAAgC,IAAI,EAAE,EAAE,KAAK,UAAU,MAAM,QAAQ,gBAAgB,GAAG,CAAC;;;;;;;;;;;;;;AAkCjH,SAAgB,WAAW,KAAa,MAAgB,UAAwB,EAAE,EAAiB;CACjG,MAAM,EAAE,MAAM,QAAQ,KAAK,EAAE,KAAK,WAAW,UAAU;CAEvD,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,SAAA,GAAA,mBAAA,OAAc,KAAK,MAAM;GAC7B,OAAO,WAAW,WAAW;GAC7B;GACA;GACA;GACD,CAAC;EAEF,IAAI,UAAU;GACZ,MAAM,OAAO;GACb,SAAS;GACT;;EAGF,MAAM,GAAG,UAAU,MAAM,WAAW;GAClC,IAAI,SAAS,GACX,SAAS;QACJ,IAAI,WAAW,MACpB,uBAAO,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,6BAA6B,SAAS,CAAC;QAElF,uBAAO,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,qBAAqB,OAAO,CAAC;IAE1E;EACF,MAAM,GAAG,SAAS,OAAO;GACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-DLzN4fRo.js","names":[],"sources":["../../../internals/utils/src/shell.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\n\n/**\n * Tokenizes a shell command string, respecting single and double quotes.\n *\n * @example\n * tokenize('git commit -m \"initial commit\"')\n * // → ['git', 'commit', '-m', 'initial commit']\n */\nexport function tokenize(command: string): string[] {\n return (command.match(/[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g) ?? []).map((token) => token.replace(/^[\"']|[\"']$/g, ''))\n}\n\ntype SpawnOptions = {\n /**\n * Working directory for the child process.\n * @default process.cwd()\n */\n cwd?: string\n /**\n * Environment variables passed to the child process.\n * @default process.env\n */\n env?: NodeJS.ProcessEnv\n /**\n * When `true`, spawns a detached background process and resolves immediately.\n * The child is unref'd so the parent process can exit independently.\n * @default false\n */\n detached?: boolean\n}\n\n/**\n * Spawns `cmd` with `args` and returns a promise that settles when the child process finishes.\n *\n * Foreground mode (default) inherits the parent's stdio and rejects on non-zero exit or signal.\n * Detached mode spawns the child in its own process group, unref's it, and resolves immediately.\n *\n * @example\n * ```ts\n * await spawnAsync('pnpm', ['install'])\n * await spawnAsync('node', ['server.js'], { detached: true }) // fire-and-forget\n * ```\n */\nexport function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<void> {\n const { cwd = process.cwd(), env, detached = false } = options\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: detached ? 'ignore' : 'inherit',\n cwd,\n env,\n detached,\n })\n\n if (detached) {\n child.unref()\n resolve()\n return\n }\n\n child.on('close', (code, signal) => {\n if (code === 0) {\n resolve()\n } else if (signal !== null) {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" was terminated by signal ${signal}`))\n } else {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" exited with code ${code}`))\n }\n })\n child.on('error', reject)\n })\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,SAAS,SAA2B;
|
|
1
|
+
{"version":3,"file":"shell-DLzN4fRo.js","names":[],"sources":["../../../internals/utils/src/shell.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\n\n/**\n * Tokenizes a shell command string, respecting single and double quotes.\n *\n * @example\n * tokenize('git commit -m \"initial commit\"')\n * // → ['git', 'commit', '-m', 'initial commit']\n */\nexport function tokenize(command: string): string[] {\n return (command.match(/[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g) ?? []).map((token) => token.replace(/^[\"']|[\"']$/g, ''))\n}\n\ntype SpawnOptions = {\n /**\n * Working directory for the child process.\n * @default process.cwd()\n */\n cwd?: string\n /**\n * Environment variables passed to the child process.\n * @default process.env\n */\n env?: NodeJS.ProcessEnv\n /**\n * When `true`, spawns a detached background process and resolves immediately.\n * The child is unref'd so the parent process can exit independently.\n * @default false\n */\n detached?: boolean\n}\n\n/**\n * Spawns `cmd` with `args` and returns a promise that settles when the child process finishes.\n *\n * Foreground mode (default) inherits the parent's stdio and rejects on non-zero exit or signal.\n * Detached mode spawns the child in its own process group, unref's it, and resolves immediately.\n *\n * @example\n * ```ts\n * await spawnAsync('pnpm', ['install'])\n * await spawnAsync('node', ['server.js'], { detached: true }) // fire-and-forget\n * ```\n */\nexport function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<void> {\n const { cwd = process.cwd(), env, detached = false } = options\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: detached ? 'ignore' : 'inherit',\n cwd,\n env,\n detached,\n })\n\n if (detached) {\n child.unref()\n resolve()\n return\n }\n\n child.on('close', (code, signal) => {\n if (code === 0) {\n resolve()\n } else if (signal !== null) {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" was terminated by signal ${signal}`))\n } else {\n reject(new Error(`\"${cmd} ${args.join(' ')}\" exited with code ${code}`))\n }\n })\n child.on('error', reject)\n })\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,SAAS,SAA2B;CAClD,QAAQ,QAAQ,MAAM,gCAAgC,IAAI,EAAE,EAAE,KAAK,UAAU,MAAM,QAAQ,gBAAgB,GAAG,CAAC;;;;;;;;;;;;;;AAkCjH,SAAgB,WAAW,KAAa,MAAgB,UAAwB,EAAE,EAAiB;CACjG,MAAM,EAAE,MAAM,QAAQ,KAAK,EAAE,KAAK,WAAW,UAAU;CAEvD,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,KAAK,MAAM;GAC7B,OAAO,WAAW,WAAW;GAC7B;GACA;GACA;GACD,CAAC;EAEF,IAAI,UAAU;GACZ,MAAM,OAAO;GACb,SAAS;GACT;;EAGF,MAAM,GAAG,UAAU,MAAM,WAAW;GAClC,IAAI,SAAS,GACX,SAAS;QACJ,IAAI,WAAW,MACpB,uBAAO,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,6BAA6B,SAAS,CAAC;QAElF,uBAAO,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,qBAAqB,OAAO,CAAC;IAE1E;EACF,MAAM,GAAG,SAAS,OAAO;GACzB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-ByKO4r7w.cjs");
|
|
2
|
-
const require_constants = require("./constants-
|
|
2
|
+
const require_constants = require("./constants-Rcaqzyd-.cjs");
|
|
3
3
|
let node_crypto = require("node:crypto");
|
|
4
4
|
let node_dns = require("node:dns");
|
|
5
5
|
let node_os = require("node:os");
|
|
@@ -279,4 +279,4 @@ Object.defineProperty(exports, "sendTelemetry", {
|
|
|
279
279
|
}
|
|
280
280
|
});
|
|
281
281
|
|
|
282
|
-
//# sourceMappingURL=telemetry-
|
|
282
|
+
//# sourceMappingURL=telemetry-BLX0NzRk.cjs.map
|