@kubb/cli 5.14.5 → 5.15.0

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 (186) hide show
  1. package/bin/kubb.js +2 -1
  2. package/dist/{Telemetry-Dc79_cIA.js → Telemetry-B3edcFoB.js} +12 -86
  3. package/dist/Telemetry-B3edcFoB.js.map +1 -0
  4. package/dist/{Telemetry-Dc9DVxKQ.cjs → Telemetry-COWGqYmh.cjs} +14 -118
  5. package/dist/Telemetry-COWGqYmh.cjs.map +1 -0
  6. package/dist/{background-v5pDy3IJ.cjs → background-B24lIehn.cjs} +5 -6
  7. package/dist/{background-v5pDy3IJ.cjs.map → background-B24lIehn.cjs.map} +1 -1
  8. package/dist/{background-C877JFxE.js → background-D-7OGjvg.js} +1 -1
  9. package/dist/{background-3_KudPH-.js → background-_dKcGjM7.js} +5 -6
  10. package/dist/{background-3_KudPH-.js.map → background-_dKcGjM7.js.map} +1 -1
  11. package/dist/banner-BdTTDFkG.js +140 -0
  12. package/dist/banner-BdTTDFkG.js.map +1 -0
  13. package/dist/banner-wJFk-L-c.cjs +163 -0
  14. package/dist/banner-wJFk-L-c.cjs.map +1 -0
  15. package/dist/config-BL3HnFhb.js +1 -0
  16. package/dist/config-BWj9jBVj.cjs +62 -0
  17. package/dist/config-BWj9jBVj.cjs.map +1 -0
  18. package/dist/{config-CNqgDSu3.js → config-CQTxXvIG.js} +6 -52
  19. package/dist/config-CQTxXvIG.js.map +1 -0
  20. package/dist/{config-BG_Nr2CZ.cjs → config-CRrmj88c.cjs} +15 -62
  21. package/dist/config-CRrmj88c.cjs.map +1 -0
  22. package/dist/config-Uk3rbZfb.js +49 -0
  23. package/dist/config-Uk3rbZfb.js.map +1 -0
  24. package/dist/configFile-C0DIXNMD.js +993 -0
  25. package/dist/configFile-C0DIXNMD.js.map +1 -0
  26. package/dist/configFile-CoEpHdXG.cjs +1028 -0
  27. package/dist/configFile-CoEpHdXG.cjs.map +1 -0
  28. package/dist/{credentials-C8tjAhTo.js → credentials-B77iJx9H.js} +1 -1
  29. package/dist/{credentials-DDaKqtJn.cjs → credentials-DEsGwcGD.cjs} +3 -4
  30. package/dist/{credentials-DDaKqtJn.cjs.map → credentials-DEsGwcGD.cjs.map} +1 -1
  31. package/dist/{credentials-CZK6zPLv.js → credentials-osgjujE_.js} +3 -4
  32. package/dist/{credentials-CZK6zPLv.js.map → credentials-osgjujE_.js.map} +1 -1
  33. package/dist/env-C3xHRMez.js +1 -0
  34. package/dist/env-eu3XyKqJ.cjs +55 -0
  35. package/dist/env-eu3XyKqJ.cjs.map +1 -0
  36. package/dist/env-rv-VgSGN.js +34 -0
  37. package/dist/env-rv-VgSGN.js.map +1 -0
  38. package/dist/{errors-Cl69p_vI.cjs → errors-BponpdjN.cjs} +3 -4
  39. package/dist/{errors-Cl69p_vI.cjs.map → errors-BponpdjN.cjs.map} +1 -1
  40. package/dist/{errors-DmC83ALX.js → errors-wzqmMpMo.js} +3 -4
  41. package/dist/{errors-DmC83ALX.js.map → errors-wzqmMpMo.js.map} +1 -1
  42. package/dist/index.cjs +37 -2719
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.cts +0 -2
  45. package/dist/index.d.ts +0 -2
  46. package/dist/index.js +35 -2713
  47. package/dist/index.js.map +1 -1
  48. package/dist/installWithSpinner-DpnpxHq5.js +49 -0
  49. package/dist/installWithSpinner-DpnpxHq5.js.map +1 -0
  50. package/dist/installWithSpinner-ONGfIVUJ.cjs +56 -0
  51. package/dist/installWithSpinner-ONGfIVUJ.cjs.map +1 -0
  52. package/dist/{text-CEyJhBnh.js → intro-9PB8sE8z.js} +8 -52
  53. package/dist/intro-9PB8sE8z.js.map +1 -0
  54. package/dist/{text-CC2xdpGL.cjs → intro-YPaf1Imr.cjs} +12 -80
  55. package/dist/intro-YPaf1Imr.cjs.map +1 -0
  56. package/dist/isCIEnvironment-D6xtAAZ2.js +14 -0
  57. package/dist/isCIEnvironment-D6xtAAZ2.js.map +1 -0
  58. package/dist/isCIEnvironment-DiVOMI5Q.cjs +20 -0
  59. package/dist/isCIEnvironment-DiVOMI5Q.cjs.map +1 -0
  60. package/dist/mascot--q1xjKw1.js +63 -0
  61. package/dist/mascot--q1xjKw1.js.map +1 -0
  62. package/dist/mascot-JSA0j3Q_.cjs +80 -0
  63. package/dist/mascot-JSA0j3Q_.cjs.map +1 -0
  64. package/dist/mcp-CYPOFKnP.cjs +20 -0
  65. package/dist/mcp-CYPOFKnP.cjs.map +1 -0
  66. package/dist/mcp-CxeZR5vb.js +21 -0
  67. package/dist/mcp-CxeZR5vb.js.map +1 -0
  68. package/dist/package-D3Yss9Bb.js +5 -0
  69. package/dist/package-D3Yss9Bb.js.map +1 -0
  70. package/dist/package-aX0q9SZr.cjs +10 -0
  71. package/dist/package-aX0q9SZr.cjs.map +1 -0
  72. package/dist/{registry-ov1RYcD4.js → registry-B3eYk4LN.js} +7 -67
  73. package/dist/registry-B3eYk4LN.js.map +1 -0
  74. package/dist/{registry-BInbtBm7.cjs → registry-YE1pFWL-.cjs} +4 -82
  75. package/dist/registry-YE1pFWL-.cjs.map +1 -0
  76. package/dist/{reporters-DQz--AdE.cjs → reporters-2cgjvXwR.cjs} +32 -40
  77. package/dist/{reporters-DQz--AdE.cjs.map → reporters-2cgjvXwR.cjs.map} +1 -1
  78. package/dist/{reporters-BtD41K-C.js → reporters-BM430HdQ.js} +19 -27
  79. package/dist/{reporters-BtD41K-C.js.map → reporters-BM430HdQ.js.map} +1 -1
  80. package/dist/{rolldown-runtime-CPE0t6oh.cjs → rolldown-runtime-C3-Zg-KD.cjs} +1 -2
  81. package/dist/{rolldown-runtime-CRm0XQPb.js → rolldown-runtime-xo6NMXYd.js} +1 -2
  82. package/dist/run-1H9TGT8v.js +77 -0
  83. package/dist/run-1H9TGT8v.js.map +1 -0
  84. package/dist/run-B4zvF9WY.cjs +233 -0
  85. package/dist/run-B4zvF9WY.cjs.map +1 -0
  86. package/dist/run-BYP_t9dR.cjs +324 -0
  87. package/dist/run-BYP_t9dR.cjs.map +1 -0
  88. package/dist/{run-1oXPIkli.cjs → run-Bb19PlwV.cjs} +44 -37
  89. package/dist/run-Bb19PlwV.cjs.map +1 -0
  90. package/dist/{run-B03V0Poj.cjs → run-BoO7H8RA.cjs} +49 -41
  91. package/dist/run-BoO7H8RA.cjs.map +1 -0
  92. package/dist/run-BrM7-NSV.js +181 -0
  93. package/dist/run-BrM7-NSV.js.map +1 -0
  94. package/dist/{run-UsAMlUyy.js → run-C0KI-NE3.js} +9 -9
  95. package/dist/{run-UsAMlUyy.js.map → run-C0KI-NE3.js.map} +1 -1
  96. package/dist/run-CCLPt4hr.js +1 -0
  97. package/dist/run-CCsdLz3X.js +385 -0
  98. package/dist/run-CCsdLz3X.js.map +1 -0
  99. package/dist/{run-YMSJnvYl.js → run-CbX6tpqB.js} +31 -23
  100. package/dist/run-CbX6tpqB.js.map +1 -0
  101. package/dist/run-CrM4jsix.cjs +80 -0
  102. package/dist/run-CrM4jsix.cjs.map +1 -0
  103. package/dist/run-CvFakE3B.cjs +185 -0
  104. package/dist/run-CvFakE3B.cjs.map +1 -0
  105. package/dist/run-D-nn9-Wq.js +319 -0
  106. package/dist/run-D-nn9-Wq.js.map +1 -0
  107. package/dist/{run-cBSr2F1q.cjs → run-D5Z6nfzK.cjs} +5 -6
  108. package/dist/{run-cBSr2F1q.cjs.map → run-D5Z6nfzK.cjs.map} +1 -1
  109. package/dist/{run-BUzdEUaE.cjs → run-DCqmf5W1.cjs} +10 -10
  110. package/dist/{run-BUzdEUaE.cjs.map → run-DCqmf5W1.cjs.map} +1 -1
  111. package/dist/{run-BK-A9JDf.js → run-DFXhBS64.js} +5 -6
  112. package/dist/{run-BK-A9JDf.js.map → run-DFXhBS64.js.map} +1 -1
  113. package/dist/run-DgGZOC_x.cjs +389 -0
  114. package/dist/run-DgGZOC_x.cjs.map +1 -0
  115. package/dist/{run-DDwdeHgU.js → run-KqdudiWQ.js} +26 -20
  116. package/dist/run-KqdudiWQ.js.map +1 -0
  117. package/dist/run-RN_31Q4u.js +228 -0
  118. package/dist/run-RN_31Q4u.js.map +1 -0
  119. package/dist/shared-C0EtrdUm.cjs +123 -0
  120. package/dist/shared-C0EtrdUm.cjs.map +1 -0
  121. package/dist/shared-Ct9stKpp.js +94 -0
  122. package/dist/shared-Ct9stKpp.js.map +1 -0
  123. package/dist/{snapshot-BrwynBfC.cjs → snapshot-D7Ytw8S0.cjs} +13 -14
  124. package/dist/{snapshot-BrwynBfC.cjs.map → snapshot-D7Ytw8S0.cjs.map} +1 -1
  125. package/dist/{snapshot-D2E7nhEf.js → snapshot-n7dJGCWv.js} +10 -11
  126. package/dist/{snapshot-D2E7nhEf.js.map → snapshot-n7dJGCWv.js.map} +1 -1
  127. package/dist/spinner-BZaln7O8.js +160 -0
  128. package/dist/spinner-BZaln7O8.js.map +1 -0
  129. package/dist/spinner-CfB0sIPy.cjs +208 -0
  130. package/dist/spinner-CfB0sIPy.cjs.map +1 -0
  131. package/dist/{status-CxzhvjKs.cjs → status-Bc0_4T41.cjs} +7 -8
  132. package/dist/{status-CxzhvjKs.cjs.map → status-Bc0_4T41.cjs.map} +1 -1
  133. package/dist/{status-BHIOMCM0.js → status-DxSkp1cH.js} +6 -7
  134. package/dist/{status-BHIOMCM0.js.map → status-DxSkp1cH.js.map} +1 -1
  135. package/dist/studio-BpYwgFb0.cjs +218 -0
  136. package/dist/studio-BpYwgFb0.cjs.map +1 -0
  137. package/dist/studio-mw6HaPkr.js +215 -0
  138. package/dist/studio-mw6HaPkr.js.map +1 -0
  139. package/dist/studioWorker.js +4 -5
  140. package/dist/{summary-B219y888.js → summary-CbmQKA8l.js} +5 -6
  141. package/dist/{summary-B219y888.js.map → summary-CbmQKA8l.js.map} +1 -1
  142. package/dist/{summary-BOYsqub3.cjs → summary-Clvl5Hxs.cjs} +7 -8
  143. package/dist/{summary-BOYsqub3.cjs.map → summary-Clvl5Hxs.cjs.map} +1 -1
  144. package/dist/table-BlRe9YTZ.cjs +15 -0
  145. package/dist/table-BlRe9YTZ.cjs.map +1 -0
  146. package/dist/table-CR7iZJGo.js +10 -0
  147. package/dist/table-CR7iZJGo.js.map +1 -0
  148. package/dist/text-BmiI4s6N.js +13 -0
  149. package/dist/text-BmiI4s6N.js.map +1 -0
  150. package/dist/text-Ep3AulAS.cjs +24 -0
  151. package/dist/text-Ep3AulAS.cjs.map +1 -0
  152. package/dist/time-3BKoci3G.cjs +82 -0
  153. package/dist/time-3BKoci3G.cjs.map +1 -0
  154. package/dist/time-C-wU7VhC.js +65 -0
  155. package/dist/time-C-wU7VhC.js.map +1 -0
  156. package/dist/utils-BdibacYq.js +244 -0
  157. package/dist/utils-BdibacYq.js.map +1 -0
  158. package/dist/utils-CO89mxRU.cjs +290 -0
  159. package/dist/utils-CO89mxRU.cjs.map +1 -0
  160. package/dist/utils-CbJ6hS_t.js +222 -0
  161. package/dist/utils-CbJ6hS_t.js.map +1 -0
  162. package/dist/utils-CcARPB45.cjs +286 -0
  163. package/dist/utils-CcARPB45.cjs.map +1 -0
  164. package/dist/validate-8ZcWXfMt.js +28 -0
  165. package/dist/validate-8ZcWXfMt.js.map +1 -0
  166. package/dist/validate-CMSeDpGT.cjs +27 -0
  167. package/dist/validate-CMSeDpGT.cjs.map +1 -0
  168. package/package.json +7 -7
  169. package/dist/Telemetry-Dc79_cIA.js.map +0 -1
  170. package/dist/Telemetry-Dc9DVxKQ.cjs.map +0 -1
  171. package/dist/config-BG_Nr2CZ.cjs.map +0 -1
  172. package/dist/config-CNqgDSu3.js.map +0 -1
  173. package/dist/config-DWDpFSn1.js +0 -1
  174. package/dist/registry-BInbtBm7.cjs.map +0 -1
  175. package/dist/registry-ov1RYcD4.js.map +0 -1
  176. package/dist/run-1oXPIkli.cjs.map +0 -1
  177. package/dist/run-B03V0Poj.cjs.map +0 -1
  178. package/dist/run-DDwdeHgU.js.map +0 -1
  179. package/dist/run-YMSJnvYl.js.map +0 -1
  180. package/dist/run-v5aW1jjQ.js +0 -1
  181. package/dist/text-CC2xdpGL.cjs.map +0 -1
  182. package/dist/text-CEyJhBnh.js.map +0 -1
  183. package/dist/utils-8E1nF4C1.cjs +0 -645
  184. package/dist/utils-8E1nF4C1.cjs.map +0 -1
  185. package/dist/utils-D8VN40bN.js +0 -536
  186. package/dist/utils-D8VN40bN.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ import { a as ConfigEditOperation, i as readImports, n as editConfigFile, o as extensionKinds, t as editConfig } from "./configFile-C0DIXNMD.js";
