@go-to-k/cdkd 0.283.30 → 0.283.31

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.
@@ -9925,40 +9925,88 @@ function buildNeedleRegex(values) {
9925
9925
  if (needles.length === 0) return void 0;
9926
9926
  return new RegExp(needles.map(escapeRegExp).join("|"), "g");
9927
9927
  }
9928
- /** The bag was produced by resolving the source: same shape, template source. */
9928
+ /**
9929
+ * The bag was produced by resolving the source: same shape, template source.
9930
+ *
9931
+ * `sourceIsSameGeneration` is FALSE despite the name, and that is the whole
9932
+ * lesson of issue #1917's review: the RULES describe the source, but the deploy
9933
+ * engine's persist choke point applies them to every record in the state map,
9934
+ * including ones this pass never rewrote. A template can never certify the
9935
+ * generation of the bag it is walked against.
9936
+ */
9929
9937
  const TEMPLATE_DERIVED_RULES = {
9930
9938
  descendArrays: true,
9931
- trustAnyExpression: false
9939
+ trustAnyExpression: false,
9940
+ sourceIsSameGeneration: false
9941
+ };
9942
+ /**
9943
+ * An AWS readback, or a persisted STATE bag, projected from the TEMPLATE: no
9944
+ * relaxation applies.
9945
+ *
9946
+ * One constant covers both bags because the template is what decides all three
9947
+ * rules here, and it decides them identically: shapes may diverge (no
9948
+ * positional descent), the template carries PUBLIC ssm expressions (no blanket
9949
+ * trust), and it is a different generation from anything it is walked against
9950
+ * (no source-takes-precedence on an expression-shaped leaf). An earlier draft
9951
+ * split this into a second `TEMPLATE_SOURCED_STATE_BAG_RULES` for `cdkd scrub`;
9952
+ * the two ended up byte-identical once the axis moved from CALLER to
9953
+ * GENERATION, and two identical constants are a drift hazard, not a
9954
+ * distinction.
9955
+ */
9956
+ const TEMPLATE_SOURCED_RULES = {
9957
+ descendArrays: false,
9958
+ trustAnyExpression: false,
9959
+ sourceIsSameGeneration: false
9932
9960
  };
9933
- /** An AWS readback projected from a persisted STATE bag. */
9961
+ /** An AWS readback projected from THIS record's own persisted STATE bag. */
9934
9962
  const STATE_SOURCED_READBACK_RULES = {
9935
9963
  descendArrays: false,
9936
- trustAnyExpression: true
9964
+ trustAnyExpression: true,
9965
+ sourceIsSameGeneration: true
9937
9966
  };
