@m8t-stack/cli 0.2.94 → 0.2.96

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/dist/cli.js CHANGED
@@ -1487,7 +1487,7 @@ function installFoundryDnsShim() {
1487
1487
  }
1488
1488
 
1489
1489
  // src/lib/package-version.ts
1490
- var CLI_VERSION = "0.2.94";
1490
+ var CLI_VERSION = "0.2.96";
1491
1491
 
1492
1492
  // src/lib/render-error.ts
1493
1493
  init_errors();
@@ -21005,9 +21005,12 @@ function parseAssignSubscriptionRoles(v) {
21005
21005
  hint: "Use one of: true, false."
21006
21006
  });
21007
21007
  }
21008
+ function normalizeAzureLocation(location) {
21009
+ return location.trim().toLowerCase().replace(/\s+/g, "");
21010
+ }
21008
21011
  function buildBicepParams(p) {
21009
21012
  const params = [
21010
- `location=${p.location}`,
21013
+ `location=${normalizeAzureLocation(p.location)}`,
21011
21014
  `suffix=${p.suffix}`,
21012
21015
  `imageRef=${p.imageRef}`,
21013
21016
  `tenantId=${p.tenantId}`,
@@ -24948,6 +24951,16 @@ var KNOWN_NOISE = [
24948
24951
  { resourceType: "Microsoft.App/containerApps", pathPattern: /(^|\.)configuration\.secrets$/, reason: "shared relay secret is regenerated on every deployment \u2014 owned elsewhere" },
24949
24952
  { resourceType: "Microsoft.App/containerApps", pathPattern: /(^|\.)configuration\.secrets\[\d+\]\.value$/, reason: "shared relay secret is regenerated on every deployment \u2014 owned elsewhere" }
24950
24953
  ];
24954
+ var PROBE_LEAF = /\.probes\[\d+\]\./;
24955
+ var PROBE_TYPE_LEAF = /\.probes\[\d+\]\.type$/;
24956
+ function isProbeReordering(leaves) {
24957
+ const types = leaves.filter((l) => PROBE_TYPE_LEAF.test(l.path));
24958
+ if (types.length === 0) return false;
24959
+ const before = types.map((l) => l.before).filter((v) => typeof v === "string").sort();
24960
+ const after = types.map((l) => l.after).filter((v) => typeof v === "string").sort();
24961
+ if (before.length !== types.length || after.length !== types.length) return false;
24962
+ return before.every((v, i) => v === after[i]);
24963
+ }
24951
24964
  var shortName = (resourceId) => resourceId.startsWith("[") ? "(role assignment)" : resourceId.split("/").pop() ?? resourceId;
24952
24965
  function isArmExpression(v) {
24953
24966
  return typeof v === "string" && /^\[.*\b(reference|format|guid|subscriptionResourceId|extensionResourceId)\(/.test(v) && v.endsWith("]");
@@ -24978,8 +24991,14 @@ function classifyWhatIf(changes) {
24978
24991
  }
24979
24992
  const resourceType = deriveResourceType(c.resourceId);
24980
24993
  const resourceName = shortName(c.resourceId);
24981
- for (const leaf of flattenDelta(c.delta ?? [])) {
24994
+ const leaves = flattenDelta(c.delta ?? []);
24995
+ const probesReordered = isProbeReordering(leaves);
24996
+ for (const leaf of leaves) {
24982
24997
  const base = { resourceType, resourceName, path: leaf.path, before: leaf.before, after: leaf.after };
24998
+ if (probesReordered && PROBE_LEAF.test(leaf.path)) {
24999
+ noise.push({ ...base, reason: "probe array reordered by the RP; same probe set \u2014 no apply can reconcile it" });
25000
+ continue;
25001
+ }
24983
25002
  if (leaf.propertyChangeType === "NoEffect") {
24984
25003
  noise.push({ ...base, reason: "NoEffect (no-op)" });
24985
25004
  continue;