@composurecdk/cloudfront 0.4.3 → 0.4.5

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 (36) hide show
  1. package/README.md +53 -0
  2. package/dist/alarm-config.d.ts +56 -3
  3. package/dist/alarm-config.d.ts.map +1 -1
  4. package/dist/alarm-defaults.d.ts +14 -0
  5. package/dist/alarm-defaults.d.ts.map +1 -1
  6. package/dist/alarm-defaults.js +31 -0
  7. package/dist/alarm-defaults.js.map +1 -1
  8. package/dist/behavior-function-alarms.d.ts +44 -0
  9. package/dist/behavior-function-alarms.d.ts.map +1 -0
  10. package/dist/behavior-function-alarms.js +136 -0
  11. package/dist/behavior-function-alarms.js.map +1 -0
  12. package/dist/cloudfront-alarm-builder.d.ts +133 -0
  13. package/dist/cloudfront-alarm-builder.d.ts.map +1 -0
  14. package/dist/cloudfront-alarm-builder.js +131 -0
  15. package/dist/cloudfront-alarm-builder.js.map +1 -0
  16. package/dist/defaults.d.ts +6 -1
  17. package/dist/defaults.d.ts.map +1 -1
  18. package/dist/defaults.js +13 -1
  19. package/dist/defaults.js.map +1 -1
  20. package/dist/distribution-alarms.d.ts +0 -17
  21. package/dist/distribution-alarms.d.ts.map +1 -1
  22. package/dist/distribution-alarms.js +1 -24
  23. package/dist/distribution-alarms.js.map +1 -1
  24. package/dist/distribution-builder.d.ts +224 -62
  25. package/dist/distribution-builder.d.ts.map +1 -1
  26. package/dist/distribution-builder.js +61 -21
  27. package/dist/distribution-builder.js.map +1 -1
  28. package/dist/index.d.ts +5 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/resolve-behaviors.d.ts +56 -0
  33. package/dist/resolve-behaviors.d.ts.map +1 -0
  34. package/dist/resolve-behaviors.js +98 -0
  35. package/dist/resolve-behaviors.js.map +1 -0
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"distribution-builder.d.ts","sourceRoot":"","sources":["../src/distribution-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,iBAAiB,EACjB,iBAAiB,GAAG,eAAe,GAAG,aAAa,CACpD;IACC;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,kBAAkB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,GAAG,KAAK,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,YAAY,EAAE,YAAY,CAAC;IAE3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,CAAC;AAE3F,cAAM,mBAAoB,YAAW,SAAS,CAAC,yBAAyB,CAAC;;IACvE,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAM;IAI9C,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CACT,KAAK,EAAE,sBAAsB,CAAC,YAAY,CAAC,KACxC,sBAAsB,CAAC,YAAY,CAAC,GACxC,IAAI;IAKP;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAKzC,KAAK,CACH,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,yBAAyB;CA4E7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,IAAI,oBAAoB,CAEhE"}
1
+ {"version":3,"file":"distribution-builder.d.ts","sourceRoot":"","sources":["../src/distribution-builder.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,15 @@ import { RemovalPolicy } from "aws-cdk-lib";
4
4
  import { Builder, resolve, } from "@composurecdk/core";
5
5
  import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
6
6
  import { createBucketBuilder } from "@composurecdk/s3";
7
- import { createDistributionAlarms } from "./distribution-alarms.js";
8
7
  import { DISTRIBUTION_DEFAULTS } from "./defaults.js";
8
+ import { resolveBehaviors } from "./resolve-behaviors.js";
9
+ import { pathPatternSlug } from "./behavior-function-alarms.js";
10
+ import { buildCloudFrontAlarms } from "./cloudfront-alarm-builder.js";
9
11
  class DistributionBuilder {
10
12
  props = {};
11
13
  #origin;
14
+ #additionalBehaviors = new Map();
15
+ #behaviorSlugs = new Map();
12
16
  #customAlarms = [];
13
17
  addAlarm(key, configure) {
14
18
  this.#customAlarms.push(configure(new AlarmDefinitionBuilder(key)));
@@ -27,6 +31,32 @@ class DistributionBuilder {
27
31
  this.#origin = origin;
28
32
  return this;
29
33
  }
34
+ /**
35
+ * Adds an additional cache behavior for a path pattern. The behavior's
36
+ * origin is required (concrete or Resolvable). Any inline functions are
37
+ * created by the builder and receive per-behavior alarms scoped to the
38
+ * path pattern.
39
+ *
40
+ * @throws If a behavior for the same path pattern has already been added.
41
+ */
42
+ behavior(pathPattern, config) {
43
+ if (this.#additionalBehaviors.has(pathPattern)) {
44
+ throw new Error(`DistributionBuilder: behavior for path pattern "${pathPattern}" is already defined.`);
45
+ }
46
+ // Alarm keys and Function construct ids are derived from a PascalCase slug
47
+ // of the path pattern. Patterns that differ only by stripped characters
48
+ // (e.g. `/*.html` vs `*.html`) would collide downstream at createAlarms() —
49
+ // surface the collision here with the patterns named.
50
+ const slug = pathPatternSlug(pathPattern);
51
+ const existingPattern = this.#behaviorSlugs.get(slug);
52
+ if (existingPattern !== undefined) {
53
+ throw new Error(`DistributionBuilder: path pattern "${pathPattern}" produces the same alarm/construct ` +
54
+ `slug ("${slug}") as "${existingPattern}". Pick distinct patterns.`);
55
+ }
56
+ this.#behaviorSlugs.set(slug, pathPattern);
57
+ this.#additionalBehaviors.set(pathPattern, config);
58
+ return this;
59
+ }
30
60
  build(scope, id, context) {
31
61
  const resolvedOrigin = this.#origin ? resolve(this.#origin, context ?? {}) : undefined;
32
62
  if (!resolvedOrigin) {
@@ -35,7 +65,7 @@ class DistributionBuilder {
35
65
  }
36
66
  const { accessLogging, certificate, defaultBehavior: userBehavior, recommendedAlarms: alarmConfig, ...distProps } = this.props;
37
67
  const resolvedCertificate = certificate ? resolve(certificate, context ?? {}) : undefined;
38
- const { accessLogging: defaultAccessLogging, defaultBehavior: defaultBehavior, ...cdkDefaults } = DISTRIBUTION_DEFAULTS;
68
+ const { accessLogging: defaultAccessLogging, defaultBehavior: defaultBehaviorDefaults, ...cdkDefaults } = DISTRIBUTION_DEFAULTS;
39
69
  const autoAccessLog = (accessLogging ?? defaultAccessLogging) && !distProps.logBucket;
40
70
  let accessLogsBucket;
41
71
  let accessLogProps = {};
@@ -52,16 +82,24 @@ class DistributionBuilder {
52
82
  logBucket: accessLogsBucket,
53
83
  };
54
84
  }
85
+ const behaviors = resolveBehaviors({
86
+ scope,
87
+ id,
88
+ context: context ?? {},
89
+ defaultOrigin: resolvedOrigin,
90
+ defaultBehavior: userBehavior,
91
+ defaultBehaviorDefaults: defaultBehaviorDefaults ?? {},
92
+ additionalBehaviors: this.#additionalBehaviors,
93
+ });
55
94
  const mergedProps = {
56
95
  ...cdkDefaults,
57
96
  ...accessLogProps,
58
97
  ...distProps,
59
98
  ...(resolvedCertificate ? { certificate: resolvedCertificate } : {}),
60
- defaultBehavior: {
61
- ...defaultBehavior,
62
- ...userBehavior,
63
- origin: resolvedOrigin,
64
- },
99
+ defaultBehavior: behaviors.defaultBehavior,
100
+ ...(Object.keys(behaviors.additionalBehaviors).length > 0
101
+ ? { additionalBehaviors: behaviors.additionalBehaviors }
102
+ : {}),
65
103
  };
66
104
  const distribution = new Distribution(scope, id, mergedProps);
67
105
  // Ensure CloudFront is deleted before the access logs bucket during stack teardown.
@@ -69,10 +107,11 @@ class DistributionBuilder {
69
107
  if (accessLogsBucket) {
70
108
  distribution.node.addDependency(accessLogsBucket);
71
109
  }
72
- const alarms = createDistributionAlarms(scope, id, distribution, alarmConfig, this.#customAlarms);
110
+ const alarms = buildCloudFrontAlarms(scope, id, { distribution, functions: behaviors.functions }, { recommendedAlarms: alarmConfig, customAlarms: this.#customAlarms });
73
111
  return {
74
112
  distribution,
75
113
  accessLogsBucket,
114
+ functions: behaviors.functions,
76
115
  alarms,
77
116
  };
78
117
  }
@@ -83,26 +122,27 @@ class DistributionBuilder {
83
122
  * This is the entry point for defining a CloudFront distribution component.
84
123
  * The returned builder exposes every {@link DistributionBuilderProps} property
85
124
  * as a fluent setter/getter, plus {@link IDistributionBuilder.origin | origin()}
86
- * for setting the default origin with Ref support. It implements {@link Lifecycle}
87
- * for use with {@link compose}.
125
+ * for setting the default origin with Ref support and
126
+ * {@link IDistributionBuilder.behavior | behavior()} for path-pattern behaviors.
127
+ * It implements {@link Lifecycle} for use with {@link compose}.
88
128
  *
89
129
  * @returns A fluent builder for a CloudFront distribution.
90
130
  *
91
131
  * @example
92
132
  * ```ts
93
133
  * const cdn = createDistributionBuilder()
94
- * .origin(ref("site", (r: BucketBuilderResult) =>
134
+ * .origin(ref<BucketBuilderResult>("site", (r) =>
95
135
  * S3BucketOrigin.withOriginAccessControl(r.bucket)))
96
- * .comment("Community website CDN");
97
- *
98
- * // Use standalone:
99
- * const result = cdn.build(stack, "CDN");
100
- *
101
- * // Or compose into a system:
102
- * const system = compose(
103
- * { site: createBucketBuilder(), cdn },
104
- * { site: [], cdn: ["site"] },
105
- * );
136
+ * .defaultBehavior({
137
+ * functions: [{
138
+ * eventType: FunctionEventType.VIEWER_REQUEST,
139
+ * code: FunctionCode.fromFile({ filePath: "src/edge/rewrite.js" }),
140
+ * }],
141
+ * })
142
+ * .behavior("/api/*", {
143
+ * origin: apiOrigin,
144
+ * cachePolicy: CachePolicy.CACHING_DISABLED,
145
+ * });
106
146
  * ```
107
147
  */
108
148
  export function createDistributionBuilder() {
@@ -1 +1 @@
1
- {"version":3,"file":"distribution-builder.js","sourceRoot":"","sources":["../src/distribution-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"distribution-builder.js","sourceRoot":"","sources":["../src/distribution-builder.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { createDistributionBuilder, type DistributionBuilderProps, type DistributionBuilderResult, type IDistributionBuilder, } from "./distribution-builder.js";
2
- export { DISTRIBUTION_DEFAULTS } from "./defaults.js";
3
- export { type DistributionAlarmConfig } from "./alarm-config.js";
4
- export { DISTRIBUTION_ALARM_DEFAULTS } from "./alarm-defaults.js";
1
+ export { createDistributionBuilder, type DistributionBuilderProps, type DistributionBuilderResult, type IDistributionBuilder, type DefaultBehaviorConfig, type AdditionalBehaviorConfig, type InlineFunctionDefinition, } from "./distribution-builder.js";
2
+ export { createCloudFrontAlarmBuilder, type CloudFrontAlarmBuilderProps, type CloudFrontAlarmBuilderResult, type ICloudFrontAlarmBuilder, } from "./cloudfront-alarm-builder.js";
3
+ export { DISTRIBUTION_DEFAULTS, INLINE_FUNCTION_DEFAULTS } from "./defaults.js";
4
+ export { type DistributionAlarmConfig, type FunctionAlarmConfig } from "./alarm-config.js";
5
+ export { DISTRIBUTION_ALARM_DEFAULTS, FUNCTION_ALARM_DEFAULTS } from "./alarm-defaults.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createDistributionBuilder, } from "./distribution-builder.js";
2
- export { DISTRIBUTION_DEFAULTS } from "./defaults.js";
3
- export { DISTRIBUTION_ALARM_DEFAULTS } from "./alarm-defaults.js";
2
+ export { createCloudFrontAlarmBuilder, } from "./cloudfront-alarm-builder.js";
3
+ export { DISTRIBUTION_DEFAULTS, INLINE_FUNCTION_DEFAULTS } from "./defaults.js";
4
+ export { DISTRIBUTION_ALARM_DEFAULTS, FUNCTION_ALARM_DEFAULTS } from "./alarm-defaults.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAI1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAO1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,GAI7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEhF,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { type AddBehaviorOptions, type BehaviorOptions, type IOrigin } from "aws-cdk-lib/aws-cloudfront";
2
+ import type { IConstruct } from "constructs";
3
+ import type { AdditionalBehaviorConfig, DefaultBehaviorConfig, FunctionEntry } from "./distribution-builder.js";
4
+ /**
5
+ * Input required to resolve the default behavior, all additional behaviors,
6
+ * and any inline CloudFront Functions into concrete CDK objects.
7
+ */
8
+ export interface ResolveBehaviorsInput {
9
+ /** The construct scope under which functions and behaviors are created. */
10
+ scope: IConstruct;
11
+ /** The distribution's construct id — used as a prefix for Function ids. */
12
+ id: string;
13
+ /** Compose context forwarded to {@link resolve}. Empty record if unused. */
14
+ context: Record<string, object>;
15
+ /** The already-resolved default origin. */
16
+ defaultOrigin: IOrigin;
17
+ /** User-provided default-behavior config (may be undefined). */
18
+ defaultBehavior: DefaultBehaviorConfig | undefined;
19
+ /** The builder's default-behavior defaults, applied before user props. */
20
+ defaultBehaviorDefaults: Partial<AddBehaviorOptions>;
21
+ /**
22
+ * Ordered map of path-pattern → config for additional behaviors. Origins
23
+ * are resolved here via {@link resolve}.
24
+ */
25
+ additionalBehaviors: Map<string, AdditionalBehaviorConfig>;
26
+ }
27
+ /**
28
+ * Output of {@link resolveBehaviors}: concrete behavior options ready to pass
29
+ * to the CDK `Distribution` constructor, plus any owned {@link CfFunction}
30
+ * instances and their alarm definitions.
31
+ */
32
+ export interface ResolveBehaviorsResult {
33
+ /** Concrete `BehaviorOptions` for the default cache behavior. */
34
+ defaultBehavior: BehaviorOptions;
35
+ /** Concrete `BehaviorOptions` keyed by path pattern, in insertion order. */
36
+ additionalBehaviors: Record<string, BehaviorOptions>;
37
+ /**
38
+ * Owned inline CloudFront Functions plus the behavior context the builder
39
+ * used to create each one, keyed by `<behaviorScope><EventType>` —
40
+ * e.g. `defaultBehaviorViewerRequest`. Consumed by the alarm-creation code
41
+ * path (in {@link DistributionBuilder} and
42
+ * {@link createCloudFrontAlarmBuilder}) to materialize per-function
43
+ * recommended alarms.
44
+ */
45
+ functions: Record<string, FunctionEntry>;
46
+ }
47
+ /**
48
+ * Materializes the default and additional cache behaviors into CDK-ready
49
+ * `BehaviorOptions`, creating any inline CloudFront Functions along the way
50
+ * and producing their path-scoped alarm definitions.
51
+ *
52
+ * Enforces CloudFront invariants at configure time: at most one function per
53
+ * event type per behavior, and `keyValueStore` requires `FunctionRuntime.JS_2_0`.
54
+ */
55
+ export declare function resolveBehaviors(input: ResolveBehaviorsInput): ResolveBehaviorsResult;
56
+ //# sourceMappingURL=resolve-behaviors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-behaviors.d.ts","sourceRoot":"","sources":["../src/resolve-behaviors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAMpB,KAAK,OAAO,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,KAAK,EAAE,UAAU,CAAC;IAElB,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IAEX,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,aAAa,EAAE,OAAO,CAAC;IAEvB,gEAAgE;IAChE,eAAe,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAEnD,0EAA0E;IAC1E,uBAAuB,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAErD;;;OAGG;IACH,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,eAAe,EAAE,eAAe,CAAC;IAEjC,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAErD;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAiDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CA0DrF"}
@@ -0,0 +1,98 @@
1
+ import { Function as CfFunction, FunctionRuntime, } from "aws-cdk-lib/aws-cloudfront";
2
+ import { resolve } from "@composurecdk/core";
3
+ import { behaviorFunctionKeyPrefix, eventTypePascal, pathPatternSlug, } from "./behavior-function-alarms.js";
4
+ import { INLINE_FUNCTION_DEFAULTS } from "./defaults.js";
5
+ function scopeLabel(pathPattern) {
6
+ return pathPattern === null ? "default behavior" : `behavior "${pathPattern}"`;
7
+ }
8
+ function behaviorIdScope(pathPattern) {
9
+ return pathPattern === null ? "DefaultBehavior" : `Behavior${pathPatternSlug(pathPattern)}`;
10
+ }
11
+ function assertUniqueEventTypes(functions, pathPattern) {
12
+ const seen = new Set();
13
+ for (const fn of functions) {
14
+ if (seen.has(fn.eventType)) {
15
+ throw new Error(`DistributionBuilder: ${scopeLabel(pathPattern)} has multiple functions for eventType "${fn.eventType}". ` +
16
+ `CloudFront allows at most one function per event type per behavior.`);
17
+ }
18
+ seen.add(fn.eventType);
19
+ }
20
+ }
21
+ function omit(obj, ...keys) {
22
+ const skip = new Set(keys);
23
+ const out = {};
24
+ for (const [k, v] of Object.entries(obj)) {
25
+ if (!skip.has(k))
26
+ out[k] = v;
27
+ }
28
+ return out;
29
+ }
30
+ function assertKeyValueStoreRuntime(def, pathPattern) {
31
+ if (!def.keyValueStore)
32
+ return;
33
+ const effectiveRuntime = def.runtime ?? INLINE_FUNCTION_DEFAULTS.runtime;
34
+ if (effectiveRuntime !== FunctionRuntime.JS_2_0) {
35
+ throw new Error(`DistributionBuilder: ${scopeLabel(pathPattern)} function (${def.eventType}) uses a ` +
36
+ `keyValueStore, which requires FunctionRuntime.JS_2_0.`);
37
+ }
38
+ }
39
+ /**
40
+ * Materializes the default and additional cache behaviors into CDK-ready
41
+ * `BehaviorOptions`, creating any inline CloudFront Functions along the way
42
+ * and producing their path-scoped alarm definitions.
43
+ *
44
+ * Enforces CloudFront invariants at configure time: at most one function per
45
+ * event type per behavior, and `keyValueStore` requires `FunctionRuntime.JS_2_0`.
46
+ */
47
+ export function resolveBehaviors(input) {
48
+ const { scope, id, context, defaultOrigin, defaultBehavior, defaultBehaviorDefaults } = input;
49
+ const functions = {};
50
+ const buildInlineFunctions = (pathPattern, definitions) => {
51
+ if (!definitions || definitions.length === 0)
52
+ return [];
53
+ assertUniqueEventTypes(definitions, pathPattern);
54
+ const scopeId = behaviorIdScope(pathPattern);
55
+ const associations = [];
56
+ for (const def of definitions) {
57
+ assertKeyValueStoreRuntime(def, pathPattern);
58
+ const { eventType } = def;
59
+ const fnId = `${id}${scopeId}${eventTypePascal(eventType)}Fn`;
60
+ const fn = new CfFunction(scope, fnId, {
61
+ ...INLINE_FUNCTION_DEFAULTS,
62
+ ...omit(def, "eventType", "recommendedAlarms"),
63
+ });
64
+ functions[behaviorFunctionKeyPrefix(pathPattern, eventType)] = {
65
+ function: fn,
66
+ pathPattern,
67
+ eventType,
68
+ recommendedAlarms: def.recommendedAlarms,
69
+ };
70
+ associations.push({ function: fn, eventType });
71
+ }
72
+ return associations;
73
+ };
74
+ const defaultAssociations = buildInlineFunctions(null, defaultBehavior?.functions);
75
+ const userDefaultBehavior = omit(defaultBehavior ?? {}, "functions");
76
+ const resolvedDefaultBehavior = {
77
+ ...defaultBehaviorDefaults,
78
+ ...userDefaultBehavior,
79
+ ...(defaultAssociations.length > 0 ? { functionAssociations: defaultAssociations } : {}),
80
+ origin: defaultOrigin,
81
+ };
82
+ const resolvedAdditionalBehaviors = {};
83
+ for (const [pathPattern, config] of input.additionalBehaviors) {
84
+ const resolvedOrigin = resolve(config.origin, context);
85
+ const associations = buildInlineFunctions(pathPattern, config.functions);
86
+ resolvedAdditionalBehaviors[pathPattern] = {
87
+ ...omit(config, "functions", "origin"),
88
+ origin: resolvedOrigin,
89
+ ...(associations.length > 0 ? { functionAssociations: associations } : {}),
90
+ };
91
+ }
92
+ return {
93
+ defaultBehavior: resolvedDefaultBehavior,
94
+ additionalBehaviors: resolvedAdditionalBehaviors,
95
+ functions,
96
+ };
97
+ }
98
+ //# sourceMappingURL=resolve-behaviors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-behaviors.js","sourceRoot":"","sources":["../src/resolve-behaviors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@composurecdk/cloudfront",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "Composable CloudFront distribution builder with well-architected defaults",
5
5
  "repository": {
6
6
  "type": "git",