@pipeline-builder/pipeline-manager 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +145 -0
  3. package/cdk.json +91 -0
  4. package/config.yml +94 -0
  5. package/dist/agent/ai.d.ts +48 -0
  6. package/dist/agent/ai.d.ts.map +1 -0
  7. package/dist/agent/ai.js +149 -0
  8. package/dist/agent/bootstrap.d.ts +39 -0
  9. package/dist/agent/bootstrap.d.ts.map +1 -0
  10. package/dist/agent/bootstrap.js +66 -0
  11. package/dist/agent/env-file.d.ts +17 -0
  12. package/dist/agent/env-file.d.ts.map +1 -0
  13. package/dist/agent/env-file.js +47 -0
  14. package/dist/agent/executor.d.ts +30 -0
  15. package/dist/agent/executor.d.ts.map +1 -0
  16. package/dist/agent/executor.js +60 -0
  17. package/dist/agent/health.d.ts +43 -0
  18. package/dist/agent/health.d.ts.map +1 -0
  19. package/dist/agent/health.js +109 -0
  20. package/dist/agent/ports.d.ts +26 -0
  21. package/dist/agent/ports.d.ts.map +1 -0
  22. package/dist/agent/ports.js +132 -0
  23. package/dist/agent/post-steps.d.ts +61 -0
  24. package/dist/agent/post-steps.d.ts.map +1 -0
  25. package/dist/agent/post-steps.js +131 -0
  26. package/dist/agent/prereqs.d.ts +26 -0
  27. package/dist/agent/prereqs.d.ts.map +1 -0
  28. package/dist/agent/prereqs.js +134 -0
  29. package/dist/agent/targets.d.ts +128 -0
  30. package/dist/agent/targets.d.ts.map +1 -0
  31. package/dist/agent/targets.js +265 -0
  32. package/dist/agent/tools.d.ts +13 -0
  33. package/dist/agent/tools.d.ts.map +1 -0
  34. package/dist/agent/tools.js +75 -0
  35. package/dist/agent/troubleshoot.d.ts +30 -0
  36. package/dist/agent/troubleshoot.d.ts.map +1 -0
  37. package/dist/agent/troubleshoot.js +87 -0
  38. package/dist/boilerplate.d.ts +3 -0
  39. package/dist/boilerplate.d.ts.map +1 -0
  40. package/dist/boilerplate.js +54 -0
  41. package/dist/cdk.json +91 -0
  42. package/dist/cli.d.ts +62 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +463 -0
  45. package/dist/commands/audit-stacks.d.ts +24 -0
  46. package/dist/commands/audit-stacks.d.ts.map +1 -0
  47. package/dist/commands/audit-stacks.js +182 -0
  48. package/dist/commands/audit-tokens.d.ts +21 -0
  49. package/dist/commands/audit-tokens.d.ts.map +1 -0
  50. package/dist/commands/audit-tokens.js +153 -0
  51. package/dist/commands/bootstrap.d.ts +11 -0
  52. package/dist/commands/bootstrap.d.ts.map +1 -0
  53. package/dist/commands/bootstrap.js +159 -0
  54. package/dist/commands/create-pat.d.ts +27 -0
  55. package/dist/commands/create-pat.d.ts.map +1 -0
  56. package/dist/commands/create-pat.js +194 -0
  57. package/dist/commands/create-pipeline.d.ts +12 -0
  58. package/dist/commands/create-pipeline.d.ts.map +1 -0
  59. package/dist/commands/create-pipeline.js +315 -0
  60. package/dist/commands/deploy.d.ts +15 -0
  61. package/dist/commands/deploy.d.ts.map +1 -0
  62. package/dist/commands/deploy.js +157 -0
  63. package/dist/commands/entity-get.d.ts +51 -0
  64. package/dist/commands/entity-get.d.ts.map +1 -0
  65. package/dist/commands/entity-get.js +69 -0
  66. package/dist/commands/entity-list.d.ts +39 -0
  67. package/dist/commands/entity-list.d.ts.map +1 -0
  68. package/dist/commands/entity-list.js +88 -0
  69. package/dist/commands/get-pipeline.d.ts +13 -0
  70. package/dist/commands/get-pipeline.d.ts.map +1 -0
  71. package/dist/commands/get-pipeline.js +49 -0
  72. package/dist/commands/get-plugin.d.ts +13 -0
  73. package/dist/commands/get-plugin.d.ts.map +1 -0
  74. package/dist/commands/get-plugin.js +51 -0
  75. package/dist/commands/instantiate-template.d.ts +20 -0
  76. package/dist/commands/instantiate-template.d.ts.map +1 -0
  77. package/dist/commands/instantiate-template.js +274 -0
  78. package/dist/commands/list-pipelines.d.ts +20 -0
  79. package/dist/commands/list-pipelines.d.ts.map +1 -0
  80. package/dist/commands/list-pipelines.js +99 -0
  81. package/dist/commands/list-plugins.d.ts +20 -0
  82. package/dist/commands/list-plugins.d.ts.map +1 -0
  83. package/dist/commands/list-plugins.js +92 -0
  84. package/dist/commands/login.d.ts +21 -0
  85. package/dist/commands/login.d.ts.map +1 -0
  86. package/dist/commands/login.js +174 -0
  87. package/dist/commands/new-plugin.d.ts +12 -0
  88. package/dist/commands/new-plugin.d.ts.map +1 -0
  89. package/dist/commands/new-plugin.js +129 -0
  90. package/dist/commands/org-export.d.ts +25 -0
  91. package/dist/commands/org-export.d.ts.map +1 -0
  92. package/dist/commands/org-export.js +100 -0
  93. package/dist/commands/provision.d.ts +122 -0
  94. package/dist/commands/provision.d.ts.map +1 -0
  95. package/dist/commands/provision.js +867 -0
  96. package/dist/commands/redrive-events.d.ts +24 -0
  97. package/dist/commands/redrive-events.d.ts.map +1 -0
  98. package/dist/commands/redrive-events.js +127 -0
  99. package/dist/commands/register.d.ts +38 -0
  100. package/dist/commands/register.d.ts.map +1 -0
  101. package/dist/commands/register.js +160 -0
  102. package/dist/commands/setup-events.d.ts +15 -0
  103. package/dist/commands/setup-events.d.ts.map +1 -0
  104. package/dist/commands/setup-events.js +168 -0
  105. package/dist/commands/status.d.ts +11 -0
  106. package/dist/commands/status.d.ts.map +1 -0
  107. package/dist/commands/status.js +81 -0
  108. package/dist/commands/store-token.d.ts +26 -0
  109. package/dist/commands/store-token.d.ts.map +1 -0
  110. package/dist/commands/store-token.js +305 -0
  111. package/dist/commands/synth.d.ts +21 -0
  112. package/dist/commands/synth.d.ts.map +1 -0
  113. package/dist/commands/synth.js +158 -0
  114. package/dist/commands/upload-plugin.d.ts +21 -0
  115. package/dist/commands/upload-plugin.d.ts.map +1 -0
  116. package/dist/commands/upload-plugin.js +275 -0
  117. package/dist/commands/validate-plugin.d.ts +12 -0
  118. package/dist/commands/validate-plugin.d.ts.map +1 -0
  119. package/dist/commands/validate-plugin.js +175 -0
  120. package/dist/commands/validate-templates.d.ts +11 -0
  121. package/dist/commands/validate-templates.d.ts.map +1 -0
  122. package/dist/commands/validate-templates.js +116 -0
  123. package/dist/commands/version.d.ts +12 -0
  124. package/dist/commands/version.d.ts.map +1 -0
  125. package/dist/commands/version.js +216 -0
  126. package/dist/config/cli.constants.d.ts +116 -0
  127. package/dist/config/cli.constants.d.ts.map +1 -0
  128. package/dist/config/cli.constants.js +194 -0
  129. package/dist/config.yml +94 -0
  130. package/dist/lambda/token-renew-handler.d.ts +2 -0
  131. package/dist/lambda/token-renew-handler.d.ts.map +1 -0
  132. package/dist/lambda/token-renew-handler.js +125 -0
  133. package/dist/templates/events-stack.json +174 -0
  134. package/dist/templates/token-renew-stack.json +122 -0
  135. package/dist/types/config.d.ts +53 -0
  136. package/dist/types/config.d.ts.map +1 -0
  137. package/dist/types/config.js +4 -0
  138. package/dist/types/error.d.ts +61 -0
  139. package/dist/types/error.d.ts.map +1 -0
  140. package/dist/types/error.js +35 -0
  141. package/dist/types/index.d.ts +9 -0
  142. package/dist/types/index.d.ts.map +1 -0
  143. package/dist/types/index.js +11 -0
  144. package/dist/types/pipeline-template.d.ts +48 -0
  145. package/dist/types/pipeline-template.d.ts.map +1 -0
  146. package/dist/types/pipeline-template.js +4 -0
  147. package/dist/types/pipeline.d.ts +121 -0
  148. package/dist/types/pipeline.d.ts.map +1 -0
  149. package/dist/types/pipeline.js +4 -0
  150. package/dist/types/plugin.d.ts +135 -0
  151. package/dist/types/plugin.d.ts.map +1 -0
  152. package/dist/types/plugin.js +4 -0
  153. package/dist/utils/api-client.d.ts +26 -0
  154. package/dist/utils/api-client.d.ts.map +1 -0
  155. package/dist/utils/api-client.js +151 -0
  156. package/dist/utils/audit-log.d.ts +8 -0
  157. package/dist/utils/audit-log.d.ts.map +1 -0
  158. package/dist/utils/audit-log.js +57 -0
  159. package/dist/utils/auth-guard.d.ts +20 -0
  160. package/dist/utils/auth-guard.d.ts.map +1 -0
  161. package/dist/utils/auth-guard.js +22 -0
  162. package/dist/utils/auth-utils.d.ts +68 -0
  163. package/dist/utils/auth-utils.d.ts.map +1 -0
  164. package/dist/utils/auth-utils.js +77 -0
  165. package/dist/utils/aws-env.d.ts +21 -0
  166. package/dist/utils/aws-env.d.ts.map +1 -0
  167. package/dist/utils/aws-env.js +34 -0
  168. package/dist/utils/aws-secrets.d.ts +48 -0
  169. package/dist/utils/aws-secrets.d.ts.map +1 -0
  170. package/dist/utils/aws-secrets.js +115 -0
  171. package/dist/utils/banner.d.ts +19 -0
  172. package/dist/utils/banner.d.ts.map +1 -0
  173. package/dist/utils/banner.js +52 -0
  174. package/dist/utils/cdk-utils.d.ts +74 -0
  175. package/dist/utils/cdk-utils.d.ts.map +1 -0
  176. package/dist/utils/cdk-utils.js +152 -0
  177. package/dist/utils/command-utils.d.ts +75 -0
  178. package/dist/utils/command-utils.d.ts.map +1 -0
  179. package/dist/utils/command-utils.js +155 -0
  180. package/dist/utils/config-loader.d.ts +33 -0
  181. package/dist/utils/config-loader.d.ts.map +1 -0
  182. package/dist/utils/config-loader.js +154 -0
  183. package/dist/utils/cron.d.ts +28 -0
  184. package/dist/utils/cron.d.ts.map +1 -0
  185. package/dist/utils/cron.js +119 -0
  186. package/dist/utils/deploy-runner.d.ts +38 -0
  187. package/dist/utils/deploy-runner.d.ts.map +1 -0
  188. package/dist/utils/deploy-runner.js +112 -0
  189. package/dist/utils/error-handler.d.ts +29 -0
  190. package/dist/utils/error-handler.d.ts.map +1 -0
  191. package/dist/utils/error-handler.js +302 -0
  192. package/dist/utils/list-command-utils.d.ts +23 -0
  193. package/dist/utils/list-command-utils.d.ts.map +1 -0
  194. package/dist/utils/list-command-utils.js +57 -0
  195. package/dist/utils/output-utils.d.ts +40 -0
  196. package/dist/utils/output-utils.d.ts.map +1 -0
  197. package/dist/utils/output-utils.js +250 -0
  198. package/dist/utils/pipeline-config.d.ts +33 -0
  199. package/dist/utils/pipeline-config.d.ts.map +1 -0
  200. package/dist/utils/pipeline-config.js +55 -0
  201. package/dist/utils/platform-secret.d.ts +27 -0
  202. package/dist/utils/platform-secret.d.ts.map +1 -0
  203. package/dist/utils/platform-secret.js +92 -0
  204. package/dist/utils/plugin-resolver.d.ts +17 -0
  205. package/dist/utils/plugin-resolver.d.ts.map +1 -0
  206. package/dist/utils/plugin-resolver.js +101 -0
  207. package/dist/utils/preflight.d.ts +26 -0
  208. package/dist/utils/preflight.d.ts.map +1 -0
  209. package/dist/utils/preflight.js +59 -0
  210. package/dist/utils/rate-limiter.d.ts +15 -0
  211. package/dist/utils/rate-limiter.d.ts.map +1 -0
  212. package/dist/utils/rate-limiter.js +164 -0
  213. package/dist/utils/registry.d.ts +86 -0
  214. package/dist/utils/registry.d.ts.map +1 -0
  215. package/dist/utils/registry.js +140 -0
  216. package/dist/utils/response-utils.d.ts +21 -0
  217. package/dist/utils/response-utils.d.ts.map +1 -0
  218. package/dist/utils/response-utils.js +70 -0
  219. package/dist/utils/tls.d.ts +52 -0
  220. package/dist/utils/tls.d.ts.map +1 -0
  221. package/dist/utils/tls.js +88 -0
  222. package/package.json +181 -0
