@codedrifters/configulator 0.0.318 → 0.0.319

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.
package/lib/index.mjs CHANGED
@@ -30945,8 +30945,640 @@ var AstroOutput = {
30945
30945
  // src/aws/aws-deployment-config.ts
30946
30946
  var import_utils9 = __toESM(require_lib());
30947
30947
  import { join, relative as relative3 } from "path";
30948
+ import { Component as Component12 } from "projen";
30949
+
30950
+ // src/aws/cdk-cli.ts
30948
30951
  import { Component as Component11 } from "projen";
30949
- var AwsDeploymentConfig = class _AwsDeploymentConfig extends Component11 {
30952
+
30953
+ // src/aws/cdk-cli-defaults.ts
30954
+ var CDK_DEPLOY_DEFAULTS_BY_STAGE = {
30955
+ dev: {
30956
+ rollback: false,
30957
+ requireApproval: "never",
30958
+ progress: "events"
30959
+ },
30960
+ stage: {
30961
+ requireApproval: "never",
30962
+ progress: "events"
30963
+ },
30964
+ prod: {
30965
+ requireApproval: "never",
30966
+ progress: "events",
30967
+ method: "change-set"
30968
+ }
30969
+ };
30970
+ var CDK_SYNTH_DEFAULTS_BY_STAGE = {
30971
+ dev: { quiet: true },
30972
+ stage: { quiet: true },
30973
+ prod: { quiet: true }
30974
+ };
30975
+ var CDK_WATCH_DEFAULTS_BY_STAGE = {
30976
+ dev: { progress: "events" },
30977
+ stage: { progress: "events" },
30978
+ prod: { progress: "events" }
30979
+ };
30980
+ var CDK_DESTROY_DEFAULTS_BY_STAGE = {
30981
+ dev: { force: true },
30982
+ stage: {},
30983
+ prod: {}
30984
+ };
30985
+ var CDK_DIFF_DEFAULTS_BY_STAGE = {
30986
+ dev: {},
30987
+ stage: {},
30988
+ prod: {}
30989
+ };
30990
+ var CDK_BOOTSTRAP_DEFAULTS_BY_STAGE = {
30991
+ dev: {},
30992
+ stage: {},
30993
+ prod: { terminationProtection: true }
30994
+ };
30995
+
30996
+ // src/aws/cdk-cli-merge.ts
30997
+ var isPlainObject = (value) => {
30998
+ return typeof value === "object" && value !== null && !Array.isArray(value);
30999
+ };
31000
+ var dedupePreservingOrder = (items) => {
31001
+ const seen = /* @__PURE__ */ new Set();
31002
+ const out = [];
31003
+ for (const item of items) {
31004
+ if (!seen.has(item)) {
31005
+ seen.add(item);
31006
+ out.push(item);
31007
+ }
31008
+ }
31009
+ return out;
31010
+ };
31011
+ var mergeCdkOptions = (...layers) => {
31012
+ const accumulator = {};
31013
+ for (const layer of layers) {
31014
+ if (layer === void 0) {
31015
+ continue;
31016
+ }
31017
+ for (const [key, incoming] of Object.entries(layer)) {
31018
+ if (incoming === void 0) {
31019
+ continue;
31020
+ }
31021
+ const existing = accumulator[key];
31022
+ if (Array.isArray(incoming)) {
31023
+ const previous = Array.isArray(existing) ? existing : [];
31024
+ accumulator[key] = dedupePreservingOrder([...previous, ...incoming]);
31025
+ continue;
31026
+ }
31027
+ if (isPlainObject(incoming)) {
31028
+ const previous = isPlainObject(existing) ? existing : {};
31029
+ accumulator[key] = { ...previous, ...incoming };
31030
+ continue;
31031
+ }
31032
+ accumulator[key] = incoming;
31033
+ }
31034
+ }
31035
+ return accumulator;
31036
+ };
31037
+
31038
+ // src/aws/cdk-cli.ts
31039
+ var CdkCli = class _CdkCli extends Component11 {
31040
+ /**
31041
+ * Find the {@link CdkCli} component already attached to the project, if any.
31042
+ */
31043
+ static of(project) {
31044
+ const isDefined = (c) => c instanceof _CdkCli;
31045
+ return project.components.find(isDefined);
31046
+ }
31047
+ constructor(project, options = {}) {
31048
+ super(project);
31049
+ this.deployDefaults = options.deployDefaults ?? {};
31050
+ this.synthDefaults = options.synthDefaults ?? {};
31051
+ this.watchDefaults = options.watchDefaults ?? {};
31052
+ this.destroyDefaults = options.destroyDefaults ?? {};
31053
+ this.diffDefaults = options.diffDefaults ?? {};
31054
+ this.bootstrapDefaults = options.bootstrapDefaults ?? {};
31055
+ this.accountOverrides = options.accountOverrides ?? {};
31056
+ }
31057
+ /**
31058
+ * Resolve the `cdk deploy` options to use against a given target.
31059
+ *
31060
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31061
+ * → per-stage consumer override → per-account override → per-target
31062
+ * override. The call-site explicit layer is applied by the caller after
31063
+ * this method returns. See {@link CdkCli} for the full chain.
31064
+ */
31065
+ deployOptionsFor(target) {
31066
+ const stage = target.awsStageType;
31067
+ return mergeCdkOptions(
31068
+ CDK_DEPLOY_DEFAULTS_BY_STAGE[stage],
31069
+ this.deployDefaults[stage],
31070
+ this.accountOverrides[target.account]?.deploy,
31071
+ target.cdkOptions?.deploy
31072
+ );
31073
+ }
31074
+ /**
31075
+ * Resolve the `cdk synth` options to use against a given target.
31076
+ *
31077
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31078
+ * → per-stage consumer override → per-account override → per-target
31079
+ * override. See {@link CdkCli} for the full chain.
31080
+ */
31081
+ synthOptionsFor(target) {
31082
+ const stage = target.awsStageType;
31083
+ return mergeCdkOptions(
31084
+ CDK_SYNTH_DEFAULTS_BY_STAGE[stage],
31085
+ this.synthDefaults[stage],
31086
+ this.accountOverrides[target.account]?.synth,
31087
+ target.cdkOptions?.synth
31088
+ );
31089
+ }
31090
+ /**
31091
+ * Resolve the `cdk watch` options to use against a given target.
31092
+ *
31093
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31094
+ * → per-stage consumer override → per-account override → per-target
31095
+ * override. See {@link CdkCli} for the full chain.
31096
+ */
31097
+ watchOptionsFor(target) {
31098
+ const stage = target.awsStageType;
31099
+ return mergeCdkOptions(
31100
+ CDK_WATCH_DEFAULTS_BY_STAGE[stage],
31101
+ this.watchDefaults[stage],
31102
+ this.accountOverrides[target.account]?.watch,
31103
+ target.cdkOptions?.watch
31104
+ );
31105
+ }
31106
+ /**
31107
+ * Resolve the `cdk destroy` options to use against a given target.
31108
+ *
31109
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31110
+ * → per-stage consumer override → per-account override → per-target
31111
+ * override. See {@link CdkCli} for the full chain.
31112
+ */
31113
+ destroyOptionsFor(target) {
31114
+ const stage = target.awsStageType;
31115
+ return mergeCdkOptions(
31116
+ CDK_DESTROY_DEFAULTS_BY_STAGE[stage],
31117
+ this.destroyDefaults[stage],
31118
+ this.accountOverrides[target.account]?.destroy,
31119
+ target.cdkOptions?.destroy
31120
+ );
31121
+ }
31122
+ /**
31123
+ * Resolve the `cdk diff` options to use against a given target.
31124
+ *
31125
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31126
+ * → per-stage consumer override → per-account override → per-target
31127
+ * override. See {@link CdkCli} for the full chain.
31128
+ */
31129
+ diffOptionsFor(target) {
31130
+ const stage = target.awsStageType;
31131
+ return mergeCdkOptions(
31132
+ CDK_DIFF_DEFAULTS_BY_STAGE[stage],
31133
+ this.diffDefaults[stage],
31134
+ this.accountOverrides[target.account]?.diff,
31135
+ target.cdkOptions?.diff
31136
+ );
31137
+ }
31138
+ /**
31139
+ * Resolve the `cdk bootstrap` options to use against a given target.
31140
+ *
31141
+ * Folds the precedence chain via {@link mergeCdkOptions}: per-stage built-in
31142
+ * → per-stage consumer override → per-account override → per-target
31143
+ * override. See {@link CdkCli} for the full chain.
31144
+ */
31145
+ bootstrapOptionsFor(target) {
31146
+ const stage = target.awsStageType;
31147
+ return mergeCdkOptions(
31148
+ CDK_BOOTSTRAP_DEFAULTS_BY_STAGE[stage],
31149
+ this.bootstrapDefaults[stage],
31150
+ this.accountOverrides[target.account]?.bootstrap,
31151
+ target.cdkOptions?.bootstrap
31152
+ );
31153
+ }
31154
+ };
31155
+
31156
+ // src/aws/cdk-cli-renderer.ts
31157
+ var quote = (value) => {
31158
+ if (value === "") {
31159
+ return '""';
31160
+ }
31161
+ if (/^[A-Za-z0-9_\-./:=@%+,]+$/.test(value)) {
31162
+ return value;
31163
+ }
31164
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
31165
+ };
31166
+ var renderTriBool = (flag, value) => {
31167
+ if (value === void 0) {
31168
+ return void 0;
31169
+ }
31170
+ return value ? `--${flag}` : `--no-${flag}`;
31171
+ };
31172
+ var renderValue = (flag, value) => {
31173
+ if (value === void 0) {
31174
+ return void 0;
31175
+ }
31176
+ return `--${flag}=${quote(String(value))}`;
31177
+ };
31178
+ var renderArray = (flag, values) => {
31179
+ if (!values || values.length === 0) {
31180
+ return [];
31181
+ }
31182
+ return values.map((value) => `--${flag}=${quote(value)}`);
31183
+ };
31184
+ var renderRecord = (flag, values) => {
31185
+ if (!values) {
31186
+ return [];
31187
+ }
31188
+ const keys = Object.keys(values);
31189
+ if (keys.length === 0) {
31190
+ return [];
31191
+ }
31192
+ return keys.map((key) => `--${flag}=${quote(`${key}=${values[key]}`)}`);
31193
+ };
31194
+ var renderVerbose = (value) => {
31195
+ if (value === void 0 || value <= 0) {
31196
+ return [];
31197
+ }
31198
+ return Array.from({ length: value }, () => "-v");
31199
+ };
31200
+ var renderStackPatterns = (values) => {
31201
+ if (!values || values.length === 0) {
31202
+ return [];
31203
+ }
31204
+ return values.map((pattern) => `"${pattern}"`);
31205
+ };
31206
+ var renderGlobalTokens = (opts) => [
31207
+ renderValue("app", opts.app),
31208
+ renderTriBool("asset-metadata", opts.assetMetadata),
31209
+ renderValue("build", opts.build),
31210
+ renderValue("ca-bundle-path", opts.caBundlePath),
31211
+ renderTriBool("ci", opts.ci),
31212
+ renderTriBool("color", opts.color),
31213
+ ...renderRecord("context", opts.context),
31214
+ renderTriBool("debug", opts.debug),
31215
+ renderTriBool("ec2creds", opts.ec2creds),
31216
+ renderTriBool("ignore-errors", opts.ignoreErrors),
31217
+ renderTriBool("json", opts.json),
31218
+ renderTriBool("lookups", opts.lookups),
31219
+ renderTriBool("no-color", opts.noColor),
31220
+ renderTriBool("notices", opts.notices),
31221
+ renderValue("output", opts.output),
31222
+ renderTriBool("path-metadata", opts.pathMetadata),
31223
+ ...renderArray("plugin", opts.plugin),
31224
+ renderValue("profile", opts.profile),
31225
+ renderValue("proxy", opts.proxy),
31226
+ renderValue("role-arn", opts.roleArn),
31227
+ renderTriBool("staging", opts.staging),
31228
+ renderTriBool("strict", opts.strict),
31229
+ renderValue("telemetry-file", opts.telemetryFile),
31230
+ renderTriBool("trace", opts.trace),
31231
+ ...renderArray("unstable", opts.unstable),
31232
+ renderTriBool("version-reporting", opts.versionReporting),
31233
+ renderTriBool("yes", opts.yes)
31234
+ ];
31235
+ var renderTrailingTokens = (opts) => [
31236
+ ...renderVerbose(opts.verbose),
31237
+ ...renderStackPatterns(opts.stackPatterns)
31238
+ ];
31239
+ var compose = (command, tokens) => {
31240
+ const parts = tokens.filter(
31241
+ (token) => token !== void 0 && token !== ""
31242
+ );
31243
+ return [command, ...parts].join(" ");
31244
+ };
31245
+ var renderCdkDeploy = (opts) => {
31246
+ const tokens = [
31247
+ ...renderGlobalTokens(opts),
31248
+ // Deploy-specific flags
31249
+ renderTriBool("all", opts.all),
31250
+ renderTriBool("asset-parallelism", opts.assetParallelism),
31251
+ renderTriBool("asset-prebuild", opts.assetPrebuild),
31252
+ ...renderArray("build-exclude", opts.buildExclude),
31253
+ renderValue("change-set-name", opts.changeSetName),
31254
+ renderValue("concurrency", opts.concurrency),
31255
+ renderTriBool("exclusively", opts.exclusively),
31256
+ renderTriBool("execute", opts.execute),
31257
+ renderTriBool("force", opts.force),
31258
+ renderTriBool("hotswap", opts.hotswap),
31259
+ renderTriBool("hotswap-fallback", opts.hotswapFallback),
31260
+ renderTriBool("ignore-no-stacks", opts.ignoreNoStacks),
31261
+ renderTriBool("import-existing-resources", opts.importExistingResources),
31262
+ renderTriBool("logs", opts.logs),
31263
+ renderValue("method", opts.method),
31264
+ ...renderArray("notification-arns", opts.notificationArns),
31265
+ renderValue("outputs-file", opts.outputsFile),
31266
+ ...renderArray("parameters", opts.parameters),
31267
+ renderTriBool("previous-parameters", opts.previousParameters),
31268
+ renderValue("progress", opts.progress),
31269
+ renderValue("require-approval", opts.requireApproval),
31270
+ renderTriBool("revert-drift", opts.revertDrift),
31271
+ renderTriBool("rollback", opts.rollback),
31272
+ ...renderRecord("tags", opts.tags),
31273
+ renderValue("toolkit-stack-name", opts.toolkitStackName),
31274
+ renderTriBool("watch", opts.watch),
31275
+ ...renderTrailingTokens(opts)
31276
+ ];
31277
+ return compose("deploy", tokens);
31278
+ };
31279
+ var renderCdkSynth = (opts) => {
31280
+ const tokens = [
31281
+ ...renderGlobalTokens(opts),
31282
+ // Synth-specific flags
31283
+ renderTriBool("exclusively", opts.exclusively),
31284
+ renderTriBool("quiet", opts.quiet),
31285
+ renderTriBool("validation", opts.validation),
31286
+ ...renderTrailingTokens(opts)
31287
+ ];
31288
+ return compose("synth", tokens);
31289
+ };
31290
+ var renderCdkWatch = (opts) => {
31291
+ const tokens = [
31292
+ ...renderGlobalTokens(opts),
31293
+ // Watch-specific flags
31294
+ ...renderArray("build-exclude", opts.buildExclude),
31295
+ renderValue("change-set-name", opts.changeSetName),
31296
+ renderValue("concurrency", opts.concurrency),
31297
+ renderTriBool("exclusively", opts.exclusively),
31298
+ renderTriBool("force", opts.force),
31299
+ renderTriBool("hotswap", opts.hotswap),
31300
+ renderTriBool("hotswap-fallback", opts.hotswapFallback),
31301
+ renderTriBool("logs", opts.logs),
31302
+ renderValue("progress", opts.progress),
31303
+ renderTriBool("rollback", opts.rollback),
31304
+ renderValue("toolkit-stack-name", opts.toolkitStackName),
31305
+ ...renderTrailingTokens(opts)
31306
+ ];
31307
+ return compose("watch", tokens);
31308
+ };
31309
+ var renderCdkDestroy = (opts) => {
31310
+ const tokens = [
31311
+ ...renderGlobalTokens(opts),
31312
+ // Destroy-specific flags
31313
+ renderTriBool("all", opts.all),
31314
+ renderValue("concurrency", opts.concurrency),
31315
+ renderTriBool("exclusively", opts.exclusively),
31316
+ renderTriBool("force", opts.force),
31317
+ ...renderTrailingTokens(opts)
31318
+ ];
31319
+ return compose("destroy", tokens);
31320
+ };
31321
+ var renderCdkDiff = (opts) => {
31322
+ const tokens = [
31323
+ ...renderGlobalTokens(opts),
31324
+ // Diff-specific flags
31325
+ renderTriBool("change-set", opts.changeSet),
31326
+ renderValue("context-lines", opts.contextLines),
31327
+ renderTriBool("exclusively", opts.exclusively),
31328
+ renderTriBool("fail", opts.fail),
31329
+ renderValue("method", opts.method),
31330
+ renderTriBool("processed", opts.processed),
31331
+ renderTriBool("quiet", opts.quiet),
31332
+ renderTriBool("security-only", opts.securityOnly),
31333
+ renderValue("template", opts.template),
31334
+ ...renderTrailingTokens(opts)
31335
+ ];
31336
+ return compose("diff", tokens);
31337
+ };
31338
+ var renderCdkBootstrap = (opts) => {
31339
+ const tokens = [
31340
+ ...renderGlobalTokens(opts),
31341
+ // Bootstrap-specific flags
31342
+ renderValue("bootstrap-bucket-name", opts.bootstrapBucketName),
31343
+ renderTriBool("bootstrap-customer-key", opts.bootstrapCustomerKey),
31344
+ renderValue("bootstrap-kms-key-id", opts.bootstrapKmsKeyId),
31345
+ ...renderArray(
31346
+ "cloudformation-execution-policies",
31347
+ opts.cloudformationExecutionPolicies
31348
+ ),
31349
+ renderValue("custom-permissions-boundary", opts.customPermissionsBoundary),
31350
+ renderTriBool(
31351
+ "example-permissions-boundary",
31352
+ opts.examplePermissionsBoundary
31353
+ ),
31354
+ renderTriBool("execute", opts.execute),
31355
+ renderTriBool("force", opts.force),
31356
+ renderTriBool("previous-parameters", opts.previousParameters),
31357
+ renderTriBool(
31358
+ "public-access-block-configuration",
31359
+ opts.publicAccessBlockConfiguration
31360
+ ),
31361
+ renderValue("qualifier", opts.qualifier),
31362
+ renderTriBool("show-template", opts.showTemplate),
31363
+ ...renderRecord("tags", opts.tags),
31364
+ renderValue("template", opts.template),
31365
+ renderTriBool("termination-protection", opts.terminationProtection),
31366
+ renderValue("toolkit-stack-name", opts.toolkitStackName),
31367
+ ...renderArray("trust", opts.trust),
31368
+ ...renderArray("trust-for-lookup", opts.trustForLookup),
31369
+ ...renderTrailingTokens(opts)
31370
+ ];
31371
+ return compose("bootstrap", tokens);
31372
+ };
31373
+ var renderCdkList = (opts) => {
31374
+ const tokens = [
31375
+ ...renderGlobalTokens(opts),
31376
+ // List-specific flags
31377
+ renderTriBool("long", opts.long),
31378
+ renderTriBool("show-dependencies", opts.showDependencies),
31379
+ ...renderTrailingTokens(opts)
31380
+ ];
31381
+ return compose("list", tokens);
31382
+ };
31383
+ var renderLogicalIds = (values) => {
31384
+ if (!values || values.length === 0) {
31385
+ return [];
31386
+ }
31387
+ return values.map((id) => `"${id}"`);
31388
+ };
31389
+ var renderCdkRollback = (opts) => {
31390
+ const tokens = [
31391
+ ...renderGlobalTokens(opts),
31392
+ // Rollback-specific flags
31393
+ renderTriBool("all", opts.all),
31394
+ renderTriBool("force", opts.force),
31395
+ ...renderArray("orphan", opts.orphan),
31396
+ renderValue("toolkit-stack-name", opts.toolkitStackName),
31397
+ renderTriBool("validate-bootstrap-version", opts.validateBootstrapVersion),
31398
+ ...renderTrailingTokens(opts)
31399
+ ];
31400
+ return compose("rollback", tokens);
31401
+ };
31402
+ var renderCdkImport = (opts) => {
31403
+ const tokens = [
31404
+ ...renderGlobalTokens(opts),
31405
+ // Import-specific flags
31406
+ renderValue("change-set-name", opts.changeSetName),
31407
+ renderTriBool("execute", opts.execute),
31408
+ renderTriBool("force", opts.force),
31409
+ renderValue("record-resource-mapping", opts.recordResourceMapping),
31410
+ renderValue("resource-mapping", opts.resourceMapping),
31411
+ renderTriBool("rollback", opts.rollback),
31412
+ renderValue("toolkit-stack-name", opts.toolkitStackName),
31413
+ ...renderTrailingTokens(opts)
31414
+ ];
31415
+ return compose("import", tokens);
31416
+ };
31417
+ var renderCdkGc = (opts) => {
31418
+ const tokens = [
31419
+ ...renderGlobalTokens(opts),
31420
+ // GC-specific flags
31421
+ renderValue("action", opts.action),
31422
+ renderValue("bootstrap-stack-name", opts.bootstrapStackName),
31423
+ renderTriBool("confirm", opts.confirm),
31424
+ renderValue("created-buffer-days", opts.createdBufferDays),
31425
+ renderValue("rollback-buffer-days", opts.rollbackBufferDays),
31426
+ renderValue("type", opts.type),
31427
+ ...renderTrailingTokens(opts)
31428
+ ];
31429
+ return compose("gc", tokens);
31430
+ };
31431
+ var renderCdkDrift = (opts) => {
31432
+ const tokens = [
31433
+ ...renderGlobalTokens(opts),
31434
+ // Drift-specific flags
31435
+ renderTriBool("fail", opts.fail),
31436
+ ...renderTrailingTokens(opts)
31437
+ ];
31438
+ return compose("drift", tokens);
31439
+ };
31440
+ var renderCdkRefactor = (opts) => {
31441
+ const tokens = [
31442
+ ...renderGlobalTokens(opts),
31443
+ // Refactor-specific flags
31444
+ ...renderArray("additional-stack-name", opts.additionalStackName),
31445
+ renderTriBool("dry-run", opts.dryRun),
31446
+ renderTriBool("force", opts.force),
31447
+ renderValue("override-file", opts.overrideFile),
31448
+ renderTriBool("revert", opts.revert),
31449
+ ...renderTrailingTokens(opts)
31450
+ ];
31451
+ return compose("refactor", tokens);
31452
+ };
31453
+ var renderCdkPublishAssets = (opts) => {
31454
+ const tokens = [
31455
+ ...renderGlobalTokens(opts),
31456
+ // Publish-assets-specific flags
31457
+ renderTriBool("all", opts.all),
31458
+ renderValue("concurrency", opts.concurrency),
31459
+ renderTriBool("exclusively", opts.exclusively),
31460
+ renderTriBool("force", opts.force),
31461
+ ...renderTrailingTokens(opts)
31462
+ ];
31463
+ return compose("publish-assets", tokens);
31464
+ };
31465
+ var renderCdkOrphan = (opts) => {
31466
+ const tokens = [
31467
+ ...renderGlobalTokens(opts),
31468
+ // Orphan has no command-specific flags; trailing tokens carry verbose
31469
+ // repetitions and stack patterns, and logical IDs render last.
31470
+ ...renderTrailingTokens(opts),
31471
+ ...renderLogicalIds(opts.logicalIds)
31472
+ ];
31473
+ return compose("orphan", tokens);
31474
+ };
31475
+ var renderPositional = (value) => {
31476
+ if (value === void 0) {
31477
+ return [];
31478
+ }
31479
+ return [`"${value}"`];
31480
+ };
31481
+ var renderCdkInit = (opts) => {
31482
+ const tokens = [
31483
+ ...renderGlobalTokens(opts),
31484
+ // Init-specific flags
31485
+ renderTriBool("generate-only", opts.generateOnly),
31486
+ renderValue("language", opts.language),
31487
+ renderTriBool("list", opts.list),
31488
+ // Positional template arg precedes the trailing tokens.
31489
+ ...renderPositional(opts.template),
31490
+ ...renderTrailingTokens(opts)
31491
+ ];
31492
+ return compose("init", tokens);
31493
+ };
31494
+ var renderCdkMigrate = (opts) => {
31495
+ const tokens = [
31496
+ ...renderGlobalTokens(opts),
31497
+ // Migrate-specific flags
31498
+ renderValue("account", opts.account),
31499
+ renderTriBool("compress", opts.compress),
31500
+ ...renderArray("filter", opts.filter),
31501
+ renderValue("from-path", opts.fromPath),
31502
+ renderTriBool("from-scan", opts.fromScan),
31503
+ renderTriBool("from-stack", opts.fromStack),
31504
+ renderValue("language", opts.language),
31505
+ renderValue("output-path", opts.outputPath),
31506
+ renderValue("region", opts.region),
31507
+ renderValue("stack-name", opts.stackName),
31508
+ ...renderTrailingTokens(opts)
31509
+ ];
31510
+ return compose("migrate", tokens);
31511
+ };
31512
+ var renderCdkContext = (opts) => {
31513
+ const tokens = [
31514
+ ...renderGlobalTokens(opts),
31515
+ // Context-specific flags
31516
+ renderTriBool("clear", opts.clear),
31517
+ renderTriBool("force", opts.force),
31518
+ renderValue("reset", opts.reset),
31519
+ ...renderTrailingTokens(opts)
31520
+ ];
31521
+ return compose("context", tokens);
31522
+ };
31523
+ var renderCdkMetadata = (opts) => {
31524
+ const tokens = [
31525
+ ...renderGlobalTokens(opts),
31526
+ // Positional stack arg precedes the trailing tokens.
31527
+ ...renderPositional(opts.stack),
31528
+ ...renderTrailingTokens(opts)
31529
+ ];
31530
+ return compose("metadata", tokens);
31531
+ };
31532
+ var renderCdkFlags = (opts) => {
31533
+ const tokens = [
31534
+ ...renderGlobalTokens(opts),
31535
+ // Flags-specific flags
31536
+ renderTriBool("all", opts.all),
31537
+ renderValue("concurrency", opts.concurrency),
31538
+ renderTriBool("default", opts.default),
31539
+ renderTriBool("interactive", opts.interactive),
31540
+ renderTriBool("recommended", opts.recommended),
31541
+ renderTriBool("safe", opts.safe),
31542
+ renderValue("set", opts.set),
31543
+ renderTriBool("unconfigured", opts.unconfigured),
31544
+ renderValue("value", opts.value),
31545
+ ...renderTrailingTokens(opts)
31546
+ ];
31547
+ return compose("flags", tokens);
31548
+ };
31549
+ var renderCdkAcknowledge = (opts) => {
31550
+ const tokens = [
31551
+ ...renderGlobalTokens(opts),
31552
+ // Positional notice id precedes the trailing tokens.
31553
+ ...renderPositional(opts.id),
31554
+ ...renderTrailingTokens(opts)
31555
+ ];
31556
+ return compose("acknowledge", tokens);
31557
+ };
31558
+ var renderCdkNotices = (opts) => {
31559
+ const tokens = [
31560
+ ...renderGlobalTokens(opts),
31561
+ ...renderTrailingTokens(opts)
31562
+ ];
31563
+ return compose("notices", tokens);
31564
+ };
31565
+ var renderCdkDoctor = (opts) => {
31566
+ const tokens = [
31567
+ ...renderGlobalTokens(opts),
31568
+ ...renderTrailingTokens(opts)
31569
+ ];
31570
+ return compose("doctor", tokens);
31571
+ };
31572
+ var renderCdkDocs = (opts) => {
31573
+ const tokens = [
31574
+ ...renderGlobalTokens(opts),
31575
+ ...renderTrailingTokens(opts)
31576
+ ];
31577
+ return compose("docs", tokens);
31578
+ };
31579
+
31580
+ // src/aws/aws-deployment-config.ts
31581
+ var AwsDeploymentConfig = class _AwsDeploymentConfig extends Component12 {
30950
31582
  constructor(project) {
30951
31583
  super(project);
30952
31584
  /**
@@ -30963,10 +31595,15 @@ var AwsDeploymentConfig = class _AwsDeploymentConfig extends Component11 {
30963
31595
  ****************************************************************************/
30964
31596
  this.configureSynthTask = () => {
30965
31597
  this.project.tasks.tryFind("synth")?.reset(`rm -rf ${this.cdkOut}`);
30966
- this.project.tasks.tryFind("synth")?.exec(`cdk synth --output ${this.cdkOut}`, { env: this.env });
31598
+ this.project.tasks.tryFind("synth")?.exec(`cdk ${renderCdkSynth({ output: this.cdkOut })}`, {
31599
+ env: this.env
31600
+ });
30967
31601
  this.project.tasks.tryFind("synth:silent")?.reset(`rm -rf ${this.cdkOut}`);
30968
- this.project.tasks.tryFind("synth:silent")?.exec(`cdk synth -q --output ${this.cdkOut}`, { env: this.env });
31602
+ this.project.tasks.tryFind("synth:silent")?.exec(`cdk ${renderCdkSynth({ output: this.cdkOut, quiet: true })}`, {
31603
+ env: this.env
31604
+ });
30969
31605
  };
31606
+ this.cdkCli = CdkCli.of(project) || new CdkCli(project);
30970
31607
  this.env = {
30971
31608
  GIT_BRANCH_NAME: '$(echo "${GIT_BRANCH_NAME:-$(git branch --show-current)}")'
30972
31609
  };
@@ -31063,8 +31700,8 @@ var AwsDeploymentConfig = class _AwsDeploymentConfig extends Component11 {
31063
31700
 
31064
31701
  // src/aws/aws-deployment-target.ts
31065
31702
  var import_utils10 = __toESM(require_lib());
31066
- import { Component as Component12 } from "projen";
31067
- var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component12 {
31703
+ import { Component as Component13 } from "projen";
31704
+ var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component13 {
31068
31705
  constructor(project, options) {
31069
31706
  super(project);
31070
31707
  /**
@@ -31091,8 +31728,15 @@ var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component12 {
31091
31728
  const deployTask = this.project.tasks.addTask(taskName, {
31092
31729
  env: this.awsDeploymentConfig.env
31093
31730
  });
31731
+ const deployOpts = this.awsDeploymentConfig.cdkCli.deployOptionsFor(this);
31094
31732
  deployTask.exec(
31095
- `cdk deploy --lookups=false --require-approval=never --profile=${this.localDeploymentConfig?.profile} --app=${this.awsDeploymentConfig.cdkOut} "${this.localDeploymentConfig?.stackPattern}"`
31733
+ `cdk ${renderCdkDeploy({
31734
+ ...deployOpts,
31735
+ lookups: false,
31736
+ profile: this.localDeploymentConfig?.profile,
31737
+ app: this.awsDeploymentConfig.cdkOut,
31738
+ stackPatterns: this.localDeploymentConfig?.stackPattern ? [this.localDeploymentConfig.stackPattern] : void 0
31739
+ })}`
31096
31740
  );
31097
31741
  }
31098
31742
  };
@@ -31119,16 +31763,31 @@ var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component12 {
31119
31763
  if (synthSilent) {
31120
31764
  watchTask.spawn(synthSilent);
31121
31765
  }
31766
+ const deployOpts = this.awsDeploymentConfig.cdkCli.deployOptionsFor(this);
31122
31767
  watchTask.exec(
31123
- `cdk deploy --lookups=false --require-approval=never --profile=${this.localDeploymentConfig?.profile} --app=${this.awsDeploymentConfig.cdkOut} "${this.localDeploymentConfig?.stackPattern}"`
31768
+ `cdk ${renderCdkDeploy({
31769
+ ...deployOpts,
31770
+ lookups: false,
31771
+ profile: this.localDeploymentConfig?.profile,
31772
+ app: this.awsDeploymentConfig.cdkOut,
31773
+ stackPatterns: this.localDeploymentConfig?.stackPattern ? [this.localDeploymentConfig.stackPattern] : void 0
31774
+ })}`
31124
31775
  );
31776
+ const watchOpts = this.awsDeploymentConfig.cdkCli.watchOptionsFor(this);
31125
31777
  watchTask.exec(
31126
- `cdk watch --lookups=false --require-approval=never --hotswap --profile=${this.localDeploymentConfig?.profile} "${this.localDeploymentConfig?.stackPattern}"`
31778
+ `cdk ${renderCdkWatch({
31779
+ ...watchOpts,
31780
+ lookups: false,
31781
+ hotswap: true,
31782
+ profile: this.localDeploymentConfig?.profile,
31783
+ stackPatterns: this.localDeploymentConfig?.stackPattern ? [this.localDeploymentConfig.stackPattern] : void 0
31784
+ })}`
31127
31785
  );
31128
31786
  }
31129
31787
  };
31130
31788
  this.account = options.account;
31131
31789
  this.region = options.region;
31790
+ this.cdkOptions = options.cdkOptions;
31132
31791
  this.awsStageType = options.awsStageType || import_utils10.AWS_STAGE_TYPE.DEV;
31133
31792
  const role = options.deploymentTargetRole ?? options.awsEnvironmentType ?? import_utils10.DEPLOYMENT_TARGET_ROLE.PRIMARY;
31134
31793
  this.deploymentTargetRole = role;
@@ -31178,6 +31837,53 @@ var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component12 {
31178
31837
  }
31179
31838
  };
31180
31839
 
31840
+ // src/aws/cdk-cli-enums.ts
31841
+ var CDK_REQUIRE_APPROVAL = {
31842
+ Never: "never",
31843
+ AnyChange: "any-change",
31844
+ Broadening: "broadening"
31845
+ };
31846
+ var CDK_DEPLOY_METHOD = {
31847
+ ChangeSet: "change-set",
31848
+ Direct: "direct",
31849
+ PrepareChangeSet: "prepare-change-set",
31850
+ ExecuteChangeSet: "execute-change-set"
31851
+ };
31852
+ var CDK_PROGRESS = {
31853
+ Bar: "bar",
31854
+ Events: "events"
31855
+ };
31856
+ var CDK_DIFF_METHOD = {
31857
+ Auto: "auto",
31858
+ ChangeSet: "change-set",
31859
+ Template: "template"
31860
+ };
31861
+ var CDK_GC_ACTION = {
31862
+ DeleteTagged: "delete-tagged",
31863
+ Full: "full",
31864
+ Print: "print",
31865
+ Tag: "tag"
31866
+ };
31867
+ var CDK_GC_TYPE = {
31868
+ All: "all",
31869
+ Ecr: "ecr",
31870
+ S3: "s3"
31871
+ };
31872
+ var CDK_INIT_TEMPLATE = {
31873
+ App: "app",
31874
+ Lib: "lib",
31875
+ SampleApp: "sample-app"
31876
+ };
31877
+ var CDK_INIT_LANGUAGE = {
31878
+ CSharp: "csharp",
31879
+ FSharp: "fsharp",
31880
+ Go: "go",
31881
+ Java: "java",
31882
+ JavaScript: "javascript",
31883
+ Python: "python",
31884
+ TypeScript: "typescript"
31885
+ };
31886
+
31181
31887
  // src/docs-sync/reference-extraction/extraction.ts
31182
31888
  import * as fs from "fs";
31183
31889
  import * as path2 from "path";
@@ -32743,12 +33449,12 @@ var VERSION_KEYS_SKIP = [
32743
33449
 
32744
33450
  // src/jsii/jsii-faker.ts
32745
33451
  import * as spec from "@jsii/spec";
32746
- import { Component as Component13, JsonFile as JsonFile5 } from "projen";
33452
+ import { Component as Component14, JsonFile as JsonFile5 } from "projen";
32747
33453
  var ProjenBaseFqn = {
32748
33454
  TYPESCRIPT_PROJECT: "projen.typescript.TypeScriptProject",
32749
33455
  TYPESCRIPT_PROJECT_OPTIONS: "projen.typescript.TypeScriptProjectOptions"
32750
33456
  };
32751
- var JsiiFaker = class _JsiiFaker extends Component13 {
33457
+ var JsiiFaker = class _JsiiFaker extends Component14 {
32752
33458
  constructor(project) {
32753
33459
  super(project);
32754
33460
  this.project = project;
@@ -33046,9 +33752,9 @@ import {
33046
33752
  import { merge } from "ts-deepmerge";
33047
33753
 
33048
33754
  // src/projects/nvmrc.ts
33049
- import { Component as Component14 } from "projen";
33755
+ import { Component as Component15 } from "projen";
33050
33756
  import { TextFile as TextFile6 } from "projen/lib/textfile";
33051
- var Nvmrc = class extends Component14 {
33757
+ var Nvmrc = class extends Component15 {
33052
33758
  constructor(project) {
33053
33759
  super(project);
33054
33760
  new TextFile6(project, ".nvmrc", {
@@ -33061,8 +33767,8 @@ var Nvmrc = class extends Component14 {
33061
33767
  };
33062
33768
 
33063
33769
  // src/tasks/reset-task.ts
33064
- import { Component as Component15 } from "projen";
33065
- var ResetTask = class _ResetTask extends Component15 {
33770
+ import { Component as Component16 } from "projen";
33771
+ var ResetTask = class _ResetTask extends Component16 {
33066
33772
  constructor(project, options = {}) {
33067
33773
  super(project);
33068
33774
  this.project = project;
@@ -33135,8 +33841,8 @@ var ResetTask = class _ResetTask extends Component15 {
33135
33841
  };
33136
33842
 
33137
33843
  // src/vscode/vscode.ts
33138
- import { Component as Component16, vscode } from "projen";
33139
- var VSCodeConfig = class extends Component16 {
33844
+ import { Component as Component17, vscode } from "projen";
33845
+ var VSCodeConfig = class extends Component17 {
33140
33846
  constructor(project) {
33141
33847
  super(project);
33142
33848
  const vsConfig = new vscode.VsCode(project);
@@ -33420,7 +34126,7 @@ function patchStepArray2(steps, pinned) {
33420
34126
  }
33421
34127
 
33422
34128
  // src/workflows/sync-labels.ts
33423
- import { Component as Component17, YamlFile as YamlFile2 } from "projen";
34129
+ import { Component as Component18, YamlFile as YamlFile2 } from "projen";
33424
34130
  import { JobPermission as JobPermission4 } from "projen/lib/github/workflows-model";
33425
34131
  var DEFAULT_STATUS_LABELS = [
33426
34132
  {
@@ -33628,7 +34334,7 @@ ${offenders}`
33628
34334
  }
33629
34335
  });
33630
34336
  }
33631
- var LabelsFile = class extends Component17 {
34337
+ var LabelsFile = class extends Component18 {
33632
34338
  constructor(project, labels) {
33633
34339
  super(project);
33634
34340
  new YamlFile2(project, LABELS_CONFIG_PATH, {
@@ -34024,11 +34730,11 @@ var MonorepoProject = class extends TypeScriptAppProject {
34024
34730
  };
34025
34731
 
34026
34732
  // src/typescript/tsdoc-config.ts
34027
- import { Component as Component18, JsonFile as JsonFile6 } from "projen";
34733
+ import { Component as Component19, JsonFile as JsonFile6 } from "projen";
34028
34734
  var STANDARD_MODIFIER_TAGS = ["@default"];
34029
34735
  var STANDARD_INLINE_TAGS = ["@code"];
34030
34736
  var ALWAYS_ON_SCOPES = ["@codedrifters"];
34031
- var TsdocConfig = class _TsdocConfig extends Component18 {
34737
+ var TsdocConfig = class _TsdocConfig extends Component19 {
34032
34738
  /**
34033
34739
  * Derive a workspace scope from a scoped package name (`@scope/name`).
34034
34740
  * Returns `undefined` when the name is unscoped.
@@ -34086,9 +34792,9 @@ var TsdocConfig = class _TsdocConfig extends Component18 {
34086
34792
 
34087
34793
  // src/typescript/typescript-config.ts
34088
34794
  import { relative as relative7 } from "path";
34089
- import { Component as Component19 } from "projen";
34795
+ import { Component as Component20 } from "projen";
34090
34796
  import { ensureRelativePathStartsWithDot } from "projen/lib/util/path";
34091
- var TypeScriptConfig = class extends Component19 {
34797
+ var TypeScriptConfig = class extends Component20 {
34092
34798
  constructor(project) {
34093
34799
  super(project);
34094
34800
  let tsPaths = {};
@@ -34480,12 +35186,12 @@ import { merge as merge4 } from "ts-deepmerge";
34480
35186
 
34481
35187
  // src/workflows/aws-deploy-workflow.ts
34482
35188
  var import_utils11 = __toESM(require_lib());
34483
- import { Component as Component20 } from "projen";
35189
+ import { Component as Component21 } from "projen";
34484
35190
  import { BuildWorkflow } from "projen/lib/build";
34485
35191
  import { GitHub as GitHub4, WorkflowSteps as WorkflowSteps2 } from "projen/lib/github";
34486
35192
  import { JobPermission as JobPermission5 } from "projen/lib/github/workflows-model";
34487
35193
  var PROD_DEPLOY_NAME = "prod-deploy";
34488
- var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component20 {
35194
+ var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component21 {
34489
35195
  constructor(project, options = {}) {
34490
35196
  super(project);
34491
35197
  this.project = project;
@@ -34588,7 +35294,11 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component20 {
34588
35294
  */
34589
35295
  {
34590
35296
  name: `Deploy ${awsStageType}/${deploymentTargetRole}/${account}/${region}`,
34591
- run: `pnpm dlx aws-cdk deploy --no-rollback --require-approval=never --app=${rootCdkOut} "${stackPattern}"`
35297
+ run: `pnpm dlx aws-cdk ${renderCdkDeploy({
35298
+ ...awsDeploymentConfig.cdkCli.deployOptionsFor(target),
35299
+ app: rootCdkOut,
35300
+ stackPatterns: stackPattern ? [stackPattern] : void 0
35301
+ })}`
34592
35302
  }
34593
35303
  ];
34594
35304
  };
@@ -34749,7 +35459,7 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component20 {
34749
35459
  };
34750
35460
 
34751
35461
  // src/workflows/aws-teardown-workflow.ts
34752
- import { Component as Component21 } from "projen";
35462
+ import { Component as Component22 } from "projen";
34753
35463
  import { GitHub as GitHub5, GithubWorkflow } from "projen/lib/github";
34754
35464
  import { JobPermission as JobPermission6 } from "projen/lib/github/workflows-model";
34755
35465
  var DEFAULT_TEARDOWN_BRANCH_PATTERNS = [
@@ -34771,7 +35481,7 @@ var resolveBranchPatterns = (explicit, targets) => {
34771
35481
  }
34772
35482
  return [...DEFAULT_TEARDOWN_BRANCH_PATTERNS];
34773
35483
  };
34774
- var AwsTeardownWorkflow = class extends Component21 {
35484
+ var AwsTeardownWorkflow = class extends Component22 {
34775
35485
  constructor(rootProject, options) {
34776
35486
  super(rootProject);
34777
35487
  this.rootProject = rootProject;
@@ -35611,8 +36321,23 @@ export {
35611
36321
  AwsTeardownWorkflow,
35612
36322
  BUILT_IN_BUNDLES,
35613
36323
  BUNDLE_OWNERSHIP,
36324
+ CDK_BOOTSTRAP_DEFAULTS_BY_STAGE,
36325
+ CDK_DEPLOY_DEFAULTS_BY_STAGE,
36326
+ CDK_DEPLOY_METHOD,
36327
+ CDK_DESTROY_DEFAULTS_BY_STAGE,
36328
+ CDK_DIFF_DEFAULTS_BY_STAGE,
36329
+ CDK_DIFF_METHOD,
36330
+ CDK_GC_ACTION,
36331
+ CDK_GC_TYPE,
36332
+ CDK_INIT_LANGUAGE,
36333
+ CDK_INIT_TEMPLATE,
36334
+ CDK_PROGRESS,
36335
+ CDK_REQUIRE_APPROVAL,
36336
+ CDK_SYNTH_DEFAULTS_BY_STAGE,
36337
+ CDK_WATCH_DEFAULTS_BY_STAGE,
35614
36338
  CLAUDE_RULE_TARGET,
35615
36339
  COMPLETE_JOB_ID,
36340
+ CdkCli,
35616
36341
  DEFAULT_AC_THRESHOLDS,
35617
36342
  DEFAULT_AGENT_PATHS,
35618
36343
  DEFAULT_AGENT_TIERS,
@@ -35780,6 +36505,7 @@ export {
35780
36505
  labelsForPhase,
35781
36506
  maintenanceAuditBundle,
35782
36507
  meetingAnalysisBundle,
36508
+ mergeCdkOptions,
35783
36509
  orchestratorBundle,
35784
36510
  parseApiRollup,
35785
36511
  peopleProfileBundle,
@@ -35793,6 +36519,29 @@ export {
35793
36519
  regulatoryResearchBundle,
35794
36520
  renderAgentTierCaseStatement,
35795
36521
  renderAgentTierSection,
36522
+ renderCdkAcknowledge,
36523
+ renderCdkBootstrap,
36524
+ renderCdkContext,
36525
+ renderCdkDeploy,
36526
+ renderCdkDestroy,
36527
+ renderCdkDiff,
36528
+ renderCdkDocs,
36529
+ renderCdkDoctor,
36530
+ renderCdkDrift,
36531
+ renderCdkFlags,
36532
+ renderCdkGc,
36533
+ renderCdkImport,
36534
+ renderCdkInit,
36535
+ renderCdkList,
36536
+ renderCdkMetadata,
36537
+ renderCdkMigrate,
36538
+ renderCdkNotices,
36539
+ renderCdkOrphan,
36540
+ renderCdkPublishAssets,
36541
+ renderCdkRefactor,
36542
+ renderCdkRollback,
36543
+ renderCdkSynth,
36544
+ renderCdkWatch,
35796
36545
  renderCheckDocSamplesProcedure,
35797
36546
  renderCheckLinksProcedure,
35798
36547
  renderCustomDocSectionBlock,