@kubb/cli 5.14.6 → 5.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/bin/kubb.js +2 -1
  2. package/dist/{Telemetry-B5V_ufmv.cjs → Telemetry-B52pKz9i.cjs} +14 -118
  3. package/dist/Telemetry-B52pKz9i.cjs.map +1 -0
  4. package/dist/{Telemetry-DrnGartf.js → Telemetry-C7Qwy2s7.js} +12 -86
  5. package/dist/Telemetry-C7Qwy2s7.js.map +1 -0
  6. package/dist/{background-DlK0by5c.js → background-BJCuXYuB.js} +5 -6
  7. package/dist/{background-DlK0by5c.js.map → background-BJCuXYuB.js.map} +1 -1
  8. package/dist/{background-CdPT1eaq.cjs → background-CK2gQtTU.cjs} +5 -6
  9. package/dist/{background-CdPT1eaq.cjs.map → background-CK2gQtTU.cjs.map} +1 -1
  10. package/dist/{background-C6XHpEo7.js → background-D4mZCg-4.js} +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-CL6N6yPS.js → intro-9PB8sE8z.js} +8 -52
  53. package/dist/intro-9PB8sE8z.js.map +1 -0
  54. package/dist/{text-DrsG1EDN.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-CcseJJwh.cjs +20 -0
  65. package/dist/mcp-CcseJJwh.cjs.map +1 -0
  66. package/dist/mcp-DUTsS8tR.js +21 -0
  67. package/dist/mcp-DUTsS8tR.js.map +1 -0
  68. package/dist/package-B1hUUjio.cjs +10 -0
  69. package/dist/package-B1hUUjio.cjs.map +1 -0
  70. package/dist/package-MYPMnnTX.js +5 -0
  71. package/dist/package-MYPMnnTX.js.map +1 -0
  72. package/dist/{registry-DOGpflct.js → registry-B3eYk4LN.js} +7 -67
  73. package/dist/registry-B3eYk4LN.js.map +1 -0
  74. package/dist/{registry-BzBp6aZI.cjs → registry-YE1pFWL-.cjs} +4 -82
  75. package/dist/registry-YE1pFWL-.cjs.map +1 -0
  76. package/dist/{reporters-GzXlc4CK.cjs → reporters-2cgjvXwR.cjs} +32 -40
  77. package/dist/{reporters-GzXlc4CK.cjs.map → reporters-2cgjvXwR.cjs.map} +1 -1
  78. package/dist/{reporters-mYHIUZSx.js → reporters-BM430HdQ.js} +19 -27
  79. package/dist/{reporters-mYHIUZSx.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-BYP_t9dR.cjs +324 -0
  85. package/dist/run-BYP_t9dR.cjs.map +1 -0
  86. package/dist/run-Bq6gcfkS.js +1 -0
  87. package/dist/run-BrM7-NSV.js +181 -0
  88. package/dist/run-BrM7-NSV.js.map +1 -0
  89. package/dist/run-BsrNfFIl.js +228 -0
  90. package/dist/run-BsrNfFIl.js.map +1 -0
  91. package/dist/{run-l8IiOR_c.js → run-CLiHI99L.js} +9 -9
  92. package/dist/{run-l8IiOR_c.js.map → run-CLiHI99L.js.map} +1 -1
  93. package/dist/{run-C8Prej7s.cjs → run-CQORv7Gq.cjs} +44 -37
  94. package/dist/run-CQORv7Gq.cjs.map +1 -0
  95. package/dist/{run-EJtgdIin.js → run-CXVhxFfC.js} +31 -23
  96. package/dist/run-CXVhxFfC.js.map +1 -0
  97. package/dist/run-CrM4jsix.cjs +80 -0
  98. package/dist/run-CrM4jsix.cjs.map +1 -0
  99. package/dist/run-CvFakE3B.cjs +185 -0
  100. package/dist/run-CvFakE3B.cjs.map +1 -0
  101. package/dist/{run-DC_xH5H3.cjs → run-CyzKy-0p.cjs} +49 -41
  102. package/dist/run-CyzKy-0p.cjs.map +1 -0
  103. package/dist/run-D-nn9-Wq.js +319 -0
  104. package/dist/run-D-nn9-Wq.js.map +1 -0
  105. package/dist/run-DBnSbwtU.cjs +389 -0
  106. package/dist/run-DBnSbwtU.cjs.map +1 -0
  107. package/dist/{run-j1g5si5R.js → run-DTqMrPS9.js} +5 -6
  108. package/dist/{run-j1g5si5R.js.map → run-DTqMrPS9.js.map} +1 -1
  109. package/dist/{run-9fs2T2Je.js → run-DUwX6Icx.js} +26 -20
  110. package/dist/run-DUwX6Icx.js.map +1 -0
  111. package/dist/run-FEiyv6_U.js +385 -0
  112. package/dist/run-FEiyv6_U.js.map +1 -0
  113. package/dist/run-LY_UAYyM.cjs +233 -0
  114. package/dist/run-LY_UAYyM.cjs.map +1 -0
  115. package/dist/{run-sjzj0ir-.cjs → run-dMTJfs4_.cjs} +10 -10
  116. package/dist/{run-sjzj0ir-.cjs.map → run-dMTJfs4_.cjs.map} +1 -1
  117. package/dist/{run-CypFtkVE.cjs → run-uPA5s3rI.cjs} +5 -6
  118. package/dist/{run-CypFtkVE.cjs.map → run-uPA5s3rI.cjs.map} +1 -1
  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-laSRD0z1.cjs → snapshot-CPF9zyZj.cjs} +13 -14
  124. package/dist/{snapshot-laSRD0z1.cjs.map → snapshot-CPF9zyZj.cjs.map} +1 -1
  125. package/dist/{snapshot-BJWnL6hE.js → snapshot-CiV08NJr.js} +10 -11
  126. package/dist/{snapshot-BJWnL6hE.js.map → snapshot-CiV08NJr.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-DFEdbBPu.cjs → status-C066YA-4.cjs} +7 -8
  132. package/dist/{status-DFEdbBPu.cjs.map → status-C066YA-4.cjs.map} +1 -1
  133. package/dist/{status-BjmXLRm2.js → status-Dj8tivag.js} +6 -7
  134. package/dist/{status-BjmXLRm2.js.map → status-Dj8tivag.js.map} +1 -1
  135. package/dist/studio-B4XsXgKj.js +215 -0
  136. package/dist/studio-B4XsXgKj.js.map +1 -0
  137. package/dist/studio-D9_-mKee.cjs +218 -0
  138. package/dist/studio-D9_-mKee.cjs.map +1 -0
  139. package/dist/studioWorker.js +4 -5
  140. package/dist/{summary-DDnI70tn.js → summary-CbmQKA8l.js} +5 -6
  141. package/dist/{summary-DDnI70tn.js.map → summary-CbmQKA8l.js.map} +1 -1
  142. package/dist/{summary-1DCwzWEU.cjs → summary-Clvl5Hxs.cjs} +7 -8
  143. package/dist/{summary-1DCwzWEU.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-B3tLWYJU.cjs +27 -0
  165. package/dist/validate-B3tLWYJU.cjs.map +1 -0
  166. package/dist/validate-C5fyNF4v.js +28 -0
  167. package/dist/validate-C5fyNF4v.js.map +1 -0
  168. package/package.json +7 -7
  169. package/dist/Telemetry-B5V_ufmv.cjs.map +0 -1
  170. package/dist/Telemetry-DrnGartf.js.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-BzBp6aZI.cjs.map +0 -1
  175. package/dist/registry-DOGpflct.js.map +0 -1
  176. package/dist/run-9fs2T2Je.js.map +0 -1
  177. package/dist/run-C8Prej7s.cjs.map +0 -1
  178. package/dist/run-CXVme-aS.js +0 -1
  179. package/dist/run-DC_xH5H3.cjs.map +0 -1
  180. package/dist/run-EJtgdIin.js.map +0 -1
  181. package/dist/text-CL6N6yPS.js.map +0 -1
  182. package/dist/text-DrsG1EDN.cjs.map +0 -1
  183. package/dist/utils-C3vTpUje.cjs +0 -645
  184. package/dist/utils-C3vTpUje.cjs.map +0 -1
  185. package/dist/utils-CIc8YFtr.js +0 -536
  186. package/dist/utils-CIc8YFtr.js.map +0 -1
@@ -0,0 +1,218 @@
1
+ const require_rolldown_runtime = require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ const require_shared = require("./shared-C0EtrdUm.cjs");
3
+ const require_config = require("./config-CRrmj88c.cjs");
4
+ let gunshi = require("gunshi");
5
+ let node_process = require("node:process");
6
+ node_process = require_rolldown_runtime.__toESM(node_process, 1);
7
+ let node_path = require("node:path");
8
+ node_path = require_rolldown_runtime.__toESM(node_path, 1);
9
+ // src/commands/studio/studioCommand.ts
10
+ /**
11
+ * Defines a `kubb studio` subcommand. The runner, and with it `@kubb/studio`, loads only when the
12
+ * command runs, so `kubb --help` never does.
13
+ */
14
+ function studioCommand({ action, block, ...definition }) {
15
+ return (0, gunshi.define)({
16
+ ...definition,
17
+ toKebab: true,
18
+ async run({ values }) {
19
+ const { runStudio } = await Promise.resolve().then(() => require("./run-CQORv7Gq.cjs"));
20
+ await runStudio(values, action, { block });
21
+ }
22
+ });
23
+ }
24
+ // src/commands/studio/connect.ts
25
+ const command$7 = studioCommand({
26
+ name: "connect",
27
+ description: "Connect this project to Kubb Studio and generate from the browser.",
28
+ examples: [
29
+ "kubb studio connect",
30
+ "kubb studio connect --allow-read",
31
+ "kubb studio connect --allow-write --allow-exec",
32
+ "kubb studio connect --url http://localhost:3000"
33
+ ].join("\n"),
34
+ args: {
35
+ ...require_shared.configArg,
36
+ ...require_shared.studioConnectionArgs,
37
+ ...require_shared.studioPermissionArgs,
38
+ open: {
39
+ type: "boolean",
40
+ description: "Open the approval page in a browser while pairing",
41
+ default: true,
42
+ negatable: true
43
+ },
44
+ ...require_shared.logLevelArg
45
+ },
46
+ block: true,
47
+ async action(options) {
48
+ const { connect } = await Promise.resolve().then(() => require("./run-CQORv7Gq.cjs"));
49
+ await connect(options);
50
+ }
51
+ });
52
+ // src/commands/studio/login.ts
53
+ const command$6 = studioCommand({
54
+ name: "login",
55
+ description: "Pair this machine with Kubb Studio without connecting.",
56
+ examples: ["kubb studio login", "kubb studio login --url http://localhost:3000"].join("\n"),
57
+ args: command$7.args,
58
+ async action(options) {
59
+ const { login } = await Promise.resolve().then(() => require("./run-CQORv7Gq.cjs"));
60
+ await login(options);
61
+ }
62
+ });
63
+ // src/commands/studio/logout.ts
64
+ const command$5 = studioCommand({
65
+ name: "logout",
66
+ description: "Forget the stored Kubb Studio token.",
67
+ examples: "kubb studio logout",
68
+ args: {},
69
+ async action() {
70
+ const { stopWorker } = await Promise.resolve().then(() => require("./background-CK2gQtTU.cjs"));
71
+ const { clearCredentials } = await Promise.resolve().then(() => require("./credentials-DEsGwcGD.cjs")).then((n) => n.credentials_exports);
72
+ await stopWorker();
73
+ await clearCredentials();
74
+ console.log("Signed out of Kubb Studio.");
75
+ }
76
+ });
77
+ // src/commands/studio/permissions.ts
78
+ const command$4 = studioCommand({
79
+ name: "permissions",
80
+ description: "Change what Kubb Studio may do in this project.",
81
+ examples: "kubb studio permissions",
82
+ args: {},
83
+ async action(options) {
84
+ const { readCredentials } = await Promise.resolve().then(() => require("./credentials-DEsGwcGD.cjs")).then((n) => n.credentials_exports);
85
+ const { resolvePermissions } = await Promise.resolve().then(() => require("./run-CQORv7Gq.cjs"));
86
+ const { canUseTTY } = await Promise.resolve().then(() => require("./env-eu3XyKqJ.cjs")).then((n) => n.env_exports);
87
+ const credentials = await readCredentials();
88
+ if (!credentials) throw new Error("This project is not paired with Kubb Studio. Run `kubb studio` first.");
89
+ if (!canUseTTY()) throw new Error("Changing permissions needs an interactive terminal.");
90
+ const configFile = require_config.findConfigFile();
91
+ await resolvePermissions(options, credentials, configFile && node_path.default.relative(node_process.default.cwd(), configFile), { edit: true });
92
+ console.log("Permissions saved. A running connection keeps the old ones until you restart it: press Ctrl+C and run `kubb studio` again, or run `kubb studio stop`, then `kubb studio start`. Keep `--url` and `--config`, and leave out the `--allow-*` flag of any permission you turned off, since a flag grants it anyway.");
93
+ }
94
+ });
95
+ // src/commands/studio/snapshot.ts
96
+ const command$3 = (0, gunshi.define)({
97
+ name: "snapshot",
98
+ description: "Generate and publish a Kubb Studio snapshot from CI.",
99
+ examples: ["kubb studio snapshot", "kubb studio snapshot --json"].join("\n"),
100
+ toKebab: true,
101
+ args: {
102
+ ...require_shared.configArg,
103
+ ...require_shared.studioConnectionArgs,
104
+ id: {
105
+ type: "string",
106
+ description: "Stable identity for the CI agent, such as a pull request. Auto-detected on GitHub Actions, GitLab CI, Bitbucket Pipelines and CircleCI"
107
+ },
108
+ baseId: {
109
+ type: "string",
110
+ description: "Identity of another CI agent, such as the base branch's, to also compare this snapshot with. Auto-detected on GitHub pull requests and GitLab merge requests",
111
+ toKebab: true
112
+ },
113
+ name: {
114
+ type: "string",
115
+ description: "Package name for the generated tarball. Defaults to the name in package.json"
116
+ },
117
+ packageVersion: {
118
+ type: "string",
119
+ description: "Package version for the generated tarball. Defaults to the version in package.json",
120
+ toKebab: true
121
+ },
122
+ json: {
123
+ type: "boolean",
124
+ description: "Print the result as one JSON object instead of a summary",
125
+ default: false
126
+ },
127
+ ...require_shared.logLevelArg
128
+ },
129
+ async run(ctx) {
130
+ const { runner } = await Promise.resolve().then(() => require("./snapshot-CPF9zyZj.cjs"));
131
+ await runner(ctx);
132
+ }
133
+ });
134
+ // src/commands/studio/background.ts
135
+ const command$2 = studioCommand({
136
+ name: "start",
137
+ description: "Keep this project connected to Kubb Studio in the background.",
138
+ args: command$7.args,
139
+ async action(options) {
140
+ const { startWorker } = await Promise.resolve().then(() => require("./background-CK2gQtTU.cjs"));
141
+ await startWorker(options);
142
+ }
143
+ });
144
+ const stopCommand = (0, gunshi.define)({
145
+ name: "stop",
146
+ description: "Stop this project's background connection and keep its pairing.",
147
+ async run() {
148
+ const { stopWorker } = await Promise.resolve().then(() => require("./background-CK2gQtTU.cjs"));
149
+ await stopWorker();
150
+ console.log("Background connection stopped.");
151
+ }
152
+ });
153
+ // src/commands/studio/status.ts
154
+ const command$1 = studioCommand({
155
+ name: "status",
156
+ description: "Show the project worker, Kubb Studio pairing, and saved permissions.",
157
+ examples: "kubb studio status",
158
+ args: { url: require_shared.studioConnectionArgs.url },
159
+ async action(options) {
160
+ const { getWorkerLogPath, getWorkerStatus } = await Promise.resolve().then(() => require("./background-CK2gQtTU.cjs"));
161
+ const { readCredentials } = await Promise.resolve().then(() => require("./credentials-DEsGwcGD.cjs")).then((n) => n.credentials_exports);
162
+ const { formatStatus } = await Promise.resolve().then(() => require("./status-C066YA-4.cjs"));
163
+ const [worker, credentials] = await Promise.all([getWorkerStatus(), readCredentials()]);
164
+ console.log([
165
+ "",
166
+ ...formatStatus({
167
+ studioUrl: options.studioUrl,
168
+ credentials,
169
+ worker,
170
+ project: node_process.default.cwd(),
171
+ logPath: getWorkerLogPath()
172
+ }),
173
+ ""
174
+ ].join("\n"));
175
+ }
176
+ });
177
+ // src/commands/studio/index.ts
178
+ const command = (0, gunshi.define)({
179
+ ...command$7,
180
+ name: "studio",
181
+ description: "Connect this project to Kubb Studio, or manage its pairing and snapshots.",
182
+ examples: [
183
+ "kubb studio",
184
+ "kubb studio --allow-read",
185
+ "kubb studio login",
186
+ "kubb studio status",
187
+ "kubb studio permissions",
188
+ "kubb studio logout",
189
+ "kubb studio snapshot"
190
+ ].join("\n"),
191
+ subCommands: {
192
+ start: command$2,
193
+ stop: stopCommand,
194
+ connect: command$7,
195
+ login: command$6,
196
+ logout: command$5,
197
+ status: command$1,
198
+ permissions: command$4,
199
+ snapshot: command$3
200
+ }
201
+ });
202
+ /**
203
+ * Sends `kubb studio --flag value` to `kubb studio connect`, the same runner. gunshi picks a
204
+ * subcommand from the first token that is not a flag, so `--url http://…` would read the URL as one.
205
+ */
206
+ function routeStudioFlags(args) {
207
+ const [name, next] = args;
208
+ if (name !== "studio" || !next?.startsWith("-") || next === "--help" || next === "-h") return args;
209
+ return [
210
+ "studio",
211
+ "connect",
212
+ ...args.slice(1)
213
+ ];
214
+ }
215
+ exports.command = command;
216
+ exports.routeStudioFlags = routeStudioFlags;
217
+
218
+ //# sourceMappingURL=studio-D9_-mKee.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-D9_-mKee.cjs","names":["define","command","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","command","connectCommand","command","command","findConfigFile","path","process","command","define","configArg","studioConnectionArgs","logLevelArg","command","connectCommand","define","command","studioConnectionArgs","process","define","connectCommand","startCommand","loginCommand","logoutCommand","statusCommand","permissionsCommand","snapshotCommand"],"sources":["../src/commands/studio/studioCommand.ts","../src/commands/studio/connect.ts","../src/commands/studio/login.ts","../src/commands/studio/logout.ts","../src/commands/studio/permissions.ts","../src/commands/studio/snapshot.ts","../src/commands/studio/background.ts","../src/commands/studio/status.ts","../src/commands/studio/index.ts"],"sourcesContent":["import { type Args, define } from 'gunshi'\nimport type { StudioOptions, StudioValues } from '../../runners/studio/run.ts'\n\n/**\n * Defines a `kubb studio` subcommand. The runner, and with it `@kubb/studio`, loads only when the\n * command runs, so `kubb --help` never does.\n */\nexport function studioCommand({\n action,\n block,\n ...definition\n}: {\n name: string\n description: string\n examples?: string\n args?: Args\n /** Opens a block a later `logOutro` closes, for a command that keeps running. */\n block?: boolean\n /** The command body, given the options built from its flags. */\n action: (options: StudioOptions) => Promise<unknown>\n}) {\n return define({\n ...definition,\n toKebab: true,\n async run({ values }) {\n const { runStudio } = await import('../../runners/studio/run.ts')\n await runStudio(values as StudioValues, action, { block })\n },\n })\n}\n","import { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\nimport { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'connect',\n description: 'Connect this project to Kubb Studio and generate from the browser.',\n examples: [\n 'kubb studio connect',\n 'kubb studio connect --allow-read',\n 'kubb studio connect --allow-write --allow-exec',\n 'kubb studio connect --url http://localhost:3000',\n ].join('\\n'),\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n open: {\n type: 'boolean',\n description: 'Open the approval page in a browser while pairing',\n default: true,\n negatable: true,\n },\n ...logLevelArg,\n },\n block: true,\n async action(options) {\n const { connect } = await import('../../runners/studio/run.ts')\n await connect(options)\n },\n})\n","import { command as connectCommand } from './connect.ts'\nimport { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'login',\n description: 'Pair this machine with Kubb Studio without connecting.',\n examples: ['kubb studio login', 'kubb studio login --url http://localhost:3000'].join('\\n'),\n args: connectCommand.args,\n async action(options) {\n const { login } = await import('../../runners/studio/run.ts')\n await login(options)\n },\n})\n","import { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'logout',\n description: 'Forget the stored Kubb Studio token.',\n examples: 'kubb studio logout',\n args: {},\n async action() {\n const { stopWorker } = await import('../../runners/studio/background.ts')\n const { clearCredentials } = await import('../../runners/studio/credentials.ts')\n await stopWorker()\n await clearCredentials()\n console.log('Signed out of Kubb Studio.')\n },\n})\n","import path from 'node:path'\nimport process from 'node:process'\nimport { findConfigFile } from '@internals/shared'\nimport { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'permissions',\n description: 'Change what Kubb Studio may do in this project.',\n examples: 'kubb studio permissions',\n args: {},\n async action(options) {\n const { readCredentials } = await import('../../runners/studio/credentials.ts')\n const { resolvePermissions } = await import('../../runners/studio/run.ts')\n const { canUseTTY } = await import('../../utils/env.ts')\n\n const credentials = await readCredentials()\n if (!credentials) throw new Error('This project is not paired with Kubb Studio. Run `kubb studio` first.')\n if (!canUseTTY()) throw new Error('Changing permissions needs an interactive terminal.')\n\n const configFile = findConfigFile()\n await resolvePermissions(options, credentials, configFile && path.relative(process.cwd(), configFile), { edit: true })\n console.log(\n 'Permissions saved. A running connection keeps the old ones until you restart it: press Ctrl+C and run `kubb studio` again, or run `kubb studio stop`, then `kubb studio start`. Keep `--url` and `--config`, and leave out the `--allow-*` flag of any permission you turned off, since a flag grants it anyway.',\n )\n },\n})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs } from '../shared.ts'\n\nexport const command = define({\n name: 'snapshot',\n description: 'Generate and publish a Kubb Studio snapshot from CI.',\n examples: ['kubb studio snapshot', 'kubb studio snapshot --json'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n id: {\n type: 'string',\n description: 'Stable identity for the CI agent, such as a pull request. Auto-detected on GitHub Actions, GitLab CI, Bitbucket Pipelines and CircleCI',\n },\n baseId: {\n type: 'string',\n description:\n \"Identity of another CI agent, such as the base branch's, to also compare this snapshot with. Auto-detected on GitHub pull requests and GitLab merge requests\",\n toKebab: true,\n },\n name: {\n type: 'string',\n description: 'Package name for the generated tarball. Defaults to the name in package.json',\n },\n packageVersion: {\n type: 'string',\n description: 'Package version for the generated tarball. Defaults to the version in package.json',\n toKebab: true,\n },\n json: {\n type: 'boolean',\n description: 'Print the result as one JSON object instead of a summary',\n default: false,\n },\n ...logLevelArg,\n },\n async run(ctx) {\n const { runner } = await import('../../runners/studio/snapshot.ts')\n await runner(ctx)\n },\n})\n","import { define } from 'gunshi'\nimport { command as connectCommand } from './connect.ts'\nimport { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'start',\n description: 'Keep this project connected to Kubb Studio in the background.',\n args: connectCommand.args,\n async action(options) {\n const { startWorker } = await import('../../runners/studio/background.ts')\n await startWorker(options)\n },\n})\n\nexport const stopCommand = define({\n name: 'stop',\n description: \"Stop this project's background connection and keep its pairing.\",\n async run() {\n const { stopWorker } = await import('../../runners/studio/background.ts')\n await stopWorker()\n console.log('Background connection stopped.')\n },\n})\n","import process from 'node:process'\nimport { studioConnectionArgs } from '../shared.ts'\nimport { studioCommand } from './studioCommand.ts'\n\nexport const command = studioCommand({\n name: 'status',\n description: 'Show the project worker, Kubb Studio pairing, and saved permissions.',\n examples: 'kubb studio status',\n args: { url: studioConnectionArgs.url },\n async action(options) {\n const { getWorkerLogPath, getWorkerStatus } = await import('../../runners/studio/background.ts')\n const { readCredentials } = await import('../../runners/studio/credentials.ts')\n const { formatStatus } = await import('../../runners/studio/status.ts')\n\n const [worker, credentials] = await Promise.all([getWorkerStatus(), readCredentials()])\n console.log(\n ['', ...formatStatus({ studioUrl: options.studioUrl, credentials, worker, project: process.cwd(), logPath: getWorkerLogPath() }), ''].join('\\n'),\n )\n },\n})\n","import { define } from 'gunshi'\nimport { command as connectCommand } from './connect.ts'\nimport { command as loginCommand } from './login.ts'\nimport { command as logoutCommand } from './logout.ts'\nimport { command as permissionsCommand } from './permissions.ts'\nimport { command as snapshotCommand } from './snapshot.ts'\nimport { command as startCommand, stopCommand } from './background.ts'\nimport { command as statusCommand } from './status.ts'\n\nexport const command = define({\n ...connectCommand,\n name: 'studio',\n description: 'Connect this project to Kubb Studio, or manage its pairing and snapshots.',\n examples: [\n 'kubb studio',\n 'kubb studio --allow-read',\n 'kubb studio login',\n 'kubb studio status',\n 'kubb studio permissions',\n 'kubb studio logout',\n 'kubb studio snapshot',\n ].join('\\n'),\n subCommands: {\n start: startCommand,\n stop: stopCommand,\n connect: connectCommand,\n login: loginCommand,\n logout: logoutCommand,\n status: statusCommand,\n permissions: permissionsCommand,\n snapshot: snapshotCommand,\n },\n})\n\n/**\n * Sends `kubb studio --flag value` to `kubb studio connect`, the same runner. gunshi picks a\n * subcommand from the first token that is not a flag, so `--url http://…` would read the URL as one.\n */\nexport function routeStudioFlags(args: Array<string>): Array<string> {\n const [name, next] = args\n if (name !== 'studio' || !next?.startsWith('-') || next === '--help' || next === '-h') return args\n\n return ['studio', 'connect', ...args.slice(1)]\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import "./rolldown-runtime-CRm0XQPb.js";
2
- import { t as connect } from "./run-9fs2T2Je.js";
3
- import { r as serveWorker, t as getWorkerLogPath } from "./background-DlK0by5c.js";
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ import { t as connect } from "./run-DUwX6Icx.js";
3
+ import { r as serveWorker, t as getWorkerLogPath } from "./background-BJCuXYuB.js";
4
4
  import { format } from "node:util";
5
5
  import { appendFileSync, statSync, writeFileSync } from "node:fs";
6
- //#region src/runners/studio/worker.ts
6
+ // src/runners/studio/worker.ts
7
7
  process.title = "Kubb";
8
8
  const logPath = getWorkerLogPath();
9
9
  const tokens = [process.env.KUBB_TOKEN];
@@ -51,7 +51,6 @@ if (!("existing" in control)) try {
51
51
  } finally {
52
52
  await control.close();
53
53
  }
54
- //#endregion
55
54
  export {};
56
55
 
57
56
  //# sourceMappingURL=studioWorker.js.map
@@ -1,8 +1,8 @@
1
- import "./rolldown-runtime-CRm0XQPb.js";
2
- import { a as getElapsedMs, i as formatMs } from "./Telemetry-DrnGartf.js";
3
- import { a as logOutro } from "./text-CL6N6yPS.js";
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ import { n as getElapsedMs, t as formatMs } from "./time-C-wU7VhC.js";
3
+ import { r as logOutro } from "./intro-9PB8sE8z.js";
4
4
  import { styleText } from "node:util";
5
- //#region src/ui/summary.ts
5
+ // src/ui/summary.ts
6
6
  /**
7
7
  * Finishes a command with its outcome and duration before the labeled details.
8
8
  * A command with prompts closes its existing block; validation writes a standalone summary.
@@ -35,7 +35,6 @@ function logCommandSummary({ title, status, hrStart, lines, block = false }) {
35
35
  }
36
36
  console.log(summary);
37
37
  }
38
- //#endregion
39
38
  export { logCommandSummary as t };
40
39
 
41
- //# sourceMappingURL=summary-DDnI70tn.js.map
40
+ //# sourceMappingURL=summary-CbmQKA8l.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary-DDnI70tn.js","names":[],"sources":["../src/ui/summary.ts"],"sourcesContent":["import { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport { logOutro } from './intro.ts'\n\n/**\n * Finishes a command with its outcome and duration before the labeled details.\n * A command with prompts closes its existing block; validation writes a standalone summary.\n */\nexport function logCommandSummary({\n title,\n status,\n hrStart,\n lines,\n block = false,\n}: {\n title: string\n status: 'success' | 'failed' | 'warning' | 'planned' | 'canceled'\n hrStart: [number, number]\n lines: ReadonlyArray<string>\n block?: boolean\n}): void {\n const colors = { success: 'green', failed: 'red', warning: 'yellow', planned: 'cyan', canceled: 'dim' } as const\n const symbols = { success: '✓', failed: '✗', warning: '!', planned: '◇', canceled: '○' } as const\n const summary = [`${styleText(colors[status], `${symbols[status]} ${title}`)} ${styleText('dim', formatMs(getElapsedMs(hrStart)))}`, '', ...lines].join('\\n')\n if (block) {\n logOutro(summary)\n return\n }\n if (status === 'failed') {\n console.error(summary)\n return\n }\n console.log(summary)\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB,EAChC,OACA,QACA,SACA,OACA,QAAQ,SAOD;CAGP,MAAM,UAAU;EAAC,GAAG,UAAU;GAFb,SAAS;GAAS,QAAQ;GAAO,SAAS;GAAU,SAAS;GAAQ,UAAU;EAE7D,EAAE,SAAS,GAAG;GAD/B,SAAS;GAAK,QAAQ;GAAK,SAAS;GAAK,SAAS;GAAK,UAAU;EAC5B,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,UAAU,OAAO,SAAS,aAAa,OAAO,CAAC,CAAC;EAAK;EAAI,GAAG;CAAK,CAAC,CAAC,KAAK,IAAI;CAC7J,IAAI,OAAO;EACT,SAAS,OAAO;EAChB;CACF;CACA,IAAI,WAAW,UAAU;EACvB,QAAQ,MAAM,OAAO;EACrB;CACF;CACA,QAAQ,IAAI,OAAO;AACrB"}
1
+ {"version":3,"file":"summary-CbmQKA8l.js","names":[],"sources":["../src/ui/summary.ts"],"sourcesContent":["import { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport { logOutro } from './intro.ts'\n\n/**\n * Finishes a command with its outcome and duration before the labeled details.\n * A command with prompts closes its existing block; validation writes a standalone summary.\n */\nexport function logCommandSummary({\n title,\n status,\n hrStart,\n lines,\n block = false,\n}: {\n title: string\n status: 'success' | 'failed' | 'warning' | 'planned' | 'canceled'\n hrStart: [number, number]\n lines: ReadonlyArray<string>\n block?: boolean\n}): void {\n const colors = { success: 'green', failed: 'red', warning: 'yellow', planned: 'cyan', canceled: 'dim' } as const\n const symbols = { success: '✓', failed: '✗', warning: '!', planned: '◇', canceled: '○' } as const\n const summary = [`${styleText(colors[status], `${symbols[status]} ${title}`)} ${styleText('dim', formatMs(getElapsedMs(hrStart)))}`, '', ...lines].join('\\n')\n if (block) {\n logOutro(summary)\n return\n }\n if (status === 'failed') {\n console.error(summary)\n return\n }\n console.log(summary)\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB,EAChC,OACA,QACA,SACA,OACA,QAAQ,SAOD;CAGP,MAAM,UAAU;EAAC,GAAG,UAAU;GAFb,SAAS;GAAS,QAAQ;GAAO,SAAS;GAAU,SAAS;GAAQ,UAAU;EAE7D,EAAE,SAAS,GAAG;GAD/B,SAAS;GAAK,QAAQ;GAAK,SAAS;GAAK,SAAS;GAAK,UAAU;EAC5B,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,UAAU,OAAO,SAAS,aAAa,OAAO,CAAC,CAAC;EAAK;EAAI,GAAG;CAAK,CAAC,CAAC,KAAK,IAAI;CAC7J,IAAI,OAAO;EACT,SAAS,OAAO;EAChB;CACF;CACA,IAAI,WAAW,UAAU;EACvB,QAAQ,MAAM,OAAO;EACrB;CACF;CACA,QAAQ,IAAI,OAAO;AACrB"}
@@ -1,8 +1,8 @@
1
- require("./rolldown-runtime-CPE0t6oh.cjs");
2
- const require_Telemetry = require("./Telemetry-B5V_ufmv.cjs");
3
- const require_text = require("./text-DrsG1EDN.cjs");
1
+ require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ const require_time = require("./time-3BKoci3G.cjs");
3
+ const require_intro = require("./intro-YPaf1Imr.cjs");
4
4
  let node_util = require("node:util");
5
- //#region src/ui/summary.ts
5
+ // src/ui/summary.ts
6
6
  /**
7
7
  * Finishes a command with its outcome and duration before the labeled details.
8
8
  * A command with prompts closes its existing block; validation writes a standalone summary.
@@ -21,12 +21,12 @@ function logCommandSummary({ title, status, hrStart, lines, block = false }) {
21
21
  warning: "!",
22
22
  planned: "◇",
23
23
  canceled: "○"
24
- }[status]} ${title}`)} ${(0, node_util.styleText)("dim", require_Telemetry.formatMs(require_Telemetry.getElapsedMs(hrStart)))}`,
24
+ }[status]} ${title}`)} ${(0, node_util.styleText)("dim", require_time.formatMs(require_time.getElapsedMs(hrStart)))}`,
25
25
  "",
26
26
  ...lines
27
27
  ].join("\n");
28
28
  if (block) {
29
- require_text.logOutro(summary);
29
+ require_intro.logOutro(summary);
30
30
  return;
31
31
  }
32
32
  if (status === "failed") {
@@ -35,7 +35,6 @@ function logCommandSummary({ title, status, hrStart, lines, block = false }) {
35
35
  }
36
36
  console.log(summary);
37
37
  }
38
- //#endregion
39
38
  Object.defineProperty(exports, "logCommandSummary", {
40
39
  enumerable: true,
41
40
  get: function() {
@@ -43,4 +42,4 @@ Object.defineProperty(exports, "logCommandSummary", {
43
42
  }
44
43
  });
45
44
 
46
- //# sourceMappingURL=summary-1DCwzWEU.cjs.map
45
+ //# sourceMappingURL=summary-Clvl5Hxs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary-1DCwzWEU.cjs","names":["styleText","formatMs","getElapsedMs"],"sources":["../src/ui/summary.ts"],"sourcesContent":["import { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport { logOutro } from './intro.ts'\n\n/**\n * Finishes a command with its outcome and duration before the labeled details.\n * A command with prompts closes its existing block; validation writes a standalone summary.\n */\nexport function logCommandSummary({\n title,\n status,\n hrStart,\n lines,\n block = false,\n}: {\n title: string\n status: 'success' | 'failed' | 'warning' | 'planned' | 'canceled'\n hrStart: [number, number]\n lines: ReadonlyArray<string>\n block?: boolean\n}): void {\n const colors = { success: 'green', failed: 'red', warning: 'yellow', planned: 'cyan', canceled: 'dim' } as const\n const symbols = { success: '✓', failed: '✗', warning: '!', planned: '◇', canceled: '○' } as const\n const summary = [`${styleText(colors[status], `${symbols[status]} ${title}`)} ${styleText('dim', formatMs(getElapsedMs(hrStart)))}`, '', ...lines].join('\\n')\n if (block) {\n logOutro(summary)\n return\n }\n if (status === 'failed') {\n console.error(summary)\n return\n }\n console.log(summary)\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB,EAChC,OACA,QACA,SACA,OACA,QAAQ,SAOD;CAGP,MAAM,UAAU;EAAC,IAAA,GAAGA,UAAAA,UAAAA,CAAU;GAFb,SAAS;GAAS,QAAQ;GAAO,SAAS;GAAU,SAAS;GAAQ,UAAU;EAE7D,EAAE,SAAS,GAAG;GAD/B,SAAS;GAAK,QAAQ;GAAK,SAAS;GAAK,SAAS;GAAK,UAAU;EAC5B,EAAE,QAAQ,GAAG,OAAO,EAAE,KAAA,GAAIA,UAAAA,UAAAA,CAAU,OAAOC,kBAAAA,SAASC,kBAAAA,aAAa,OAAO,CAAC,CAAC;EAAK;EAAI,GAAG;CAAK,CAAC,CAAC,KAAK,IAAI;CAC7J,IAAI,OAAO;EACT,aAAA,SAAS,OAAO;EAChB;CACF;CACA,IAAI,WAAW,UAAU;EACvB,QAAQ,MAAM,OAAO;EACrB;CACF;CACA,QAAQ,IAAI,OAAO;AACrB"}
1
+ {"version":3,"file":"summary-Clvl5Hxs.cjs","names":["styleText","formatMs","getElapsedMs"],"sources":["../src/ui/summary.ts"],"sourcesContent":["import { styleText } from 'node:util'\nimport { formatMs, getElapsedMs } from '@internals/utils'\nimport { logOutro } from './intro.ts'\n\n/**\n * Finishes a command with its outcome and duration before the labeled details.\n * A command with prompts closes its existing block; validation writes a standalone summary.\n */\nexport function logCommandSummary({\n title,\n status,\n hrStart,\n lines,\n block = false,\n}: {\n title: string\n status: 'success' | 'failed' | 'warning' | 'planned' | 'canceled'\n hrStart: [number, number]\n lines: ReadonlyArray<string>\n block?: boolean\n}): void {\n const colors = { success: 'green', failed: 'red', warning: 'yellow', planned: 'cyan', canceled: 'dim' } as const\n const symbols = { success: '✓', failed: '✗', warning: '!', planned: '◇', canceled: '○' } as const\n const summary = [`${styleText(colors[status], `${symbols[status]} ${title}`)} ${styleText('dim', formatMs(getElapsedMs(hrStart)))}`, '', ...lines].join('\\n')\n if (block) {\n logOutro(summary)\n return\n }\n if (status === 'failed') {\n console.error(summary)\n return\n }\n console.log(summary)\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB,EAChC,OACA,QACA,SACA,OACA,QAAQ,SAOD;CAGP,MAAM,UAAU;EAAC,IAAA,GAAGA,UAAAA,UAAAA,CAAU;GAFb,SAAS;GAAS,QAAQ;GAAO,SAAS;GAAU,SAAS;GAAQ,UAAU;EAE7D,EAAE,SAAS,GAAG;GAD/B,SAAS;GAAK,QAAQ;GAAK,SAAS;GAAK,SAAS;GAAK,UAAU;EAC5B,EAAE,QAAQ,GAAG,OAAO,EAAE,KAAA,GAAIA,UAAAA,UAAAA,CAAU,OAAOC,aAAAA,SAASC,aAAAA,aAAa,OAAO,CAAC,CAAC;EAAK;EAAI,GAAG;CAAK,CAAC,CAAC,KAAK,IAAI;CAC7J,IAAI,OAAO;EACT,cAAA,SAAS,OAAO;EAChB;CACF;CACA,IAAI,WAAW,UAAU;EACvB,QAAQ,MAAM,OAAO;EACrB;CACF;CACA,QAAQ,IAAI,OAAO;AACrB"}
@@ -0,0 +1,15 @@
1
+ require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ // src/ui/table.ts
3
+ /** Pads each column to its widest cell, one line per row. */
4
+ function formatTable(rows) {
5
+ const widths = Array.from({ length: Math.max(0, ...rows.map((row) => row.length)) }, (_, index) => Math.max(...rows.map((row) => row[index]?.length ?? 0)));
6
+ return rows.map((row) => row.map((cell, index) => cell.padEnd(widths[index])).join(" ").trimEnd());
7
+ }
8
+ Object.defineProperty(exports, "formatTable", {
9
+ enumerable: true,
10
+ get: function() {
11
+ return formatTable;
12
+ }
13
+ });
14
+
15
+ //# sourceMappingURL=table-BlRe9YTZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-BlRe9YTZ.cjs","names":[],"sources":["../src/ui/table.ts"],"sourcesContent":["/** Pads each column to its widest cell, one line per row. */\nexport function formatTable(rows: ReadonlyArray<ReadonlyArray<string>>): Array<string> {\n const widths = Array.from({ length: Math.max(0, ...rows.map((row) => row.length)) }, (_, index) => Math.max(...rows.map((row) => row[index]?.length ?? 0)))\n return rows.map((row) =>\n row\n .map((cell, index) => cell.padEnd(widths[index]!))\n .join(' ')\n .trimEnd(),\n )\n}\n"],"mappings":";;;AACA,SAAgB,YAAY,MAA2D;CACrF,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAC1J,OAAO,KAAK,KAAK,QACf,IACG,KAAK,MAAM,UAAU,KAAK,OAAO,OAAO,MAAO,CAAC,CAAC,CACjD,KAAK,IAAI,CAAC,CACV,QAAQ,CACb;AACF"}
@@ -0,0 +1,10 @@
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ // src/ui/table.ts
3
+ /** Pads each column to its widest cell, one line per row. */
4
+ function formatTable(rows) {
5
+ const widths = Array.from({ length: Math.max(0, ...rows.map((row) => row.length)) }, (_, index) => Math.max(...rows.map((row) => row[index]?.length ?? 0)));
6
+ return rows.map((row) => row.map((cell, index) => cell.padEnd(widths[index])).join(" ").trimEnd());
7
+ }
8
+ export { formatTable as t };
9
+
10
+ //# sourceMappingURL=table-CR7iZJGo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-CR7iZJGo.js","names":[],"sources":["../src/ui/table.ts"],"sourcesContent":["/** Pads each column to its widest cell, one line per row. */\nexport function formatTable(rows: ReadonlyArray<ReadonlyArray<string>>): Array<string> {\n const widths = Array.from({ length: Math.max(0, ...rows.map((row) => row.length)) }, (_, index) => Math.max(...rows.map((row) => row[index]?.length ?? 0)))\n return rows.map((row) =>\n row\n .map((cell, index) => cell.padEnd(widths[index]!))\n .join(' ')\n .trimEnd(),\n )\n}\n"],"mappings":";;;AACA,SAAgB,YAAY,MAA2D;CACrF,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAC1J,OAAO,KAAK,KAAK,QACf,IACG,KAAK,MAAM,UAAU,KAAK,OAAO,OAAO,MAAO,CAAC,CAAC,CACjD,KAAK,IAAI,CAAC,CACV,QAAQ,CACb;AACF"}
@@ -0,0 +1,13 @@
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ // src/ui/text.ts
3
+ /** Counts a noun, so a message never reads `1 files`. */
4
+ function pluralize(count, noun) {
5
+ return `${count} ${count === 1 ? noun : `${noun}s`}`;
6
+ }
7
+ /** The flag that grants a permission, such as `--allow-read-ast`. */
8
+ function toPermissionFlag(key) {
9
+ return `--${key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`;
10
+ }
11
+ export { toPermissionFlag as n, pluralize as t };
12
+
13
+ //# sourceMappingURL=text-BmiI4s6N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-BmiI4s6N.js","names":[],"sources":["../src/ui/text.ts"],"sourcesContent":["/** Counts a noun, so a message never reads `1 files`. */\nexport function pluralize(count: number, noun: string): string {\n return `${count} ${count === 1 ? noun : `${noun}s`}`\n}\n\n/** The flag that grants a permission, such as `--allow-read-ast`. */\nexport function toPermissionFlag(key: string): string {\n return `--${key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`\n}\n"],"mappings":";;;AACA,SAAgB,UAAU,OAAe,MAAsB;CAC7D,OAAO,GAAG,MAAM,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK;AAClD;;AAGA,SAAgB,iBAAiB,KAAqB;CACpD,OAAO,KAAK,IAAI,QAAQ,WAAW,SAAS,IAAI,KAAK,YAAY,GAAG;AACtE"}
@@ -0,0 +1,24 @@
1
+ require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ // src/ui/text.ts
3
+ /** Counts a noun, so a message never reads `1 files`. */
4
+ function pluralize(count, noun) {
5
+ return `${count} ${count === 1 ? noun : `${noun}s`}`;
6
+ }
7
+ /** The flag that grants a permission, such as `--allow-read-ast`. */
8
+ function toPermissionFlag(key) {
9
+ return `--${key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`;
10
+ }
11
+ Object.defineProperty(exports, "pluralize", {
12
+ enumerable: true,
13
+ get: function() {
14
+ return pluralize;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, "toPermissionFlag", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return toPermissionFlag;
21
+ }
22
+ });
23
+
24
+ //# sourceMappingURL=text-Ep3AulAS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-Ep3AulAS.cjs","names":[],"sources":["../src/ui/text.ts"],"sourcesContent":["/** Counts a noun, so a message never reads `1 files`. */\nexport function pluralize(count: number, noun: string): string {\n return `${count} ${count === 1 ? noun : `${noun}s`}`\n}\n\n/** The flag that grants a permission, such as `--allow-read-ast`. */\nexport function toPermissionFlag(key: string): string {\n return `--${key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`\n}\n"],"mappings":";;;AACA,SAAgB,UAAU,OAAe,MAAsB;CAC7D,OAAO,GAAG,MAAM,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK;AAClD;;AAGA,SAAgB,iBAAiB,KAAqB;CACpD,OAAO,KAAK,IAAI,QAAQ,WAAW,SAAS,IAAI,KAAK,YAAY,GAAG;AACtE"}
@@ -0,0 +1,82 @@
1
+ require("./rolldown-runtime-C3-Zg-KD.cjs");
2
+ // ../../internals/utils/src/runtime.ts
3
+ const isBun = typeof Bun !== "undefined";
4
+ const isDeno = "Deno" in globalThis;
5
+ /**
6
+ * The JavaScript runtime executing the current process: its name, version and whether it is Bun.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * runtime.name // 'bun' when run with `bun kubb`, 'node' otherwise
11
+ * ```
12
+ */
13
+ const runtime = {
14
+ isBun,
15
+ ...detect()
16
+ };
17
+ function detect() {
18
+ if (isBun) return {
19
+ name: "bun",
20
+ version: process.versions.bun ?? ""
21
+ };
22
+ if (isDeno) return {
23
+ name: "deno",
24
+ version: globalThis.Deno?.version?.deno ?? ""
25
+ };
26
+ return {
27
+ name: "node",
28
+ version: process.versions?.node ?? ""
29
+ };
30
+ }
31
+ // ../../internals/utils/src/time.ts
32
+ /**
33
+ * Calculates elapsed time in milliseconds from a high-resolution `process.hrtime` start time.
34
+ * Rounds to 2 decimal places for sub-millisecond precision without noise.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * const start = process.hrtime()
39
+ * doWork()
40
+ * getElapsedMs(start) // 42.35
41
+ * ```
42
+ */
43
+ function getElapsedMs(hrStart) {
44
+ const [seconds, nanoseconds] = process.hrtime(hrStart);
45
+ const ms = seconds * 1e3 + nanoseconds / 1e6;
46
+ return Math.round(ms * 100) / 100;
47
+ }
48
+ /**
49
+ * Converts a millisecond duration into a human-readable string (`ms`, `s`, or `m s`).
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * formatMs(250) // '250ms'
54
+ * formatMs(1500) // '1.50s'
55
+ * formatMs(90000) // '1m 30.0s'
56
+ * ```
57
+ */
58
+ function formatMs(ms) {
59
+ if (ms >= 6e4) return `${Math.floor(ms / 6e4)}m ${(ms % 6e4 / 1e3).toFixed(1)}s`;
60
+ if (ms >= 1e3) return `${(ms / 1e3).toFixed(2)}s`;
61
+ return `${Math.round(ms)}ms`;
62
+ }
63
+ Object.defineProperty(exports, "formatMs", {
64
+ enumerable: true,
65
+ get: function() {
66
+ return formatMs;
67
+ }
68
+ });
69
+ Object.defineProperty(exports, "getElapsedMs", {
70
+ enumerable: true,
71
+ get: function() {
72
+ return getElapsedMs;
73
+ }
74
+ });
75
+ Object.defineProperty(exports, "runtime", {
76
+ enumerable: true,
77
+ get: function() {
78
+ return runtime;
79
+ }
80
+ });
81
+
82
+ //# sourceMappingURL=time-3BKoci3G.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-3BKoci3G.cjs","names":[],"sources":["../../../internals/utils/src/runtime.ts","../../../internals/utils/src/time.ts"],"sourcesContent":["// Bun polyfills `process.versions.node`, so detection keys off the globals instead.\nconst isBun = typeof Bun !== 'undefined'\nconst isDeno = 'Deno' in globalThis\n\n/**\n * The JavaScript runtime executing the current process: its name, version and whether it is Bun.\n *\n * @example\n * ```ts\n * runtime.name // 'bun' when run with `bun kubb`, 'node' otherwise\n * ```\n */\nexport const runtime = { isBun, ...detect() } as const\n\nfunction detect(): { name: 'bun' | 'deno' | 'node'; version: string } {\n if (isBun) return { name: 'bun', version: process.versions.bun ?? '' }\n if (isDeno) return { name: 'deno', version: (globalThis as { Deno?: { version?: { deno?: string } } }).Deno?.version?.deno ?? '' }\n return { name: 'node', version: process.versions?.node ?? '' }\n}\n","/**\n * Calculates elapsed time in milliseconds from a high-resolution `process.hrtime` start time.\n * Rounds to 2 decimal places for sub-millisecond precision without noise.\n *\n * @example\n * ```ts\n * const start = process.hrtime()\n * doWork()\n * getElapsedMs(start) // 42.35\n * ```\n */\nexport function getElapsedMs(hrStart: [number, number]): number {\n const [seconds, nanoseconds] = process.hrtime(hrStart)\n const ms = seconds * 1000 + nanoseconds / 1e6\n return Math.round(ms * 100) / 100\n}\n\n/**\n * Converts a millisecond duration into a human-readable string (`ms`, `s`, or `m s`).\n *\n * @example\n * ```ts\n * formatMs(250) // '250ms'\n * formatMs(1500) // '1.50s'\n * formatMs(90000) // '1m 30.0s'\n * ```\n */\nexport function formatMs(ms: number): string {\n if (ms >= 60000) {\n const mins = Math.floor(ms / 60000)\n const secs = ((ms % 60000) / 1000).toFixed(1)\n return `${mins}m ${secs}s`\n }\n\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${Math.round(ms)}ms`\n}\n"],"mappings":";;AACA,MAAM,QAAQ,OAAO,QAAQ;AAC7B,MAAM,SAAS,UAAU;;;;;;;;;AAUzB,MAAa,UAAU;CAAE;CAAO,GAAG,OAAO;AAAE;AAE5C,SAAS,SAA6D;CACpE,IAAI,OAAO,OAAO;EAAE,MAAM;EAAO,SAAS,QAAQ,SAAS,OAAO;CAAG;CACrE,IAAI,QAAQ,OAAO;EAAE,MAAM;EAAQ,SAAU,WAA0D,MAAM,SAAS,QAAQ;CAAG;CACjI,OAAO;EAAE,MAAM;EAAQ,SAAS,QAAQ,UAAU,QAAQ;CAAG;AAC/D;;;;;;;;;;;;;ACPA,SAAgB,aAAa,SAAmC;CAC9D,MAAM,CAAC,SAAS,eAAe,QAAQ,OAAO,OAAO;CACrD,MAAM,KAAK,UAAU,MAAO,cAAc;CAC1C,OAAO,KAAK,MAAM,KAAK,GAAG,IAAI;AAChC;;;;;;;;;;;AAYA,SAAgB,SAAS,IAAoB;CAC3C,IAAI,MAAM,KAGR,OAAO,GAFM,KAAK,MAAM,KAAK,GAEhB,EAAE,KADA,KAAK,MAAS,IAAA,CAAM,QAAQ,CACrB,EAAE;CAG1B,IAAI,MAAM,KACR,OAAO,IAAI,KAAK,IAAA,CAAM,QAAQ,CAAC,EAAE;CAEnC,OAAO,GAAG,KAAK,MAAM,EAAE,EAAE;AAC3B"}
@@ -0,0 +1,65 @@
1
+ import "./rolldown-runtime-xo6NMXYd.js";
2
+ // ../../internals/utils/src/runtime.ts
3
+ const isBun = typeof Bun !== "undefined";
4
+ const isDeno = "Deno" in globalThis;
5
+ /**
6
+ * The JavaScript runtime executing the current process: its name, version and whether it is Bun.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * runtime.name // 'bun' when run with `bun kubb`, 'node' otherwise
11
+ * ```
12
+ */
13
+ const runtime = {
14
+ isBun,
15
+ ...detect()
16
+ };
17
+ function detect() {
18
+ if (isBun) return {
19
+ name: "bun",
20
+ version: process.versions.bun ?? ""
21
+ };
22
+ if (isDeno) return {
23
+ name: "deno",
24
+ version: globalThis.Deno?.version?.deno ?? ""
25
+ };
26
+ return {
27
+ name: "node",
28
+ version: process.versions?.node ?? ""
29
+ };
30
+ }
31
+ // ../../internals/utils/src/time.ts
32
+ /**
33
+ * Calculates elapsed time in milliseconds from a high-resolution `process.hrtime` start time.
34
+ * Rounds to 2 decimal places for sub-millisecond precision without noise.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * const start = process.hrtime()
39
+ * doWork()
40
+ * getElapsedMs(start) // 42.35
41
+ * ```
42
+ */
43
+ function getElapsedMs(hrStart) {
44
+ const [seconds, nanoseconds] = process.hrtime(hrStart);
45
+ const ms = seconds * 1e3 + nanoseconds / 1e6;
46
+ return Math.round(ms * 100) / 100;
47
+ }
48
+ /**
49
+ * Converts a millisecond duration into a human-readable string (`ms`, `s`, or `m s`).
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * formatMs(250) // '250ms'
54
+ * formatMs(1500) // '1.50s'
55
+ * formatMs(90000) // '1m 30.0s'
56
+ * ```
57
+ */
58
+ function formatMs(ms) {
59
+ if (ms >= 6e4) return `${Math.floor(ms / 6e4)}m ${(ms % 6e4 / 1e3).toFixed(1)}s`;
60
+ if (ms >= 1e3) return `${(ms / 1e3).toFixed(2)}s`;
61
+ return `${Math.round(ms)}ms`;
62
+ }
63
+ export { getElapsedMs as n, runtime as r, formatMs as t };
64
+
65
+ //# sourceMappingURL=time-C-wU7VhC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-C-wU7VhC.js","names":[],"sources":["../../../internals/utils/src/runtime.ts","../../../internals/utils/src/time.ts"],"sourcesContent":["// Bun polyfills `process.versions.node`, so detection keys off the globals instead.\nconst isBun = typeof Bun !== 'undefined'\nconst isDeno = 'Deno' in globalThis\n\n/**\n * The JavaScript runtime executing the current process: its name, version and whether it is Bun.\n *\n * @example\n * ```ts\n * runtime.name // 'bun' when run with `bun kubb`, 'node' otherwise\n * ```\n */\nexport const runtime = { isBun, ...detect() } as const\n\nfunction detect(): { name: 'bun' | 'deno' | 'node'; version: string } {\n if (isBun) return { name: 'bun', version: process.versions.bun ?? '' }\n if (isDeno) return { name: 'deno', version: (globalThis as { Deno?: { version?: { deno?: string } } }).Deno?.version?.deno ?? '' }\n return { name: 'node', version: process.versions?.node ?? '' }\n}\n","/**\n * Calculates elapsed time in milliseconds from a high-resolution `process.hrtime` start time.\n * Rounds to 2 decimal places for sub-millisecond precision without noise.\n *\n * @example\n * ```ts\n * const start = process.hrtime()\n * doWork()\n * getElapsedMs(start) // 42.35\n * ```\n */\nexport function getElapsedMs(hrStart: [number, number]): number {\n const [seconds, nanoseconds] = process.hrtime(hrStart)\n const ms = seconds * 1000 + nanoseconds / 1e6\n return Math.round(ms * 100) / 100\n}\n\n/**\n * Converts a millisecond duration into a human-readable string (`ms`, `s`, or `m s`).\n *\n * @example\n * ```ts\n * formatMs(250) // '250ms'\n * formatMs(1500) // '1.50s'\n * formatMs(90000) // '1m 30.0s'\n * ```\n */\nexport function formatMs(ms: number): string {\n if (ms >= 60000) {\n const mins = Math.floor(ms / 60000)\n const secs = ((ms % 60000) / 1000).toFixed(1)\n return `${mins}m ${secs}s`\n }\n\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${Math.round(ms)}ms`\n}\n"],"mappings":";;AACA,MAAM,QAAQ,OAAO,QAAQ;AAC7B,MAAM,SAAS,UAAU;;;;;;;;;AAUzB,MAAa,UAAU;CAAE;CAAO,GAAG,OAAO;AAAE;AAE5C,SAAS,SAA6D;CACpE,IAAI,OAAO,OAAO;EAAE,MAAM;EAAO,SAAS,QAAQ,SAAS,OAAO;CAAG;CACrE,IAAI,QAAQ,OAAO;EAAE,MAAM;EAAQ,SAAU,WAA0D,MAAM,SAAS,QAAQ;CAAG;CACjI,OAAO;EAAE,MAAM;EAAQ,SAAS,QAAQ,UAAU,QAAQ;CAAG;AAC/D;;;;;;;;;;;;;ACPA,SAAgB,aAAa,SAAmC;CAC9D,MAAM,CAAC,SAAS,eAAe,QAAQ,OAAO,OAAO;CACrD,MAAM,KAAK,UAAU,MAAO,cAAc;CAC1C,OAAO,KAAK,MAAM,KAAK,GAAG,IAAI;AAChC;;;;;;;;;;;AAYA,SAAgB,SAAS,IAAoB;CAC3C,IAAI,MAAM,KAGR,OAAO,GAFM,KAAK,MAAM,KAAK,GAEhB,EAAE,KADA,KAAK,MAAS,IAAA,CAAM,QAAQ,CACrB,EAAE;CAG1B,IAAI,MAAM,KACR,OAAO,IAAI,KAAK,IAAA,CAAM,QAAQ,CAAC,EAAE;CAEnC,OAAO,GAAG,KAAK,MAAM,EAAE,EAAE;AAC3B"}