@microsoft/terraform-cdk-constructs 1.7.1 → 1.9.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.
- package/.jsii +46476 -27231
- package/API.md +68443 -28286
- package/lib/azure-actiongroup/lib/action-group.js +1 -1
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
- package/lib/azure-aks/lib/aks-cluster.js +1 -1
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
- package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
- package/lib/azure-dnszone/lib/dns-zone.js +1 -1
- package/lib/azure-dnszone/lib/index.d.ts +1 -0
- package/lib/azure-dnszone/lib/index.js +2 -1
- package/lib/azure-dnszone/lib/records/dns-record-schemas.d.ts +68 -0
- package/lib/azure-dnszone/lib/records/dns-record-schemas.js +813 -0
- package/lib/azure-dnszone/lib/records/dns-records.d.ts +688 -0
- package/lib/azure-dnszone/lib/records/dns-records.js +924 -0
- package/lib/azure-dnszone/lib/records/index.d.ts +19 -0
- package/lib/azure-dnszone/lib/records/index.js +38 -0
- package/lib/azure-dnszone/test/dns-records.integ.d.ts +21 -0
- package/lib/azure-dnszone/test/dns-records.integ.js +321 -0
- package/lib/azure-dnszone/test/dns-records.spec.d.ts +20 -0
- package/lib/azure-dnszone/test/dns-records.spec.js +950 -0
- package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
- package/lib/azure-loganalyticsworkspace/index.js +23 -0
- package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
- package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-networkinterface/lib/network-interface.js +1 -1
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
- package/lib/azure-networkwatcher/index.d.ts +14 -0
- package/lib/azure-networkwatcher/index.js +31 -0
- package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
- package/lib/azure-networkwatcher/lib/index.js +22 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
- package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
- package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
- package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
- package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
- package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
- package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
- package/lib/azure-policysetdefinition/index.d.ts +10 -0
- package/lib/azure-policysetdefinition/index.js +27 -0
- package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
- package/lib/azure-policysetdefinition/lib/index.js +22 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
- package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
- package/lib/azure-privatednszone/lib/index.d.ts +1 -0
- package/lib/azure-privatednszone/lib/index.js +2 -1
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +0 -2
- package/lib/azure-privatednszone/lib/private-dns-zone.js +6 -13
- package/lib/azure-privatednszone/lib/records/index.d.ts +7 -0
- package/lib/azure-privatednszone/lib/records/index.js +26 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.d.ts +52 -0
- package/lib/azure-privatednszone/lib/records/private-dns-record-schemas.js +683 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +523 -0
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +739 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +19 -0
- package/lib/azure-privatednszone/test/private-dns-records.integ.js +245 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.d.ts +18 -0
- package/lib/azure-privatednszone/test/private-dns-records.spec.js +756 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +5 -5
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
- package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
- package/lib/azure-roledefinition/lib/role-definition.js +1 -1
- package/lib/azure-storageaccount/lib/storage-account.js +1 -1
- package/lib/azure-subnet/lib/subnet.js +1 -1
- package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
- package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
- package/lib/core-azure/lib/azapi/azapi-resource.js +4 -4
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +23 -0
- package/lib/index.js +25 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PolicySetDefinition = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Policy Set Definition (Initiative) implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a version-aware implementation for Azure Policy Set Definitions
|
|
10
|
+
* that automatically handles version management, schema validation, and property
|
|
11
|
+
* transformation across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* Policy Set Definitions (also known as Initiatives in Azure Portal) allow you to
|
|
14
|
+
* group multiple policy definitions together and assign them as a single unit.
|
|
15
|
+
*
|
|
16
|
+
* Supported API Versions:
|
|
17
|
+
* - 2023-04-01 (Active, Latest)
|
|
18
|
+
* - 2021-06-01 (Active, Backward Compatibility)
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Automatic latest version resolution when no version is specified
|
|
22
|
+
* - Explicit version pinning for stability requirements
|
|
23
|
+
* - Schema-driven validation and transformation
|
|
24
|
+
* - Full JSII compliance for multi-language support
|
|
25
|
+
* - Support for policy definition references with parameters
|
|
26
|
+
* - Policy definition groups for organization
|
|
27
|
+
* - Initiative-level parameter definitions
|
|
28
|
+
*/
|
|
29
|
+
const crypto_1 = require("crypto");
|
|
30
|
+
const cdktf = require("cdktf");
|
|
31
|
+
const policy_set_definition_schemas_1 = require("./policy-set-definition-schemas");
|
|
32
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
33
|
+
/**
|
|
34
|
+
* Unified Azure Policy Set Definition (Initiative) implementation
|
|
35
|
+
*
|
|
36
|
+
* This class provides a single, version-aware implementation for managing Azure
|
|
37
|
+
* Policy Set Definitions. It automatically handles version resolution, schema validation,
|
|
38
|
+
* and property transformation.
|
|
39
|
+
*
|
|
40
|
+
* Policy Set Definitions allow you to group multiple policy definitions together
|
|
41
|
+
* and assign them as a single unit (also known as "Initiatives" in Azure Portal).
|
|
42
|
+
*
|
|
43
|
+
* Note: Policy set definitions are created at subscription or management group scope.
|
|
44
|
+
* They do not have a location property as they are not region-specific.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const initiative = new PolicySetDefinition(this, "security-initiative", {
|
|
48
|
+
* displayName: "Security Baseline",
|
|
49
|
+
* scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
|
|
50
|
+
* policyDefinitions: [
|
|
51
|
+
* {
|
|
52
|
+
* policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/abc123",
|
|
53
|
+
* policyDefinitionReferenceId: "auditVMsWithoutExtensions",
|
|
54
|
+
* },
|
|
55
|
+
* ],
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* @stability stable
|
|
59
|
+
*/
|
|
60
|
+
class PolicySetDefinition extends azapi_resource_1.AzapiResource {
|
|
61
|
+
/**
|
|
62
|
+
* Creates a new Azure Policy Set Definition using the AzapiResource framework
|
|
63
|
+
*
|
|
64
|
+
* The constructor automatically handles version resolution, schema registration,
|
|
65
|
+
* validation, and resource creation.
|
|
66
|
+
*
|
|
67
|
+
* @param scope - The scope in which to define this construct
|
|
68
|
+
* @param id - The unique identifier for this instance
|
|
69
|
+
* @param props - Configuration properties for the Policy Set Definition
|
|
70
|
+
*/
|
|
71
|
+
constructor(scope, id, props) {
|
|
72
|
+
// Validate required properties
|
|
73
|
+
if (!props.displayName || props.displayName.trim() === "") {
|
|
74
|
+
throw new Error("displayName is required for policy set definitions");
|
|
75
|
+
}
|
|
76
|
+
if (!props.policyDefinitions || props.policyDefinitions.length === 0) {
|
|
77
|
+
throw new Error("At least one policy definition reference is required in policyDefinitions");
|
|
78
|
+
}
|
|
79
|
+
// Validate policy definition references
|
|
80
|
+
props.policyDefinitions.forEach((policyDef, index) => {
|
|
81
|
+
if (!policyDef.policyDefinitionId) {
|
|
82
|
+
throw new Error(`policyDefinitionId is required for policy definition at index ${index}`);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// Validate policy definition groups if provided
|
|
86
|
+
if (props.policyDefinitionGroups) {
|
|
87
|
+
const groupNames = new Set();
|
|
88
|
+
props.policyDefinitionGroups.forEach((group, index) => {
|
|
89
|
+
if (!group.name) {
|
|
90
|
+
throw new Error(`name is required for policy definition group at index ${index}`);
|
|
91
|
+
}
|
|
92
|
+
if (groupNames.has(group.name)) {
|
|
93
|
+
throw new Error(`Duplicate group name '${group.name}' in policyDefinitionGroups`);
|
|
94
|
+
}
|
|
95
|
+
groupNames.add(group.name);
|
|
96
|
+
});
|
|
97
|
+
// Validate that policy definitions reference valid groups
|
|
98
|
+
const validGroupNames = Array.from(groupNames);
|
|
99
|
+
props.policyDefinitions.forEach((policyDef, index) => {
|
|
100
|
+
if (policyDef.groupNames) {
|
|
101
|
+
policyDef.groupNames.forEach((groupName) => {
|
|
102
|
+
if (!validGroupNames.includes(groupName)) {
|
|
103
|
+
throw new Error(`Policy definition at index ${index} references unknown group '${groupName}'. Valid groups are: ${validGroupNames.join(", ")}`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
super(scope, id, props);
|
|
110
|
+
this.props = props;
|
|
111
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
112
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
113
|
+
value: this.id,
|
|
114
|
+
description: "The ID of the Policy Set Definition",
|
|
115
|
+
});
|
|
116
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
117
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
118
|
+
description: "The name of the Policy Set Definition",
|
|
119
|
+
});
|
|
120
|
+
this.policySetDefinitionIdOutput = new cdktf.TerraformOutput(this, "policy_set_definition_id", {
|
|
121
|
+
value: this.id,
|
|
122
|
+
description: "The Policy Set Definition ID (same as id, for use in policy assignments)",
|
|
123
|
+
});
|
|
124
|
+
// Override logical IDs to match original naming convention
|
|
125
|
+
this.idOutput.overrideLogicalId("id");
|
|
126
|
+
this.nameOutput.overrideLogicalId("name");
|
|
127
|
+
this.policySetDefinitionIdOutput.overrideLogicalId("policy_set_definition_id");
|
|
128
|
+
}
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
131
|
+
// =============================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Gets the default API version to use when no explicit version is specified
|
|
134
|
+
* Returns the most recent stable version as the default
|
|
135
|
+
*/
|
|
136
|
+
defaultVersion() {
|
|
137
|
+
return "2023-04-01";
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Gets the Azure resource type for Policy Set Definitions
|
|
141
|
+
*/
|
|
142
|
+
resourceType() {
|
|
143
|
+
return policy_set_definition_schemas_1.POLICY_SET_DEFINITION_TYPE;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Gets the API schema for the resolved version
|
|
147
|
+
* Uses the framework's schema resolution to get the appropriate schema
|
|
148
|
+
*/
|
|
149
|
+
apiSchema() {
|
|
150
|
+
return this.resolveSchema();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Overrides the name resolution to generate deterministic GUIDs for policy set definitions
|
|
154
|
+
*
|
|
155
|
+
* Policy set definitions can use custom names or auto-generated GUIDs.
|
|
156
|
+
* This implementation generates a deterministic UUID based on the policy set definition's
|
|
157
|
+
* key properties if no name is provided.
|
|
158
|
+
*/
|
|
159
|
+
resolveName(props) {
|
|
160
|
+
const typedProps = props;
|
|
161
|
+
// If name is provided, use it
|
|
162
|
+
if (typedProps.name) {
|
|
163
|
+
return typedProps.name;
|
|
164
|
+
}
|
|
165
|
+
// Generate a deterministic GUID based on display name and scope
|
|
166
|
+
const hashInput = [typedProps.displayName, typedProps.scope].join("|");
|
|
167
|
+
const hash = (0, crypto_1.createHash)("sha256").update(hashInput).digest("hex");
|
|
168
|
+
// Convert hash to UUID format (8-4-4-4-12)
|
|
169
|
+
return [
|
|
170
|
+
hash.substring(0, 8),
|
|
171
|
+
hash.substring(8, 12),
|
|
172
|
+
hash.substring(12, 16),
|
|
173
|
+
hash.substring(16, 20),
|
|
174
|
+
hash.substring(20, 32),
|
|
175
|
+
].join("-");
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Creates the resource body for the Azure API call
|
|
179
|
+
* Transforms the input properties into the JSON format expected by Azure REST API
|
|
180
|
+
*
|
|
181
|
+
* Note: Policy set definitions do not have a location property as they are
|
|
182
|
+
* scope-specific resources deployed at subscription or management group level.
|
|
183
|
+
*/
|
|
184
|
+
createResourceBody(props) {
|
|
185
|
+
const typedProps = props;
|
|
186
|
+
const body = {
|
|
187
|
+
properties: {
|
|
188
|
+
displayName: typedProps.displayName,
|
|
189
|
+
policyType: typedProps.policyType || "Custom",
|
|
190
|
+
policyDefinitions: typedProps.policyDefinitions,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
// Add optional properties only if specified
|
|
194
|
+
if (typedProps.description) {
|
|
195
|
+
body.properties.description = typedProps.description;
|
|
196
|
+
}
|
|
197
|
+
if (typedProps.metadata) {
|
|
198
|
+
body.properties.metadata = typedProps.metadata;
|
|
199
|
+
}
|
|
200
|
+
if (typedProps.parameters) {
|
|
201
|
+
body.properties.parameters = typedProps.parameters;
|
|
202
|
+
}
|
|
203
|
+
if (typedProps.policyDefinitionGroups &&
|
|
204
|
+
typedProps.policyDefinitionGroups.length > 0) {
|
|
205
|
+
body.properties.policyDefinitionGroups =
|
|
206
|
+
typedProps.policyDefinitionGroups;
|
|
207
|
+
}
|
|
208
|
+
return body;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Resolves the parent resource ID for Policy Set Definition
|
|
212
|
+
* Policy Set Definitions are created at subscription or management group scope
|
|
213
|
+
*
|
|
214
|
+
* @param props - The resource properties
|
|
215
|
+
* @returns The parent resource ID (the scope)
|
|
216
|
+
*/
|
|
217
|
+
resolveParentId(props) {
|
|
218
|
+
return props.scope;
|
|
219
|
+
}
|
|
220
|
+
// =============================================================================
|
|
221
|
+
// PUBLIC METHODS FOR POLICY SET DEFINITION OPERATIONS
|
|
222
|
+
// =============================================================================
|
|
223
|
+
/**
|
|
224
|
+
* Get the full resource identifier for use in policy assignments
|
|
225
|
+
* Alias for the id property
|
|
226
|
+
*/
|
|
227
|
+
get policySetDefinitionId() {
|
|
228
|
+
return this.id;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get the display name of the policy set definition
|
|
232
|
+
*/
|
|
233
|
+
get displayName() {
|
|
234
|
+
return this.props.displayName;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get the policy type
|
|
238
|
+
*/
|
|
239
|
+
get policyType() {
|
|
240
|
+
return this.props.policyType || "Custom";
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get the number of policy definitions in this set
|
|
244
|
+
*/
|
|
245
|
+
get policyDefinitionCount() {
|
|
246
|
+
return this.props.policyDefinitions.length;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
exports.PolicySetDefinition = PolicySetDefinition;
|
|
250
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
251
|
+
PolicySetDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicySetDefinition", version: "1.9.0" };
|
|
252
|
+
(() => {
|
|
253
|
+
azapi_resource_1.AzapiResource.registerSchemas(policy_set_definition_schemas_1.POLICY_SET_DEFINITION_TYPE, policy_set_definition_schemas_1.ALL_POLICY_SET_DEFINITION_VERSIONS);
|
|
254
|
+
})();
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LXNldC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXBvbGljeXNldGRlZmluaXRpb24vbGliL3BvbGljeS1zZXQtZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsbUNBQW9DO0FBQ3BDLCtCQUErQjtBQUUvQixtRkFHeUM7QUFDekMsOEVBR21EO0FBb1ZuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLDhCQUFhO0lBa0JwRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLCtCQUErQjtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkVBQTJFLENBQzVFLENBQUM7UUFDSixDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxLQUFLLEVBQUUsQ0FDekUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILGdEQUFnRDtRQUNoRCxJQUFJ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QUksUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcscUJBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQzs7QUEvUEgsa0RBZ1FDOzs7QUEvUEM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0IsMERBQTBCLEVBQzFCLGtFQUFrQyxDQUNuQyxDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IFNldCBEZWZpbml0aW9uIChJbml0aWF0aXZlKSBpbXBsZW1lbnRhdGlvbiB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBQb2xpY3kgU2V0IERlZmluaXRpb25zXG4gKiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYSB2YWxpZGF0aW9uLCBhbmQgcHJvcGVydHlcbiAqIHRyYW5zZm9ybWF0aW9uIGFjcm9zcyBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucy5cbiAqXG4gKiBQb2xpY3kgU2V0IERlZmluaXRpb25zIChhbHNvIGtub3duIGFzIEluaXRpYXRpdmVzIGluIEF6dXJlIFBvcnRhbCkgYWxsb3cgeW91IHRvXG4gKiBncm91cCBtdWx0aXBsZSBwb2xpY3kgZGVmaW5pdGlvbnMgdG9nZXRoZXIgYW5kIGFzc2lnbiB0aGVtIGFzIGEgc2luZ2xlIHVuaXQuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyMy0wNC0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKiAtIDIwMjEtMDYtMDEgKEFjdGl2ZSwgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSlcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBGdWxsIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogLSBTdXBwb3J0IGZvciBwb2xpY3kgZGVmaW5pdGlvbiByZWZlcmVuY2VzIHdpdGggcGFyYW1ldGVyc1xuICogLSBQb2xpY3kgZGVmaW5pdGlvbiBncm91cHMgZm9yIG9yZ2FuaXphdGlvblxuICogLSBJbml0aWF0aXZlLWxldmVsIHBhcmFtZXRlciBkZWZpbml0aW9uc1xuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX1NFVF9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBQT0xJQ1lfU0VUX0RFRklOSVRJT05fVFlQRSxcbn0gZnJvbSBcIi4vcG9saWN5LXNldC1kZWZpbml0aW9uLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSBwb2xpY3kgZGVmaW5pdGlvbiB3aXRoaW4gYSBwb2xpY3kgc2V0XG4gKlxuICogVGhpcyBkZWZpbmVzIHdoaWNoIHBvbGljeSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIGluaXRpYXRpdmVcbiAqIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZCB3aXRoIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvblJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIHNldFxuICAgKlxuICAgKiBUaGlzIGNhbiBiZTpcbiAgICogLSBBIGJ1aWx0LWluIHBvbGljeTogL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy97cG9saWN5RGVmaW5pdGlvbklkfVxuICAgKiAtIEEgY3VzdG9tIHBvbGljeSBhdCBzdWJzY3JpcHRpb24gbGV2ZWw6IC9zdWJzY3JpcHRpb25zL3tzdWJzY3JpcHRpb25JZH0vcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3twb2xpY3lEZWZpbml0aW9uSWR9XG4gICAqIC0gQSBjdXN0b20gcG9saWN5IGF0IG1hbmFnZW1lbnQgZ3JvdXAgbGV2ZWw6IC9wcm92aWRlcnMvTWljcm9zb2Z0Lk1hbmFnZW1lbnQvbWFuYWdlbWVudEdyb3Vwcy97bWFuYWdlbWVudEdyb3VwSWR9L3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy97cG9saWN5RGVmaW5pdGlvbklkfVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIi9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvMDZhNzhlMjAtOTM1OC00MWM5LTkyM2MtZmI3MzZkMzgyYTRkXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHBvbGljeSBkZWZpbml0aW9uIHJlZmVyZW5jZSB3aXRoaW4gdGhlIHNldFxuICAgKlxuICAgKiBUaGlzIElEIGlzIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgc3BlY2lmaWMgcG9saWN5IGluIHRoZSBpbml0aWF0aXZlXG4gICAqIGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHBvbGljeSBzZXQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJhdWRpdFZNc1dpdGhvdXRUYWdzXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25SZWZlcmVuY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGFyYW1ldGVyIHZhbHVlcyBmb3IgdGhpcyBwb2xpY3kgZGVmaW5pdGlvblxuICAgKlxuICAgKiBUaGVzZSB2YWx1ZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBpbiB0aGUgcG9saWN5IGRlZmluaXRpb24uXG4gICAqIFBhcmFtZXRlcnMgY2FuIHJlZmVyZW5jZSBpbml0aWF0aXZlLWxldmVsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIGZvcm1hdDpcbiAgICogeyBcInZhbHVlXCI6IFwiW3BhcmFtZXRlcnMoJ2luaXRpYXRpdmVQYXJhbWV0ZXJOYW1lJyldXCIgfVxuICAgKlxuICAgKiBAZXhhbXBsZSB7IFwidGFnTmFtZVwiOiB7IFwidmFsdWVcIjogXCJlbnZpcm9ubWVudFwiIH0sIFwidGFnVmFsdWVcIjogeyBcInZhbHVlXCI6IFwiW3BhcmFtZXRlcnMoJ3JlcXVpcmVkVGFnVmFsdWUnKV1cIiB9IH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IFBvbGljeVBhcmFtZXRlclZhbHVlIH07XG5cbiAgLyoqXG4gICAqIEdyb3VwIG5hbWVzIHRoYXQgdGhpcyBwb2xpY3kgZGVmaW5pdGlvbiBiZWxvbmdzIHRvXG4gICAqXG4gICAqIEdyb3VwcyBoZWxwIG9yZ2FuaXplIHBvbGljaWVzIHdpdGhpbiBhbiBpbml0aWF0aXZlIGFuZCBjYW4gYmUgdXNlZFxuICAgKiBmb3IgY29tcGxpYW5jZSByZXBvcnRpbmcgYW5kIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEBleGFtcGxlIFtcIlNlY3VyaXR5XCIsIFwiQ29tcGxpYW5jZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXBOYW1lcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgZ3JvdXAgZm9yIG9yZ2FuaXppbmcgcG9saWN5IGRlZmluaXRpb25zIHdpdGhpbiBhIHBvbGljeSBzZXRcbiAqXG4gKiBHcm91cHMgcHJvdmlkZSBhIHdheSB0byBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSBwb2xpY2llcyB3aXRoaW4gYW4gaW5pdGlhdGl2ZVxuICogZm9yIGJldHRlciBtYW5hZ2VtZW50IGFuZCBjb21wbGlhbmNlIHJlcG9ydGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lEZWZpbml0aW9uR3JvdXAge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdyb3VwIChtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHBvbGljeSBzZXQpXG4gICAqXG4gICAqIFRoaXMgbmFtZSBpcyByZWZlcmVuY2VkIGJ5IHBvbGljeSBkZWZpbml0aW9ucyB0byBpbmRpY2F0ZSBtZW1iZXJzaGlwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcIlNlY3VyaXR5XCJcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgZ3JvdXAgc2hvd24gaW4gQXp1cmUgUG9ydGFsXG4gICAqXG4gICAqIEBleGFtcGxlIFwiU2VjdXJpdHkgUG9saWNpZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXRlZ29yeSB0aGlzIGdyb3VwIGJlbG9uZ3MgdG9cbiAgICpcbiAgICogQ2F0ZWdvcmllcyBoZWxwIG9yZ2FuaXplIGdyb3VwcyBhbmQgYXJlIGRpc3BsYXllZCBpbiB0aGUgQXp1cmUgUG9ydGFsLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcIlNlY3VyaXR5IENlbnRlclwiXG4gICAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgZ3JvdXAncyBwdXJwb3NlXG4gICAqXG4gICAqIEBleGFtcGxlIFwiUG9saWNpZXMgcmVsYXRlZCB0byBzZWN1cml0eSBjb25maWd1cmF0aW9uIGFuZCBjb21wbGlhbmNlXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIGZvciB0aGUgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXRhZGF0YUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gKlxuICogTWV0YWRhdGEgcHJvdmlkZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9saWN5IHNldFxuICogd2l0aG91dCBhZmZlY3RpbmcgaXRzIGV2YWx1YXRpb24gbG9naWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5U2V0TWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGNhdGVnb3J5IG9mIHRoZSBwb2xpY3kgc2V0IGZvciBBenVyZSBQb3J0YWwgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlIFwiU2VjdXJpdHkgQ2VudGVyXCJcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlIFwiMS4wLjBcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHBvbGljeSBzZXQgaXMgaW4gcHJldmlld1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBwb2xpY3kgc2V0IGlzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0ZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhIHBvbGljeSBzZXQgcGFyYW1ldGVyXG4gKlxuICogUHJvdmlkZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgQXp1cmUgUG9ydGFsIGludGVncmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeVNldFBhcmFtZXRlck1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFN0cm9uZyB0eXBlIGZvciBBenVyZSBQb3J0YWwgcmVzb3VyY2UgcGlja2VyIGludGVncmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdHJvbmdUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgaW4gQXp1cmUgUG9ydGFsXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gaW4gQXp1cmUgUG9ydGFsXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXIgZGVmaW5pdGlvbiBmb3IgdGhlIHBvbGljeSBzZXRcbiAqXG4gKiBUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSByZWZlcmVuY2VkIGJ5IHBvbGljeSBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIHNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lTZXRQYXJhbWV0ZXJEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTpcbiAgICB8IFwiU3RyaW5nXCJcbiAgICB8IFwiQXJyYXlcIlxuICAgIHwgXCJPYmplY3RcIlxuICAgIHwgXCJCb29sZWFuXCJcbiAgICB8IFwiSW50ZWdlclwiXG4gICAgfCBcIkZsb2F0XCJcbiAgICB8IFwiRGF0ZVRpbWVcIjtcblxuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciB0aGUgcGFyYW1ldGVyIGluIEF6dXJlIFBvcnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFsbG93ZWQgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVyXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkVmFsdWVzPzogYW55W107XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcGFyYW1ldGVyIChlLmcuLCBzdHJvbmdUeXBlIGZvciBBenVyZSBQb3J0YWwgaW50ZWdyYXRpb24pXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFBvbGljeVNldFBhcmFtZXRlck1ldGFkYXRhO1xufVxuXG4vKipcbiAqIEEgcGFyYW1ldGVyIHZhbHVlLCBlaXRoZXIgYSBkaXJlY3QgdmFsdWUgb3IgYSByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lQYXJhbWV0ZXJWYWx1ZSB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBDYW4gYmUgYSBkaXJlY3QgdmFsdWUgb3IgYSByZWZlcmVuY2UgdG8gYW4gaW5pdGlhdGl2ZSBwYXJhbWV0ZXJcbiAgICogdXNpbmcgdGhlIGZvcm1hdDogXCJbcGFyYW1ldGVycygncGFyYW1ldGVyTmFtZScpXVwiXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBTZXQgRGVmaW5pdGlvblxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggUG9saWN5IFNldCBEZWZpbml0aW9uIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lTZXREZWZpbml0aW9uUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHNjb3BlIGF0IHdoaWNoIHRvIGNyZWF0ZSB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlOlxuICAgKiAtIEEgc3Vic2NyaXB0aW9uOiAvc3Vic2NyaXB0aW9ucy97c3Vic2NyaXB0aW9uSWR9XG4gICAqIC0gQSBtYW5hZ2VtZW50IGdyb3VwOiAvcHJvdmlkZXJzL01pY3Jvc29mdC5NYW5hZ2VtZW50L21hbmFnZW1lbnRHcm91cHMve21hbmFnZW1lbnRHcm91cElkfVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXG4gICAqIEBleGFtcGxlIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlbWVudC9tYW5hZ2VtZW50R3JvdXBzL215LW1hbmFnZW1lbnQtZ3JvdXBcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG5hbWUgc2hvd24gaW4gdGhlIEF6dXJlIFBvcnRhbC5cbiAgICogUmVxdWlyZWQgcHJvcGVydHkuXG4gICAqXG4gICAqIEBleGFtcGxlIFwiU2VjdXJpdHkgQmFzZWxpbmUgSW5pdGlhdGl2ZVwiXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlIFwiVGhpcyBpbml0aWF0aXZlIGFwcGxpZXMgYSBzZXQgb2Ygc2VjdXJpdHkgcG9saWNpZXMgdG8gZW5zdXJlIGJhc2VsaW5lIGNvbXBsaWFuY2UuXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwb2xpY3kgc2V0IGRlZmluaXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgXCJDdXN0b21cIlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5VHlwZT86IFwiQnVpbHRJblwiIHwgXCJDdXN0b21cIiB8IFwiU3RhdGljXCI7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqXG4gICAqIEluY2x1ZGVzIGNhdGVnb3J5LCB2ZXJzaW9uLCBwcmV2aWV3LCBhbmQgZGVwcmVjYXRlZCBmbGFncy5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUG9saWN5U2V0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlciBkZWZpbml0aW9ucyBmb3IgdGhlIHBvbGljeSBzZXRcbiAgICpcbiAgICogVGhlc2UgcGFyYW1ldGVycyBjYW4gYmUgcmVmZXJlbmNlZCBieSBwb2xpY3kgZGVmaW5pdGlvbnMgaW4gdGhlIHNldFxuICAgKiB1c2luZyB0aGUgZm9ybWF0OiBcIltwYXJhbWV0ZXJzKCdwYXJhbWV0ZXJOYW1lJyldXCJcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IFBvbGljeVNldFBhcmFtZXRlckRlZmluaXRpb24gfTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgcG9saWN5IGRlZmluaXRpb24gcmVmZXJlbmNlc1xuICAgKlxuICAgKiBFYWNoIHJlZmVyZW5jZSBzcGVjaWZpZXMgYSBwb2xpY3kgZGVmaW5pdGlvbiB0byBpbmNsdWRlIGluIHRoZSBzZXRcbiAgICogYWxvbmcgd2l0aCBpdHMgcGFyYW1ldGVyIHZhbHVlcyBhbmQgZ3JvdXAgbWVtYmVyc2hpcHMuXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbnM6IFBvbGljeURlZmluaXRpb25SZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogR3JvdXBzIGZvciBvcmdhbml6aW5nIHBvbGljeSBkZWZpbml0aW9ucyBpbiB0aGUgc2V0XG4gICAqXG4gICAqIEdyb3VwcyBoZWxwIGNhdGVnb3JpemUgcG9saWNpZXMgZm9yIG1hbmFnZW1lbnQgYW5kIGNvbXBsaWFuY2UgcmVwb3J0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbkdyb3Vwcz86IFBvbGljeURlZmluaXRpb25Hcm91cFtdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgU2V0IERlZmluaXRpb25cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeVNldERlZmluaXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBzZXQgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIHBvbGljeSBzZXQgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBvbGljeSBzZXQgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0YWRhdGEgZm9yIHRoZSBwb2xpY3kgc2V0IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUG9saWN5U2V0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlciBkZWZpbml0aW9ucyBmb3IgdGhlIHBvbGljeSBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IFBvbGljeVNldFBhcmFtZXRlckRlZmluaXRpb24gfTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgcG9saWN5IGRlZmluaXRpb24gcmVmZXJlbmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbnM6IFBvbGljeURlZmluaXRpb25SZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogR3JvdXBzIGZvciBvcmdhbml6aW5nIHBvbGljeSBkZWZpbml0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbkdyb3Vwcz86IFBvbGljeURlZmluaXRpb25Hcm91cFtdO1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBib2R5IGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IFNldCBEZWZpbml0aW9uIEFQSSBjYWxsc1xuICogVGhpcyBtYXRjaGVzIHRoZSBBenVyZSBSRVNUIEFQSSBzY2hlbWEgZm9yIHBvbGljeSBzZXQgZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lTZXREZWZpbml0aW9uQm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBQb2xpY3lTZXREZWZpbml0aW9uUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBTZXQgRGVmaW5pdGlvbiAoSW5pdGlhdGl2ZSkgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUG9saWN5IFNldCBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogUG9saWN5IFNldCBEZWZpbml0aW9ucyBhbGxvdyB5b3UgdG8gZ3JvdXAgbXVsdGlwbGUgcG9saWN5IGRlZmluaXRpb25zIHRvZ2V0aGVyXG4gKiBhbmQgYXNzaWduIHRoZW0gYXMgYSBzaW5nbGUgdW5pdCAoYWxzbyBrbm93biBhcyBcIkluaXRpYXRpdmVzXCIgaW4gQXp1cmUgUG9ydGFsKS5cbiAqXG4gKiBOb3RlOiBQb2xpY3kgc2V0IGRlZmluaXRpb25zIGFyZSBjcmVhdGVkIGF0IHN1YnNjcmlwdGlvbiBvciBtYW5hZ2VtZW50IGdyb3VwIHNjb3BlLlxuICogVGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlIG5vdCByZWdpb24tc3BlY2lmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGluaXRpYXRpdmUgPSBuZXcgUG9saWN5U2V0RGVmaW5pdGlvbih0aGlzLCBcInNlY3VyaXR5LWluaXRpYXRpdmVcIiwge1xuICogICBkaXNwbGF5TmFtZTogXCJTZWN1cml0eSBCYXNlbGluZVwiLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgcG9saWN5RGVmaW5pdGlvbnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6IFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9hYmMxMjNcIixcbiAqICAgICAgIHBvbGljeURlZmluaXRpb25SZWZlcmVuY2VJZDogXCJhdWRpdFZNc1dpdGhvdXRFeHRlbnNpb25zXCIsXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lTZXREZWZpbml0aW9uIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfU0VUX0RFRklOSVRJT05fVFlQRSxcbiAgICAgIEFMTF9QT0xJQ1lfU0VUX0RFRklOSVRJT05fVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBmb3IgdGhpcyBQb2xpY3kgU2V0IERlZmluaXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5U2V0RGVmaW5pdGlvblByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBwb2xpY3lTZXREZWZpbml0aW9uSWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgU2V0IERlZmluaXRpb24gdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFBvbGljeSBTZXQgRGVmaW5pdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBvbGljeVNldERlZmluaXRpb25Qcm9wcykge1xuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgICBpZiAoIXByb3BzLmRpc3BsYXlOYW1lIHx8IHByb3BzLmRpc3BsYXlOYW1lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzcGxheU5hbWUgaXMgcmVxdWlyZWQgZm9yIHBvbGljeSBzZXQgZGVmaW5pdGlvbnNcIik7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5wb2xpY3lEZWZpbml0aW9ucyB8fCBwcm9wcy5wb2xpY3lEZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgcG9saWN5IGRlZmluaXRpb24gcmVmZXJlbmNlIGlzIHJlcXVpcmVkIGluIHBvbGljeURlZmluaXRpb25zXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBvbGljeSBkZWZpbml0aW9uIHJlZmVyZW5jZXNcbiAgICBwcm9wcy5wb2xpY3lEZWZpbml0aW9ucy5mb3JFYWNoKChwb2xpY3lEZWYsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXBvbGljeURlZi5wb2xpY3lEZWZpbml0aW9uSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBwb2xpY3lEZWZpbml0aW9uSWQgaXMgcmVxdWlyZWQgZm9yIHBvbGljeSBkZWZpbml0aW9uIGF0IGluZGV4ICR7aW5kZXh9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHBvbGljeSBkZWZpbml0aW9uIGdyb3VwcyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5wb2xpY3lEZWZpbml0aW9uR3JvdXBzKSB7XG4gICAgICBjb25zdCBncm91cE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBwcm9wcy5wb2xpY3lEZWZpbml0aW9uR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWdyb3VwLm5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgbmFtZSBpcyByZXF1aXJlZCBmb3IgcG9saWN5IGRlZmluaXRpb24gZ3JvdXAgYXQgaW5kZXggJHtpbmRleH1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwTmFtZXMuaGFzKGdyb3VwLm5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYER1cGxpY2F0ZSBncm91cCBuYW1lICcke2dyb3VwLm5hbWV9JyBpbiBwb2xpY3lEZWZpbml0aW9uR3JvdXBzYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwTmFtZXMuYWRkKGdyb3VwLm5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgcG9saWN5IGRlZmluaXRpb25zIHJlZmVyZW5jZSB2YWxpZCBncm91cHNcbiAgICAgIGNvbnN0IHZhbGlkR3JvdXBOYW1lcyA9IEFycmF5LmZyb20oZ3JvdXBOYW1lcyk7XG4gICAgICBwcm9wcy5wb2xpY3lEZWZpbml0aW9ucy5mb3JFYWNoKChwb2xpY3lEZWYsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChwb2xpY3lEZWYuZ3JvdXBOYW1lcykge1xuICAgICAgICAgIHBvbGljeURlZi5ncm91cE5hbWVzLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWxpZEdyb3VwTmFtZXMuaW5jbHVkZXMoZ3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFBvbGljeSBkZWZpbml0aW9uIGF0IGluZGV4ICR7aW5kZXh9IHJlZmVyZW5jZXMgdW5rbm93biBncm91cCAnJHtncm91cE5hbWV9Jy4gVmFsaWQgZ3JvdXBzIGFyZTogJHt2YWxpZEdyb3VwTmFtZXMuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBQb2xpY3kgU2V0IERlZmluaXRpb25cIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBQb2xpY3kgU2V0IERlZmluaXRpb25cIixcbiAgICB9KTtcblxuICAgIHRoaXMucG9saWN5U2V0RGVmaW5pdGlvbklkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICBcInBvbGljeV9zZXRfZGVmaW5pdGlvbl9pZFwiLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJUaGUgUG9saWN5IFNldCBEZWZpbml0aW9uIElEIChzYW1lIGFzIGlkLCBmb3IgdXNlIGluIHBvbGljeSBhc3NpZ25tZW50cylcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5wb2xpY3lTZXREZWZpbml0aW9uSWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICBcInBvbGljeV9zZXRfZGVmaW5pdGlvbl9pZFwiLFxuICAgICk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIzLTA0LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUG9saWN5IFNldCBEZWZpbml0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQT0xJQ1lfU0VUX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIG5hbWUgcmVzb2x1dGlvbiB0byBnZW5lcmF0ZSBkZXRlcm1pbmlzdGljIEdVSURzIGZvciBwb2xpY3kgc2V0IGRlZmluaXRpb25zXG4gICAqXG4gICAqIFBvbGljeSBzZXQgZGVmaW5pdGlvbnMgY2FuIHVzZSBjdXN0b20gbmFtZXMgb3IgYXV0by1nZW5lcmF0ZWQgR1VJRHMuXG4gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBVVUlEIGJhc2VkIG9uIHRoZSBwb2xpY3kgc2V0IGRlZmluaXRpb24nc1xuICAgKiBrZXkgcHJvcGVydGllcyBpZiBubyBuYW1lIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVOYW1lKHByb3BzOiBBemFwaVJlc291cmNlUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQb2xpY3lTZXREZWZpbml0aW9uUHJvcHM7XG5cbiAgICAvLyBJZiBuYW1lIGlzIHByb3ZpZGVkLCB1c2UgaXRcbiAgICBpZiAodHlwZWRQcm9wcy5uYW1lKSB7XG4gICAgICByZXR1cm4gdHlwZWRQcm9wcy5uYW1lO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBHVUlEIGJhc2VkIG9uIGRpc3BsYXkgbmFtZSBhbmQgc2NvcGVcbiAgICBjb25zdCBoYXNoSW5wdXQgPSBbdHlwZWRQcm9wcy5kaXNwbGF5TmFtZSwgdHlwZWRQcm9wcy5zY29wZV0uam9pbihcInxcIik7XG5cbiAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaGFzaElucHV0KS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgICAvLyBDb252ZXJ0IGhhc2ggdG8gVVVJRCBmb3JtYXQgKDgtNC00LTQtMTIpXG4gICAgcmV0dXJuIFtcbiAgICAgIGhhc2guc3Vic3RyaW5nKDAsIDgpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoOCwgMTIpLFxuICAgICAgaGFzaC5zdWJzdHJpbmcoMTIsIDE2KSxcbiAgICAgIGhhc2guc3Vic3RyaW5nKDE2LCAyMCksXG4gICAgICBoYXNoLnN1YnN0cmluZygyMCwgMzIpLFxuICAgIF0uam9pbihcIi1cIik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHByb3BlcnRpZXMgaW50byB0aGUgSlNPTiBmb3JtYXQgZXhwZWN0ZWQgYnkgQXp1cmUgUkVTVCBBUElcbiAgICpcbiAgICogTm90ZTogUG9saWN5IHNldCBkZWZpbml0aW9ucyBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gICAqIHNjb3BlLXNwZWNpZmljIHJlc291cmNlcyBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBsZXZlbC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFBvbGljeVNldERlZmluaXRpb25Qcm9wcztcblxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHR5cGVkUHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICAgIHBvbGljeVR5cGU6IHR5cGVkUHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uczogdHlwZWRQcm9wcy5wb2xpY3lEZWZpbml0aW9ucyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEFkZCBvcHRpb25hbCBwcm9wZXJ0aWVzIG9ubHkgaWYgc3BlY2lmaWVkXG4gICAgaWYgKHR5cGVkUHJvcHMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGJvZHkucHJvcGVydGllcy5kZXNjcmlwdGlvbiA9IHR5cGVkUHJvcHMuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEpIHtcbiAgICAgIGJvZHkucHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMucGFyYW1ldGVycykge1xuICAgICAgYm9keS5wcm9wZXJ0aWVzLnBhcmFtZXRlcnMgPSB0eXBlZFByb3BzLnBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZWRQcm9wcy5wb2xpY3lEZWZpbml0aW9uR3JvdXBzICYmXG4gICAgICB0eXBlZFByb3BzLnBvbGljeURlZmluaXRpb25Hcm91cHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgYm9keS5wcm9wZXJ0aWVzLnBvbGljeURlZmluaXRpb25Hcm91cHMgPVxuICAgICAgICB0eXBlZFByb3BzLnBvbGljeURlZmluaXRpb25Hcm91cHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHBhcmVudCByZXNvdXJjZSBJRCBmb3IgUG9saWN5IFNldCBEZWZpbml0aW9uXG4gICAqIFBvbGljeSBTZXQgRGVmaW5pdGlvbnMgYXJlIGNyZWF0ZWQgYXQgc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgVGhlIHBhcmVudCByZXNvdXJjZSBJRCAodGhlIHNjb3BlKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHByb3BzIGFzIFBvbGljeVNldERlZmluaXRpb25Qcm9wcykuc2NvcGU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgUE9MSUNZIFNFVCBERUZJTklUSU9OIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBwb2xpY3kgYXNzaWdubWVudHNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lTZXREZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IHNldCBkZWZpbml0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGlzcGxheU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2xpY3kgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIHBvbGljeSBkZWZpbml0aW9ucyBpbiB0aGlzIHNldFxuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lEZWZpbml0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wb2xpY3lEZWZpbml0aW9ucy5sZW5ndGg7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Policy Set Definition (Initiative)
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the PolicySetDefinition construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* Run with: npm run integration:nostream
|
|
8
|
+
*/
|
|
9
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Policy Set Definition (Initiative)
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the PolicySetDefinition construct
|
|
6
|
+
* and validates deployment, idempotency, and cleanup.
|
|
7
|
+
*
|
|
8
|
+
* Run with: npm run integration:nostream
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const cdktf_1 = require("cdktf");
|
|
12
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
13
|
+
const data_azapi_client_config_1 = require("../../core-azure/lib/azapi/providers-azapi/data-azapi-client-config");
|
|
14
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
15
|
+
const testing_1 = require("../../testing");
|
|
16
|
+
const policy_set_definition_1 = require("../lib/policy-set-definition");
|
|
17
|
+
/**
|
|
18
|
+
* Example stack demonstrating Policy Set Definition usage
|
|
19
|
+
*/
|
|
20
|
+
class PolicySetDefinitionExampleStack extends cdktf_1.TerraformStack {
|
|
21
|
+
constructor(scope, id) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
// Configure AZAPI provider
|
|
24
|
+
new provider_1.AzapiProvider(this, "azapi", {});
|
|
25
|
+
// Create a client config to get the current subscription ID
|
|
26
|
+
const clientConfig = new data_azapi_client_config_1.DataAzapiClientConfig(this, "client_config", {});
|
|
27
|
+
// Use the current subscription for policy definitions
|
|
28
|
+
const subscriptionId = `/subscriptions/\${${clientConfig.fqn}.subscription_id}`;
|
|
29
|
+
// Basic Policy Set Definition with built-in policies
|
|
30
|
+
new policy_set_definition_1.PolicySetDefinition(this, "basic-initiative", {
|
|
31
|
+
displayName: "Basic Security Initiative",
|
|
32
|
+
description: "A simple initiative to demonstrate Policy Set Definition construct",
|
|
33
|
+
scope: subscriptionId,
|
|
34
|
+
policyDefinitions: [
|
|
35
|
+
{
|
|
36
|
+
// Audit VMs that do not use managed disks
|
|
37
|
+
policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
|
|
38
|
+
policyDefinitionReferenceId: "auditManagedDisks",
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
describe("Policy Set Definition Integration Test", () => {
|
|
45
|
+
it("should deploy, validate idempotency, and cleanup Policy Set Definition resources", () => {
|
|
46
|
+
const app = cdktf_1.Testing.app();
|
|
47
|
+
const stack = new PolicySetDefinitionExampleStack(app, "test-policy-set-definition");
|
|
48
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
49
|
+
// This will:
|
|
50
|
+
// 1. Run terraform apply to deploy resources
|
|
51
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
52
|
+
// 3. Run terraform destroy to cleanup resources
|
|
53
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
|
|
54
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LXNldC1kZWZpbml0aW9uLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXBvbGljeXNldGRlZmluaXRpb24vdGVzdC9wb2xpY3ktc2V0LWRlZmluaXRpb24uaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBRUgsaUNBQWdEO0FBRWhELDJDQUF5QztBQUN6QyxrSEFBNEc7QUFDNUcsa0ZBQW9GO0FBQ3BGLDJDQUE4RDtBQUM5RCx3RUFBbUU7QUFFbkU7O0dBRUc7QUFDSCxNQUFNLCtCQUFnQyxTQUFRLHNCQUFjO0lBQzFELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLDREQUE0RDtRQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLHFCQUFxQixZQUFZLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztRQUVoRixxREFBcUQ7UUFDckQsSUFBSSwyQ0FBbUIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDaEQsV0FBVyxFQUFFLDJCQUEyQjtZQUN4QyxXQUFXLEVBQ1Qsb0VBQW9FO1lBQ3RFLEtBQUssRUFBRSxjQUFjO1lBQ3JCLGlCQUFpQixFQUFFO2dCQUNqQjtvQkFDRSwwQ0FBMEM7b0JBQzFDLGtCQUFrQixFQUNoQiwyRkFBMkY7b0JBQzdGLDJCQUEyQixFQUFFLG1CQUFtQjtpQkFDakQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7SUFDdEQsRUFBRSxDQUFDLGtGQUFrRixFQUFFLEdBQUcsRUFBRTtRQUMxRixNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSwrQkFBK0IsQ0FDL0MsR0FBRyxFQUNILDRCQUE0QixDQUM3QixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsNkNBQTZDO1FBQzdDLG1FQUFtRTtRQUNuRSxnREFBZ0Q7UUFDaEQsSUFBQSx1Q0FBNkIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7QUFDN0QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3QgZm9yIEF6dXJlIFBvbGljeSBTZXQgRGVmaW5pdGlvbiAoSW5pdGlhdGl2ZSlcbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBQb2xpY3lTZXREZWZpbml0aW9uIGNvbnN0cnVjdFxuICogYW5kIHZhbGlkYXRlcyBkZXBsb3ltZW50LCBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAuXG4gKlxuICogUnVuIHdpdGg6IG5wbSBydW4gaW50ZWdyYXRpb246bm9zdHJlYW1cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nLCBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IERhdGFBemFwaUNsaWVudENvbmZpZyB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9wcm92aWRlcnMtYXphcGkvZGF0YS1hemFwaS1jbGllbnQtY29uZmlnXCI7XG5pbXBvcnQgeyBBemFwaVByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Byb3ZpZGVycy1hemFwaS9wcm92aWRlclwiO1xuaW1wb3J0IHsgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3kgfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgUG9saWN5U2V0RGVmaW5pdGlvbiB9IGZyb20gXCIuLi9saWIvcG9saWN5LXNldC1kZWZpbml0aW9uXCI7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIFBvbGljeSBTZXQgRGVmaW5pdGlvbiB1c2FnZVxuICovXG5jbGFzcyBQb2xpY3lTZXREZWZpbml0aW9uRXhhbXBsZVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gQ3JlYXRlIGEgY2xpZW50IGNvbmZpZyB0byBnZXQgdGhlIGN1cnJlbnQgc3Vic2NyaXB0aW9uIElEXG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gbmV3IERhdGFBemFwaUNsaWVudENvbmZpZyh0aGlzLCBcImNsaWVudF9jb25maWdcIiwge30pO1xuXG4gICAgLy8gVXNlIHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbiBmb3IgcG9saWN5IGRlZmluaXRpb25zXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBgL3N1YnNjcmlwdGlvbnMvXFwkeyR7Y2xpZW50Q29uZmlnLmZxbn0uc3Vic2NyaXB0aW9uX2lkfWA7XG5cbiAgICAvLyBCYXNpYyBQb2xpY3kgU2V0IERlZmluaXRpb24gd2l0aCBidWlsdC1pbiBwb2xpY2llc1xuICAgIG5ldyBQb2xpY3lTZXREZWZpbml0aW9uKHRoaXMsIFwiYmFzaWMtaW5pdGlhdGl2ZVwiLCB7XG4gICAgICBkaXNwbGF5TmFtZTogXCJCYXNpYyBTZWN1cml0eSBJbml0aWF0aXZlXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBIHNpbXBsZSBpbml0aWF0aXZlIHRvIGRlbW9uc3RyYXRlIFBvbGljeSBTZXQgRGVmaW5pdGlvbiBjb25zdHJ1Y3RcIixcbiAgICAgIHNjb3BlOiBzdWJzY3JpcHRpb25JZCxcbiAgICAgIHBvbGljeURlZmluaXRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBBdWRpdCBWTXMgdGhhdCBkbyBub3QgdXNlIG1hbmFnZWQgZGlza3NcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICBcIi9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvMDZhNzhlMjAtOTM1OC00MWM5LTkyM2MtZmI3MzZkMzgyYTRkXCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvblJlZmVyZW5jZUlkOiBcImF1ZGl0TWFuYWdlZERpc2tzXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG5cbmRlc2NyaWJlKFwiUG9saWN5IFNldCBEZWZpbml0aW9uIEludGVncmF0aW9uIFRlc3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBkZXBsb3ksIHZhbGlkYXRlIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cCBQb2xpY3kgU2V0IERlZmluaXRpb24gcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFBvbGljeVNldERlZmluaXRpb25FeGFtcGxlU3RhY2soXG4gICAgICBhcHAsXG4gICAgICBcInRlc3QtcG9saWN5LXNldC1kZWZpbml0aW9uXCIsXG4gICAgKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXNcbiAgICAvLyAyLiBSdW4gdGVycmFmb3JtIHBsYW4gdG8gY2hlY2sgaWRlbXBvdGVuY3kgKG5vIGNoYW5nZXMgZXhwZWN0ZWQpXG4gICAgLy8gMy4gUnVuIHRlcnJhZm9ybSBkZXN0cm95IHRvIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3koc3ludGhlc2l6ZWQpO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive tests for the PolicySetDefinition implementation
|
|
3
|
+
*
|
|
4
|
+
* This test suite validates the PolicySetDefinition class using the AzapiResource framework.
|
|
5
|
+
* Tests cover automatic version resolution, explicit version pinning, schema validation,
|
|
6
|
+
* property configurations, and resource creation.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|