9938
- /** An AWS readback projected from the TEMPLATE: neither relaxation applies. */
9939
- const TEMPLATE_SOURCED_READBACK_RULES = {
9967
+ /**
9968
+ * A STATE source that is no longer this bag's own generation — `cdkd scrub`'s
9969
+ * `observedProperties` walk (issue #1917 review).
9970
+ *
9971
+ * It differs from {@link STATE_SOURCED_READBACK_RULES} on one flag, and the
9972
+ * difference is not cosmetic. Scrub positions `properties` against TODAY's
9973
+ * template BEFORE the observed bag is walked, so the "record's own properties"
9974
+ * that serve as the observed source may already carry an expression the stack
9975
+ * has never deployed. Taking that source for an observed leaf that ALREADY
9976
+ * holds an expression rewrites the drift baseline onto an undeployed
9977
+ * reference — which `cdkd drift --revert` then pushes to AWS.
9978
+ *
9979
+ * `trustAnyExpression` stays TRUE: the source is still a STATE bag, holding no
9980
+ * public expressions, and that relaxation is what lets scrub clean a legacy
9981
+ * PLAINTEXT observed leaf (issue #1900) rather than falling back to a value
9982
+ * scan that an old state file gives no needles for.
9983
+ */
9984
+ const STATE_SOURCED_CROSS_GENERATION_RULES = {
9940
9985
  descendArrays: false,
9941
- trustAnyExpression: false
9986
+ trustAnyExpression: true,
9987
+ sourceIsSameGeneration: false
9942
9988
  };
9943
9989
  /**
9944
- * The bag was produced by resolving a STATE source — both relaxations apply.
9990
+ * The bag was produced by resolving a STATE source — every relaxation applies.
9945
9991
  *
9946
9992
  * The rollback replay is the case (issue #1910): `resolveReplayProps` resolves
9947
9993
  * the JOURNALED bag and the provider's `effectiveProperties` come back from
9948
9994
  * that, so the two have identical structure and positional array descent is
9949
- * sound exactly as it is for a template-derived bag. And the source is a
9950
- * persisted record, which holds no PUBLIC expressions — a `String` ssm
9951
- * reference is stored resolved — so any `{{resolve:...}}` in it is by
9952
- * construction a secret.
9995
+ * sound exactly as it is for a template-derived bag. The source is a persisted
9996
+ * record, which holds no PUBLIC expressions — a `String` ssm reference is
9997
+ * stored resolved — so any `{{resolve:...}}` in it is by construction a secret.
9998
+ * And it is the SAME generation the bag was resolved from, one statement
9999
+ * earlier in the same call, which is as strong as that claim ever gets.
9953
10000
  *
9954
- * Using `STATE_SOURCED_READBACK_RULES` here instead would be wrong in the
9955
- * quiet direction: it turns array descent OFF, so a secret nested in a
9956
- * `Tags[]` / ECS `secrets[]` element falls to the value scan and a colliding
9957
- * pair still collapses there.
10001
+ * Using a `*_SOURCED_*` constant here instead would be wrong in the quiet
10002
+ * direction: it turns positional array descent OFF for a bag that genuinely
10003
+ * does correspond positionally, and drops the generation claim for the one
10004
+ * writer that can actually make it.
9958
10005
  */
9959
10006
  const STATE_DERIVED_RULES = {
9960
10007
  descendArrays: true,
9961
- trustAnyExpression: true
10008
+ trustAnyExpression: true,
10009
+ sourceIsSameGeneration: true
9962
10010
  };
9963
10011
  function isDynamicReferenceString(value) {
9964
10012
  return typeof value === "string" && value.includes("{{resolve:");
@@ -10252,6 +10300,103 @@ function positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions) {
10252
10300
  return matched;
10253
10301
  }
10254
10302
  /**
10303
+ * Keys tried, in order, when pairing two arrays whose ORDER cannot be trusted
10304
+ * (issue #1915).
10305
+ *
10306
+ * Both are the identity field of an unordered CloudFormation list that really
10307
+ * does carry secrets: `Name` is the ECS `ContainerDefinitions[]` /
10308
+ * `Environment[]` / `Secrets[]` and CodeBuild `EnvironmentVariables[]` shape,
10309
+ * `Key` is the `Tags[]` shape the drift normalizer already keys on
10310
+ * (`canonicalizeTagListsDeep` in `src/analyzer/drift-normalize.ts`). The list
10311
+ * is deliberately SHORT: an entry is only useful when it is a genuine identity,
10312
+ * and a wrong entry costs a refused pairing rather than a wrong one (see
10313
+ * {@link identityKeyFor}), so widening it buys little and has to be justified
10314
+ * per shape.
10315
+ *
10316
+ * Worth naming rather than leaving to be rediscovered: `drift-normalize.ts`
10317
+ * deliberately moved its GENERAL case OFF heuristics like this one, onto
10318
+ * provider-DECLARED paths (`getDriftUnorderedPaths` + `matchesPathPrefix`),
10319
+ * after issue #1783 showed a heuristic claiming order-independence for a list
10320
+ * that was order-SIGNIFICANT (`KeySchema`). Only its `Tags[]` pass is still a
10321
+ * heuristic. This module diverges on purpose, because the two failure modes are
10322
+ * not comparable: there, a wrong claim SUPPRESSES real drift; here, the worst a
10323
+ * wrong pairing key can do is fail the uniqueness test and refuse, leaving the
10324
+ * leaf exactly where the value scan already had it. If that ever stops being
10325
+ * true — if a pairing gains the power to DELETE or REORDER rather than only to
10326
+ * rewrite a matched leaf — this list has to move to a declared seam too.
10327
+ */
10328
+ const ARRAY_IDENTITY_KEYS = ["Name", "Key"];
10329
+ /**
10330
+ * Is every element of `items` a plain object carrying a NON-EMPTY OWN string at
10331
+ * `key`, with no two elements sharing a value?
10332
+ *
10333
+ * `Object.hasOwn` for the same reason the object walk below uses it: without
10334
+ * it the prototype chain answers for a key like `constructor`, and while state
10335
+ * that came from `JSON.parse` cannot carry one, this module is called with
10336
+ * caller-constructed bags too and the two walks disagreeing is the kind of gap
10337
+ * that only shows up once something else changes.
10338
+ *
10339
+ * The empty string is excluded because it is not a distinguishing identity —
10340
+ * the same reason the value scan refuses it as a needle. Two elements both
10341
+ * carrying `Name: ''` would otherwise pair on "equality" that means nothing.
10342
+ */
10343
+ function isUniquelyKeyedBy(items, key) {
10344
+ if (items.length === 0) return false;
10345
+ const seen = /* @__PURE__ */ new Set();
10346
+ for (const item of items) {
10347
+ if (!isPlainObject$2(item) || !Object.hasOwn(item, key)) return false;
10348
+ const id = item[key];
10349
+ if (typeof id !== "string" || id === "") return false;
10350
+ if (seen.has(id)) return false;
10351
+ seen.add(id);
10352
+ }
10353
+ return true;
10354
+ }
10355
+ /**
10356
+ * Pick a key that identifies the elements of BOTH arrays, or `undefined` when
10357
+ * none does (issue #1915).
10358
+ *
10359
+ * This is what lets a leaf nested in an ARRAY be positioned on a path where
10360
+ * positional descent is refused. `descendArrays: false` is not a claim that the
10361
+ * bag and source elements are unrelated — it is a claim that their ORDER does
10362
+ * not correspond, because AWS does not preserve list order (the reason
10363
+ * `src/analyzer/drift-normalize.ts` exists). Matching by an identity FIELD
10364
+ * answers the order objection directly instead of working around it, so the
10365
+ * relaxation is sound on every rules constant and is deliberately NOT gated on
10366
+ * one.
10367
+ *
10368
+ * Requiring uniqueness WITHIN each array is what makes a pairing impossible to
10369
+ * get wrong: pairing is by string EQUALITY, so a bag element can only ever meet
10370
+ * the source element carrying the same identity, and uniqueness means there is
10371
+ * at most one of those. A key that is not really an identity (a repeated enum
10372
+ * value) fails the uniqueness test and refuses the whole pairing rather than
10373
+ * producing a plausible-looking wrong one. An element with no partner is not
10374
+ * guessed at either — it falls to the value scan, exactly as the whole array
10375
+ * did before.
10376
+ *
10377
+ * Keys are tried in {@link ARRAY_IDENTITY_KEYS} order and the FIRST one that
10378
+ * qualifies on both sides wins; a key that fails does not veto the next one.
10379
+ *
10380
+ * Two shapes this deliberately does NOT reach, stated so they are bounds rather
10381
+ * than surprises — both fail closed, leaving the leaf to the value scan:
10382
+ *
10383
+ * - **The identity field itself holds a secret.** The source element carries
10384
+ * `{Name: '{{resolve:...}}'}` and the bag element the resolved plaintext, so
10385
+ * the two never pair and the element's other leaves are not reached either.
10386
+ * Closing it would mean pairing on a field whose two sides are KNOWN to
10387
+ * differ, i.e. exactly the guessing the uniqueness rule exists to forbid. On
10388
+ * the unchanged-resource path the value scan is also a no-op, so such a leaf
10389
+ * keeps its plaintext — narrow (an identity field is a name, not a
10390
+ * credential) but real.
10391
+ * - **Arrays of arrays.** `M: [[{Name, Value}]]` pairs nothing, because the
10392
+ * OUTER elements are arrays rather than plain objects and have no identity
10393
+ * field to key on. Positional descent into the outer list would reintroduce
10394
+ * the order assumption this function exists to avoid.
10395
+ */
10396
+ function identityKeyFor(bag, source) {
10397
+ for (const key of ARRAY_IDENTITY_KEYS) if (isUniquelyKeyedBy(bag, key) && isUniquelyKeyedBy(source, key)) return key;
10398
+ }
10399
+ /**
10255
10400
  * PATH-based redaction: walk `bag` alongside a SOURCE bag that still carries the
10256
10401
  * unresolved `{{resolve:...}}` expressions, and wherever the source leaf is such
10257
10402
  * a string, persist THAT string verbatim.
@@ -10284,16 +10429,41 @@ function positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions) {
10284
10429
  * where neither is.
10285
10430
  */
10286
10431
  function redactByPath(bag, source, secrets, rules, secretExpressions) {
10287
- if (typeof bag === "string" && isSingleDynamicReferenceToken(bag)) return bag;
10288
10432
  if (isDynamicReferenceString(source) && typeof bag === "string") {
10289
- if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions))) return source;
10433
+ if (isSingleDynamicReferenceToken(source) && (rules.trustAnyExpression || isKnownSecretExpression(source, secretExpressions))) {
10434
+ if (!rules.sourceIsSameGeneration && isSingleDynamicReferenceToken(bag)) return secrets.get(bag) ?? bag;
10435
+ return source;
10436
+ }
10290
10437
  return redactSecretsForState(bag, secrets);