@@ -0,0 +1,51 @@
1
+ import { Command } from 'commander';
2
+ import { type OutputFormat } from '../config/cli.constants.js';
3
+ import { ApiClient } from '../utils/api-client.js';
4
+ /** Options common to the single-entity `get` commands. */
5
+ export interface GetEntityOptions {
6
+ id: string;
7
+ format: OutputFormat;
8
+ output?: string;
9
+ verifySsl?: boolean;
10
+ showProps?: boolean;
11
+ showMetadata?: boolean;
12
+ }
13
+ /**
14
+ * Per-entity configuration for {@link runGetEntity}. Captures everything that
15
+ * differs between `get-pipeline` and `get-plugin`; the surrounding scaffold
16
+ * (header, SSL warning, fetch, summary table, execution summary, file output,
17
+ * error handling) is identical and lives in the runner.
18
+ */
19
+ export interface GetEntitySpec<TEntity extends {
20
+ id: string;
21
+ }> {
22
+ /** Title-case entity label, e.g. `'Pipeline'`. Drives headers and messages. */
23
+ label: string;
24
+ /** Response-envelope key the entity is nested under, e.g. `'pipeline'`. */
25
+ responseKey: string;
26
+ /** Build the single-entity GET URL from the authenticated client. */
27
+ urlFor: (client: ApiClient, id: string) => string;
28
+ /** Ordered key/value summary rendered as a table. */
29
+ summary: (entity: TEntity) => Record<string, unknown>;
30
+ /**
31
+ * Optional extra JSON block shown after the summary (pipeline properties /
32
+ * plugin metadata). Return `null` to omit.
33
+ */
34
+ extra?: (options: GetEntityOptions, entity: TEntity) => {
35
+ infoLabel: string;
36
+ payload: object;
37
+ } | null;
38
+ /** Command name for error-handler context, e.g. `'get-pipeline'`. */
39
+ commandName: string;
40
+ /** Key under which the id is reported in error context, e.g. `'pipelineId'`. */
41
+ idContextKey: string;
42
+ }
43
+ /**
44
+ * Shared implementation of the single-entity `get` commands. Fetches one entity
45
+ * by ID, prints a summary (and optional properties/metadata block), and writes
46
+ * the raw entity in the requested format.
47
+ */
48
+ export declare function runGetEntity<TEntity extends {
49
+ id: string;
50
+ }>(program: Command, options: GetEntityOptions, spec: GetEntitySpec<TEntity>): Promise<void>;
51
+ //# sourceMappingURL=entity-get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-get.d.ts","sourceRoot":"","sources":["../../src/commands/entity-get.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAQnD,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC3D,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,qDAAqD;IACrD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACtG,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC/D,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Df"}
@@ -0,0 +1,69 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { Command } from 'commander';
4
+ import pico from 'picocolors';
5
+ import {} from '../config/cli.constants.js';
6
+ import { ApiClient } from '../utils/api-client.js';
7
+ import { createAuthenticatedClient, printCommandHeader, printExecutionSummary, printSslWarning, validateEntityId } from '../utils/command-utils.js';
8
+ import { ERROR_CODES, handleError } from '../utils/error-handler.js';
9
+ import { outputData, printError, printInfo, printKeyValue, printSection, printSuccess } from '../utils/output-utils.js';
10
+ import { extractSingleResponse } from '../utils/response-utils.js';
11
+ const { dim } = pico;
12
+ /**
13
+ * Shared implementation of the single-entity `get` commands. Fetches one entity
14
+ * by ID, prints a summary (and optional properties/metadata block), and writes
15
+ * the raw entity in the requested format.
16
+ */
17
+ export async function runGetEntity(program, options, spec) {
18
+ const executionId = printCommandHeader(`Get ${spec.label}`);
19
+ const lower = spec.label.toLowerCase();
20
+ try {
21
+ printSslWarning(options.verifySsl);
22
+ printInfo('Request parameters', {
23
+ id: options.id,
24
+ format: options.format,
25
+ output: options.output || '(console)',
26
+ });
27
+ const entityId = validateEntityId(options.id, spec.label);
28
+ const client = createAuthenticatedClient(options);
29
+ console.log('');
30
+ printSection(`Fetching ${spec.label}`);
31
+ const startTime = Date.now();
32
+ const response = await client.get(spec.urlFor(client, entityId));
33
+ const duration = Date.now() - startTime;
34
+ const entity = extractSingleResponse(response, spec.responseKey, 'id');
35
+ if (!entity) {
36
+ printError(`No ${lower} returned from API`);
37
+ throw new Error(`Failed to retrieve ${lower} with ID: ${entityId}`);
38
+ }
39
+ console.log('');
40
+ printSection(`${spec.label} Retrieved Successfully`);
41
+ printKeyValue(spec.summary(entity));
42
+ const extra = spec.extra?.(options, entity);
43
+ if (extra) {
44
+ console.log('');
45
+ printInfo(extra.infoLabel, { keys: Object.keys(extra.payload).length });
46
+ console.log(dim('─'.repeat(process.stdout.columns || 80)));
47
+ console.log(JSON.stringify(extra.payload, null, 2));
48
+ console.log(dim('─'.repeat(process.stdout.columns || 80)));
49
+ }
50
+ printExecutionSummary(executionId, duration);
51
+ outputData(entity, {
52
+ format: options.format,
53
+ file: options.output,
54
+ silent: false,
55
+ });
56
+ if (options.output) {
57
+ console.log('');
58
+ printSuccess(`${spec.label} data saved`, { path: options.output });
59
+ }
60
+ }
61
+ catch (error) {
62
+ handleError(error, ERROR_CODES.API_REQUEST, {
63
+ debug: program.opts().debug,
64
+ exit: true,
65
+ context: { command: spec.commandName, executionId, [spec.idContextKey]: options.id },
66
+ });
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9lbnRpdHktZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFxQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEosT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBc0NyQjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLE9BQWdCLEVBQ2hCLE9BQXlCLEVBQ3pCLElBQTRCO0lBRTVCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUV2QyxJQUFJLENBQUM7UUFDSCxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksV0FBVztTQUN0QyxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFlBQVksQ0FBQyxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBRXhDLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFVLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLFVBQVUsQ0FBQyxNQUFNLEtBQUssb0JBQW9CLENBQUMsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixLQUFLLGFBQWEsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JELGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFN0MsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNqQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztZQUMzQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1NBQ3JGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB0eXBlIE91dHB1dEZvcm1hdCB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL3V0aWxzL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgdmFsaWRhdGVFbnRpdHlJZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBvdXRwdXREYXRhLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcblxuY29uc3QgeyBkaW0gfSA9IHBpY287XG5cbi8qKiBPcHRpb25zIGNvbW1vbiB0byB0aGUgc2luZ2xlLWVudGl0eSBgZ2V0YCBjb21tYW5kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW50aXR5T3B0aW9ucyB7XG4gIGlkOiBzdHJpbmc7XG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICBvdXRwdXQ/OiBzdHJpbmc7XG4gIHZlcmlmeVNzbD86IGJvb2xlYW47XG4gIHNob3dQcm9wcz86IGJvb2xlYW47XG4gIHNob3dNZXRhZGF0YT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGVyLWVudGl0eSBjb25maWd1cmF0aW9uIGZvciB7QGxpbmsgcnVuR2V0RW50aXR5fS4gQ2FwdHVyZXMgZXZlcnl0aGluZyB0aGF0XG4gKiBkaWZmZXJzIGJldHdlZW4gYGdldC1waXBlbGluZWAgYW5kIGBnZXQtcGx1Z2luYDsgdGhlIHN1cnJvdW5kaW5nIHNjYWZmb2xkXG4gKiAoaGVhZGVyLCBTU0wgd2FybmluZywgZmV0Y2gsIHN1bW1hcnkgdGFibGUsIGV4ZWN1dGlvbiBzdW1tYXJ5LCBmaWxlIG91dHB1dCxcbiAqIGVycm9yIGhhbmRsaW5nKSBpcyBpZGVudGljYWwgYW5kIGxpdmVzIGluIHRoZSBydW5uZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW50aXR5U3BlYzxURW50aXR5IGV4dGVuZHMgeyBpZDogc3RyaW5nIH0+IHtcbiAgLyoqIFRpdGxlLWNhc2UgZW50aXR5IGxhYmVsLCBlLmcuIGAnUGlwZWxpbmUnYC4gRHJpdmVzIGhlYWRlcnMgYW5kIG1lc3NhZ2VzLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogUmVzcG9uc2UtZW52ZWxvcGUga2V5IHRoZSBlbnRpdHkgaXMgbmVzdGVkIHVuZGVyLCBlLmcuIGAncGlwZWxpbmUnYC4gKi9cbiAgcmVzcG9uc2VLZXk6IHN0cmluZztcbiAgLyoqIEJ1aWxkIHRoZSBzaW5nbGUtZW50aXR5IEdFVCBVUkwgZnJvbSB0aGUgYXV0aGVudGljYXRlZCBjbGllbnQuICovXG4gIHVybEZvcjogKGNsaWVudDogQXBpQ2xpZW50LCBpZDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKiBPcmRlcmVkIGtleS92YWx1ZSBzdW1tYXJ5IHJlbmRlcmVkIGFzIGEgdGFibGUuICovXG4gIHN1bW1hcnk6IChlbnRpdHk6IFRFbnRpdHkpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogT3B0aW9uYWwgZXh0cmEgSlNPTiBibG9jayBzaG93biBhZnRlciB0aGUgc3VtbWFyeSAocGlwZWxpbmUgcHJvcGVydGllcyAvXG4gICAqIHBsdWdpbiBtZXRhZGF0YSkuIFJldHVybiBgbnVsbGAgdG8gb21pdC5cbiAgICovXG4gIGV4dHJhPzogKG9wdGlvbnM6IEdldEVudGl0eU9wdGlvbnMsIGVudGl0eTogVEVudGl0eSkgPT4geyBpbmZvTGFiZWw6IHN0cmluZzsgcGF5bG9hZDogb2JqZWN0IH0gfCBudWxsO1xuICAvKiogQ29tbWFuZCBuYW1lIGZvciBlcnJvci1oYW5kbGVyIGNvbnRleHQsIGUuZy4gYCdnZXQtcGlwZWxpbmUnYC4gKi9cbiAgY29tbWFuZE5hbWU6IHN0cmluZztcbiAgLyoqIEtleSB1bmRlciB3aGljaCB0aGUgaWQgaXMgcmVwb3J0ZWQgaW4gZXJyb3IgY29udGV4dCwgZS5nLiBgJ3BpcGVsaW5lSWQnYC4gKi9cbiAgaWRDb250ZXh0S2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzaW5nbGUtZW50aXR5IGBnZXRgIGNvbW1hbmRzLiBGZXRjaGVzIG9uZSBlbnRpdHlcbiAqIGJ5IElELCBwcmludHMgYSBzdW1tYXJ5IChhbmQgb3B0aW9uYWwgcHJvcGVydGllcy9tZXRhZGF0YSBibG9jayksIGFuZCB3cml0ZXNcbiAqIHRoZSByYXcgZW50aXR5IGluIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuR2V0RW50aXR5PFRFbnRpdHkgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4oXG4gIHByb2dyYW06IENvbW1hbmQsXG4gIG9wdGlvbnM6IEdldEVudGl0eU9wdGlvbnMsXG4gIHNwZWM6IEdldEVudGl0eVNwZWM8VEVudGl0eT4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoYEdldCAke3NwZWMubGFiZWx9YCk7XG4gIGNvbnN0IGxvd2VyID0gc3BlYy5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuXG4gIHRyeSB7XG4gICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICBwcmludEluZm8oJ1JlcXVlc3QgcGFyYW1ldGVycycsIHtcbiAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdCxcbiAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQgfHwgJyhjb25zb2xlKScsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnRpdHlJZCA9IHZhbGlkYXRlRW50aXR5SWQob3B0aW9ucy5pZCwgc3BlYy5sYWJlbCk7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcblxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBwcmludFNlY3Rpb24oYEZldGNoaW5nICR7c3BlYy5sYWJlbH1gKTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KHNwZWMudXJsRm9yKGNsaWVudCwgZW50aXR5SWQpKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICBjb25zdCBlbnRpdHkgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8VEVudGl0eT4ocmVzcG9uc2UsIHNwZWMucmVzcG9uc2VLZXksICdpZCcpO1xuICAgIGlmICghZW50aXR5KSB7XG4gICAgICBwcmludEVycm9yKGBObyAke2xvd2VyfSByZXR1cm5lZCBmcm9tIEFQSWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgJHtsb3dlcn0gd2l0aCBJRDogJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgcHJpbnRTZWN0aW9uKGAke3NwZWMubGFiZWx9IFJldHJpZXZlZCBTdWNjZXNzZnVsbHlgKTtcbiAgICBwcmludEtleVZhbHVlKHNwZWMuc3VtbWFyeShlbnRpdHkpKTtcblxuICAgIGNvbnN0IGV4dHJhID0gc3BlYy5leHRyYT8uKG9wdGlvbnMsIGVudGl0eSk7XG4gICAgaWYgKGV4dHJhKSB7XG4gICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICBwcmludEluZm8oZXh0cmEuaW5mb0xhYmVsLCB7IGtleXM6IE9iamVjdC5rZXlzKGV4dHJhLnBheWxvYWQpLmxlbmd0aCB9KTtcbiAgICAgIGNvbnNvbGUubG9nKGRpbSgn4pSAJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCkpKTtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV4dHJhLnBheWxvYWQsIG51bGwsIDIpKTtcbiAgICAgIGNvbnNvbGUubG9nKGRpbSgn4pSAJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCkpKTtcbiAgICB9XG5cbiAgICBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQsIGR1cmF0aW9uKTtcblxuICAgIG91dHB1dERhdGEoZW50aXR5LCB7XG4gICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgZmlsZTogb3B0aW9ucy5vdXRwdXQsXG4gICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMub3V0cHV0KSB7XG4gICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICBwcmludFN1Y2Nlc3MoYCR7c3BlYy5sYWJlbH0gZGF0YSBzYXZlZGAsIHsgcGF0aDogb3B0aW9ucy5vdXRwdXQgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogc3BlYy5jb21tYW5kTmFtZSwgZXhlY3V0aW9uSWQsIFtzcGVjLmlkQ29udGV4dEtleV06IG9wdGlvbnMuaWQgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,39 @@
1
+ import { Command } from 'commander';
2
+ import { type OutputFormat } from '../config/cli.constants.js';
3
+ import { type Config } from '../utils/config-loader.js';
4
+ import { type CommonFilterParams } from '../utils/list-command-utils.js';
5
+ /**
6
+ * Per-entity configuration for {@link runListEntity}. Captures everything that
7
+ * differs between `list-pipelines` and `list-plugins`; the surrounding scaffold
8
+ * (header, filter display, pagination, query, results summary, output, perf
9
+ * metrics, error handling) is identical and lives in the runner.
10
+ */
11
+ export interface ListEntitySpec<TItem, TFilter extends CommonFilterParams> {
12
+ /** Plural title-case label, e.g. `'Pipelines'`. Drives headers and messages. */
13
+ labelPlural: string;
14
+ /** Response-envelope key the items are nested under, e.g. `'pipelines'`. */
15
+ responseKey: string;
16
+ /** Build the list URL from the resolved config. */
17
+ listUrl: (config: Config) => string;
18
+ /** Merge entity-specific filters onto the common (pagination/sort) base. */
19
+ buildFilters: (options: Record<string, unknown>, base: CommonFilterParams) => TFilter;
20
+ /** Human-readable active-filter map shown before the query. */
21
+ activeFilters: (filters: TFilter) => Record<string, unknown>;
22
+ /** Optional table-only statistics block; return `null` to omit. */
23
+ statistics?: (items: TItem[]) => Record<string, unknown> | null;
24
+ /** Rows to serialize (full items when the show-flag is set, else a slim map). */
25
+ rows: (items: TItem[], options: Record<string, unknown>) => unknown;
26
+ /** Command name for error-handler context, e.g. `'list-pipelines'`. */
27
+ commandName: string;
28
+ }
29
+ /**
30
+ * Shared implementation of the list commands. Applies common + entity-specific
31
+ * filters, queries the API, prints a results summary (and optional statistics),
32
+ * and writes the rows in the requested format.
33
+ */
34
+ export declare function runListEntity<TItem, TFilter extends CommonFilterParams>(program: Command, options: Record<string, unknown> & {
35
+ format?: OutputFormat;
36
+ output?: string;
37
+ verifySsl?: boolean;
38
+ }, spec: ListEntitySpec<TItem, TFilter>): Promise<void>;
39
+ //# sourceMappingURL=entity-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-list.d.ts","sourceRoot":"","sources":["../../src/commands/entity-list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAsB,KAAK,kBAAkB,EAA6C,MAAM,gCAAgC,CAAC;AAIxI;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,EAAE,OAAO,SAAS,kBAAkB;IACvE,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,4EAA4E;IAC5E,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC;IACtF,+DAA+D;IAC/D,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,iFAAiF;IACjF,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IACpE,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,OAAO,SAAS,kBAAkB,EAC3E,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EAClG,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAuFf"}
@@ -0,0 +1,88 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { Command } from 'commander';
4
+ import { formatDuration } from '../config/cli.constants.js';
5
+ import { createAuthenticatedClient, printCommandHeader, printSslWarning } from '../utils/command-utils.js';
6
+ import {} from '../utils/config-loader.js';
7
+ import { ERROR_CODES, handleError } from '../utils/error-handler.js';
8
+ import { buildCommonFilters, displayListResults, displayPaginationInfo } from '../utils/list-command-utils.js';
9
+ import { outputData, printInfo, printKeyValue, printSection } from '../utils/output-utils.js';
10
+ import { extractListResponse } from '../utils/response-utils.js';
11
+ /**
12
+ * Shared implementation of the list commands. Applies common + entity-specific
13
+ * filters, queries the API, prints a results summary (and optional statistics),
14
+ * and writes the rows in the requested format.
15
+ */
16
+ export async function runListEntity(program, options, spec) {
17
+ const executionId = printCommandHeader(`List ${spec.labelPlural}`, `Query ${spec.labelPlural}`);
18
+ const startTime = Date.now();
19
+ try {
20
+ const filterParams = spec.buildFilters(options, buildCommonFilters(options));
21
+ // Display active filters
22
+ const activeFilters = spec.activeFilters(filterParams);
23
+ if (Object.keys(activeFilters).length > 0) {
24
+ printInfo('Active Filters');
25
+ printKeyValue(activeFilters);
26
+ }
27
+ else {
28
+ printInfo(`No filters applied - fetching all ${spec.labelPlural.toLowerCase()}`);
29
+ }
30
+ displayPaginationInfo(filterParams);
31
+ // Security warning for SSL verification disabled
32
+ printSslWarning(options.verifySsl);
33
+ // Create authenticated API client
34
+ const client = createAuthenticatedClient(options);
35
+ const config = client.getConfig();
36
+ // Query
37
+ console.log('');
38
+ printSection(`Querying ${spec.labelPlural}`);
39
+ printInfo('Sending request to API...');
40
+ const requestStart = Date.now();
41
+ const response = await client.get(spec.listUrl(config), filterParams);
42
+ const requestDuration = Date.now() - requestStart;
43
+ // Handle response
44
+ const { items, total, hasMore } = extractListResponse(response, spec.responseKey);
45
+ console.log('');
46
+ printSection('✓ Query Complete');
47
+ // Display results summary
48
+ displayListResults(items, total, hasMore, spec.labelPlural, requestDuration, filterParams);
49
+ // Display statistics
50
+ if (items.length > 0 && options.format === 'table') {
51
+ const stats = spec.statistics?.(items);
52
+ if (stats) {
53
+ console.log('');
54
+ printInfo('Statistics');
55
+ printKeyValue(stats);
56
+ }
57
+ }
58
+ // Output data in requested format
59
+ console.log('');
60
+ if (options.output) {
61
+ printInfo('Saving to file', { path: options.output, format: options.format });
62
+ }
63
+ outputData(spec.rows(items, options), {
64
+ format: options.format,
65
+ file: options.output,
66
+ });
67
+ // Performance metrics
68
+ console.log('');
69
+ printKeyValue({
70
+ 'Execution ID': executionId,
71
+ 'Total Duration': formatDuration(Date.now() - startTime),
72
+ });
73
+ console.log('');
74
+ }
75
+ catch (error) {
76
+ handleError(error, ERROR_CODES.API_REQUEST, {
77
+ debug: program.opts().debug,
78
+ exit: true,
79
+ context: {
80
+ command: spec.commandName,
81
+ executionId,
82
+ filters: options,
83
+ verifySsl: options.verifySsl,
84
+ },
85
+ });
86
+ }
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZW50aXR5LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNHLE9BQU8sRUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUEyQixrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hJLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQTJCakU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUNqQyxPQUFnQixFQUNoQixPQUFrRyxFQUNsRyxJQUFvQztJQUVwQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUU3QixJQUFJLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FB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QyxFQUFFLENBQUMsQ0FBQztRQUNoQixhQUFhLENBQUM7WUFDWixjQUFjLEVBQUUsV0FBVztZQUMzQixnQkFBZ0IsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUN6RCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztZQUMzQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3pCLFdBQVc7Z0JBQ1gsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLWxvYWRlci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGJ1aWxkQ29tbW9uRmlsdGVycywgdHlwZSBDb21tb25GaWx0ZXJQYXJhbXMsIGRpc3BsYXlMaXN0UmVzdWx0cywgZGlzcGxheVBhZ2luYXRpb25JbmZvIH0gZnJvbSAnLi4vdXRpbHMvbGlzdC1jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IG91dHB1dERhdGEsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RMaXN0UmVzcG9uc2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS11dGlscy5qcyc7XG5cbi8qKlxuICogUGVyLWVudGl0eSBjb25maWd1cmF0aW9uIGZvciB7QGxpbmsgcnVuTGlzdEVudGl0eX0uIENhcHR1cmVzIGV2ZXJ5dGhpbmcgdGhhdFxuICogZGlmZmVycyBiZXR3ZWVuIGBsaXN0LXBpcGVsaW5lc2AgYW5kIGBsaXN0LXBsdWdpbnNgOyB0aGUgc3Vycm91bmRpbmcgc2NhZmZvbGRcbiAqIChoZWFkZXIsIGZpbHRlciBkaXNwbGF5LCBwYWdpbmF0aW9uLCBxdWVyeSwgcmVzdWx0cyBzdW1tYXJ5LCBvdXRwdXQsIHBlcmZcbiAqIG1ldHJpY3MsIGVycm9yIGhhbmRsaW5nKSBpcyBpZGVudGljYWwgYW5kIGxpdmVzIGluIHRoZSBydW5uZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEVudGl0eVNwZWM8VEl0ZW0sIFRGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXJQYXJhbXM+IHtcbiAgLyoqIFBsdXJhbCB0aXRsZS1jYXNlIGxhYmVsLCBlLmcuIGAnUGlwZWxpbmVzJ2AuIERyaXZlcyBoZWFkZXJzIGFuZCBtZXNzYWdlcy4gKi9cbiAgbGFiZWxQbHVyYWw6IHN0cmluZztcbiAgLyoqIFJlc3BvbnNlLWVudmVsb3BlIGtleSB0aGUgaXRlbXMgYXJlIG5lc3RlZCB1bmRlciwgZS5nLiBgJ3BpcGVsaW5lcydgLiAqL1xuICByZXNwb25zZUtleTogc3RyaW5nO1xuICAvKiogQnVpbGQgdGhlIGxpc3QgVVJMIGZyb20gdGhlIHJlc29sdmVkIGNvbmZpZy4gKi9cbiAgbGlzdFVybDogKGNvbmZpZzogQ29uZmlnKSA9PiBzdHJpbmc7XG4gIC8qKiBNZXJnZSBlbnRpdHktc3BlY2lmaWMgZmlsdGVycyBvbnRvIHRoZSBjb21tb24gKHBhZ2luYXRpb24vc29ydCkgYmFzZS4gKi9cbiAgYnVpbGRGaWx0ZXJzOiAob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGJhc2U6IENvbW1vbkZpbHRlclBhcmFtcykgPT4gVEZpbHRlcjtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGFjdGl2ZS1maWx0ZXIgbWFwIHNob3duIGJlZm9yZSB0aGUgcXVlcnkuICovXG4gIGFjdGl2ZUZpbHRlcnM6IChmaWx0ZXJzOiBURmlsdGVyKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIE9wdGlvbmFsIHRhYmxlLW9ubHkgc3RhdGlzdGljcyBibG9jazsgcmV0dXJuIGBudWxsYCB0byBvbWl0LiAqL1xuICBzdGF0aXN0aWNzPzogKGl0ZW1zOiBUSXRlbVtdKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gIC8qKiBSb3dzIHRvIHNlcmlhbGl6ZSAoZnVsbCBpdGVtcyB3aGVuIHRoZSBzaG93LWZsYWcgaXMgc2V0LCBlbHNlIGEgc2xpbSBtYXApLiAqL1xuICByb3dzOiAoaXRlbXM6IFRJdGVtW10sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogQ29tbWFuZCBuYW1lIGZvciBlcnJvci1oYW5kbGVyIGNvbnRleHQsIGUuZy4gYCdsaXN0LXBpcGVsaW5lcydgLiAqL1xuICBjb21tYW5kTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNoYXJlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlzdCBjb21tYW5kcy4gQXBwbGllcyBjb21tb24gKyBlbnRpdHktc3BlY2lmaWNcbiAqIGZpbHRlcnMsIHF1ZXJpZXMgdGhlIEFQSSwgcHJpbnRzIGEgcmVzdWx0cyBzdW1tYXJ5IChhbmQgb3B0aW9uYWwgc3RhdGlzdGljcyksXG4gKiBhbmQgd3JpdGVzIHRoZSByb3dzIGluIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuTGlzdEVudGl0eTxUSXRlbSwgVEZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlclBhcmFtcz4oXG4gIHByb2dyYW06IENvbW1hbmQsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBmb3JtYXQ/OiBPdXRwdXRGb3JtYXQ7IG91dHB1dD86IHN0cmluZzsgdmVyaWZ5U3NsPzogYm9vbGVhbiB9LFxuICBzcGVjOiBMaXN0RW50aXR5U3BlYzxUSXRlbSwgVEZpbHRlcj4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoYExpc3QgJHtzcGVjLmxhYmVsUGx1cmFsfWAsIGBRdWVyeSAke3NwZWMubGFiZWxQbHVyYWx9YCk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWx0ZXJQYXJhbXMgPSBzcGVjLmJ1aWxkRmlsdGVycyhvcHRpb25zLCBidWlsZENvbW1vbkZpbHRlcnMob3B0aW9ucykpO1xuXG4gICAgLy8gRGlzcGxheSBhY3RpdmUgZmlsdGVyc1xuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSBzcGVjLmFjdGl2ZUZpbHRlcnMoZmlsdGVyUGFyYW1zKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoYWN0aXZlRmlsdGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRJbmZvKCdBY3RpdmUgRmlsdGVycycpO1xuICAgICAgcHJpbnRLZXlWYWx1ZShhY3RpdmVGaWx0ZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRJbmZvKGBObyBmaWx0ZXJzIGFwcGxpZWQgLSBmZXRjaGluZyBhbGwgJHtzcGVjLmxhYmVsUGx1cmFsLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgfVxuXG4gICAgZGlzcGxheVBhZ2luYXRpb25JbmZvKGZpbHRlclBhcmFtcyk7XG5cbiAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgIC8vIENyZWF0ZSBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnRcbiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIC8vIFF1ZXJ5XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50U2VjdGlvbihgUXVlcnlpbmcgJHtzcGVjLmxhYmVsUGx1cmFsfWApO1xuICAgIHByaW50SW5mbygnU2VuZGluZyByZXF1ZXN0IHRvIEFQSS4uLicpO1xuXG4gICAgY29uc3QgcmVxdWVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoXG4gICAgICBzcGVjLmxpc3RVcmwoY29uZmlnKSxcbiAgICAgIGZpbHRlclBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICAgIGNvbnN0IHJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnQ7XG5cbiAgICAvLyBIYW5kbGUgcmVzcG9uc2VcbiAgICBjb25zdCB7IGl0ZW1zLCB0b3RhbCwgaGFzTW9yZSB9ID0gZXh0cmFjdExpc3RSZXNwb25zZTxUSXRlbT4ocmVzcG9uc2UsIHNwZWMucmVzcG9uc2VLZXkpO1xuXG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50U2VjdGlvbign4pyTIFF1ZXJ5IENvbXBsZXRlJyk7XG5cbiAgICAvLyBEaXNwbGF5IHJlc3VsdHMgc3VtbWFyeVxuICAgIGRpc3BsYXlMaXN0UmVzdWx0cyhpdGVtcywgdG90YWwsIGhhc01vcmUsIHNwZWMubGFiZWxQbHVyYWwsIHJlcXVlc3REdXJhdGlvbiwgZmlsdGVyUGFyYW1zKTtcblxuICAgIC8vIERpc3BsYXkgc3RhdGlzdGljc1xuICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmIG9wdGlvbnMuZm9ybWF0ID09PSAndGFibGUnKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHNwZWMuc3RhdGlzdGljcz8uKGl0ZW1zKTtcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnU3RhdGlzdGljcycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHN0YXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdXRwdXQgZGF0YSBpbiByZXF1ZXN0ZWQgZm9ybWF0XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGlmIChvcHRpb25zLm91dHB1dCkge1xuICAgICAgcHJpbnRJbmZvKCdTYXZpbmcgdG8gZmlsZScsIHsgcGF0aDogb3B0aW9ucy5vdXRwdXQsIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQgfSk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGF0YShzcGVjLnJvd3MoaXRlbXMsIG9wdGlvbnMpLCB7XG4gICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgZmlsZTogb3B0aW9ucy5vdXRwdXQsXG4gICAgfSk7XG5cbiAgICAvLyBQZXJmb3JtYW5jZSBtZXRyaWNzXG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgJ1RvdGFsIER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSksXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBjb21tYW5kOiBzcGVjLmNvbW1hbmROYW1lLFxuICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgZmlsdGVyczogb3B0aW9ucyxcbiAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `get-pipeline` command with the CLI program.
4
+ *
5
+ * @example
6
+ * ```bash
7
+ * pipeline-manager pipeline get --id <pipeline-id>
8
+ * pipeline-manager pipeline get --id <pipeline-id> --format json
9
+ * pipeline-manager pipeline get --id <pipeline-id> --output pipeline.json
10
+ * ```
11
+ */
12
+ export declare function getPipeline(program: Command): void;
13
+ //# sourceMappingURL=get-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-pipeline.d.ts","sourceRoot":"","sources":["../../src/commands/get-pipeline.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgClD"}
@@ -0,0 +1,49 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { Command } from 'commander';
4
+ import pico from 'picocolors';
5
+ import { runGetEntity } from './entity-get.js';
6
+ import {} from '../types/index.js';
7
+ import { withSslOptions } from '../utils/command-utils.js';
8
+ const { bold, green } = pico;
9
+ /**
10
+ * Registers the `get-pipeline` command with the CLI program.
11
+ *
12
+ * @example
13
+ * ```bash
14
+ * pipeline-manager pipeline get --id <pipeline-id>
15
+ * pipeline-manager pipeline get --id <pipeline-id> --format json
16
+ * pipeline-manager pipeline get --id <pipeline-id> --output pipeline.json
17
+ * ```
18
+ */
19
+ export function getPipeline(program) {
20
+ withSslOptions(program
21
+ .command('get')
22
+ .description('Get a single pipeline by ID')
23
+ .requiredOption('-i, --id <id>', 'Pipeline ID')
24
+ .option('-f, --format <format>', 'Output format (json, yaml, table)', 'json')
25
+ .option('-o, --output <file>', 'Save output to file'))
26
+ .option('--show-props', 'Show full pipeline properties in table format', false)
27
+ .action((options) => runGetEntity(program, options, {
28
+ label: 'Pipeline',
29
+ responseKey: 'pipeline',
30
+ urlFor: (client, id) => `${client.getConfig().api.pipelineUrl}/${id}`,
31
+ summary: (pipeline) => ({
32
+ 'Pipeline ID': green(bold(pipeline.id)),
33
+ 'Project': pipeline.project,
34
+ 'Organization': pipeline.organization,
35
+ 'Name': pipeline.pipelineName || '(not set)',
36
+ 'Visibility': pipeline.visibility || 'org',
37
+ 'Default': pipeline.isDefault ? 'Yes' : 'No',
38
+ 'Active': pipeline.isActive ? 'Yes' : 'No',
39
+ 'Created At': pipeline.createdAt || '(not available)',
40
+ 'Updated At': pipeline.updatedAt || '(not available)',
41
+ }),
42
+ extra: (options, pipeline) => options.showProps && options.format === 'table' && pipeline.props && Object.keys(pipeline.props).length > 0
43
+ ? { infoLabel: 'Pipeline Properties', payload: pipeline.props }
44
+ : null,
45
+ commandName: 'get-pipeline',
46
+ idContextKey: 'pipelineId',
47
+ }));
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2dldC1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTdCOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsY0FBYyxDQUNaLE9BQU87U0FDSixPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ2QsV0FBVyxDQUFDLDZCQUE2QixDQUFDO1NBQzFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1NBQzlDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLENBQUM7U0FDNUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQ3hEO1NBQ0UsTUFBTSxDQUFDLGNBQWMsRUFBRSwrQ0FBK0MsRUFBRSxLQUFLLENBQUM7U0FDOUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQVcsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUM1RCxLQUFLLEVBQUUsVUFBVTtRQUNqQixXQUFXLEVBQUUsVUFBVTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTtRQUNyRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTztZQUMzQixjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDckMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLElBQUksV0FBVztZQUM1QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxLQUFLO1lBQzFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDNUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxpQkFBaUI7WUFDckQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksaUJBQWlCO1NBQ3RELENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDM0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUMvRCxDQUFDLENBQUMsSUFBSTtRQUNWLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgcnVuR2V0RW50aXR5IH0gZnJvbSAnLi9lbnRpdHktZ2V0LmpzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGdldC1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGdldCAtLWlkIDxwaXBlbGluZS1pZD4gLS1mb3JtYXQganNvblxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+IC0tb3V0cHV0IHBpcGVsaW5lLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICBwcm9ncmFtXG4gICAgICAuY29tbWFuZCgnZ2V0JylcbiAgICAgIC5kZXNjcmlwdGlvbignR2V0IGEgc2luZ2xlIHBpcGVsaW5lIGJ5IElEJylcbiAgICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCcpXG4gICAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUpJywgJ2pzb24nKVxuICAgICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJyksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcHJvcHMnLCAnU2hvdyBmdWxsIHBpcGVsaW5lIHByb3BlcnRpZXMgaW4gdGFibGUgZm9ybWF0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9ucykgPT4gcnVuR2V0RW50aXR5PFBpcGVsaW5lPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbDogJ1BpcGVsaW5lJyxcbiAgICAgIHJlc3BvbnNlS2V5OiAncGlwZWxpbmUnLFxuICAgICAgdXJsRm9yOiAoY2xpZW50LCBpZCkgPT4gYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybH0vJHtpZH1gLFxuICAgICAgc3VtbWFyeTogKHBpcGVsaW5lKSA9PiAoe1xuICAgICAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICdWaXNpYmlsaXR5JzogcGlwZWxpbmUudmlzaWJpbGl0eSB8fCAnb3JnJyxcbiAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgJ0NyZWF0ZWQgQXQnOiBwaXBlbGluZS5jcmVhdGVkQXQgfHwgJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgICdVcGRhdGVkIEF0JzogcGlwZWxpbmUudXBkYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgfSksXG4gICAgICBleHRyYTogKG9wdGlvbnMsIHBpcGVsaW5lKSA9PlxuICAgICAgICBvcHRpb25zLnNob3dQcm9wcyAmJiBvcHRpb25zLmZvcm1hdCA9PT0gJ3RhYmxlJyAmJiBwaXBlbGluZS5wcm9wcyAmJiBPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RoID4gMFxuICAgICAgICAgID8geyBpbmZvTGFiZWw6ICdQaXBlbGluZSBQcm9wZXJ0aWVzJywgcGF5bG9hZDogcGlwZWxpbmUucHJvcHMgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGNvbW1hbmROYW1lOiAnZ2V0LXBpcGVsaW5lJyxcbiAgICAgIGlkQ29udGV4dEtleTogJ3BpcGVsaW5lSWQnLFxuICAgIH0pKTtcbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `get-plugin` command with the CLI program.
4
+ *
5
+ * @example
6
+ * ```bash
7
+ * pipeline-manager plugin get --id <plugin-id>
8
+ * pipeline-manager plugin get --id <plugin-id> --format json
9
+ * pipeline-manager plugin get --id <plugin-id> --output plugin.json
10
+ * ```
11
+ */
12
+ export declare function getPlugin(program: Command): void;
13
+ //# sourceMappingURL=get-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/get-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiChD"}
@@ -0,0 +1,51 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { Command } from 'commander';
4
+ import pico from 'picocolors';
5
+ import { runGetEntity } from './entity-get.js';
6
+ import { formatFileSize } from '../config/cli.constants.js';
7
+ import {} from '../types/index.js';
8
+ import { withSslOptions } from '../utils/command-utils.js';
9
+ const { bold, green } = pico;
10
+ /**
11
+ * Registers the `get-plugin` command with the CLI program.
12
+ *
13
+ * @example
14
+ * ```bash
15
+ * pipeline-manager plugin get --id <plugin-id>
16
+ * pipeline-manager plugin get --id <plugin-id> --format json
17
+ * pipeline-manager plugin get --id <plugin-id> --output plugin.json
18
+ * ```
19
+ */
20
+ export function getPlugin(program) {
21
+ withSslOptions(program
22
+ .command('get')
23
+ .description('Get a single plugin by ID')
24
+ .requiredOption('-i, --id <id>', 'Plugin ID')
25
+ .option('-f, --format <format>', 'Output format (json, yaml, table)', 'json')
26
+ .option('-o, --output <file>', 'Save output to file'))
27
+ .option('--show-metadata', 'Show full plugin metadata in table format', false)
28
+ .action((options) => runGetEntity(program, options, {
29
+ label: 'Plugin',
30
+ responseKey: 'plugin',
31
+ urlFor: (client, id) => `${client.getConfig().api.pluginUrl}/${id}`,
32
+ summary: (plugin) => ({
33
+ 'Plugin ID': green(bold(plugin.id)),
34
+ 'Name': plugin.name,
35
+ 'Version': plugin.version,
36
+ 'Organization': plugin.organization,
37
+ 'Description': plugin.description || '(not set)',
38
+ 'File Size': plugin.fileSize ? formatFileSize(plugin.fileSize) : '(not available)',
39
+ 'Public': plugin.isPublic ? 'Yes' : 'No',
40
+ 'Active': plugin.isActive ? 'Yes' : 'No',
41
+ 'Created At': plugin.createdAt || '(not available)',
42
+ 'Updated At': plugin.updatedAt || '(not available)',
43
+ }),
44
+ extra: (options, plugin) => options.showMetadata && options.format === 'table' && plugin.metadata && Object.keys(plugin.metadata).length > 0
45
+ ? { infoLabel: 'Plugin Metadata', payload: plugin.metadata }
46
+ : null,
47
+ commandName: 'get-plugin',
48
+ idContextKey: 'pluginId',
49
+ }));
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9nZXQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFnQjtJQUN4QyxjQUFjLENBQ1osT0FBTztTQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDZCxXQUFXLENBQUMsMkJBQTJCLENBQUM7U0FDeEMsY0FBYyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUM7U0FDNUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQztTQUM1RSxNQUFNLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsQ0FDeEQ7U0FDRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsMkNBQTJDLEVBQUUsS0FBSyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7UUFDMUQsS0FBSyxFQUFFLFFBQVE7UUFDZixXQUFXLEVBQUUsUUFBUTtRQUNyQixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRTtRQUNuRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDekIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ25DLGFBQWEsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLFdBQVc7WUFDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtZQUNsRixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3hDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDeEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksaUJBQWlCO1lBQ25ELFlBQVksRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLGlCQUFpQjtTQUNwRCxDQUFDO1FBQ0YsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ3pCLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM5RyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDNUQsQ0FBQyxDQUFDLElBQUk7UUFDVixXQUFXLEVBQUUsWUFBWTtRQUN6QixZQUFZLEVBQUUsVUFBVTtLQUN6QixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHJ1bkdldEVudGl0eSB9IGZyb20gJy4vZW50aXR5LWdldC5qcyc7XG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGx1Z2luIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBnZXQtcGx1Z2luYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiBnZXQgLS1pZCA8cGx1Z2luLWlkPlxuICogcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gZ2V0IC0taWQgPHBsdWdpbi1pZD4gLS1mb3JtYXQganNvblxuICogcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gZ2V0IC0taWQgPHBsdWdpbi1pZD4gLS1vdXRwdXQgcGx1Z2luLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMoXG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2dldCcpXG4gICAgICAuZGVzY3JpcHRpb24oJ0dldCBhIHNpbmdsZSBwbHVnaW4gYnkgSUQnKVxuICAgICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ1BsdWdpbiBJRCcpXG4gICAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUpJywgJ2pzb24nKVxuICAgICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJyksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctbWV0YWRhdGEnLCAnU2hvdyBmdWxsIHBsdWdpbiBtZXRhZGF0YSBpbiB0YWJsZSBmb3JtYXQnLCBmYWxzZSlcbiAgICAuYWN0aW9uKChvcHRpb25zKSA9PiBydW5HZXRFbnRpdHk8UGx1Z2luPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbDogJ1BsdWdpbicsXG4gICAgICByZXNwb25zZUtleTogJ3BsdWdpbicsXG4gICAgICB1cmxGb3I6IChjbGllbnQsIGlkKSA9PiBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLnBsdWdpblVybH0vJHtpZH1gLFxuICAgICAgc3VtbWFyeTogKHBsdWdpbikgPT4gKHtcbiAgICAgICAgJ1BsdWdpbiBJRCc6IGdyZWVuKGJvbGQocGx1Z2luLmlkKSksXG4gICAgICAgICdOYW1lJzogcGx1Z2luLm5hbWUsXG4gICAgICAgICdWZXJzaW9uJzogcGx1Z2luLnZlcnNpb24sXG4gICAgICAgICdPcmdhbml6YXRpb24nOiBwbHVnaW4ub3JnYW5pemF0aW9uLFxuICAgICAgICAnRGVzY3JpcHRpb24nOiBwbHVnaW4uZGVzY3JpcHRpb24gfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICdGaWxlIFNpemUnOiBwbHVnaW4uZmlsZVNpemUgPyBmb3JtYXRGaWxlU2l6ZShwbHVnaW4uZmlsZVNpemUpIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgICdQdWJsaWMnOiBwbHVnaW4uaXNQdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdBY3RpdmUnOiBwbHVnaW4uaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdDcmVhdGVkIEF0JzogcGx1Z2luLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgJ1VwZGF0ZWQgQXQnOiBwbHVnaW4udXBkYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgfSksXG4gICAgICBleHRyYTogKG9wdGlvbnMsIHBsdWdpbikgPT5cbiAgICAgICAgb3B0aW9ucy5zaG93TWV0YWRhdGEgJiYgb3B0aW9ucy5mb3JtYXQgPT09ICd0YWJsZScgJiYgcGx1Z2luLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHBsdWdpbi5tZXRhZGF0YSkubGVuZ3RoID4gMFxuICAgICAgICAgID8geyBpbmZvTGFiZWw6ICdQbHVnaW4gTWV0YWRhdGEnLCBwYXlsb2FkOiBwbHVnaW4ubWV0YWRhdGEgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGNvbW1hbmROYW1lOiAnZ2V0LXBsdWdpbicsXG4gICAgICBpZENvbnRleHRLZXk6ICdwbHVnaW5JZCcsXG4gICAgfSkpO1xufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `template instantiate` command.
4
+ *
5
+ * Renders a golden-path template into a concrete pipeline `props` document by
6
+ * supplying its declared inputs. It **creates nothing** — the rendered props are
7
+ * written to a file (or stdout) and go through the normal `pipeline create` path,
8
+ * where compliance and quota still apply.
9
+ *
10
+ * @example
11
+ * ```bash
12
+ * pipeline-manager template instantiate --name react-javascript \
13
+ * --project react --organization AcmeCorp \
14
+ * --input orgId=1234abcd-... --output pipeline-props.json
15
+ *
16
+ * pipeline-manager pipeline create --file pipeline-props.json --deploy
17
+ * ```
18
+ */
19
+ export declare function instantiateTemplate(program: Command): void;
20
+ //# sourceMappingURL=instantiate-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate-template.d.ts","sourceRoot":"","sources":["../../src/commands/instantiate-template.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgHpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2J1D"}