@pipeline-builder/pipeline-manager 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +74 -0
  3. package/cdk.json +91 -0
  4. package/config.yml +94 -0
  5. package/dist/boilerplate.d.ts +3 -0
  6. package/dist/boilerplate.d.ts.map +1 -0
  7. package/dist/boilerplate.js +58 -0
  8. package/dist/cdk.json +91 -0
  9. package/dist/cli.d.ts +62 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +372 -0
  12. package/dist/commands/bootstrap.d.ts +11 -0
  13. package/dist/commands/bootstrap.d.ts.map +1 -0
  14. package/dist/commands/bootstrap.js +159 -0
  15. package/dist/commands/create-pipeline.d.ts +12 -0
  16. package/dist/commands/create-pipeline.d.ts.map +1 -0
  17. package/dist/commands/create-pipeline.js +291 -0
  18. package/dist/commands/deploy.d.ts +15 -0
  19. package/dist/commands/deploy.d.ts.map +1 -0
  20. package/dist/commands/deploy.js +167 -0
  21. package/dist/commands/get-pipeline.d.ts +13 -0
  22. package/dist/commands/get-pipeline.d.ts.map +1 -0
  23. package/dist/commands/get-pipeline.js +97 -0
  24. package/dist/commands/get-plugin.d.ts +13 -0
  25. package/dist/commands/get-plugin.d.ts.map +1 -0
  26. package/dist/commands/get-plugin.js +98 -0
  27. package/dist/commands/list-pipelines.d.ts +20 -0
  28. package/dist/commands/list-pipelines.d.ts.map +1 -0
  29. package/dist/commands/list-pipelines.js +172 -0
  30. package/dist/commands/list-plugins.d.ts +20 -0
  31. package/dist/commands/list-plugins.d.ts.map +1 -0
  32. package/dist/commands/list-plugins.js +167 -0
  33. package/dist/commands/login.d.ts +21 -0
  34. package/dist/commands/login.d.ts.map +1 -0
  35. package/dist/commands/login.js +179 -0
  36. package/dist/commands/setup-events.d.ts +15 -0
  37. package/dist/commands/setup-events.d.ts.map +1 -0
  38. package/dist/commands/setup-events.js +177 -0
  39. package/dist/commands/status.d.ts +11 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +89 -0
  42. package/dist/commands/store-token.d.ts +20 -0
  43. package/dist/commands/store-token.d.ts.map +1 -0
  44. package/dist/commands/store-token.js +233 -0
  45. package/dist/commands/synth.d.ts +21 -0
  46. package/dist/commands/synth.d.ts.map +1 -0
  47. package/dist/commands/synth.js +143 -0
  48. package/dist/commands/upload-plugin.d.ts +21 -0
  49. package/dist/commands/upload-plugin.d.ts.map +1 -0
  50. package/dist/commands/upload-plugin.js +311 -0
  51. package/dist/commands/version.d.ts +12 -0
  52. package/dist/commands/version.d.ts.map +1 -0
  53. package/dist/commands/version.js +223 -0
  54. package/dist/config/cli.constants.d.ts +101 -0
  55. package/dist/config/cli.constants.d.ts.map +1 -0
  56. package/dist/config/cli.constants.js +165 -0
  57. package/dist/config.yml +94 -0
  58. package/dist/templates/events-stack.json +141 -0
  59. package/dist/types/config.d.ts +44 -0
  60. package/dist/types/config.d.ts.map +1 -0
  61. package/dist/types/config.js +5 -0
  62. package/dist/types/error.d.ts +61 -0
  63. package/dist/types/error.d.ts.map +1 -0
  64. package/dist/types/error.js +39 -0
  65. package/dist/types/index.d.ts +8 -0
  66. package/dist/types/index.d.ts.map +1 -0
  67. package/dist/types/index.js +26 -0
  68. package/dist/types/pipeline.d.ts +144 -0
  69. package/dist/types/pipeline.d.ts.map +1 -0
  70. package/dist/types/pipeline.js +5 -0
  71. package/dist/types/plugin.d.ts +160 -0
  72. package/dist/types/plugin.d.ts.map +1 -0
  73. package/dist/types/plugin.js +5 -0
  74. package/dist/utils/api-client.d.ts +26 -0
  75. package/dist/utils/api-client.d.ts.map +1 -0
  76. package/dist/utils/api-client.js +160 -0
  77. package/dist/utils/audit-log.d.ts +8 -0
  78. package/dist/utils/audit-log.d.ts.map +1 -0
  79. package/dist/utils/audit-log.js +53 -0
  80. package/dist/utils/auth-guard.d.ts +16 -0
  81. package/dist/utils/auth-guard.d.ts.map +1 -0
  82. package/dist/utils/auth-guard.js +25 -0
  83. package/dist/utils/aws-secrets.d.ts +21 -0
  84. package/dist/utils/aws-secrets.d.ts.map +1 -0
  85. package/dist/utils/aws-secrets.js +74 -0
  86. package/dist/utils/banner.d.ts +19 -0
  87. package/dist/utils/banner.d.ts.map +1 -0
  88. package/dist/utils/banner.js +59 -0
  89. package/dist/utils/cdk-utils.d.ts +51 -0
  90. package/dist/utils/cdk-utils.d.ts.map +1 -0
  91. package/dist/utils/cdk-utils.js +101 -0
  92. package/dist/utils/command-utils.d.ts +56 -0
  93. package/dist/utils/command-utils.d.ts.map +1 -0
  94. package/dist/utils/command-utils.js +138 -0
  95. package/dist/utils/config-loader.d.ts +27 -0
  96. package/dist/utils/config-loader.d.ts.map +1 -0
  97. package/dist/utils/config-loader.js +166 -0
  98. package/dist/utils/error-handler.d.ts +29 -0
  99. package/dist/utils/error-handler.d.ts.map +1 -0
  100. package/dist/utils/error-handler.js +255 -0
  101. package/dist/utils/list-command-utils.d.ts +23 -0
  102. package/dist/utils/list-command-utils.d.ts.map +1 -0
  103. package/dist/utils/list-command-utils.js +60 -0
  104. package/dist/utils/output-utils.d.ts +60 -0
  105. package/dist/utils/output-utils.d.ts.map +1 -0
  106. package/dist/utils/output-utils.js +320 -0
  107. package/dist/utils/rate-limiter.d.ts +14 -0
  108. package/dist/utils/rate-limiter.d.ts.map +1 -0
  109. package/dist/utils/rate-limiter.js +73 -0
  110. package/package.json +144 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI initialization options
