@microsoft/terraform-cdk-constructs 1.3.1 → 1.4.0

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 (72) hide show
  1. package/.jsii +10617 -7822
  2. package/API.md +25592 -20586
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  7. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  9. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  10. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  11. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  12. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  13. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  14. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  15. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  16. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  17. package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
  18. package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
  19. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  20. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  21. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  22. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  23. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  24. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  25. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  26. package/lib/azure-subnet/lib/subnet.js +1 -1
  27. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  28. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  29. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  30. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +5 -0
  31. package/lib/azure-virtualnetworkmanager/lib/index.js +6 -1
  32. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.d.ts +24 -0
  33. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.js +169 -0
  34. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.d.ts +32 -0
  35. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.js +206 -0
  36. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +170 -0
  37. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +214 -0
  38. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +175 -0
  39. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +206 -0
  40. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  41. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  42. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  43. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  44. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  45. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.d.ts +225 -0
  46. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.js +389 -0
  47. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +56 -0
  48. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +29 -2
  49. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.d.ts +6 -0
  50. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.js +292 -0
  51. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.d.ts +6 -0
  52. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +430 -0
  53. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.d.ts +6 -0
  54. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +372 -0
  55. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +2 -1
  56. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +30 -3
  57. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +105 -1
  58. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  59. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  60. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  61. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  62. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  63. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  64. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  65. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  66. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  67. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  68. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  69. package/lib/testing/index.js +2 -2
  70. package/lib/testing/lib/cleanup.js +1 -1
  71. package/lib/testing/lib/metadata.js +1 -1
  72. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ /**
3
+ * API schemas for Azure Virtual Network Manager IPAM Pool Static CIDRs across all supported versions
4
+ *
5
+ * This file defines the complete API schemas for Microsoft.Network/networkManagers/ipamPools/staticCidrs
6
+ * across all supported API versions. The schemas are used by the AzapiResource
7
+ * framework for validation, transformation, and version management.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.STATIC_CIDR_TYPE = exports.ALL_STATIC_CIDR_VERSIONS = exports.STATIC_CIDR_VERSION_2023_11_01 = exports.STATIC_CIDR_VERSION_2024_05_01 = exports.STATIC_CIDR_SCHEMA_2023_11_01 = exports.STATIC_CIDR_SCHEMA_2024_05_01 = void 0;
11
+ const version_interfaces_1 = require("../../core-azure/lib/version-manager/interfaces/version-interfaces");
12
+ // =============================================================================
13
+ // COMMON PROPERTY DEFINITIONS
14
+ // =============================================================================
15
+ /**
16
+ * Common property definitions shared across all Static CIDR versions
17
+ */
18
+ const COMMON_PROPERTIES = {
19
+ name: {
20
+ dataType: version_interfaces_1.PropertyType.STRING,
21
+ required: true,
22
+ description: "Name of the static CIDR",
23
+ validation: [
24
+ {
25
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
26
+ message: "Static CIDR name is required",
27
+ },
28
+ {
29
+ ruleType: version_interfaces_1.ValidationRuleType.PATTERN_MATCH,
30
+ value: "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,62}[a-zA-Z0-9_]$",
31
+ message: "Static CIDR name must be 2-64 chars, alphanumeric, periods, underscores, hyphens",
32
+ },
33
+ ],
34
+ },
35
+ ipamPoolId: {
36
+ dataType: version_interfaces_1.PropertyType.STRING,
37
+ required: true,
38
+ description: "Resource ID of the parent IPAM Pool",
39
+ validation: [
40
+ {
41
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
42
+ message: "IPAM Pool ID is required",
43
+ },
44
+ ],
45
+ },
46
+ addressPrefixes: {
47
+ dataType: version_interfaces_1.PropertyType.ARRAY,
48
+ required: true,
49
+ description: "Array of IP address prefixes in CIDR notation (Azure API property)",
50
+ validation: [
51
+ {
52
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
53
+ message: "Address prefixes are required",
54
+ },
55
+ ],
56
+ },
57
+ description: {
58
+ dataType: version_interfaces_1.PropertyType.STRING,
59
+ required: false,
60
+ description: "Description of the static CIDR allocation",
61
+ },
62
+ };
63
+ // =============================================================================
64
+ // VERSION-SPECIFIC SCHEMAS
65
+ // =============================================================================
66
+ /**
67
+ * API Schema for Static CIDR version 2024-05-01
68
+ */
69
+ exports.STATIC_CIDR_SCHEMA_2024_05_01 = {
70
+ resourceType: "Microsoft.Network/networkManagers/ipamPools/staticCidrs",
71
+ version: "2024-05-01",
72
+ properties: {
73
+ ...COMMON_PROPERTIES,
74
+ },
75
+ required: ["name", "ipamPoolId", "addressPrefixes"],
76
+ optional: ["description"],
77
+ deprecated: [],
78
+ transformationRules: {},
79
+ validationRules: [
80
+ {
81
+ property: "name",
82
+ rules: [
83
+ {
84
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
85
+ message: "Static CIDR name is required",
86
+ },
87
+ ],
88
+ },
89
+ {
90
+ property: "ipamPoolId",
91
+ rules: [
92
+ {
93
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
94
+ message: "IPAM Pool ID is required",
95
+ },
96
+ ],
97
+ },
98
+ {
99
+ property: "addressPrefixes",
100
+ rules: [
101
+ {
102
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
103
+ message: "Address prefixes are required",
104
+ },
105
+ ],
106
+ },
107
+ ],
108
+ };
109
+ /**
110
+ * API Schema for Static CIDR version 2023-11-01
111
+ */
112
+ exports.STATIC_CIDR_SCHEMA_2023_11_01 = {
113
+ resourceType: "Microsoft.Network/networkManagers/ipamPools/staticCidrs",
114
+ version: "2023-11-01",
115
+ properties: {
116
+ ...COMMON_PROPERTIES,
117
+ },
118
+ required: ["name", "ipamPoolId", "addressPrefixes"],
119
+ optional: ["description"],
120
+ deprecated: [],
121
+ transformationRules: {},
122
+ validationRules: [
123
+ {
124
+ property: "name",
125
+ rules: [
126
+ {
127
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
128
+ message: "Static CIDR name is required",
129
+ },
130
+ ],
131
+ },
132
+ {
133
+ property: "ipamPoolId",
134
+ rules: [
135
+ {
136
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
137
+ message: "IPAM Pool ID is required",
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ property: "addressPrefixes",
143
+ rules: [
144
+ {
145
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
146
+ message: "Address prefixes are required",
147
+ },
148
+ ],
149
+ },
150
+ ],
151
+ };
152
+ // =============================================================================
153
+ // VERSION CONFIGURATIONS
154
+ // =============================================================================
155
+ /**
156
+ * Version configuration for Static CIDR 2024-05-01
157
+ */
158
+ exports.STATIC_CIDR_VERSION_2024_05_01 = {
159
+ version: "2024-05-01",
160
+ schema: exports.STATIC_CIDR_SCHEMA_2024_05_01,
161
+ supportLevel: version_interfaces_1.VersionSupportLevel.ACTIVE,
162
+ releaseDate: "2024-05-01",
163
+ deprecationDate: undefined,
164
+ sunsetDate: undefined,
165
+ breakingChanges: [],
166
+ migrationGuide: "/docs/ipam/migration-2024-05-01",
167
+ changeLog: [
168
+ {
169
+ changeType: "added",
170
+ description: "Latest stable release with full static CIDR support",
171
+ breaking: false,
172
+ },
173
+ ],
174
+ };
175
+ /**
176
+ * Version configuration for Static CIDR 2023-11-01
177
+ */
178
+ exports.STATIC_CIDR_VERSION_2023_11_01 = {
179
+ version: "2023-11-01",
180
+ schema: exports.STATIC_CIDR_SCHEMA_2023_11_01,
181
+ supportLevel: version_interfaces_1.VersionSupportLevel.MAINTENANCE,
182
+ releaseDate: "2023-11-01",
183
+ deprecationDate: undefined,
184
+ sunsetDate: undefined,
185
+ breakingChanges: [],
186
+ migrationGuide: "/docs/ipam/migration-2023-11-01",
187
+ changeLog: [
188
+ {
189
+ changeType: "added",
190
+ description: "Stable release with core static CIDR features",
191
+ breaking: false,
192
+ },
193
+ ],
194
+ };
195
+ /**
196
+ * All supported Static CIDR versions for registration
197
+ */
198
+ exports.ALL_STATIC_CIDR_VERSIONS = [
199
+ exports.STATIC_CIDR_VERSION_2024_05_01,
200
+ exports.STATIC_CIDR_VERSION_2023_11_01,
201
+ ];
202
+ /**
203
+ * Resource type constant
204
+ */
205
+ exports.STATIC_CIDR_TYPE = "Microsoft.Network/networkManagers/ipamPools/staticCidrs";
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL2xpYi9pcGFtLXBvb2wtc3RhdGljLWNpZHItc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwyR0FPNEU7QUFFNUUsZ0ZBQWdGO0FBQ2hGLDhCQUE4QjtBQUM5QixnRkFBZ0Y7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUEwQztJQUMvRCxJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsaUNBQVksQ0FBQyxNQUFNO1FBQzdCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxVQUFVLEVBQUU7WUFDVjtnQkFDRSxRQUFRLEVBQUUsdUNBQWtCLENBQUMsUUFBUTtnQkFDckMsT0FBTyxFQUFFLDhCQUE4QjthQUN4QztZQUNEO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxhQUFhO2dCQUMxQyxLQUFLLEVBQUUsK0NBQStDO2dCQUN0RCxPQUFPLEVBQ0wsa0ZBQWtGO2FBQ3JGO1NBQ0Y7S0FDRjtJQUNELFVBQVUsRUFBRTtRQUNWLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQUUscUNBQXFDO1FBQ2xELFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxPQUFPLEVBQUUsMEJBQTBCO2FBQ3BDO1NBQ0Y7S0FDRjtJQUNELGVBQWUsRUFBRTtRQUNmLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLEtBQUs7UUFDNUIsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQ1Qsb0VBQW9FO1FBQ3RFLFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxP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S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsOEJBQThCLEdBQWtCO0lBQzNELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxxQ0FBNkI7SUFDckMsWUFBWSxFQUFFLHdDQUFtQixDQUFDLFdBQVc7SUFDN0MsV0FBVyxFQUFFLFlBQVk7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsVUFBVSxFQUFFLFNBQVM7SUFDckIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsY0FBYyxFQUFFLGlDQUFpQztJQUNqRCxTQUFTLEVBQUU7UUFDVDtZQUNFLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFdBQVcsRUFBRSwrQ0FBK0M7WUFDNUQsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsd0JBQXdCLEdBQW9CO0lBQ3ZELHNDQUE4QjtJQUM5QixzQ0FBOEI7Q0FDL0IsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FDM0IseURBQXlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFQSSBzY2hlbWFzIGZvciBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgU3RhdGljIENJRFJzIGFjcm9zcyBhbGwgc3VwcG9ydGVkIHZlcnNpb25zXG4gKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGNvbXBsZXRlIEFQSSBzY2hlbWFzIGZvciBNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvaXBhbVBvb2xzL3N0YXRpY0NpZHJzXG4gKiBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBBUEkgdmVyc2lvbnMuIFRoZSBzY2hlbWFzIGFyZSB1c2VkIGJ5IHRoZSBBemFwaVJlc291cmNlXG4gKiBmcmFtZXdvcmsgZm9yIHZhbGlkYXRpb24sIHRyYW5zZm9ybWF0aW9uLCBhbmQgdmVyc2lvbiBtYW5hZ2VtZW50LlxuICovXG5cbmltcG9ydCB7XG4gIEFwaVNjaGVtYSxcbiAgUHJvcGVydHlEZWZpbml0aW9uLFxuICBQcm9wZXJ0eVR5cGUsXG4gIFZhbGlkYXRpb25SdWxlVHlwZSxcbiAgVmVyc2lvbkNvbmZpZyxcbiAgVmVyc2lvblN1cHBvcnRMZXZlbCxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09NTU9OIFBST1BFUlRZIERFRklOSVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0eSBkZWZpbml0aW9ucyBzaGFyZWQgYWNyb3NzIGFsbCBTdGF0aWMgQ0lEUiB2ZXJzaW9uc1xuICovXG5jb25zdCBDT01NT05fUFJPUEVSVElFUzogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlZmluaXRpb24gfSA9IHtcbiAgbmFtZToge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHN0YXRpYyBDSURSXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICBtZXNzYWdlOiBcIlN0YXRpYyBDSURSIG5hbWUgaXMgcmVxdWlyZWRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUEFUVEVSTl9NQVRDSCxcbiAgICAgICAgdmFsdWU6IFwiXlthLXpBLVowLTldW2EtekEtWjAtOS5fLV17MCw2Mn1bYS16QS1aMC05X10kXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJTdGF0aWMgQ0lEUiBuYW1lIG11c3QgYmUgMi02NCBjaGFycywgYWxwaGFudW1lcmljLCBwZXJpb2RzLCB1bmRlcnNjb3JlcywgaHlwaGVuc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBpcGFtUG9vbElkOiB7XG4gICAgZGF0YVR5cGU6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgZGVzY3JpcHRpb246IFwiUmVzb3VyY2UgSUQgb2YgdGhlIHBhcmVudCBJUEFNIFBvb2xcIixcbiAgICB2YWxpZGF0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgIG1lc3NhZ2U6IFwiSVBBTSBQb29sIElEIGlzIHJlcXVpcmVkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGFkZHJlc3NQcmVmaXhlczoge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuQVJSQVksXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkFycmF5IG9mIElQIGFkZHJlc3MgcHJlZml4ZXMgaW4gQ0lEUiBub3RhdGlvbiAoQXp1cmUgQVBJIHByb3BlcnR5KVwiLFxuICAgIHZhbGlkYXRpb246IFtcbiAgICAgIHtcbiAgICAgICAgcnVsZVR5cGU6IFZhbGlkYXRpb25SdWxlVHlwZS5SRVFVSVJFRCxcbiAgICAgICAgbWVzc2FnZTogXCJBZGRyZXNzIHByZWZpeGVzIGFyZSByZXF1aXJlZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBkZXNjcmlwdGlvbjoge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgc3RhdGljIENJRFIgYWxsb2NhdGlvblwiLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZFUlNJT04tU1BFQ0lGSUMgU0NIRU1BU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBUEkgU2NoZW1hIGZvciBTdGF0aWMgQ0lEUiB2ZXJzaW9uIDIwMjQtMDUtMDFcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRJQ19DSURSX1NDSEVNQV8yMDI0XzA1XzAxOiBBcGlTY2hlbWEgPSB7XG4gIHJlc291cmNlVHlwZTogXCJNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvaXBhbVBvb2xzL3N0YXRpY0NpZHJzXCIsXG4gIHZlcnNpb246IFwiMjAyNC0wNS0wMVwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLi4uQ09NTU9OX1BST1BFUlRJRVMsXG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiaXBhbVBvb2xJZFwiLCBcImFkZHJlc3NQcmVmaXhlc1wiXSxcbiAgb3B0aW9uYWw6IFtcImRlc2NyaXB0aW9uXCJdLFxuICBkZXByZWNhdGVkOiBbXSxcbiAgdHJhbnNmb3JtYXRpb25SdWxlczoge30sXG4gIHZhbGlkYXRpb25SdWxlczogW1xuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcIm5hbWVcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiU3RhdGljIENJRFIgbmFtZSBpcyByZXF1aXJlZFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcImlwYW1Qb29sSWRcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiSVBBTSBQb29sIElEIGlzIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwiYWRkcmVzc1ByZWZpeGVzXCIsXG4gICAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcnVsZVR5cGU6IFZhbGlkYXRpb25SdWxlVHlwZS5SRVFVSVJFRCxcbiAgICAgICAgICBtZXNzYWdlOiBcIkFkZHJlc3MgcHJlZml4ZXMgYXJlIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vKipcbiAqIEFQSSBTY2hlbWEgZm9yIFN0YXRpYyBDSURSIHZlcnNpb24gMjAyMy0xMS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfU0NIRU1BXzIwMjNfMTFfMDE6IEFwaVNjaGVtYSA9IHtcbiAgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9pcGFtUG9vbHMvc3RhdGljQ2lkcnNcIixcbiAgdmVyc2lvbjogXCIyMDIzLTExLTAxXCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5DT01NT05fUFJPUEVSVElFUyxcbiAgfSxcbiAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJpcGFtUG9vbElkXCIsIFwiYWRkcmVzc1ByZWZpeGVzXCJdLFxuICBvcHRpb25hbDogW1wiZGVzY3JpcHRpb25cIl0sXG4gIGRlcHJlY2F0ZWQ6IFtdLFxuICB0cmFuc2Zvcm1hdGlvblJ1bGVzOiB7fSxcbiAgdmFsaWRhdGlvblJ1bGVzOiBbXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwibmFtZVwiLFxuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgICAgbWVzc2FnZTogXCJTdGF0aWMgQ0lEUiBuYW1lIGlzIHJlcXVpcmVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvcGVydHk6IFwiaXBhbVBvb2xJZFwiLFxuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgICAgbWVzc2FnZTogXCJJUEFNIFBvb2wgSUQgaXMgcmVxdWlyZWRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm9wZXJ0eTogXCJhZGRyZXNzUHJlZml4ZXNcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiQWRkcmVzcyBwcmVmaXhlcyBhcmUgcmVxdWlyZWRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWRVJTSU9OIENPTkZJR1VSQVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFZlcnNpb24gY29uZmlndXJhdGlvbiBmb3IgU3RhdGljIENJRFIgMjAyNC0wNS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDI0XzA1XzAxOiBWZXJzaW9uQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBcIjIwMjQtMDUtMDFcIixcbiAgc2NoZW1hOiBTVEFUSUNfQ0lEUl9TQ0hFTUFfMjAyNF8wNV8wMSxcbiAgc3VwcG9ydExldmVsOiBWZXJzaW9uU3VwcG9ydExldmVsLkFDVElWRSxcbiAgcmVsZWFzZURhdGU6IFwiMjAyNC0wNS0wMVwiLFxuICBkZXByZWNhdGlvbkRhdGU6IHVuZGVmaW5lZCxcbiAgc3Vuc2V0RGF0ZTogdW5kZWZpbmVkLFxuICBicmVha2luZ0NoYW5nZXM6IFtdLFxuICBtaWdyYXRpb25HdWlkZTogXCIvZG9jcy9pcGFtL21pZ3JhdGlvbi0yMDI0LTA1LTAxXCIsXG4gIGNoYW5nZUxvZzogW1xuICAgIHtcbiAgICAgIGNoYW5nZVR5cGU6IFwiYWRkZWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxhdGVzdCBzdGFibGUgcmVsZWFzZSB3aXRoIGZ1bGwgc3RhdGljIENJRFIgc3VwcG9ydFwiLFxuICAgICAgYnJlYWtpbmc6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vKipcbiAqIFZlcnNpb24gY29uZmlndXJhdGlvbiBmb3IgU3RhdGljIENJRFIgMjAyMy0xMS0wMVxuICovXG5leHBvcnQgY29uc3QgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDIzXzExXzAxOiBWZXJzaW9uQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBcIjIwMjMtMTEtMDFcIixcbiAgc2NoZW1hOiBTVEFUSUNfQ0lEUl9TQ0hFTUFfMjAyM18xMV8wMSxcbiAgc3VwcG9ydExldmVsOiBWZXJzaW9uU3VwcG9ydExldmVsLk1BSU5URU5BTkNFLFxuICByZWxlYXNlRGF0ZTogXCIyMDIzLTExLTAxXCIsXG4gIGRlcHJlY2F0aW9uRGF0ZTogdW5kZWZpbmVkLFxuICBzdW5zZXREYXRlOiB1bmRlZmluZWQsXG4gIGJyZWFraW5nQ2hhbmdlczogW10sXG4gIG1pZ3JhdGlvbkd1aWRlOiBcIi9kb2NzL2lwYW0vbWlncmF0aW9uLTIwMjMtMTEtMDFcIixcbiAgY2hhbmdlTG9nOiBbXG4gICAge1xuICAgICAgY2hhbmdlVHlwZTogXCJhZGRlZFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiU3RhYmxlIHJlbGVhc2Ugd2l0aCBjb3JlIHN0YXRpYyBDSURSIGZlYXR1cmVzXCIsXG4gICAgICBicmVha2luZzogZmFsc2UsXG4gICAgfSxcbiAgXSxcbn07XG5cbi8qKlxuICogQWxsIHN1cHBvcnRlZCBTdGF0aWMgQ0lEUiB2ZXJzaW9ucyBmb3IgcmVnaXN0cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfU1RBVElDX0NJRFJfVkVSU0lPTlM6IFZlcnNpb25Db25maWdbXSA9IFtcbiAgU1RBVElDX0NJRFJfVkVSU0lPTl8yMDI0XzA1XzAxLFxuICBTVEFUSUNfQ0lEUl9WRVJTSU9OXzIwMjNfMTFfMDEsXG5dO1xuXG4vKipcbiAqIFJlc291cmNlIHR5cGUgY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRJQ19DSURSX1RZUEUgPVxuICBcIk1pY3Jvc29mdC5OZXR3b3JrL25ldHdvcmtNYW5hZ2Vycy9pcGFtUG9vbHMvc3RhdGljQ2lkcnNcIjtcbiJdfQ==
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Azure Virtual Network Manager IPAM Pool Static CIDR implementation using AzapiResource framework
3
+ *
4
+ * This class provides a unified implementation for explicitly allocating static CIDR blocks
5
+ * within an IPAM pool. Static CIDRs allow precise control over IP address space allocation
6
+ * and enable manual CIDR reservation within the pool's address space.
7
+ *
8
+ * Supported API Versions:
9
+ * - 2023-11-01 (Maintenance)
10
+ * - 2024-05-01 (Active, Latest)
11
+ *
12
+ * Features:
13
+ * - Automatic latest version resolution when no version is specified
14
+ * - Explicit version pinning for stability requirements
15
+ * - Schema-driven validation and transformation
16
+ * - CIDR format validation at construct creation time
17
+ * - Automatic IP address count calculation from CIDR prefix
18
+ * - Full backward compatibility
19
+ * - JSII compliance for multi-language support
20
+ */
21
+ import * as cdktf from "cdktf";
22
+ import { Construct } from "constructs";
23
+ import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
24
+ import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
25
+ /**
26
+ * Properties for the Azure Virtual Network Manager IPAM Pool Static CIDR
27
+ *
28
+ * Extends AzapiResourceProps with Static CIDR specific properties
29
+ */
30
+ export interface IpamPoolStaticCidrProps extends AzapiResourceProps {
31
+ /**
32
+ * Resource ID of the parent IPAM Pool
33
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/networkManagers/vnm/ipamPools/prod-pool"
34
+ */
35
+ readonly ipamPoolId: string;
36
+ /**
37
+ * Array of IP address prefixes in CIDR notation
38
+ * Must be valid CIDR format (e.g., ["10.0.0.0/24"])
39
+ * Must be contained within the parent pool's address space
40
+ * @example ["10.0.1.0/24"]
41
+ */
42
+ readonly addressPrefixes: string[];
43
+ /**
44
+ * Optional description of the static CIDR allocation
45
+ * @example "Reserved for production web servers"
46
+ */
47
+ readonly description?: string;
48
+ /**
49
+ * The lifecycle rules to ignore changes
50
+ * @example ["tags"]
51
+ */
52
+ readonly ignoreChanges?: string[];
53
+ }
54
+ /**
55
+ * Properties for Static CIDR body
56
+ */
57
+ export interface IpamPoolStaticCidrProperties {
58
+ readonly addressPrefixes: string[];
59
+ readonly description?: string;
60
+ }
61
+ /**
62
+ * The resource body interface for Azure Static CIDR API calls
63
+ */
64
+ export interface IpamPoolStaticCidrBody {
65
+ readonly properties: IpamPoolStaticCidrProperties;
66
+ }
67
+ /**
68
+ * Azure Virtual Network Manager IPAM Pool Static CIDR implementation
69
+ *
70
+ * Static CIDRs explicitly allocate IP address blocks within an IPAM pool,
71
+ * providing precise control over address space reservations. This is useful
72
+ * for manual IP address management or reserving specific ranges for particular
73
+ * purposes within the larger pool.
74
+ *
75
+ * @example
76
+ * // Allocate a static CIDR block in a pool:
77
+ * const staticCidr = new IpamPoolStaticCidr(this, "web-servers", {
78
+ * name: "web-servers-cidr",
79
+ * ipamPoolId: ipamPool.id,
80
+ * addressPrefixes: ["10.0.1.0/24"],
81
+ * description: "Reserved for production web servers"
82
+ * });
83
+ *
84
+ * @example
85
+ * // Allocate with explicit IP count:
86
+ * const staticCidr = new IpamPoolStaticCidr(this, "database-servers", {
87
+ * name: "db-servers-cidr",
88
+ * ipamPoolId: ipamPool.id,
89
+ * addressPrefixes: ["10.0.2.0/24"],
90
+ * description: "Reserved for database servers",
91
+ * apiVersion: "2024-05-01"
92
+ * });
93
+ *
94
+ * @stability stable
95
+ */
96
+ export declare class IpamPoolStaticCidr extends AzapiResource {
97
+ /**
98
+ * Validates address prefix for correct CIDR format
99
+ * Throws descriptive errors if validation fails
100
+ *
101
+ * @param addressPrefix - CIDR block to validate
102
+ * @throws Error if validation fails
103
+ */
104
+ private static validateAddressPrefix;
105
+ /**
106
+ * The input properties for this Static CIDR instance
107
+ */
108
+ readonly props: IpamPoolStaticCidrProps;
109
+ readonly idOutput: cdktf.TerraformOutput;
110
+ readonly nameOutput: cdktf.TerraformOutput;
111
+ readonly addressPrefixOutput: cdktf.TerraformOutput;
112
+ readonly resourceName: string;
113
+ private readonly _calculatedAddressCount;
114
+ /**
115
+ * Creates a new Azure Virtual Network Manager IPAM Pool Static CIDR using the AzapiResource framework
116
+ *
117
+ * @param scope - The scope in which to define this construct
118
+ * @param id - The unique identifier for this instance
119
+ * @param props - Configuration properties for the Static CIDR
120
+ */
121
+ constructor(scope: Construct, id: string, props: IpamPoolStaticCidrProps);
122
+ /**
123
+ * Resolves the parent resource ID for the Static CIDR
124
+ * Static CIDRs are scoped to IPAM Pools
125
+ */
126
+ protected resolveParentId(props: any): string;
127
+ /**
128
+ * Gets the default API version to use when no explicit version is specified
129
+ */
130
+ protected defaultVersion(): string;
131
+ /**
132
+ * Gets the Azure resource type for Static CIDRs
133
+ */
134
+ protected resourceType(): string;
135
+ /**
136
+ * Gets the API schema for the resolved version
137
+ */
138
+ protected apiSchema(): ApiSchema;
139
+ /**
140
+ * Creates the resource body for the Azure API call
141
+ * Note: Child resources do not include location or tags
142
+ */
143
+ protected createResourceBody(props: any): any;
144
+ /**
145
+ * Get the address prefixes of this Static CIDR
146
+ * Returns the input addressPrefixes array
147
+ */
148
+ get addressPrefixes(): string[];
149
+ /**
150
+ * Get the calculated number of IP addresses in this CIDR block
151
+ * This is automatically calculated from the CIDR prefix at construct creation time
152
+ *
153
+ * @returns Total count of IP addresses in the CIDR block
154
+ *
155
+ * @example
156
+ * const staticCidr = new IpamPoolStaticCidr(this, "cidr", {
157
+ * addressPrefixes: ["10.0.1.0/24"]
158
+ * });
159
+ * console.log(staticCidr.calculatedAddressCount); // 256
160
+ */
161
+ get calculatedAddressCount(): number;
162
+ /**
163
+ * Get the provisioning state of the Static CIDR
164
+ */
165
+ get provisioningState(): string;
166
+ /**
167
+ * Applies ignore changes lifecycle rules if specified in props
168
+ */
169
+ private _applyIgnoreChanges;
170
+ }
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.IpamPoolStaticCidr = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Azure Virtual Network Manager IPAM Pool Static CIDR implementation using AzapiResource framework
8
+ *
9
+ * This class provides a unified implementation for explicitly allocating static CIDR blocks
10
+ * within an IPAM pool. Static CIDRs allow precise control over IP address space allocation
11
+ * and enable manual CIDR reservation within the pool's address space.
12
+ *
13
+ * Supported API Versions:
14
+ * - 2023-11-01 (Maintenance)
15
+ * - 2024-05-01 (Active, Latest)
16
+ *
17
+ * Features:
18
+ * - Automatic latest version resolution when no version is specified
19
+ * - Explicit version pinning for stability requirements
20
+ * - Schema-driven validation and transformation
21
+ * - CIDR format validation at construct creation time
22
+ * - Automatic IP address count calculation from CIDR prefix
23
+ * - Full backward compatibility
24
+ * - JSII compliance for multi-language support
25
+ */
26
+ const cdktf = require("cdktf");
27
+ const ipam_pool_static_cidr_schemas_1 = require("./ipam-pool-static-cidr-schemas");
28
+ const cidr_validator_1 = require("./utils/cidr-validator");
29
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
30
+ /**
31
+ * Azure Virtual Network Manager IPAM Pool Static CIDR implementation
32
+ *
33
+ * Static CIDRs explicitly allocate IP address blocks within an IPAM pool,
34
+ * providing precise control over address space reservations. This is useful
35
+ * for manual IP address management or reserving specific ranges for particular
36
+ * purposes within the larger pool.
37
+ *
38
+ * @example
39
+ * // Allocate a static CIDR block in a pool:
40
+ * const staticCidr = new IpamPoolStaticCidr(this, "web-servers", {
41
+ * name: "web-servers-cidr",
42
+ * ipamPoolId: ipamPool.id,
43
+ * addressPrefixes: ["10.0.1.0/24"],
44
+ * description: "Reserved for production web servers"
45
+ * });
46
+ *
47
+ * @example
48
+ * // Allocate with explicit IP count:
49
+ * const staticCidr = new IpamPoolStaticCidr(this, "database-servers", {
50
+ * name: "db-servers-cidr",
51
+ * ipamPoolId: ipamPool.id,
52
+ * addressPrefixes: ["10.0.2.0/24"],
53
+ * description: "Reserved for database servers",
54
+ * apiVersion: "2024-05-01"
55
+ * });
56
+ *
57
+ * @stability stable
58
+ */
59
+ class IpamPoolStaticCidr extends azapi_resource_1.AzapiResource {
60
+ /**
61
+ * Validates address prefix for correct CIDR format
62
+ * Throws descriptive errors if validation fails
63
+ *
64
+ * @param addressPrefix - CIDR block to validate
65
+ * @throws Error if validation fails
66
+ */
67
+ static validateAddressPrefix(addressPrefix) {
68
+ if (!addressPrefix) {
69
+ throw new Error("Address prefix is required");
70
+ }
71
+ const validation = (0, cidr_validator_1.validateCidr)(addressPrefix);
72
+ if (!validation.valid) {
73
+ throw new Error(`Invalid address prefix: ${addressPrefix}. ${validation.errors.join(", ")}`);
74
+ }
75
+ // Log warnings if any (e.g., misaligned network address)
76
+ if (validation.warnings.length > 0) {
77
+ console.warn(`Warning for address prefix ${addressPrefix}: ${validation.warnings.join(", ")}`);
78
+ }
79
+ }
80
+ /**
81
+ * Creates a new Azure Virtual Network Manager IPAM Pool Static CIDR using the AzapiResource framework
82
+ *
83
+ * @param scope - The scope in which to define this construct
84
+ * @param id - The unique identifier for this instance
85
+ * @param props - Configuration properties for the Static CIDR
86
+ */
87
+ constructor(scope, id, props) {
88
+ // Validate CIDR formats before construction
89
+ if (!props.addressPrefixes || props.addressPrefixes.length === 0) {
90
+ throw new Error("At least one address prefix is required");
91
+ }
92
+ props.addressPrefixes.forEach((prefix) => {
93
+ IpamPoolStaticCidr.validateAddressPrefix(prefix);
94
+ });
95
+ super(scope, id, props);
96
+ this.props = props;
97
+ // Calculate address count from first CIDR prefix
98
+ this._calculatedAddressCount = (0, cidr_validator_1.calculateAddressCount)(props.addressPrefixes[0]);
99
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
100
+ this.resourceName = `\${${this.terraformResource.fqn}.name}`;
101
+ // Create Terraform outputs for easy access and referencing from other resources
102
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
103
+ value: this.id,
104
+ description: "The ID of the Static CIDR",
105
+ });
106
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
107
+ value: this.resourceName,
108
+ description: "The name of the Static CIDR",
109
+ });
110
+ this.addressPrefixOutput = new cdktf.TerraformOutput(this, "addressPrefixes", {
111
+ value: JSON.stringify(props.addressPrefixes),
112
+ description: "The address prefixes of the Static CIDR",
113
+ });
114
+ // Override logical IDs to match naming convention
115
+ this.idOutput.overrideLogicalId("id");
116
+ this.nameOutput.overrideLogicalId("name");
117
+ this.addressPrefixOutput.overrideLogicalId("addressPrefixes");
118
+ // Apply ignore changes if specified
119
+ this._applyIgnoreChanges();
120
+ }
121
+ // =============================================================================
122
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
123
+ // =============================================================================
124
+ /**
125
+ * Resolves the parent resource ID for the Static CIDR
126
+ * Static CIDRs are scoped to IPAM Pools
127
+ */
128
+ resolveParentId(props) {
129
+ const typedProps = props;
130
+ return typedProps.ipamPoolId;
131
+ }
132
+ /**
133
+ * Gets the default API version to use when no explicit version is specified
134
+ */
135
+ defaultVersion() {
136
+ return "2024-05-01";
137
+ }
138
+ /**
139
+ * Gets the Azure resource type for Static CIDRs
140
+ */
141
+ resourceType() {
142
+ return ipam_pool_static_cidr_schemas_1.STATIC_CIDR_TYPE;
143
+ }
144
+ /**
145
+ * Gets the API schema for the resolved version
146
+ */
147
+ apiSchema() {
148
+ return this.resolveSchema();
149
+ }
150
+ /**
151
+ * Creates the resource body for the Azure API call
152
+ * Note: Child resources do not include location or tags
153
+ */
154
+ createResourceBody(props) {
155
+ const typedProps = props;
156
+ return {
157
+ properties: {
158
+ addressPrefixes: typedProps.addressPrefixes,
159
+ description: typedProps.description,
160
+ },
161
+ };
162
+ }
163
+ // =============================================================================
164
+ // PUBLIC METHODS FOR STATIC CIDR OPERATIONS
165
+ // =============================================================================
166
+ /**
167
+ * Get the address prefixes of this Static CIDR
168
+ * Returns the input addressPrefixes array
169
+ */
170
+ get addressPrefixes() {
171
+ return this.props.addressPrefixes;
172
+ }
173
+ /**
174
+ * Get the calculated number of IP addresses in this CIDR block
175
+ * This is automatically calculated from the CIDR prefix at construct creation time
176
+ *
177
+ * @returns Total count of IP addresses in the CIDR block
178
+ *
179
+ * @example
180
+ * const staticCidr = new IpamPoolStaticCidr(this, "cidr", {
181
+ * addressPrefixes: ["10.0.1.0/24"]
182
+ * });
183
+ * console.log(staticCidr.calculatedAddressCount); // 256
184
+ */
185
+ get calculatedAddressCount() {
186
+ return this._calculatedAddressCount;
187
+ }
188
+ /**
189
+ * Get the provisioning state of the Static CIDR
190
+ */
191
+ get provisioningState() {
192
+ return `\${${this.terraformResource.fqn}.output.properties.provisioningState}`;
193
+ }
194
+ // =============================================================================
195
+ // PRIVATE HELPER METHODS
196
+ // =============================================================================
197
+ /**
198
+ * Applies ignore changes lifecycle rules if specified in props
199
+ */
200
+ _applyIgnoreChanges() {
201
+ if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
202
+ this.terraformResource.addOverride("lifecycle", {
203
+ ignore_changes: this.props.ignoreChanges,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ exports.IpamPoolStaticCidr = IpamPoolStaticCidr;
209
+ _a = JSII_RTTI_SYMBOL_1;
210
+ IpamPoolStaticCidr[_a] = { fqn: "@microsoft/terraform-cdk-constructs.IpamPoolStaticCidr", version: "1.4.0" };
211
+ (() => {
212
+ azapi_resource_1.AzapiResource.registerSchemas(ipam_pool_static_cidr_schemas_1.STATIC_CIDR_TYPE, ipam_pool_static_cidr_schemas_1.ALL_STATIC_CIDR_VERSIONS);
213
+ })();
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXZpcnR1YWxuZXR3b3JrbWFuYWdlci9saWIvaXBhbS1wb29sLXN0YXRpYy1jaWRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCwrQkFBK0I7QUFFL0IsbUZBR3lDO0FBQ3pDLDJEQUE2RTtBQUM3RSw4RUFHbUQ7QUFtRG5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSw4QkFBYTtJQUtuRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQUMscUJBQXFCLENBQUMsYUFBcUI7UUFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSw2QkFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyQkFBMkIsYUFBYSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzVFLENBQUM7UUFDSixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLElBQUksQ0FDViw4QkFBOEIsYUFBYSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2pGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQWtCRDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FB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QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyx1Q0FBdUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBMU1ILGdEQTJNQzs7O0FBMU1DO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQUMsZ0RBQWdCLEVBQUUsd0RBQXdCLENBQUMsQ0FBQztBQUM1RSxDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgSVBBTSBQb29sIFN0YXRpYyBDSURSIGltcGxlbWVudGF0aW9uIHVzaW5nIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaWZpZWQgaW1wbGVtZW50YXRpb24gZm9yIGV4cGxpY2l0bHkgYWxsb2NhdGluZyBzdGF0aWMgQ0lEUiBibG9ja3NcbiAqIHdpdGhpbiBhbiBJUEFNIHBvb2wuIFN0YXRpYyBDSURScyBhbGxvdyBwcmVjaXNlIGNvbnRyb2wgb3ZlciBJUCBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb25cbiAqIGFuZCBlbmFibGUgbWFudWFsIENJRFIgcmVzZXJ2YXRpb24gd2l0aGluIHRoZSBwb29sJ3MgYWRkcmVzcyBzcGFjZS5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIzLTExLTAxIChNYWludGVuYW5jZSlcbiAqIC0gMjAyNC0wNS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gQ0lEUiBmb3JtYXQgdmFsaWRhdGlvbiBhdCBjb25zdHJ1Y3QgY3JlYXRpb24gdGltZVxuICogLSBBdXRvbWF0aWMgSVAgYWRkcmVzcyBjb3VudCBjYWxjdWxhdGlvbiBmcm9tIENJRFIgcHJlZml4XG4gKiAtIEZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfU1RBVElDX0NJRFJfVkVSU0lPTlMsXG4gIFNUQVRJQ19DSURSX1RZUEUsXG59IGZyb20gXCIuL2lwYW0tcG9vbC1zdGF0aWMtY2lkci1zY2hlbWFzXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVBZGRyZXNzQ291bnQsIHZhbGlkYXRlQ2lkciB9IGZyb20gXCIuL3V0aWxzL2NpZHItdmFsaWRhdG9yXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgU3RhdGljIENJRFJcbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFN0YXRpYyBDSURSIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgcGFyZW50IElQQU0gUG9vbFxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya01hbmFnZXJzL3ZubS9pcGFtUG9vbHMvcHJvZC1wb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgSVAgYWRkcmVzcyBwcmVmaXhlcyBpbiBDSURSIG5vdGF0aW9uXG4gICAqIE11c3QgYmUgdmFsaWQgQ0lEUiBmb3JtYXQgKGUuZy4sIFtcIjEwLjAuMC4wLzI0XCJdKVxuICAgKiBNdXN0IGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhcmVudCBwb29sJ3MgYWRkcmVzcyBzcGFjZVxuICAgKiBAZXhhbXBsZSBbXCIxMC4wLjEuMC8yNFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeGVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXRpYyBDSURSIGFsbG9jYXRpb25cbiAgICogQGV4YW1wbGUgXCJSZXNlcnZlZCBmb3IgcHJvZHVjdGlvbiB3ZWIgc2VydmVyc1wiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU3RhdGljIENJRFIgYm9keVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sU3RhdGljQ2lkclByb3BlcnRpZXMge1xuICByZWFkb25seSBhZGRyZXNzUHJlZml4ZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFN0YXRpYyBDSURSIEFQSSBjYWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sU3RhdGljQ2lkckJvZHkge1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFN0YXRpYyBDSURScyBleHBsaWNpdGx5IGFsbG9jYXRlIElQIGFkZHJlc3MgYmxvY2tzIHdpdGhpbiBhbiBJUEFNIHBvb2wsXG4gKiBwcm92aWRpbmcgcHJlY2lzZSBjb250cm9sIG92ZXIgYWRkcmVzcyBzcGFjZSByZXNlcnZhdGlvbnMuIFRoaXMgaXMgdXNlZnVsXG4gKiBmb3IgbWFudWFsIElQIGFkZHJlc3MgbWFuYWdlbWVudCBvciByZXNlcnZpbmcgc3BlY2lmaWMgcmFuZ2VzIGZvciBwYXJ0aWN1bGFyXG4gKiBwdXJwb3NlcyB3aXRoaW4gdGhlIGxhcmdlciBwb29sLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBbGxvY2F0ZSBhIHN0YXRpYyBDSURSIGJsb2NrIGluIGEgcG9vbDpcbiAqIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHRoaXMsIFwid2ViLXNlcnZlcnNcIiwge1xuICogICBuYW1lOiBcIndlYi1zZXJ2ZXJzLWNpZHJcIixcbiAqICAgaXBhbVBvb2xJZDogaXBhbVBvb2wuaWQsXG4gKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gKiAgIGRlc2NyaXB0aW9uOiBcIlJlc2VydmVkIGZvciBwcm9kdWN0aW9uIHdlYiBzZXJ2ZXJzXCJcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBbGxvY2F0ZSB3aXRoIGV4cGxpY2l0IElQIGNvdW50OlxuICogY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIodGhpcywgXCJkYXRhYmFzZS1zZXJ2ZXJzXCIsIHtcbiAqICAgbmFtZTogXCJkYi1zZXJ2ZXJzLWNpZHJcIixcbiAqICAgaXBhbVBvb2xJZDogaXBhbVBvb2wuaWQsXG4gKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4yLjAvMjRcIl0sXG4gKiAgIGRlc2NyaXB0aW9uOiBcIlJlc2VydmVkIGZvciBkYXRhYmFzZSBzZXJ2ZXJzXCIsXG4gKiAgIGFwaVZlcnNpb246IFwiMjAyNC0wNS0wMVwiXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgSXBhbVBvb2xTdGF0aWNDaWRyIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoU1RBVElDX0NJRFJfVFlQRSwgQUxMX1NUQVRJQ19DSURSX1ZFUlNJT05TKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWRkcmVzcyBwcmVmaXggZm9yIGNvcnJlY3QgQ0lEUiBmb3JtYXRcbiAgICogVGhyb3dzIGRlc2NyaXB0aXZlIGVycm9ycyBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqXG4gICAqIEBwYXJhbSBhZGRyZXNzUHJlZml4IC0gQ0lEUiBibG9jayB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlQWRkcmVzc1ByZWZpeChhZGRyZXNzUHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWFkZHJlc3NQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZHJlc3MgcHJlZml4IGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUNpZHIoYWRkcmVzc1ByZWZpeCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGFkZHJlc3MgcHJlZml4OiAke2FkZHJlc3NQcmVmaXh9LiAke3ZhbGlkYXRpb24uZXJyb3JzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgaWYgYW55IChlLmcuLCBtaXNhbGlnbmVkIG5ldHdvcmsgYWRkcmVzcylcbiAgICBpZiAodmFsaWRhdGlvbi53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBXYXJuaW5nIGZvciBhZGRyZXNzIHByZWZpeCAke2FkZHJlc3NQcmVmaXh9OiAke3ZhbGlkYXRpb24ud2FybmluZ3Muam9pbihcIiwgXCIpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBmb3IgdGhpcyBTdGF0aWMgQ0lEUiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICAvLyBTdG9yZSBjYWxjdWxhdGVkIGFkZHJlc3MgY291bnRcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FsY3VsYXRlZEFkZHJlc3NDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiB1c2luZyB0aGUgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgU3RhdGljIENJRFJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcykge1xuICAgIC8vIFZhbGlkYXRlIENJRFIgZm9ybWF0cyBiZWZvcmUgY29uc3RydWN0aW9uXG4gICAgaWYgKCFwcm9wcy5hZGRyZXNzUHJlZml4ZXMgfHwgcHJvcHMuYWRkcmVzc1ByZWZpeGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIGFkZHJlc3MgcHJlZml4IGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBwcm9wcy5hZGRyZXNzUHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgICBJcGFtUG9vbFN0YXRpY0NpZHIudmFsaWRhdGVBZGRyZXNzUHJlZml4KHByZWZpeCk7XG4gICAgfSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENhbGN1bGF0ZSBhZGRyZXNzIGNvdW50IGZyb20gZmlyc3QgQ0lEUiBwcmVmaXhcbiAgICB0aGlzLl9jYWxjdWxhdGVkQWRkcmVzc0NvdW50ID0gY2FsY3VsYXRlQWRkcmVzc0NvdW50KFxuICAgICAgcHJvcHMuYWRkcmVzc1ByZWZpeGVzWzBdLFxuICAgICk7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuICAgIHRoaXMucmVzb3VyY2VOYW1lID0gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWA7XG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFN0YXRpYyBDSURSXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5yZXNvdXJjZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgU3RhdGljIENJRFJcIixcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkcmVzc1ByZWZpeE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJhZGRyZXNzUHJlZml4ZXNcIixcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHByb3BzLmFkZHJlc3NQcmVmaXhlcyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBhZGRyZXNzIHByZWZpeGVzIG9mIHRoZSBTdGF0aWMgQ0lEUlwiLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHMgdG8gbWF0Y2ggbmFtaW5nIGNvbnZlbnRpb25cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmFkZHJlc3NQcmVmaXhPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJhZGRyZXNzUHJlZml4ZXNcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBTdGF0aWMgQ0lEUlxuICAgKiBTdGF0aWMgQ0lEUnMgYXJlIHNjb3BlZCB0byBJUEFNIFBvb2xzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBJcGFtUG9vbFN0YXRpY0NpZHJQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5pcGFtUG9vbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDUtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBTdGF0aWMgQ0lEUnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU1RBVElDX0NJRFJfVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogTm90ZTogQ2hpbGQgcmVzb3VyY2VzIGRvIG5vdCBpbmNsdWRlIGxvY2F0aW9uIG9yIHRhZ3NcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIElwYW1Qb29sU3RhdGljQ2lkclByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiB0eXBlZFByb3BzLmFkZHJlc3NQcmVmaXhlcyxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgU1RBVElDIENJRFIgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFkZHJlc3MgcHJlZml4ZXMgb2YgdGhpcyBTdGF0aWMgQ0lEUlxuICAgKiBSZXR1cm5zIHRoZSBpbnB1dCBhZGRyZXNzUHJlZml4ZXMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkcmVzc1ByZWZpeGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hZGRyZXNzUHJlZml4ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYWxjdWxhdGVkIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhpcyBDSURSIGJsb2NrXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIENJRFIgcHJlZml4IGF0IGNvbnN0cnVjdCBjcmVhdGlvbiB0aW1lXG4gICAqXG4gICAqIEByZXR1cm5zIFRvdGFsIGNvdW50IG9mIElQIGFkZHJlc3NlcyBpbiB0aGUgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBzdGF0aWNDaWRyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcih0aGlzLCBcImNpZHJcIiwge1xuICAgKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl1cbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKHN0YXRpY0NpZHIuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCk7IC8vIDI1NlxuICAgKi9cbiAgcHVibGljIGdldCBjYWxjdWxhdGVkQWRkcmVzc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZWRBZGRyZXNzQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIFN0YXRpYyBDSURSXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb3Zpc2lvbmluZ1N0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGV9YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==