@kubb/cli 5.3.12 → 5.3.13

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 (58) hide show
  1. package/dist/{connect-REsegTXc.cjs → connect-BtLCM-Mv.cjs} +2 -2
  2. package/dist/{connect-REsegTXc.cjs.map → connect-BtLCM-Mv.cjs.map} +1 -1
  3. package/dist/{connect-CBUOlzxq.js → connect-DHSX6U4J.js} +2 -2
  4. package/dist/{connect-CBUOlzxq.js.map → connect-DHSX6U4J.js.map} +1 -1
  5. package/dist/{generate-BxeNJETr.js → generate-DFylLhDR.js} +2 -2
  6. package/dist/{generate-BxeNJETr.js.map → generate-DFylLhDR.js.map} +1 -1
  7. package/dist/{generate-DLh3wshu.cjs → generate-DzLsR1zU.cjs} +2 -2
  8. package/dist/{generate-DLh3wshu.cjs.map → generate-DzLsR1zU.cjs.map} +1 -1
  9. package/dist/index.cjs +7 -7
  10. package/dist/index.js +7 -7
  11. package/dist/{init--pCVz39D.cjs → init-BNnkpAoc.cjs} +2 -2
  12. package/dist/{init--pCVz39D.cjs.map → init-BNnkpAoc.cjs.map} +1 -1
  13. package/dist/{init-1jCHJFkR.js → init-DqsUlktB.js} +2 -2
  14. package/dist/{init-1jCHJFkR.js.map → init-DqsUlktB.js.map} +1 -1
  15. package/dist/{login-COK08ZB3.cjs → login-76sS3lz4.cjs} +2 -2
  16. package/dist/{login-COK08ZB3.cjs.map → login-76sS3lz4.cjs.map} +1 -1
  17. package/dist/{login-2Zu5CrWN.js → login-CHUZUzZ5.js} +2 -2
  18. package/dist/{login-2Zu5CrWN.js.map → login-CHUZUzZ5.js.map} +1 -1
  19. package/dist/{logout-BVzfibCs.js → logout-C6-b0fqF.js} +2 -2
  20. package/dist/{logout-BVzfibCs.js.map → logout-C6-b0fqF.js.map} +1 -1
  21. package/dist/{logout-DaEyKEju.cjs → logout-DezaQpPH.cjs} +2 -2
  22. package/dist/{logout-DaEyKEju.cjs.map → logout-DezaQpPH.cjs.map} +1 -1
  23. package/dist/package-C4oeJ7oP.js +6 -0
  24. package/dist/package-C4oeJ7oP.js.map +1 -0
  25. package/dist/{package-QUqcQehm.cjs → package-jNO7Cwix.cjs} +2 -2
  26. package/dist/package-jNO7Cwix.cjs.map +1 -0
  27. package/dist/{run-BYePwnW_.js → run-CCkespsp.js} +2 -2
  28. package/dist/{run-BYePwnW_.js.map → run-CCkespsp.js.map} +1 -1
  29. package/dist/{run-pu3pVjoD.js → run-CjVwG6SD.js} +2 -2
  30. package/dist/{run-pu3pVjoD.js.map → run-CjVwG6SD.js.map} +1 -1
  31. package/dist/{run-Cebb9et9.js → run-DQYs1oii.js} +2 -2
  32. package/dist/{run-Cebb9et9.js.map → run-DQYs1oii.js.map} +1 -1
  33. package/dist/{run-CCaE_xwg.js → run-DoQQVipv.js} +2 -2
  34. package/dist/{run-CCaE_xwg.js.map → run-DoQQVipv.js.map} +1 -1
  35. package/dist/{run-D_56uxHq.cjs → run-H4U_YmsO.cjs} +2 -2
  36. package/dist/{run-D_56uxHq.cjs.map → run-H4U_YmsO.cjs.map} +1 -1
  37. package/dist/{run-B6QXReay.cjs → run-bUDX1fAt.cjs} +2 -2
  38. package/dist/{run-B6QXReay.cjs.map → run-bUDX1fAt.cjs.map} +1 -1
  39. package/dist/{run-Dl_fS-kl.cjs → run-msy3omMz.cjs} +2 -2
  40. package/dist/{run-Dl_fS-kl.cjs.map → run-msy3omMz.cjs.map} +1 -1
  41. package/dist/{run-tYU7hNMr.cjs → run-y8heMvaz.cjs} +2 -2
  42. package/dist/{run-tYU7hNMr.cjs.map → run-y8heMvaz.cjs.map} +1 -1
  43. package/dist/{snapshot-BXBRVfIr.js → snapshot-CCU6R7YD.js} +2 -2
  44. package/dist/{snapshot-BXBRVfIr.js.map → snapshot-CCU6R7YD.js.map} +1 -1
  45. package/dist/{snapshot-BJ0G8ou9.cjs → snapshot-kE1CAErY.cjs} +2 -2
  46. package/dist/{snapshot-BJ0G8ou9.cjs.map → snapshot-kE1CAErY.cjs.map} +1 -1
  47. package/dist/{status-Cnz_dtTm.cjs → status-BxwAMBv8.cjs} +2 -2
  48. package/dist/{status-Cnz_dtTm.cjs.map → status-BxwAMBv8.cjs.map} +1 -1
  49. package/dist/{status-Bd8xzflr.js → status-U4u5bDMo.js} +2 -2
  50. package/dist/{status-Bd8xzflr.js.map → status-U4u5bDMo.js.map} +1 -1
  51. package/dist/{studio-CL4-rJt1.cjs → studio-BvRAD5id.cjs} +7 -7
  52. package/dist/{studio-CL4-rJt1.cjs.map → studio-BvRAD5id.cjs.map} +1 -1
  53. package/dist/{studio-DZ3HJ4at.js → studio-CnQYiwbx.js} +7 -7
  54. package/dist/{studio-DZ3HJ4at.js.map → studio-CnQYiwbx.js.map} +1 -1
  55. package/package.json +7 -7
  56. package/dist/package-Cklv5UIh.js +0 -6
  57. package/dist/package-Cklv5UIh.js.map +0 -1
  58. package/dist/package-QUqcQehm.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run-Dl_fS-kl.cjs","names":["process","sendTelemetry","buildTelemetryEvent","styleText","toError"],"sources":["../src/runners/validate/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/validate.ts'\n\ntype ValidateOptions = {\n /**\n * Path or URL to the OpenAPI/Swagger file to validate.\n */\n input: string\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Validates an OpenAPI/Swagger file at `input` using `@kubb/adapter-oas`.\n * Exits the process with code 1 on validation failure or missing dependency.\n */\nexport async function run({ input, version }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'validate', kubbVersion: version, hrStart, status }))\n\n try {\n const { adapterOas } = await import('@kubb/adapter-oas')\n\n const adapter = adapterOas()\n if (!adapter.validate) {\n throw new Error('The loaded adapter does not support validation.')\n }\n\n await adapter.validate(input, { throwOnError: true })\n await report('success')\n\n console.log('✅ Validation success')\n } catch (error) {\n await report('failed')\n if (error instanceof Error && /@kubb\\/adapter-oas/.test(error.message)) {\n console.error(styleText('red', 'The @kubb/adapter-oas package is not installed.'))\n console.error('')\n console.error('Install it with:')\n console.error(styleText('cyan', ' npm install @kubb/adapter-oas'))\n console.error(styleText('cyan', ' # or'))\n console.error(styleText('cyan', ' pnpm install @kubb/adapter-oas'))\n console.error('')\n }\n console.error('❌ Validation failed')\n console.error(toError(error).message)\n\n process.exit(1)\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/adapter-oas` stays out of the process for every other\n * command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n await run({ input: values.input, version })\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,eAAsB,IAAI,EAAE,OAAO,WAA2C;CAC5E,MAAM,UAAUA,aAAAA,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiCC,kBAAAA,cAAcC,kBAAAA,oBAAoB;EAAE,SAAS;EAAY,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAElJ,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO;EAEpC,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,QAAQ,UACX,MAAM,IAAI,MAAM,iDAAiD;EAGnE,MAAM,QAAQ,SAAS,OAAO,EAAE,cAAc,KAAK,CAAC;EACpD,MAAM,OAAO,SAAS;EAEtB,QAAQ,IAAI,sBAAsB;CACpC,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,IAAI,iBAAiB,SAAS,qBAAqB,KAAK,MAAM,OAAO,GAAG;GACtE,QAAQ,OAAA,GAAMC,UAAAA,UAAAA,CAAU,OAAO,iDAAiD,CAAC;GACjF,QAAQ,MAAM,EAAE;GAChB,QAAQ,MAAM,kBAAkB;GAChC,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,iCAAiC,CAAC;GAClE,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,QAAQ,CAAC;GACzC,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,kCAAkC,CAAC;GACnE,QAAQ,MAAM,EAAE;EAClB;EACA,QAAQ,MAAM,qBAAqB;EACnC,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EAEpC,aAAA,QAAQ,KAAK,CAAC;CAChB;AACF;;;;;AAMA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,IAAI;EAAE,OAAO,OAAO;EAAO,SAAA,gBAAA;CAAQ,CAAC;AAC5C"}
