@composurecdk/route53 0.3.4 → 0.3.6

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 (62) hide show
  1. package/README.md +118 -10
  2. package/dist/a-record-builder.d.ts.map +1 -1
  3. package/dist/a-record-builder.js +2 -3
  4. package/dist/a-record-builder.js.map +1 -1
  5. package/dist/aaaa-record-builder.d.ts.map +1 -1
  6. package/dist/aaaa-record-builder.js +2 -3
  7. package/dist/aaaa-record-builder.js.map +1 -1
  8. package/dist/caa-record-builder.d.ts +44 -0
  9. package/dist/caa-record-builder.d.ts.map +1 -0
  10. package/dist/caa-record-builder.js +33 -0
  11. package/dist/caa-record-builder.js.map +1 -0
  12. package/dist/cname-record-builder.d.ts.map +1 -1
  13. package/dist/cname-record-builder.js +1 -2
  14. package/dist/cname-record-builder.js.map +1 -1
  15. package/dist/defaults.d.ts +42 -0
  16. package/dist/defaults.d.ts.map +1 -1
  17. package/dist/defaults.js +49 -0
  18. package/dist/defaults.js.map +1 -1
  19. package/dist/ds-record-builder.d.ts +42 -0
  20. package/dist/ds-record-builder.d.ts.map +1 -0
  21. package/dist/ds-record-builder.js +33 -0
  22. package/dist/ds-record-builder.js.map +1 -0
  23. package/dist/https-record-builder.d.ts +45 -0
  24. package/dist/https-record-builder.d.ts.map +1 -0
  25. package/dist/https-record-builder.js +41 -0
  26. package/dist/https-record-builder.js.map +1 -0
  27. package/dist/index.d.ts +8 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/mx-record-builder.d.ts +40 -0
  32. package/dist/mx-record-builder.d.ts.map +1 -0
  33. package/dist/mx-record-builder.js +33 -0
  34. package/dist/mx-record-builder.js.map +1 -0
  35. package/dist/ns-record-builder.d.ts +40 -0
  36. package/dist/ns-record-builder.d.ts.map +1 -0
  37. package/dist/ns-record-builder.js +38 -0
  38. package/dist/ns-record-builder.js.map +1 -0
  39. package/dist/srv-record-builder.d.ts +40 -0
  40. package/dist/srv-record-builder.d.ts.map +1 -0
  41. package/dist/srv-record-builder.js +33 -0
  42. package/dist/srv-record-builder.js.map +1 -0
  43. package/dist/svcb-record-builder.d.ts +41 -0
  44. package/dist/svcb-record-builder.d.ts.map +1 -0
  45. package/dist/svcb-record-builder.js +34 -0
  46. package/dist/svcb-record-builder.js.map +1 -0
  47. package/dist/txt-record-builder.d.ts.map +1 -1
  48. package/dist/txt-record-builder.js +1 -2
  49. package/dist/txt-record-builder.js.map +1 -1
  50. package/dist/zone/index.d.ts +3 -0
  51. package/dist/zone/index.d.ts.map +1 -0
  52. package/dist/zone/index.js +3 -0
  53. package/dist/zone/index.js.map +1 -0
  54. package/dist/zone/zone-dsl.d.ts +252 -0
  55. package/dist/zone/zone-dsl.d.ts.map +1 -0
  56. package/dist/zone/zone-dsl.js +198 -0
  57. package/dist/zone/zone-dsl.js.map +1 -0
  58. package/dist/zone/zone-records.d.ts +67 -0
  59. package/dist/zone/zone-records.d.ts.map +1 -0
  60. package/dist/zone/zone-records.js +267 -0
  61. package/dist/zone/zone-records.js.map +1 -0
  62. package/package.json +5 -1
