@composurecdk/cloudwatch 0.8.2 → 0.8.4

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.
Files changed (38) hide show
  1. package/README.md +12 -0
  2. package/dist/commonjs/alarm-definition-builder.d.ts +8 -0
  3. package/dist/commonjs/alarm-definition-builder.d.ts.map +1 -1
  4. package/dist/commonjs/alarm-definition-builder.js +13 -0
  5. package/dist/commonjs/alarm-definition-builder.js.map +1 -1
  6. package/dist/commonjs/alarm-definition.d.ts +6 -2
  7. package/dist/commonjs/alarm-definition.d.ts.map +1 -1
  8. package/dist/commonjs/alarm-name.d.ts +6 -4
  9. package/dist/commonjs/alarm-name.d.ts.map +1 -1
  10. package/dist/commonjs/alarm-name.js +24 -15
  11. package/dist/commonjs/alarm-name.js.map +1 -1
  12. package/dist/commonjs/create-alarms.d.ts +5 -1
  13. package/dist/commonjs/create-alarms.d.ts.map +1 -1
  14. package/dist/commonjs/create-alarms.js +10 -2
  15. package/dist/commonjs/create-alarms.js.map +1 -1
  16. package/dist/commonjs/index.d.ts +14 -0
  17. package/dist/commonjs/index.d.ts.map +1 -1
  18. package/dist/commonjs/index.js +15 -3
  19. package/dist/commonjs/index.js.map +1 -1
  20. package/dist/esm/alarm-definition-builder.d.ts +8 -0
  21. package/dist/esm/alarm-definition-builder.d.ts.map +1 -1
  22. package/dist/esm/alarm-definition-builder.js +13 -0
  23. package/dist/esm/alarm-definition-builder.js.map +1 -1
  24. package/dist/esm/alarm-definition.d.ts +6 -2
  25. package/dist/esm/alarm-definition.d.ts.map +1 -1
  26. package/dist/esm/alarm-name.d.ts +6 -4
  27. package/dist/esm/alarm-name.d.ts.map +1 -1
  28. package/dist/esm/alarm-name.js +23 -15
  29. package/dist/esm/alarm-name.js.map +1 -1
  30. package/dist/esm/create-alarms.d.ts +5 -1
  31. package/dist/esm/create-alarms.d.ts.map +1 -1
  32. package/dist/esm/create-alarms.js +10 -2
  33. package/dist/esm/create-alarms.js.map +1 -1
  34. package/dist/esm/index.d.ts +14 -0
  35. package/dist/esm/index.d.ts.map +1 -1
  36. package/dist/esm/index.js +12 -0
  37. package/dist/esm/index.js.map +1 -1
  38. package/package.json +2 -1
package/README.md CHANGED
@@ -93,6 +93,18 @@ const alarms = createAlarms(scope, "MyFunction", definitions);
93
93
 
94
94
  Construct IDs follow the pattern `${id}${Capitalize(key)}Alarm` (e.g., `MyFunctionErrorsAlarm`).
95
95
 