3
+ import { t as getErrorMessage } from "./errors-wzqmMpMo.js";
4
+ import { n as withSpinner, o as read } from "./spinner-BZaln7O8.js";
5
+ import { l as logStep, n as logIntro, o as logBlock, s as logError, t as isInteractiveRun, u as logWarn } from "./intro-9PB8sE8z.js";
6
+ import { o as yesArg, t as configArg } from "./shared-Ct9stKpp.js";
7
+ import { r as BUNDLED_PACKAGES, t as findConfigFile } from "./config-CQTxXvIG.js";
8
+ import { t as logCommandSummary } from "./summary-CbmQKA8l.js";
9
+ import { a as installSpec, c as toRegistryId, i as incompatibility, l as toShortId, n as closestIds, r as fetchRegistryIndex, s as registryUrl } from "./registry-B3eYk4LN.js";
10
+ import { n as detectPackageManager } from "./utils-CbJ6hS_t.js";
11
+ import { t as installWithSpinner } from "./installWithSpinner-DpnpxHq5.js";
12
+ import { styleText } from "node:util";
13
+ import { define } from "gunshi";
14
+ import process from "node:process";
15
+ import path from "node:path";
16
+ import * as clack from "@clack/prompts";
17
+ import { Diagnostics, readInstalledPackages } from "@kubb/core";
18
+ // src/runners/add/run.ts
19
+ /** The import and the `defineConfig` property to merge into `kubb.config.ts` by hand. */
20
+ function toSnippet({ artifact, manifest }) {
21
+ const call = `${manifest.export}()`;
22
+ const property = {
23
+ plugin: `plugins: [..., ${call}],`,
24
+ adapter: `adapter: ${call},`,
25
+ parser: `parsers: [..., ${call}],`
26
+ };
27
+ return [
28
+ `import { ${manifest.export} } from '${artifact.package}'`,
29
+ "",
30
+ property[manifest.kind]
31
+ ].join("\n");
32
+ }
33
+ /** The `add-plugin` edits for `details`, and the manifests the edits read their export names from. */
34
+ function toConfigEdits(details) {
35
+ return {
36
+ edits: details.map(({ artifact, manifest }) => ({
37
+ operation: ConfigEditOperation.ADD_PLUGIN,
38
+ ...manifest.kind === extensionKinds.parser ? { kind: extensionKinds.parser } : {},
39
+ plugin: artifact.package
40
+ })),
41
+ extensions: new Map(details.map(({ artifact, manifest }) => [artifact.package, {
42
+ package: artifact.package,
43
+ version: artifact.version,
44
+ manifest
45
+ }]))
46
+ };
47
+ }
48
+ /** The lines adding `details` would put in the config `source`, trimmed, or why it could not add them. */
49
+ function previewConfig({ details, source }) {
50
+ const result = editConfig({
51
+ source,
52
+ ...toConfigEdits(details)
53
+ });
54
+ const failed = result.outcomes.find((outcome) => !outcome.applied);
55
+ if (failed) return { reason: failed.reason ?? "the config file was not changed" };
56
+ const remaining = source.split("\n");
57
+ return {
58
+ lines: result.source.split("\n").filter((line) => {
59
+ const index = remaining.indexOf(line);
60
+ if (index !== -1) remaining.splice(index, 1);
61
+ return index === -1;
62
+ }).map((line) => line.trim()),
63
+ source: result.source
64
+ };
65
+ }
66
+ async function selectExtension({ entries, versions, registry }) {
67
+ if (!entries.length) throw new Diagnostics.Error({
68
+ code: Diagnostics.code.unknown,
69
+ severity: "error",
70
+ message: `The registry at ${registry} lists no extensions.`,
71
+ help: "Check that `KUBB_REGISTRY` points at a Kubb registry, or unset it to use https://kubb.dev/registry."
72
+ });
73
+ const searchText = new Map(entries.map((entry) => [entry.id, `${entry.id} ${entry.manifest.displayName} ${entry.manifest.description}`.toLowerCase()]));
74
+ const options = entries.toSorted((a, b) => a.id.localeCompare(b.id)).map((entry) => {
75
+ const installed = versions.has(entry.artifact.package);
76
+ return {
77
+ value: entry.id,
78
+ label: toShortId(entry.id),
79
+ hint: installed ? "installed" : summarize(entry.manifest.description),
80
+ disabled: installed
81
+ };
82
+ });
83
+ const id = await clack.autocomplete({
84
+ message: `Add an extension · ${entries.length} in the registry`,
85
+ placeholder: "Search",
86
+ options,
87
+ filter: (search, option) => searchText.get(option.value)?.includes(search.toLowerCase()) ?? false
88
+ });
89
+ return clack.isCancel(id) ? void 0 : id;
90
+ }
91
+ /** Asks whether to also add the required plugins the config lacks. `--yes` adds them. */
92
+ async function confirmDependencies({ entry, missing, yes }) {
93
+ if (!missing.length || yes) return true;
94
+ const names = missing.map((dependency) => dependency.manifest.name).join(", ");
95
+ const answer = await clack.select({
96
+ message: `${entry.manifest.name} needs ${names}. Add ${names} as well?`,
97
+ options: [{
98
+ value: true,
99
+ label: `Yes, add ${missing.length === 1 ? "both" : "all"}`,
100
+ hint: "recommended"
101
+ }, {
102
+ value: false,
103
+ label: `Only ${entry.manifest.name}`,
104
+ hint: "generate fails until you add it"
105
+ }],
106
+ initialValue: true
107
+ });
108
+ return clack.isCancel(answer) ? void 0 : answer;
109
+ }
110
+ /** The first sentence of a registry description, cut to one terminal line. */
111
+ function summarize(description, max = 64) {
112
+ const sentence = description.split(/\.\s/)[0].replace(/\.$/, "");
113
+ return sentence.length > max ? `${sentence.slice(0, max - 1).trimEnd()}…` : sentence;
114
+ }
115
+ /**
116
+ * Installs an extension from the Kubb registry at its reviewed version and, for a plugin or a parser,
117
+ * adds it to `kubb.config.ts`, offering to add the plugins it needs as well. An adapter is never
118
+ * written: the command prints the snippet to swap it in by hand. Without an id, asks which one.
119
+ * Previews the packages and config lines before asking. Refuses when the running Kubb or Node.js
120
+ * version is outside its compatibility.
121
+ */
122
+ async function run({ id: input, configPath, yes, install }) {
123
+ const cwd = process.cwd();
124
+ const hrStart = process.hrtime();
125
+ const summary = (title, status, lines) => logCommandSummary({
126
+ title,
127
+ status,
128
+ hrStart,
129
+ block: true,
130
+ lines
131
+ });
132
+ const installedPackages = [];
133
+ const configured = [];
134
+ logIntro({ title: isInteractiveRun({ yes }) ? void 0 : styleText("bgCyan", styleText("black", " Kubb Add ")) });
135
+ try {
136
+ const registry = registryUrl();
137
+ if (!input && yes) throw new Diagnostics.Error({
138
+ code: Diagnostics.code.unknown,
139
+ severity: "error",
140
+ message: "Pass a registry id, such as plugin-zod, when using --yes.",
141
+ help: "Run `kubb add plugin-zod --yes`, or drop `--yes` to pick from a list."
142
+ });
143
+ const inputId = input ? toRegistryId(input) : void 0;
144
+ const foundConfig = configPath ? path.resolve(configPath) : findConfigFile(cwd);
145
+ const [entries, installed, configSource] = await withSpinner({
146
+ message: "Reading the registry",
147
+ promise: Promise.all([
148
+ fetchRegistryIndex({ registry }),
149
+ readInstalledPackages({ root: cwd }),
150
+ foundConfig ? read(foundConfig).catch(() => void 0) : void 0
151
+ ])
152
+ });
153
+ const versions = new Map(installed.map((item) => [item.package, item.version]));
154
+ const id = inputId ?? await selectExtension({
155
+ entries,
156
+ versions,
157
+ registry
158
+ });
159
+ if (!id) {
160
+ summary("Add canceled", "canceled", [" No changes made"]);
161
+ return;
162
+ }
163
+ const entry = entries.find((candidate) => candidate.id === id);
164
+ if (!entry) {
165
+ const suggestions = closestIds({
166
+ input: id,
167
+ ids: entries.map((entry) => entry.id)
168
+ }).map(toShortId);
169
+ summary(`No extension named ${input ?? id}`, "failed", [...suggestions.map((suggestion) => ` kubb add ${suggestion}`), " Browse all kubb.dev/extensions"]);
170
+ process.exitCode = 1;
171
+ return;
172
+ }
173
+ const { artifact, manifest } = entry;
174
+ const kind = manifest.kind.charAt(0).toUpperCase() + manifest.kind.slice(1);
175
+ const problem = incompatibility(manifest);
176
+ if (problem) throw new Diagnostics.Error({
177
+ code: Diagnostics.code.incompatibleExtension,
178
+ severity: "error",
179
+ message: problem,
180
+ help: "Upgrade Kubb or Node.js to a version the extension supports."
181
+ });
182
+ const configFile = manifest.kind === extensionKinds.adapter ? void 0 : foundConfig;
183
+ if (manifest.kind !== extensionKinds.adapter && !configFile) throw new Diagnostics.Error({
184
+ code: Diagnostics.code.unknown,
185
+ severity: "error",
186
+ message: "No kubb.config.ts found. Run `kubb init` first, or pass --config.",
187
+ help: "Run `kubb init` to create a config, or pass its path with `--config`."
188
+ });
189
+ const configName = configFile ? path.relative(cwd, configFile) || configFile : void 0;
190
+ const byName = new Map(entries.map((candidate) => [candidate.manifest.name, candidate]));
191
+ const inConfig = (name) => {
192
+ const dependency = byName.get(name);
193
+ return dependency ? !!configSource?.includes(`${dependency.manifest.export}(`) : installed.some((item) => item.manifest?.name === name);
194
+ };
195
+ const dependencies = manifest.dependencies ?? [];
196
+ const missing = configFile ? dependencies.filter((name) => !inConfig(name)).flatMap((name) => byName.get(name) ?? []) : [];
197
+ const withDependencies = await confirmDependencies({
198
+ entry,
199
+ missing,
200
+ yes
201
+ });
202
+ if (withDependencies === void 0) {
203
+ summary("Add canceled", "canceled", [` ${kind} ${manifest.name}`, " No changes made"]);
204
+ return;
205
+ }
206
+ const targets = [...withDependencies ? missing : [], entry];
207
+ const dependencyStatus = (name) => {
208
+ if (inConfig(name)) return `${name} ${styleText("green", "✓ installed")}`;
209
+ return targets.some((target) => target.manifest.name === name) ? `${name} ${styleText("cyan", "+ adding")}` : `${name} ${styleText("yellow", "missing")}`;
210
+ };
211
+ const preview = configFile && configSource !== void 0 ? previewConfig({
212
+ details: targets,
213
+ source: configSource
214
+ }) : void 0;
215
+ const before = readImports(configSource ?? "");
216
+ const added = preview && "lines" in preview ? readImports(preview.source).filter((name) => !before.includes(name)) : [];
217
+ const bundled = BUNDLED_PACKAGES.filter((name) => added.includes(name) && !versions.has(name) && !targets.some((target) => target.artifact.package === name));
218
+ const kubbVersion = versions.get("kubb");
219
+ const specs = [...targets.filter((target) => target === entry || !versions.has(target.artifact.package)).map((target) => installSpec(target.artifact)), ...bundled.map((name) => kubbVersion ? `${name}@${kubbVersion}` : name)];
220
+ logStep(`${kind} ${styleText("cyan", manifest.name)} v${artifact.version} · ${summarize(manifest.description)}`);
221
+ logBlock([
222
+ ...dependencies.length ? [`Needs ${dependencies.map(dependencyStatus).join(" ")}`] : [],
223
+ install ? `Installs ${specs.join(" ")}` : "Installs nothing (--no-install)",
224
+ ...configName ? [`Config ${configName}`] : [`Config prints the ${manifest.kind} snippet to add`],
225
+ ...preview && "lines" in preview ? preview.lines.map((line) => styleText("green", ` + ${line}`)) : [],
226
+ ...preview && "reason" in preview ? [styleText("yellow", ` cannot edit it: ${preview.reason}`)] : []
227
+ ]);
228
+ const confirmed = yes || await clack.confirm({
229
+ message: "Add it?",
230
+ initialValue: true
231
+ });
232
+ if (clack.isCancel(confirmed) || !confirmed) {
233
+ summary("Add canceled", "canceled", [` ${kind} ${manifest.name}`, " No changes made"]);
234
+ return;
235
+ }
236
+ const packageManager = detectPackageManager(cwd);
237
+ const packages = () => install ? `${installedPackages.length} installed with ${packageManager.name}` : "installation skipped (--no-install)";
238
+ if (install) {
239
+ const names = [...targets.filter((target) => specs.includes(installSpec(target.artifact))).map((target) => target.artifact.package), ...bundled];
240
+ await installWithSpinner({
241
+ packages: specs,
242
+ names: names.join(", "),
243
+ packageManager,
244
+ cwd
245
+ });
246
+ installedPackages.push(...names);
247
+ }
248
+ const unconfigured = configFile ? [] : [entry];
249
+ if (configFile) for (const target of targets) try {
250
+ const { outcomes, changed } = await editConfigFile({
251
+ filePath: configFile,
252
+ ...toConfigEdits([target])
253
+ });
254
+ if (!outcomes[0]?.applied) throw new Error(outcomes[0]?.reason ?? "the config file was not changed");
255
+ if (changed) configured.push(target);
256
+ logStep(`${target.manifest.export}() configured in ${configName}`);
257
+ } catch (error) {
258
+ logWarn(`Could not edit ${configName}: ${getErrorMessage(error)}`);
259
+ unconfigured.push(target);
260
+ }
261
+ const manual = unconfigured.length > 0;
262
+ if (manual && manifest.kind !== extensionKinds.adapter) process.exitCode = 1;
263
+ if (manual) logBlock([
264
+ "Add the import to your Kubb config and merge the property into its defineConfig call:",
265
+ "",
266
+ ...unconfigured.map((target) => toSnippet(target))
267
+ ]);
268
+ const dependenciesMissing = !withDependencies && missing.length > 0;
269
+ summary(manual ? `${kind} needs configuration` : dependenciesMissing ? "Plugin configured; dependencies missing" : configured.length ? install ? `${kind} ready` : `${kind} configured` : `${kind} already configured`, manual || dependenciesMissing ? "warning" : "success", [
270
+ ` Packages ${packages()}`,
271
+ ...configured.map((target) => styleText("green", ` + ${target.manifest.export}()`)),
272
+ "",
273
+ ...!install ? [`Install ${specs.join(" ")} to use it.`] : [],
274
+ ...dependenciesMissing ? [`Missing plugins ${missing.map((target) => target.manifest.name).join(", ")}`] : [],
275
+ manual ? "Add the snippet above, then run kubb generate." : "Next kubb generate",
276
+ `Options kubb.dev/extensions/${entry.id}`
277
+ ]);
278
+ } catch (error) {
279
+ logError(getErrorMessage(error));
280
+ summary("Add failed", "failed", installedPackages.length ? [` Packages ${installedPackages.join(", ")} installed`] : [" No changes made"]);
281
+ process.exitCode = 1;
282
+ }
283
+ }
284
+ const command = define({
285
+ name: "add",
286
+ description: "Find and install plugins, adapters, and parsers from the Kubb registry.",
287
+ examples: [
288
+ "kubb add",
289
+ "kubb add plugin-zod",
290
+ "kubb add kubb-labs/plugin-react-query",
291
+ "kubb add acme/plugin-x --yes",
292
+ "kubb add plugin-zod --no-install"
293
+ ].join("\n"),
294
+ toKebab: true,
295
+ args: {
296
+ id: {
297
+ type: "positional",
298
+ description: "Registry id: owner/slug, or a slug for an official extension. Asked for when omitted",
299
+ required: false
300
+ },
301
+ ...configArg,
302
+ ...yesArg,
303
+ install: {
304
+ type: "boolean",
305
+ description: "Install the package. Pass --no-install to only edit the config",
306
+ negatable: true,
307
+ default: true
308
+ }
309
+ },
310
+ run: ({ values }) => run({
311
+ id: values.id,
312
+ configPath: values.config,
313
+ yes: values.yes,
314
+ install: values.install
315
+ })
316
+ });
317
+ export { command, run, summarize };
318
+
319
+ //# sourceMappingURL=run-D-nn9-Wq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-D-nn9-Wq.js","names":[],"sources":["../src/runners/add/run.ts"],"sourcesContent":["import path from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { define } from 'gunshi'\nimport { BUNDLED_PACKAGES, ConfigEditOperation, extensionKinds, editConfig, editConfigFile, findConfigFile, readImports } from '@internals/shared'\nimport { getErrorMessage, read } from '@internals/utils'\nimport { Diagnostics, type ExtensionManifest, readInstalledPackages, type RegistryDetail, type RegistryEntry } from '@kubb/core'\nimport { configArg, yesArg } from '../../commands/shared.ts'\nimport { isInteractiveRun, logIntro } from '../../ui/intro.ts'\nimport { logBlock, logError, logStep, logWarn } from '../../ui/log.ts'\nimport { withSpinner } from '../../ui/spinner.ts'\nimport { logCommandSummary } from '../../ui/summary.ts'\nimport { closestIds, fetchRegistryIndex, incompatibility, installSpec, registryUrl, toRegistryId, toShortId } from '../../utils/registry.ts'\nimport { detectPackageManager } from '../init/utils.ts'\nimport { installWithSpinner } from '../installWithSpinner.ts'\n\nexport type AddOptions = {\n /**\n * `owner/slug`, or a bare `slug` for an official extension. Asked for when omitted.\n */\n id?: string\n configPath?: string\n yes: boolean\n install: boolean\n}\n\ntype ConfigTarget = Pick<RegistryDetail, 'artifact' | 'manifest'>\n\n/** The import and the `defineConfig` property to merge into `kubb.config.ts` by hand. */\nfunction toSnippet({ artifact, manifest }: ConfigTarget): string {\n const call = `${manifest.export}()`\n const property: Record<ExtensionManifest['kind'], string> = {\n plugin: `plugins: [..., ${call}],`,\n adapter: `adapter: ${call},`,\n parser: `parsers: [..., ${call}],`,\n }\n return [`import { ${manifest.export} } from '${artifact.package}'`, '', property[manifest.kind]].join('\\n')\n}\n\n/** The `add-plugin` edits for `details`, and the manifests the edits read their export names from. */\nfunction toConfigEdits(details: Array<ConfigTarget>) {\n return {\n edits: details.map(({ artifact, manifest }) => ({\n operation: ConfigEditOperation.ADD_PLUGIN,\n ...(manifest.kind === extensionKinds.parser ? { kind: extensionKinds.parser } : {}),\n plugin: artifact.package,\n })),\n extensions: new Map(details.map(({ artifact, manifest }) => [artifact.package, { package: artifact.package, version: artifact.version, manifest }])),\n }\n}\n\n/** The lines adding `details` would put in the config `source`, trimmed, or why it could not add them. */\nfunction previewConfig({ details, source }: { details: Array<ConfigTarget>; source: string }): { lines: Array<string>; source: string } | { reason: string } {\n const result = editConfig({ source, ...toConfigEdits(details) })\n const failed = result.outcomes.find((outcome) => !outcome.applied)\n if (failed) return { reason: failed.reason ?? 'the config file was not changed' }\n const remaining = source.split('\\n')\n const lines = result.source.split('\\n').filter((line) => {\n const index = remaining.indexOf(line)\n if (index !== -1) remaining.splice(index, 1)\n return index === -1\n })\n return { lines: lines.map((line) => line.trim()), source: result.source }\n}\n\nasync function selectExtension({\n entries,\n versions,\n registry,\n}: {\n entries: Array<RegistryEntry>\n versions: Map<string, unknown>\n registry: string\n}): Promise<string | undefined> {\n if (!entries.length)\n throw new Diagnostics.Error({\n code: Diagnostics.code.unknown,\n severity: 'error',\n message: `The registry at ${registry} lists no extensions.`,\n help: 'Check that `KUBB_REGISTRY` points at a Kubb registry, or unset it to use https://kubb.dev/registry.',\n })\n\n // Filters in memory, so typing never waits on the network.\n const searchText = new Map(entries.map((entry) => [entry.id, `${entry.id} ${entry.manifest.displayName} ${entry.manifest.description}`.toLowerCase()]))\n const options = entries\n .toSorted((a, b) => a.id.localeCompare(b.id))\n .map((entry) => {\n const installed = versions.has(entry.artifact.package)\n return { value: entry.id, label: toShortId(entry.id), hint: installed ? 'installed' : summarize(entry.manifest.description), disabled: installed }\n })\n\n const id = await clack.autocomplete({\n message: `Add an extension · ${entries.length} in the registry`,\n placeholder: 'Search',\n options,\n filter: (search, option) => searchText.get(option.value)?.includes(search.toLowerCase()) ?? false,\n })\n return clack.isCancel(id) ? undefined : id\n}\n\n/** Asks whether to also add the required plugins the config lacks. `--yes` adds them. */\nasync function confirmDependencies({\n entry,\n missing,\n yes,\n}: {\n entry: RegistryEntry\n missing: Array<RegistryEntry>\n yes: boolean\n}): Promise<boolean | undefined> {\n if (!missing.length || yes) return true\n const names = missing.map((dependency) => dependency.manifest.name).join(', ')\n const answer = await clack.select({\n message: `${entry.manifest.name} needs ${names}. Add ${names} as well?`,\n options: [\n { value: true, label: `Yes, add ${missing.length === 1 ? 'both' : 'all'}`, hint: 'recommended' },\n { value: false, label: `Only ${entry.manifest.name}`, hint: 'generate fails until you add it' },\n ],\n initialValue: true,\n })\n return clack.isCancel(answer) ? undefined : answer\n}\n\n/** The first sentence of a registry description, cut to one terminal line. */\nexport function summarize(description: string, max = 64): string {\n const sentence = description.split(/\\.\\s/)[0]!.replace(/\\.$/, '')\n return sentence.length > max ? `${sentence.slice(0, max - 1).trimEnd()}…` : sentence\n}\n\n/**\n * Installs an extension from the Kubb registry at its reviewed version and, for a plugin or a parser,\n * adds it to `kubb.config.ts`, offering to add the plugins it needs as well. An adapter is never\n * written: the command prints the snippet to swap it in by hand. Without an id, asks which one.\n * Previews the packages and config lines before asking. Refuses when the running Kubb or Node.js\n * version is outside its compatibility.\n */\nexport async function run({ id: input, configPath, yes, install }: AddOptions): Promise<void> {\n const cwd = process.cwd()\n const hrStart = process.hrtime()\n const summary = (title: string, status: Parameters<typeof logCommandSummary>[0]['status'], lines: ReadonlyArray<string>) =>\n logCommandSummary({ title, status, hrStart, block: true, lines })\n const installedPackages: Array<string> = []\n const configured: Array<RegistryEntry> = []\n logIntro({ title: isInteractiveRun({ yes }) ? undefined : styleText('bgCyan', styleText('black', ' Kubb Add ')) })\n\n try {\n const registry = registryUrl()\n if (!input && yes)\n throw new Diagnostics.Error({\n code: Diagnostics.code.unknown,\n severity: 'error',\n message: 'Pass a registry id, such as plugin-zod, when using --yes.',\n help: 'Run `kubb add plugin-zod --yes`, or drop `--yes` to pick from a list.',\n })\n const inputId = input ? toRegistryId(input) : undefined\n const foundConfig = configPath ? path.resolve(configPath) : findConfigFile(cwd)\n const [entries, installed, configSource] = await withSpinner({\n message: 'Reading the registry',\n promise: Promise.all([\n fetchRegistryIndex({ registry }),\n readInstalledPackages({ root: cwd }),\n foundConfig ? read(foundConfig).catch(() => undefined) : undefined,\n ]),\n })\n const versions = new Map(installed.map((item) => [item.package, item.version]))\n\n const id = inputId ?? (await selectExtension({ entries, versions, registry }))\n if (!id) {\n summary('Add canceled', 'canceled', [' No changes made'])\n return\n }\n const entry = entries.find((candidate) => candidate.id === id)\n if (!entry) {\n const suggestions = closestIds({ input: id, ids: entries.map((entry) => entry.id) }).map(toShortId)\n summary(`No extension named ${input ?? id}`, 'failed', [\n ...suggestions.map((suggestion) => ` kubb add ${suggestion}`),\n ' Browse all kubb.dev/extensions',\n ])\n process.exitCode = 1\n return\n }\n const { artifact, manifest } = entry\n const kind = manifest.kind.charAt(0).toUpperCase() + manifest.kind.slice(1)\n\n const problem = incompatibility(manifest)\n if (problem)\n throw new Diagnostics.Error({\n code: Diagnostics.code.incompatibleExtension,\n severity: 'error',\n message: problem,\n help: 'Upgrade Kubb or Node.js to a version the extension supports.',\n })\n\n const configFile = manifest.kind === extensionKinds.adapter ? undefined : foundConfig\n if (manifest.kind !== extensionKinds.adapter && !configFile)\n throw new Diagnostics.Error({\n code: Diagnostics.code.unknown,\n severity: 'error',\n message: 'No kubb.config.ts found. Run `kubb init` first, or pass --config.',\n help: 'Run `kubb init` to create a config, or pass its path with `--config`.',\n })\n const configName = configFile ? path.relative(cwd, configFile) || configFile : undefined\n\n const byName = new Map(entries.map((candidate) => [candidate.manifest.name, candidate]))\n const inConfig = (name: string) => {\n const dependency = byName.get(name)\n return dependency ? !!configSource?.includes(`${dependency.manifest.export}(`) : installed.some((item) => item.manifest?.name === name)\n }\n const dependencies = manifest.dependencies ?? []\n const missing = configFile ? dependencies.filter((name) => !inConfig(name)).flatMap((name) => byName.get(name) ?? []) : []\n const withDependencies = await confirmDependencies({ entry, missing, yes })\n if (withDependencies === undefined) {\n summary('Add canceled', 'canceled', [` ${kind} ${manifest.name}`, ' No changes made'])\n return\n }\n const targets = [...(withDependencies ? missing : []), entry]\n\n const dependencyStatus = (name: string) => {\n if (inConfig(name)) return `${name} ${styleText('green', '✓ installed')}`\n return targets.some((target) => target.manifest.name === name) ? `${name} ${styleText('cyan', '+ adding')}` : `${name} ${styleText('yellow', 'missing')}`\n }\n const preview = configFile && configSource !== undefined ? previewConfig({ details: targets, source: configSource }) : undefined\n // The default parsers written next to a new parser come with `kubb`. A strict node_modules layout\n // only lets the config import direct dependencies, so they are installed at the project's `kubb` version.\n const before = readImports(configSource ?? '')\n const added = preview && 'lines' in preview ? readImports(preview.source).filter((name) => !before.includes(name)) : []\n const bundled = BUNDLED_PACKAGES.filter(\n (name) => added.includes(name) && !versions.has(name) && !targets.some((target) => target.artifact.package === name),\n )\n const kubbVersion = versions.get('kubb')\n const specs = [\n ...targets.filter((target) => target === entry || !versions.has(target.artifact.package)).map((target) => installSpec(target.artifact)),\n ...bundled.map((name) => (kubbVersion ? `${name}@${kubbVersion}` : name)),\n ]\n logStep(`${kind} ${styleText('cyan', manifest.name)} v${artifact.version} · ${summarize(manifest.description)}`)\n logBlock([\n ...(dependencies.length ? [`Needs ${dependencies.map(dependencyStatus).join(' ')}`] : []),\n install ? `Installs ${specs.join(' ')}` : 'Installs nothing (--no-install)',\n ...(configName ? [`Config ${configName}`] : [`Config prints the ${manifest.kind} snippet to add`]),\n ...(preview && 'lines' in preview ? preview.lines.map((line) => styleText('green', ` + ${line}`)) : []),\n ...(preview && 'reason' in preview ? [styleText('yellow', ` cannot edit it: ${preview.reason}`)] : []),\n ])\n\n const confirmed = yes || (await clack.confirm({ message: 'Add it?', initialValue: true }))\n if (clack.isCancel(confirmed) || !confirmed) {\n summary('Add canceled', 'canceled', [` ${kind} ${manifest.name}`, ' No changes made'])\n return\n }\n\n const packageManager = detectPackageManager(cwd)\n const packages = () => (install ? `${installedPackages.length} installed with ${packageManager.name}` : 'installation skipped (--no-install)')\n if (install) {\n const names = [...targets.filter((target) => specs.includes(installSpec(target.artifact))).map((target) => target.artifact.package), ...bundled]\n await installWithSpinner({ packages: specs, names: names.join(', '), packageManager, cwd })\n installedPackages.push(...names)\n }\n\n const unconfigured: Array<RegistryEntry> = configFile ? [] : [entry]\n if (configFile) {\n for (const target of targets) {\n try {\n const { outcomes, changed } = await editConfigFile({ filePath: configFile, ...toConfigEdits([target]) })\n if (!outcomes[0]?.applied) throw new Error(outcomes[0]?.reason ?? 'the config file was not changed')\n if (changed) configured.push(target)\n logStep(`${target.manifest.export}() configured in ${configName}`)\n } catch (error) {\n logWarn(`Could not edit ${configName}: ${getErrorMessage(error)}`)\n unconfigured.push(target)\n }\n }\n }\n\n const manual = unconfigured.length > 0\n // A plugin or parser the command could not write into the config is a failure a caller can act on; an adapter never gets written.\n if (manual && manifest.kind !== extensionKinds.adapter) process.exitCode = 1\n if (manual)\n logBlock([\n 'Add the import to your Kubb config and merge the property into its defineConfig call:',\n '',\n ...unconfigured.map((target) => toSnippet(target)),\n ])\n const dependenciesMissing = !withDependencies && missing.length > 0\n const title = manual\n ? `${kind} needs configuration`\n : dependenciesMissing\n ? 'Plugin configured; dependencies missing'\n : configured.length\n ? install\n ? `${kind} ready`\n : `${kind} configured`\n : `${kind} already configured`\n summary(title, manual || dependenciesMissing ? 'warning' : 'success', [\n ` Packages ${packages()}`,\n ...configured.map((target) => styleText('green', ` + ${target.manifest.export}()`)),\n '',\n ...(!install ? [`Install ${specs.join(' ')} to use it.`] : []),\n ...(dependenciesMissing ? [`Missing plugins ${missing.map((target) => target.manifest.name).join(', ')}`] : []),\n manual ? 'Add the snippet above, then run kubb generate.' : 'Next kubb generate',\n `Options kubb.dev/extensions/${entry.id}`,\n ])\n } catch (error) {\n logError(getErrorMessage(error))\n summary('Add failed', 'failed', installedPackages.length ? [` Packages ${installedPackages.join(', ')} installed`] : [' No changes made'])\n process.exitCode = 1\n }\n}\n\nexport const command = define({\n name: 'add',\n description: 'Find and install plugins, adapters, and parsers from the Kubb registry.',\n examples: [\n 'kubb add',\n 'kubb add plugin-zod',\n 'kubb add kubb-labs/plugin-react-query',\n 'kubb add acme/plugin-x --yes',\n 'kubb add plugin-zod --no-install',\n ].join('\\n'),\n toKebab: true,\n args: {\n id: {\n type: 'positional',\n description: 'Registry id: owner/slug, or a slug for an official extension. Asked for when omitted',\n required: false,\n },\n ...configArg,\n ...yesArg,\n install: {\n type: 'boolean',\n description: 'Install the package. Pass --no-install to only edit the config',\n negatable: true,\n default: true,\n },\n },\n run: ({ values }) => run({ id: values.id, configPath: values.config, yes: values.yes, install: values.install }),\n})\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- const require_rolldown_runtime = require("./rolldown-runtime-CPE0t6oh.cjs");
2
- const require_errors = require("./errors-Cl69p_vI.cjs");
3
- const require_Telemetry = require("./Telemetry-Dc9DVxKQ.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ const require_errors = require("./errors-BponpdjN.cjs");
3
+ const require_Telemetry = require("./Telemetry-COWGqYmh.cjs");
4
4
  let node_util = require("node:util");
5
5
  let node_process = require("node:process");
6
6
  node_process = require_rolldown_runtime.__toESM(node_process, 1);
7
- //#region src/runners/mcp/run.ts
7
+ // src/runners/mcp/run.ts
8
8
  /**
9
9
  * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.
10
10
  */
@@ -27,7 +27,6 @@ async function run() {
27
27
  node_process.default.exitCode = 1;
28
28
  }
29
29
  }