@@ -0,0 +1,252 @@
1
+ import type { Duration } from "aws-cdk-lib";
2
+ import { CaaTag, type HttpsRecordValue, type SvcbRecordValue } from "aws-cdk-lib/aws-route53";
3
+ /**
4
+ * Sentinel name representing the zone apex (the zone-file `@`).
5
+ *
6
+ * Translated to an undefined CDK `recordName` when bound to a CDK construct.
7
+ */
8
+ export declare const APEX = "@";
9
+ /**
10
+ * Per-record options applied to the underlying CDK construct.
11
+ *
12
+ * Mirrors the optional fields shared by every Route 53 record builder. Each
13
+ * record-type DSL helper accepts these as a trailing options argument.
14
+ */
15
+ export interface RecordOptions {
16
+ /** TTL for the record set. Falls back to the underlying builder's default. */
17
+ readonly ttl?: Duration;
18
+ /** Optional comment passed through to the CDK construct. */
19
+ readonly comment?: string;
20
+ }
21
+ export interface ARecordSpec extends RecordOptions {
22
+ readonly type: "A";
23
+ readonly name: string;
24
+ readonly addresses: readonly string[];
25
+ }
26
+ export interface AaaaRecordSpec extends RecordOptions {
27
+ readonly type: "AAAA";
28
+ readonly name: string;
29
+ readonly addresses: readonly string[];
30
+ }
31
+ export interface CnameRecordSpec extends RecordOptions {
32
+ readonly type: "CNAME";
33
+ readonly name: string;
34
+ readonly target: string;
35
+ }
36
+ export interface TxtRecordSpec extends RecordOptions {
37
+ readonly type: "TXT";
38
+ readonly name: string;
39
+ readonly values: readonly string[];
40
+ }
41
+ export interface MxRecordSpec extends RecordOptions {
42
+ readonly type: "MX";
43
+ readonly name: string;
44
+ readonly values: readonly {
45
+ readonly priority: number;
46
+ readonly hostName: string;
47
+ }[];
48
+ }
49
+ export interface SrvRecordSpec extends RecordOptions {
50
+ readonly type: "SRV";
51
+ readonly name: string;
52
+ readonly values: readonly {
53
+ readonly priority: number;
54
+ readonly weight: number;
55
+ readonly port: number;
56
+ readonly hostName: string;
57
+ }[];
58
+ }
59
+ export interface CaaRecordSpec extends RecordOptions {
60
+ readonly type: "CAA";
61
+ readonly name: string;
62
+ readonly values: readonly {
63
+ readonly flag: number;
64
+ readonly tag: CaaTag;
65
+ readonly value: string;
66
+ }[];
67
+ }
68
+ export interface NsRecordSpec extends RecordOptions {
69
+ readonly type: "NS";
70
+ readonly name: string;
71
+ readonly values: readonly string[];
72
+ }
73
+ export interface DsRecordSpec extends RecordOptions {
74
+ readonly type: "DS";
75
+ readonly name: string;
76
+ readonly values: readonly string[];
77
+ }
78
+ export interface HttpsRecordSpec extends RecordOptions {
79
+ readonly type: "HTTPS";
80
+ readonly name: string;
81
+ readonly values: readonly HttpsRecordValue[];
82
+ }
83
+ export interface SvcbRecordSpec extends RecordOptions {
84
+ readonly type: "SVCB";
85
+ readonly name: string;
86
+ readonly values: readonly SvcbRecordValue[];
87
+ }
88
+ export type RecordSpec = ARecordSpec | AaaaRecordSpec | CnameRecordSpec | TxtRecordSpec | MxRecordSpec | SrvRecordSpec | CaaRecordSpec | NsRecordSpec | DsRecordSpec | HttpsRecordSpec | SvcbRecordSpec;
89
+ /** Record type discriminators surfaced by {@link RecordSpec}. */
90
+ export type RecordType = RecordSpec["type"];
91
+ /**
92
+ * IPv4 address record. Use {@link APEX} (`"@"`) as `name` for the zone apex.
93
+ *
94
+ * Multiple `A` calls for the same `name` are merged into a single CDK record
95
+ * set with all addresses; alternatively, pass an array as the second argument.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * A("@", "1.2.3.4")
100
+ * A("ha", ["1.2.3.4", "5.6.7.8"])
101
+ * A("www", "1.2.3.4", { ttl: Duration.minutes(10) })
102
+ * ```
103
+ */
104
+ export declare function A(name: string, address: string | readonly string[], options?: RecordOptions): ARecordSpec;
105
+ /**
106
+ * IPv6 address record. See {@link A} for the merging / array semantics — they
107
+ * are identical.
108
+ */
109
+ export declare function AAAA(name: string, address: string | readonly string[], options?: RecordOptions): AaaaRecordSpec;
110
+ /**
111
+ * Canonical-name record. DNS forbids more than one CNAME per name, so a second
112
+ * `CNAME(name, …)` for the same name is a configuration error and is rejected
113
+ * when the records are bound to the zone.
114
+ *
115
+ * CNAMEs also cannot live at the zone apex — use an A/AAAA alias instead.
116
+ *
117
+ * Targets containing dots should be fully qualified (trailing `.`).
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * CNAME("dkim1", "dkim1.39769.dkim.example.")
122
+ * ```
123
+ */
124
+ export declare function CNAME(name: string, target: string, options?: RecordOptions): CnameRecordSpec;
125
+ /**
126
+ * Text record. Pass a single string or an array of strings; multiple `TXT`
127
+ * calls for the same `name` are merged into one CDK record set.
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * TXT("@", "v=spf1 mx -all")
132
+ * TXT("_dmarc", "v=DMARC1; p=none;")
133
+ * TXT("multi", ["one", "two"])
134
+ * ```
135
+ */
136
+ export declare function TXT(name: string, value: string | readonly string[], options?: RecordOptions): TxtRecordSpec;
137
+ /**
138
+ * Mail-exchanger record. The argument order matches BIND zone files
139
+ * (`name priority target`); multiple `MX(name, …)` calls for the same name are
140
+ * merged into one CDK record set with all `(priority, hostName)` pairs.
141
+ *
142
+ * Targets containing dots should be fully qualified (trailing `.`).
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * MX("@", 10, "mail.example.com.")
147
+ * MX("@", 20, "backup.example.com.")
148
+ * ```
149
+ */
150
+ export declare function MX(name: string, priority: number, hostName: string, options?: RecordOptions): MxRecordSpec;
151
+ /**
152
+ * Service-locator record. The argument order matches BIND zone files
153
+ * (`name priority weight port target`); multiple `SRV(name, …)` calls for the
154
+ * same name are merged into one CDK record set.
155
+ *
156
+ * Record names typically follow the `_service._proto` convention (e.g.
157
+ * `_sip._tcp`). Lower priority wins; weight distributes load across peers.
158
+ *
159
+ * @example
160
+ * ```ts
161
+ * SRV("_sip._tcp", 10, 60, 5060, "sip1.example.com.")
162
+ * SRV("_sip._tcp", 10, 40, 5060, "sip2.example.com.")
163
+ * ```
164
+ */
165
+ export declare function SRV(name: string, priority: number, weight: number, port: number, hostName: string, options?: RecordOptions): SrvRecordSpec;
166
+ /**
167
+ * Certification-authority authorization record. Argument order matches BIND
168
+ * zone files (`name flag tag value`); multiple `CAA(name, …)` calls for the
169
+ * same name are merged into one CDK record set.
170
+ *
171
+ * For the common cases, prefer {@link CAA_ISSUE}, {@link CAA_ISSUEWILD}, or
172
+ * {@link CAA_IODEF}.
173
+ *
174
+ * @example
175
+ * ```ts
176
+ * CAA("@", 0, CaaTag.ISSUE, "amazon.com")
177
+ * ```
178
+ */
179
+ export declare function CAA(name: string, flag: number, tag: CaaTag, value: string, options?: RecordOptions): CaaRecordSpec;
180
+ /**
181
+ * CAA `issue` record — authorizes a specific certificate authority to issue
182
+ * certificates for the name. Merges with other CAA records at the same name.
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * CAA_ISSUE("@", "amazon.com")
187
+ * CAA_ISSUE("@", "amazontrust.com")
188
+ * ```
189
+ */
190
+ export declare function CAA_ISSUE(name: string, authority: string, options?: RecordOptions): CaaRecordSpec;
191
+ /**
192
+ * CAA `issuewild` record — authorizes a specific CA to issue wildcard
193
+ * certificates for the name. Merges with other CAA records at the same name.
194
+ */
195
+ export declare function CAA_ISSUEWILD(name: string, authority: string, options?: RecordOptions): CaaRecordSpec;
196
+ /**
197
+ * CAA `iodef` record — reports policy violations to a URL. Merges with other
198
+ * CAA records at the same name.
199
+ *
200
+ * @example
201
+ * ```ts
202
+ * CAA_IODEF("@", "mailto:security@example.com")
203
+ * ```
204
+ */
205
+ export declare function CAA_IODEF(name: string, url: string, options?: RecordOptions): CaaRecordSpec;
206
+ /**
207
+ * Name-server delegation record. Delegates a subdomain to the supplied name
208
+ * servers. NS records cannot live at the zone apex — the apex NS set is
209
+ * managed by Route 53 itself.
210
+ *
211
+ * Multiple `NS(name, …)` calls for the same name are merged; alternatively,
212
+ * pass an array of host names.
213
+ *
214
+ * @example
215
+ * ```ts
216
+ * NS("internal", ["ns-1.awsdns-00.co.uk.", "ns-2.awsdns-00.com."])
217
+ * ```
218
+ */
219
+ export declare function NS(name: string, hostName: string | readonly string[], options?: RecordOptions): NsRecordSpec;
220
+ /**
221
+ * DNSSEC delegation-signer record. Each value is a full rdata string
222
+ * (`keyTag algorithm digestType digest`). Multiple `DS(name, …)` calls for the
223
+ * same name are merged.
224
+ *
225
+ * @example
226
+ * ```ts
227
+ * DS("secure", "60485 5 1 2BB183AF5F22588179A53B0A98631FAD1A292118")
228
+ * ```
229
+ */
230
+ export declare function DS(name: string, rdata: string | readonly string[], options?: RecordOptions): DsRecordSpec;
231
+ /**
232
+ * HTTPS service-binding record (RFC 9460). Accepts pre-constructed
233
+ * {@link HttpsRecordValue} instances from the CDK. For alias-mode HTTPS
234
+ * records (typically pointing at a CloudFront distribution), use
235
+ * `createHttpsRecordBuilder` directly — the DSL supports value-mode only.
236
+ *
237
+ * Multiple `HTTPS(name, …)` calls for the same name are merged.
238
+ *
239
+ * @example
240
+ * ```ts
241
+ * HTTPS("@", HttpsRecordValue.service({ alpn: [Alpn.H3, Alpn.H2] }))
242
+ * ```
243
+ */
244
+ export declare function HTTPS(name: string, value: HttpsRecordValue | readonly HttpsRecordValue[], options?: RecordOptions): HttpsRecordSpec;
245
+ /**
246
+ * Generic service-binding record (RFC 9460). For HTTPS specifically, prefer
247
+ * {@link HTTPS} — most clients only consult HTTPS records for web traffic.
248
+ *
249
+ * Multiple `SVCB(name, …)` calls for the same name are merged.
250
+ */
251
+ export declare function SVCB(name: string, value: SvcbRecordValue | readonly SvcbRecordValue[], options?: RecordOptions): SvcbRecordSpec;
252
+ //# sourceMappingURL=zone-dsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zone-dsl.d.ts","sourceRoot":"","sources":["../../src/zone/zone-dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { CaaTag } from "aws-cdk-lib/aws-route53";
2
+ /**
3
+ * Sentinel name representing the zone apex (the zone-file `@`).
4
+ *
5
+ * Translated to an undefined CDK `recordName` when bound to a CDK construct.
6
+ */
7
+ export const APEX = "@";
8
+ const toArray = (x) => Array.isArray(x) ? x : [x];
9
+ /**
10
+ * IPv4 address record. Use {@link APEX} (`"@"`) as `name` for the zone apex.
11
+ *
12
+ * Multiple `A` calls for the same `name` are merged into a single CDK record
13
+ * set with all addresses; alternatively, pass an array as the second argument.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * A("@", "1.2.3.4")
18
+ * A("ha", ["1.2.3.4", "5.6.7.8"])
19
+ * A("www", "1.2.3.4", { ttl: Duration.minutes(10) })
20
+ * ```
21
+ */
22
+ export function A(name, address, options = {}) {
23
+ return { type: "A", name, addresses: toArray(address), ...options };
24
+ }
25
+ /**
26
+ * IPv6 address record. See {@link A} for the merging / array semantics — they
27
+ * are identical.
28
+ */
29
+ export function AAAA(name, address, options = {}) {
30
+ return { type: "AAAA", name, addresses: toArray(address), ...options };
31
+ }
32
+ /**
33
+ * Canonical-name record. DNS forbids more than one CNAME per name, so a second
34
+ * `CNAME(name, …)` for the same name is a configuration error and is rejected
35
+ * when the records are bound to the zone.
36
+ *
37
+ * CNAMEs also cannot live at the zone apex — use an A/AAAA alias instead.
38
+ *
39
+ * Targets containing dots should be fully qualified (trailing `.`).
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * CNAME("dkim1", "dkim1.39769.dkim.example.")
44
+ * ```
45
+ */
46
+ export function CNAME(name, target, options = {}) {
47
+ return { type: "CNAME", name, target, ...options };
48
+ }
49
+ /**
50
+ * Text record. Pass a single string or an array of strings; multiple `TXT`
51
+ * calls for the same `name` are merged into one CDK record set.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * TXT("@", "v=spf1 mx -all")
56
+ * TXT("_dmarc", "v=DMARC1; p=none;")
57
+ * TXT("multi", ["one", "two"])
58
+ * ```
59
+ */
60
+ export function TXT(name, value, options = {}) {
61
+ return { type: "TXT", name, values: toArray(value), ...options };
62
+ }
63
+ /**
64
+ * Mail-exchanger record. The argument order matches BIND zone files
65
+ * (`name priority target`); multiple `MX(name, …)` calls for the same name are
66
+ * merged into one CDK record set with all `(priority, hostName)` pairs.
67
+ *
68
+ * Targets containing dots should be fully qualified (trailing `.`).
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * MX("@", 10, "mail.example.com.")
73
+ * MX("@", 20, "backup.example.com.")
74
+ * ```
75
+ */
76
+ export function MX(name, priority, hostName, options = {}) {
77
+ return { type: "MX", name, values: [{ priority, hostName }], ...options };
78
+ }
79
+ /**
80
+ * Service-locator record. The argument order matches BIND zone files
81
+ * (`name priority weight port target`); multiple `SRV(name, …)` calls for the
82
+ * same name are merged into one CDK record set.
83
+ *
84
+ * Record names typically follow the `_service._proto` convention (e.g.
85
+ * `_sip._tcp`). Lower priority wins; weight distributes load across peers.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * SRV("_sip._tcp", 10, 60, 5060, "sip1.example.com.")
90
+ * SRV("_sip._tcp", 10, 40, 5060, "sip2.example.com.")
91
+ * ```
92
+ */
93
+ export function SRV(name, priority, weight, port, hostName, options = {}) {
94
+ return { type: "SRV", name, values: [{ priority, weight, port, hostName }], ...options };
95
+ }
96
+ /**
97
+ * Certification-authority authorization record. Argument order matches BIND
98
+ * zone files (`name flag tag value`); multiple `CAA(name, …)` calls for the
99
+ * same name are merged into one CDK record set.
100
+ *
101
+ * For the common cases, prefer {@link CAA_ISSUE}, {@link CAA_ISSUEWILD}, or
102
+ * {@link CAA_IODEF}.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * CAA("@", 0, CaaTag.ISSUE, "amazon.com")
107
+ * ```
108
+ */
109
+ export function CAA(name, flag, tag, value, options = {}) {
110
+ return { type: "CAA", name, values: [{ flag, tag, value }], ...options };
111
+ }
112
+ /**
113
+ * CAA `issue` record — authorizes a specific certificate authority to issue
114
+ * certificates for the name. Merges with other CAA records at the same name.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * CAA_ISSUE("@", "amazon.com")
119
+ * CAA_ISSUE("@", "amazontrust.com")
120
+ * ```
121
+ */
122
+ export function CAA_ISSUE(name, authority, options = {}) {
123
+ return CAA(name, 0, CaaTag.ISSUE, authority, options);
124
+ }
125
+ /**
126
+ * CAA `issuewild` record — authorizes a specific CA to issue wildcard
127
+ * certificates for the name. Merges with other CAA records at the same name.
128
+ */
129
+ export function CAA_ISSUEWILD(name, authority, options = {}) {
130
+ return CAA(name, 0, CaaTag.ISSUEWILD, authority, options);
131
+ }
132
+ /**
133
+ * CAA `iodef` record — reports policy violations to a URL. Merges with other
134
+ * CAA records at the same name.
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * CAA_IODEF("@", "mailto:security@example.com")
139
+ * ```
140
+ */
141
+ export function CAA_IODEF(name, url, options = {}) {
142
+ return CAA(name, 0, CaaTag.IODEF, url, options);
143
+ }
144
+ /**
145
+ * Name-server delegation record. Delegates a subdomain to the supplied name
146
+ * servers. NS records cannot live at the zone apex — the apex NS set is
147
+ * managed by Route 53 itself.
148
+ *
149
+ * Multiple `NS(name, …)` calls for the same name are merged; alternatively,
150
+ * pass an array of host names.
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * NS("internal", ["ns-1.awsdns-00.co.uk.", "ns-2.awsdns-00.com."])
155
+ * ```
156
+ */
157
+ export function NS(name, hostName, options = {}) {
158
+ return { type: "NS", name, values: toArray(hostName), ...options };
159
+ }
160
+ /**
161
+ * DNSSEC delegation-signer record. Each value is a full rdata string
162
+ * (`keyTag algorithm digestType digest`). Multiple `DS(name, …)` calls for the
163
+ * same name are merged.
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * DS("secure", "60485 5 1 2BB183AF5F22588179A53B0A98631FAD1A292118")
168
+ * ```
169
+ */
170
+ export function DS(name, rdata, options = {}) {
171
+ return { type: "DS", name, values: toArray(rdata), ...options };
172
+ }
173
+ /**
174
+ * HTTPS service-binding record (RFC 9460). Accepts pre-constructed
175
+ * {@link HttpsRecordValue} instances from the CDK. For alias-mode HTTPS
176
+ * records (typically pointing at a CloudFront distribution), use
177
+ * `createHttpsRecordBuilder` directly — the DSL supports value-mode only.
178
+ *
179
+ * Multiple `HTTPS(name, …)` calls for the same name are merged.
180
+ *
181
+ * @example
182
+ * ```ts
183
+ * HTTPS("@", HttpsRecordValue.service({ alpn: [Alpn.H3, Alpn.H2] }))
184
+ * ```
185
+ */
186
+ export function HTTPS(name, value, options = {}) {
187
+ return { type: "HTTPS", name, values: toArray(value), ...options };
188
+ }
189
+ /**
190
+ * Generic service-binding record (RFC 9460). For HTTPS specifically, prefer
191
+ * {@link HTTPS} — most clients only consult HTTPS records for web traffic.
192
+ *
193
+ * Multiple `SVCB(name, …)` calls for the same name are merged.
194
+ */
195
+ export function SVCB(name, value, options = {}) {
196
+ return { type: "SVCB", name, values: toArray(value), ...options };
197
+ }
198
+ //# sourceMappingURL=zone-dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zone-dsl.js","sourceRoot":"","sources":["../../src/zone/zone-dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { type IHostedZone } from "aws-cdk-lib/aws-route53";
2
+ import { type Lifecycle, type Resolvable } from "@composurecdk/core";
3
+ import { type AaaaRecordBuilderResult } from "../aaaa-record-builder.js";
4
+ import { type ARecordBuilderResult } from "../a-record-builder.js";
5
+ import { type CaaRecordBuilderResult } from "../caa-record-builder.js";
6
+ import { type CnameRecordBuilderResult } from "../cname-record-builder.js";
7
+ import { type DsRecordBuilderResult } from "../ds-record-builder.js";
8
+ import { type HttpsRecordBuilderResult } from "../https-record-builder.js";
9
+ import { type MxRecordBuilderResult } from "../mx-record-builder.js";
10
+ import { type NsRecordBuilderResult } from "../ns-record-builder.js";
11
+ import { type SrvRecordBuilderResult } from "../srv-record-builder.js";
12
+ import { type SvcbRecordBuilderResult } from "../svcb-record-builder.js";
13
+ import { type TxtRecordBuilderResult } from "../txt-record-builder.js";
14
+ import { type RecordSpec } from "./zone-dsl.js";
15
+ /**
16
+ * Build output of {@link zoneRecords}, split per record type. Each sub-map is
17
+ * keyed by the record's DNS name; the apex uses the {@link APEX} sentinel
18
+ * (`"@"`) so it never collides with a user-supplied label.
19
+ */
20
+ export interface ZoneRecordsBuilderResult {
21
+ readonly a: Record<string, ARecordBuilderResult>;
22
+ readonly aaaa: Record<string, AaaaRecordBuilderResult>;
23
+ readonly cname: Record<string, CnameRecordBuilderResult>;
24
+ readonly txt: Record<string, TxtRecordBuilderResult>;
25
+ readonly mx: Record<string, MxRecordBuilderResult>;
26
+ readonly srv: Record<string, SrvRecordBuilderResult>;
27
+ readonly caa: Record<string, CaaRecordBuilderResult>;
28
+ readonly ns: Record<string, NsRecordBuilderResult>;
29
+ readonly ds: Record<string, DsRecordBuilderResult>;
30
+ readonly https: Record<string, HttpsRecordBuilderResult>;
31
+ readonly svcb: Record<string, SvcbRecordBuilderResult>;
32
+ }
33
+ /**
34
+ * Fluent builder that emits every record for a hosted zone from a
35
+ * {@link RecordSpec} list as a single composable {@link Lifecycle}.
36
+ *
37
+ * Records sharing `(type, name)` are merged into one CDK record set, matching
38
+ * DNS RR-set semantics. Every type uses its matching `@composurecdk/route53`
39
+ * builder, inheriting per-type TTL defaults.
40
+ */
41
+ export interface IZoneRecordsBuilder extends Lifecycle<ZoneRecordsBuilderResult> {
42
+ /**
43
+ * The hosted zone to attach every record to. Accepts a {@link Resolvable},
44
+ * so a zone produced by a sibling compose component can be wired in via
45
+ * `ref("zone").get("hostedZone")`.
46
+ */
47
+ zone(zone: Resolvable<IHostedZone>): IZoneRecordsBuilder;
48
+ }
49
+ /**
50
+ * Creates a single compose component that emits every record in `specs`.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * compose(
55
+ * {
56
+ * zone: createHostedZoneBuilder().zoneName("example.com"),
57
+ * records: zoneRecords([
58
+ * A("@", "1.2.3.4"),
59
+ * MX("@", 10, "mail.example.com."),
60
+ * ]).zone(ref<HostedZoneBuilderResult>("zone").get("hostedZone")),
61
+ * },
62
+ * { zone: [], records: ["zone"] },
63
+ * ).build(stack, "DNS");
64
+ * ```
65
+ */
66
+ export declare function zoneRecords(specs: readonly RecordSpec[]): IZoneRecordsBuilder;
67
+ //# sourceMappingURL=zone-records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zone-records.d.ts","sourceRoot":"","sources":["../../src/zone/zone-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAgB,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAAe,KAAK,SAAS,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,oBAAoB,EAAwB,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,KAAK,qBAAqB,EAAyB,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAWL,KAAK,UAAU,EAIhB,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAoB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;IAC9E;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,mBAAmB,CAAC;CAC1D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,mBAAmB,CAE7E"}