4
+ */
5
+ interface CliOptions {
6
+ /**
7
+ * Show banner on startup
8
+ * @default true
9
+ */
10
+ showBanner?: boolean;
11
+ /**
12
+ * Minimal banner (no ASCII art)
13
+ * @default false
14
+ */
15
+ minimalBanner?: boolean;
16
+ /**
17
+ * Debug mode
18
+ * @default false
19
+ */
20
+ debug?: boolean;
21
+ /**
22
+ * Verbose output
23
+ * @default false
24
+ */
25
+ verbose?: boolean;
26
+ /**
27
+ * Quiet mode (minimal output)
28
+ * @default false
29
+ */
30
+ quiet?: boolean;
31
+ /**
32
+ * No color output
33
+ * @default false
34
+ */
35
+ noColor?: boolean;
36
+ }
37
+ /**
38
+ * Initialize CLI with options
39
+ *
40
+ * @param options - CLI initialization options
41
+ */
42
+ export declare function initializeCli(options?: CliOptions): void;
43
+ /**
44
+ * Main CLI entry point
45
+ *
46
+ * @param options - CLI initialization options
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Standard initialization
51
+ * main();
52
+ *
53
+ * // Minimal mode
54
+ * main({ minimalBanner: true, quiet: true });
55
+ *
56
+ * // Debug mode
57
+ * main({ debug: true, verbose: true });
58
+ * ```
59
+ */
60
+ export declare function main(options?: CliOptions): void;
61
+ export {};
62
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA+BA;;GAEG;AACH,UAAU,UAAU;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4ND;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CAyD5D;AAiDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CA0BnD"}
package/dist/cli.js ADDED
@@ -0,0 +1,372 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // Copyright 2026 Pipeline Builder Contributors
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initializeCli = initializeCli;
7
+ exports.main = main;
8
+ const commander_1 = require("commander");
9
+ const bootstrap_1 = require("./commands/bootstrap");
10
+ const create_pipeline_1 = require("./commands/create-pipeline");
11
+ const deploy_1 = require("./commands/deploy");
12
+ const get_pipeline_1 = require("./commands/get-pipeline");
13
+ const get_plugin_1 = require("./commands/get-plugin");
14
+ const list_pipelines_1 = require("./commands/list-pipelines");
15
+ const list_plugins_1 = require("./commands/list-plugins");
16
+ const login_1 = require("./commands/login");
17
+ const setup_events_1 = require("./commands/setup-events");
18
+ const status_1 = require("./commands/status");
19
+ const store_token_1 = require("./commands/store-token");
20
+ const synth_1 = require("./commands/synth");
21
+ const upload_plugin_1 = require("./commands/upload-plugin");
22
+ const version_1 = require("./commands/version");
23
+ const cli_constants_1 = require("./config/cli.constants");
24
+ const banner_1 = require("./utils/banner");
25
+ const error_handler_1 = require("./utils/error-handler");
26
+ const output_utils_1 = require("./utils/output-utils");
27
+ /**
28
+ * Check environment and display warnings
29
+ */
30
+ function checkEnvironment() {
31
+ const warnings = [];
32
+ // Check for required environment variables
33
+ if (!process.env[cli_constants_1.ENV_VARS.PLATFORM_TOKEN]) {
34
+ warnings.push('PLATFORM_TOKEN environment variable is not set');
35
+ warnings.push('Authentication will fail for API operations');
36
+ }
37
+ // Check Node version
38
+ const nodeVersion = process.version;
39
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0] || '0', 10);
40
+ if (majorVersion < 18) {
41
+ warnings.push(`Node.js ${nodeVersion} detected - version 18+ recommended`);
42
+ }
43
+ // Display warnings
44
+ if (warnings.length > 0) {
45
+ (0, output_utils_1.printSection)('Environment Warnings');
46
+ warnings.forEach(warning => {
47
+ (0, output_utils_1.printWarning)(warning);
48
+ });
49
+ console.log('');
50
+ }
51
+ }
52
+ /**
53
+ * Display startup information
54
+ */
55
+ function displayStartupInfo(options) {
56
+ if (options.quiet)
57
+ return;
58
+ const executionId = (0, cli_constants_1.generateExecutionId)();
59
+ if (options.debug || options.verbose) {
60
+ (0, output_utils_1.printDebug)('CLI Configuration', {
61
+ name: cli_constants_1.APP_NAME,
62
+ version: cli_constants_1.APP_VERSION,
63
+ executionId,
64
+ node: process.version,
65
+ platform: process.platform,
66
+ arch: process.arch,
67
+ cwd: process.cwd(),
68
+ env: {
69
+ debug: process.env.DEBUG,
70
+ token: process.env[cli_constants_1.ENV_VARS.PLATFORM_TOKEN] ? 'set' : 'not set',
71
+ url: process.env[cli_constants_1.ENV_VARS.PLATFORM_BASE_URL] || 'default',
72
+ },
73
+ });
74
+ }
75
+ else {
76
+ (0, output_utils_1.printDebug)('Starting CLI', {
77
+ version: cli_constants_1.APP_VERSION,
78
+ executionId,
79
+ });
80
+ }
81
+ }
82
+ /**
83
+ * Register all CLI commands
84
+ */
85
+ function registerCommands() {
86
+ (0, output_utils_1.printDebug)('Registering commands');
87
+ // Configure program
88
+ commander_1.program
89
+ .name(cli_constants_1.APP_NAME)
90
+ .description(cli_constants_1.APP_DESCRIPTION)
91
+ .version(cli_constants_1.APP_VERSION, '-v, --version', 'Show CLI version')
92
+ .option('--debug', 'Enable debug output with stack traces', false)
93
+ .option('--verbose', 'Show detailed information', false)
94
+ .option('--quiet', 'Minimal output (errors only)', false)
95
+ .option('--no-color', 'Disable colored output', false)
96
+ .addHelpText('after', `
97
+ Environment Variables:
98
+ ${cli_constants_1.ENV_VARS.PLATFORM_TOKEN} Authentication token (required)
99
+ ${cli_constants_1.ENV_VARS.PLATFORM_BASE_URL} API base URL (optional)
100
+ ${cli_constants_1.ENV_VARS.CLI_CONFIG_PATH} Config file path (optional)
101
+ ${cli_constants_1.ENV_VARS.TLS_REJECT_UNAUTHORIZED} Disable SSL verification if '0'
102
+ ${cli_constants_1.ENV_VARS.DEBUG} Enable debug mode if 'true'
103
+
104
+ Examples:
105
+ $ ${cli_constants_1.APP_NAME} version
106
+ $ ${cli_constants_1.APP_NAME} list-pipelines --project my-app
107
+ $ ${cli_constants_1.APP_NAME} get-pipeline --id pipe-123 --format json
108
+ $ ${cli_constants_1.APP_NAME} store-token --days 30 --region us-east-1
109
+ $ ${cli_constants_1.APP_NAME} bootstrap --account 123456789012 --region us-east-1
110
+ $ ${cli_constants_1.APP_NAME} deploy --id pipe-123 --profile production
111
+
112
+ `);
113
+ // Version command (special handling)
114
+ (0, version_1.version)(commander_1.program);
115
+ // Authentication commands
116
+ (0, output_utils_1.printDebug)('Registering authentication commands');
117
+ (0, login_1.login)(commander_1.program); // Login and obtain PLATFORM_TOKEN (also supports --refresh)
118
+ // Query commands
119
+ (0, output_utils_1.printDebug)('Registering query commands');
120
+ (0, get_plugin_1.getPlugin)(commander_1.program); // Single plugin by ID
121
+ (0, list_plugins_1.listPlugins)(commander_1.program); // Multiple plugins with filters
122
+ (0, get_pipeline_1.getPipeline)(commander_1.program); // Single pipeline by ID
123
+ (0, list_pipelines_1.listPipelines)(commander_1.program); // Multiple pipelines with filters
124
+ // Create/Upload commands
125
+ (0, output_utils_1.printDebug)('Registering create/upload commands');
126
+ (0, create_pipeline_1.createPipeline)(commander_1.program); // Create pipeline configuration
127
+ (0, upload_plugin_1.uploadPlugin)(commander_1.program); // Upload and deploy plugin
128
+ // Status command
129
+ (0, output_utils_1.printDebug)('Registering status command');
130
+ (0, status_1.status)(commander_1.program); // Show environment and connectivity status
131
+ // Deployment commands
132
+ (0, output_utils_1.printDebug)('Registering deployment commands');
133
+ (0, store_token_1.storeToken)(commander_1.program); // Generate JWT token and store in Secrets Manager
134
+ (0, setup_events_1.setupEvents)(commander_1.program); // Deploy EventBridge event ingestion infrastructure
135
+ (0, bootstrap_1.bootstrap)(commander_1.program); // Bootstrap CDK toolkit stack
136
+ (0, deploy_1.deploy)(commander_1.program); // Deploy pipeline with CDK (--app prints boilerplate path)
137
+ (0, synth_1.synth)(commander_1.program); // Run CDK synthesis
138
+ // Shell completions
139
+ (0, output_utils_1.printDebug)('Registering completions command');
140
+ commander_1.program
141
+ .command('completions')
142
+ .description('Generate shell completions (bash, zsh, fish)')
143
+ .argument('<shell>', 'Shell type: bash, zsh, or fish')
144
+ .action((shell) => {
145
+ switch (shell) {
146
+ case 'bash':
147
+ console.log(`# pipeline-manager bash completions
148
+ _pipeline_manager_completions() {
149
+ local cur="\${COMP_WORDS[COMP_CWORD]}"
150
+ local commands="login deploy synth upload-plugin create-pipeline status version bootstrap setup-events store-token completions"
151
+ COMPREPLY=($(compgen -W "\${commands}" -- "\${cur}"))
152
+ }
153
+ complete -F _pipeline_manager_completions pipeline-manager`);
154
+ break;
155
+ case 'zsh':
156
+ console.log(`# pipeline-manager zsh completions
157
+ _pipeline_manager() {
158
+ local commands=(login deploy synth upload-plugin create-pipeline status version bootstrap setup-events store-token completions)
159
+ _describe 'command' commands
160
+ }
161
+ compdef _pipeline_manager pipeline-manager`);
162
+ break;
163
+ case 'fish':
164
+ console.log(`# pipeline-manager fish completions
165
+ complete -c pipeline-manager -n '__fish_use_subcommand' -a 'login deploy synth upload-plugin create-pipeline status version bootstrap setup-events store-token completions'`);
166
+ break;
167
+ default:
168
+ console.error(`Unknown shell: ${shell}. Use bash, zsh, or fish.`);
169
+ process.exit(1);
170
+ }
171
+ });
172
+ (0, output_utils_1.printDebug)('All commands registered successfully');
173
+ }
174
+ /**
175
+ * Handle program errors
176
+ */
177
+ function setupErrorHandlers() {
178
+ // Handle uncaught exceptions
179
+ process.on('uncaughtException', (error) => {
180
+ console.error(''); // Empty line
181
+ (0, output_utils_1.printError)('Uncaught exception', {
182
+ error: error.message,
183
+ name: error.name,
184
+ });
185
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.GENERAL, {
186
+ debug: (0, cli_constants_1.isDebugMode)(commander_1.program.opts()),
187
+ exit: true,
188
+ context: {
189
+ type: 'uncaughtException',
190
+ },
191
+ });
192
+ });
193
+ // Handle unhandled promise rejections
194
+ process.on('unhandledRejection', (reason) => {
195
+ console.error(''); // Empty line
196
+ (0, output_utils_1.printError)('Unhandled promise rejection', {
197
+ reason: reason instanceof Error ? reason.message : String(reason),
198
+ });
199
+ const error = reason instanceof Error ? reason : new Error(String(reason));
200
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.GENERAL, {
201
+ debug: (0, cli_constants_1.isDebugMode)(commander_1.program.opts()),
202
+ exit: true,
203
+ context: {
204
+ type: 'unhandledRejection',
205
+ },
206
+ });
207
+ });
208
+ // Handle SIGINT (Ctrl+C)
209
+ process.on('SIGINT', () => {
210
+ console.log(''); // Empty line
211
+ (0, output_utils_1.printWarning)('Process interrupted by user (SIGINT)');
212
+ console.log(''); // Empty line
213
+ process.exit(130); // Standard exit code for SIGINT
214
+ });
215
+ // Handle SIGTERM
216
+ process.on('SIGTERM', () => {
217
+ console.log(''); // Empty line
218
+ (0, output_utils_1.printWarning)('Process terminated (SIGTERM)');
219
+ console.log(''); // Empty line
220
+ process.exit(143); // Standard exit code for SIGTERM
221
+ });
222
+ }
223
+ /**
224
+ * Initialize CLI with options
225
+ *
226
+ * @param options - CLI initialization options
227
+ */
228
+ function initializeCli(options = {}) {
229
+ const { showBanner = true, minimalBanner = false, debug = false, verbose = false, quiet = false, noColor = false, } = options;
230
+ // Handle color output
231
+ if (noColor) {
232
+ process.env.NO_COLOR = '1';
233
+ }
234
+ // Display banner
235
+ if (showBanner && !quiet) {
236
+ if (minimalBanner) {
237
+ (0, banner_1.miniBanner)();
238
+ }
239
+ else {
240
+ (0, banner_1.banner)({
241
+ minimal: false,
242
+ showDescription: true,
243
+ showTimestamp: debug || verbose,
244
+ showExecutionId: debug,
245
+ });
246
+ }
247
+ }
248
+ // Display startup info
249
+ displayStartupInfo({ debug, verbose, quiet });
250
+ // Check environment
251
+ if (!quiet) {
252
+ checkEnvironment();
253
+ }
254
+ // Setup error handlers
255
+ setupErrorHandlers();
256
+ // Register commands
257
+ try {
258
+ registerCommands();
259
+ (0, output_utils_1.printDebug)('CLI initialization complete');
260
+ }
261
+ catch (error) {
262
+ (0, output_utils_1.printError)('CLI initialization failed', {
263
+ error: error instanceof Error ? error.message : String(error),
264
+ });
265
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.CONFIGURATION, {
266
+ debug: debug || (0, cli_constants_1.isDebugMode)(),
267
+ exit: true,
268
+ context: {
269
+ stage: 'initialization',
270
+ },
271
+ });
272
+ }
273
+ }
274
+ /**
275
+ * Parse command line arguments
276
+ */
277
+ function parseArguments() {
278
+ try {
279
+ commander_1.program.parse(process.argv);
280
+ // Show help if no command provided
281
+ const args = process.argv.slice(2);
282
+ if (args.length === 0) {
283
+ (0, output_utils_1.printInfo)('No command specified - displaying help');
284
+ console.log(''); // Empty line
285
+ commander_1.program.outputHelp();
286
+ process.exit(0);
287
+ }
288
+ // Check if command exists
289
+ const command = args[0];
290
+ if (command && !command.startsWith('-')) {
291
+ const commandExists = commander_1.program.commands.some(cmd => cmd.name() === command);
292
+ if (!commandExists) {
293
+ console.log(''); // Empty line
294
+ (0, output_utils_1.printError)(`Unknown command: ${command}`);
295
+ console.log(''); // Empty line
296
+ (0, output_utils_1.printInfo)('Available commands:');
297
+ commander_1.program.commands.forEach(cmd => {
298
+ console.log(` • ${cmd.name()} - ${cmd.description()}`);
299
+ });
300
+ console.log(''); // Empty line
301
+ process.exit(1);
302
+ }
303
+ }
304
+ (0, output_utils_1.printDebug)('Command line arguments parsed successfully');
305
+ }
306
+ catch (error) {
307
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.GENERAL, {
308
+ debug: (0, cli_constants_1.isDebugMode)(commander_1.program.opts()),
309
+ exit: true,
310
+ context: {
311
+ stage: 'argument-parsing',
312
+ argv: process.argv,
313
+ },
314
+ });
315
+ }
316
+ }
317
+ /**
318
+ * Main CLI entry point
319
+ *
320
+ * @param options - CLI initialization options
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * // Standard initialization
325
+ * main();
326
+ *
327
+ * // Minimal mode
328
+ * main({ minimalBanner: true, quiet: true });
329
+ *
330
+ * // Debug mode
331
+ * main({ debug: true, verbose: true });
332
+ * ```
333
+ */
334
+ function main(options = {}) {
335
+ try {
336
+ // Initialize CLI
337
+ initializeCli(options);
338
+ // Parse arguments and execute command
339
+ parseArguments();
340
+ // If we reach here, command completed successfully
341
+ (0, output_utils_1.printDebug)('CLI execution completed successfully');
342
+ }
343
+ catch (error) {
344
+ // Final catch-all error handler
345
+ console.error(''); // Empty line
346
+ (0, output_utils_1.printError)('Fatal CLI error', {
347
+ error: error instanceof Error ? error.message : String(error),
348
+ });
349
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.GENERAL, {
350
+ debug: (0, cli_constants_1.isDebugMode)(options),
351
+ exit: true,
352
+ context: {
353
+ stage: 'main',
354
+ options,
355
+ },
356
+ });
357
+ }
358
+ }
359
+ /**
360
+ * Run CLI if executed directly
361
+ */
362
+ if (require.main === module) {
363
+ // Parse CLI options from environment or command line
364
+ const options = {
365
+ debug: process.env.DEBUG === 'true',
366
+ quiet: process.argv.includes('--quiet'),
367
+ verbose: process.argv.includes('--verbose'),
368
+ noColor: process.argv.includes('--no-color') || process.env.NO_COLOR === '1',
369
+ };
370
+ main(options);
371
+ }
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBcVN0QyxzQ0F5REM7QUFrRUQsb0JBMEJDO0FBeGJELHlDQUFvQztBQUNwQyxvREFBaUQ7QUFDakQsZ0VBQTREO0FBQzVELDhDQUEyQztBQUMzQywwREFBc0Q7QUFDdEQsc0RBQWtEO0FBQ2xELDhEQUEwRDtBQUMxRCwwREFBc0Q7QUFDdEQsNENBQXlDO0FBQ3pDLDBEQUFzRDtBQUN0RCw4Q0FBMkM7QUFDM0Msd0RBQW9EO0FBQ3BELDRDQUF5QztBQUN6Qyw0REFBd0Q7QUFDeEQsZ0RBQTZDO0FBQzdDLDBEQU9nQztBQUNoQywyQ0FBb0Q7QUFDcEQseURBQWlFO0FBQ2pFLHVEQUFxRztBQTJDckc7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQjtJQUN2QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFFOUIsMkNBQTJDO0lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxxQkFBcUI7SUFDckIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLElBQUksWUFBWSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxXQUFXLHFDQUFxQyxD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QUFFLE1BQU07Z0JBQ2IsT0FBTzthQUNSO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM1QixxREFBcUQ7SUFDckQsTUFBTSxPQUFPLEdBQWU7UUFDMUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLE1BQU07UUFDbkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHO0tBQzdFLENBQUM7SUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGJvb3RzdHJhcCB9IGZyb20gJy4vY29tbWFuZHMvYm9vdHN0cmFwJztcbmltcG9ydCB7IGNyZWF0ZVBpcGVsaW5lIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtcGlwZWxpbmUnO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgZ2V0UGlwZWxpbmUgfSBmcm9tICcuL2NvbW1hbmRzL2dldC1waXBlbGluZSc7XG5pbXBvcnQgeyBnZXRQbHVnaW4gfSBmcm9tICcuL2NvbW1hbmRzL2dldC1wbHVnaW4nO1xuaW1wb3J0IHsgbGlzdFBpcGVsaW5lcyB9IGZyb20gJy4vY29tbWFuZHMvbGlzdC1waXBlbGluZXMnO1xuaW1wb3J0IHsgbGlzdFBsdWdpbnMgfSBmcm9tICcuL2NvbW1hbmRzL2xpc3QtcGx1Z2lucyc7XG5pbXBvcnQgeyBsb2dpbiB9IGZyb20gJy4vY29tbWFuZHMvbG9naW4nO1xuaW1wb3J0IHsgc2V0dXBFdmVudHMgfSBmcm9tICcuL2NvbW1hbmRzL3NldHVwLWV2ZW50cyc7XG5pbXBvcnQgeyBzdGF0dXMgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXR1cyc7XG5pbXBvcnQgeyBzdG9yZVRva2VuIH0gZnJvbSAnLi9jb21tYW5kcy9zdG9yZS10b2tlbic7XG5pbXBvcnQgeyBzeW50aCB9IGZyb20gJy4vY29tbWFuZHMvc3ludGgnO1xuaW1wb3J0IHsgdXBsb2FkUGx1Z2luIH0gZnJvbSAnLi9jb21tYW5kcy91cGxvYWQtcGx1Z2luJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24nO1xuaW1wb3J0IHtcbiAgQVBQX05BTUUsXG4gIEFQUF9ERVNDUklQVElPTixcbiAgQVBQX1ZFUlNJT04sXG4gIEVOVl9WQVJTLFxuICBpc0RlYnVnTW9kZSxcbiAgZ2VuZXJhdGVFeGVjdXRpb25JZCxcbn0gZnJvbSAnLi9jb25maWcvY2xpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBiYW5uZXIsIG1pbmlCYW5uZXIgfSBmcm9tICcuL3V0aWxzL2Jhbm5lcic7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuL3V0aWxzL2Vycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcsIHByaW50RGVidWcsIHByaW50U2VjdGlvbiB9IGZyb20gJy4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuLyoqXG4gKiBDTEkgaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICovXG5pbnRlcmZhY2UgQ2xpT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTaG93IGJhbm5lciBvbiBzdGFydHVwXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHNob3dCYW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbWFsIGJhbm5lciAobm8gQVNDSUkgYXJ0KVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWluaW1hbEJhbm5lcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlYnVnIG1vZGVcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlYnVnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBvdXRwdXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBRdWlldCBtb2RlIChtaW5pbWFsIG91dHB1dClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTm8gY29sb3Igb3V0cHV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub0NvbG9yPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDaGVjayBlbnZpcm9ubWVudCBhbmQgZGlzcGxheSB3YXJuaW5nc1xuICovXG5mdW5jdGlvbiBjaGVja0Vudmlyb25tZW50KCk6IHZvaWQge1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmICghcHJvY2Vzcy5lbnZbRU5WX1ZBUlMuUExBVEZPUk1fVE9LRU5dKSB7XG4gICAgd2FybmluZ3MucHVzaCgnUExBVEZPUk1fVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCcpO1xuICAgIHdhcm5pbmdzLnB1c2goJ0F1dGhlbnRpY2F0aW9uIHdpbGwgZmFpbCBmb3IgQVBJIG9wZXJhdGlvbnMnKTtcbiAgfVxuXG4gIC8vIENoZWNrIE5vZGUgdmVyc2lvblxuICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbjtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobm9kZVZlcnNpb24uc2xpY2UoMSkuc3BsaXQoJy4nKVswXSB8fCAnMCcsIDEwKTtcbiAgaWYgKG1ham9yVmVyc2lvbiA8IDE4KSB7XG4gICAgd2FybmluZ3MucHVzaChgTm9kZS5qcyAke25vZGVWZXJzaW9ufSBkZXRlY3RlZCAtIHZlcnNpb24gMTgrIHJlY29tbWVuZGVkYCk7XG4gIH1cblxuICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdFbnZpcm9ubWVudCBXYXJuaW5ncycpO1xuICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBwcmludFdhcm5pbmcod2FybmluZyk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheSBzdGFydHVwIGluZm9ybWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlTdGFydHVwSW5mbyhvcHRpb25zOiBDbGlPcHRpb25zKTogdm9pZCB7XG4gIGlmIChvcHRpb25zLnF1aWV0KSByZXR1cm47XG5cbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG5cbiAgaWYgKG9wdGlvbnMuZGVidWcgfHwgb3B0aW9ucy52ZXJib3NlKSB7XG4gICAgcHJpbnREZWJ1ZygnQ0xJIENvbmZpZ3VyYXRpb24nLCB7XG4gICAgICBuYW1lOiBBUFBfTkFNRSxcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICBub2RlOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjoge1xuICAgICAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9UT0tFTl0gPyAnc2V0JyA6ICdub3Qgc2V0JyxcbiAgICAgICAgdXJsOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9CQVNFX1VSTF0gfHwgJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwcmludERlYnVnKCdTdGFydGluZyBDTEknLCB7XG4gICAgICB2ZXJzaW9uOiBBUFBfVkVSU0lPTixcbiAgICAgIGV4ZWN1dGlvbklkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIENMSSBjb21tYW5kc1xuICovXG5mdW5jdGlvbiByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBjb21tYW5kcycpO1xuXG4gIC8vIENvbmZpZ3VyZSBwcm9ncmFtXG4gIHByb2dyYW1cbiAgICAubmFtZShBUFBfTkFNRSlcbiAgICAuZGVzY3JpcHRpb24oQVBQX0RFU0NSSVBUSU9OKVxuICAgIC52ZXJzaW9uKEFQUF9WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicsICdTaG93IENMSSB2ZXJzaW9uJylcbiAgICAub3B0aW9uKCctLWRlYnVnJywgJ0VuYWJsZSBkZWJ1ZyBvdXRwdXQgd2l0aCBzdGFjayB0cmFjZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCBpbmZvcm1hdGlvbicsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcXVpZXQnLCAnTWluaW1hbCBvdXRwdXQgKGVycm9ycyBvbmx5KScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tbm8tY29sb3InLCAnRGlzYWJsZSBjb2xvcmVkIG91dHB1dCcsIGZhbHNlKVxuICAgIC5hZGRIZWxwVGV4dCgnYWZ0ZXInLCBgXG5FbnZpcm9ubWVudCBWYXJpYWJsZXM6XG4gICR7RU5WX1ZBUlMuUExBVEZPUk1fVE9LRU59ICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbiB0b2tlbiAocmVxdWlyZWQpXG4gICR7RU5WX1ZBUlMuUExBVEZPUk1fQkFTRV9VUkx9ICAgICAgICAgICAgICAgICBBUEkgYmFzZSBVUkwgKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLkNMSV9DT05GSUdfUEFUSH0gICAgICAgICAgICAgIENvbmZpZyBmaWxlIHBhdGggKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEfSAgICAgIERpc2FibGUgU1NMIHZlcmlmaWNhdGlvbiBpZiAnMCdcbiAgJHtFTlZfVkFSUy5ERUJVR30gICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgZGVidWcgbW9kZSBpZiAndHJ1ZSdcblxuRXhhbXBsZXM6XG4gICQgJHtBUFBfTkFNRX0gdmVyc2lvblxuICAkICR7QVBQX05BTUV9IGxpc3QtcGlwZWxpbmVzIC0tcHJvamVjdCBteS1hcHBcbiAgJCAke0FQUF9OQU1FfSBnZXQtcGlwZWxpbmUgLS1pZCBwaXBlLTEyMyAtLWZvcm1hdCBqc29uXG4gICQgJHtBUFBfTkFNRX0gc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGJvb3RzdHJhcCAtLWFjY291bnQgMTIzNDU2Nzg5MDEyIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGRlcGxveSAtLWlkIHBpcGUtMTIzIC0tcHJvZmlsZSBwcm9kdWN0aW9uXG5cbmApO1xuXG4gIC8vIFZlcnNpb24gY29tbWFuZCAoc3BlY2lhbCBoYW5kbGluZylcbiAgdmVyc2lvbihwcm9ncmFtKTtcblxuICAvLyBBdXRoZW50aWNhdGlvbiBjb21tYW5kc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBhdXRoZW50aWNhdGlvbiBjb21tYW5kcycpO1xuICBsb2dpbihwcm9ncmFtKTsgLy8gTG9naW4gYW5kIG9idGFpbiBQTEFURk9STV9UT0tFTiAoYWxzbyBzdXBwb3J0cyAtLXJlZnJlc2gpXG5cbiAgLy8gUXVlcnkgY29tbWFuZHNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgcXVlcnkgY29tbWFuZHMnKTtcbiAgZ2V0UGx1Z2luKHByb2dyYW0pOyAvLyBTaW5nbGUgcGx1Z2luIGJ5IElEXG4gIGxpc3RQbHVnaW5zKHByb2dyYW0pOyAvLyBNdWx0aXBsZSBwbHVnaW5zIHdpdGggZmlsdGVyc1xuICBnZXRQaXBlbGluZShwcm9ncmFtKTsgLy8gU2luZ2xlIHBpcGVsaW5lIGJ5IElEXG4gIGxpc3RQaXBlbGluZXMocHJvZ3JhbSk7IC8vIE11bHRpcGxlIHBpcGVsaW5lcyB3aXRoIGZpbHRlcnNcblxuICAvLyBDcmVhdGUvVXBsb2FkIGNvbW1hbmRzXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNyZWF0ZS91cGxvYWQgY29tbWFuZHMnKTtcbiAgY3JlYXRlUGlwZWxpbmUocHJvZ3JhbSk7IC8vIENyZWF0ZSBwaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHVwbG9hZFBsdWdpbihwcm9ncmFtKTsgLy8gVXBsb2FkIGFuZCBkZXBsb3kgcGx1Z2luXG5cbiAgLy8gU3RhdHVzIGNvbW1hbmRcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgc3RhdHVzIGNvbW1hbmQnKTtcbiAgc3RhdHVzKHByb2dyYW0pOyAvLyBTaG93IGVudmlyb25tZW50IGFuZCBjb25uZWN0aXZpdHkgc3RhdHVzXG5cbiAgLy8gRGVwbG95bWVudCBjb21tYW5kc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBkZXBsb3ltZW50IGNvbW1hbmRzJyk7XG4gIHN0b3JlVG9rZW4ocHJvZ3JhbSk7IC8vIEdlbmVyYXRlIEpXVCB0b2tlbiBhbmQgc3RvcmUgaW4gU2VjcmV0cyBNYW5hZ2VyXG4gIHNldHVwRXZlbnRzKHByb2dyYW0pOyAvLyBEZXBsb3kgRXZlbnRCcmlkZ2UgZXZlbnQgaW5nZXN0aW9uIGluZnJhc3RydWN0dXJlXG4gIGJvb3RzdHJhcChwcm9ncmFtKTsgLy8gQm9vdHN0cmFwIENESyB0b29sa2l0IHN0YWNrXG4gIGRlcGxveShwcm9ncmFtKTsgLy8gRGVwbG95IHBpcGVsaW5lIHdpdGggQ0RLICgtLWFwcCBwcmludHMgYm9pbGVycGxhdGUgcGF0aClcbiAgc3ludGgocHJvZ3JhbSk7IC8vIFJ1biBDREsgc3ludGhlc2lzXG5cbiAgLy8gU2hlbGwgY29tcGxldGlvbnNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgY29tcGxldGlvbnMgY29tbWFuZCcpO1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2NvbXBsZXRpb25zJylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIHNoZWxsIGNvbXBsZXRpb25zIChiYXNoLCB6c2gsIGZpc2gpJylcbiAgICAuYXJndW1lbnQoJzxzaGVsbD4nLCAnU2hlbGwgdHlwZTogYmFzaCwgenNoLCBvciBmaXNoJylcbiAgICAuYWN0aW9uKChzaGVsbDogc3RyaW5nKSA9PiB7XG4gICAgICBzd2l0Y2ggKHNoZWxsKSB7XG4gICAgICAgIGNhc2UgJ2Jhc2gnOlxuICAgICAgICAgIGNvbnNvbGUubG9nKGAjIHBpcGVsaW5lLW1hbmFnZXIgYmFzaCBjb21wbGV0aW9uc1xuX3BpcGVsaW5lX21hbmFnZXJfY29tcGxldGlvbnMoKSB7XG4gIGxvY2FsIGN1cj1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gIGxvY2FsIGNvbW1hbmRzPVwibG9naW4gZGVwbG95IHN5bnRoIHVwbG9hZC1wbHVnaW4gY3JlYXRlLXBpcGVsaW5lIHN0YXR1cyB2ZXJzaW9uIGJvb3RzdHJhcCBzZXR1cC1ldmVudHMgc3RvcmUtdG9rZW4gY29tcGxldGlvbnNcIlxuICBDT01QUkVQTFk9KCQoY29tcGdlbiAtVyBcIlxcJHtjb21tYW5kc31cIiAtLSBcIlxcJHtjdXJ9XCIpKVxufVxuY29tcGxldGUgLUYgX3BpcGVsaW5lX21hbmFnZXJfY29tcGxldGlvbnMgcGlwZWxpbmUtbWFuYWdlcmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd6c2gnOlxuICAgICAgICAgIGNvbnNvbGUubG9nKGAjIHBpcGVsaW5lLW1hbmFnZXIgenNoIGNvbXBsZXRpb25zXG5fcGlwZWxpbmVfbWFuYWdlcigpIHtcbiAgbG9jYWwgY29tbWFuZHM9KGxvZ2luIGRlcGxveSBzeW50aCB1cGxvYWQtcGx1Z2luIGNyZWF0ZS1waXBlbGluZSBzdGF0dXMgdmVyc2lvbiBib290c3RyYXAgc2V0dXAtZXZlbnRzIHN0b3JlLXRva2VuIGNvbXBsZXRpb25zKVxuICBfZGVzY3JpYmUgJ2NvbW1hbmQnIGNvbW1hbmRzXG59XG5jb21wZGVmIF9waXBlbGluZV9tYW5hZ2VyIHBpcGVsaW5lLW1hbmFnZXJgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmlzaCc6XG4gICAgICAgICAgY29uc29sZS5sb2coYCMgcGlwZWxpbmUtbWFuYWdlciBmaXNoIGNvbXBsZXRpb25zXG5jb21wbGV0ZSAtYyBwaXBlbGluZS1tYW5hZ2VyIC1uICdfX2Zpc2hfdXNlX3N1YmNvbW1hbmQnIC1hICdsb2dpbiBkZXBsb3kgc3ludGggdXBsb2FkLXBsdWdpbiBjcmVhdGUtcGlwZWxpbmUgc3RhdHVzIHZlcnNpb24gYm9vdHN0cmFwIHNldHVwLWV2ZW50cyBzdG9yZS10b2tlbiBjb21wbGV0aW9ucydgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIHNoZWxsOiAke3NoZWxsfS4gVXNlIGJhc2gsIHpzaCwgb3IgZmlzaC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcHJpbnREZWJ1ZygnQWxsIGNvbW1hbmRzIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG59XG5cbi8qKlxuICogSGFuZGxlIHByb2dyYW0gZXJyb3JzXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXJyb3JIYW5kbGVycygpOiB2b2lkIHtcbiAgLy8gSGFuZGxlIHVuY2F1Z2h0IGV4Y2VwdGlvbnNcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludEVycm9yKCdVbmNhdWdodCBleGNlcHRpb24nLCB7XG4gICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgfSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd1bmNhdWdodEV4Y2VwdGlvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICAvLyBIYW5kbGUgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uc1xuICBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uOiB1bmtub3duKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludEVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB7XG4gICAgICByZWFzb246IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVhc29uKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGVycm9yID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlYXNvbikpO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgIGRlYnVnOiBpc0RlYnVnTW9kZShwcm9ncmFtLm9wdHMoKSksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB0eXBlOiAndW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBTSUdJTlQgKEN0cmwrQylcbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50V2FybmluZygnUHJvY2VzcyBpbnRlcnJ1cHRlZCBieSB1c2VyIChTSUdJTlQpJyk7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJvY2Vzcy5leGl0KDEzMCk7IC8vIFN0YW5kYXJkIGV4aXQgY29kZSBmb3IgU0lHSU5UXG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBTSUdURVJNXG4gIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRXYXJuaW5nKCdQcm9jZXNzIHRlcm1pbmF0ZWQgKFNJR1RFUk0pJyk7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJvY2Vzcy5leGl0KDE0Myk7IC8vIFN0YW5kYXJkIGV4aXQgY29kZSBmb3IgU0lHVEVSTVxuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIENMSSB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENMSSBpbml0aWFsaXphdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ2xpKG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgc2hvd0Jhbm5lciA9IHRydWUsXG4gICAgbWluaW1hbEJhbm5lciA9IGZhbHNlLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgdmVyYm9zZSA9IGZhbHNlLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgbm9Db2xvciA9IGZhbHNlLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBIYW5kbGUgY29sb3Igb3V0cHV0XG4gIGlmIChub0NvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPSAnMSc7XG4gIH1cblxuICAvLyBEaXNwbGF5IGJhbm5lclxuICBpZiAoc2hvd0Jhbm5lciAmJiAhcXVpZXQpIHtcbiAgICBpZiAobWluaW1hbEJhbm5lcikge1xuICAgICAgbWluaUJhbm5lcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYW5uZXIoe1xuICAgICAgICBtaW5pbWFsOiBmYWxzZSxcbiAgICAgICAgc2hvd0Rlc2NyaXB0aW9uOiB0cnVlLFxuICAgICAgICBzaG93VGltZXN0YW1wOiBkZWJ1ZyB8fCB2ZXJib3NlLFxuICAgICAgICBzaG93RXhlY3V0aW9uSWQ6IGRlYnVnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzcGxheSBzdGFydHVwIGluZm9cbiAgZGlzcGxheVN0YXJ0dXBJbmZvKHsgZGVidWcsIHZlcmJvc2UsIHF1aWV0IH0pO1xuXG4gIC8vIENoZWNrIGVudmlyb25tZW50XG4gIGlmICghcXVpZXQpIHtcbiAgICBjaGVja0Vudmlyb25tZW50KCk7XG4gIH1cblxuICAvLyBTZXR1cCBlcnJvciBoYW5kbGVyc1xuICBzZXR1cEVycm9ySGFuZGxlcnMoKTtcblxuICAvLyBSZWdpc3RlciBjb21tYW5kc1xuICB0cnkge1xuICAgIHJlZ2lzdGVyQ29tbWFuZHMoKTtcbiAgICBwcmludERlYnVnKCdDTEkgaW5pdGlhbGl6YXRpb24gY29tcGxldGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEVycm9yKCdDTEkgaW5pdGlhbGl6YXRpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OLCB7XG4gICAgICBkZWJ1ZzogZGVidWcgfHwgaXNEZWJ1Z01vZGUoKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0YWdlOiAnaW5pdGlhbGl6YXRpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuXG4gICAgLy8gU2hvdyBoZWxwIGlmIG5vIGNvbW1hbmQgcHJvdmlkZWRcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJpbnRJbmZvKCdObyBjb21tYW5kIHNwZWNpZmllZCAtIGRpc3BsYXlpbmcgaGVscCcpO1xuICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICBwcm9ncmFtLm91dHB1dEhlbHAoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjb21tYW5kIGV4aXN0c1xuICAgIGNvbnN0IGNvbW1hbmQgPSBhcmdzWzBdO1xuICAgIGlmIChjb21tYW5kICYmICFjb21tYW5kLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgY29uc3QgY29tbWFuZEV4aXN0cyA9IHByb2dyYW0uY29tbWFuZHMuc29tZShjbWQgPT4gY21kLm5hbWUoKSA9PT0gY29tbWFuZCk7XG5cbiAgICAgIGlmICghY29tbWFuZEV4aXN0cykge1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJpbnRFcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgICBwcmludEluZm8oJ0F2YWlsYWJsZSBjb21tYW5kczonKTtcbiAgICAgICAgcHJvZ3JhbS5jb21tYW5kcy5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAg4oCiICR7Y21kLm5hbWUoKX0gLSAke2NtZC5kZXNjcmlwdGlvbigpfWApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmludERlYnVnKCdDb21tYW5kIGxpbmUgYXJndW1lbnRzIHBhcnNlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0YWdlOiAnYXJndW1lbnQtcGFyc2luZycsXG4gICAgICAgIGFyZ3Y6IHByb2Nlc3MuYXJndixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWluIENMSSBlbnRyeSBwb2ludFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU3RhbmRhcmQgaW5pdGlhbGl6YXRpb25cbiAqIG1haW4oKTtcbiAqXG4gKiAvLyBNaW5pbWFsIG1vZGVcbiAqIG1haW4oeyBtaW5pbWFsQmFubmVyOiB0cnVlLCBxdWlldDogdHJ1ZSB9KTtcbiAqXG4gKiAvLyBEZWJ1ZyBtb2RlXG4gKiBtYWluKHsgZGVidWc6IHRydWUsIHZlcmJvc2U6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW4ob3B0aW9uczogQ2xpT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIHRyeSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBDTElcbiAgICBpbml0aWFsaXplQ2xpKG9wdGlvbnMpO1xuXG4gICAgLy8gUGFyc2UgYXJndW1lbnRzIGFuZCBleGVjdXRlIGNvbW1hbmRcbiAgICBwYXJzZUFyZ3VtZW50cygpO1xuXG4gICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgY29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgcHJpbnREZWJ1ZygnQ0xJIGV4ZWN1dGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gRmluYWwgY2F0Y2gtYWxsIGVycm9yIGhhbmRsZXJcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ0ZhdGFsIENMSSBlcnJvcicsIHtcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKG9wdGlvbnMpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdtYWluJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW4gQ0xJIGlmIGV4ZWN1dGVkIGRpcmVjdGx5XG4gKi9cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICAvLyBQYXJzZSBDTEkgb3B0aW9ucyBmcm9tIGVudmlyb25tZW50IG9yIGNvbW1hbmQgbGluZVxuICBjb25zdCBvcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgIGRlYnVnOiBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnLFxuICAgIHF1aWV0OiBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tcXVpZXQnKSxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tdmVyYm9zZScpLFxuICAgIG5vQ29sb3I6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1uby1jb2xvcicpIHx8IHByb2Nlc3MuZW52Lk5PX0NPTE9SID09PSAnMScsXG4gIH07XG5cbiAgbWFpbihvcHRpb25zKTtcbn0iXX0=
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `bootstrap` command with the CLI program.
4
+ *
5
+ * Provisions the CDK toolkit stack in the target AWS account/region
6
+ * so that CDK deployments can proceed.
7
+ *
8
+ * @param program - The root Commander program instance to attach the command to.
9
+ */
10
+ export declare function bootstrap(program: Command): void;
11
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+FhD"}