@go-to-k/cdkd 0.284.24 → 0.284.25

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.
@@ -16860,7 +16860,7 @@ var CloudControlProvider = class {
16860
16860
  if (context?.finalSnapshotIdentifier !== void 0) throw new ProvisioningError(`${logicalId} (${resourceType}) requires a final snapshot (DeletionPolicy: Snapshot), but the Cloud Control API delete route has no final-snapshot parameter. Re-run with --skip-final-snapshot after snapshotting manually, or retain the resource.`, resourceType, logicalId, physicalId);
16861
16861
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
16862
16862
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
16863
- const { ASGProvider } = await import("./asg-provider-Bh0odlSk.js").then((n) => n.n);
16863
+ const { ASGProvider } = await import("./asg-provider-B2lPfJBN.js").then((n) => n.n);
16864
16864
  return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
16865
16865
  }
16866
16866
  const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
@@ -17531,6 +17531,280 @@ var CloudControlProvider = class {
17531
17531
  }
17532
17532
  };
17533
17533
 
17534
+ //#endregion
17535
+ //#region src/provisioning/interrupt-watch.ts
17536
+ /**
17537
+ * The ONE interrupt watch every bounded wait under `src/provisioning/**` uses
17538
+ * (issues #2053 / #1952, consolidating the per-invocation shape PR #2033
17539
+ * introduced in `providers/custom-resource-provider.ts`).
17540
+ *
17541
+ * WHY A WAIT NEEDS ONE AT ALL
17542
+ * ---------------------------
17543
+ * `withRetry` (`src/deployment/retry.ts`) is the only wait in cdkd that
17544
+ * consults an interrupt DURING a backoff — it probes once a second while
17545
+ * sleeping. The deploy engine, `destroy-runner.ts` and `rollback-executor.ts`
17546
+ * all poll only BETWEEN operations. So a retry that threads nothing is dead to
17547
+ * Ctrl-C for its whole schedule, and on the destroy path `withResourceTimeout`
17548
+ * has by then abandoned the promise WITHOUT cancelling it, so the loop keeps
17549
+ * issuing writes behind a run the user was told had ended.
17550
+ * `docs/provider-development.md` states the requirement; `vp run
17551
+ * audit:withretry-interrupt:check` enforces it.
17552
+ *
17553
+ * WHY IT IS SHARED RATHER THAN PER MODULE
17554
+ * ---------------------------------------
17555
+ * Four modules carried a copy before issue #2104, and the copies could not
17556
+ * agree about the one thing that matters: a single `delete()` traverses more
17557
+ * than one of them, so a SIGINT marked only whichever module happened to hold a
17558
+ * live watch. One module means one latch, one error type, and ONE process
17559
+ * listener rather than four.
17560
+ *
17561
+ * FOUR PROPERTIES, EACH LOAD-BEARING
17562
+ * ----------------------------------
17563
+ *
17564
+ * 1. **The flag is per WAIT, never on a provider.** Providers are registered as
17565
+ * SINGLETONS serving concurrent resources, so provider-level state is some
17566
+ * other resource's.
17567
+ *
17568
+ * 2. **The latch is STICKY.** A watch STARTED after the signal begins is
17569
+ * already interrupted. Clearing it when the last watch is disposed — the
17570
+ * first cut — is wrong for exactly the case issue #1952 is about: a
17571
+ * `GlobalTable` delete runs the #1521 gate, then the index-busy retry loop,
17572
+ * then the gone-wait, each disposing before the next begins, so a SIGINT
17573
+ * during the gate left the two multi-minute waits after it DEAF. Only a
17574
+ * COMMAND clears it. The listener is likewise never torn down BETWEEN two
17575
+ * waits: one removed in that gap cannot record a signal landing in it, which
17576
+ * is the same bug one layer down. {@link endCommandInterruptScope} removes it
17577
+ * at command END, where there is no next wait to miss.
17578
+ *
17579
+ * 3. **It arms only inside a command that OWNS interrupt handling.** Registering
17580
+ * any SIGINT listener disables Node's default terminate, so a command with no
17581
+ * graceful shutdown of its own must not gain one here: `cdkd drift --revert`
17582
+ * reaches `provider.update` and installs nothing, and an armed watch there
17583
+ * would leave Ctrl-C setting flags nobody reads while the command carried on
17584
+ * writing to AWS — needing a SIGKILL.
17585
+ *
17586
+ * The gate is an explicit flag raised by
17587
+ * {@link beginCommandInterruptScope}, which `forwardSigtermToSigint()` calls
17588
+ * at command start. It is deliberately NOT
17589
+ * `process.listenerCount('SIGINT') > 0`, which was the first cut and is
17590
+ * defeated by the very case it was meant to catch: `cdkd drift` runs
17591
+ * `provider.update` at concurrency 4, and a concurrent CloudFront / ACM /
17592
+ * Route53 wait installs a TRANSIENT SIGINT listener of its own — so an ELBv2
17593
+ * update starting inside that window saw a non-zero count, armed, and then
17594
+ * kept the listener for the rest of the command after the transient one was
17595
+ * removed. A count answers "is anyone listening right now"; the question is
17596
+ * "does this COMMAND have a shutdown path", and only the command can say.
17597
+ * (`forwardSigtermToSigint` itself registers on SIGTERM only, so it never
17598
+ * satisfied the count either — a detail an earlier version of this comment
17599
+ * got wrong, which is how the gap survived a review.)
17600
+ *
17601
+ * Arming is re-attempted on every watch, so a wait that runs before the
17602
+ * command opens its scope does not poison later ones.
17603
+ *
17604
+ * 4. **The handler force-quits when it is the LAST listener.** Property 3 gets
17605
+ * the watch armed only under a command with a shutdown path, but that path
17606
+ * is not live for the command's whole duration: `destroy.ts` registers no
17607
+ * SIGINT handler of its own, and `destroy-runner.ts` removes its one in a
17608
+ * `finally` — so between two stacks of a multi-stack destroy the shared
17609
+ * handler is the ONLY listener. Merely latching there SWALLOWS the Ctrl-C:
17610
+ * the process does not exit, `draining` is never set, `result.interrupted`
17611
+ * stays false, and the loop proceeds to delete the NEXT stack after the user
17612
+ * asked to stop — this file's own headline failure, one layer out.
17613
+ *
17614
+ * So when no other listener remains, the handler restores exactly what Node
17615
+ * would have done with no listener at all. That is deliberately not a second
17616
+ * graceful path: inventing one would duplicate `destroy-runner.ts`'s drain
17617
+ * and have to be kept in sync with it, whereas "there is no graceful owner
17618
+ * right now, so terminate" is true by construction and needs no upkeep.
17619
+ */
17620
+ /**
17621
+ * Thrown by {@link InterruptWatch.onInterrupted}, and the ONE type the whole
17622
+ * codebase uses to mean "a wait stopped because the user asked us to stop".
17623
+ *
17624
+ * It has to be a distinct class rather than a bare `Error` because
17625
+ * `deploy-engine.ts` decides whether to ROLL BACK by asking what the failure
17626
+ * was. Its own `InterruptedError` is module-private, so a provider cannot
17627
+ * produce one; a bare `Error` from a provider therefore read as a genuine
17628
+ * resource failure and triggered an automatic rollback of the whole stack on
17629
+ * Ctrl-C — strictly worse than the unresponsiveness the threading removes.
17630
+ *
17631
+ * The explicit `setPrototypeOf` is not decoration: without it a subclass of
17632
+ * `Error` loses `instanceof` under this repo's compile target, which would make
17633
+ * {@link isInterruptedWaitError} silently answer `false`.
17634
+ */
17635
+ var InterruptedWaitError = class InterruptedWaitError extends Error {
17636
+ constructor(what) {
17637
+ super(`${what} interrupted by user (SIGINT)`);
17638
+ this.name = "InterruptedWaitError";
17639
+ Object.setPrototypeOf(this, InterruptedWaitError.prototype);
17640
+ }
17641
+ };
17642
+ /**
17643
+ * Whether `error` IS an interrupt, or WRAPS one.
17644
+ *
17645
+ * The wrap is the normal case, not the edge case: every provider catch under
17646
+ * `src/provisioning/providers/**` re-throws AWS failures as a
17647
+ * `ProvisioningError` threading the original as `cause` (issue #2040, enforced
17648
+ * by `vp run audit:provider-error-cause:check`), so by the time the engine sees
17649
+ * an interrupt it is one or more `cause` hops down. A plain `instanceof` check
17650
+ * at the engine would therefore have been a placebo.
17651
+ *
17652
+ * **The walk is bounded by a VISITED SET, not by a depth ceiling**, and the
17653
+ * difference decides correctness rather than style. A ceiling has to be sized
17654
+ * against the deepest real chain, and that chain GROWS: the flat case is 2 (the
17655
+ * provider's own wrap, then the command's), `DagExecutor` adds none — it
17656
+ * collects rather than wraps (`dag-executor.ts:178`) — but `deploy-engine.ts`
17657
+ * adds one `ProvisioningError` PER NESTED-STACK LEVEL (`deploy-engine.ts:2932`;
17658
+ * `NestedStackProvider.create` adds none of its own). A depth-5 cap therefore
17659
+ * missed at four levels of nesting, and missing here is not a degraded answer:
17660
+ * it is a full automatic rollback on Ctrl-C. The visited set gives the
17661
+ * termination the cap was really there for — a cyclic `cause` chain, which
17662
+ * would otherwise spin on the ERROR path where nothing else is watching —
17663
+ * without a ceiling any legitimate nest can cross.
17664
+ */
17665
+ function isInterruptedWaitError(error) {
17666
+ const seen = /* @__PURE__ */ new Set();
17667
+ let current = error;
17668
+ while (current !== void 0 && current !== null) {
17669
+ if (current instanceof InterruptedWaitError) return true;
17670
+ if (!(current instanceof Error)) return false;
17671
+ if (seen.has(current)) return false;
17672
+ seen.add(current);
17673
+ current = current.cause;
17674
+ }
17675
+ return false;
17676
+ }
17677
+ const liveWatches = /* @__PURE__ */ new Set();
17678
+ let sharedSigintHandler;
17679
+ let sigintLatched = false;
17680
+ /**
17681
+ * Test seam for the "this command owns interrupt handling" gate and for the
17682
+ * force-quit in property 4.
17683
+ *
17684
+ * Production never assigns either, and neither condition may be weakened to
17685
+ * accommodate tests: a command without a shutdown path really must keep Node's
17686
+ * default terminate, and a swallowed Ctrl-C in a multi-stack destroy really is
17687
+ * a blocker. `cdkd drift --revert` and `cdkd destroy` are the live instances.
17688
+ *
17689
+ * `commandOwnsInterrupts` exists because a provider suite never runs a COMMAND,
17690
+ * so every interrupt test would otherwise exercise the UNARMED path while
17691
+ * appearing to test the armed one — the worst of both, since it fails for a
17692
+ * reason unrelated to what the test claims. `forceQuit` exists because the real
17693
+ * one calls `process.exit`, which would take the test runner with it.
17694
+ */
17695
+ const interruptWatchTestSeam = {};
17696
+ /**
17697
+ * How many command scopes are currently open.
17698
+ *
17699
+ * A COUNTER rather than a boolean, because a boolean is only correct while
17700
+ * scopes never overlap. The CLI runs one command per process so they do not
17701
+ * today — but this module's own contract offers itself to "a host that runs
17702
+ * more than one command", and under a boolean the inner scope's `end` would
17703
+ * remove the shared listener and clear the OUTER command's sticky latch
17704
+ * mid-run, so a signal landing in the re-arm gap goes unrecorded. That is
17705
+ * exactly what property 2 forbids, arrived at from the other direction.
17706
+ */
17707
+ let commandInterruptScopeDepth = 0;
17708
+ function commandOwnsInterrupts() {
17709
+ const override = interruptWatchTestSeam.commandOwnsInterrupts;
17710
+ if (override !== void 0) return override();
17711
+ return commandInterruptScopeDepth > 0;
17712
+ }
17713
+ /**
17714
+ * Install the ONE process listener, if and only if the running command has
17715
+ * declared that it owns interrupt handling. See property 3 for why the "if" is
17716
+ * load-bearing rather than defensive.
17717
+ *
17718
+ * Called on every `startInterruptWatch` rather than once, so a wait that runs
17719
+ * before the command opens its interrupt scope leaves the door open instead of
17720
+ * latching a permanent "unarmed".
17721
+ */
17722
+ function armSharedSigintHandler() {
17723
+ if (sharedSigintHandler !== void 0) return;
17724
+ if (!commandOwnsInterrupts()) return;
17725
+ const handler = () => {
17726
+ sigintLatched = true;
17727
+ for (const live of liveWatches) live.interrupted = true;
17728
+ if (process.listeners("SIGINT").filter((l) => l !== handler).length === 0) {
17729
+ process.stderr.write("\nInterrupted.\nIf the next run reports a stack lock, release it with: cdkd force-unlock <stack-name>\n");
17730
+ (interruptWatchTestSeam.forceQuit ?? ((code) => process.exit(code)))(130);
17731
+ }
17732
+ };
17733
+ sharedSigintHandler = handler;
17734
+ process.on("SIGINT", handler);
17735
+ }
17736
+ /**
17737
+ * Start a watch for ONE wait. `what` names the wait in the thrown message.
17738
+ *
17739
+ * The caller MUST `dispose()` in a `finally`. A leaked watch is not merely
17740
+ * untidy: it stays in {@link liveWatches} forever, and the sticky latch means
17741
+ * every wait after a Ctrl-C would keep aborting instantly even if the run
17742
+ * somehow continued.
17743
+ */
17744
+ function startInterruptWatch(what) {
17745
+ armSharedSigintHandler();
17746
+ const state = { interrupted: sigintLatched };
17747
+ liveWatches.add(state);
17748
+ let disposed = false;
17749
+ return {
17750
+ isInterrupted: () => state.interrupted,
17751
+ onInterrupted: () => new InterruptedWaitError(what),
17752
+ dispose: () => {
17753
+ if (disposed) return;
17754
+ disposed = true;
17755
+ liveWatches.delete(state);
17756
+ }
17757
+ };
17758
+ }
17759
+ /**
17760
+ * Clear the sticky latch.
17761
+ *
17762
+ * Called by {@link beginCommandInterruptScope} and
17763
+ * {@link endCommandInterruptScope}, which bracket one command. On the CLI one
17764
+ * process runs one command, so the latch starts false regardless and those
17765
+ * calls are belt-and-braces; they earn their keep for a host that runs more
17766
+ * than one command, and for unit suites, where every test shares one process
17767
+ * and a simulated Ctrl-C would otherwise leak into every test after it.
17768
+ *
17769
+ * Deliberately NOT wired into `dispose()` — see property 2. That was the first
17770
+ * cut and it is precisely the bug: sequential waits always empty the live set
17771
+ * between them, so the latch cleared in every gap that mattered.
17772
+ */
17773
+ function resetInterruptWatchLatch() {
17774
+ sigintLatched = false;
17775
+ for (const live of liveWatches) live.interrupted = false;
17776
+ }
17777
+ /**
17778
+ * Declare that this command owns interrupt handling, and clear the latch.
17779
+ *
17780
+ * Called by `forwardSigtermToSigint()` (`src/utils/interrupt-signals.ts`),
17781
+ * which every command that reaches a provider wait through a lock invokes at
17782
+ * start — `deploy`, `destroy`, `rollback`, `state`. A command that does NOT
17783
+ * call it (`cdkd drift`) keeps Node's default terminate, which is the point.
17784
+ */
17785
+ function beginCommandInterruptScope() {
17786
+ commandInterruptScopeDepth += 1;
17787
+ if (commandInterruptScopeDepth === 1) resetInterruptWatchLatch();
17788
+ }
17789
+ /**
17790
+ * Close the scope — the command is done.
17791
+ *
17792
+ * Removing the shared listener HERE does not weaken property 2: what must never
17793
+ * happen is a teardown between two sequential WAITS, because a signal landing
17794
+ * in that gap would go unrecorded. At command end there is no next wait, and
17795
+ * leaving the listener installed would suppress default terminate for whatever
17796
+ * runs after.
17797
+ */
17798
+ function endCommandInterruptScope() {
17799
+ commandInterruptScopeDepth = Math.max(0, commandInterruptScopeDepth - 1);
17800
+ if (commandInterruptScopeDepth > 0) return;
17801
+ if (sharedSigintHandler !== void 0) {
17802
+ process.removeListener("SIGINT", sharedSigintHandler);
17803
+ sharedSigintHandler = void 0;
17804
+ }
17805
+ resetInterruptWatchLatch();
17806
+ }
17807
+
17534
17808
  //#endregion