96
+ ### Construct IDs
97
+
98
+ Set `constructId` on a definition to override that pattern — the value is used verbatim:
99
+
100
+ ```ts
101
+ const alarms = createAlarms(scope, "MyFunction", [
102
+ { key: "errors", constructId: "LegacyErrorsAlarm" /* …rest of the definition */ },
103
+ ]);
104
+ ```
105
+
106
+ This exists for grandfathering: a CloudFormation logical ID is derived from the construct ID, and changing it replaces (drops + recreates) the alarm on deploy. Pinning `constructId` to the existing ID lets you adopt `createAlarms` for alarms already in a deployed stack without churn. Unlike the alarm _name_ — which can be rewritten at synth time by [alarmNamePolicy](#alarmnamepolicy) — the construct ID is fixed at construction, so it can only be set here, per definition. `AlarmDefinitionBuilder` exposes the same control via `.constructId(id)`.
107
+
96
108
  ### Alarm names
97
109
 
98
110
  Each alarm receives an explicit, hierarchical name of the form `${stackName}/${kebab(id)}/${kebab(key)}` (e.g. `payments-prod/checkout-fn/errors`) instead of CloudFormation's hash-suffixed default. Slashes render hierarchy in the console; segments are kebab-cased so names scan cleanly in dashboards, oncall pages, and email subjects, where word separation matters more than in code.
@@ -20,6 +20,14 @@ export declare class AlarmDefinitionBuilder<TConstruct> {
20
20
  * the {@link alarmName} helper to construct branded values.
21
21
  */
22
22
  alarmName(name: AlarmName): this;
23
+ /**
24
+ * Sets an explicit construct id for the created alarm, used verbatim. When
25
+ * unset, {@link createAlarms} derives `` `${id}${Capitalize(key)}Alarm` ``.
26
+ *
27
+ * Set this to preserve an existing CloudFormation logical ID when
28
+ * grandfathering alarms into a stack.
29
+ */
30
+ constructId(id: string): this;
23
31
  threshold(value: number): this;
24
32
  greaterThan(): this;
25
33
  greaterThanOrEqual(): this;
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB,CAAC,UAAU;;gBAWhC,GAAG,EAAE,MAAM;IAIvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,GAAG,IAAI;IAK7D;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAK1B,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe;CAwBhD"}
1
+ {"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB,CAAC,UAAU;;gBAYhC,GAAG,EAAE,MAAM;IAIvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,GAAG,IAAI;IAK7D;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKhC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAK1B,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe;CAyBhD"}
@@ -14,6 +14,7 @@ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
14
14
  class AlarmDefinitionBuilder {
15
15
  #key;
16
16
  #alarmName;
17
+ #constructId;
17
18
  #metricFactory;
18
19
  #threshold = 0;
19
20
  #comparisonOperator = aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD;
@@ -37,6 +38,17 @@ class AlarmDefinitionBuilder {
37
38
  this.#alarmName = name;
38
39
  return this;
39
40
  }
41
+ /**
42
+ * Sets an explicit construct id for the created alarm, used verbatim. When
43
+ * unset, {@link createAlarms} derives `` `${id}${Capitalize(key)}Alarm` ``.
44
+ *
45
+ * Set this to preserve an existing CloudFormation logical ID when
46
+ * grandfathering alarms into a stack.
47
+ */
48
+ constructId(id) {
49
+ this.#constructId = id;
50
+ return this;
51
+ }
40
52
  threshold(value) {
41
53
  this.#threshold = value;
42
54
  return this;
@@ -86,6 +98,7 @@ class AlarmDefinitionBuilder {
86
98
  const definition = {
87
99
  key: this.#key,
88
100
  alarmName: this.#alarmName,
101
+ constructId: this.#constructId,
89
102
  metric: this.#metricFactory(construct),
90
103
  threshold: this.#threshold,
91
104
  comparisonOperator: this.#comparisonOperator,
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,16 @@ export type AlarmMetric = Metric | MathExpression;
14
14
  * A fully-resolved alarm descriptor. All fields are required —
15
15
  * this is the canonical form consumed by {@link createAlarms}.
16
16
  *
17
- * `alarmName` is the only optional field: when omitted, {@link createAlarms}
18
- * derives a default via `defaultAlarmName(scope, id, key)`.
17
+ * `alarmName` and `constructId` are the optional fields:
18
+ * - `alarmName`: when omitted, {@link createAlarms} derives a default via
19
+ * `defaultAlarmName(scope, id, key)`.
20
+ * - `constructId`: when omitted, {@link createAlarms} derives the construct id
21
+ * as `` `${id}${Capitalize(key)}Alarm` ``.
19
22
  */
20
23
  export interface AlarmDefinition {
21
24
  key: string;
22
25
  alarmName?: AlarmName;
26
+ constructId?: string;
23
27
  metric: AlarmMetric;
24
28
  threshold: number;
25
29
  comparisonOperator: ComparisonOperator;
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -7,13 +7,15 @@ declare const alarmNameBrand: unique symbol;
7
7
  export type AlarmName = string & {
8
8
  readonly [alarmNameBrand]: true;
9
9
  };
10
+ /** Validates a CloudWatch alarm name against {@link ALARM_NAME}. @throws on invalid input. */
11
+ export declare function validateAlarmName(value: string): void;
10
12
  /**
11
- * Validates and brands a string as an {@link AlarmName}. The string is used
12
- * verbatim no sanitisation — so what the caller writes is exactly what
13
- * appears in CloudWatch.
13
+ * Validates and brands a string as an {@link AlarmName}. Surrounding whitespace
14
+ * is trimmed, then the value is used verbatim — so what the caller writes is
15
+ * exactly what appears in CloudWatch.
14
16
  *
15
17
  * @throws If the input is empty, exceeds 255 chars, or contains characters
16
- * outside CloudWatch's allowed set: `[A-Za-z0-9-_./#:()+ =@]`.
18
+ * outside CloudWatch's allowed set.
17
19
  */
18
20
  export declare function alarmName(input: string): AlarmName;
19
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-name.d.ts","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAM,GAAG,SAAS,CAG/E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
1
+ {"version":3,"file":"alarm-name.d.ts","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAiBrE,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAIlD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAM,GAAG,SAAS,CAG/E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
@@ -1,29 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAlarmName = validateAlarmName;
3
4
  exports.alarmName = alarmName;
4
5
  exports.joinAlarmName = joinAlarmName;
5
6
  exports.kebab = kebab;
6
- const VALID_CHARS = /^[A-Za-z0-9\-_./#:()+ =@]+$/;
7
- const MAX_LEN = 255;
7
+ const cloudformation_1 = require("@composurecdk/cloudformation");
8
8
  /**
9
- * Validates and brands a string as an {@link AlarmName}. The string is used
10
- * verbatim no sanitisation so what the caller writes is exactly what
11
- * appears in CloudWatch.
9
+ * The CloudWatch AlarmName constraint. Its character set is exactly the shared
10
+ * `charSets.ALNUM` + `charSets.AWS_NAME_PUNCT` spine with no property-specific
11
+ * tail a clean reuse of the catalogue fragments. See ADR-0010.
12
+ */
13
+ const ALARM_NAME = (0, cloudformation_1.stringConstraint)({
14
+ name: "CloudWatch AlarmName",
15
+ charClass: `${cloudformation_1.charSets.ALNUM}${cloudformation_1.charSets.AWS_NAME_PUNCT}`,
16
+ minLength: 1,
17
+ maxLength: 255,
18
+ allowed: "A-Z a-z 0-9 space and - _ . / # : ( ) + = @",
19
+ source: "https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html",
20
+ });
21
+ /** Validates a CloudWatch alarm name against {@link ALARM_NAME}. @throws on invalid input. */
22
+ function validateAlarmName(value) {
23
+ (0, cloudformation_1.validateString)(value, ALARM_NAME);
24
+ }
25
+ /**
26
+ * Validates and brands a string as an {@link AlarmName}. Surrounding whitespace
27
+ * is trimmed, then the value is used verbatim — so what the caller writes is
28
+ * exactly what appears in CloudWatch.
12
29
  *
13
30
  * @throws If the input is empty, exceeds 255 chars, or contains characters
14
- * outside CloudWatch's allowed set: `[A-Za-z0-9-_./#:()+ =@]`.
31
+ * outside CloudWatch's allowed set.
15
32
  */
16
33
  function alarmName(input) {
17
34
  const trimmed = input.trim();
18
- if (trimmed.length === 0) {
19
- throw new Error("alarm name cannot be empty");
20
- }
21
- if (trimmed.length > MAX_LEN) {
22
- throw new Error(`alarm name exceeds ${String(MAX_LEN)} chars: "${trimmed}"`);
23
- }
24
- if (!VALID_CHARS.test(trimmed)) {
25
- throw new Error(`alarm name contains invalid characters (allowed: A-Z a-z 0-9 - _ . / # : ( ) + = @ space): "${trimmed}"`);
26
- }
35
+ validateAlarmName(trimmed);
27
36
  return trimmed;
28
37
  }
29
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-name.js","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":";;AAoBA,8BAcC;AAQD,sCAGC;AAMD,sBAQC;AAlDD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,YAAY,OAAO,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,+FAA+F,OAAO,GAAG,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,OAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAA2B,EAAE,GAAG,GAAG,GAAG;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"alarm-name.js","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":";;AA2BA,8CAEC;AAUD,8BAIC;AAQD,sCAGC;AAMD,sBAQC;AApED,iEAA0F;AAW1F;;;;GAIG;AACH,MAAM,UAAU,GAAG,IAAA,iCAAgB,EAAC;IAClC,IAAI,EAAE,sBAAsB;IAC5B,SAAS,EAAE,GAAG,yBAAQ,CAAC,KAAK,GAAG,yBAAQ,CAAC,cAAc,EAAE;IACxD,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,6CAA6C;IACtD,MAAM,EACJ,0FAA0F;CAC7F,CAAC,CAAC;AAEH,8FAA8F;AAC9F,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,IAAA,+BAAc,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAA2B,EAAE,GAAG,GAAG,GAAG;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC"}
@@ -9,11 +9,15 @@ import type { AlarmDefinition } from "./alarm-definition.js";
9
9
  * otherwise it is derived from the scope, `id`, and `def.key` via
10
10
  * {@link defaultAlarmName}.
11
11
  *
12
+ * Each alarm's construct id is `${id}${Capitalize(key)}Alarm`, unless the
13
+ * definition supplies an explicit `constructId`, which is used verbatim (e.g.
14
+ * to preserve an existing logical ID when grandfathering).
15
+ *
12
16
  * @param scope - CDK construct scope.
13
17
  * @param id - Base identifier; each alarm's construct id is `${id}${Capitalize(key)}Alarm`.
14
18
  * @param definitions - Fully-resolved alarm definitions.
15
19
  * @returns A record mapping each definition's key to its created Alarm.
16
- * @throws If duplicate keys are found in the definitions.
20
+ * @throws If duplicate keys are found, or a supplied `constructId` is empty.
17
21
  */
18
22
  export declare function createAlarms(scope: IConstruct, id: string, definitions: AlarmDefinition[]): Record<string, Alarm>;
19
23
  //# sourceMappingURL=create-alarms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-alarms.d.ts","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAsBvB"}
1
+ {"version":3,"file":"create-alarms.d.ts","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CA0BvB"}
@@ -13,11 +13,15 @@ function capitalize(s) {
13
13
  * otherwise it is derived from the scope, `id`, and `def.key` via
14
14
  * {@link defaultAlarmName}.
15
15
  *
16
+ * Each alarm's construct id is `${id}${Capitalize(key)}Alarm`, unless the
17
+ * definition supplies an explicit `constructId`, which is used verbatim (e.g.
18
+ * to preserve an existing logical ID when grandfathering).
19
+ *
16
20
  * @param scope - CDK construct scope.
17
21
  * @param id - Base identifier; each alarm's construct id is `${id}${Capitalize(key)}Alarm`.
18
22
  * @param definitions - Fully-resolved alarm definitions.
19
23
  * @returns A record mapping each definition's key to its created Alarm.
20
- * @throws If duplicate keys are found in the definitions.
24
+ * @throws If duplicate keys are found, or a supplied `constructId` is empty.
21
25
  */
22
26
  function createAlarms(scope, id, definitions) {
23
27
  const alarms = {};
@@ -26,7 +30,11 @@ function createAlarms(scope, id, definitions) {
26
30
  throw new Error(`Duplicate alarm key "${def.key}". Custom alarms cannot use the same key as a recommended alarm. ` +
27
31
  `Disable the recommended alarm first, or use a different key.`);
28
32
  }
29
- alarms[def.key] = def.metric.createAlarm(scope, `${id}${capitalize(def.key)}Alarm`, {
33
+ if (def.constructId === "") {
34
+ throw new Error(`Alarm "${def.key}": constructId, when set, must be non-empty.`);
35
+ }
36
+ const constructId = def.constructId ?? `${id}${capitalize(def.key)}Alarm`;
37
+ alarms[def.key] = def.metric.createAlarm(scope, constructId, {
30
38
  alarmName: def.alarmName ?? (0, default_alarm_name_js_1.defaultAlarmName)(scope, id, def.key),
31
39
  threshold: def.threshold,
32
40
  evaluationPeriods: def.evaluationPeriods,
@@ -1 +1 @@
1
- {"version":3,"file":"create-alarms.js","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":";;AAuBA,oCA0BC;AA9CD,mEAA2D;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,YAAY,CAC1B,KAAiB,EACjB,EAAU,EACV,WAA8B;IAE9B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,GAAG,mEAAmE;gBAChG,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAClF,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAA,wCAAgB,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,GAAG,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"create-alarms.js","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":";;AA2BA,oCA8BC;AAtDD,mEAA2D;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,YAAY,CAC1B,KAAiB,EACjB,EAAU,EACV,WAA8B;IAE9B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,GAAG,mEAAmE;gBAChG,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,8CAA8C,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE;YAC3D,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAA,wCAAgB,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,GAAG,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { validateAlarmName } from "./alarm-name.js";
1
2
  export type { AlarmConfig, AlarmConfigDefaults } from "./alarm-config.js";
2
3
  export type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
3
4
  export { AlarmDefinitionBuilder } from "./alarm-definition-builder.js";
@@ -8,4 +9,17 @@ export { resolveAlarmConfig, type ResolvedAlarmConfig } from "./resolve-alarm-co
8
9
  export { alarmActionsPolicy } from "./policies/alarm-actions-policy.js";
9
10
  export type { AlarmActionsPolicyConfig, AlarmMatchContext, AlarmMatcher, } from "./policies/alarm-actions-policy.js";
10
11
  export { alarmNamePolicy, type AlarmNamePolicyConfig, type AlarmNameRule, type AlarmNameTransformContext, } from "./policies/alarm-name-policy.js";
12
+ /**
13
+ * This package's AWS-property constraints, grouped by application strategy.
14
+ * The `constraints.validate.*` / `constraints.sanitize.*` shape is identical in
15
+ * every builder package; the underlying constraint definition stays
16
+ * module-private. The branded {@link alarmName} constructor layers on top of the
17
+ * same validation. See ADR-0010.
18
+ */
19
+ export declare const constraints: {
20
+ validate: {
21
+ alarmName: typeof validateAlarmName;
22
+ };
23
+ sanitize: {};
24
+ };
11
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;;;;;CAGO,CAAC"}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.alarmNamePolicy = exports.alarmActionsPolicy = exports.resolveAlarmConfig = exports.createAlarms = exports.defaultAlarmName = exports.alarmName = exports.AlarmDefinitionBuilder = void 0;
3
+ exports.constraints = exports.alarmNamePolicy = exports.alarmActionsPolicy = exports.resolveAlarmConfig = exports.createAlarms = exports.defaultAlarmName = exports.alarmName = exports.AlarmDefinitionBuilder = void 0;
4
+ const alarm_name_js_1 = require("./alarm-name.js");
4
5
  var alarm_definition_builder_js_1 = require("./alarm-definition-builder.js");
5
6
  Object.defineProperty(exports, "AlarmDefinitionBuilder", { enumerable: true, get: function () { return alarm_definition_builder_js_1.AlarmDefinitionBuilder; } });
6
- var alarm_name_js_1 = require("./alarm-name.js");
7
- Object.defineProperty(exports, "alarmName", { enumerable: true, get: function () { return alarm_name_js_1.alarmName; } });
7
+ var alarm_name_js_2 = require("./alarm-name.js");
8
+ Object.defineProperty(exports, "alarmName", { enumerable: true, get: function () { return alarm_name_js_2.alarmName; } });
8
9
  var default_alarm_name_js_1 = require("./default-alarm-name.js");
9
10
  Object.defineProperty(exports, "defaultAlarmName", { enumerable: true, get: function () { return default_alarm_name_js_1.defaultAlarmName; } });
10
11
  var create_alarms_js_1 = require("./create-alarms.js");
@@ -15,4 +16,15 @@ var alarm_actions_policy_js_1 = require("./policies/alarm-actions-policy.js");
15
16
  Object.defineProperty(exports, "alarmActionsPolicy", { enumerable: true, get: function () { return alarm_actions_policy_js_1.alarmActionsPolicy; } });
16
17
  var alarm_name_policy_js_1 = require("./policies/alarm-name-policy.js");
17
18
  Object.defineProperty(exports, "alarmNamePolicy", { enumerable: true, get: function () { return alarm_name_policy_js_1.alarmNamePolicy; } });
19
+ /**
20
+ * This package's AWS-property constraints, grouped by application strategy.
21
+ * The `constraints.validate.*` / `constraints.sanitize.*` shape is identical in
22
+ * every builder package; the underlying constraint definition stays
23
+ * module-private. The branded {@link alarmName} constructor layers on top of the
24
+ * same validation. See ADR-0010.
25
+ */
26
+ exports.constraints = {
27
+ validate: { alarmName: alarm_name_js_1.validateAlarmName },
28
+ sanitize: {},
29
+ };
18
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,6EAAuE;AAA9D,qIAAA,sBAAsB,OAAA;AAC/B,iDAA4D;AAAnC,0GAAA,SAAS,OAAA;AAClC,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AACrB,qEAAyF;AAAhF,6HAAA,kBAAkB,OAAA;AAC3B,8EAAwE;AAA/D,6HAAA,kBAAkB,OAAA;AAM3B,wEAKyC;AAJvC,uHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,mDAAoD;AAIpD,6EAAuE;AAA9D,qIAAA,sBAAsB,OAAA;AAC/B,iDAA4D;AAAnC,0GAAA,SAAS,OAAA;AAClC,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AACrB,qEAAyF;AAAhF,6HAAA,kBAAkB,OAAA;AAC3B,8EAAwE;AAA/D,6HAAA,kBAAkB,OAAA;AAM3B,wEAKyC;AAJvC,uHAAA,eAAe,OAAA;AAMjB;;;;;;GAMG;AACU,QAAA,WAAW,GAAG;IACzB,QAAQ,EAAE,EAAE,SAAS,EAAE,iCAAiB,EAAE;IAC1C,QAAQ,EAAE,EAAE;CACiB,CAAC"}
@@ -20,6 +20,14 @@ export declare class AlarmDefinitionBuilder<TConstruct> {
20
20
  * the {@link alarmName} helper to construct branded values.
21
21
  */
22
22
  alarmName(name: AlarmName): this;
23
+ /**
24
+ * Sets an explicit construct id for the created alarm, used verbatim. When
25
+ * unset, {@link createAlarms} derives `` `${id}${Capitalize(key)}Alarm` ``.
26
+ *
27
+ * Set this to preserve an existing CloudFormation logical ID when
28
+ * grandfathering alarms into a stack.
29
+ */
30
+ constructId(id: string): this;
23
31
  threshold(value: number): this;
24
32
  greaterThan(): this;
25
33
  greaterThanOrEqual(): this;
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB,CAAC,UAAU;;gBAWhC,GAAG,EAAE,MAAM;IAIvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,GAAG,IAAI;IAK7D;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAK1B,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe;CAwBhD"}
1
+ {"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB,CAAC,UAAU;;gBAYhC,GAAG,EAAE,MAAM;IAIvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,GAAG,IAAI;IAK7D;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKhC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAK1B,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe;CAyBhD"}
@@ -11,6 +11,7 @@ import { ComparisonOperator, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch
11
11
  export class AlarmDefinitionBuilder {
12
12
  #key;
13
13
  #alarmName;
14
+ #constructId;
14
15
  #metricFactory;
15
16
  #threshold = 0;
16
17
  #comparisonOperator = ComparisonOperator.GREATER_THAN_THRESHOLD;
@@ -34,6 +35,17 @@ export class AlarmDefinitionBuilder {
34
35
  this.#alarmName = name;
35
36
  return this;
36
37
  }
38
+ /**
39
+ * Sets an explicit construct id for the created alarm, used verbatim. When
40
+ * unset, {@link createAlarms} derives `` `${id}${Capitalize(key)}Alarm` ``.
41
+ *
42
+ * Set this to preserve an existing CloudFormation logical ID when
43
+ * grandfathering alarms into a stack.
44
+ */
45
+ constructId(id) {
46
+ this.#constructId = id;
47
+ return this;
48
+ }
37
49
  threshold(value) {
38
50
  this.#threshold = value;
39
51
  return this;
@@ -83,6 +95,7 @@ export class AlarmDefinitionBuilder {
83
95
  const definition = {
84
96
  key: this.#key,
85
97
  alarmName: this.#alarmName,
98
+ constructId: this.#constructId,
86
99
  metric: this.#metricFactory(construct),
87
100
  threshold: this.#threshold,
88
101
  comparisonOperator: this.#comparisonOperator,
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAIlF;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAsB;IACxB,IAAI,CAAS;IACtB,UAAU,CAAa;IACvB,YAAY,CAAU;IACtB,cAAc,CAA0C;IACxD,UAAU,GAAG,CAAC,CAAC;IACf,mBAAmB,GAAG,kBAAkB,CAAC,sBAAsB,CAAC;IAChE,kBAAkB,GAAG,CAAC,CAAC;IACvB,kBAAkB,GAAG,CAAC,CAAC;IACvB,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC;IACnD,YAAY,GAAuD,EAAE,CAAC;IAEtE,YAAY,GAAW;QACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAA+C;QACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAe;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,EAAU;QACpB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,sBAAsB,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,kCAAkC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,+BAA+B,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,CAAS;QACzB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,CAAS;QACzB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,SAA2B;QAC1C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,IAAwD;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAqB;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,2BAA2B,IAAI,CAAC,IAAI,6CAA6C,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAoB;YAClC,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,UAAU,CAAC,WAAW;YACpB,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAE9F,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -14,12 +14,16 @@ export type AlarmMetric = Metric | MathExpression;
14
14
  * A fully-resolved alarm descriptor. All fields are required —
15
15
  * this is the canonical form consumed by {@link createAlarms}.
16
16
  *
17
- * `alarmName` is the only optional field: when omitted, {@link createAlarms}
18
- * derives a default via `defaultAlarmName(scope, id, key)`.
17
+ * `alarmName` and `constructId` are the optional fields:
18
+ * - `alarmName`: when omitted, {@link createAlarms} derives a default via
19
+ * `defaultAlarmName(scope, id, key)`.
20
+ * - `constructId`: when omitted, {@link createAlarms} derives the construct id
21
+ * as `` `${id}${Capitalize(key)}Alarm` ``.
19
22
  */
20
23
  export interface AlarmDefinition {
21
24
  key: string;
22
25
  alarmName?: AlarmName;
26
+ constructId?: string;
23
27
  metric: AlarmMetric;
24
28
  threshold: number;
25
29
  comparisonOperator: ComparisonOperator;
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -7,13 +7,15 @@ declare const alarmNameBrand: unique symbol;
7
7
  export type AlarmName = string & {
8
8
  readonly [alarmNameBrand]: true;
9
9
  };
10
+ /** Validates a CloudWatch alarm name against {@link ALARM_NAME}. @throws on invalid input. */
11
+ export declare function validateAlarmName(value: string): void;
10
12
  /**
11
- * Validates and brands a string as an {@link AlarmName}. The string is used
12
- * verbatim no sanitisation — so what the caller writes is exactly what
13
- * appears in CloudWatch.
13
+ * Validates and brands a string as an {@link AlarmName}. Surrounding whitespace
14
+ * is trimmed, then the value is used verbatim — so what the caller writes is
15
+ * exactly what appears in CloudWatch.
14
16
  *
15
17
  * @throws If the input is empty, exceeds 255 chars, or contains characters
16
- * outside CloudWatch's allowed set: `[A-Za-z0-9-_./#:()+ =@]`.
18
+ * outside CloudWatch's allowed set.
17
19
  */
18
20
  export declare function alarmName(input: string): AlarmName;
19
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-name.d.ts","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAM,GAAG,SAAS,CAG/E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
1
+ {"version":3,"file":"alarm-name.d.ts","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAiBrE,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAIlD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAM,GAAG,SAAS,CAG/E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
@@ -1,24 +1,32 @@
1
- const VALID_CHARS = /^[A-Za-z0-9\-_./#:()+ =@]+$/;
2
- const MAX_LEN = 255;
1
+ import { charSets, stringConstraint, validateString } from "@composurecdk/cloudformation";
3
2
  /**
4
- * Validates and brands a string as an {@link AlarmName}. The string is used
5
- * verbatim no sanitisation so what the caller writes is exactly what
6
- * appears in CloudWatch.
3
+ * The CloudWatch AlarmName constraint. Its character set is exactly the shared
4
+ * `charSets.ALNUM` + `charSets.AWS_NAME_PUNCT` spine with no property-specific
5
+ * tail a clean reuse of the catalogue fragments. See ADR-0010.
6
+ */
7
+ const ALARM_NAME = stringConstraint({
8
+ name: "CloudWatch AlarmName",
9
+ charClass: `${charSets.ALNUM}${charSets.AWS_NAME_PUNCT}`,
10
+ minLength: 1,
11
+ maxLength: 255,
12
+ allowed: "A-Z a-z 0-9 space and - _ . / # : ( ) + = @",
13
+ source: "https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html",
14
+ });
15
+ /** Validates a CloudWatch alarm name against {@link ALARM_NAME}. @throws on invalid input. */
16
+ export function validateAlarmName(value) {
17
+ validateString(value, ALARM_NAME);
18
+ }
19
+ /**
20
+ * Validates and brands a string as an {@link AlarmName}. Surrounding whitespace
21
+ * is trimmed, then the value is used verbatim — so what the caller writes is
22
+ * exactly what appears in CloudWatch.
7
23
  *
8
24
  * @throws If the input is empty, exceeds 255 chars, or contains characters
9
- * outside CloudWatch's allowed set: `[A-Za-z0-9-_./#:()+ =@]`.
25
+ * outside CloudWatch's allowed set.
10
26
  */
11
27
  export function alarmName(input) {
12
28
  const trimmed = input.trim();
13
- if (trimmed.length === 0) {
14
- throw new Error("alarm name cannot be empty");
15
- }
16
- if (trimmed.length > MAX_LEN) {
17
- throw new Error(`alarm name exceeds ${String(MAX_LEN)} chars: "${trimmed}"`);
18
- }
19
- if (!VALID_CHARS.test(trimmed)) {
20
- throw new Error(`alarm name contains invalid characters (allowed: A-Z a-z 0-9 - _ . / # : ( ) + = @ space): "${trimmed}"`);
21
- }
29
+ validateAlarmName(trimmed);
22
30
  return trimmed;
23
31
  }
24
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-name.js","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,YAAY,OAAO,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,+FAA+F,OAAO,GAAG,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,OAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,GAAG,GAAG,GAAG;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"alarm-name.js","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW1F;;;;GAIG;AACH,MAAM,UAAU,GAAG,gBAAgB,CAAC;IAClC,IAAI,EAAE,sBAAsB;IAC5B,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE;IACxD,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,6CAA6C;IACtD,MAAM,EACJ,0FAA0F;CAC7F,CAAC,CAAC;AAEH,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,GAAG,GAAG,GAAG;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC"}
@@ -9,11 +9,15 @@ import type { AlarmDefinition } from "./alarm-definition.js";
9
9
  * otherwise it is derived from the scope, `id`, and `def.key` via
10
10
  * {@link defaultAlarmName}.
11
11
  *
12
+ * Each alarm's construct id is `${id}${Capitalize(key)}Alarm`, unless the
13
+ * definition supplies an explicit `constructId`, which is used verbatim (e.g.
14
+ * to preserve an existing logical ID when grandfathering).
15
+ *
12
16
  * @param scope - CDK construct scope.
13
17
  * @param id - Base identifier; each alarm's construct id is `${id}${Capitalize(key)}Alarm`.
14
18
  * @param definitions - Fully-resolved alarm definitions.
15
19
  * @returns A record mapping each definition's key to its created Alarm.
16
- * @throws If duplicate keys are found in the definitions.
20
+ * @throws If duplicate keys are found, or a supplied `constructId` is empty.
17
21
  */
18
22
  export declare function createAlarms(scope: IConstruct, id: string, definitions: AlarmDefinition[]): Record<string, Alarm>;
19
23
  //# sourceMappingURL=create-alarms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-alarms.d.ts","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAsBvB"}
1
+ {"version":3,"file":"create-alarms.d.ts","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CA0BvB"}
@@ -10,11 +10,15 @@ function capitalize(s) {
10
10
  * otherwise it is derived from the scope, `id`, and `def.key` via
11
11
  * {@link defaultAlarmName}.
12
12
  *
13
+ * Each alarm's construct id is `${id}${Capitalize(key)}Alarm`, unless the
14
+ * definition supplies an explicit `constructId`, which is used verbatim (e.g.
15
+ * to preserve an existing logical ID when grandfathering).
16
+ *
13
17
  * @param scope - CDK construct scope.
14
18
  * @param id - Base identifier; each alarm's construct id is `${id}${Capitalize(key)}Alarm`.
15
19
  * @param definitions - Fully-resolved alarm definitions.
16
20
  * @returns A record mapping each definition's key to its created Alarm.
17
- * @throws If duplicate keys are found in the definitions.
21
+ * @throws If duplicate keys are found, or a supplied `constructId` is empty.
18
22
  */
19
23
  export function createAlarms(scope, id, definitions) {
20
24
  const alarms = {};
@@ -23,7 +27,11 @@ export function createAlarms(scope, id, definitions) {
23
27
  throw new Error(`Duplicate alarm key "${def.key}". Custom alarms cannot use the same key as a recommended alarm. ` +
24
28
  `Disable the recommended alarm first, or use a different key.`);
25
29
  }
26
- alarms[def.key] = def.metric.createAlarm(scope, `${id}${capitalize(def.key)}Alarm`, {
30
+ if (def.constructId === "") {
31
+ throw new Error(`Alarm "${def.key}": constructId, when set, must be non-empty.`);
32
+ }
33
+ const constructId = def.constructId ?? `${id}${capitalize(def.key)}Alarm`;
34
+ alarms[def.key] = def.metric.createAlarm(scope, constructId, {
27
35
  alarmName: def.alarmName ?? defaultAlarmName(scope, id, def.key),
28
36
  threshold: def.threshold,
29
37
  evaluationPeriods: def.evaluationPeriods,
@@ -1 +1 @@
1
- {"version":3,"file":"create-alarms.js","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAiB,EACjB,EAAU,EACV,WAA8B;IAE9B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,GAAG,mEAAmE;gBAChG,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAClF,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,GAAG,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"create-alarms.js","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAiB,EACjB,EAAU,EACV,WAA8B;IAE9B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,GAAG,mEAAmE;gBAChG,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,8CAA8C,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE;YAC3D,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,GAAG,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { validateAlarmName } from "./alarm-name.js";
1
2
  export type { AlarmConfig, AlarmConfigDefaults } from "./alarm-config.js";
2
3
  export type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
3
4
  export { AlarmDefinitionBuilder } from "./alarm-definition-builder.js";
@@ -8,4 +9,17 @@ export { resolveAlarmConfig, type ResolvedAlarmConfig } from "./resolve-alarm-co
8
9
  export { alarmActionsPolicy } from "./policies/alarm-actions-policy.js";
9
10
  export type { AlarmActionsPolicyConfig, AlarmMatchContext, AlarmMatcher, } from "./policies/alarm-actions-policy.js";
10
11
  export { alarmNamePolicy, type AlarmNamePolicyConfig, type AlarmNameRule, type AlarmNameTransformContext, } from "./policies/alarm-name-policy.js";
12
+ /**
13
+ * This package's AWS-property constraints, grouped by application strategy.
14
+ * The `constraints.validate.*` / `constraints.sanitize.*` shape is identical in
15
+ * every builder package; the underlying constraint definition stays
16
+ * module-private. The branded {@link alarmName} constructor layers on top of the
17
+ * same validation. See ADR-0010.
18
+ */
19
+ export declare const constraints: {
20
+ validate: {
21
+ alarmName: typeof validateAlarmName;
22
+ };
23
+ sanitize: {};
24
+ };
11
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;;;;;CAGO,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { validateAlarmName } from "./alarm-name.js";
1
2
  export { AlarmDefinitionBuilder } from "./alarm-definition-builder.js";
2
3
  export { alarmName } from "./alarm-name.js";
3
4
  export { defaultAlarmName } from "./default-alarm-name.js";
@@ -5,4 +6,15 @@ export { createAlarms } from "./create-alarms.js";
5
6
  export { resolveAlarmConfig } from "./resolve-alarm-config.js";
6
7
  export { alarmActionsPolicy } from "./policies/alarm-actions-policy.js";
7
8
  export { alarmNamePolicy, } from "./policies/alarm-name-policy.js";
9
+ /**
10
+ * This package's AWS-property constraints, grouped by application strategy.
11
+ * The `constraints.validate.*` / `constraints.sanitize.*` shape is identical in
12
+ * every builder package; the underlying constraint definition stays
13
+ * module-private. The branded {@link alarmName} constructor layers on top of the
14
+ * same validation. See ADR-0010.
15
+ */
16
+ export const constraints = {
17
+ validate: { alarmName: validateAlarmName },
18
+ sanitize: {},
19
+ };
8
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAkB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAA4B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAMxE,OAAO,EACL,eAAe,GAIhB,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAkB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAA4B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAMxE,OAAO,EACL,eAAe,GAIhB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAC1C,QAAQ,EAAE,EAAE;CACiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@composurecdk/cloudwatch",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "description": "Composable CloudWatch alarm primitives for composureCDK resource packages",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,6 +37,7 @@
37
37
  }
38
38
  },
39
39
  "peerDependencies": {
40
+ "@composurecdk/cloudformation": "^0.8.0",
40
41
  "aws-cdk-lib": "^2.1.0",
41
42
  "constructs": "^10.0.0"
42
43
  },