10291
10438
  }
10292
10439
  if (typeof bag === "string" && isPlainObject$2(source)) {
10293
10440
  const positioned = positionByIntrinsicSkeleton(bag, source, secrets, secretExpressions);
10294
10441
  if (positioned !== void 0) return positioned;
10295
10442
  }
10296
- if (rules.descendArrays && Array.isArray(bag) && Array.isArray(source) && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions));
10443
+ if (Array.isArray(bag) && Array.isArray(source)) {
10444
+ const key = identityKeyFor(bag, source);
10445
+ if (key !== void 0) {
10446
+ const sourceIndexById = /* @__PURE__ */ new Map();
10447
+ source.forEach((item, i) => {
10448
+ sourceIndexById.set(item[key], i);
10449
+ });
10450
+ let orderPreserved = true;
10451
+ const partnerIndex = bag.map((item, i) => {
10452
+ const j = sourceIndexById.get(item[key]);
10453
+ if (j === void 0) return -1;
10454
+ if (j !== i) orderPreserved = false;
10455
+ return j;
10456
+ });
10457
+ const positionalIsExact = rules.descendArrays && bag.length === source.length && orderPreserved;
10458
+ return bag.map((item, i) => {
10459
+ const j = partnerIndex[i];
10460
+ if (j >= 0) return redactByPath(item, source[j], secrets, rules, secretExpressions);
10461
+ if (positionalIsExact) return redactByPath(item, source[i], secrets, rules, secretExpressions);
10462
+ return redactSecretsForState(item, secrets);
10463
+ });
10464
+ }
10465
+ if (rules.descendArrays && bag.length === source.length) return bag.map((item, i) => redactByPath(item, source[i], secrets, rules, secretExpressions));
10466
+ }
10297
10467
  if (isPlainObject$2(bag) && isPlainObject$2(source)) {
10298
10468
  const out = {};
10299
10469
  for (const [k, v] of Object.entries(bag)) out[k] = Object.hasOwn(source, k) ? redactByPath(v, source[k], secrets, rules, secretExpressions) : redactSecretsForState(v, secrets);
@@ -10319,6 +10489,7 @@ function redactSecretsForState(bag, secrets, source, rules = TEMPLATE_DERIVED_RU
10319
10489
  if (typeof value === "string") {
10320
10490
  const whole = wholeValueExpr(value);
10321
10491
  if (whole !== void 0) return whole;
10492
+ if (isSingleDynamicReferenceToken(value)) return value;
10322
10493
  if (!regex) return value;
10323
10494
  regex.lastIndex = 0;
10324
10495
  if (!regex.test(value)) return value;
@@ -10342,13 +10513,23 @@ function redactSecretsForState(bag, secrets, source, rules = TEMPLATE_DERIVED_RU
10342
10513
  * changed, or the input by identity when there are no secrets — so callers can
10343
10514
  * detect a no-op cheaply. Shared by the deploy engine's save choke point and
10344
10515
  * the `cdkd scrub` command so both scrub the same three fields identically.
10345
- */
10346
- function scrubResourceRecord(record, secrets, sourceProperties) {
10516
+ *
10517
+ * `observedRules` overrides the rules the `observedProperties` walk would
10518
+ * otherwise DERIVE from whether a `sourceProperties` bag was supplied. Exactly
10519
+ * one caller needs it and the reason is not obvious, so it is a parameter
10520
+ * rather than another derivation: `cdkd scrub` has already repositioned
10521
+ * `properties` against TODAY's template by the time it calls this, so the
10522
+ * "record's own properties" this walk falls back to are no longer the same
10523
+ * GENERATION as the observed bag beside them (issue #1917 review). Left
10524
+ * unspecified, the derivation below is right for every other caller, whose
10525
+ * `properties` reach this function untouched.
10526
+ */
10527
+ function scrubResourceRecord(record, secrets, sourceProperties, observedRules) {
10347
10528
  if (secrets.size === 0 && sourceProperties === void 0 && !record.observedProperties) return record;
10348
10529
  const next = { ...record };
10349
10530
  next.properties = redactSecretsForState(record.properties, secrets, sourceProperties);
10350
10531
  if (record.attributes) next.attributes = redactSecretsForState(record.attributes, secrets);
10351
- if (record.observedProperties) next.observedProperties = redactSecretsForState(record.observedProperties, secrets, sourceProperties ?? next.properties, sourceProperties === void 0 ? STATE_SOURCED_READBACK_RULES : TEMPLATE_SOURCED_READBACK_RULES);
10532
+ if (record.observedProperties) next.observedProperties = redactSecretsForState(record.observedProperties, secrets, sourceProperties ?? next.properties, observedRules ?? (sourceProperties === void 0 ? STATE_SOURCED_READBACK_RULES : TEMPLATE_SOURCED_RULES));
10352
10533
  return next;
10353
10534
  }
10354
10535
  /**
@@ -14895,7 +15076,7 @@ var CloudControlProvider = class {
14895
15076
  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);
14896
15077
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
14897
15078
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
14898
- const { ASGProvider } = await import("./asg-provider-BpVWOeU3.js").then((n) => n.n);
15079
+ const { ASGProvider } = await import("./asg-provider-SQ0V0nFd.js").then((n) => n.n);
14899
15080
  return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
14900
15081
  }
14901
15082
  const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
@@ -21526,16 +21707,22 @@ async function resolveReplayProps(props, resolver, secrets) {
21526
21707
  * deploy reports a change that never converges — the same defect the four
21527
21708
  * deploy-side writers had, arriving here through the replay instead.
21528
21709
  *
21529
- * It takes `STATE_DERIVED_RULES`, which is BOTH relaxations. The source is a
21710
+ * It takes `STATE_DERIVED_RULES`, which is every relaxation. The source is a
21530
21711
  * persisted record, so it holds no PUBLIC expressions (a `String` ssm reference
21531
21712
  * is stored resolved) and any `{{resolve:...}}` in it is by construction a
21532
21713
  * secret — that is `trustAnyExpression`. And the bag WAS produced by resolving
21533
21714
  * that source (`resolveReplayProps` -> the provider's `effectiveProperties`),
21534
21715
  * so the two have identical structure and positional array descent is sound —
21535
- * that is `descendArrays`. Using `STATE_SOURCED_READBACK_RULES` here reads
21536
- * plausible and is wrong in the quiet direction: it turns array descent off, so
21537
- * a secret nested in a `Tags[]` / ECS `secrets[]` element would still collapse
21538
- * on the replay path.
21716
+ * that is `descendArrays`. It is also the SAME generation, resolved one
21717
+ * statement earlier in this call — that is `sourceIsSameGeneration`, and this
21718
+ * writer is one of only two that can honestly claim it.
21719
+ *
21720
+ * Using `STATE_SOURCED_READBACK_RULES` here reads plausible and is wrong in the
21721
+ * quiet direction: it turns positional array descent off. Since issue #1915 a
21722
+ * `Tags[]` / ECS `Environment[]` element is reached by KEYED descent either
21723
+ * way, so the concrete loss is narrower than it was — it is a list whose
21724
+ * elements carry no `Name` / `Key` identity, which only positional descent can
21725
+ * walk.
21539
21726
  *
21540
21727
  * No-op when the op resolved no secret.
21541
21728
  */
@@ -22107,7 +22294,7 @@ const FLUSH_INTERVAL_MS = 2e3;
22107
22294
  const FLUSH_EVENT_THRESHOLD = 50;
22108
22295
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
22109
22296
  function getCdkdVersion() {
22110
- return "0.283.30";
22297
+ return "0.283.31";
22111
22298
  }
22112
22299
  /**
22113
22300
  * Generate a time-sortable unique run id, e.g.
@@ -24489,5 +24676,5 @@ var DeployEngine = class {
24489
24676
  };
24490
24677
 
24491
24678
  //#endregion
24492
- export { coerceCfnBoolean as $, resolveApp as $t, cyan as A, LocalInvokeBuildError as An, createAssetRedirectResolver as At, findSilentDropProperties as B, StackHasActiveImportsError as Bn, validateContainerRepoName as Bt, makeCanonicalizePropertiesFn as C, resetAwsClients as Cn, S3StateBackend as Ct, renderStatefulReason as D, ConfigError as Dn, stringifyValue as Dt, isStatefulRecreateTargetSync as E, CdkdError as En, AssetPublisher as Et, IAMRoleProvider as F, NestedStackChildDirectDestroyError as Fn, BOOTSTRAP_MARKER_PREFIX as Ft, IntrinsicFunctionResolver as G, isCdkdError as Gn, runDockerForeground as Gt, slowCcOperationTimeoutMs as H, StateError as Hn, buildDockerImage as Ht, collectInlinePolicyNamesManagedBySiblings as I, PartialFailureError as In, ensureAssetStorage as It, refStateLookupFromResource as J, isMarkedNonRetryable as Jn, getDockerImageBySourceHash as Jt, cfnRefValueFromPhysicalId as K, normalizeAwsError as Kn, runDockerStreaming as Kt, clearOnUpdateRemoval as L, ProvisioningError as Ln, getBootstrapMarkerKey as Lt, green as M, LocalStartServiceError as Mn, rewriteTemplateAssetReferences as Mt, red as N, LockError as Nn, escapeRegExp$1 as Nt, formatResourceLine as O, DependencyError as On, WorkGraph as Ot, yellow as P, MissingCdkCliError as Pn, AssetModeResolver as Pt, assertRegionMatch as Q, __exportAll as Qn, getLegacyStateBucketName as Qt, ProviderRegistry as R, ResourceTimeoutError as Rn, parseBootstrapMarker as Rt, unsupportedFinalSnapshotError as S, getAwsClients as Sn, LockManager as St, MULTI_REGION_RECREATE_BLOCKED_TYPES as T, AssetError as Tn, shouldRetainResource as Tt, disableInstanceApiTermination as U, SynthesisError as Un, formatDockerLoginError as Ut, CloudControlProvider as V, StackTerminationProtectionError as Vn, buildDenyExternalAccessPolicy as Vt, isTerminationProtectionPropagationError as W, formatError as Wn, getDockerCmd as Wt, normalizeAwsTagsToCfn as X, isThrottlingError as Xn, synthesisStatusMessage as Xt, WAFv2WebACLProvider as Y, isRetryableTransientError as Yn, Synthesizer as Yt, resolveExplicitPhysicalId as Z, markNonRetryable as Zn, getDefaultStateBucketName as Zt, buildFinalSnapshotIdentifier as _, AssemblyReader as _n, INTRINSIC_KEYS as _t, DeploymentEventsStore as a, resolveUseCdkBootstrapAssets as an, requireConfigObject as at, isFinalSnapshotError as b, resolveBucketRegion as bn, DagBuilder as bt, replayFailedOperations as c, CFN_TEMPLATE_BODY_LIMIT as cn, redactSecretsForState as ct, deleteSkipReason as d, findLargeInlineResources as dn, s3BucketDomainName as dt, resolveAutoAssetStorage as en, configBooleanRefusal as et, withResourceDeadline as f, uploadCfnTemplate as fn, s3BucketDualStackDomainName as ft, PRE_DELETE_SNAPSHOT_TYPES as g, derivePartitionAndUrlSuffix as gn, DiffCalculator as gt, ATOMIC_FINAL_SNAPSHOT_TYPES as h, canonicalizeRegion as hn, applyRoleArnIfSet as ht, DeploymentEventsReader as i, resolveStateBucketWithDefaultAndSource as in, requireConfigArray as it, gray as j, LocalMigrateError as jn, loadPublishableAssetManifest as jt, bold as k, DeployCancelledError as kn, buildAssetRedirectMap as kt, replayRollback as l, CFN_TEMPLATE_URL_LIMIT as ln, scrubResourceRecord as lt, computeImplicitDeleteEdges as m, PARTITION_TABLE as mn, s3BucketWebsiteUrl as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveSkipPrefix as nn, readConfigString as nt, planFailedOps as o, stateBucketExistenceConfirmed as on, requireConfigString as ot, IMPLICIT_DELETE_DEPENDENCIES as p, expectedOwnerParam as pn, s3BucketRegionalDomainName as pt, getAccountInfo as q, withErrorHandling as qn, AssetManifestLoader as qt, DeployEngine as r, resolveStateBucketWithDefault as rn, replayWarn as rt, planRollback as s, warnDeprecatedNoPrefixCliFlag as sn, TEMPLATE_SOURCED_READBACK_RULES as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveCaptureObservedState as tn, configStringRefusal as tt, UNSPECIFIED_SKIP_REASON as u, MIGRATE_TMP_PREFIX as un, s3BucketArn as ut, ccRoutedFinalSnapshotError as v, processStackMessages as vn, describeTypeWithThrottleRetry as vt, extractDeploymentEventError as w, setAwsClients as wn, rebuildClientForBucketRegion as wt, refusesFinalSnapshot as x, AwsClients as xn, TemplateParser as xt, createPreDeleteFinalSnapshot as y, clearBucketRegionCache as yn, withRetry as yt, findActionableSilentDrops as z, ResourceUpdateNotSupportedError as zn, validateAssetBucketName as zt };
24493
- //# sourceMappingURL=deploy-engine-Bb4ECtz3.js.map
24679
+ export { coerceCfnBoolean as $, __exportAll as $n, getLegacyStateBucketName as $t, cyan as A, DeployCancelledError as An, buildAssetRedirectMap as At, findSilentDropProperties as B, ResourceUpdateNotSupportedError as Bn, validateAssetBucketName as Bt, makeCanonicalizePropertiesFn as C, getAwsClients as Cn, LockManager as Ct, renderStatefulReason as D, CdkdError as Dn, AssetPublisher as Dt, isStatefulRecreateTargetSync as E, AssetError as En, shouldRetainResource as Et, IAMRoleProvider as F, MissingCdkCliError as Fn, AssetModeResolver as Ft, IntrinsicFunctionResolver as G, formatError as Gn, getDockerCmd as Gt, slowCcOperationTimeoutMs as H, StackTerminationProtectionError as Hn, buildDenyExternalAccessPolicy as Ht, collectInlinePolicyNamesManagedBySiblings as I, NestedStackChildDirectDestroyError as In, BOOTSTRAP_MARKER_PREFIX as It, refStateLookupFromResource as J, withErrorHandling as Jn, AssetManifestLoader as Jt, cfnRefValueFromPhysicalId as K, isCdkdError as Kn, runDockerForeground as Kt, clearOnUpdateRemoval as L, PartialFailureError as Ln, ensureAssetStorage as Lt, green as M, LocalMigrateError as Mn, loadPublishableAssetManifest as Mt, red as N, LocalStartServiceError as Nn, rewriteTemplateAssetReferences as Nt, formatResourceLine as O, ConfigError as On, stringifyValue as Ot, yellow as P, LockError as Pn, escapeRegExp$1 as Pt, assertRegionMatch as Q, markNonRetryable as Qn, getDefaultStateBucketName as Qt, ProviderRegistry as R, ProvisioningError as Rn, getBootstrapMarkerKey as Rt, unsupportedFinalSnapshotError as S, AwsClients as Sn, TemplateParser as St, MULTI_REGION_RECREATE_BLOCKED_TYPES as T, setAwsClients as Tn, rebuildClientForBucketRegion as Tt, disableInstanceApiTermination as U, StateError as Un, buildDockerImage as Ut, CloudControlProvider as V, StackHasActiveImportsError as Vn, validateContainerRepoName as Vt, isTerminationProtectionPropagationError as W, SynthesisError as Wn, formatDockerLoginError as Wt, normalizeAwsTagsToCfn as X, isRetryableTransientError as Xn, Synthesizer as Xt, WAFv2WebACLProvider as Y, isMarkedNonRetryable as Yn, getDockerImageBySourceHash as Yt, resolveExplicitPhysicalId as Z, isThrottlingError as Zn, synthesisStatusMessage as Zt, buildFinalSnapshotIdentifier as _, derivePartitionAndUrlSuffix as _n, DiffCalculator as _t, DeploymentEventsStore as a, resolveStateBucketWithDefaultAndSource as an, requireConfigObject as at, isFinalSnapshotError as b, clearBucketRegionCache as bn, withRetry as bt, replayFailedOperations as c, warnDeprecatedNoPrefixCliFlag as cn, TEMPLATE_SOURCED_RULES as ct, deleteSkipReason as d, MIGRATE_TMP_PREFIX as dn, s3BucketArn as dt, resolveApp as en, configBooleanRefusal as et, withResourceDeadline as f, findLargeInlineResources as fn, s3BucketDomainName as ft, PRE_DELETE_SNAPSHOT_TYPES as g, canonicalizeRegion as gn, applyRoleArnIfSet as gt, ATOMIC_FINAL_SNAPSHOT_TYPES as h, PARTITION_TABLE as hn, s3BucketWebsiteUrl as ht, DeploymentEventsReader as i, resolveStateBucketWithDefault as in, requireConfigArray as it, gray as j, LocalInvokeBuildError as jn, createAssetRedirectResolver as jt, bold as k, DependencyError as kn, WorkGraph as kt, replayRollback as l, CFN_TEMPLATE_BODY_LIMIT as ln, redactSecretsForState as lt, computeImplicitDeleteEdges as m, expectedOwnerParam as mn, s3BucketRegionalDomainName as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveCaptureObservedState as nn, readConfigString as nt, planFailedOps as o, resolveUseCdkBootstrapAssets as on, requireConfigString as ot, IMPLICIT_DELETE_DEPENDENCIES as p, uploadCfnTemplate as pn, s3BucketDualStackDomainName as pt, getAccountInfo as q, normalizeAwsError as qn, runDockerStreaming as qt, DeployEngine as r, resolveSkipPrefix as rn, replayWarn as rt, planRollback as s, stateBucketExistenceConfirmed as sn, STATE_SOURCED_CROSS_GENERATION_RULES as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveAutoAssetStorage as tn, configStringRefusal as tt, UNSPECIFIED_SKIP_REASON as u, CFN_TEMPLATE_URL_LIMIT as un, scrubResourceRecord as ut, ccRoutedFinalSnapshotError as v, AssemblyReader as vn, INTRINSIC_KEYS as vt, extractDeploymentEventError as w, resetAwsClients as wn, S3StateBackend as wt, refusesFinalSnapshot as x, resolveBucketRegion as xn, DagBuilder as xt, createPreDeleteFinalSnapshot as y, processStackMessages as yn, describeTypeWithThrottleRetry as yt, findActionableSilentDrops as z, ResourceTimeoutError as zn, parseBootstrapMarker as zt };
24680
+ //# sourceMappingURL=deploy-engine-AWFiXyhp.js.map