1
+ {"version":3,"file":"run-msy3omMz.cjs","names":["process","sendTelemetry","buildTelemetryEvent","styleText","toError"],"sources":["../src/runners/validate/run.ts"],"sourcesContent":["import process from 'node:process'\nimport { styleText } from 'node:util'\nimport { toError } from '@internals/utils'\nimport type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/validate.ts'\n\ntype ValidateOptions = {\n /**\n * Path or URL to the OpenAPI/Swagger file to validate.\n */\n input: string\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Validates an OpenAPI/Swagger file at `input` using `@kubb/adapter-oas`.\n * Exits the process with code 1 on validation failure or missing dependency.\n */\nexport async function run({ input, version }: ValidateOptions): Promise<void> {\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'validate', kubbVersion: version, hrStart, status }))\n\n try {\n const { adapterOas } = await import('@kubb/adapter-oas')\n\n const adapter = adapterOas()\n if (!adapter.validate) {\n throw new Error('The loaded adapter does not support validation.')\n }\n\n await adapter.validate(input, { throwOnError: true })\n await report('success')\n\n console.log('✅ Validation success')\n } catch (error) {\n await report('failed')\n if (error instanceof Error && /@kubb\\/adapter-oas/.test(error.message)) {\n console.error(styleText('red', 'The @kubb/adapter-oas package is not installed.'))\n console.error('')\n console.error('Install it with:')\n console.error(styleText('cyan', ' npm install @kubb/adapter-oas'))\n console.error(styleText('cyan', ' # or'))\n console.error(styleText('cyan', ' pnpm install @kubb/adapter-oas'))\n console.error('')\n }\n console.error('❌ Validation failed')\n console.error(toError(error).message)\n\n process.exit(1)\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/adapter-oas` stays out of the process for every other\n * command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n await run({ input: values.input, version })\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,eAAsB,IAAI,EAAE,OAAO,WAA2C;CAC5E,MAAM,UAAUA,aAAAA,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiCC,kBAAAA,cAAcC,kBAAAA,oBAAoB;EAAE,SAAS;EAAY,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAElJ,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO;EAEpC,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,QAAQ,UACX,MAAM,IAAI,MAAM,iDAAiD;EAGnE,MAAM,QAAQ,SAAS,OAAO,EAAE,cAAc,KAAK,CAAC;EACpD,MAAM,OAAO,SAAS;EAEtB,QAAQ,IAAI,sBAAsB;CACpC,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,IAAI,iBAAiB,SAAS,qBAAqB,KAAK,MAAM,OAAO,GAAG;GACtE,QAAQ,OAAA,GAAMC,UAAAA,UAAAA,CAAU,OAAO,iDAAiD,CAAC;GACjF,QAAQ,MAAM,EAAE;GAChB,QAAQ,MAAM,kBAAkB;GAChC,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,iCAAiC,CAAC;GAClE,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,QAAQ,CAAC;GACzC,QAAQ,OAAA,GAAMA,UAAAA,UAAAA,CAAU,QAAQ,kCAAkC,CAAC;GACnE,QAAQ,MAAM,EAAE;EAClB;EACA,QAAQ,MAAM,qBAAqB;EACnC,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EAEpC,aAAA,QAAQ,KAAK,CAAC;CAChB;AACF;;;;;AAMA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,IAAI;EAAE,OAAO,OAAO;EAAO,SAAA,gBAAA;CAAQ,CAAC;AAC5C"}
@@ -1,7 +1,7 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-qbf5tadS.cjs");
2
2
  const require_errors = require("./errors-C-wEou02.cjs");
3
3
  const require_Telemetry = require("./Telemetry-B3kc9gFh.cjs");
4
- const require_package = require("./package-QUqcQehm.cjs");
4
+ const require_package = require("./package-jNO7Cwix.cjs");
5
5
  let node_util = require("node:util");
6
6
  let node_process = require("node:process");
7
7
  node_process = require_rolldown_runtime.__toESM(node_process, 1);
@@ -38,4 +38,4 @@ const runner = async () => {
38
38
  //#endregion
39
39
  exports.runner = runner;
40
40
 
41
- //# sourceMappingURL=run-tYU7hNMr.cjs.map
41
+ //# sourceMappingURL=run-y8heMvaz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-tYU7hNMr.cjs","names":["process","sendTelemetry","buildTelemetryEvent","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 type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/mcp.ts'\n\ntype McpOptions = {\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run({ version }: McpOptions): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status }))\n\n try {\n console.log(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n await startMcpServer()\n await report('success')\n } catch (error) {\n await report('failed')\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async () => {\n await run({ version })\n}\n"],"mappings":";;;;;;;;;;;AAmBA,eAAsB,IAAI,EAAE,WAAsC;CAChE,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,UAAUA,aAAAA,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiCC,kBAAAA,cAAcC,kBAAAA,oBAAoB;EAAE,SAAS;EAAO,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAE7I,IAAI;EACF,QAAQ,KAAA,GAAIC,UAAAA,UAAAA,CAAU,QAAQ,0BAA0B,CAAC;EACzD,QAAQ,MAAA,GAAKA,UAAAA,UAAAA,CAAU,UAAU,2DAA2D,CAAC;EAC7F,MAAM,eAAe;EACrB,MAAM,OAAO,SAAS;CACxB,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,aAAA,QAAA,WAAmB;CACrB;AACF;;;;AAKA,MAAa,SAA0E,YAAY;CACjG,MAAM,IAAI,EAAE,SAAA,gBAAA,QAAQ,CAAC;AACvB"}
1
+ {"version":3,"file":"run-y8heMvaz.cjs","names":["process","sendTelemetry","buildTelemetryEvent","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 type { CommandRunner } from 'gunshi'\nimport { buildTelemetryEvent, sendTelemetry } from '../../Telemetry.ts'\nimport { version } from '../../../package.json'\nimport type { definition } from '../../commands/mcp.ts'\n\ntype McpOptions = {\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Starts the `@kubb/mcp` server over stdio and reports the outcome to telemetry.\n */\nexport async function run({ version }: McpOptions): Promise<void> {\n const { run: startMcpServer } = (await import('@kubb/mcp')) as typeof McpModule\n\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'mcp', kubbVersion: version, hrStart, status }))\n\n try {\n console.log(styleText('cyan', '⏳ Starting MCP server...'))\n console.warn(styleText('yellow', 'This feature is still under development, use with caution'))\n await startMcpServer()\n await report('success')\n } catch (error) {\n await report('failed')\n console.error(toError(error).message)\n process.exitCode = 1\n }\n}\n\n/**\n * Loaded on demand by `index.ts`, so `@kubb/mcp` stays out of the process for every other command.\n */\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async () => {\n await run({ version })\n}\n"],"mappings":";;;;;;;;;;;AAmBA,eAAsB,IAAI,EAAE,WAAsC;CAChE,MAAM,EAAE,KAAK,mBAAoB,MAAM,OAAO;CAE9C,MAAM,UAAUA,aAAAA,QAAQ,OAAO;CAC/B,MAAM,UAAU,WAAiCC,kBAAAA,cAAcC,kBAAAA,oBAAoB;EAAE,SAAS;EAAO,aAAa;EAAS;EAAS;CAAO,CAAC,CAAC;CAE7I,IAAI;EACF,QAAQ,KAAA,GAAIC,UAAAA,UAAAA,CAAU,QAAQ,0BAA0B,CAAC;EACzD,QAAQ,MAAA,GAAKA,UAAAA,UAAAA,CAAU,UAAU,2DAA2D,CAAC;EAC7F,MAAM,eAAe;EACrB,MAAM,OAAO,SAAS;CACxB,SAAS,OAAO;EACd,MAAM,OAAO,QAAQ;EACrB,QAAQ,MAAMC,eAAAA,QAAQ,KAAK,CAAC,CAAC,OAAO;EACpC,aAAA,QAAA,WAAmB;CACrB;AACF;;;;AAKA,MAAa,SAA0E,YAAY;CACjG,MAAM,IAAI,EAAE,SAAA,gBAAA,QAAQ,CAAC;AACvB"}
@@ -1,5 +1,5 @@
1
1
  import "./rolldown-runtime-C0LytTxp.js";
2
- import { a as run, c as exists, l as read, n as createStudioOptions, r as loadConfigs } from "./run-CCaE_xwg.js";
2
+ import { a as run, c as exists, l as read, n as createStudioOptions, r as loadConfigs } from "./run-DoQQVipv.js";
3
3
  import { r as logBlock, t as createSpinner } from "./output-C_Gk4p-8.js";
4
4
  import { styleText } from "node:util";
5
5
  import process from "node:process";
@@ -257,4 +257,4 @@ const runner = async ({ values }) => {
257
257
  //#endregion
258
258
  export { runner };
259
259
 
260
- //# sourceMappingURL=snapshot-BXBRVfIr.js.map
260
+ //# sourceMappingURL=snapshot-CCU6R7YD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-BXBRVfIr.js","names":["logLevelMap"],"sources":["../src/runners/studio/ci.ts","../src/runners/studio/snapshot.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport process from 'node:process'\n\n/**\n * Stable identity for the CI agent a snapshot run registers or reuses.\n */\nexport type CiContext = {\n /**\n * Fed into the machine token, so the same merge or pull request reuses one agent.\n */\n id: string\n /**\n * Agent display name shown in Studio.\n */\n name: string\n}\n\nfunction readGithubPullRequestNumber(eventPath: string | undefined): string | undefined {\n if (!eventPath) {\n return undefined\n }\n\n try {\n const event = JSON.parse(readFileSync(eventPath, 'utf8')) as { pull_request?: { number?: number } }\n return event.pull_request?.number ? String(event.pull_request.number) : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Detects the CI provider from its environment variables and derives a stable identity from it.\n * The GitHub row reproduces `gh:<repositoryId>:<prNumber>`, the identity `kubb-labs/action` has\n * always registered agents under, so an existing repository keeps reusing its agent.\n */\nexport function detectCi(env: Record<string, string | undefined> = process.env): CiContext | null {\n if (env.GITHUB_ACTIONS) {\n const pullRequestNumber = readGithubPullRequestNumber(env.GITHUB_EVENT_PATH)\n const repositoryId = env.GITHUB_REPOSITORY_ID ?? env.GITHUB_REPOSITORY ?? ''\n const scope = pullRequestNumber ?? env.GITHUB_RUN_ID ?? ''\n\n return { id: `gh:${repositoryId}:${scope}`, name: `${env.GITHUB_REPOSITORY ?? 'github'}#${scope}` }\n }\n\n if (env.GITLAB_CI) {\n const scope = env.CI_MERGE_REQUEST_IID ?? env.CI_COMMIT_REF_SLUG ?? ''\n\n return { id: `gl:${env.CI_PROJECT_ID ?? ''}:${scope}`, name: `${env.CI_PROJECT_PATH ?? 'gitlab'}#${scope}` }\n }\n\n if (env.BITBUCKET_BUILD_NUMBER) {\n const scope = env.BITBUCKET_PR_ID ?? env.BITBUCKET_BRANCH ?? ''\n\n return { id: `bb:${env.BITBUCKET_REPO_UUID ?? ''}:${scope}`, name: `${env.BITBUCKET_REPO_FULL_NAME ?? 'bitbucket'}#${scope}` }\n }\n\n if (env.CIRCLECI) {\n // Owner-qualified: two projects with the same name under different CircleCI orgs must not\n // collide on one agent, since registering it purges the other project's live sessions.\n const owner = env.CIRCLE_PROJECT_USERNAME ?? ''\n const project = env.CIRCLE_PROJECT_REPONAME ?? 'circleci'\n const scope = env.CIRCLE_PR_NUMBER ?? env.CIRCLE_BRANCH ?? ''\n\n return { id: `circle:${owner}:${project}:${scope}`, name: `${owner ? `${owner}/` : ''}${project}#${scope}` }\n }\n\n return null\n}\n","import { dirname, join } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { exists, read } from '@internals/utils'\nimport { logLevel as logLevelMap } from '@kubb/core'\nimport { createAgent, createClient, createJob, machineTokenFrom, waitForJob, type StudioSnapshot } from '@kubb/studio'\nimport { createSpinner, logBlock } from '../../loggers/output.ts'\nimport { detectCi } from './ci.ts'\nimport { createStudioOptions, loadConfigs, run, type SnapshotOptions } from './run.ts'\nimport type { definition } from '../../commands/studio/snapshot.ts'\nimport type { CommandRunner } from 'gunshi'\n\n/**\n * How long to wait for Studio's `studio:ready` acknowledgement, above the client's own 10s\n * handshake-ack timeout.\n */\nconst READY_TIMEOUT_MS = 15_000\n\n/**\n * Longest `--timeout` accepted. Job records expire from Studio's storage after an hour.\n */\nconst MAX_TIMEOUT_SECONDS = 3600\n\nconst LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1'])\n\nasync function findPackageJson(startDirectory: string): Promise<{ name: string; version: string }> {\n let directory = startDirectory\n\n for (;;) {\n const file = join(directory, 'package.json')\n\n if (await exists(file)) {\n const packageJson = JSON.parse(await read(file)) as Partial<{ name: string; version: string }>\n\n if (packageJson.name && packageJson.version) {\n return { name: packageJson.name, version: packageJson.version }\n }\n }\n\n const parent = dirname(directory)\n\n if (parent === directory) {\n break\n }\n\n directory = parent\n }\n\n throw new Error(`No package.json with a name and a version found above ${startDirectory}`)\n}\n\n/** Reads package.json only for whichever of name/version --name and --version did not supply. */\nasync function resolvePackageMetadata(options: SnapshotOptions): Promise<{ name: string; version: string }> {\n if (options.name && options.packageVersion) {\n return { name: options.name, version: options.packageVersion }\n }\n\n const packageMetadata = await findPackageJson(process.cwd())\n\n return { name: options.name ?? packageMetadata.name, version: options.packageVersion ?? packageMetadata.version }\n}\n\nfunction resolveToken(options: SnapshotOptions): string {\n const token = options.token ?? process.env.KUBB_TOKEN\n\n if (!token) {\n throw new Error('An organization CI API key is required. Pass --token or set KUBB_TOKEN.')\n }\n\n return token\n}\n\nfunction resolveCiIdentity(options: SnapshotOptions): { id: string; name: string } {\n const detected = detectCi()\n\n if (options.id) {\n return { id: options.id, name: detected?.name ?? options.id }\n }\n\n if (!detected) {\n throw new Error('Could not detect a supported CI provider (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI). Pass --id.')\n }\n\n return detected\n}\n\n/** Rejects a bad `--timeout` up front instead of letting it reach `waitForJob` as NaN or <= 0. */\nfunction resolveTimeoutMs(options: SnapshotOptions): number {\n const seconds = options.timeout ?? 600\n\n if (!Number.isFinite(seconds) || seconds <= 0) {\n throw new Error('--timeout must be a positive number of seconds')\n }\n\n return Math.min(seconds, MAX_TIMEOUT_SECONDS) * 1000\n}\n\n/** The CI key is a credential, so refuse to send it anywhere but HTTPS or a loopback dev host. */\nfunction assertSecureStudioUrl(studioUrl: string): void {\n const url = new URL(studioUrl)\n\n if (url.protocol !== 'https:' && !LOOPBACK_HOSTS.has(url.hostname)) {\n throw new Error(`Refusing to send the CI API key to ${studioUrl}. Use an https:// Studio URL, or a loopback host for local development.`)\n }\n}\n\nfunction absoluteUrl(studioUrl: string, path: string): string {\n return new URL(path, `${studioUrl}/`).toString()\n}\n\ntype SnapshotResult = {\n id: string\n name: string | null\n version: string | null\n integrity: string | null\n url: string\n snapshotIdUrl: string\n expiresAt: string\n agentUrl: string\n}\n\nfunction toResult(studioUrl: string, snapshot: StudioSnapshot, agentSlug: string): SnapshotResult {\n return {\n id: snapshot.id,\n name: snapshot.name,\n version: snapshot.version,\n integrity: snapshot.integrity,\n url: absoluteUrl(studioUrl, snapshot.url),\n snapshotIdUrl: absoluteUrl(studioUrl, snapshot.snapshotIdUrl),\n expiresAt: snapshot.expiresAt,\n agentUrl: absoluteUrl(studioUrl, `/agents/${agentSlug}`),\n }\n}\n\nfunction printSummary(result: SnapshotResult): void {\n logBlock([\n `${styleText('dim', 'Package'.padEnd(10))} ${result.name ?? '(unnamed)'}@${result.version ?? '0.0.0'}`,\n `${styleText('dim', 'Tarball'.padEnd(10))} ${styleText('cyan', result.url)}`,\n `${styleText('dim', 'Agent'.padEnd(10))} ${result.agentUrl}`,\n `${styleText('dim', 'Expires'.padEnd(10))} ${result.expiresAt}`,\n ])\n}\n\n/**\n * Generates a Kubb Studio snapshot from a script: registers or reuses a CI agent, connects it,\n * queues a snapshot job, and polls until the tarball is ready. A snapshot job runs generation and\n * packs the tarball in one step, so this needs no separate generation run.\n */\nexport async function snapshot(options: SnapshotOptions): Promise<void> {\n const timeoutMs = resolveTimeoutMs(options)\n const token = resolveToken(options)\n assertSecureStudioUrl(options.studioUrl)\n const { configPath } = await loadConfigs(options)\n const ci = resolveCiIdentity(options)\n const { name, version: packageVersion } = await resolvePackageMetadata(options)\n\n // Set before the first `getMachineToken()` call (inside `client.connect()`), so the WebSocket\n // session registers under the same machine token `createAgent` just registered with Studio.\n process.env.KUBB_AGENT_SECRET = ci.id\n\n const spinner = options.json ? null : createSpinner()\n const log = (message: string) => {\n if (options.json) {\n console.error(message)\n return\n }\n\n spinner?.message(message)\n }\n\n if (options.json) {\n log('Creating Kubb Studio agent')\n }\n if (!options.json) {\n spinner?.start('Creating Kubb Studio agent')\n }\n\n const agent = await createAgent({ studioUrl: options.studioUrl, token, name: ci.name, machineToken: machineTokenFrom(ci.id) })\n\n const { promise: ready, reject: markFailed, resolve: markReady } = Promise.withResolvers<void>()\n\n const client = createClient({\n studioUrl: options.studioUrl,\n token: agent.token,\n configPath,\n root: process.cwd(),\n version: options.version,\n client: { kind: 'cli' },\n logLevel: logLevelMap[options.logLevel ?? 'info'],\n loadConfig: async () => (await loadConfigs(options)).config,\n installLogger: (hooks) => {\n hooks.hook('studio:connecting', ({ url }) => log(`Connecting to Kubb Studio at ${url}`))\n hooks.hook('studio:connected', ({ url }) => log(`Connected to Kubb Studio at ${url}`))\n hooks.hook('studio:ready', () => {\n log('Kubb Studio connection ready')\n markReady()\n })\n hooks.hook('studio:warn', ({ message }) => log(`Kubb Studio warning: ${message}`))\n hooks.hook('studio:error', ({ error }) => markFailed(error))\n },\n })\n\n await client.connect()\n\n try {\n let readyTimeoutHandle: ReturnType<typeof setTimeout> | undefined\n\n try {\n await Promise.race([\n ready,\n new Promise<void>((_, reject) => {\n readyTimeoutHandle = setTimeout(() => reject(new Error('Timed out waiting for Kubb Studio to confirm the agent was ready')), READY_TIMEOUT_MS)\n }),\n ])\n } finally {\n clearTimeout(readyTimeoutHandle)\n }\n\n log('Creating snapshot job')\n\n const job = await createJob({ studioUrl: options.studioUrl, token, type: 'snapshot', agentId: agent.id, name, version: packageVersion })\n log(`Snapshot job queued: ${job.id}`)\n const finished = await waitForJob({ studioUrl: options.studioUrl, token, id: job.id, timeoutMs })\n\n if (finished.status === 'failed') {\n throw new Error(finished.error ?? 'Snapshot job failed')\n }\n\n if (!finished.snapshot) {\n throw new Error('Snapshot job succeeded without a snapshot')\n }\n\n const result = toResult(options.studioUrl, finished.snapshot, agent.slug)\n\n if (options.json) {\n log('Snapshot published')\n }\n if (!options.json) {\n spinner?.stop('Snapshot published')\n }\n\n if (options.json) {\n console.log(JSON.stringify(result))\n }\n if (!options.json) {\n printSummary(result)\n }\n } catch (error) {\n if (options.json) {\n log('Snapshot failed')\n }\n if (!options.json) {\n spinner?.stop('Snapshot failed')\n }\n throw error\n } finally {\n if (options.json) {\n log('Disconnecting from Kubb Studio')\n }\n client.disconnect()\n }\n}\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options: SnapshotOptions = {\n ...createStudioOptions(values),\n token: values.token,\n id: values.id,\n name: values.name,\n packageVersion: values.packageVersion,\n timeout: values.timeout,\n json: values.json,\n }\n await run(options, () => snapshot(options), { json: options.json })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-CCU6R7YD.js","names":["logLevelMap"],"sources":["../src/runners/studio/ci.ts","../src/runners/studio/snapshot.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport process from 'node:process'\n\n/**\n * Stable identity for the CI agent a snapshot run registers or reuses.\n */\nexport type CiContext = {\n /**\n * Fed into the machine token, so the same merge or pull request reuses one agent.\n */\n id: string\n /**\n * Agent display name shown in Studio.\n */\n name: string\n}\n\nfunction readGithubPullRequestNumber(eventPath: string | undefined): string | undefined {\n if (!eventPath) {\n return undefined\n }\n\n try {\n const event = JSON.parse(readFileSync(eventPath, 'utf8')) as { pull_request?: { number?: number } }\n return event.pull_request?.number ? String(event.pull_request.number) : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Detects the CI provider from its environment variables and derives a stable identity from it.\n * The GitHub row reproduces `gh:<repositoryId>:<prNumber>`, the identity `kubb-labs/action` has\n * always registered agents under, so an existing repository keeps reusing its agent.\n */\nexport function detectCi(env: Record<string, string | undefined> = process.env): CiContext | null {\n if (env.GITHUB_ACTIONS) {\n const pullRequestNumber = readGithubPullRequestNumber(env.GITHUB_EVENT_PATH)\n const repositoryId = env.GITHUB_REPOSITORY_ID ?? env.GITHUB_REPOSITORY ?? ''\n const scope = pullRequestNumber ?? env.GITHUB_RUN_ID ?? ''\n\n return { id: `gh:${repositoryId}:${scope}`, name: `${env.GITHUB_REPOSITORY ?? 'github'}#${scope}` }\n }\n\n if (env.GITLAB_CI) {\n const scope = env.CI_MERGE_REQUEST_IID ?? env.CI_COMMIT_REF_SLUG ?? ''\n\n return { id: `gl:${env.CI_PROJECT_ID ?? ''}:${scope}`, name: `${env.CI_PROJECT_PATH ?? 'gitlab'}#${scope}` }\n }\n\n if (env.BITBUCKET_BUILD_NUMBER) {\n const scope = env.BITBUCKET_PR_ID ?? env.BITBUCKET_BRANCH ?? ''\n\n return { id: `bb:${env.BITBUCKET_REPO_UUID ?? ''}:${scope}`, name: `${env.BITBUCKET_REPO_FULL_NAME ?? 'bitbucket'}#${scope}` }\n }\n\n if (env.CIRCLECI) {\n // Owner-qualified: two projects with the same name under different CircleCI orgs must not\n // collide on one agent, since registering it purges the other project's live sessions.\n const owner = env.CIRCLE_PROJECT_USERNAME ?? ''\n const project = env.CIRCLE_PROJECT_REPONAME ?? 'circleci'\n const scope = env.CIRCLE_PR_NUMBER ?? env.CIRCLE_BRANCH ?? ''\n\n return { id: `circle:${owner}:${project}:${scope}`, name: `${owner ? `${owner}/` : ''}${project}#${scope}` }\n }\n\n return null\n}\n","import { dirname, join } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { exists, read } from '@internals/utils'\nimport { logLevel as logLevelMap } from '@kubb/core'\nimport { createAgent, createClient, createJob, machineTokenFrom, waitForJob, type StudioSnapshot } from '@kubb/studio'\nimport { createSpinner, logBlock } from '../../loggers/output.ts'\nimport { detectCi } from './ci.ts'\nimport { createStudioOptions, loadConfigs, run, type SnapshotOptions } from './run.ts'\nimport type { definition } from '../../commands/studio/snapshot.ts'\nimport type { CommandRunner } from 'gunshi'\n\n/**\n * How long to wait for Studio's `studio:ready` acknowledgement, above the client's own 10s\n * handshake-ack timeout.\n */\nconst READY_TIMEOUT_MS = 15_000\n\n/**\n * Longest `--timeout` accepted. Job records expire from Studio's storage after an hour.\n */\nconst MAX_TIMEOUT_SECONDS = 3600\n\nconst LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1'])\n\nasync function findPackageJson(startDirectory: string): Promise<{ name: string; version: string }> {\n let directory = startDirectory\n\n for (;;) {\n const file = join(directory, 'package.json')\n\n if (await exists(file)) {\n const packageJson = JSON.parse(await read(file)) as Partial<{ name: string; version: string }>\n\n if (packageJson.name && packageJson.version) {\n return { name: packageJson.name, version: packageJson.version }\n }\n }\n\n const parent = dirname(directory)\n\n if (parent === directory) {\n break\n }\n\n directory = parent\n }\n\n throw new Error(`No package.json with a name and a version found above ${startDirectory}`)\n}\n\n/** Reads package.json only for whichever of name/version --name and --version did not supply. */\nasync function resolvePackageMetadata(options: SnapshotOptions): Promise<{ name: string; version: string }> {\n if (options.name && options.packageVersion) {\n return { name: options.name, version: options.packageVersion }\n }\n\n const packageMetadata = await findPackageJson(process.cwd())\n\n return { name: options.name ?? packageMetadata.name, version: options.packageVersion ?? packageMetadata.version }\n}\n\nfunction resolveToken(options: SnapshotOptions): string {\n const token = options.token ?? process.env.KUBB_TOKEN\n\n if (!token) {\n throw new Error('An organization CI API key is required. Pass --token or set KUBB_TOKEN.')\n }\n\n return token\n}\n\nfunction resolveCiIdentity(options: SnapshotOptions): { id: string; name: string } {\n const detected = detectCi()\n\n if (options.id) {\n return { id: options.id, name: detected?.name ?? options.id }\n }\n\n if (!detected) {\n throw new Error('Could not detect a supported CI provider (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI). Pass --id.')\n }\n\n return detected\n}\n\n/** Rejects a bad `--timeout` up front instead of letting it reach `waitForJob` as NaN or <= 0. */\nfunction resolveTimeoutMs(options: SnapshotOptions): number {\n const seconds = options.timeout ?? 600\n\n if (!Number.isFinite(seconds) || seconds <= 0) {\n throw new Error('--timeout must be a positive number of seconds')\n }\n\n return Math.min(seconds, MAX_TIMEOUT_SECONDS) * 1000\n}\n\n/** The CI key is a credential, so refuse to send it anywhere but HTTPS or a loopback dev host. */\nfunction assertSecureStudioUrl(studioUrl: string): void {\n const url = new URL(studioUrl)\n\n if (url.protocol !== 'https:' && !LOOPBACK_HOSTS.has(url.hostname)) {\n throw new Error(`Refusing to send the CI API key to ${studioUrl}. Use an https:// Studio URL, or a loopback host for local development.`)\n }\n}\n\nfunction absoluteUrl(studioUrl: string, path: string): string {\n return new URL(path, `${studioUrl}/`).toString()\n}\n\ntype SnapshotResult = {\n id: string\n name: string | null\n version: string | null\n integrity: string | null\n url: string\n snapshotIdUrl: string\n expiresAt: string\n agentUrl: string\n}\n\nfunction toResult(studioUrl: string, snapshot: StudioSnapshot, agentSlug: string): SnapshotResult {\n return {\n id: snapshot.id,\n name: snapshot.name,\n version: snapshot.version,\n integrity: snapshot.integrity,\n url: absoluteUrl(studioUrl, snapshot.url),\n snapshotIdUrl: absoluteUrl(studioUrl, snapshot.snapshotIdUrl),\n expiresAt: snapshot.expiresAt,\n agentUrl: absoluteUrl(studioUrl, `/agents/${agentSlug}`),\n }\n}\n\nfunction printSummary(result: SnapshotResult): void {\n logBlock([\n `${styleText('dim', 'Package'.padEnd(10))} ${result.name ?? '(unnamed)'}@${result.version ?? '0.0.0'}`,\n `${styleText('dim', 'Tarball'.padEnd(10))} ${styleText('cyan', result.url)}`,\n `${styleText('dim', 'Agent'.padEnd(10))} ${result.agentUrl}`,\n `${styleText('dim', 'Expires'.padEnd(10))} ${result.expiresAt}`,\n ])\n}\n\n/**\n * Generates a Kubb Studio snapshot from a script: registers or reuses a CI agent, connects it,\n * queues a snapshot job, and polls until the tarball is ready. A snapshot job runs generation and\n * packs the tarball in one step, so this needs no separate generation run.\n */\nexport async function snapshot(options: SnapshotOptions): Promise<void> {\n const timeoutMs = resolveTimeoutMs(options)\n const token = resolveToken(options)\n assertSecureStudioUrl(options.studioUrl)\n const { configPath } = await loadConfigs(options)\n const ci = resolveCiIdentity(options)\n const { name, version: packageVersion } = await resolvePackageMetadata(options)\n\n // Set before the first `getMachineToken()` call (inside `client.connect()`), so the WebSocket\n // session registers under the same machine token `createAgent` just registered with Studio.\n process.env.KUBB_AGENT_SECRET = ci.id\n\n const spinner = options.json ? null : createSpinner()\n const log = (message: string) => {\n if (options.json) {\n console.error(message)\n return\n }\n\n spinner?.message(message)\n }\n\n if (options.json) {\n log('Creating Kubb Studio agent')\n }\n if (!options.json) {\n spinner?.start('Creating Kubb Studio agent')\n }\n\n const agent = await createAgent({ studioUrl: options.studioUrl, token, name: ci.name, machineToken: machineTokenFrom(ci.id) })\n\n const { promise: ready, reject: markFailed, resolve: markReady } = Promise.withResolvers<void>()\n\n const client = createClient({\n studioUrl: options.studioUrl,\n token: agent.token,\n configPath,\n root: process.cwd(),\n version: options.version,\n client: { kind: 'cli' },\n logLevel: logLevelMap[options.logLevel ?? 'info'],\n loadConfig: async () => (await loadConfigs(options)).config,\n installLogger: (hooks) => {\n hooks.hook('studio:connecting', ({ url }) => log(`Connecting to Kubb Studio at ${url}`))\n hooks.hook('studio:connected', ({ url }) => log(`Connected to Kubb Studio at ${url}`))\n hooks.hook('studio:ready', () => {\n log('Kubb Studio connection ready')\n markReady()\n })\n hooks.hook('studio:warn', ({ message }) => log(`Kubb Studio warning: ${message}`))\n hooks.hook('studio:error', ({ error }) => markFailed(error))\n },\n })\n\n await client.connect()\n\n try {\n let readyTimeoutHandle: ReturnType<typeof setTimeout> | undefined\n\n try {\n await Promise.race([\n ready,\n new Promise<void>((_, reject) => {\n readyTimeoutHandle = setTimeout(() => reject(new Error('Timed out waiting for Kubb Studio to confirm the agent was ready')), READY_TIMEOUT_MS)\n }),\n ])\n } finally {\n clearTimeout(readyTimeoutHandle)\n }\n\n log('Creating snapshot job')\n\n const job = await createJob({ studioUrl: options.studioUrl, token, type: 'snapshot', agentId: agent.id, name, version: packageVersion })\n log(`Snapshot job queued: ${job.id}`)\n const finished = await waitForJob({ studioUrl: options.studioUrl, token, id: job.id, timeoutMs })\n\n if (finished.status === 'failed') {\n throw new Error(finished.error ?? 'Snapshot job failed')\n }\n\n if (!finished.snapshot) {\n throw new Error('Snapshot job succeeded without a snapshot')\n }\n\n const result = toResult(options.studioUrl, finished.snapshot, agent.slug)\n\n if (options.json) {\n log('Snapshot published')\n }\n if (!options.json) {\n spinner?.stop('Snapshot published')\n }\n\n if (options.json) {\n console.log(JSON.stringify(result))\n }\n if (!options.json) {\n printSummary(result)\n }\n } catch (error) {\n if (options.json) {\n log('Snapshot failed')\n }\n if (!options.json) {\n spinner?.stop('Snapshot failed')\n }\n throw error\n } finally {\n if (options.json) {\n log('Disconnecting from Kubb Studio')\n }\n client.disconnect()\n }\n}\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options: SnapshotOptions = {\n ...createStudioOptions(values),\n token: values.token,\n id: values.id,\n name: values.name,\n packageVersion: values.packageVersion,\n timeout: values.timeout,\n json: values.json,\n }\n await run(options, () => snapshot(options), { json: options.json })\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-qbf5tadS.cjs");
2
- const require_run = require("./run-D_56uxHq.cjs");
2
+ const require_run = require("./run-H4U_YmsO.cjs");
3
3
  const require_output = require("./output-D-9bGS7y.cjs");
4
4
  let node_util = require("node:util");
5
5
  let node_process = require("node:process");
@@ -258,4 +258,4 @@ const runner = async ({ values }) => {
258
258
  //#endregion
259
259
  exports.runner = runner;
260
260
 
261
- //# sourceMappingURL=snapshot-BJ0G8ou9.cjs.map
261
+ //# sourceMappingURL=snapshot-kE1CAErY.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-BJ0G8ou9.cjs","names":["readFileSync","process","join","exists","read","dirname","process","styleText","loadConfigs","createSpinner","createAgent","machineTokenFrom","createClient","logLevelMap","createJob","waitForJob","createStudioOptions","run"],"sources":["../src/runners/studio/ci.ts","../src/runners/studio/snapshot.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport process from 'node:process'\n\n/**\n * Stable identity for the CI agent a snapshot run registers or reuses.\n */\nexport type CiContext = {\n /**\n * Fed into the machine token, so the same merge or pull request reuses one agent.\n */\n id: string\n /**\n * Agent display name shown in Studio.\n */\n name: string\n}\n\nfunction readGithubPullRequestNumber(eventPath: string | undefined): string | undefined {\n if (!eventPath) {\n return undefined\n }\n\n try {\n const event = JSON.parse(readFileSync(eventPath, 'utf8')) as { pull_request?: { number?: number } }\n return event.pull_request?.number ? String(event.pull_request.number) : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Detects the CI provider from its environment variables and derives a stable identity from it.\n * The GitHub row reproduces `gh:<repositoryId>:<prNumber>`, the identity `kubb-labs/action` has\n * always registered agents under, so an existing repository keeps reusing its agent.\n */\nexport function detectCi(env: Record<string, string | undefined> = process.env): CiContext | null {\n if (env.GITHUB_ACTIONS) {\n const pullRequestNumber = readGithubPullRequestNumber(env.GITHUB_EVENT_PATH)\n const repositoryId = env.GITHUB_REPOSITORY_ID ?? env.GITHUB_REPOSITORY ?? ''\n const scope = pullRequestNumber ?? env.GITHUB_RUN_ID ?? ''\n\n return { id: `gh:${repositoryId}:${scope}`, name: `${env.GITHUB_REPOSITORY ?? 'github'}#${scope}` }\n }\n\n if (env.GITLAB_CI) {\n const scope = env.CI_MERGE_REQUEST_IID ?? env.CI_COMMIT_REF_SLUG ?? ''\n\n return { id: `gl:${env.CI_PROJECT_ID ?? ''}:${scope}`, name: `${env.CI_PROJECT_PATH ?? 'gitlab'}#${scope}` }\n }\n\n if (env.BITBUCKET_BUILD_NUMBER) {\n const scope = env.BITBUCKET_PR_ID ?? env.BITBUCKET_BRANCH ?? ''\n\n return { id: `bb:${env.BITBUCKET_REPO_UUID ?? ''}:${scope}`, name: `${env.BITBUCKET_REPO_FULL_NAME ?? 'bitbucket'}#${scope}` }\n }\n\n if (env.CIRCLECI) {\n // Owner-qualified: two projects with the same name under different CircleCI orgs must not\n // collide on one agent, since registering it purges the other project's live sessions.\n const owner = env.CIRCLE_PROJECT_USERNAME ?? ''\n const project = env.CIRCLE_PROJECT_REPONAME ?? 'circleci'\n const scope = env.CIRCLE_PR_NUMBER ?? env.CIRCLE_BRANCH ?? ''\n\n return { id: `circle:${owner}:${project}:${scope}`, name: `${owner ? `${owner}/` : ''}${project}#${scope}` }\n }\n\n return null\n}\n","import { dirname, join } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { exists, read } from '@internals/utils'\nimport { logLevel as logLevelMap } from '@kubb/core'\nimport { createAgent, createClient, createJob, machineTokenFrom, waitForJob, type StudioSnapshot } from '@kubb/studio'\nimport { createSpinner, logBlock } from '../../loggers/output.ts'\nimport { detectCi } from './ci.ts'\nimport { createStudioOptions, loadConfigs, run, type SnapshotOptions } from './run.ts'\nimport type { definition } from '../../commands/studio/snapshot.ts'\nimport type { CommandRunner } from 'gunshi'\n\n/**\n * How long to wait for Studio's `studio:ready` acknowledgement, above the client's own 10s\n * handshake-ack timeout.\n */\nconst READY_TIMEOUT_MS = 15_000\n\n/**\n * Longest `--timeout` accepted. Job records expire from Studio's storage after an hour.\n */\nconst MAX_TIMEOUT_SECONDS = 3600\n\nconst LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1'])\n\nasync function findPackageJson(startDirectory: string): Promise<{ name: string; version: string }> {\n let directory = startDirectory\n\n for (;;) {\n const file = join(directory, 'package.json')\n\n if (await exists(file)) {\n const packageJson = JSON.parse(await read(file)) as Partial<{ name: string; version: string }>\n\n if (packageJson.name && packageJson.version) {\n return { name: packageJson.name, version: packageJson.version }\n }\n }\n\n const parent = dirname(directory)\n\n if (parent === directory) {\n break\n }\n\n directory = parent\n }\n\n throw new Error(`No package.json with a name and a version found above ${startDirectory}`)\n}\n\n/** Reads package.json only for whichever of name/version --name and --version did not supply. */\nasync function resolvePackageMetadata(options: SnapshotOptions): Promise<{ name: string; version: string }> {\n if (options.name && options.packageVersion) {\n return { name: options.name, version: options.packageVersion }\n }\n\n const packageMetadata = await findPackageJson(process.cwd())\n\n return { name: options.name ?? packageMetadata.name, version: options.packageVersion ?? packageMetadata.version }\n}\n\nfunction resolveToken(options: SnapshotOptions): string {\n const token = options.token ?? process.env.KUBB_TOKEN\n\n if (!token) {\n throw new Error('An organization CI API key is required. Pass --token or set KUBB_TOKEN.')\n }\n\n return token\n}\n\nfunction resolveCiIdentity(options: SnapshotOptions): { id: string; name: string } {\n const detected = detectCi()\n\n if (options.id) {\n return { id: options.id, name: detected?.name ?? options.id }\n }\n\n if (!detected) {\n throw new Error('Could not detect a supported CI provider (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI). Pass --id.')\n }\n\n return detected\n}\n\n/** Rejects a bad `--timeout` up front instead of letting it reach `waitForJob` as NaN or <= 0. */\nfunction resolveTimeoutMs(options: SnapshotOptions): number {\n const seconds = options.timeout ?? 600\n\n if (!Number.isFinite(seconds) || seconds <= 0) {\n throw new Error('--timeout must be a positive number of seconds')\n }\n\n return Math.min(seconds, MAX_TIMEOUT_SECONDS) * 1000\n}\n\n/** The CI key is a credential, so refuse to send it anywhere but HTTPS or a loopback dev host. */\nfunction assertSecureStudioUrl(studioUrl: string): void {\n const url = new URL(studioUrl)\n\n if (url.protocol !== 'https:' && !LOOPBACK_HOSTS.has(url.hostname)) {\n throw new Error(`Refusing to send the CI API key to ${studioUrl}. Use an https:// Studio URL, or a loopback host for local development.`)\n }\n}\n\nfunction absoluteUrl(studioUrl: string, path: string): string {\n return new URL(path, `${studioUrl}/`).toString()\n}\n\ntype SnapshotResult = {\n id: string\n name: string | null\n version: string | null\n integrity: string | null\n url: string\n snapshotIdUrl: string\n expiresAt: string\n agentUrl: string\n}\n\nfunction toResult(studioUrl: string, snapshot: StudioSnapshot, agentSlug: string): SnapshotResult {\n return {\n id: snapshot.id,\n name: snapshot.name,\n version: snapshot.version,\n integrity: snapshot.integrity,\n url: absoluteUrl(studioUrl, snapshot.url),\n snapshotIdUrl: absoluteUrl(studioUrl, snapshot.snapshotIdUrl),\n expiresAt: snapshot.expiresAt,\n agentUrl: absoluteUrl(studioUrl, `/agents/${agentSlug}`),\n }\n}\n\nfunction printSummary(result: SnapshotResult): void {\n logBlock([\n `${styleText('dim', 'Package'.padEnd(10))} ${result.name ?? '(unnamed)'}@${result.version ?? '0.0.0'}`,\n `${styleText('dim', 'Tarball'.padEnd(10))} ${styleText('cyan', result.url)}`,\n `${styleText('dim', 'Agent'.padEnd(10))} ${result.agentUrl}`,\n `${styleText('dim', 'Expires'.padEnd(10))} ${result.expiresAt}`,\n ])\n}\n\n/**\n * Generates a Kubb Studio snapshot from a script: registers or reuses a CI agent, connects it,\n * queues a snapshot job, and polls until the tarball is ready. A snapshot job runs generation and\n * packs the tarball in one step, so this needs no separate generation run.\n */\nexport async function snapshot(options: SnapshotOptions): Promise<void> {\n const timeoutMs = resolveTimeoutMs(options)\n const token = resolveToken(options)\n assertSecureStudioUrl(options.studioUrl)\n const { configPath } = await loadConfigs(options)\n const ci = resolveCiIdentity(options)\n const { name, version: packageVersion } = await resolvePackageMetadata(options)\n\n // Set before the first `getMachineToken()` call (inside `client.connect()`), so the WebSocket\n // session registers under the same machine token `createAgent` just registered with Studio.\n process.env.KUBB_AGENT_SECRET = ci.id\n\n const spinner = options.json ? null : createSpinner()\n const log = (message: string) => {\n if (options.json) {\n console.error(message)\n return\n }\n\n spinner?.message(message)\n }\n\n if (options.json) {\n log('Creating Kubb Studio agent')\n }\n if (!options.json) {\n spinner?.start('Creating Kubb Studio agent')\n }\n\n const agent = await createAgent({ studioUrl: options.studioUrl, token, name: ci.name, machineToken: machineTokenFrom(ci.id) })\n\n const { promise: ready, reject: markFailed, resolve: markReady } = Promise.withResolvers<void>()\n\n const client = createClient({\n studioUrl: options.studioUrl,\n token: agent.token,\n configPath,\n root: process.cwd(),\n version: options.version,\n client: { kind: 'cli' },\n logLevel: logLevelMap[options.logLevel ?? 'info'],\n loadConfig: async () => (await loadConfigs(options)).config,\n installLogger: (hooks) => {\n hooks.hook('studio:connecting', ({ url }) => log(`Connecting to Kubb Studio at ${url}`))\n hooks.hook('studio:connected', ({ url }) => log(`Connected to Kubb Studio at ${url}`))\n hooks.hook('studio:ready', () => {\n log('Kubb Studio connection ready')\n markReady()\n })\n hooks.hook('studio:warn', ({ message }) => log(`Kubb Studio warning: ${message}`))\n hooks.hook('studio:error', ({ error }) => markFailed(error))\n },\n })\n\n await client.connect()\n\n try {\n let readyTimeoutHandle: ReturnType<typeof setTimeout> | undefined\n\n try {\n await Promise.race([\n ready,\n new Promise<void>((_, reject) => {\n readyTimeoutHandle = setTimeout(() => reject(new Error('Timed out waiting for Kubb Studio to confirm the agent was ready')), READY_TIMEOUT_MS)\n }),\n ])\n } finally {\n clearTimeout(readyTimeoutHandle)\n }\n\n log('Creating snapshot job')\n\n const job = await createJob({ studioUrl: options.studioUrl, token, type: 'snapshot', agentId: agent.id, name, version: packageVersion })\n log(`Snapshot job queued: ${job.id}`)\n const finished = await waitForJob({ studioUrl: options.studioUrl, token, id: job.id, timeoutMs })\n\n if (finished.status === 'failed') {\n throw new Error(finished.error ?? 'Snapshot job failed')\n }\n\n if (!finished.snapshot) {\n throw new Error('Snapshot job succeeded without a snapshot')\n }\n\n const result = toResult(options.studioUrl, finished.snapshot, agent.slug)\n\n if (options.json) {\n log('Snapshot published')\n }\n if (!options.json) {\n spinner?.stop('Snapshot published')\n }\n\n if (options.json) {\n console.log(JSON.stringify(result))\n }\n if (!options.json) {\n printSummary(result)\n }\n } catch (error) {\n if (options.json) {\n log('Snapshot failed')\n }\n if (!options.json) {\n spinner?.stop('Snapshot failed')\n }\n throw error\n } finally {\n if (options.json) {\n log('Disconnecting from Kubb Studio')\n }\n client.disconnect()\n }\n}\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options: SnapshotOptions = {\n ...createStudioOptions(values),\n token: values.token,\n id: values.id,\n name: values.name,\n packageVersion: values.packageVersion,\n timeout: values.timeout,\n json: values.json,\n }\n await run(options, () => snapshot(options), { json: options.json })\n}\n"],"mappings":";;;;;;;;;;;AAiBA,SAAS,4BAA4B,WAAmD;CACtF,IAAI,CAAC,WACH;CAGF,IAAI;EACF,MAAM,QAAQ,KAAK,OAAA,GAAMA,QAAAA,aAAAA,CAAa,WAAW,MAAM,CAAC;EACxD,OAAO,MAAM,cAAc,SAAS,OAAO,MAAM,aAAa,MAAM,IAAI,KAAA;CAC1E,QAAQ;EACN;CACF;AACF;;;;;;AAOA,SAAgB,SAAS,MAA0CC,aAAAA,QAAQ,KAAuB;CAChG,IAAI,IAAI,gBAAgB;EACtB,MAAM,oBAAoB,4BAA4B,IAAI,iBAAiB;EAC3E,MAAM,eAAe,IAAI,wBAAwB,IAAI,qBAAqB;EAC1E,MAAM,QAAQ,qBAAqB,IAAI,iBAAiB;EAExD,OAAO;GAAE,IAAI,MAAM,aAAa,GAAG;GAAS,MAAM,GAAG,IAAI,qBAAqB,SAAS,GAAG;EAAQ;CACpG;CAEA,IAAI,IAAI,WAAW;EACjB,MAAM,QAAQ,IAAI,wBAAwB,IAAI,sBAAsB;EAEpE,OAAO;GAAE,IAAI,MAAM,IAAI,iBAAiB,GAAG,GAAG;GAAS,MAAM,GAAG,IAAI,mBAAmB,SAAS,GAAG;EAAQ;CAC7G;CAEA,IAAI,IAAI,wBAAwB;EAC9B,MAAM,QAAQ,IAAI,mBAAmB,IAAI,oBAAoB;EAE7D,OAAO;GAAE,IAAI,MAAM,IAAI,uBAAuB,GAAG,GAAG;GAAS,MAAM,GAAG,IAAI,4BAA4B,YAAY,GAAG;EAAQ;CAC/H;CAEA,IAAI,IAAI,UAAU;EAGhB,MAAM,QAAQ,IAAI,2BAA2B;EAC7C,MAAM,UAAU,IAAI,2BAA2B;EAC/C,MAAM,QAAQ,IAAI,oBAAoB,IAAI,iBAAiB;EAE3D,OAAO;GAAE,IAAI,UAAU,MAAM,GAAG,QAAQ,GAAG;GAAS,MAAM,GAAG,QAAQ,GAAG,MAAM,KAAK,KAAK,QAAQ,GAAG;EAAQ;CAC7G;CAEA,OAAO;AACT;;;;;;;ACnDA,MAAM,mBAAmB;;;;AAKzB,MAAM,sBAAsB;AAE5B,MAAM,iCAAiB,IAAI,IAAI;CAAC;CAAa;CAAa;AAAK,CAAC;AAEhE,eAAe,gBAAgB,gBAAoE;CACjG,IAAI,YAAY;CAEhB,SAAS;EACP,MAAM,QAAA,GAAOC,UAAAA,KAAAA,CAAK,WAAW,cAAc;EAE3C,IAAI,MAAMC,YAAAA,OAAO,IAAI,GAAG;GACtB,MAAM,cAAc,KAAK,MAAM,MAAMC,YAAAA,KAAK,IAAI,CAAC;GAE/C,IAAI,YAAY,QAAQ,YAAY,SAClC,OAAO;IAAE,MAAM,YAAY;IAAM,SAAS,YAAY;GAAQ;EAElE;EAEA,MAAM,UAAA,GAASC,UAAAA,QAAAA,CAAQ,SAAS;EAEhC,IAAI,WAAW,WACb;EAGF,YAAY;CACd;CAEA,MAAM,IAAI,MAAM,yDAAyD,gBAAgB;AAC3F;;AAGA,eAAe,uBAAuB,SAAsE;CAC1G,IAAI,QAAQ,QAAQ,QAAQ,gBAC1B,OAAO;EAAE,MAAM,QAAQ;EAAM,SAAS,QAAQ;CAAe;CAG/D,MAAM,kBAAkB,MAAM,gBAAgBC,aAAAA,QAAQ,IAAI,CAAC;CAE3D,OAAO;EAAE,MAAM,QAAQ,QAAQ,gBAAgB;EAAM,SAAS,QAAQ,kBAAkB,gBAAgB;CAAQ;AAClH;AAEA,SAAS,aAAa,SAAkC;CACtD,MAAM,QAAQ,QAAQ,SAASA,aAAAA,QAAQ,IAAI;CAE3C,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,yEAAyE;CAG3F,OAAO;AACT;AAEA,SAAS,kBAAkB,SAAwD;CACjF,MAAM,WAAW,SAAS;CAE1B,IAAI,QAAQ,IACV,OAAO;EAAE,IAAI,QAAQ;EAAI,MAAM,UAAU,QAAQ,QAAQ;CAAG;CAG9D,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,iHAAiH;CAGnI,OAAO;AACT;;AAGA,SAAS,iBAAiB,SAAkC;CAC1D,MAAM,UAAU,QAAQ,WAAW;CAEnC,IAAI,CAAC,OAAO,SAAS,OAAO,KAAK,WAAW,GAC1C,MAAM,IAAI,MAAM,gDAAgD;CAGlE,OAAO,KAAK,IAAI,SAAS,mBAAmB,IAAI;AAClD;;AAGA,SAAS,sBAAsB,WAAyB;CACtD,MAAM,MAAM,IAAI,IAAI,SAAS;CAE7B,IAAI,IAAI,aAAa,YAAY,CAAC,eAAe,IAAI,IAAI,QAAQ,GAC/D,MAAM,IAAI,MAAM,sCAAsC,UAAU,wEAAwE;AAE5I;AAEA,SAAS,YAAY,WAAmB,MAAsB;CAC5D,OAAO,IAAI,IAAI,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC,SAAS;AACjD;AAaA,SAAS,SAAS,WAAmB,UAA0B,WAAmC;CAChG,OAAO;EACL,IAAI,SAAS;EACb,MAAM,SAAS;EACf,SAAS,SAAS;EAClB,WAAW,SAAS;EACpB,KAAK,YAAY,WAAW,SAAS,GAAG;EACxC,eAAe,YAAY,WAAW,SAAS,aAAa;EAC5D,WAAW,SAAS;EACpB,UAAU,YAAY,WAAW,WAAW,WAAW;CACzD;AACF;AAEA,SAAS,aAAa,QAA8B;CAClD,eAAA,SAAS;EACP,IAAA,GAAGC,UAAAA,UAAAA,CAAU,OAAO,UAAU,OAAO,EAAE,CAAC,EAAE,IAAI,OAAO,QAAQ,YAAY,GAAG,OAAO,WAAW;EAC9F,IAAA,GAAGA,UAAAA,UAAAA,CAAU,OAAO,UAAU,OAAO,EAAE,CAAC,EAAE,KAAA,GAAIA,UAAAA,UAAAA,CAAU,QAAQ,OAAO,GAAG;EAC1E,IAAA,GAAGA,UAAAA,UAAAA,CAAU,OAAO,QAAQ,OAAO,EAAE,CAAC,EAAE,IAAI,OAAO;EACnD,IAAA,GAAGA,UAAAA,UAAAA,CAAU,OAAO,UAAU,OAAO,EAAE,CAAC,EAAE,IAAI,OAAO;CACvD,CAAC;AACH;;;;;;AAOA,eAAsB,SAAS,SAAyC;CACtE,MAAM,YAAY,iBAAiB,OAAO;CAC1C,MAAM,QAAQ,aAAa,OAAO;CAClC,sBAAsB,QAAQ,SAAS;CACvC,MAAM,EAAE,eAAe,MAAMC,YAAAA,YAAY,OAAO;CAChD,MAAM,KAAK,kBAAkB,OAAO;CACpC,MAAM,EAAE,MAAM,SAAS,mBAAmB,MAAM,uBAAuB,OAAO;CAI9E,aAAA,QAAQ,IAAI,oBAAoB,GAAG;CAEnC,MAAM,UAAU,QAAQ,OAAO,OAAOC,eAAAA,cAAc;CACpD,MAAM,OAAO,YAAoB;EAC/B,IAAI,QAAQ,MAAM;GAChB,QAAQ,MAAM,OAAO;GACrB;EACF;EAEA,SAAS,QAAQ,OAAO;CAC1B;CAEA,IAAI,QAAQ,MACV,IAAI,4BAA4B;CAElC,IAAI,CAAC,QAAQ,MACX,SAAS,MAAM,4BAA4B;CAG7C,MAAM,QAAQ,OAAA,GAAMC,aAAAA,YAAAA,CAAY;EAAE,WAAW,QAAQ;EAAW;EAAO,MAAM,GAAG;EAAM,eAAA,GAAcC,aAAAA,iBAAAA,CAAiB,GAAG,EAAE;CAAE,CAAC;CAE7H,MAAM,EAAE,SAAS,OAAO,QAAQ,YAAY,SAAS,cAAc,QAAQ,cAAoB;CAE/F,MAAM,UAAA,GAASC,aAAAA,aAAAA,CAAa;EAC1B,WAAW,QAAQ;EACnB,OAAO,MAAM;EACb;EACA,MAAMN,aAAAA,QAAQ,IAAI;EAClB,SAAS,QAAQ;EACjB,QAAQ,EAAE,MAAM,MAAM;EACtB,UAAUO,WAAAA,SAAY,QAAQ,YAAY;EAC1C,YAAY,aAAa,MAAML,YAAAA,YAAY,OAAO,EAAA,CAAG;EACrD,gBAAgB,UAAU;GACxB,MAAM,KAAK,sBAAsB,EAAE,UAAU,IAAI,gCAAgC,KAAK,CAAC;GACvF,MAAM,KAAK,qBAAqB,EAAE,UAAU,IAAI,+BAA+B,KAAK,CAAC;GACrF,MAAM,KAAK,sBAAsB;IAC/B,IAAI,8BAA8B;IAClC,UAAU;GACZ,CAAC;GACD,MAAM,KAAK,gBAAgB,EAAE,cAAc,IAAI,wBAAwB,SAAS,CAAC;GACjF,MAAM,KAAK,iBAAiB,EAAE,YAAY,WAAW,KAAK,CAAC;EAC7D;CACF,CAAC;CAED,MAAM,OAAO,QAAQ;CAErB,IAAI;EACF,IAAI;EAEJ,IAAI;GACF,MAAM,QAAQ,KAAK,CACjB,OACA,IAAI,SAAe,GAAG,WAAW;IAC/B,qBAAqB,iBAAiB,uBAAO,IAAI,MAAM,kEAAkE,CAAC,GAAG,gBAAgB;GAC/I,CAAC,CACH,CAAC;EACH,UAAU;GACR,aAAa,kBAAkB;EACjC;EAEA,IAAI,uBAAuB;EAE3B,MAAM,MAAM,OAAA,GAAMM,aAAAA,UAAAA,CAAU;GAAE,WAAW,QAAQ;GAAW;GAAO,MAAM;GAAY,SAAS,MAAM;GAAI;GAAM,SAAS;EAAe,CAAC;EACvI,IAAI,wBAAwB,IAAI,IAAI;EACpC,MAAM,WAAW,OAAA,GAAMC,aAAAA,WAAAA,CAAW;GAAE,WAAW,QAAQ;GAAW;GAAO,IAAI,IAAI;GAAI;EAAU,CAAC;EAEhG,IAAI,SAAS,WAAW,UACtB,MAAM,IAAI,MAAM,SAAS,SAAS,qBAAqB;EAGzD,IAAI,CAAC,SAAS,UACZ,MAAM,IAAI,MAAM,2CAA2C;EAG7D,MAAM,SAAS,SAAS,QAAQ,WAAW,SAAS,UAAU,MAAM,IAAI;EAExE,IAAI,QAAQ,MACV,IAAI,oBAAoB;EAE1B,IAAI,CAAC,QAAQ,MACX,SAAS,KAAK,oBAAoB;EAGpC,IAAI,QAAQ,MACV,QAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;EAEpC,IAAI,CAAC,QAAQ,MACX,aAAa,MAAM;CAEvB,SAAS,OAAO;EACd,IAAI,QAAQ,MACV,IAAI,iBAAiB;EAEvB,IAAI,CAAC,QAAQ,MACX,SAAS,KAAK,iBAAiB;EAEjC,MAAM;CACR,UAAU;EACR,IAAI,QAAQ,MACV,IAAI,gCAAgC;EAEtC,OAAO,WAAW;CACpB;AACF;AAEA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,UAA2B;EAC/B,GAAGC,YAAAA,oBAAoB,MAAM;EAC7B,OAAO,OAAO;EACd,IAAI,OAAO;EACX,MAAM,OAAO;EACb,gBAAgB,OAAO;EACvB,SAAS,OAAO;EAChB,MAAM,OAAO;CACf;CACA,MAAMC,YAAAA,IAAI,eAAe,SAAS,OAAO,GAAG,EAAE,MAAM,QAAQ,KAAK,CAAC;AACpE"}
1
+ {"version":3,"file":"snapshot-kE1CAErY.cjs","names":["readFileSync","process","join","exists","read","dirname","process","styleText","loadConfigs","createSpinner","createAgent","machineTokenFrom","createClient","logLevelMap","createJob","waitForJob","createStudioOptions","run"],"sources":["../src/runners/studio/ci.ts","../src/runners/studio/snapshot.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport process from 'node:process'\n\n/**\n * Stable identity for the CI agent a snapshot run registers or reuses.\n */\nexport type CiContext = {\n /**\n * Fed into the machine token, so the same merge or pull request reuses one agent.\n */\n id: string\n /**\n * Agent display name shown in Studio.\n */\n name: string\n}\n\nfunction readGithubPullRequestNumber(eventPath: string | undefined): string | undefined {\n if (!eventPath) {\n return undefined\n }\n\n try {\n const event = JSON.parse(readFileSync(eventPath, 'utf8')) as { pull_request?: { number?: number } }\n return event.pull_request?.number ? String(event.pull_request.number) : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Detects the CI provider from its environment variables and derives a stable identity from it.\n * The GitHub row reproduces `gh:<repositoryId>:<prNumber>`, the identity `kubb-labs/action` has\n * always registered agents under, so an existing repository keeps reusing its agent.\n */\nexport function detectCi(env: Record<string, string | undefined> = process.env): CiContext | null {\n if (env.GITHUB_ACTIONS) {\n const pullRequestNumber = readGithubPullRequestNumber(env.GITHUB_EVENT_PATH)\n const repositoryId = env.GITHUB_REPOSITORY_ID ?? env.GITHUB_REPOSITORY ?? ''\n const scope = pullRequestNumber ?? env.GITHUB_RUN_ID ?? ''\n\n return { id: `gh:${repositoryId}:${scope}`, name: `${env.GITHUB_REPOSITORY ?? 'github'}#${scope}` }\n }\n\n if (env.GITLAB_CI) {\n const scope = env.CI_MERGE_REQUEST_IID ?? env.CI_COMMIT_REF_SLUG ?? ''\n\n return { id: `gl:${env.CI_PROJECT_ID ?? ''}:${scope}`, name: `${env.CI_PROJECT_PATH ?? 'gitlab'}#${scope}` }\n }\n\n if (env.BITBUCKET_BUILD_NUMBER) {\n const scope = env.BITBUCKET_PR_ID ?? env.BITBUCKET_BRANCH ?? ''\n\n return { id: `bb:${env.BITBUCKET_REPO_UUID ?? ''}:${scope}`, name: `${env.BITBUCKET_REPO_FULL_NAME ?? 'bitbucket'}#${scope}` }\n }\n\n if (env.CIRCLECI) {\n // Owner-qualified: two projects with the same name under different CircleCI orgs must not\n // collide on one agent, since registering it purges the other project's live sessions.\n const owner = env.CIRCLE_PROJECT_USERNAME ?? ''\n const project = env.CIRCLE_PROJECT_REPONAME ?? 'circleci'\n const scope = env.CIRCLE_PR_NUMBER ?? env.CIRCLE_BRANCH ?? ''\n\n return { id: `circle:${owner}:${project}:${scope}`, name: `${owner ? `${owner}/` : ''}${project}#${scope}` }\n }\n\n return null\n}\n","import { dirname, join } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { exists, read } from '@internals/utils'\nimport { logLevel as logLevelMap } from '@kubb/core'\nimport { createAgent, createClient, createJob, machineTokenFrom, waitForJob, type StudioSnapshot } from '@kubb/studio'\nimport { createSpinner, logBlock } from '../../loggers/output.ts'\nimport { detectCi } from './ci.ts'\nimport { createStudioOptions, loadConfigs, run, type SnapshotOptions } from './run.ts'\nimport type { definition } from '../../commands/studio/snapshot.ts'\nimport type { CommandRunner } from 'gunshi'\n\n/**\n * How long to wait for Studio's `studio:ready` acknowledgement, above the client's own 10s\n * handshake-ack timeout.\n */\nconst READY_TIMEOUT_MS = 15_000\n\n/**\n * Longest `--timeout` accepted. Job records expire from Studio's storage after an hour.\n */\nconst MAX_TIMEOUT_SECONDS = 3600\n\nconst LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1'])\n\nasync function findPackageJson(startDirectory: string): Promise<{ name: string; version: string }> {\n let directory = startDirectory\n\n for (;;) {\n const file = join(directory, 'package.json')\n\n if (await exists(file)) {\n const packageJson = JSON.parse(await read(file)) as Partial<{ name: string; version: string }>\n\n if (packageJson.name && packageJson.version) {\n return { name: packageJson.name, version: packageJson.version }\n }\n }\n\n const parent = dirname(directory)\n\n if (parent === directory) {\n break\n }\n\n directory = parent\n }\n\n throw new Error(`No package.json with a name and a version found above ${startDirectory}`)\n}\n\n/** Reads package.json only for whichever of name/version --name and --version did not supply. */\nasync function resolvePackageMetadata(options: SnapshotOptions): Promise<{ name: string; version: string }> {\n if (options.name && options.packageVersion) {\n return { name: options.name, version: options.packageVersion }\n }\n\n const packageMetadata = await findPackageJson(process.cwd())\n\n return { name: options.name ?? packageMetadata.name, version: options.packageVersion ?? packageMetadata.version }\n}\n\nfunction resolveToken(options: SnapshotOptions): string {\n const token = options.token ?? process.env.KUBB_TOKEN\n\n if (!token) {\n throw new Error('An organization CI API key is required. Pass --token or set KUBB_TOKEN.')\n }\n\n return token\n}\n\nfunction resolveCiIdentity(options: SnapshotOptions): { id: string; name: string } {\n const detected = detectCi()\n\n if (options.id) {\n return { id: options.id, name: detected?.name ?? options.id }\n }\n\n if (!detected) {\n throw new Error('Could not detect a supported CI provider (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI). Pass --id.')\n }\n\n return detected\n}\n\n/** Rejects a bad `--timeout` up front instead of letting it reach `waitForJob` as NaN or <= 0. */\nfunction resolveTimeoutMs(options: SnapshotOptions): number {\n const seconds = options.timeout ?? 600\n\n if (!Number.isFinite(seconds) || seconds <= 0) {\n throw new Error('--timeout must be a positive number of seconds')\n }\n\n return Math.min(seconds, MAX_TIMEOUT_SECONDS) * 1000\n}\n\n/** The CI key is a credential, so refuse to send it anywhere but HTTPS or a loopback dev host. */\nfunction assertSecureStudioUrl(studioUrl: string): void {\n const url = new URL(studioUrl)\n\n if (url.protocol !== 'https:' && !LOOPBACK_HOSTS.has(url.hostname)) {\n throw new Error(`Refusing to send the CI API key to ${studioUrl}. Use an https:// Studio URL, or a loopback host for local development.`)\n }\n}\n\nfunction absoluteUrl(studioUrl: string, path: string): string {\n return new URL(path, `${studioUrl}/`).toString()\n}\n\ntype SnapshotResult = {\n id: string\n name: string | null\n version: string | null\n integrity: string | null\n url: string\n snapshotIdUrl: string\n expiresAt: string\n agentUrl: string\n}\n\nfunction toResult(studioUrl: string, snapshot: StudioSnapshot, agentSlug: string): SnapshotResult {\n return {\n id: snapshot.id,\n name: snapshot.name,\n version: snapshot.version,\n integrity: snapshot.integrity,\n url: absoluteUrl(studioUrl, snapshot.url),\n snapshotIdUrl: absoluteUrl(studioUrl, snapshot.snapshotIdUrl),\n expiresAt: snapshot.expiresAt,\n agentUrl: absoluteUrl(studioUrl, `/agents/${agentSlug}`),\n }\n}\n\nfunction printSummary(result: SnapshotResult): void {\n logBlock([\n `${styleText('dim', 'Package'.padEnd(10))} ${result.name ?? '(unnamed)'}@${result.version ?? '0.0.0'}`,\n `${styleText('dim', 'Tarball'.padEnd(10))} ${styleText('cyan', result.url)}`,\n `${styleText('dim', 'Agent'.padEnd(10))} ${result.agentUrl}`,\n `${styleText('dim', 'Expires'.padEnd(10))} ${result.expiresAt}`,\n ])\n}\n\n/**\n * Generates a Kubb Studio snapshot from a script: registers or reuses a CI agent, connects it,\n * queues a snapshot job, and polls until the tarball is ready. A snapshot job runs generation and\n * packs the tarball in one step, so this needs no separate generation run.\n */\nexport async function snapshot(options: SnapshotOptions): Promise<void> {\n const timeoutMs = resolveTimeoutMs(options)\n const token = resolveToken(options)\n assertSecureStudioUrl(options.studioUrl)\n const { configPath } = await loadConfigs(options)\n const ci = resolveCiIdentity(options)\n const { name, version: packageVersion } = await resolvePackageMetadata(options)\n\n // Set before the first `getMachineToken()` call (inside `client.connect()`), so the WebSocket\n // session registers under the same machine token `createAgent` just registered with Studio.\n process.env.KUBB_AGENT_SECRET = ci.id\n\n const spinner = options.json ? null : createSpinner()\n const log = (message: string) => {\n if (options.json) {\n console.error(message)\n return\n }\n\n spinner?.message(message)\n }\n\n if (options.json) {\n log('Creating Kubb Studio agent')\n }\n if (!options.json) {\n spinner?.start('Creating Kubb Studio agent')\n }\n\n const agent = await createAgent({ studioUrl: options.studioUrl, token, name: ci.name, machineToken: machineTokenFrom(ci.id) })\n\n const { promise: ready, reject: markFailed, resolve: markReady } = Promise.withResolvers<void>()\n\n const client = createClient({\n studioUrl: options.studioUrl,\n token: agent.token,\n configPath,\n root: process.cwd(),\n version: options.version,\n client: { kind: 'cli' },\n logLevel: logLevelMap[options.logLevel ?? 'info'],\n loadConfig: async () => (await loadConfigs(options)).config,\n installLogger: (hooks) => {\n hooks.hook('studio:connecting', ({ url }) => log(`Connecting to Kubb Studio at ${url}`))\n hooks.hook('studio:connected', ({ url }) => log(`Connected to Kubb Studio at ${url}`))\n hooks.hook('studio:ready', () => {\n log('Kubb Studio connection ready')\n markReady()\n })\n hooks.hook('studio:warn', ({ message }) => log(`Kubb Studio warning: ${message}`))\n hooks.hook('studio:error', ({ error }) => markFailed(error))\n },\n })\n\n await client.connect()\n\n try {\n let readyTimeoutHandle: ReturnType<typeof setTimeout> | undefined\n\n try {\n await Promise.race([\n ready,\n new Promise<void>((_, reject) => {\n readyTimeoutHandle = setTimeout(() => reject(new Error('Timed out waiting for Kubb Studio to confirm the agent was ready')), READY_TIMEOUT_MS)\n }),\n ])\n } finally {\n clearTimeout(readyTimeoutHandle)\n }\n\n log('Creating snapshot job')\n\n const job = await createJob({ studioUrl: options.studioUrl, token, type: 'snapshot', agentId: agent.id, name, version: packageVersion })\n log(`Snapshot job queued: ${job.id}`)\n const finished = await waitForJob({ studioUrl: options.studioUrl, token, id: job.id, timeoutMs })\n\n if (finished.status === 'failed') {\n throw new Error(finished.error ?? 'Snapshot job failed')\n }\n\n if (!finished.snapshot) {\n throw new Error('Snapshot job succeeded without a snapshot')\n }\n\n const result = toResult(options.studioUrl, finished.snapshot, agent.slug)\n\n if (options.json) {\n log('Snapshot published')\n }\n if (!options.json) {\n spinner?.stop('Snapshot published')\n }\n\n if (options.json) {\n console.log(JSON.stringify(result))\n }\n if (!options.json) {\n printSummary(result)\n }\n } catch (error) {\n if (options.json) {\n log('Snapshot failed')\n }\n if (!options.json) {\n spinner?.stop('Snapshot failed')\n }\n throw error\n } finally {\n if (options.json) {\n log('Disconnecting from Kubb Studio')\n }\n client.disconnect()\n }\n}\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options: SnapshotOptions = {\n ...createStudioOptions(values),\n token: values.token,\n id: values.id,\n name: values.name,\n packageVersion: values.packageVersion,\n timeout: values.timeout,\n json: values.json,\n }\n await run(options, () => snapshot(options), { json: options.json })\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  require("./rolldown-runtime-qbf5tadS.cjs");
2
- const require_run = require("./run-D_56uxHq.cjs");
2
+ const require_run = require("./run-H4U_YmsO.cjs");
3
3
  //#region src/runners/studio/status.ts
4
4
  const runner = async ({ values }) => {
5
5
  const options = require_run.createStudioOptions(values);
@@ -8,4 +8,4 @@ const runner = async ({ values }) => {
8
8
  //#endregion
9
9
  exports.runner = runner;
10
10
 
11
- //# sourceMappingURL=status-Cnz_dtTm.cjs.map
11
+ //# sourceMappingURL=status-BxwAMBv8.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-Cnz_dtTm.cjs","names":["createStudioOptions","run","status"],"sources":["../src/runners/studio/status.ts"],"sourcesContent":["import type { CommandRunner } from 'gunshi'\nimport type { definition } from '../../commands/studio/status.ts'\nimport { createStudioOptions, run, status } from './run.ts'\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options = createStudioOptions(values)\n await run(options, () => status(options))\n}\n"],"mappings":";;;AAIA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,UAAUA,YAAAA,oBAAoB,MAAM;CAC1C,MAAMC,YAAAA,IAAI,eAAeC,YAAAA,OAAO,OAAO,CAAC;AAC1C"}
1
+ {"version":3,"file":"status-BxwAMBv8.cjs","names":["createStudioOptions","run","status"],"sources":["../src/runners/studio/status.ts"],"sourcesContent":["import type { CommandRunner } from 'gunshi'\nimport type { definition } from '../../commands/studio/status.ts'\nimport { createStudioOptions, run, status } from './run.ts'\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options = createStudioOptions(values)\n await run(options, () => status(options))\n}\n"],"mappings":";;;AAIA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,UAAUA,YAAAA,oBAAoB,MAAM;CAC1C,MAAMC,YAAAA,IAAI,eAAeC,YAAAA,OAAO,OAAO,CAAC;AAC1C"}
@@ -1,5 +1,5 @@
1
1
  import "./rolldown-runtime-C0LytTxp.js";
2
- import { a as run, n as createStudioOptions, o as status } from "./run-CCaE_xwg.js";
2
+ import { a as run, n as createStudioOptions, o as status } from "./run-DoQQVipv.js";
3
3
  //#region src/runners/studio/status.ts
4
4
  const runner = async ({ values }) => {
5
5
  const options = createStudioOptions(values);
@@ -8,4 +8,4 @@ const runner = async ({ values }) => {
8
8
  //#endregion
9
9
  export { runner };
10
10
 
11
- //# sourceMappingURL=status-Bd8xzflr.js.map
11
+ //# sourceMappingURL=status-U4u5bDMo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-Bd8xzflr.js","names":[],"sources":["../src/runners/studio/status.ts"],"sourcesContent":["import type { CommandRunner } from 'gunshi'\nimport type { definition } from '../../commands/studio/status.ts'\nimport { createStudioOptions, run, status } from './run.ts'\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options = createStudioOptions(values)\n await run(options, () => status(options))\n}\n"],"mappings":";;;AAIA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,UAAU,oBAAoB,MAAM;CAC1C,MAAM,IAAI,eAAe,OAAO,OAAO,CAAC;AAC1C"}
1
+ {"version":3,"file":"status-U4u5bDMo.js","names":[],"sources":["../src/runners/studio/status.ts"],"sourcesContent":["import type { CommandRunner } from 'gunshi'\nimport type { definition } from '../../commands/studio/status.ts'\nimport { createStudioOptions, run, status } from './run.ts'\n\nexport const runner: CommandRunner<{ args: typeof definition.args; extensions: {} }> = async ({ values }) => {\n const options = createStudioOptions(values)\n await run(options, () => status(options))\n}\n"],"mappings":";;;AAIA,MAAa,SAA0E,OAAO,EAAE,aAAa;CAC3G,MAAM,UAAU,oBAAoB,MAAM;CAC1C,MAAM,IAAI,eAAe,OAAO,OAAO,CAAC;AAC1C"}
@@ -138,18 +138,18 @@ const definition = (0, gunshi.define)({
138
138
  ...require_shared.logLevelArg
139
139
  },
140
140
  async run(ctx) {
141
- const { runner } = await Promise.resolve().then(() => require("./connect-REsegTXc.cjs"));
141
+ const { runner } = await Promise.resolve().then(() => require("./connect-BtLCM-Mv.cjs"));
142
142
  await runner(ctx);
143
143
  },
144
144
  subCommands: {
145
- connect: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./connect-REsegTXc.cjs"))).runner, definition$5),
146
- login: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./login-COK08ZB3.cjs"))).runner, definition$4),
147
- logout: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./logout-DaEyKEju.cjs"))).runner, definition$3),
148
- status: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./status-Cnz_dtTm.cjs"))).runner, definition$1),
149
- snapshot: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./snapshot-BJ0G8ou9.cjs"))).runner, definition$2)
145
+ connect: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./connect-BtLCM-Mv.cjs"))).runner, definition$5),
146
+ login: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./login-76sS3lz4.cjs"))).runner, definition$4),
147
+ logout: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./logout-DezaQpPH.cjs"))).runner, definition$3),
148
+ status: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./status-BxwAMBv8.cjs"))).runner, definition$1),
149
+ snapshot: (0, gunshi.lazy)(async () => (await Promise.resolve().then(() => require("./snapshot-kE1CAErY.cjs"))).runner, definition$2)
150
150
  }
151
151
  });
152
152
  //#endregion
153
153
  exports.definition = definition;
154
154
 
155
- //# sourceMappingURL=studio-CL4-rJt1.cjs.map
155
+ //# sourceMappingURL=studio-BvRAD5id.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"studio-CL4-rJt1.cjs","names":["definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","lazy","connectDefinition","loginDefinition","logoutDefinition","statusDefinition","snapshotDefinition"],"sources":["../src/commands/studio/connect.ts","../src/commands/studio/login.ts","../src/commands/studio/logout.ts","../src/commands/studio/snapshot.ts","../src/commands/studio/status.ts","../src/commands/studio/index.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'logout',\n description: 'Forget the stored Kubb Studio token.',\n examples: ['kubb studio logout'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = 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 rendering: {\n header: null,\n },\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\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 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 timeout: {\n type: 'number',\n description: 'Seconds to wait for the job to finish',\n default: 600,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'status',\n description: 'Show the machine’s Kubb Studio pairing and saved project permissions.',\n examples: ['kubb studio status'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define, lazy } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\nimport { definition as connectDefinition } from './connect.ts'\nimport { definition as loginDefinition } from './login.ts'\nimport { definition as logoutDefinition } from './logout.ts'\nimport { definition as snapshotDefinition } from './snapshot.ts'\nimport { definition as statusDefinition } from './status.ts'\n\nexport const definition = define({\n name: 'studio',\n description: 'Connect this project to Kubb Studio, or manage its pairing and snapshots.',\n examples: ['kubb studio', 'kubb studio --allow-read', 'kubb studio login', 'kubb studio status', 'kubb studio logout', 'kubb studio snapshot'].join('\\n'),\n toKebab: true,\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 async run(ctx) {\n const { runner } = await import('../../runners/studio/connect.ts')\n await runner(ctx)\n },\n subCommands: {\n connect: lazy(async () => (await import('../../runners/studio/connect.ts')).runner, connectDefinition),\n login: lazy(async () => (await import('../../runners/studio/login.ts')).runner, loginDefinition),\n logout: lazy(async () => (await import('../../runners/studio/logout.ts')).runner, logoutDefinition),\n status: lazy(async () => (await import('../../runners/studio/status.ts')).runner, statusDefinition),\n snapshot: lazy(async () => (await import('../../runners/studio/snapshot.ts')).runner, snapshotDefinition),\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"studio-BvRAD5id.cjs","names":["definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","definition","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","define","configArg","studioConnectionArgs","studioPermissionArgs","logLevelArg","lazy","connectDefinition","loginDefinition","logoutDefinition","statusDefinition","snapshotDefinition"],"sources":["../src/commands/studio/connect.ts","../src/commands/studio/login.ts","../src/commands/studio/logout.ts","../src/commands/studio/snapshot.ts","../src/commands/studio/status.ts","../src/commands/studio/index.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'logout',\n description: 'Forget the stored Kubb Studio token.',\n examples: ['kubb studio logout'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = 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 rendering: {\n header: null,\n },\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\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 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 timeout: {\n type: 'number',\n description: 'Seconds to wait for the job to finish',\n default: 600,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'status',\n description: 'Show the machine’s Kubb Studio pairing and saved project permissions.',\n examples: ['kubb studio status'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define, lazy } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\nimport { definition as connectDefinition } from './connect.ts'\nimport { definition as loginDefinition } from './login.ts'\nimport { definition as logoutDefinition } from './logout.ts'\nimport { definition as snapshotDefinition } from './snapshot.ts'\nimport { definition as statusDefinition } from './status.ts'\n\nexport const definition = define({\n name: 'studio',\n description: 'Connect this project to Kubb Studio, or manage its pairing and snapshots.',\n examples: ['kubb studio', 'kubb studio --allow-read', 'kubb studio login', 'kubb studio status', 'kubb studio logout', 'kubb studio snapshot'].join('\\n'),\n toKebab: true,\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 async run(ctx) {\n const { runner } = await import('../../runners/studio/connect.ts')\n await runner(ctx)\n },\n subCommands: {\n connect: lazy(async () => (await import('../../runners/studio/connect.ts')).runner, connectDefinition),\n login: lazy(async () => (await import('../../runners/studio/login.ts')).runner, loginDefinition),\n logout: lazy(async () => (await import('../../runners/studio/logout.ts')).runner, logoutDefinition),\n status: lazy(async () => (await import('../../runners/studio/status.ts')).runner, statusDefinition),\n snapshot: lazy(async () => (await import('../../runners/studio/snapshot.ts')).runner, snapshotDefinition),\n },\n})\n"],"mappings":"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"}
@@ -138,18 +138,18 @@ const definition = define({
138
138
  ...logLevelArg
139
139
  },
140
140
  async run(ctx) {
141
- const { runner } = await import("./connect-CBUOlzxq.js");
141
+ const { runner } = await import("./connect-DHSX6U4J.js");
142
142
  await runner(ctx);
143
143
  },
144
144
  subCommands: {
145
- connect: lazy(async () => (await import("./connect-CBUOlzxq.js")).runner, definition$5),
146
- login: lazy(async () => (await import("./login-2Zu5CrWN.js")).runner, definition$4),
147
- logout: lazy(async () => (await import("./logout-BVzfibCs.js")).runner, definition$3),
148
- status: lazy(async () => (await import("./status-Bd8xzflr.js")).runner, definition$1),
149
- snapshot: lazy(async () => (await import("./snapshot-BXBRVfIr.js")).runner, definition$2)
145
+ connect: lazy(async () => (await import("./connect-DHSX6U4J.js")).runner, definition$5),
146
+ login: lazy(async () => (await import("./login-CHUZUzZ5.js")).runner, definition$4),
147
+ logout: lazy(async () => (await import("./logout-C6-b0fqF.js")).runner, definition$3),
148
+ status: lazy(async () => (await import("./status-U4u5bDMo.js")).runner, definition$1),
149
+ snapshot: lazy(async () => (await import("./snapshot-CCU6R7YD.js")).runner, definition$2)
150
150
  }
151
151
  });
152
152
  //#endregion
153
153
  export { definition };
154
154
 
155
- //# sourceMappingURL=studio-DZ3HJ4at.js.map
155
+ //# sourceMappingURL=studio-CnQYiwbx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"studio-DZ3HJ4at.js","names":["definition","definition","definition","definition","definition","connectDefinition","loginDefinition","logoutDefinition","statusDefinition","snapshotDefinition"],"sources":["../src/commands/studio/connect.ts","../src/commands/studio/login.ts","../src/commands/studio/logout.ts","../src/commands/studio/snapshot.ts","../src/commands/studio/status.ts","../src/commands/studio/index.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'logout',\n description: 'Forget the stored Kubb Studio token.',\n examples: ['kubb studio logout'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = 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 rendering: {\n header: null,\n },\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\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 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 timeout: {\n type: 'number',\n description: 'Seconds to wait for the job to finish',\n default: 600,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'status',\n description: 'Show the machine’s Kubb Studio pairing and saved project permissions.',\n examples: ['kubb studio status'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define, lazy } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\nimport { definition as connectDefinition } from './connect.ts'\nimport { definition as loginDefinition } from './login.ts'\nimport { definition as logoutDefinition } from './logout.ts'\nimport { definition as snapshotDefinition } from './snapshot.ts'\nimport { definition as statusDefinition } from './status.ts'\n\nexport const definition = define({\n name: 'studio',\n description: 'Connect this project to Kubb Studio, or manage its pairing and snapshots.',\n examples: ['kubb studio', 'kubb studio --allow-read', 'kubb studio login', 'kubb studio status', 'kubb studio logout', 'kubb studio snapshot'].join('\\n'),\n toKebab: true,\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 async run(ctx) {\n const { runner } = await import('../../runners/studio/connect.ts')\n await runner(ctx)\n },\n subCommands: {\n connect: lazy(async () => (await import('../../runners/studio/connect.ts')).runner, connectDefinition),\n login: lazy(async () => (await import('../../runners/studio/login.ts')).runner, loginDefinition),\n logout: lazy(async () => (await import('../../runners/studio/logout.ts')).runner, logoutDefinition),\n status: lazy(async () => (await import('../../runners/studio/status.ts')).runner, statusDefinition),\n snapshot: lazy(async () => (await import('../../runners/studio/snapshot.ts')).runner, snapshotDefinition),\n },\n})\n"],"mappings":";;;;AAGA,MAAaA,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;EACR;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI;CACX,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;AACF,CAAC;;;ACtBD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,qBAAqB,+CAA+C,CAAC,CAAC,KAAK,IAAI;CAC1F,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;AACF,CAAC;;;ACjBD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,oBAAoB,CAAC,CAAC,KAAK,IAAI;CAC1C,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;AACF,CAAC;;;ACXD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,wBAAwB,6BAA6B,CAAC,CAAC,KAAK,IAAI;CAC3E,SAAS;CACT,WAAW,EACT,QAAQ,KACV;CACA,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,IAAI;GACF,MAAM;GACN,aAAa;EACf;EACA,MAAM;GACJ,MAAM;GACN,aAAa;EACf;EACA,gBAAgB;GACd,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,SAAS;GACP,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,GAAG;CACL;AACF,CAAC;;;ACrCD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,oBAAoB,CAAC,CAAC,KAAK,IAAI;CAC1C,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;AACF,CAAC;;;ACND,MAAa,aAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;EAAC;EAAe;EAA4B;EAAqB;EAAsB;EAAsB;CAAsB,CAAC,CAAC,KAAK,IAAI;CACxJ,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;CACA,MAAM,IAAI,KAAK;EACb,MAAM,EAAE,WAAW,MAAM,OAAO;EAChC,MAAM,OAAO,GAAG;CAClB;CACA,aAAa;EACX,SAAS,KAAK,aAAa,MAAM,OAAO,yBAAA,CAAoC,QAAQC,YAAiB;EACrG,OAAO,KAAK,aAAa,MAAM,OAAO,uBAAA,CAAkC,QAAQC,YAAe;EAC/F,QAAQ,KAAK,aAAa,MAAM,OAAO,wBAAA,CAAmC,QAAQC,YAAgB;EAClG,QAAQ,KAAK,aAAa,MAAM,OAAO,wBAAA,CAAmC,QAAQC,YAAgB;EAClG,UAAU,KAAK,aAAa,MAAM,OAAO,0BAAA,CAAqC,QAAQC,YAAkB;CAC1G;AACF,CAAC"}
1
+ {"version":3,"file":"studio-CnQYiwbx.js","names":["definition","definition","definition","definition","definition","connectDefinition","loginDefinition","logoutDefinition","statusDefinition","snapshotDefinition"],"sources":["../src/commands/studio/connect.ts","../src/commands/studio/login.ts","../src/commands/studio/logout.ts","../src/commands/studio/snapshot.ts","../src/commands/studio/status.ts","../src/commands/studio/index.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\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 toKebab: true,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'logout',\n description: 'Forget the stored Kubb Studio token.',\n examples: ['kubb studio logout'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = 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 rendering: {\n header: null,\n },\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\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 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 timeout: {\n type: 'number',\n description: 'Seconds to wait for the job to finish',\n default: 600,\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})\n","import { define } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\n\nexport const definition = define({\n name: 'status',\n description: 'Show the machine’s Kubb Studio pairing and saved project permissions.',\n examples: ['kubb studio status'].join('\\n'),\n toKebab: true,\n args: {\n ...configArg,\n ...studioConnectionArgs,\n ...studioPermissionArgs,\n ...logLevelArg,\n },\n})\n","import { define, lazy } from 'gunshi'\nimport { configArg, logLevelArg, studioConnectionArgs, studioPermissionArgs } from '../shared.ts'\nimport { definition as connectDefinition } from './connect.ts'\nimport { definition as loginDefinition } from './login.ts'\nimport { definition as logoutDefinition } from './logout.ts'\nimport { definition as snapshotDefinition } from './snapshot.ts'\nimport { definition as statusDefinition } from './status.ts'\n\nexport const definition = define({\n name: 'studio',\n description: 'Connect this project to Kubb Studio, or manage its pairing and snapshots.',\n examples: ['kubb studio', 'kubb studio --allow-read', 'kubb studio login', 'kubb studio status', 'kubb studio logout', 'kubb studio snapshot'].join('\\n'),\n toKebab: true,\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 async run(ctx) {\n const { runner } = await import('../../runners/studio/connect.ts')\n await runner(ctx)\n },\n subCommands: {\n connect: lazy(async () => (await import('../../runners/studio/connect.ts')).runner, connectDefinition),\n login: lazy(async () => (await import('../../runners/studio/login.ts')).runner, loginDefinition),\n logout: lazy(async () => (await import('../../runners/studio/logout.ts')).runner, logoutDefinition),\n status: lazy(async () => (await import('../../runners/studio/status.ts')).runner, statusDefinition),\n snapshot: lazy(async () => (await import('../../runners/studio/snapshot.ts')).runner, snapshotDefinition),\n },\n})\n"],"mappings":";;;;AAGA,MAAaA,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;EACR;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI;CACX,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;AACF,CAAC;;;ACtBD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,qBAAqB,+CAA+C,CAAC,CAAC,KAAK,IAAI;CAC1F,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;AACF,CAAC;;;ACjBD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,oBAAoB,CAAC,CAAC,KAAK,IAAI;CAC1C,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;AACF,CAAC;;;ACXD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,wBAAwB,6BAA6B,CAAC,CAAC,KAAK,IAAI;CAC3E,SAAS;CACT,WAAW,EACT,QAAQ,KACV;CACA,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,IAAI;GACF,MAAM;GACN,aAAa;EACf;EACA,MAAM;GACJ,MAAM;GACN,aAAa;EACf;EACA,gBAAgB;GACd,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,SAAS;GACP,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA,GAAG;CACL;AACF,CAAC;;;ACrCD,MAAaC,eAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU,CAAC,oBAAoB,CAAC,CAAC,KAAK,IAAI;CAC1C,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;AACF,CAAC;;;ACND,MAAa,aAAa,OAAO;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;EAAC;EAAe;EAA4B;EAAqB;EAAsB;EAAsB;CAAsB,CAAC,CAAC,KAAK,IAAI;CACxJ,SAAS;CACT,MAAM;EACJ,GAAG;EACH,GAAG;EACH,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACT,WAAW;EACb;EACA,GAAG;CACL;CACA,MAAM,IAAI,KAAK;EACb,MAAM,EAAE,WAAW,MAAM,OAAO;EAChC,MAAM,OAAO,GAAG;CAClB;CACA,aAAa;EACX,SAAS,KAAK,aAAa,MAAM,OAAO,yBAAA,CAAoC,QAAQC,YAAiB;EACrG,OAAO,KAAK,aAAa,MAAM,OAAO,uBAAA,CAAkC,QAAQC,YAAe;EAC/F,QAAQ,KAAK,aAAa,MAAM,OAAO,wBAAA,CAAmC,QAAQC,YAAgB;EAClG,QAAQ,KAAK,aAAa,MAAM,OAAO,wBAAA,CAAmC,QAAQC,YAAgB;EAClG,UAAU,KAAK,aAAa,MAAM,OAAO,0BAAA,CAAqC,QAAQC,YAAkB;CAC1G;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "5.3.12",
3
+ "version": "5.3.13",
4
4
  "description": "Official CLI for Kubb. Run kubb generate, kubb init, kubb validate, kubb studio, and kubb mcp to manage the full code generation lifecycle.",
5
5
  "keywords": [
6
6
  "cli",
@@ -63,7 +63,7 @@
63
63
  "dependencies": {
64
64
  "@clack/prompts": "^1.8.1",
65
65
  "@gunshi/plugin-dryrun": "^0.37.3",
66
- "@kubb/core": "5.3.12",
66
+ "@kubb/core": "5.3.13",
67
67
  "chokidar": "^5.0.0",
68
68
  "gunshi": "^0.37.3",
69
69
  "jiti": "^2.7.0",
@@ -74,13 +74,13 @@
74
74
  "devDependencies": {
75
75
  "@internals/shared": "0.0.1",
76
76
  "@internals/utils": "0.0.1",
77
- "@kubb/adapter-oas": "5.3.12",
78
- "@kubb/studio": "5.3.12"
77
+ "@kubb/adapter-oas": "5.3.13",
78
+ "@kubb/studio": "5.3.13"
79
79
  },
80
80
  "peerDependencies": {
81
- "@kubb/adapter-oas": "5.3.12",
82
- "@kubb/mcp": "5.3.12",
83
- "@kubb/studio": "5.3.12"
81
+ "@kubb/adapter-oas": "5.3.13",
82
+ "@kubb/mcp": "5.3.13",
83
+ "@kubb/studio": "5.3.13"
84
84
  },
85
85
  "peerDependenciesMeta": {
86
86
  "@kubb/adapter-oas": {
@@ -1,6 +0,0 @@
1
- //#region package.json
2
- var version = "5.3.12";
3
- //#endregion
4
- export { version as t };
5
-
6
- //# sourceMappingURL=package-Cklv5UIh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-Cklv5UIh.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-QUqcQehm.cjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}