@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.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 +54846 -26661
- package/API.md +72091 -23784
- package/lib/azure-actiongroup/index.d.ts +0 -10
- package/lib/azure-actiongroup/index.js +1 -11
- package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
- package/lib/azure-actiongroup/lib/action-group.js +6 -32
- package/lib/azure-actiongroup/lib/index.d.ts +1 -4
- package/lib/azure-actiongroup/lib/index.js +2 -5
- package/lib/azure-activitylogalert/index.d.ts +0 -10
- package/lib/azure-activitylogalert/index.js +1 -11
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
- package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
- package/lib/azure-activitylogalert/lib/index.js +2 -5
- package/lib/azure-aks/index.d.ts +0 -8
- package/lib/azure-aks/index.js +1 -11
- package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
- package/lib/azure-aks/lib/aks-cluster.js +13 -36
- package/lib/azure-aks/lib/index.d.ts +1 -10
- package/lib/azure-aks/lib/index.js +2 -21
- package/lib/azure-diagnosticsettings/index.d.ts +0 -6
- package/lib/azure-diagnosticsettings/index.js +1 -7
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
- package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
- package/lib/azure-diagnosticsettings/lib/index.js +2 -8
- package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
- package/lib/azure-dnsforwardingruleset/index.js +18 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
- package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
- package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
- package/lib/azure-dnsresolver/index.d.ts +1 -0
- package/lib/azure-dnsresolver/index.js +18 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
- package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
- package/lib/azure-dnsresolver/lib/index.js +23 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
- package/lib/azure-dnszone/index.d.ts +1 -0
- package/lib/azure-dnszone/index.js +18 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
- package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
- package/lib/azure-dnszone/lib/dns-zone.js +228 -0
- package/lib/azure-dnszone/lib/index.d.ts +2 -0
- package/lib/azure-dnszone/lib/index.js +19 -0
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
- package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
- package/lib/azure-metricalert/index.d.ts +0 -10
- package/lib/azure-metricalert/index.js +1 -11
- package/lib/azure-metricalert/lib/index.d.ts +1 -4
- package/lib/azure-metricalert/lib/index.js +2 -5
- package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
- package/lib/azure-metricalert/lib/metric-alert.js +6 -32
- package/lib/azure-networkinterface/index.d.ts +0 -3
- package/lib/azure-networkinterface/index.js +1 -4
- package/lib/azure-networkinterface/lib/index.d.ts +1 -5
- package/lib/azure-networkinterface/lib/index.js +2 -5
- package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
- package/lib/azure-networkinterface/lib/network-interface.js +14 -29
- package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
- package/lib/azure-networksecuritygroup/index.d.ts +0 -5
- package/lib/azure-networksecuritygroup/index.js +1 -6
- package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
- package/lib/azure-networksecuritygroup/lib/index.js +17 -14
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
- package/lib/azure-policyassignment/index.d.ts +1 -0
- package/lib/azure-policyassignment/index.js +18 -0
- package/lib/azure-policyassignment/lib/index.d.ts +2 -0
- package/lib/azure-policyassignment/lib/index.js +19 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
- package/lib/azure-policyassignment/lib/policy-assignment.d.ts +342 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +228 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
- package/lib/azure-policydefinition/index.d.ts +1 -0
- package/lib/azure-policydefinition/index.js +18 -0
- package/lib/azure-policydefinition/lib/index.d.ts +2 -0
- package/lib/azure-policydefinition/lib/index.js +19 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +260 -0
- package/lib/azure-policydefinition/lib/policy-definition.js +199 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.js +596 -0
- package/lib/azure-privatednszone/index.d.ts +1 -0
- package/lib/azure-privatednszone/index.js +18 -0
- package/lib/azure-privatednszone/lib/index.d.ts +2 -0
- package/lib/azure-privatednszone/lib/index.js +19 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
- package/lib/azure-privatednszonelink/index.d.ts +1 -0
- package/lib/azure-privatednszonelink/index.js +18 -0
- package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
- package/lib/azure-privatednszonelink/lib/index.js +19 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
- package/lib/azure-publicipaddress/index.d.ts +0 -5
- package/lib/azure-publicipaddress/index.js +1 -6
- package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
- package/lib/azure-publicipaddress/lib/index.js +17 -17
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
- package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
- package/lib/azure-resourcegroup/index.d.ts +0 -37
- package/lib/azure-resourcegroup/index.js +1 -39
- package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
- package/lib/azure-resourcegroup/lib/index.js +2 -43
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
- package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
- package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
- package/lib/azure-roleassignment/index.d.ts +1 -0
- package/lib/azure-roleassignment/index.js +18 -0
- package/lib/azure-roleassignment/lib/index.d.ts +2 -0
- package/lib/azure-roleassignment/lib/index.js +19 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
- package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
- package/lib/azure-roledefinition/index.d.ts +1 -0
- package/lib/azure-roledefinition/index.js +18 -0
- package/lib/azure-roledefinition/lib/index.d.ts +2 -0
- package/lib/azure-roledefinition/lib/index.js +19 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
- package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
- package/lib/azure-roledefinition/lib/role-definition.js +192 -0
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
- package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
- package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
- package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
- package/lib/azure-storageaccount/index.d.ts +0 -19
- package/lib/azure-storageaccount/index.js +1 -20
- package/lib/azure-storageaccount/lib/index.d.ts +1 -7
- package/lib/azure-storageaccount/lib/index.js +2 -8
- package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
- package/lib/azure-storageaccount/lib/storage-account.js +15 -29
- package/lib/azure-subnet/index.d.ts +0 -3
- package/lib/azure-subnet/index.js +1 -4
- package/lib/azure-subnet/lib/index.d.ts +1 -4
- package/lib/azure-subnet/lib/index.js +2 -5
- package/lib/azure-subnet/lib/subnet.d.ts +3 -14
- package/lib/azure-subnet/lib/subnet.js +28 -47
- package/lib/azure-subnet/test/subnet.integ.js +19 -7
- package/lib/azure-subnet/test/subnet.spec.js +1 -2
- package/lib/azure-virtualmachine/index.d.ts +0 -6
- package/lib/azure-virtualmachine/index.js +1 -7
- package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
- package/lib/azure-virtualmachine/lib/index.js +2 -21
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
- package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
- package/lib/azure-virtualnetwork/index.d.ts +0 -9
- package/lib/azure-virtualnetwork/index.js +1 -11
- package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
- package/lib/azure-virtualnetwork/lib/index.js +17 -20
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
- package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
- package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
- package/lib/azure-virtualnetworkmanager/index.js +18 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
- package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
- package/lib/azure-vmss/index.d.ts +0 -5
- package/lib/azure-vmss/index.js +1 -6
- package/lib/azure-vmss/lib/index.d.ts +0 -7
- package/lib/azure-vmss/lib/index.js +1 -21
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +178 -26
- package/lib/core-azure/lib/azapi/azapi-resource.js +328 -90
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
- 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 +5 -3
- 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/resource-schema-validator.d.ts +118 -0
- package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
- package/lib/core-azure/lib/index.d.ts +2 -2
- package/lib/core-azure/lib/index.js +5 -5
- 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 +19 -0
- package/lib/index.js +21 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.d.ts +1 -0
- package/lib/testing/lib/cleanup.js +19 -12
- package/lib/testing/lib/metadata.js +19 -16
- package/package.json +1 -1
- package/scripts/cleanup-test-resources.ts +22 -4
- package/scripts/generate-index.js +25 -8
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResourceSchemaValidator - Helper class for schema validation
|
|
3
|
+
*
|
|
4
|
+
* This helper class extracts validation logic from AzapiResource to follow
|
|
5
|
+
* the Single Responsibility Principle. It handles property validation against
|
|
6
|
+
* API schemas and provides detailed error reporting.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
import { ApiSchema, ValidationResult } from "../version-manager/interfaces/version-interfaces";
|
|
12
|
+
/**
|
|
13
|
+
* Helper class for validating resource properties against API schemas
|
|
14
|
+
*
|
|
15
|
+
* This class encapsulates all validation-related operations including:
|
|
16
|
+
* - Schema-based property validation
|
|
17
|
+
* - Default value application
|
|
18
|
+
* - Validation error formatting
|
|
19
|
+
* - Integration with SchemaMapper
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare class ResourceSchemaValidator {
|
|
24
|
+
private readonly _schema;
|
|
25
|
+
private readonly _schemaMapper;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new ResourceSchemaValidator instance
|
|
28
|
+
*
|
|
29
|
+
* @param schema - The API schema to validate against
|
|
30
|
+
*/
|
|
31
|
+
constructor(schema: ApiSchema);
|
|
32
|
+
/**
|
|
33
|
+
* Validates properties against the configured schema
|
|
34
|
+
*
|
|
35
|
+
* This method performs comprehensive validation including:
|
|
36
|
+
* - Required property checks
|
|
37
|
+
* - Type validation
|
|
38
|
+
* - Custom validation rules
|
|
39
|
+
* - Deprecation warnings
|
|
40
|
+
*
|
|
41
|
+
* @param properties - The properties to validate
|
|
42
|
+
* @returns Detailed validation results with errors and warnings
|
|
43
|
+
*/
|
|
44
|
+
validateProps(properties: any): ValidationResult;
|
|
45
|
+
/**
|
|
46
|
+
* Validates the schema structure itself
|
|
47
|
+
*
|
|
48
|
+
* This method checks if the schema is properly configured and has all
|
|
49
|
+
* required fields for validation to work correctly.
|
|
50
|
+
*
|
|
51
|
+
* @returns Validation result indicating if schema is valid
|
|
52
|
+
*/
|
|
53
|
+
validateSchema(): ValidationResult;
|
|
54
|
+
/**
|
|
55
|
+
* Applies default values to properties based on schema definitions
|
|
56
|
+
*
|
|
57
|
+
* This method injects default values for properties that are not provided
|
|
58
|
+
* but have defaults defined in the schema.
|
|
59
|
+
*
|
|
60
|
+
* @param properties - The properties to apply defaults to
|
|
61
|
+
* @returns New properties object with default values applied
|
|
62
|
+
*/
|
|
63
|
+
applyDefaults(properties: any): any;
|
|
64
|
+
/**
|
|
65
|
+
* Formats validation errors into user-friendly messages
|
|
66
|
+
*
|
|
67
|
+
* This method takes a validation result and formats the errors
|
|
68
|
+
* into clear, actionable error messages.
|
|
69
|
+
*
|
|
70
|
+
* @param validationResult - The validation result to format
|
|
71
|
+
* @returns Array of formatted error messages
|
|
72
|
+
*/
|
|
73
|
+
formatValidationErrors(validationResult: ValidationResult): string[];
|
|
74
|
+
/**
|
|
75
|
+
* Gets the schema this validator is configured for
|
|
76
|
+
*
|
|
77
|
+
* @returns The API schema being used for validation
|
|
78
|
+
*/
|
|
79
|
+
get schema(): ApiSchema;
|
|
80
|
+
/**
|
|
81
|
+
* Gets the resource type from the schema
|
|
82
|
+
*
|
|
83
|
+
* @returns The Azure resource type string
|
|
84
|
+
*/
|
|
85
|
+
get resourceType(): string;
|
|
86
|
+
/**
|
|
87
|
+
* Gets the API version from the schema
|
|
88
|
+
*
|
|
89
|
+
* @returns The API version string
|
|
90
|
+
*/
|
|
91
|
+
get version(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Checks if a specific property is required
|
|
94
|
+
*
|
|
95
|
+
* @param propertyName - The name of the property to check
|
|
96
|
+
* @returns True if the property is required, false otherwise
|
|
97
|
+
*/
|
|
98
|
+
isPropertyRequired(propertyName: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Checks if a specific property is deprecated
|
|
101
|
+
*
|
|
102
|
+
* @param propertyName - The name of the property to check
|
|
103
|
+
* @returns True if the property is deprecated, false otherwise
|
|
104
|
+
*/
|
|
105
|
+
isPropertyDeprecated(propertyName: string): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Gets the list of all required properties
|
|
108
|
+
*
|
|
109
|
+
* @returns Array of required property names
|
|
110
|
+
*/
|
|
111
|
+
getRequiredProperties(): string[];
|
|
112
|
+
/**
|
|
113
|
+
* Gets the list of all deprecated properties
|
|
114
|
+
*
|
|
115
|
+
* @returns Array of deprecated property names
|
|
116
|
+
*/
|
|
117
|
+
getDeprecatedProperties(): string[];
|
|
118
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ResourceSchemaValidator - Helper class for schema validation
|
|
4
|
+
*
|
|
5
|
+
* This helper class extracts validation logic from AzapiResource to follow
|
|
6
|
+
* the Single Responsibility Principle. It handles property validation against
|
|
7
|
+
* API schemas and provides detailed error reporting.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ResourceSchemaValidator = void 0;
|
|
14
|
+
const schema_mapper_1 = require("./schema-mapper/schema-mapper");
|
|
15
|
+
/**
|
|
16
|
+
* Helper class for validating resource properties against API schemas
|
|
17
|
+
*
|
|
18
|
+
* This class encapsulates all validation-related operations including:
|
|
19
|
+
* - Schema-based property validation
|
|
20
|
+
* - Default value application
|
|
21
|
+
* - Validation error formatting
|
|
22
|
+
* - Integration with SchemaMapper
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
class ResourceSchemaValidator {
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new ResourceSchemaValidator instance
|
|
29
|
+
*
|
|
30
|
+
* @param schema - The API schema to validate against
|
|
31
|
+
*/
|
|
32
|
+
constructor(schema) {
|
|
33
|
+
if (!schema) {
|
|
34
|
+
throw new Error("Schema cannot be undefined or null");
|
|
35
|
+
}
|
|
36
|
+
if (!schema.resourceType || schema.resourceType.trim().length === 0) {
|
|
37
|
+
throw new Error("Schema must have a valid resourceType");
|
|
38
|
+
}
|
|
39
|
+
if (!schema.version || schema.version.trim().length === 0) {
|
|
40
|
+
throw new Error("Schema must have a valid version");
|
|
41
|
+
}
|
|
42
|
+
this._schema = schema;
|
|
43
|
+
this._schemaMapper = schema_mapper_1.SchemaMapper.create(schema);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates properties against the configured schema
|
|
47
|
+
*
|
|
48
|
+
* This method performs comprehensive validation including:
|
|
49
|
+
* - Required property checks
|
|
50
|
+
* - Type validation
|
|
51
|
+
* - Custom validation rules
|
|
52
|
+
* - Deprecation warnings
|
|
53
|
+
*
|
|
54
|
+
* @param properties - The properties to validate
|
|
55
|
+
* @returns Detailed validation results with errors and warnings
|
|
56
|
+
*/
|
|
57
|
+
validateProps(properties) {
|
|
58
|
+
if (!properties) {
|
|
59
|
+
return {
|
|
60
|
+
valid: false,
|
|
61
|
+
errors: ["Properties cannot be undefined or null"],
|
|
62
|
+
warnings: [],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
return this._schemaMapper.validateProperties(properties);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
valid: false,
|
|
71
|
+
errors: [
|
|
72
|
+
`Validation failed: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
73
|
+
],
|
|
74
|
+
warnings: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validates the schema structure itself
|
|
80
|
+
*
|
|
81
|
+
* This method checks if the schema is properly configured and has all
|
|
82
|
+
* required fields for validation to work correctly.
|
|
83
|
+
*
|
|
84
|
+
* @returns Validation result indicating if schema is valid
|
|
85
|
+
*/
|
|
86
|
+
validateSchema() {
|
|
87
|
+
const errors = [];
|
|
88
|
+
const warnings = [];
|
|
89
|
+
// Check for required schema fields
|
|
90
|
+
if (!this._schema.resourceType) {
|
|
91
|
+
errors.push("Schema is missing resourceType");
|
|
92
|
+
}
|
|
93
|
+
if (!this._schema.version) {
|
|
94
|
+
errors.push("Schema is missing version");
|
|
95
|
+
}
|
|
96
|
+
if (!this._schema.properties) {
|
|
97
|
+
errors.push("Schema is missing properties definition");
|
|
98
|
+
}
|
|
99
|
+
if (!this._schema.required) {
|
|
100
|
+
errors.push("Schema is missing required properties array");
|
|
101
|
+
}
|
|
102
|
+
// Check for potential issues
|
|
103
|
+
if (this._schema.required &&
|
|
104
|
+
Array.isArray(this._schema.required) &&
|
|
105
|
+
this._schema.required.length === 0) {
|
|
106
|
+
warnings.push("Schema has no required properties defined");
|
|
107
|
+
}
|
|
108
|
+
if (this._schema.properties &&
|
|
109
|
+
Object.keys(this._schema.properties).length === 0) {
|
|
110
|
+
warnings.push("Schema has no properties defined");
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
valid: errors.length === 0,
|
|
114
|
+
errors,
|
|
115
|
+
warnings,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Applies default values to properties based on schema definitions
|
|
120
|
+
*
|
|
121
|
+
* This method injects default values for properties that are not provided
|
|
122
|
+
* but have defaults defined in the schema.
|
|
123
|
+
*
|
|
124
|
+
* @param properties - The properties to apply defaults to
|
|
125
|
+
* @returns New properties object with default values applied
|
|
126
|
+
*/
|
|
127
|
+
applyDefaults(properties) {
|
|
128
|
+
if (!properties) {
|
|
129
|
+
properties = {};
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
return this._schemaMapper.applyDefaults(properties);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
throw new Error(`Failed to apply defaults: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Formats validation errors into user-friendly messages
|
|
140
|
+
*
|
|
141
|
+
* This method takes a validation result and formats the errors
|
|
142
|
+
* into clear, actionable error messages.
|
|
143
|
+
*
|
|
144
|
+
* @param validationResult - The validation result to format
|
|
145
|
+
* @returns Array of formatted error messages
|
|
146
|
+
*/
|
|
147
|
+
formatValidationErrors(validationResult) {
|
|
148
|
+
const formattedErrors = [];
|
|
149
|
+
// Add general errors
|
|
150
|
+
formattedErrors.push(...validationResult.errors);
|
|
151
|
+
// Add property-specific errors with context
|
|
152
|
+
if (validationResult.propertyErrors) {
|
|
153
|
+
for (const [property, errors] of Object.entries(validationResult.propertyErrors)) {
|
|
154
|
+
for (const error of errors) {
|
|
155
|
+
formattedErrors.push(`[${property}] ${error}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return formattedErrors;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Gets the schema this validator is configured for
|
|
163
|
+
*
|
|
164
|
+
* @returns The API schema being used for validation
|
|
165
|
+
*/
|
|
166
|
+
get schema() {
|
|
167
|
+
return this._schema;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Gets the resource type from the schema
|
|
171
|
+
*
|
|
172
|
+
* @returns The Azure resource type string
|
|
173
|
+
*/
|
|
174
|
+
get resourceType() {
|
|
175
|
+
return this._schema.resourceType;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Gets the API version from the schema
|
|
179
|
+
*
|
|
180
|
+
* @returns The API version string
|
|
181
|
+
*/
|
|
182
|
+
get version() {
|
|
183
|
+
return this._schema.version;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Checks if a specific property is required
|
|
187
|
+
*
|
|
188
|
+
* @param propertyName - The name of the property to check
|
|
189
|
+
* @returns True if the property is required, false otherwise
|
|
190
|
+
*/
|
|
191
|
+
isPropertyRequired(propertyName) {
|
|
192
|
+
if (!this._schema.required || !Array.isArray(this._schema.required)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
return this._schema.required.includes(propertyName);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Checks if a specific property is deprecated
|
|
199
|
+
*
|
|
200
|
+
* @param propertyName - The name of the property to check
|
|
201
|
+
* @returns True if the property is deprecated, false otherwise
|
|
202
|
+
*/
|
|
203
|
+
isPropertyDeprecated(propertyName) {
|
|
204
|
+
if (!this._schema.properties) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
const propDef = this._schema.properties[propertyName];
|
|
208
|
+
return propDef ? propDef.deprecated === true : false;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Gets the list of all required properties
|
|
212
|
+
*
|
|
213
|
+
* @returns Array of required property names
|
|
214
|
+
*/
|
|
215
|
+
getRequiredProperties() {
|
|
216
|
+
if (!this._schema.required || !Array.isArray(this._schema.required)) {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
return [...this._schema.required];
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Gets the list of all deprecated properties
|
|
223
|
+
*
|
|
224
|
+
* @returns Array of deprecated property names
|
|
225
|
+
*/
|
|
226
|
+
getDeprecatedProperties() {
|
|
227
|
+
if (!this._schema.properties) {
|
|
228
|
+
return [];
|
|
229
|
+
}
|
|
230
|
+
return Object.entries(this._schema.properties)
|
|
231
|
+
.filter(([_, propDef]) => propDef.deprecated === true)
|
|
232
|
+
.map(([propName]) => propName);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.ResourceSchemaValidator = ResourceSchemaValidator;
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utc2NoZW1hLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlLWF6dXJlL2xpYi9hemFwaS9yZXNvdXJjZS1zY2hlbWEtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQUVILGlFQUE2RDtBQU03RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSx1QkFBdUI7SUFJbEM7Ozs7T0FJRztJQUNILFlBQVksTUFBaUI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyw0QkFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxhQUFhLENBQUMsVUFBZTtRQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSztnQkFDWixNQUFNLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztnQkFD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QVUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQzthQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUF2UEQsMERBdVBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciAtIEhlbHBlciBjbGFzcyBmb3Igc2NoZW1hIHZhbGlkYXRpb25cbiAqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyBleHRyYWN0cyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gQXphcGlSZXNvdXJjZSB0byBmb2xsb3dcbiAqIHRoZSBTaW5nbGUgUmVzcG9uc2liaWxpdHkgUHJpbmNpcGxlLiBJdCBoYW5kbGVzIHByb3BlcnR5IHZhbGlkYXRpb24gYWdhaW5zdFxuICogQVBJIHNjaGVtYXMgYW5kIHByb3ZpZGVzIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB7IFNjaGVtYU1hcHBlciB9IGZyb20gXCIuL3NjaGVtYS1tYXBwZXIvc2NoZW1hLW1hcHBlclwiO1xuaW1wb3J0IHtcbiAgQXBpU2NoZW1hLFxuICBWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciB2YWxpZGF0aW5nIHJlc291cmNlIHByb3BlcnRpZXMgYWdhaW5zdCBBUEkgc2NoZW1hc1xuICpcbiAqIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIGFsbCB2YWxpZGF0aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucyBpbmNsdWRpbmc6XG4gKiAtIFNjaGVtYS1iYXNlZCBwcm9wZXJ0eSB2YWxpZGF0aW9uXG4gKiAtIERlZmF1bHQgdmFsdWUgYXBwbGljYXRpb25cbiAqIC0gVmFsaWRhdGlvbiBlcnJvciBmb3JtYXR0aW5nXG4gKiAtIEludGVncmF0aW9uIHdpdGggU2NoZW1hTWFwcGVyXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NjaGVtYTogQXBpU2NoZW1hO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zY2hlbWFNYXBwZXI6IFNjaGVtYU1hcHBlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZVNjaGVtYVZhbGlkYXRvciBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gc2NoZW1hIC0gVGhlIEFQSSBzY2hlbWEgdG8gdmFsaWRhdGUgYWdhaW5zdFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NoZW1hOiBBcGlTY2hlbWEpIHtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIGNhbm5vdCBiZSB1bmRlZmluZWQgb3IgbnVsbFwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNjaGVtYS5yZXNvdXJjZVR5cGUgfHwgc2NoZW1hLnJlc291cmNlVHlwZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY2hlbWEgbXVzdCBoYXZlIGEgdmFsaWQgcmVzb3VyY2VUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hLnZlcnNpb24gfHwgc2NoZW1hLnZlcnNpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIG11c3QgaGF2ZSBhIHZhbGlkIHZlcnNpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuX3NjaGVtYU1hcHBlciA9IFNjaGVtYU1hcHBlci5jcmVhdGUoc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHNjaGVtYVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gaW5jbHVkaW5nOlxuICAgKiAtIFJlcXVpcmVkIHByb3BlcnR5IGNoZWNrc1xuICAgKiAtIFR5cGUgdmFsaWRhdGlvblxuICAgKiAtIEN1c3RvbSB2YWxpZGF0aW9uIHJ1bGVzXG4gICAqIC0gRGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBUaGUgcHJvcGVydGllcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBEZXRhaWxlZCB2YWxpZGF0aW9uIHJlc3VsdHMgd2l0aCBlcnJvcnMgYW5kIHdhcm5pbmdzXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVQcm9wcyhwcm9wZXJ0aWVzOiBhbnkpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3JzOiBbXCJQcm9wZXJ0aWVzIGNhbm5vdCBiZSB1bmRlZmluZWQgb3IgbnVsbFwiXSxcbiAgICAgICAgd2FybmluZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYU1hcHBlci52YWxpZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgYFZhbGlkYXRpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJ9YCxcbiAgICAgICAgXSxcbiAgICAgICAgd2FybmluZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBzY2hlbWEgc3RydWN0dXJlIGl0c2VsZlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHNjaGVtYSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBoYXMgYWxsXG4gICAqIHJlcXVpcmVkIGZpZWxkcyBmb3IgdmFsaWRhdGlvbiB0byB3b3JrIGNvcnJlY3RseS5cbiAgICpcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHQgaW5kaWNhdGluZyBpZiBzY2hlbWEgaXMgdmFsaWRcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVNjaGVtYSgpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgc2NoZW1hIGZpZWxkc1xuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlc291cmNlVHlwZSkge1xuICAgICAgZXJyb3JzLnB1c2goXCJTY2hlbWEgaXMgbWlzc2luZyByZXNvdXJjZVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zY2hlbWEudmVyc2lvbikge1xuICAgICAgZXJyb3JzLnB1c2goXCJTY2hlbWEgaXMgbWlzc2luZyB2ZXJzaW9uXCIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgIGVycm9ycy5wdXNoKFwiU2NoZW1hIGlzIG1pc3NpbmcgcHJvcGVydGllcyBkZWZpbml0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlcXVpcmVkKSB7XG4gICAgICBlcnJvcnMucHVzaChcIlNjaGVtYSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJyYXlcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBvdGVudGlhbCBpc3N1ZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLl9zY2hlbWEucmVxdWlyZWQgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fc2NoZW1hLnJlcXVpcmVkKSAmJlxuICAgICAgdGhpcy5fc2NoZW1hLnJlcXVpcmVkLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlNjaGVtYSBoYXMgbm8gcmVxdWlyZWQgcHJvcGVydGllcyBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLl9zY2hlbWEucHJvcGVydGllcykubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiU2NoZW1hIGhhcyBubyBwcm9wZXJ0aWVzIGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGRlZmF1bHQgdmFsdWVzIHRvIHByb3BlcnRpZXMgYmFzZWQgb24gc2NoZW1hIGRlZmluaXRpb25zXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGluamVjdHMgZGVmYXVsdCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVkXG4gICAqIGJ1dCBoYXZlIGRlZmF1bHRzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBUaGUgcHJvcGVydGllcyB0byBhcHBseSBkZWZhdWx0cyB0b1xuICAgKiBAcmV0dXJucyBOZXcgcHJvcGVydGllcyBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcyBhcHBsaWVkXG4gICAqL1xuICBwdWJsaWMgYXBwbHlEZWZhdWx0cyhwcm9wZXJ0aWVzOiBhbnkpOiBhbnkge1xuICAgIGlmICghcHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2NoZW1hTWFwcGVyLmFwcGx5RGVmYXVsdHMocHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBhcHBseSBkZWZhdWx0czogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwifWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHZhbGlkYXRpb24gZXJyb3JzIGludG8gdXNlci1mcmllbmRseSBtZXNzYWdlc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBmb3JtYXRzIHRoZSBlcnJvcnNcbiAgICogaW50byBjbGVhciwgYWN0aW9uYWJsZSBlcnJvciBtZXNzYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbGlkYXRpb25SZXN1bHQgLSBUaGUgdmFsaWRhdGlvbiByZXN1bHQgdG8gZm9ybWF0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlc1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFZhbGlkYXRpb25FcnJvcnModmFsaWRhdGlvblJlc3VsdDogVmFsaWRhdGlvblJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRFcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBZGQgZ2VuZXJhbCBlcnJvcnNcbiAgICBmb3JtYXR0ZWRFcnJvcnMucHVzaCguLi52YWxpZGF0aW9uUmVzdWx0LmVycm9ycyk7XG5cbiAgICAvLyBBZGQgcHJvcGVydHktc3BlY2lmaWMgZXJyb3JzIHdpdGggY29udGV4dFxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LnByb3BlcnR5RXJyb3JzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0eUVycm9ycyxcbiAgICAgICkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRFcnJvcnMucHVzaChgWyR7cHJvcGVydHl9XSAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZEVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzY2hlbWEgdGhpcyB2YWxpZGF0b3IgaXMgY29uZmlndXJlZCBmb3JcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFQSSBzY2hlbWEgYmVpbmcgdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBzY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc291cmNlIHR5cGUgZnJvbSB0aGUgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBBenVyZSByZXNvdXJjZSB0eXBlIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hLnJlc291cmNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgdmVyc2lvbiBmcm9tIHRoZSBzY2hlbWFcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFQSSB2ZXJzaW9uIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NjaGVtYS52ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHNwZWNpZmljIHByb3BlcnR5IGlzIHJlcXVpcmVkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzUHJvcGVydHlSZXF1aXJlZChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc2NoZW1hLnJlcXVpcmVkIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuX3NjaGVtYS5yZXF1aXJlZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzUHJvcGVydHlEZXByZWNhdGVkKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9zY2hlbWEucHJvcGVydGllcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BEZWYgPSB0aGlzLl9zY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgIHJldHVybiBwcm9wRGVmID8gcHJvcERlZi5kZXByZWNhdGVkID09PSB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiByZXF1aXJlZCBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIGdldFJlcXVpcmVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLl9zY2hlbWEucmVxdWlyZWQgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5fc2NoZW1hLnJlcXVpcmVkKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4udGhpcy5fc2NoZW1hLnJlcXVpcmVkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCBkZXByZWNhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVwcmVjYXRlZCBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIGdldERlcHJlY2F0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX3NjaGVtYS5wcm9wZXJ0aWVzKVxuICAgICAgLmZpbHRlcigoW18sIHByb3BEZWZdKSA9PiBwcm9wRGVmLmRlcHJlY2F0ZWQgPT09IHRydWUpXG4gICAgICAubWFwKChbcHJvcE5hbWVdKSA9PiBwcm9wTmFtZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResourceVersionManager - Helper class for managing API version resolution
|
|
3
|
+
*
|
|
4
|
+
* This helper class extracts version management logic from AzapiResource to follow
|
|
5
|
+
* the Single Responsibility Principle. It handles version resolution, validation,
|
|
6
|
+
* and configuration retrieval.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
import { ApiSchema, VersionConfig } from "../version-manager/interfaces/version-interfaces";
|
|
12
|
+
/**
|
|
13
|
+
* Helper class for managing API version resolution and configuration
|
|
14
|
+
*
|
|
15
|
+
* This class encapsulates all version-related operations including:
|
|
16
|
+
* - API version resolution (explicit or automatic)
|
|
17
|
+
* - Version validation against registered versions
|
|
18
|
+
* - Schema and configuration retrieval
|
|
19
|
+
* - Latest version resolution
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare class ResourceVersionManager {
|
|
24
|
+
private readonly _apiVersionManager;
|
|
25
|
+
private readonly _resourceType;
|
|
26
|
+
private readonly _defaultVersion;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new ResourceVersionManager instance
|
|
29
|
+
*
|
|
30
|
+
* @param resourceType - The Azure resource type (e.g., "Microsoft.Resources/resourceGroups")
|
|
31
|
+
* @param defaultVersion - The default version to use as fallback
|
|
32
|
+
*/
|
|
33
|
+
constructor(resourceType: string, defaultVersion: string);
|
|
34
|
+
/**
|
|
35
|
+
* Resolves the API version to use for a resource instance
|
|
36
|
+
*
|
|
37
|
+
* This method implements the version resolution logic:
|
|
38
|
+
* 1. If explicitVersion is provided, validate and use it
|
|
39
|
+
* 2. Otherwise, try to get the latest version from ApiVersionManager
|
|
40
|
+
* 3. If no versions registered, fall back to defaultVersion
|
|
41
|
+
*
|
|
42
|
+
* @param explicitVersion - Optional explicit version specified by user
|
|
43
|
+
* @returns The resolved API version string
|
|
44
|
+
* @throws Error if explicit version is provided but not supported
|
|
45
|
+
*/
|
|
46
|
+
resolveApiVersion(explicitVersion?: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves the version configuration for a specific version
|
|
49
|
+
*
|
|
50
|
+
* @param version - The version to retrieve configuration for
|
|
51
|
+
* @returns The version configuration, or undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
versionConfig(version: string): VersionConfig | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Retrieves the API schema for a specific version
|
|
56
|
+
*
|
|
57
|
+
* @param version - The version to retrieve schema for
|
|
58
|
+
* @returns The API schema for the version
|
|
59
|
+
* @throws Error if version configuration or schema cannot be found
|
|
60
|
+
*/
|
|
61
|
+
schemaForVersion(version: string): ApiSchema;
|
|
62
|
+
/**
|
|
63
|
+
* Validates whether a version is supported for the resource type
|
|
64
|
+
*
|
|
65
|
+
* @param version - The version to validate
|
|
66
|
+
* @returns True if the version is supported, false otherwise
|
|
67
|
+
*/
|
|
68
|
+
validateVersion(version: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Retrieves the latest available version for the resource type
|
|
71
|
+
*
|
|
72
|
+
* @returns The latest version string, or undefined if none found
|
|
73
|
+
*/
|
|
74
|
+
latestVersion(): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves all supported versions for the resource type
|
|
77
|
+
*
|
|
78
|
+
* @returns Array of supported version strings, sorted by release date (newest first)
|
|
79
|
+
*/
|
|
80
|
+
supportedVersions(): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Checks if the version is deprecated
|
|
83
|
+
*
|
|
84
|
+
* @param version - The version to check
|
|
85
|
+
* @returns True if the version is deprecated or sunset, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
isDeprecated(version: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Checks if the version has reached sunset
|
|
90
|
+
*
|
|
91
|
+
* @param version - The version to check
|
|
92
|
+
* @returns True if the version has reached sunset, false otherwise
|
|
93
|
+
*/
|
|
94
|
+
isSunset(version: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* The resource type this manager is configured for
|
|
97
|
+
*/
|
|
98
|
+
get resourceType(): string;
|
|
99
|
+
/**
|
|
100
|
+
* The default version configured for this manager
|
|
101
|
+
*/
|
|
102
|
+
get defaultVersion(): string;
|
|
103
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ResourceVersionManager - Helper class for managing API version resolution
|
|
4
|
+
*
|
|
5
|
+
* This helper class extracts version management logic from AzapiResource to follow
|
|
6
|
+
* the Single Responsibility Principle. It handles version resolution, validation,
|
|
7
|
+
* and configuration retrieval.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ResourceVersionManager = void 0;
|
|
14
|
+
const api_version_manager_1 = require("../version-manager/api-version-manager");
|
|
15
|
+
const version_interfaces_1 = require("../version-manager/interfaces/version-interfaces");
|
|
16
|
+
/**
|
|
17
|
+
* Helper class for managing API version resolution and configuration
|
|
18
|
+
*
|
|
19
|
+
* This class encapsulates all version-related operations including:
|
|
20
|
+
* - API version resolution (explicit or automatic)
|
|
21
|
+
* - Version validation against registered versions
|
|
22
|
+
* - Schema and configuration retrieval
|
|
23
|
+
* - Latest version resolution
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
class ResourceVersionManager {
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new ResourceVersionManager instance
|
|
30
|
+
*
|
|
31
|
+
* @param resourceType - The Azure resource type (e.g., "Microsoft.Resources/resourceGroups")
|
|
32
|
+
* @param defaultVersion - The default version to use as fallback
|
|
33
|
+
*/
|
|
34
|
+
constructor(resourceType, defaultVersion) {
|
|
35
|
+
if (!resourceType || resourceType.trim().length === 0) {
|
|
36
|
+
throw new Error("Resource type cannot be empty");
|
|
37
|
+
}
|
|
38
|
+
if (!defaultVersion || defaultVersion.trim().length === 0) {
|
|
39
|
+
throw new Error("Default version cannot be empty");
|
|
40
|
+
}
|
|
41
|
+
this._resourceType = resourceType;
|
|
42
|
+
this._defaultVersion = defaultVersion;
|
|
43
|
+
this._apiVersionManager = api_version_manager_1.ApiVersionManager.instance();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolves the API version to use for a resource instance
|
|
47
|
+
*
|
|
48
|
+
* This method implements the version resolution logic:
|
|
49
|
+
* 1. If explicitVersion is provided, validate and use it
|
|
50
|
+
* 2. Otherwise, try to get the latest version from ApiVersionManager
|
|
51
|
+
* 3. If no versions registered, fall back to defaultVersion
|
|
52
|
+
*
|
|
53
|
+
* @param explicitVersion - Optional explicit version specified by user
|
|
54
|
+
* @returns The resolved API version string
|
|
55
|
+
* @throws Error if explicit version is provided but not supported
|
|
56
|
+
*/
|
|
57
|
+
resolveApiVersion(explicitVersion) {
|
|
58
|
+
if (explicitVersion) {
|
|
59
|
+
// Validate that the explicit version is supported
|
|
60
|
+
if (!this.validateVersion(explicitVersion)) {
|
|
61
|
+
const supportedVersions = this.supportedVersions();
|
|
62
|
+
throw new Error(`Unsupported API version '${explicitVersion}' for resource type '${this._resourceType}'. ` +
|
|
63
|
+
`Supported versions: ${supportedVersions.join(", ")}`);
|
|
64
|
+
}
|
|
65
|
+
return explicitVersion;
|
|
66
|
+
}
|
|
67
|
+
// Try to get the latest version from the manager
|
|
68
|
+
const latestVersion = this.latestVersion();
|
|
69
|
+
if (latestVersion) {
|
|
70
|
+
return latestVersion;
|
|
71
|
+
}
|
|
72
|
+
// Fall back to the default version
|
|
73
|
+
console.warn(`No versions registered for ${this._resourceType}. ` +
|
|
74
|
+
`Using default version: ${this._defaultVersion}. ` +
|
|
75
|
+
`Consider registering versions with ApiVersionManager for better version management.`);
|
|
76
|
+
return this._defaultVersion;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Retrieves the version configuration for a specific version
|
|
80
|
+
*
|
|
81
|
+
* @param version - The version to retrieve configuration for
|
|
82
|
+
* @returns The version configuration, or undefined if not found
|
|
83
|
+
*/
|
|
84
|
+
versionConfig(version) {
|
|
85
|
+
return this._apiVersionManager.versionConfig(this._resourceType, version);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Retrieves the API schema for a specific version
|
|
89
|
+
*
|
|
90
|
+
* @param version - The version to retrieve schema for
|
|
91
|
+
* @returns The API schema for the version
|
|
92
|
+
* @throws Error if version configuration or schema cannot be found
|
|
93
|
+
*/
|
|
94
|
+
schemaForVersion(version) {
|
|
95
|
+
const versionConfig = this.versionConfig(version);
|
|
96
|
+
if (!versionConfig) {
|
|
97
|
+
throw new Error(`Cannot resolve schema: version configuration not found for ` +
|
|
98
|
+
`${this._resourceType}@${version}`);
|
|
99
|
+
}
|
|
100
|
+
return versionConfig.schema;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validates whether a version is supported for the resource type
|
|
104
|
+
*
|
|
105
|
+
* @param version - The version to validate
|
|
106
|
+
* @returns True if the version is supported, false otherwise
|
|
107
|
+
*/
|
|
108
|
+
validateVersion(version) {
|
|
109
|
+
return this._apiVersionManager.validateVersionSupport(this._resourceType, version);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Retrieves the latest available version for the resource type
|
|
113
|
+
*
|
|
114
|
+
* @returns The latest version string, or undefined if none found
|
|
115
|
+
*/
|
|
116
|
+
latestVersion() {
|
|
117
|
+
return this._apiVersionManager.latestVersion(this._resourceType);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Retrieves all supported versions for the resource type
|
|
121
|
+
*
|
|
122
|
+
* @returns Array of supported version strings, sorted by release date (newest first)
|
|
123
|
+
*/
|
|
124
|
+
supportedVersions() {
|
|
125
|
+
return this._apiVersionManager.supportedVersions(this._resourceType);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Checks if the version is deprecated
|
|
129
|
+
*
|
|
130
|
+
* @param version - The version to check
|
|
131
|
+
* @returns True if the version is deprecated or sunset, false otherwise
|
|
132
|
+
*/
|
|
133
|
+
isDeprecated(version) {
|
|
134
|
+
const config = this.versionConfig(version);
|
|
135
|
+
if (!config) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
return (config.supportLevel === version_interfaces_1.VersionSupportLevel.DEPRECATED ||
|
|
139
|
+
config.supportLevel === version_interfaces_1.VersionSupportLevel.SUNSET);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Checks if the version has reached sunset
|
|
143
|
+
*
|
|
144
|
+
* @param version - The version to check
|
|
145
|
+
* @returns True if the version has reached sunset, false otherwise
|
|
146
|
+
*/
|
|
147
|
+
isSunset(version) {
|
|
148
|
+
const config = this.versionConfig(version);
|
|
149
|
+
if (!config) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return config.supportLevel === version_interfaces_1.VersionSupportLevel.SUNSET;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The resource type this manager is configured for
|
|
156
|
+
*/
|
|
157
|
+
get resourceType() {
|
|
158
|
+
return this._resourceType;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* The default version configured for this manager
|
|
162
|
+
*/
|
|
163
|
+
get defaultVersion() {
|
|
164
|
+
return this._defaultVersion;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.ResourceVersionManager = ResourceVersionManager;
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtdmVyc2lvbi1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUtYXp1cmUvbGliL2F6YXBpL3Jlc291cmNlLXZlcnNpb24tbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFFSCxnRkFBMkU7QUFDM0UseUZBSTBEO0FBRTFEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLHNCQUFzQjtJQUtqQzs7Ozs7T0FLRztJQUNILFlBQVksWUFBb0IsRUFBRSxjQUFzQjtRQUN0RCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksaUJBQWlCLENBQUMsZUFBd0I7UUFDL0MsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUss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KipcbiAqIFJlc291cmNlVmVyc2lvbk1hbmFnZXIgLSBIZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIEFQSSB2ZXJzaW9uIHJlc29sdXRpb25cbiAqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyBleHRyYWN0cyB2ZXJzaW9uIG1hbmFnZW1lbnQgbG9naWMgZnJvbSBBemFwaVJlc291cmNlIHRvIGZvbGxvd1xuICogdGhlIFNpbmdsZSBSZXNwb25zaWJpbGl0eSBQcmluY2lwbGUuIEl0IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCB2YWxpZGF0aW9uLFxuICogYW5kIGNvbmZpZ3VyYXRpb24gcmV0cmlldmFsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQXBpVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi4vdmVyc2lvbi1tYW5hZ2VyL2FwaS12ZXJzaW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFwaVNjaGVtYSxcbiAgVmVyc2lvbkNvbmZpZyxcbiAgVmVyc2lvblN1cHBvcnRMZXZlbCxcbn0gZnJvbSBcIi4uL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgbWFuYWdpbmcgQVBJIHZlcnNpb24gcmVzb2x1dGlvbiBhbmQgY29uZmlndXJhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIGFsbCB2ZXJzaW9uLXJlbGF0ZWQgb3BlcmF0aW9ucyBpbmNsdWRpbmc6XG4gKiAtIEFQSSB2ZXJzaW9uIHJlc29sdXRpb24gKGV4cGxpY2l0IG9yIGF1dG9tYXRpYylcbiAqIC0gVmVyc2lvbiB2YWxpZGF0aW9uIGFnYWluc3QgcmVnaXN0ZXJlZCB2ZXJzaW9uc1xuICogLSBTY2hlbWEgYW5kIGNvbmZpZ3VyYXRpb24gcmV0cmlldmFsXG4gKiAtIExhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb25cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcGlWZXJzaW9uTWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFJlc291cmNlVmVyc2lvbk1hbmFnZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHJlc291cmNlVHlwZSAtIFRoZSBBenVyZSByZXNvdXJjZSB0eXBlIChlLmcuLCBcIk1pY3Jvc29mdC5SZXNvdXJjZXMvcmVzb3VyY2VHcm91cHNcIilcbiAgICogQHBhcmFtIGRlZmF1bHRWZXJzaW9uIC0gVGhlIGRlZmF1bHQgdmVyc2lvbiB0byB1c2UgYXMgZmFsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlc291cmNlVHlwZTogc3RyaW5nLCBkZWZhdWx0VmVyc2lvbjogc3RyaW5nKSB7XG4gICAgaWYgKCFyZXNvdXJjZVR5cGUgfHwgcmVzb3VyY2VUeXBlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc291cmNlIHR5cGUgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgIH1cblxuICAgIGlmICghZGVmYXVsdFZlcnNpb24gfHwgZGVmYXVsdFZlcnNpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVmYXVsdCB2ZXJzaW9uIGNhbm5vdCBiZSBlbXB0eVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5fZGVmYXVsdFZlcnNpb24gPSBkZWZhdWx0VmVyc2lvbjtcbiAgICB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlciA9IEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIEFQSSB2ZXJzaW9uIHRvIHVzZSBmb3IgYSByZXNvdXJjZSBpbnN0YW5jZVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSB2ZXJzaW9uIHJlc29sdXRpb24gbG9naWM6XG4gICAqIDEuIElmIGV4cGxpY2l0VmVyc2lvbiBpcyBwcm92aWRlZCwgdmFsaWRhdGUgYW5kIHVzZSBpdFxuICAgKiAyLiBPdGhlcndpc2UsIHRyeSB0byBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gQXBpVmVyc2lvbk1hbmFnZXJcbiAgICogMy4gSWYgbm8gdmVyc2lvbnMgcmVnaXN0ZXJlZCwgZmFsbCBiYWNrIHRvIGRlZmF1bHRWZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBleHBsaWNpdFZlcnNpb24gLSBPcHRpb25hbCBleHBsaWNpdCB2ZXJzaW9uIHNwZWNpZmllZCBieSB1c2VyXG4gICAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBBUEkgdmVyc2lvbiBzdHJpbmdcbiAgICogQHRocm93cyBFcnJvciBpZiBleHBsaWNpdCB2ZXJzaW9uIGlzIHByb3ZpZGVkIGJ1dCBub3Qgc3VwcG9ydGVkXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZUFwaVZlcnNpb24oZXhwbGljaXRWZXJzaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZXhwbGljaXRWZXJzaW9uKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBleHBsaWNpdCB2ZXJzaW9uIGlzIHN1cHBvcnRlZFxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVmVyc2lvbihleHBsaWNpdFZlcnNpb24pKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFZlcnNpb25zID0gdGhpcy5zdXBwb3J0ZWRWZXJzaW9ucygpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICcke2V4cGxpY2l0VmVyc2lvbn0nIGZvciByZXNvdXJjZSB0eXBlICcke3RoaXMuX3Jlc291cmNlVHlwZX0nLiBgICtcbiAgICAgICAgICAgIGBTdXBwb3J0ZWQgdmVyc2lvbnM6ICR7c3VwcG9ydGVkVmVyc2lvbnMuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwbGljaXRWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gdGhlIG1hbmFnZXJcbiAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gdGhpcy5sYXRlc3RWZXJzaW9uKCk7XG4gICAgaWYgKGxhdGVzdFZlcnNpb24pIHtcbiAgICAgIHJldHVybiBsYXRlc3RWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYE5vIHZlcnNpb25zIHJlZ2lzdGVyZWQgZm9yICR7dGhpcy5fcmVzb3VyY2VUeXBlfS4gYCArXG4gICAgICAgIGBVc2luZyBkZWZhdWx0IHZlcnNpb246ICR7dGhpcy5fZGVmYXVsdFZlcnNpb259LiBgICtcbiAgICAgICAgYENvbnNpZGVyIHJlZ2lzdGVyaW5nIHZlcnNpb25zIHdpdGggQXBpVmVyc2lvbk1hbmFnZXIgZm9yIGJldHRlciB2ZXJzaW9uIG1hbmFnZW1lbnQuYCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdmVyc2lvbiBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIHZlcnNpb25cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGZvclxuICAgKiBAcmV0dXJucyBUaGUgdmVyc2lvbiBjb25maWd1cmF0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgdmVyc2lvbkNvbmZpZyh2ZXJzaW9uOiBzdHJpbmcpOiBWZXJzaW9uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYXBpVmVyc2lvbk1hbmFnZXIudmVyc2lvbkNvbmZpZyh0aGlzLl9yZXNvdXJjZVR5cGUsIHZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQVBJIHNjaGVtYSBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gdG8gcmV0cmlldmUgc2NoZW1hIGZvclxuICAgKiBAcmV0dXJucyBUaGUgQVBJIHNjaGVtYSBmb3IgdGhlIHZlcnNpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gb3Igc2NoZW1hIGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cbiAgcHVibGljIHNjaGVtYUZvclZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogQXBpU2NoZW1hIHtcbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuXG4gICAgaWYgKCF2ZXJzaW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBzY2hlbWE6IHZlcnNpb24gY29uZmlndXJhdGlvbiBub3QgZm91bmQgZm9yIGAgK1xuICAgICAgICAgIGAke3RoaXMuX3Jlc291cmNlVHlwZX1AJHt2ZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uQ29uZmlnLnNjaGVtYTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHZlcnNpb24gaXMgc3VwcG9ydGVkIGZvciB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSB2ZXJzaW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZlcnNpb24gaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyLnZhbGlkYXRlVmVyc2lvblN1cHBvcnQoXG4gICAgICB0aGlzLl9yZXNvdXJjZVR5cGUsXG4gICAgICB2ZXJzaW9uLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHZlcnNpb24gZm9yIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsYXRlc3QgdmVyc2lvbiBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBub25lIGZvdW5kXG4gICAqL1xuICBwdWJsaWMgbGF0ZXN0VmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uTWFuYWdlci5sYXRlc3RWZXJzaW9uKHRoaXMuX3Jlc291cmNlVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMgZm9yIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHN1cHBvcnRlZCB2ZXJzaW9uIHN0cmluZ3MsIHNvcnRlZCBieSByZWxlYXNlIGRhdGUgKG5ld2VzdCBmaXJzdClcbiAgICovXG4gIHB1YmxpYyBzdXBwb3J0ZWRWZXJzaW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVZlcnNpb25NYW5hZ2VyLnN1cHBvcnRlZFZlcnNpb25zKHRoaXMuX3Jlc291cmNlVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWQgb3Igc3Vuc2V0LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBpc0RlcHJlY2F0ZWQodmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIGNvbmZpZy5zdXBwb3J0TGV2ZWwgPT09IFZlcnNpb25TdXBwb3J0TGV2ZWwuREVQUkVDQVRFRCB8fFxuICAgICAgY29uZmlnLnN1cHBvcnRMZXZlbCA9PT0gVmVyc2lvblN1cHBvcnRMZXZlbC5TVU5TRVRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdmVyc2lvbiBoYXMgcmVhY2hlZCBzdW5zZXRcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2ZXJzaW9uIGhhcyByZWFjaGVkIHN1bnNldCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgaXNTdW5zZXQodmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy52ZXJzaW9uQ29uZmlnKHZlcnNpb24pO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy5zdXBwb3J0TGV2ZWwgPT09IFZlcnNpb25TdXBwb3J0TGV2ZWwuU1VOU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSB0eXBlIHRoaXMgbWFuYWdlciBpcyBjb25maWd1cmVkIGZvclxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZlcnNpb24gY29uZmlndXJlZCBmb3IgdGhpcyBtYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICB9XG59XG4iXX0=
|