30
- //#endregion
31
30
  exports.run = run;
32
31
 
33
- //# sourceMappingURL=run-cBSr2F1q.cjs.map
32
+ //# sourceMappingURL=run-D5Z6nfzK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-cBSr2F1q.cjs","names":["trackRun","process","styleText","toError"],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { trackRun } from '../../Telemetry.ts'\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run(): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const report = trackRun({ command: 'mcp', hrStart: process.hrtime() })\n\n try {\n // The MCP stdio transport owns stdout: anything else written there corrupts the JSON-RPC stream.\n console.error(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n const server = startMcpServer()\n // Report once the client introduces itself, so the event names the client (e.g. `claude-code`, `cursor-vscode`).\n server.on('initialize', ({ clientInfo }) => void report({ status: 'success', mcpClient: clientInfo.name }), { once: true })\n } catch (error) {\n await report({ status: 'failed' })\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n"],"mappings":";;;;;;;;;;AASA,eAAsB,MAAqB;CACzC,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,SAASA,kBAAAA,SAAS;EAAE,SAAS;EAAO,SAASC,aAAAA,QAAQ,OAAO;CAAE,CAAC;CAErE,IAAI;EAEF,QAAQ,OAAA,GAAMC,UAAAA,UAAAA,CAAU,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,MAAA,GAAKA,UAAAA,UAAAA,CAAU,UAAU,2DAA2D,CAAC;EAG7F,eAAK,CAAC,CAAC,GAAG,eAAe,EAAE,iBAAiB,KAAK,OAAO;GAAE,QAAQ;GAAW,WAAW,WAAW;EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;CAC5H,SAAS,OAAO;EACd,MAAM,OAAO,EAAE,QAAQ,SAAS,CAAC;EACjC,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,aAAA,QAAA,WAAmB;CACrB;AACF"}
1
+ {"version":3,"file":"run-D5Z6nfzK.cjs","names":["trackRun","process","styleText","toError"],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { trackRun } from '../../Telemetry.ts'\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run(): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const report = trackRun({ command: 'mcp', hrStart: process.hrtime() })\n\n try {\n // The MCP stdio transport owns stdout: anything else written there corrupts the JSON-RPC stream.\n console.error(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n const server = startMcpServer()\n // Report once the client introduces itself, so the event names the client (e.g. `claude-code`, `cursor-vscode`).\n server.on('initialize', ({ clientInfo }) => void report({ status: 'success', mcpClient: clientInfo.name }), { once: true })\n } catch (error) {\n await report({ status: 'failed' })\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n"],"mappings":";;;;;;;;;;AASA,eAAsB,MAAqB;CACzC,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,SAASA,kBAAAA,SAAS;EAAE,SAAS;EAAO,SAASC,aAAAA,QAAQ,OAAO;CAAE,CAAC;CAErE,IAAI;EAEF,QAAQ,OAAA,GAAMC,UAAAA,UAAAA,CAAU,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,MAAA,GAAKA,UAAAA,UAAAA,CAAU,UAAU,2DAA2D,CAAC;EAG7F,eAAK,CAAC,CAAC,GAAG,eAAe,EAAE,iBAAiB,KAAK,OAAO;GAAE,QAAQ;GAAW,WAAW,WAAW;EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;CAC5H,SAAS,OAAO;EACd,MAAM,OAAO,EAAE,QAAQ,SAAS,CAAC;EACjC,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,aAAA,QAAA,WAAmB;CACrB;AACF"}
@@ -1,15 +1,16 @@
1
- const require_rolldown_runtime = require("./rolldown-runtime-CPE0t6oh.cjs");
2
- const require_errors = require("./errors-Cl69p_vI.cjs");
3
- const require_Telemetry = require("./Telemetry-Dc9DVxKQ.cjs");
4
- const require_text = require("./text-CC2xdpGL.cjs");
5
- const require_config = require("./config-BG_Nr2CZ.cjs");
6
- const require_summary = require("./summary-BOYsqub3.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ const require_errors = require("./errors-BponpdjN.cjs");
3
+ const require_Telemetry = require("./Telemetry-COWGqYmh.cjs");
4
+ const require_config = require("./config-CRrmj88c.cjs");
5
+ const require_config$1 = require("./config-BWj9jBVj.cjs");
6
+ const require_summary = require("./summary-Clvl5Hxs.cjs");
7
+ const require_text = require("./text-Ep3AulAS.cjs");
7
8
  let node_util = require("node:util");
8
9
  let node_process = require("node:process");
9
10
  node_process = require_rolldown_runtime.__toESM(node_process, 1);
10
11
  let node_path = require("node:path");
11
12
  let _kubb_core = require("@kubb/core");
12
- //#region src/runners/validate/run.ts
13
+ // src/runners/validate/run.ts
13
14
  /**
14
15
  * Validates `input` with the configured adapters, falling back to OpenAPI when no config exists.
15
16
  * Exits the process with code 1 on validation failure or missing dependency.
@@ -23,7 +24,7 @@ async function run({ input, configPath }) {
23
24
  let adapterName;
24
25
  try {
25
26
  const configFile = configPath ?? require_config.findConfigFile();
26
- const loaded = configFile ? await require_config.getConfigs({
27
+ const loaded = configFile ? await require_config$1.getConfigs({
27
28
  configPath: configFile,
28
29
  input
29
30
  }).catch((error) => {
@@ -94,7 +95,6 @@ async function run({ input, configPath }) {
94
95
  node_process.default.exit(1);
95
96
  }
96
97
  }
97
- //#endregion
98
98
  exports.run = run;
99
99
 
100
- //# sourceMappingURL=run-BUzdEUaE.cjs.map
100
+ //# sourceMappingURL=run-DCqmf5W1.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-BUzdEUaE.cjs","names":["process","trackRun","findConfigFile","getConfigs","getInputKind","resolve","checkoutGitInput","styleText","pluralize","toError"],"sources":["../src/runners/validate/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { resolve } from 'node:path'\nimport { styleText } from 'node:util'\nimport { findConfigFile } from '@internals/shared'\nimport { toError } from '@internals/utils'\nimport { type Config, checkoutGitInput, getInputKind } from '@kubb/core'\nimport { trackRun } from '../../Telemetry.ts'\nimport { getConfigs } from '../../config.ts'\nimport { pluralize } from '../../ui/text.ts'\nimport { logCommandSummary } from '../../ui/summary.ts'\n\ntype ValidateOptions = {\n /**\n * Path, URL, or git input (`git+<repo>#<ref>:<path>`) of the specification to validate.\n */\n input: string\n configPath?: string\n}\n\n/**\n * Validates `input` with the configured adapters, falling back to OpenAPI when no config exists.\n * Exits the process with code 1 on validation failure or missing dependency.\n */\nexport async function run({ input, configPath }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n const report = trackRun({ command: 'validate', hrStart })\n let adapterName: string | undefined\n\n try {\n const configFile = configPath ?? findConfigFile()\n // A config found by search that does not load must not block validating a file; an explicit `--config` still fails.\n const loaded = configFile\n ? await getConfigs({ configPath: configFile, input }).catch((error) => {\n if (configPath) throw error\n })\n : undefined\n const fallback = async () => {\n adapterName = '@kubb/adapter-oas'\n const { adapterOas } = await import('@kubb/adapter-oas')\n return [{ adapter: adapterOas(), input }]\n }\n // An array config often repeats one adapter, so each adapter and input pair is validated once.\n const unique = new Map(\n (loaded?.configs ?? []).map((config) => {\n const resolved = getInputKind(input) === 'file' ? resolve(config.root || process.cwd(), input) : input\n return [`${config.adapter?.name}\\0${resolved}`, { adapter: config.adapter, input: resolved }] as const\n }),\n )\n const targets: Array<{ adapter: Config['adapter']; input: string }> = loaded ? [...unique.values()] : await fallback()\n if (!targets.length) throw new Error('The Kubb config contains no configurations to validate.')\n for (const target of targets) {\n adapterName = target.adapter?.name\n if (!target.adapter) throw new Error('No adapter is configured. Set adapter in your Kubb config to validate this specification.')\n const checkout = getInputKind(target.input) === 'git' ? await checkoutGitInput(target.input) : undefined\n try {\n await target.adapter.validate(checkout?.path ?? target.input, { throwOnError: true })\n } finally {\n await checkout?.dispose()\n }\n }\n const specifications = new Set(targets.map((target) => target.input)).size\n const adapterNames = [...new Set(targets.flatMap((target) => target.adapter?.name ?? []))]\n await report({ status: 'success' })\n\n logCommandSummary({\n title: 'Validation passed',\n status: 'success',\n hrStart,\n lines: [\n ` ${styleText('bold', `${pluralize(specifications, 'specification')} validated`)}`,\n ` ${styleText('dim', 'Input')} ${styleText('cyan', input)}`,\n ` ${styleText('dim', adapterNames.length === 1 ? 'Adapter' : 'Adapters')} ${adapterNames.join(', ')}`,\n ],\n })\n } catch (error) {\n await report({ status: 'failed' })\n const message = toError(error).message\n const missingAdapter = adapterName === '@kubb/adapter-oas' && /(?:Cannot find|Cannot resolve|not found)[\\s\\S]*@kubb\\/adapter-oas/.test(message)\n logCommandSummary({\n title: missingAdapter ? 'Could not validate' : 'Validation failed',\n status: 'failed',\n hrStart,\n lines: [\n ` ${styleText('dim', 'Input')} ${styleText('cyan', input)}`,\n ` ${styleText('dim', 'Adapter')} ${adapterName ?? 'not configured'}${missingAdapter ? ' · not installed' : ''}`,\n '',\n styleText('bold', missingAdapter ? 'Required package' : 'Validation error'),\n ` ${styleText('red', message)}`,\n ...(missingAdapter\n ? ['', 'Install it with:', styleText('cyan', ' npm install @kubb/adapter-oas'), styleText('cyan', ' pnpm add @kubb/adapter-oas')]\n : []),\n ],\n })\n\n process.exit(1)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"run-DCqmf5W1.cjs","names":["process","trackRun","findConfigFile","getConfigs","getInputKind","resolve","checkoutGitInput","styleText","pluralize","toError"],"sources":["../src/runners/validate/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { resolve } from 'node:path'\nimport { styleText } from 'node:util'\nimport { findConfigFile } from '@internals/shared'\nimport { toError } from '@internals/utils'\nimport { type Config, checkoutGitInput, getInputKind } from '@kubb/core'\nimport { trackRun } from '../../Telemetry.ts'\nimport { getConfigs } from '../../config.ts'\nimport { pluralize } from '../../ui/text.ts'\nimport { logCommandSummary } from '../../ui/summary.ts'\n\ntype ValidateOptions = {\n /**\n * Path, URL, or git input (`git+<repo>#<ref>:<path>`) of the specification to validate.\n */\n input: string\n configPath?: string\n}\n\n/**\n * Validates `input` with the configured adapters, falling back to OpenAPI when no config exists.\n * Exits the process with code 1 on validation failure or missing dependency.\n */\nexport async function run({ input, configPath }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n const report = trackRun({ command: 'validate', hrStart })\n let adapterName: string | undefined\n\n try {\n const configFile = configPath ?? findConfigFile()\n // A config found by search that does not load must not block validating a file; an explicit `--config` still fails.\n const loaded = configFile\n ? await getConfigs({ configPath: configFile, input }).catch((error) => {\n if (configPath) throw error\n })\n : undefined\n const fallback = async () => {\n adapterName = '@kubb/adapter-oas'\n const { adapterOas } = await import('@kubb/adapter-oas')\n return [{ adapter: adapterOas(), input }]\n }\n // An array config often repeats one adapter, so each adapter and input pair is validated once.\n const unique = new Map(\n (loaded?.configs ?? []).map((config) => {\n const resolved = getInputKind(input) === 'file' ? resolve(config.root || process.cwd(), input) : input\n return [`${config.adapter?.name}\\0${resolved}`, { adapter: config.adapter, input: resolved }] as const\n }),\n )\n const targets: Array<{ adapter: Config['adapter']; input: string }> = loaded ? [...unique.values()] : await fallback()\n if (!targets.length) throw new Error('The Kubb config contains no configurations to validate.')\n for (const target of targets) {\n adapterName = target.adapter?.name\n if (!target.adapter) throw new Error('No adapter is configured. Set adapter in your Kubb config to validate this specification.')\n const checkout = getInputKind(target.input) === 'git' ? await checkoutGitInput(target.input) : undefined\n try {\n await target.adapter.validate(checkout?.path ?? target.input, { throwOnError: true })\n } finally {\n await checkout?.dispose()\n }\n }\n const specifications = new Set(targets.map((target) => target.input)).size\n const adapterNames = [...new Set(targets.flatMap((target) => target.adapter?.name ?? []))]\n await report({ status: 'success' })\n\n logCommandSummary({\n title: 'Validation passed',\n status: 'success',\n hrStart,\n lines: [\n ` ${styleText('bold', `${pluralize(specifications, 'specification')} validated`)}`,\n ` ${styleText('dim', 'Input')} ${styleText('cyan', input)}`,\n ` ${styleText('dim', adapterNames.length === 1 ? 'Adapter' : 'Adapters')} ${adapterNames.join(', ')}`,\n ],\n })\n } catch (error) {\n await report({ status: 'failed' })\n const message = toError(error).message\n const missingAdapter = adapterName === '@kubb/adapter-oas' && /(?:Cannot find|Cannot resolve|not found)[\\s\\S]*@kubb\\/adapter-oas/.test(message)\n logCommandSummary({\n title: missingAdapter ? 'Could not validate' : 'Validation failed',\n status: 'failed',\n hrStart,\n lines: [\n ` ${styleText('dim', 'Input')} ${styleText('cyan', input)}`,\n ` ${styleText('dim', 'Adapter')} ${adapterName ?? 'not configured'}${missingAdapter ? ' · not installed' : ''}`,\n '',\n styleText('bold', missingAdapter ? 'Required package' : 'Validation error'),\n ` ${styleText('red', message)}`,\n ...(missingAdapter\n ? ['', 'Install it with:', styleText('cyan', ' npm install @kubb/adapter-oas'), styleText('cyan', ' pnpm add @kubb/adapter-oas')]\n : []),\n ],\n })\n\n process.exit(1)\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import "./rolldown-runtime-CRm0XQPb.js";
2
- import { n as toError } from "./errors-DmC83ALX.js";
3
- import { n as trackRun } from "./Telemetry-Dc79_cIA.js";
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ import { n as toError } from "./errors-wzqmMpMo.js";
3
+ import { n as trackRun } from "./Telemetry-B3edcFoB.js";
4
4
  import { styleText } from "node:util";
5
5
  import process from "node:process";
6
- //#region src/runners/mcp/run.ts
6
+ // src/runners/mcp/run.ts
7
7
  /**
8
8
  * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.
9
9
  */
@@ -26,7 +26,6 @@ async function run() {
26
26
  process.exitCode = 1;
27
27
  }
28
28
  }
29
- //#endregion
30
29
  export { run };
31
30
 
32
- //# sourceMappingURL=run-BK-A9JDf.js.map
31
+ //# sourceMappingURL=run-DFXhBS64.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-BK-A9JDf.js","names":[],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { trackRun } from '../../Telemetry.ts'\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run(): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const report = trackRun({ command: 'mcp', hrStart: process.hrtime() })\n\n try {\n // The MCP stdio transport owns stdout: anything else written there corrupts the JSON-RPC stream.\n console.error(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n const server = startMcpServer()\n // Report once the client introduces itself, so the event names the client (e.g. `claude-code`, `cursor-vscode`).\n server.on('initialize', ({ clientInfo }) => void report({ status: 'success', mcpClient: clientInfo.name }), { once: true })\n } catch (error) {\n await report({ status: 'failed' })\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n"],"mappings":";;;;;;;;;AASA,eAAsB,MAAqB;CACzC,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,SAAS,SAAS;EAAE,SAAS;EAAO,SAAS,QAAQ,OAAO;CAAE,CAAC;CAErE,IAAI;EAEF,QAAQ,MAAM,UAAU,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,KAAK,UAAU,UAAU,2DAA2D,CAAC;EAG7F,eAAK,CAAC,CAAC,GAAG,eAAe,EAAE,iBAAiB,KAAK,OAAO;GAAE,QAAQ;GAAW,WAAW,WAAW;EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;CAC5H,SAAS,OAAO;EACd,MAAM,OAAO,EAAE,QAAQ,SAAS,CAAC;EACjC,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,QAAQ,WAAW;CACrB;AACF"}
1
+ {"version":3,"file":"run-DFXhBS64.js","names":[],"sources":["../src/runners/mcp/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type * as McpModule from '@kubb/mcp'\nimport { trackRun } from '../../Telemetry.ts'\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run(): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const report = trackRun({ command: 'mcp', hrStart: process.hrtime() })\n\n try {\n // The MCP stdio transport owns stdout: anything else written there corrupts the JSON-RPC stream.\n console.error(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n const server = startMcpServer()\n // Report once the client introduces itself, so the event names the client (e.g. `claude-code`, `cursor-vscode`).\n server.on('initialize', ({ clientInfo }) => void report({ status: 'success', mcpClient: clientInfo.name }), { once: true })\n } catch (error) {\n await report({ status: 'failed' })\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n"],"mappings":";;;;;;;;;AASA,eAAsB,MAAqB;CACzC,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,SAAS,SAAS;EAAE,SAAS;EAAO,SAAS,QAAQ,OAAO;CAAE,CAAC;CAErE,IAAI;EAEF,QAAQ,MAAM,UAAU,QAAQ,0BAA0B,CAAC;EAC3D,QAAQ,KAAK,UAAU,UAAU,2DAA2D,CAAC;EAG7F,eAAK,CAAC,CAAC,GAAG,eAAe,EAAE,iBAAiB,KAAK,OAAO;GAAE,QAAQ;GAAW,WAAW,WAAW;EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;CAC5H,SAAS,OAAO;EACd,MAAM,OAAO,EAAE,QAAQ,SAAS,CAAC;EACjC,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,QAAQ,WAAW;CACrB;AACF"}