@codedrifters/configulator 0.0.195 → 0.0.197

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.js CHANGED
@@ -182,14 +182,17 @@ __export(index_exports, {
182
182
  AstroConfig: () => AstroConfig,
183
183
  AstroOutput: () => AstroOutput,
184
184
  AstroProject: () => AstroProject,
185
+ AwsCdkProject: () => AwsCdkProject,
185
186
  AwsDeployWorkflow: () => AwsDeployWorkflow,
186
187
  AwsDeploymentConfig: () => AwsDeploymentConfig,
187
188
  AwsDeploymentTarget: () => AwsDeploymentTarget,
189
+ AwsTeardownWorkflow: () => AwsTeardownWorkflow,
188
190
  BUILT_IN_BUNDLES: () => BUILT_IN_BUNDLES,
189
191
  CLAUDE_RULE_TARGET: () => CLAUDE_RULE_TARGET,
190
192
  COMPLETE_JOB_ID: () => COMPLETE_JOB_ID,
191
193
  DEFAULT_PRIORITY_LABELS: () => DEFAULT_PRIORITY_LABELS,
192
194
  DEFAULT_STATUS_LABELS: () => DEFAULT_STATUS_LABELS,
195
+ DEFAULT_TEARDOWN_BRANCH_PATTERNS: () => DEFAULT_TEARDOWN_BRANCH_PATTERNS,
193
196
  DEFAULT_TYPE_LABELS: () => DEFAULT_TYPE_LABELS,
194
197
  JsiiFaker: () => JsiiFaker,
195
198
  MCP_TRANSPORT: () => MCP_TRANSPORT,
@@ -5639,8 +5642,14 @@ var TestRunner = {
5639
5642
  };
5640
5643
  var TypeScriptProject = class extends import_projen16.typescript.TypeScriptProject {
5641
5644
  constructor(userOptions) {
5642
- const pnpmVersion = userOptions.parent && userOptions.parent instanceof MonorepoProject ? userOptions.parent.pnpmVersion : VERSION.PNPM_VERSION;
5643
- const pnpmWorkspace = userOptions.parent && userOptions.parent instanceof MonorepoProject ? PnpmWorkspace.of(userOptions.parent) : void 0;
5645
+ if (!(userOptions.parent instanceof MonorepoProject)) {
5646
+ throw new Error(
5647
+ "TypeScriptProject must be parented to a MonorepoProject. Pass `parent: <MonorepoProject>` in the project options."
5648
+ );
5649
+ }
5650
+ const parent = userOptions.parent;
5651
+ const pnpmVersion = parent.pnpmVersion;
5652
+ const pnpmWorkspace = PnpmWorkspace.of(parent);
5644
5653
  const testRunner = userOptions.testRunner ?? TestRunner.JEST;
5645
5654
  const useJest = testRunner === TestRunner.JEST;
5646
5655
  const defaultOptions = {
@@ -5906,44 +5915,20 @@ var DEFAULT_INDEX_ASTRO = `---
5906
5915
  var DEFAULT_FAVICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path d="M64 8a56 56 0 1 0 0 112A56 56 0 0 0 64 8Z" fill="#ff5d01"/></svg>
5907
5916
  `;
5908
5917
 
5909
- // src/typescript/typescript-config.ts
5910
- var import_node_path2 = require("path");
5911
- var import_projen18 = require("projen");
5912
- var import_path2 = require("projen/lib/util/path");
5913
- var TypeScriptConfig = class extends import_projen18.Component {
5914
- constructor(project) {
5915
- super(project);
5916
- let tsPaths = {};
5917
- const workspaceDeps = project.deps.all.filter(
5918
- (d) => d.version === "workspace:*"
5919
- );
5920
- workspaceDeps.forEach((dep) => {
5921
- const subproject = project.root.subprojects.find((p) => p.package.packageName === dep.name);
5922
- if (!subproject) {
5923
- throw new Error(`Could not find subproject ${dep.name} in monorepo.`);
5924
- }
5925
- tsPaths = {
5926
- ...tsPaths,
5927
- [dep.name]: [
5928
- (0, import_path2.ensureRelativePathStartsWithDot)(
5929
- (0, import_node_path2.relative)(project.outdir, subproject.outdir)
5930
- )
5931
- ]
5932
- };
5933
- });
5934
- project.tsconfig?.file.addOverride("compilerOptions.paths", tsPaths);
5935
- project.tsconfigDev?.file.addOverride("compilerOptions.paths", tsPaths);
5936
- }
5937
- };
5918
+ // src/projects/aws-cdk-project.ts
5919
+ var import_projen20 = require("projen");
5920
+ var import_javascript5 = require("projen/lib/javascript");
5921
+ var import_release2 = require("projen/lib/release");
5922
+ var import_ts_deepmerge3 = require("ts-deepmerge");
5938
5923
 
5939
5924
  // src/workflows/aws-deploy-workflow.ts
5940
5925
  var import_utils11 = __toESM(require_lib());
5941
- var import_projen19 = require("projen");
5926
+ var import_projen18 = require("projen");
5942
5927
  var import_build = require("projen/lib/build");
5943
5928
  var import_github2 = require("projen/lib/github");
5944
5929
  var import_workflows_model5 = require("projen/lib/github/workflows-model");
5945
5930
  var PROD_DEPLOY_NAME = "prod-deploy";
5946
- var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen19.Component {
5931
+ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen18.Component {
5947
5932
  constructor(project, options = {}) {
5948
5933
  super(project);
5949
5934
  this.project = project;
@@ -6206,6 +6191,433 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen19.Compone
6206
6191
  super.preSynthesize();
6207
6192
  }
6208
6193
  };
6194
+
6195
+ // src/workflows/aws-teardown-workflow.ts
6196
+ var import_projen19 = require("projen");
6197
+ var import_github3 = require("projen/lib/github");
6198
+ var import_workflows_model6 = require("projen/lib/github/workflows-model");
6199
+ var DEFAULT_TEARDOWN_BRANCH_PATTERNS = [
6200
+ "feat/*",
6201
+ "fix/*",
6202
+ "feature/*"
6203
+ ];
6204
+ var resolveBranchPatterns = (explicit, targets) => {
6205
+ if (explicit && explicit.length > 0) {
6206
+ return [...explicit];
6207
+ }
6208
+ const derived = Array.from(
6209
+ new Set(
6210
+ targets.flatMap((target) => target.branches.map((b) => b.branch)).filter((branch) => typeof branch === "string").filter((branch) => branch.includes("*"))
6211
+ )
6212
+ );
6213
+ if (derived.length > 0) {
6214
+ return derived;
6215
+ }
6216
+ return [...DEFAULT_TEARDOWN_BRANCH_PATTERNS];
6217
+ };
6218
+ var AwsTeardownWorkflow = class extends import_projen19.Component {
6219
+ constructor(rootProject, options) {
6220
+ super(rootProject);
6221
+ this.rootProject = rootProject;
6222
+ const {
6223
+ awsDestructionTargets,
6224
+ repoTagName,
6225
+ stageTypeTagName,
6226
+ environmentTypeTagName,
6227
+ branchNameTagName,
6228
+ deleteBranchPatterns
6229
+ } = options;
6230
+ if (!repoTagName) {
6231
+ throw new Error("AwsTeardownWorkflow requires `repoTagName`");
6232
+ }
6233
+ if (!stageTypeTagName) {
6234
+ throw new Error("AwsTeardownWorkflow requires `stageTypeTagName`");
6235
+ }
6236
+ if (!environmentTypeTagName) {
6237
+ throw new Error("AwsTeardownWorkflow requires `environmentTypeTagName`");
6238
+ }
6239
+ if (!branchNameTagName) {
6240
+ throw new Error("AwsTeardownWorkflow requires `branchNameTagName`");
6241
+ }
6242
+ if (!(rootProject instanceof MonorepoProject)) {
6243
+ throw new Error(
6244
+ "AwsTeardownWorkflow requires the root project to be a MonorepoProject"
6245
+ );
6246
+ }
6247
+ const github = import_github3.GitHub.of(this.rootProject);
6248
+ if (!github) {
6249
+ throw new Error(
6250
+ "AwsTeardownWorkflow requires a GitHub component in the root project"
6251
+ );
6252
+ }
6253
+ const branchPatterns = resolveBranchPatterns(
6254
+ deleteBranchPatterns,
6255
+ awsDestructionTargets
6256
+ );
6257
+ const workflow = new import_github3.GithubWorkflow(github, "teardown-dev");
6258
+ workflow.on({
6259
+ workflowDispatch: {},
6260
+ schedule: [
6261
+ {
6262
+ cron: "32 6 * * *"
6263
+ }
6264
+ ],
6265
+ delete: {
6266
+ branches: branchPatterns
6267
+ }
6268
+ });
6269
+ awsDestructionTargets.forEach((target) => {
6270
+ const {
6271
+ awsStageType,
6272
+ deploymentTargetRole,
6273
+ account,
6274
+ region,
6275
+ ciDeploymentConfig
6276
+ } = target;
6277
+ const { roleArn } = ciDeploymentConfig ?? {};
6278
+ workflow.addJob(
6279
+ `teardown-${awsStageType}-${deploymentTargetRole}-${account}-${region}`.toLowerCase(),
6280
+ {
6281
+ name: `Teardown Stacks in ${awsStageType}/${deploymentTargetRole}/${account}/${region}`,
6282
+ runsOn: ["ubuntu-latest"],
6283
+ permissions: {
6284
+ contents: import_workflows_model6.JobPermission.READ,
6285
+ idToken: import_workflows_model6.JobPermission.WRITE
6286
+ },
6287
+ env: {
6288
+ REPO: "${{ github.repository }}",
6289
+ REGIONS: [region].join(" ")
6290
+ },
6291
+ steps: [
6292
+ {
6293
+ name: `AWS Creds ${account}/${region}`,
6294
+ uses: "aws-actions/configure-aws-credentials@v6",
6295
+ with: {
6296
+ "role-to-assume": roleArn,
6297
+ "aws-region": region,
6298
+ "role-duration-seconds": 900
6299
+ }
6300
+ },
6301
+ {
6302
+ name: "Fetch All Branches",
6303
+ id: "fetch_branches",
6304
+ uses: "actions/github-script@v9",
6305
+ with: {
6306
+ script: [
6307
+ "const all = await github.paginate(github.rest.repos.listBranches, {",
6308
+ " owner: context.repo.owner,",
6309
+ " repo: context.repo.repo,",
6310
+ " per_page: 100",
6311
+ "});",
6312
+ "const names = all.map(b => b.name);",
6313
+ "console.log(`Found branches: ${names}`);",
6314
+ 'core.setOutput("json", JSON.stringify(names));'
6315
+ ].join("\n")
6316
+ }
6317
+ },
6318
+ {
6319
+ name: "Save Branches to File",
6320
+ run: [
6321
+ 'echo "Saving branches to file"',
6322
+ "echo '${{ steps.fetch_branches.outputs.json }}' | jq -r '.[]' | sort -u > branches.txt",
6323
+ 'echo "Branches:"',
6324
+ "cat branches.txt"
6325
+ ].join("\n")
6326
+ },
6327
+ {
6328
+ name: "Find Stacks by Tag",
6329
+ id: "find_stacks",
6330
+ run: [
6331
+ "set -euo pipefail",
6332
+ ": > candidates.txt # columns: arn region branchTag",
6333
+ "# Build tag filters",
6334
+ `TAG_FILTERS=( "Key=${repoTagName},Values=$REPO" )`,
6335
+ `TAG_FILTERS+=( "Key=${stageTypeTagName},Values=${awsStageType}" )`,
6336
+ `TAG_FILTERS+=( "Key=${environmentTypeTagName},Values=${deploymentTargetRole}" )`,
6337
+ "for r in $REGIONS; do",
6338
+ ` echo "Scanning region: $r"`,
6339
+ " aws resourcegroupstaggingapi get-resources \\",
6340
+ ' --region "$r" \\',
6341
+ ' --resource-type-filters "cloudformation:stack" \\',
6342
+ ' --tag-filters "${TAG_FILTERS[@]}" \\',
6343
+ ` | jq -r --arg r "$r" '`,
6344
+ " .ResourceTagMappingList[]",
6345
+ " | . as $res",
6346
+ ` | ($res.Tags[] | select(.Key=="${branchNameTagName}") | .Value) as $branch`,
6347
+ ' | [$res.ResourceARN, $r, ($branch // "")]',
6348
+ " | @tsv",
6349
+ " ' >> candidates.txt",
6350
+ "done",
6351
+ "echo 'Tagged stacks:'",
6352
+ `(echo -e "ARN\\tREGION\\tBRANCH"; cat candidates.txt) | column -t -s $'\\t'`
6353
+ ].join("\n")
6354
+ },
6355
+ {
6356
+ name: "Determine Orphan Stacks (No Matching Branch)",
6357
+ run: [
6358
+ "set -euo pipefail",
6359
+ ": > orphans.txt # arn region branch",
6360
+ "while IFS=$'\\t' read -r arn region branch; do",
6361
+ ' [ -z "$arn" ] && continue',
6362
+ ' if [ -z "$branch" ]; then',
6363
+ " # If no Branch tag, treat as not-a-preview; skip",
6364
+ " continue",
6365
+ " fi",
6366
+ ' if ! grep -Fxq "$branch" branches.txt; then',
6367
+ ' echo -e "$arn\\t$region\\t$branch" >> orphans.txt',
6368
+ " fi",
6369
+ "done < candidates.txt",
6370
+ "",
6371
+ "if [ -s orphans.txt ]; then",
6372
+ ' echo "Orphan stacks (no matching branch):"',
6373
+ ` (echo -e "ARN\\tREGION\\tBRANCH"; cat orphans.txt) | column -t -s $'\\t'`,
6374
+ "else",
6375
+ ' echo "No orphan stacks found."',
6376
+ "fi"
6377
+ ].join("\n")
6378
+ },
6379
+ {
6380
+ name: "Delete Orphan Stacks",
6381
+ if: "hashFiles('orphans.txt') != ''",
6382
+ run: [
6383
+ "set -euo pipefail",
6384
+ "while IFS=$'\\t' read -r arn region branch; do",
6385
+ ' [ -z "$arn" ] && continue',
6386
+ ` stack_name=$(cut -d'/' -f2 <<<"$arn")`,
6387
+ ' echo "Deleting $stack_name (branch=$branch) in $region"',
6388
+ ' aws cloudformation delete-stack --region "$region" --stack-name "$stack_name" || true',
6389
+ "done < orphans.txt"
6390
+ ].join("\n")
6391
+ }
6392
+ ]
6393
+ }
6394
+ );
6395
+ });
6396
+ }
6397
+ };
6398
+
6399
+ // src/projects/aws-cdk-project.ts
6400
+ var AwsCdkProject = class extends import_projen20.awscdk.AwsCdkTypeScriptApp {
6401
+ constructor(userOptions) {
6402
+ if (!(userOptions.parent instanceof MonorepoProject)) {
6403
+ throw new Error(
6404
+ "AwsCdkProject must be parented to a MonorepoProject. Pass `parent: <MonorepoProject>` in the project options."
6405
+ );
6406
+ }
6407
+ const parent = userOptions.parent;
6408
+ const pnpmVersion = parent.pnpmVersion;
6409
+ const pnpmWorkspace = PnpmWorkspace.of(parent);
6410
+ const testRunner = userOptions.testRunner ?? TestRunner.JEST;
6411
+ const useJest = testRunner === TestRunner.JEST;
6412
+ const defaultOptions = {
6413
+ defaultReleaseBranch: "main",
6414
+ /**
6415
+ * Enable reset task by default.
6416
+ */
6417
+ resetTask: true,
6418
+ /**
6419
+ * Packaging options.
6420
+ */
6421
+ packageManager: import_javascript5.NodePackageManager.PNPM,
6422
+ pnpmVersion,
6423
+ licensed: userOptions.license !== void 0 || false,
6424
+ copyrightOwner: "CodeDrifters",
6425
+ release: false,
6426
+ /**
6427
+ * Don't add sample code.
6428
+ */
6429
+ sampleCode: false,
6430
+ /**
6431
+ * CDK versions sourced from the configulator-managed catalog.
6432
+ */
6433
+ cdkVersion: VERSION.AWS_CDK_LIB_VERSION,
6434
+ cdkCliVersion: VERSION.AWS_CDK_CLI_VERSION,
6435
+ ...useJest ? {
6436
+ /**
6437
+ * Make sure jest config is stored outside of package.json and use
6438
+ * SWC for faster compilation (matches TypeScriptProject).
6439
+ */
6440
+ jestOptions: {
6441
+ configFilePath: "jest.config.json",
6442
+ jestConfig: {
6443
+ roots: [`<rootDir>/src`],
6444
+ transform: {
6445
+ ["^.+\\.[t]sx?$"]: new import_javascript5.Transform("@swc/jest")
6446
+ },
6447
+ moduleFileExtensions: ["js", "ts"]
6448
+ }
6449
+ },
6450
+ devDeps: ["@swc/jest", "@swc/core"]
6451
+ } : {
6452
+ jest: false,
6453
+ devDeps: []
6454
+ },
6455
+ /**
6456
+ * Turn on prettier formatting.
6457
+ */
6458
+ prettier: true,
6459
+ /**
6460
+ * Don't package test files.
6461
+ */
6462
+ npmIgnoreOptions: {
6463
+ ignorePatterns: ["*.spec.*", "*.test.*"]
6464
+ },
6465
+ /**
6466
+ * Options for the automated dependency upgrade task / workflow.
6467
+ * Exclude any packages managed by the parent project's default catalog
6468
+ * so the catalog stays the source of truth.
6469
+ */
6470
+ depsUpgrade: true,
6471
+ depsUpgradeOptions: {
6472
+ workflow: false,
6473
+ exclude: Object.keys(pnpmWorkspace?.defaultCatalog || {}),
6474
+ workflowOptions: {
6475
+ schedule: import_javascript5.UpgradeDependenciesSchedule.WEEKLY
6476
+ },
6477
+ cooldown: 1
6478
+ },
6479
+ /**
6480
+ * Only release when the package source content or package.json changes.
6481
+ */
6482
+ releaseTrigger: import_release2.ReleaseTrigger.continuous({
6483
+ paths: [
6484
+ `${userOptions.outdir}/src/**`,
6485
+ `${userOptions.outdir}/package.json`
6486
+ ]
6487
+ })
6488
+ };
6489
+ const options = (0, import_ts_deepmerge3.merge)(defaultOptions, userOptions);
6490
+ super(options);
6491
+ this.addDevDeps("@types/node@catalog:");
6492
+ this.tsconfig?.addExclude("**/*.test.*");
6493
+ this.tsconfig?.addExclude("**/*.spec.*");
6494
+ if (testRunner === TestRunner.VITEST) {
6495
+ new Vitest(this, {
6496
+ config: {
6497
+ include: ["src/**/*.{test,spec}.?(c|m)[jt]s?(x)"],
6498
+ ...options.vitestOptions?.config
6499
+ },
6500
+ ...options.vitestOptions
6501
+ });
6502
+ } else {
6503
+ this.deps.removeDependency("ts-jest");
6504
+ }
6505
+ this.package.file.addOverride(
6506
+ "packageManager",
6507
+ `pnpm@${options.pnpmVersion}`
6508
+ );
6509
+ this.eslint?.addOverride({
6510
+ files: ["**/*.test.*", "**/*.spec.*"],
6511
+ rules: {
6512
+ "import/no-extraneous-dependencies": "off"
6513
+ }
6514
+ });
6515
+ this.gitignore?.addPatterns(".DS_Store", "test-reports", "cdk.out");
6516
+ this.npmignore?.addPatterns("*.spec.*", "*.test.*", "__fixtures__");
6517
+ new AwsDeploymentConfig(this);
6518
+ (options.deploymentTargets ?? []).forEach(
6519
+ (targetOptions) => this.addDeploymentTarget(targetOptions)
6520
+ );
6521
+ const targetsForAutoDerive = AwsDeploymentConfig.of(this)?.awsDeploymentTargets ?? [];
6522
+ const deployWorkflows = options.deployWorkflows ?? Array.from(new Set(targetsForAutoDerive.map((t) => t.awsStageType))).map(
6523
+ (awsStageType) => ({
6524
+ awsStageType,
6525
+ buildWorkflow: options.sharedBuildWorkflow
6526
+ })
6527
+ );
6528
+ deployWorkflows.forEach(
6529
+ (workflowOptions) => new AwsDeployWorkflow(this, workflowOptions)
6530
+ );
6531
+ if (options.teardownWorkflow) {
6532
+ new AwsTeardownWorkflow(parent, options.teardownWorkflow);
6533
+ }
6534
+ const turboActive = TurboRepo.of(parent) !== void 0;
6535
+ if (turboActive) {
6536
+ const turbo = new TurboRepo(this);
6537
+ turbo.postCompileTask?.outputs.push("dist/**");
6538
+ turbo.postCompileTask?.inputs.push("src/**");
6539
+ }
6540
+ if (options.agentConfig === true || typeof options.agentConfig === "object") {
6541
+ new AgentConfig(
6542
+ this,
6543
+ typeof options.agentConfig === "object" ? options.agentConfig : {}
6544
+ );
6545
+ }
6546
+ if (options.resetTask !== false) {
6547
+ const defaultResetTaskOptions = {
6548
+ pathsToRemove: [
6549
+ "node_modules",
6550
+ "dist",
6551
+ "lib",
6552
+ "cdk.out",
6553
+ "coverage",
6554
+ "test-reports",
6555
+ ".turbo",
6556
+ "tsconfig.tsbuildinfo",
6557
+ this.artifactsDirectory
6558
+ ]
6559
+ };
6560
+ const userResetTaskOptions = options.resetTaskOptions ?? {};
6561
+ const resetTaskOptions = (0, import_ts_deepmerge3.merge)(
6562
+ defaultResetTaskOptions,
6563
+ {
6564
+ ...userResetTaskOptions,
6565
+ pathsToRemove: [
6566
+ ...defaultResetTaskOptions.pathsToRemove ?? [],
6567
+ ...userResetTaskOptions.pathsToRemove ?? []
6568
+ ]
6569
+ }
6570
+ );
6571
+ new ResetTask(this, resetTaskOptions);
6572
+ }
6573
+ const originalResolve = this.package.resolveDepsAndWritePackageJson;
6574
+ this.package.installDependencies = () => {
6575
+ parent.requestInstallDependencies({
6576
+ resolveDepsAndWritePackageJson: () => originalResolve.apply(this.package)
6577
+ });
6578
+ };
6579
+ this.package.resolveDepsAndWritePackageJson = () => {
6580
+ };
6581
+ }
6582
+ /**
6583
+ * Add an AWS deployment target to this project after construction. The
6584
+ * target is registered on the existing `AwsDeploymentConfig` and immediately
6585
+ * available for `AwsDeployWorkflow` consumption.
6586
+ */
6587
+ addDeploymentTarget(options) {
6588
+ return new AwsDeploymentTarget(this, options);
6589
+ }
6590
+ };
6591
+
6592
+ // src/typescript/typescript-config.ts
6593
+ var import_node_path2 = require("path");
6594
+ var import_projen21 = require("projen");
6595
+ var import_path2 = require("projen/lib/util/path");
6596
+ var TypeScriptConfig = class extends import_projen21.Component {
6597
+ constructor(project) {
6598
+ super(project);
6599
+ let tsPaths = {};
6600
+ const workspaceDeps = project.deps.all.filter(
6601
+ (d) => d.version === "workspace:*"
6602
+ );
6603
+ workspaceDeps.forEach((dep) => {
6604
+ const subproject = project.root.subprojects.find((p) => p.package.packageName === dep.name);
6605
+ if (!subproject) {
6606
+ throw new Error(`Could not find subproject ${dep.name} in monorepo.`);
6607
+ }
6608
+ tsPaths = {
6609
+ ...tsPaths,
6610
+ [dep.name]: [
6611
+ (0, import_path2.ensureRelativePathStartsWithDot)(
6612
+ (0, import_node_path2.relative)(project.outdir, subproject.outdir)
6613
+ )
6614
+ ]
6615
+ };
6616
+ });
6617
+ project.tsconfig?.file.addOverride("compilerOptions.paths", tsPaths);
6618
+ project.tsconfigDev?.file.addOverride("compilerOptions.paths", tsPaths);
6619
+ }
6620
+ };
6209
6621
  // Annotate the CommonJS export names for ESM import in node:
6210
6622
  0 && (module.exports = {
6211
6623
  AGENT_MODEL,
@@ -6215,14 +6627,17 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen19.Compone
6215
6627
  AstroConfig,
6216
6628
  AstroOutput,
6217
6629
  AstroProject,
6630
+ AwsCdkProject,
6218
6631
  AwsDeployWorkflow,
6219
6632
  AwsDeploymentConfig,
6220
6633
  AwsDeploymentTarget,
6634
+ AwsTeardownWorkflow,
6221
6635
  BUILT_IN_BUNDLES,
6222
6636
  CLAUDE_RULE_TARGET,
6223
6637
  COMPLETE_JOB_ID,
6224
6638
  DEFAULT_PRIORITY_LABELS,
6225
6639
  DEFAULT_STATUS_LABELS,
6640
+ DEFAULT_TEARDOWN_BRANCH_PATTERNS,
6226
6641
  DEFAULT_TYPE_LABELS,
6227
6642
  JsiiFaker,
6228
6643
  MCP_TRANSPORT,