17535
17809
  //#region src/provisioning/providers/custom-resource-provider.ts
17536
17810
  /**
@@ -18533,7 +18807,7 @@ var CustomResourceProvider = class CustomResourceProvider {
18533
18807
  * #2054, which replaced its warn-and-continue).
18534
18808
  */
18535
18809
  async invokeCustomResourceWithRetry(serviceToken, logicalId, operation, buildRequest) {
18536
- const watch = this.startInterruptWatch(logicalId);
18810
+ const watch = startInterruptWatch(`Custom resource ${logicalId}`);
18537
18811
  try {
18538
18812
  const stackId = await this.resolveSyntheticStackId(logicalId);
18539
18813
  let preDeliveryRetries = 0;
@@ -19084,33 +19358,6 @@ var CustomResourceProvider = class CustomResourceProvider {
19084
19358
  return customResourceRetryDelays.sleep(ms);
19085
19359
  }
19086
19360
  /**
19087
- * Install a SIGINT watch for one custom-resource invocation (issue #2033).
19088
- *
19089
- * `docs/provider-development.md` requires a new `withRetry` to thread
19090
- * `isInterrupted` / `onInterrupted`, and a hand-rolled backoff to be
19091
- * interruptible for the same reason: without it Ctrl-C is dead for the whole
19092
- * 47.75s schedule. The provider already had the shape — `pollS3Response`
19093
- * installs its own handler — so this is that pattern, lifted so the two new
19094
- * wait sites share one flag and one disposal.
19095
- *
19096
- * The caller MUST `dispose()` in a `finally`; a leaked listener would
19097
- * accumulate one per resource across a deploy.
19098
- */
19099
- startInterruptWatch(logicalId) {
19100
- let interrupted = false;
19101
- const handler = () => {
19102
- interrupted = true;
19103
- };
19104
- process.on("SIGINT", handler);
19105
- return {
19106
- isInterrupted: () => interrupted,
19107
- onInterrupted: () => /* @__PURE__ */ new Error(`Custom resource ${logicalId} interrupted by user`),
19108
- dispose: () => {
19109
- process.removeListener("SIGINT", handler);
19110
- }
19111
- };
19112
- }
19113
- /**
19114
19361
  * `sleep` that checks the interrupt watch at most a second apart, mirroring
19115
19362
  * `withRetry`'s own once-per-second probe. Throws the watch's error when the
19116
19363
  * user has hit Ctrl-C, so the retry loop unwinds instead of sitting out the
@@ -25526,7 +25773,7 @@ const FLUSH_INTERVAL_MS = 2e3;
25526
25773
  const FLUSH_EVENT_THRESHOLD = 50;
25527
25774
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
25528
25775
  function getCdkdVersion() {
25529
- return "0.284.24";
25776
+ return "0.284.25";
25530
25777
  }
25531
25778
  /**
25532
25779
  * Generate a time-sortable unique run id, e.g.
@@ -26970,7 +27217,7 @@ var DeployEngine = class {
26970
27217
  this.logger.warn(`Failed to save partial state before rollback: ${saveError instanceof Error ? saveError.message : String(saveError)}`);
26971
27218
  }
26972
27219
  let autoRollbackClean = false;
26973
- if (error instanceof InterruptedError) {
27220
+ if (error instanceof InterruptedError || isInterruptedWaitError(error)) {
26974
27221
  await this.writeRollbackJournalSegment(stackName, completedOperations, failedOperations, "interrupted", initialDeploy);
26975
27222
  this.logger.info(`Partial state saved (${Object.keys(newResources).length} resources). Run deploy again to resume, 'cdkd rollback' to revert, or destroy to clean up.`);
26976
27223
  throw error;
@@ -27740,7 +27987,7 @@ var DeployEngine = class {
27740
27987
  }), logicalId, 3, 5e3, deleteProvider);
27741
27988
  } catch (deleteError) {
27742
27989
  const msg = deleteError instanceof Error ? deleteError.message : String(deleteError);
27743
- if (msg.includes("does not exist") || msg.includes("was not found") || msg.includes("not found") || msg.includes("No policy found") || msg.includes("NoSuchEntity") || msg.includes("NotFoundException") || msg.includes("ResourceNotFoundException")) this.logger.debug(`Resource ${logicalId} already deleted (${msg}), removing from state`);
27990
+ if (!isInterruptedWaitError(deleteError) && (msg.includes("does not exist") || msg.includes("was not found") || msg.includes("not found") || msg.includes("No policy found") || msg.includes("NoSuchEntity") || msg.includes("NotFoundException") || msg.includes("ResourceNotFoundException"))) this.logger.debug(`Resource ${logicalId} already deleted (${msg}), removing from state`);
27744
27991
  else throw deleteError;
27745
27992
  }
27746
27993
  const deleteSkipped = deleteSkipReason(deleteResult);
@@ -28146,5 +28393,5 @@ var DeployEngine = class {
28146
28393
  };
28147
28394
 
28148
28395
  //#endregion
28149
- export { disableInstanceApiTermination as $, NestedStackChildDirectDestroyError as $n, ensureAssetStorage as $t, isStatefulRecreateTargetSync as A, uploadCfnTemplate as An, s3BucketWebsiteUrl as At, collectPublishedOutputNames as B, getAwsClients as Bn, rebuildClientForBucketRegion as Bt, createPreDeleteFinalSnapshot as C, resolveUseCdkBootstrapAssets as Cn, maskSecretsInText as Ct, makeCanonicalizePropertiesFn as D, CFN_TEMPLATE_URL_LIMIT as Dn, s3BucketDomainName as Dt, unsupportedFinalSnapshotError as E, CFN_TEMPLATE_BODY_LIMIT as En, s3BucketArn as Et, gray as F, AssemblyReader as Fn, withRetry as Ft, IAMRoleProvider as G, ConfigError as Gn, buildAssetRedirectMap as Gt, isExportAliasCollision as H, setAwsClients as Hn, AssetPublisher as Ht, green as I, processStackMessages as In, DagBuilder as It, ProviderRegistry as J, LocalInvokeBuildError as Jn, rewriteTemplateAssetReferences as Jt, collectInlinePolicyNamesManagedBySiblings as K, DependencyError as Kn, createAssetRedirectResolver as Kt, red as L, clearBucketRegionCache as Ln, TemplateParser as Lt, formatResourceLine as M, PARTITION_TABLE as Mn, DiffCalculator as Mt, bold as N, canonicalizeRegion as Nn, INTRINSIC_KEYS as Nt, extractDeploymentEventError as O, MIGRATE_TMP_PREFIX as On, s3BucketDualStackDomainName as Ot, cyan as P, derivePartitionAndUrlSuffix as Pn, describeTypeWithThrottleRetry as Pt, slowCcOperationTimeoutMs as Q, MissingCdkCliError as Qn, BOOTSTRAP_MARKER_PREFIX as Qt, yellow as R, resolveBucketRegion as Rn, LockManager as Rt, ccRoutedFinalSnapshotError as S, resolveStateBucketWithDefaultAndSource as Sn, isSingleDynamicReferenceToken as St, refusesFinalSnapshot as T, warnDeprecatedNoPrefixCliFlag as Tn, scrubResourceRecord as Tt, secretBearingStateKeyWarning as U, AssetError as Un, stringifyValue as Ut, exportAliasCollisionScrubWarning as V, resetAwsClients as Vn, shouldRetainResource as Vt, stateKeySecretExposure as W, CdkdError as Wn, WorkGraph as Wt, findSilentDropProperties as X, LocalStartServiceError as Xn, stripControlChars as Xt, findActionableSilentDrops as Y, LocalMigrateError as Yn, escapeRegExp$1 as Yt, CloudControlProvider as Z, LockError as Zn, AssetModeResolver as Zt, IMPLICIT_DELETE_DEPENDENCIES as _, resolveApp as _n, STATE_SOURCED_CROSS_GENERATION_RULES as _t, DeploymentEventsStore as a, buildDenyExternalAccessPolicy as an, StackTerminationProtectionError as ar, WAFv2WebACLProvider as at, PRE_DELETE_SNAPSHOT_TYPES as b, resolveSkipPrefix as bn, createSecretMasker as bt, producerRegionsFromState as c, getDockerCmd as cn, formatError as cr, assertRegionMatch as ct, updatePartialMessage as d, AssetManifestLoader as dn, withErrorHandling as dr, configStringRefusal as dt, getBootstrapMarkerKey as en, PartialFailureError as er, isTerminationProtectionPropagationError as et, updatePartialReason as f, getDockerImageBySourceHash as fn, isMarkedNonRetryable as fr, readConfigString as ft, maskingRetryLogger as g, getLegacyStateBucketName as gn, __exportAll as gr, requireConfigString as gt, withResourceDeadline as h, getDefaultStateBucketName as hn, markNonRetryable as hr, requireConfigObject as ht, DeploymentEventsReader as i, validateContainerRepoName as in, StackHasActiveImportsError as ir, refStateLookupFromResource as it, renderStatefulReason as j, expectedOwnerParam as jn, applyRoleArnIfSet as jt, MULTI_REGION_RECREATE_BLOCKED_TYPES as k, findLargeInlineResources as kn, s3BucketRegionalDomainName as kt, replayFailedOperations as l, runDockerForeground as ln, isCdkdError as lr, coerceCfnBoolean as lt, deleteSkipReason as m, synthesisStatusMessage as mn, isThrottlingError as mr, requireConfigArray as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, readBootstrapMarkerBody as nn, ResourceTimeoutError as nr, cfnRefValueFromPhysicalId as nt, planFailedOps as o, buildDockerImage as on, StateError as or, normalizeAwsTagsToCfn as ot, UNSPECIFIED_SKIP_REASON as p, Synthesizer as pn, isRetryableTransientError as pr, replayWarn as pt, clearOnUpdateRemoval as q, DeployCancelledError as qn, loadPublishableAssetManifest as qt, DeployEngine as r, validateAssetBucketName as rn, ResourceUpdateNotSupportedError as rr, getAccountInfo as rt, planRollback as s, formatDockerLoginError as sn, SynthesisError as sr, resolveExplicitPhysicalId as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, parseBootstrapMarker as tn, ProvisioningError as tr, IntrinsicFunctionResolver as tt, replayRollback as u, runDockerStreaming as un, normalizeAwsError as ur, configBooleanRefusal as ut, computeImplicitDeleteEdges as v, resolveAutoAssetStorage as vn, STATE_SOURCED_READBACK_RULES as vt, isFinalSnapshotError as w, stateBucketExistenceConfirmed as wn, redactSecretsForState as wt, buildFinalSnapshotIdentifier as x, resolveStateBucketWithDefault as xn, dynamicReferenceTokens as xt, ATOMIC_FINAL_SNAPSHOT_TYPES as y, resolveCaptureObservedState as yn, TEMPLATE_SOURCED_RULES as yt, collectDeclaredOutputNames as z, AwsClients as zn, S3StateBackend as zt };
28150
- //# sourceMappingURL=deploy-engine-BJQbni1s.js.map
28396
+ export { isInterruptedWaitError as $, LocalMigrateError as $n, escapeRegExp$1 as $t, isStatefulRecreateTargetSync as A, CFN_TEMPLATE_BODY_LIMIT as An, s3BucketArn as At, collectPublishedOutputNames as B, processStackMessages as Bn, DagBuilder as Bt, createPreDeleteFinalSnapshot as C, resolveCaptureObservedState as Cn, TEMPLATE_SOURCED_RULES as Ct, makeCanonicalizePropertiesFn as D, resolveUseCdkBootstrapAssets as Dn, maskSecretsInText as Dt, unsupportedFinalSnapshotError as E, resolveStateBucketWithDefaultAndSource as En, isSingleDynamicReferenceToken as Et, gray as F, expectedOwnerParam as Fn, applyRoleArnIfSet as Ft, IAMRoleProvider as G, resetAwsClients as Gn, shouldRetainResource as Gt, isExportAliasCollision as H, resolveBucketRegion as Hn, LockManager as Ht, green as I, PARTITION_TABLE as In, DiffCalculator as It, ProviderRegistry as J, CdkdError as Jn, WorkGraph as Jt, collectInlinePolicyNamesManagedBySiblings as K, setAwsClients as Kn, AssetPublisher as Kt, red as L, canonicalizeRegion as Ln, INTRINSIC_KEYS as Lt, formatResourceLine as M, MIGRATE_TMP_PREFIX as Mn, s3BucketDualStackDomainName as Mt, bold as N, findLargeInlineResources as Nn, s3BucketRegionalDomainName as Nt, extractDeploymentEventError as O, stateBucketExistenceConfirmed as On, redactSecretsForState as Ot, cyan as P, uploadCfnTemplate as Pn, s3BucketWebsiteUrl as Pt, endCommandInterruptScope as Q, LocalInvokeBuildError as Qn, rewriteTemplateAssetReferences as Qt, yellow as R, derivePartitionAndUrlSuffix as Rn, describeTypeWithThrottleRetry as Rt, ccRoutedFinalSnapshotError as S, resolveAutoAssetStorage as Sn, STATE_SOURCED_READBACK_RULES as St, refusesFinalSnapshot as T, resolveStateBucketWithDefault as Tn, dynamicReferenceTokens as Tt, secretBearingStateKeyWarning as U, AwsClients as Un, S3StateBackend as Ut, exportAliasCollisionScrubWarning as V, clearBucketRegionCache as Vn, TemplateParser as Vt, stateKeySecretExposure as W, getAwsClients as Wn, rebuildClientForBucketRegion as Wt, findSilentDropProperties as X, DependencyError as Xn, createAssetRedirectResolver as Xt, findActionableSilentDrops as Y, ConfigError as Yn, buildAssetRedirectMap as Yt, beginCommandInterruptScope as Z, DeployCancelledError as Zn, loadPublishableAssetManifest as Zt, IMPLICIT_DELETE_DEPENDENCIES as _, Synthesizer as _n, isRetryableTransientError as _r, replayWarn as _t, DeploymentEventsStore as a, parseBootstrapMarker as an, ProvisioningError as ar, IntrinsicFunctionResolver as at, PRE_DELETE_SNAPSHOT_TYPES as b, getLegacyStateBucketName as bn, __exportAll as br, requireConfigString as bt, producerRegionsFromState as c, validateContainerRepoName as cn, StackHasActiveImportsError as cr, refStateLookupFromResource as ct, updatePartialMessage as d, formatDockerLoginError as dn, SynthesisError as dr, resolveExplicitPhysicalId as dt, stripControlChars as en, LocalStartServiceError as er, startInterruptWatch as et, updatePartialReason as f, getDockerCmd as fn, formatError as fr, assertRegionMatch as ft, maskingRetryLogger as g, getDockerImageBySourceHash as gn, isMarkedNonRetryable as gr, readConfigString as gt, withResourceDeadline as h, AssetManifestLoader as hn, withErrorHandling as hr, configStringRefusal as ht, DeploymentEventsReader as i, getBootstrapMarkerKey as in, PartialFailureError as ir, isTerminationProtectionPropagationError as it, renderStatefulReason as j, CFN_TEMPLATE_URL_LIMIT as jn, s3BucketDomainName as jt, MULTI_REGION_RECREATE_BLOCKED_TYPES as k, warnDeprecatedNoPrefixCliFlag as kn, scrubResourceRecord as kt, replayFailedOperations as l, buildDenyExternalAccessPolicy as ln, StackTerminationProtectionError as lr, WAFv2WebACLProvider as lt, deleteSkipReason as m, runDockerStreaming as mn, normalizeAwsError as mr, configBooleanRefusal as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, BOOTSTRAP_MARKER_PREFIX as nn, MissingCdkCliError as nr, slowCcOperationTimeoutMs as nt, planFailedOps as o, readBootstrapMarkerBody as on, ResourceTimeoutError as or, cfnRefValueFromPhysicalId as ot, UNSPECIFIED_SKIP_REASON as p, runDockerForeground as pn, isCdkdError as pr, coerceCfnBoolean as pt, clearOnUpdateRemoval as q, AssetError as qn, stringifyValue as qt, DeployEngine as r, ensureAssetStorage as rn, NestedStackChildDirectDestroyError as rr, disableInstanceApiTermination as rt, planRollback as s, validateAssetBucketName as sn, ResourceUpdateNotSupportedError as sr, getAccountInfo as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, AssetModeResolver as tn, LockError as tr, CloudControlProvider as tt, replayRollback as u, buildDockerImage as un, StateError as ur, normalizeAwsTagsToCfn as ut, computeImplicitDeleteEdges as v, synthesisStatusMessage as vn, isThrottlingError as vr, requireConfigArray as vt, isFinalSnapshotError as w, resolveSkipPrefix as wn, createSecretMasker as wt, buildFinalSnapshotIdentifier as x, resolveApp as xn, STATE_SOURCED_CROSS_GENERATION_RULES as xt, ATOMIC_FINAL_SNAPSHOT_TYPES as y, getDefaultStateBucketName as yn, markNonRetryable as yr, requireConfigObject as yt, collectDeclaredOutputNames as z, AssemblyReader as zn, withRetry as zt };
28397
+ //# sourceMappingURL=deploy-engine-BpZWPiaL.js.map