@microsoft/terraform-cdk-constructs 1.8.0 → 1.10.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 +60376 -32133
- package/API.md +72290 -37038
- 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-applicationinsights/index.d.ts +7 -0
- package/lib/azure-applicationinsights/index.js +24 -0
- package/lib/azure-applicationinsights/lib/application-insights-schemas.d.ts +29 -0
- package/lib/azure-applicationinsights/lib/application-insights-schemas.js +162 -0
- package/lib/azure-applicationinsights/lib/application-insights.d.ts +206 -0
- package/lib/azure-applicationinsights/lib/application-insights.js +209 -0
- package/lib/azure-applicationinsights/lib/index.d.ts +5 -0
- package/lib/azure-applicationinsights/lib/index.js +22 -0
- package/lib/azure-applicationinsights/test/application-insights.integ.d.ts +9 -0
- package/lib/azure-applicationinsights/test/application-insights.integ.js +84 -0
- package/lib/azure-applicationinsights/test/application-insights.spec.d.ts +8 -0
- package/lib/azure-applicationinsights/test/application-insights.spec.js +209 -0
- package/lib/azure-containerapps/index.d.ts +1 -0
- package/lib/azure-containerapps/index.js +18 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
- package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
- package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
- package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
- package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
- package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
- package/lib/azure-containerapps/lib/container-app.js +320 -0
- package/lib/azure-containerapps/lib/index.d.ts +4 -0
- package/lib/azure-containerapps/lib/index.js +21 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
- package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app.integ.js +119 -0
- package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app.spec.js +839 -0
- package/lib/azure-containerregistry/index.d.ts +1 -0
- package/lib/azure-containerregistry/index.js +18 -0
- package/lib/azure-containerregistry/lib/container-registry-schemas.d.ts +32 -0
- package/lib/azure-containerregistry/lib/container-registry-schemas.js +316 -0
- package/lib/azure-containerregistry/lib/container-registry.d.ts +330 -0
- package/lib/azure-containerregistry/lib/container-registry.js +217 -0
- package/lib/azure-containerregistry/lib/index.d.ts +2 -0
- package/lib/azure-containerregistry/lib/index.js +19 -0
- package/lib/azure-containerregistry/test/container-registry.integ.d.ts +9 -0
- package/lib/azure-containerregistry/test/container-registry.integ.js +101 -0
- package/lib/azure-containerregistry/test/container-registry.spec.d.ts +4 -0
- package/lib/azure-containerregistry/test/container-registry.spec.js +425 -0
- package/lib/azure-cosmosdb/index.d.ts +1 -0
- package/lib/azure-cosmosdb/index.js +18 -0
- package/lib/azure-cosmosdb/lib/cosmos-db-schemas.d.ts +40 -0
- package/lib/azure-cosmosdb/lib/cosmos-db-schemas.js +330 -0
- package/lib/azure-cosmosdb/lib/cosmos-db.d.ts +290 -0
- package/lib/azure-cosmosdb/lib/cosmos-db.js +222 -0
- package/lib/azure-cosmosdb/lib/index.d.ts +2 -0
- package/lib/azure-cosmosdb/lib/index.js +19 -0
- package/lib/azure-cosmosdb/test/cosmos-db.integ.d.ts +9 -0
- package/lib/azure-cosmosdb/test/cosmos-db.integ.js +98 -0
- package/lib/azure-cosmosdb/test/cosmos-db.spec.d.ts +4 -0
- package/lib/azure-cosmosdb/test/cosmos-db.spec.js +339 -0
- 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/records/dns-records.js +10 -10
- package/lib/azure-functionapp/index.d.ts +1 -0
- package/lib/azure-functionapp/index.js +18 -0
- package/lib/azure-functionapp/lib/function-app-schemas.d.ts +32 -0
- package/lib/azure-functionapp/lib/function-app-schemas.js +303 -0
- package/lib/azure-functionapp/lib/function-app.d.ts +367 -0
- package/lib/azure-functionapp/lib/function-app.js +223 -0
- package/lib/azure-functionapp/lib/index.d.ts +2 -0
- package/lib/azure-functionapp/lib/index.js +19 -0
- package/lib/azure-functionapp/test/function-app.integ.d.ts +12 -0
- package/lib/azure-functionapp/test/function-app.integ.js +134 -0
- package/lib/azure-functionapp/test/function-app.spec.d.ts +4 -0
- package/lib/azure-functionapp/test/function-app.spec.js +566 -0
- package/lib/azure-keyvault/index.d.ts +1 -0
- package/lib/azure-keyvault/index.js +18 -0
- package/lib/azure-keyvault/lib/index.d.ts +2 -0
- package/lib/azure-keyvault/lib/index.js +19 -0
- package/lib/azure-keyvault/lib/key-vault-schemas.d.ts +40 -0
- package/lib/azure-keyvault/lib/key-vault-schemas.js +312 -0
- package/lib/azure-keyvault/lib/key-vault.d.ts +344 -0
- package/lib/azure-keyvault/lib/key-vault.js +243 -0
- package/lib/azure-keyvault/test/key-vault.integ.d.ts +9 -0
- package/lib/azure-keyvault/test/key-vault.integ.js +108 -0
- package/lib/azure-keyvault/test/key-vault.spec.d.ts +4 -0
- package/lib/azure-keyvault/test/key-vault.spec.js +264 -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/private-dns-zone.js +1 -1
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +8 -8
- 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-sreagent/index.d.ts +1 -0
- package/lib/azure-sreagent/index.js +18 -0
- package/lib/azure-sreagent/lib/index.d.ts +2 -0
- package/lib/azure-sreagent/lib/index.js +19 -0
- package/lib/azure-sreagent/lib/sre-agent-schemas.d.ts +29 -0
- package/lib/azure-sreagent/lib/sre-agent-schemas.js +296 -0
- package/lib/azure-sreagent/lib/sre-agent.d.ts +208 -0
- package/lib/azure-sreagent/lib/sre-agent.js +217 -0
- package/lib/azure-sreagent/test/sre-agent.integ.d.ts +9 -0
- package/lib/azure-sreagent/test/sre-agent.integ.js +78 -0
- package/lib/azure-sreagent/test/sre-agent.spec.d.ts +4 -0
- package/lib/azure-sreagent/test/sre-agent.spec.js +216 -0
- package/lib/azure-staticwebapp/index.d.ts +1 -0
- package/lib/azure-staticwebapp/index.js +18 -0
- package/lib/azure-staticwebapp/lib/index.d.ts +2 -0
- package/lib/azure-staticwebapp/lib/index.js +19 -0
- package/lib/azure-staticwebapp/lib/static-web-app-schemas.d.ts +40 -0
- package/lib/azure-staticwebapp/lib/static-web-app-schemas.js +236 -0
- package/lib/azure-staticwebapp/lib/static-web-app.d.ts +242 -0
- package/lib/azure-staticwebapp/lib/static-web-app.js +232 -0
- package/lib/azure-staticwebapp/test/static-web-app.integ.d.ts +9 -0
- package/lib/azure-staticwebapp/test/static-web-app.integ.js +76 -0
- package/lib/azure-staticwebapp/test/static-web-app.spec.d.ts +15 -0
- package/lib/azure-staticwebapp/test/static-web-app.spec.js +293 -0
- 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 +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 +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 +25 -0
- package/lib/index.js +27 -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,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Static Web App implementation using AzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a unified implementation for Azure Static Web Apps that
|
|
5
|
+
* automatically handles version management, schema validation, and property
|
|
6
|
+
* transformation across all supported API versions.
|
|
7
|
+
*
|
|
8
|
+
* Supported API Versions:
|
|
9
|
+
* - 2022-03-01 (Active)
|
|
10
|
+
* - 2023-12-01 (Active)
|
|
11
|
+
* - 2024-04-01 (Active, Latest)
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Automatic latest version resolution when no version is specified
|
|
15
|
+
* - Explicit version pinning for stability requirements
|
|
16
|
+
* - Schema-driven validation and transformation
|
|
17
|
+
* - JSII compliance for multi-language support
|
|
18
|
+
*/
|
|
19
|
+
import * as cdktf from "cdktf";
|
|
20
|
+
import { Construct } from "constructs";
|
|
21
|
+
import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
|
|
22
|
+
import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
|
|
23
|
+
/**
|
|
24
|
+
* SKU configuration for Static Web App
|
|
25
|
+
*/
|
|
26
|
+
export interface StaticWebAppSku {
|
|
27
|
+
/**
|
|
28
|
+
* Name of the SKU
|
|
29
|
+
* @example "Free", "Standard"
|
|
30
|
+
*/
|
|
31
|
+
readonly name: string;
|
|
32
|
+
/**
|
|
33
|
+
* Tier of the SKU
|
|
34
|
+
* @example "Free", "Standard"
|
|
35
|
+
*/
|
|
36
|
+
readonly tier?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build configuration for the Static Web App
|
|
40
|
+
*
|
|
41
|
+
* These properties drive the build pipeline that the Static Web App
|
|
42
|
+
* uses when integrated with a source control repository.
|
|
43
|
+
*/
|
|
44
|
+
export interface StaticWebAppBuildProperties {
|
|
45
|
+
/**
|
|
46
|
+
* The path to the app code within the repository
|
|
47
|
+
* @example "/", "src"
|
|
48
|
+
*/
|
|
49
|
+
readonly appLocation?: string;
|
|
50
|
+
/**
|
|
51
|
+
* The path to the Azure Functions API code within the repository
|
|
52
|
+
* @example "api"
|
|
53
|
+
*/
|
|
54
|
+
readonly apiLocation?: string;
|
|
55
|
+
/**
|
|
56
|
+
* The path of the build output relative to the app location
|
|
57
|
+
* @example "build", "dist"
|
|
58
|
+
*/
|
|
59
|
+
readonly outputLocation?: string;
|
|
60
|
+
/**
|
|
61
|
+
* A custom command to run during deployment of the static content application
|
|
62
|
+
*/
|
|
63
|
+
readonly appBuildCommand?: string;
|
|
64
|
+
/**
|
|
65
|
+
* A custom command to run during deployment of the Azure Functions API application
|
|
66
|
+
*/
|
|
67
|
+
readonly apiBuildCommand?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Skip Github Action workflow generation
|
|
70
|
+
*/
|
|
71
|
+
readonly skipGithubActionWorkflowGeneration?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* GitHub Action secret name override
|
|
74
|
+
*/
|
|
75
|
+
readonly githubActionSecretNameOverride?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Properties for the Azure Static Web App
|
|
79
|
+
*
|
|
80
|
+
* Extends AzapiResourceProps with Static Web App specific properties
|
|
81
|
+
*/
|
|
82
|
+
export interface StaticWebAppProps extends AzapiResourceProps {
|
|
83
|
+
/**
|
|
84
|
+
* SKU of the static web app
|
|
85
|
+
* @defaultValue { name: "Free", tier: "Free" }
|
|
86
|
+
*/
|
|
87
|
+
readonly sku?: StaticWebAppSku;
|
|
88
|
+
/**
|
|
89
|
+
* URL of the source code repository
|
|
90
|
+
* Optional - if not provided, the Static Web App is created without source control integration
|
|
91
|
+
* @example "https://github.com/my-org/my-repo"
|
|
92
|
+
*/
|
|
93
|
+
readonly repositoryUrl?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Source code branch in the repository
|
|
96
|
+
* @example "main"
|
|
97
|
+
*/
|
|
98
|
+
readonly branch?: string;
|
|
99
|
+
/**
|
|
100
|
+
* Token used to authenticate against the repository
|
|
101
|
+
* For GitHub, this is a personal access token with `repo` scope
|
|
102
|
+
*
|
|
103
|
+
* @remarks
|
|
104
|
+
* Treat this value as a secret. Prefer passing it via Terraform variables
|
|
105
|
+
* or environment variables rather than hard-coding it.
|
|
106
|
+
*/
|
|
107
|
+
readonly repositoryToken?: string;
|
|
108
|
+
/**
|
|
109
|
+
* Build configuration for the static web app
|
|
110
|
+
*/
|
|
111
|
+
readonly buildProperties?: StaticWebAppBuildProperties;
|
|
112
|
+
/**
|
|
113
|
+
* Whether staging environments are allowed
|
|
114
|
+
* @example "Enabled", "Disabled"
|
|
115
|
+
* @defaultValue "Enabled"
|
|
116
|
+
*/
|
|
117
|
+
readonly stagingEnvironmentPolicy?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Whether configuration file updates are allowed
|
|
120
|
+
* @defaultValue true
|
|
121
|
+
*/
|
|
122
|
+
readonly allowConfigFileUpdates?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Resource group ID where the Static Web App will be created
|
|
125
|
+
* Optional - will use the subscription scope if not provided
|
|
126
|
+
*/
|
|
127
|
+
readonly resourceGroupId?: string;
|
|
128
|
+
/**
|
|
129
|
+
* The lifecycle rules to ignore changes
|
|
130
|
+
* Useful for properties that are externally managed
|
|
131
|
+
*
|
|
132
|
+
* @example ["tags", "body.properties.repositoryToken"]
|
|
133
|
+
*/
|
|
134
|
+
readonly ignoreChanges?: string[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Azure Static Web App
|
|
138
|
+
*
|
|
139
|
+
* This class provides a single, version-aware implementation for the
|
|
140
|
+
* `Microsoft.Web/staticSites` Azure resource type. It automatically handles
|
|
141
|
+
* version resolution, schema validation, and property transformation while
|
|
142
|
+
* exposing the most commonly used Static Web App configuration options.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* // Basic Free-tier Static Web App without source control integration:
|
|
146
|
+
* const swa = new StaticWebApp(this, "swa", {
|
|
147
|
+
* name: "my-static-web-app",
|
|
148
|
+
* location: "eastus2",
|
|
149
|
+
* resourceGroupId: resourceGroup.id,
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* // Standard Static Web App with GitHub integration:
|
|
154
|
+
* const swa = new StaticWebApp(this, "swa", {
|
|
155
|
+
* name: "my-static-web-app",
|
|
156
|
+
* location: "eastus2",
|
|
157
|
+
* resourceGroupId: resourceGroup.id,
|
|
158
|
+
* sku: {
|
|
159
|
+
* name: "Standard",
|
|
160
|
+
* tier: "Standard",
|
|
161
|
+
* },
|
|
162
|
+
* repositoryUrl: "https://github.com/my-org/my-repo",
|
|
163
|
+
* branch: "main",
|
|
164
|
+
* buildProperties: {
|
|
165
|
+
* appLocation: "/",
|
|
166
|
+
* apiLocation: "api",
|
|
167
|
+
* outputLocation: "dist",
|
|
168
|
+
* },
|
|
169
|
+
* });
|
|
170
|
+
*
|
|
171
|
+
* @stability stable
|
|
172
|
+
*/
|
|
173
|
+
export declare class StaticWebApp extends AzapiResource {
|
|
174
|
+
/**
|
|
175
|
+
* The input properties for this Static Web App instance
|
|
176
|
+
*/
|
|
177
|
+
readonly props: StaticWebAppProps;
|
|
178
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
179
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
180
|
+
readonly locationOutput: cdktf.TerraformOutput;
|
|
181
|
+
readonly tagsOutput: cdktf.TerraformOutput;
|
|
182
|
+
readonly defaultHostnameOutput: cdktf.TerraformOutput;
|
|
183
|
+
/**
|
|
184
|
+
* Creates a new Azure Static Web App using the AzapiResource framework
|
|
185
|
+
*
|
|
186
|
+
* @param scope - The scope in which to define this construct
|
|
187
|
+
* @param id - The unique identifier for this instance
|
|
188
|
+
* @param props - Configuration properties for the Static Web App
|
|
189
|
+
*/
|
|
190
|
+
constructor(scope: Construct, id: string, props: StaticWebAppProps);
|
|
191
|
+
/**
|
|
192
|
+
* Gets the default API version to use when no explicit version is specified
|
|
193
|
+
*/
|
|
194
|
+
protected defaultVersion(): string;
|
|
195
|
+
/**
|
|
196
|
+
* Gets the Azure resource type for Static Web Apps
|
|
197
|
+
*/
|
|
198
|
+
protected resourceType(): string;
|
|
199
|
+
/**
|
|
200
|
+
* Gets the API schema for the resolved version
|
|
201
|
+
*/
|
|
202
|
+
protected apiSchema(): ApiSchema;
|
|
203
|
+
/**
|
|
204
|
+
* Indicates that location is required for Static Web Apps
|
|
205
|
+
*/
|
|
206
|
+
protected requiresLocation(): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Creates the resource body for the Azure API call
|
|
209
|
+
* Transforms the input properties into the JSON format expected by the
|
|
210
|
+
* `Microsoft.Web/staticSites` Azure REST API.
|
|
211
|
+
*/
|
|
212
|
+
protected createResourceBody(props: any): any;
|
|
213
|
+
/**
|
|
214
|
+
* Get the subscription ID from the Static Web App ID
|
|
215
|
+
* Extracts the subscription ID from the Azure resource ID format
|
|
216
|
+
*/
|
|
217
|
+
get subscriptionId(): string;
|
|
218
|
+
/**
|
|
219
|
+
* Get the full resource identifier for use in other Azure resources
|
|
220
|
+
* Alias for the id property
|
|
221
|
+
*/
|
|
222
|
+
get resourceId(): string;
|
|
223
|
+
/**
|
|
224
|
+
* Get the default hostname of the Static Web App
|
|
225
|
+
* Returns the Terraform interpolation string for the default hostname
|
|
226
|
+
*/
|
|
227
|
+
get defaultHostname(): string;
|
|
228
|
+
/**
|
|
229
|
+
* Add a tag to the Static Web App
|
|
230
|
+
* Note: This modifies the construct props but requires a new deployment to take effect
|
|
231
|
+
*/
|
|
232
|
+
addTag(key: string, value: string): void;
|
|
233
|
+
/**
|
|
234
|
+
* Remove a tag from the Static Web App
|
|
235
|
+
* Note: This modifies the construct props but requires a new deployment to take effect
|
|
236
|
+
*/
|
|
237
|
+
removeTag(key: string): void;
|
|
238
|
+
/**
|
|
239
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
240
|
+
*/
|
|
241
|
+
private _applyIgnoreChanges;
|
|
242
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.StaticWebApp = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Azure Static Web App implementation using AzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a unified implementation for Azure Static Web Apps that
|
|
10
|
+
* automatically handles version management, schema validation, and property
|
|
11
|
+
* transformation across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2022-03-01 (Active)
|
|
15
|
+
* - 2023-12-01 (Active)
|
|
16
|
+
* - 2024-04-01 (Active, Latest)
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - Automatic latest version resolution when no version is specified
|
|
20
|
+
* - Explicit version pinning for stability requirements
|
|
21
|
+
* - Schema-driven validation and transformation
|
|
22
|
+
* - JSII compliance for multi-language support
|
|
23
|
+
*/
|
|
24
|
+
const cdktf = require("cdktf");
|
|
25
|
+
const static_web_app_schemas_1 = require("./static-web-app-schemas");
|
|
26
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
27
|
+
/**
|
|
28
|
+
* Azure Static Web App
|
|
29
|
+
*
|
|
30
|
+
* This class provides a single, version-aware implementation for the
|
|
31
|
+
* `Microsoft.Web/staticSites` Azure resource type. It automatically handles
|
|
32
|
+
* version resolution, schema validation, and property transformation while
|
|
33
|
+
* exposing the most commonly used Static Web App configuration options.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Basic Free-tier Static Web App without source control integration:
|
|
37
|
+
* const swa = new StaticWebApp(this, "swa", {
|
|
38
|
+
* name: "my-static-web-app",
|
|
39
|
+
* location: "eastus2",
|
|
40
|
+
* resourceGroupId: resourceGroup.id,
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Standard Static Web App with GitHub integration:
|
|
45
|
+
* const swa = new StaticWebApp(this, "swa", {
|
|
46
|
+
* name: "my-static-web-app",
|
|
47
|
+
* location: "eastus2",
|
|
48
|
+
* resourceGroupId: resourceGroup.id,
|
|
49
|
+
* sku: {
|
|
50
|
+
* name: "Standard",
|
|
51
|
+
* tier: "Standard",
|
|
52
|
+
* },
|
|
53
|
+
* repositoryUrl: "https://github.com/my-org/my-repo",
|
|
54
|
+
* branch: "main",
|
|
55
|
+
* buildProperties: {
|
|
56
|
+
* appLocation: "/",
|
|
57
|
+
* apiLocation: "api",
|
|
58
|
+
* outputLocation: "dist",
|
|
59
|
+
* },
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* @stability stable
|
|
63
|
+
*/
|
|
64
|
+
class StaticWebApp extends azapi_resource_1.AzapiResource {
|
|
65
|
+
/**
|
|
66
|
+
* Creates a new Azure Static Web App using the AzapiResource framework
|
|
67
|
+
*
|
|
68
|
+
* @param scope - The scope in which to define this construct
|
|
69
|
+
* @param id - The unique identifier for this instance
|
|
70
|
+
* @param props - Configuration properties for the Static Web App
|
|
71
|
+
*/
|
|
72
|
+
constructor(scope, id, props) {
|
|
73
|
+
super(scope, id, props);
|
|
74
|
+
this.props = props;
|
|
75
|
+
// Create Terraform outputs for easy access and referencing from other resources
|
|
76
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
77
|
+
value: this.id,
|
|
78
|
+
description: "The ID of the Static Web App",
|
|
79
|
+
});
|
|
80
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
81
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
82
|
+
description: "The name of the Static Web App",
|
|
83
|
+
});
|
|
84
|
+
this.locationOutput = new cdktf.TerraformOutput(this, "location", {
|
|
85
|
+
value: `\${${this.terraformResource.fqn}.location}`,
|
|
86
|
+
description: "The location of the Static Web App",
|
|
87
|
+
});
|
|
88
|
+
this.tagsOutput = new cdktf.TerraformOutput(this, "tags", {
|
|
89
|
+
value: `\${${this.terraformResource.fqn}.tags}`,
|
|
90
|
+
description: "The tags assigned to the Static Web App",
|
|
91
|
+
});
|
|
92
|
+
this.defaultHostnameOutput = new cdktf.TerraformOutput(this, "default_hostname", {
|
|
93
|
+
value: `\${${this.terraformResource.fqn}.output.properties.defaultHostname}`,
|
|
94
|
+
description: "The default hostname of the Static Web App",
|
|
95
|
+
});
|
|
96
|
+
// Override logical IDs to match consistent naming convention
|
|
97
|
+
this.idOutput.overrideLogicalId("id");
|
|
98
|
+
this.nameOutput.overrideLogicalId("name");
|
|
99
|
+
this.locationOutput.overrideLogicalId("location");
|
|
100
|
+
this.tagsOutput.overrideLogicalId("tags");
|
|
101
|
+
this.defaultHostnameOutput.overrideLogicalId("default_hostname");
|
|
102
|
+
// Apply ignore changes if specified
|
|
103
|
+
this._applyIgnoreChanges();
|
|
104
|
+
}
|
|
105
|
+
// =============================================================================
|
|
106
|
+
// REQUIRED ABSTRACT METHODS FROM AzapiResource
|
|
107
|
+
// =============================================================================
|
|
108
|
+
/**
|
|
109
|
+
* Gets the default API version to use when no explicit version is specified
|
|
110
|
+
*/
|
|
111
|
+
defaultVersion() {
|
|
112
|
+
return "2024-04-01";
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Gets the Azure resource type for Static Web Apps
|
|
116
|
+
*/
|
|
117
|
+
resourceType() {
|
|
118
|
+
return static_web_app_schemas_1.STATIC_WEB_APP_TYPE;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Gets the API schema for the resolved version
|
|
122
|
+
*/
|
|
123
|
+
apiSchema() {
|
|
124
|
+
return this.resolveSchema();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Indicates that location is required for Static Web Apps
|
|
128
|
+
*/
|
|
129
|
+
requiresLocation() {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Creates the resource body for the Azure API call
|
|
134
|
+
* Transforms the input properties into the JSON format expected by the
|
|
135
|
+
* `Microsoft.Web/staticSites` Azure REST API.
|
|
136
|
+
*/
|
|
137
|
+
createResourceBody(props) {
|
|
138
|
+
const typedProps = props;
|
|
139
|
+
const properties = {};
|
|
140
|
+
if (typedProps.repositoryUrl !== undefined) {
|
|
141
|
+
properties.repositoryUrl = typedProps.repositoryUrl;
|
|
142
|
+
}
|
|
143
|
+
if (typedProps.branch !== undefined) {
|
|
144
|
+
properties.branch = typedProps.branch;
|
|
145
|
+
}
|
|
146
|
+
if (typedProps.repositoryToken !== undefined) {
|
|
147
|
+
properties.repositoryToken = typedProps.repositoryToken;
|
|
148
|
+
}
|
|
149
|
+
if (typedProps.buildProperties !== undefined) {
|
|
150
|
+
properties.buildProperties = typedProps.buildProperties;
|
|
151
|
+
}
|
|
152
|
+
if (typedProps.stagingEnvironmentPolicy !== undefined) {
|
|
153
|
+
properties.stagingEnvironmentPolicy = typedProps.stagingEnvironmentPolicy;
|
|
154
|
+
}
|
|
155
|
+
if (typedProps.allowConfigFileUpdates !== undefined) {
|
|
156
|
+
properties.allowConfigFileUpdates = typedProps.allowConfigFileUpdates;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
tags: this.allTags(),
|
|
160
|
+
sku: typedProps.sku || { name: "Free", tier: "Free" },
|
|
161
|
+
properties: properties,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// =============================================================================
|
|
165
|
+
// PUBLIC METHODS FOR STATIC WEB APP OPERATIONS
|
|
166
|
+
// =============================================================================
|
|
167
|
+
/**
|
|
168
|
+
* Get the subscription ID from the Static Web App ID
|
|
169
|
+
* Extracts the subscription ID from the Azure resource ID format
|
|
170
|
+
*/
|
|
171
|
+
get subscriptionId() {
|
|
172
|
+
const idParts = this.id.split("/");
|
|
173
|
+
const subscriptionIndex = idParts.indexOf("subscriptions");
|
|
174
|
+
if (subscriptionIndex !== -1 && subscriptionIndex + 1 < idParts.length) {
|
|
175
|
+
return idParts[subscriptionIndex + 1];
|
|
176
|
+
}
|
|
177
|
+
throw new Error("Unable to extract subscription ID from Static Web App ID");
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the full resource identifier for use in other Azure resources
|
|
181
|
+
* Alias for the id property
|
|
182
|
+
*/
|
|
183
|
+
get resourceId() {
|
|
184
|
+
return this.id;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the default hostname of the Static Web App
|
|
188
|
+
* Returns the Terraform interpolation string for the default hostname
|
|
189
|
+
*/
|
|
190
|
+
get defaultHostname() {
|
|
191
|
+
return `\${${this.terraformResource.fqn}.output.properties.defaultHostname}`;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Add a tag to the Static Web App
|
|
195
|
+
* Note: This modifies the construct props but requires a new deployment to take effect
|
|
196
|
+
*/
|
|
197
|
+
addTag(key, value) {
|
|
198
|
+
if (!this.props.tags) {
|
|
199
|
+
this.props.tags = {};
|
|
200
|
+
}
|
|
201
|
+
this.props.tags[key] = value;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Remove a tag from the Static Web App
|
|
205
|
+
* Note: This modifies the construct props but requires a new deployment to take effect
|
|
206
|
+
*/
|
|
207
|
+
removeTag(key) {
|
|
208
|
+
if (this.props.tags && this.props.tags[key]) {
|
|
209
|
+
delete this.props.tags[key];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// =============================================================================
|
|
213
|
+
// PRIVATE HELPER METHODS
|
|
214
|
+
// =============================================================================
|
|
215
|
+
/**
|
|
216
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
217
|
+
*/
|
|
218
|
+
_applyIgnoreChanges() {
|
|
219
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
220
|
+
this.terraformResource.addOverride("lifecycle", {
|
|
221
|
+
ignore_changes: this.props.ignoreChanges,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.StaticWebApp = StaticWebApp;
|
|
227
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
228
|
+
StaticWebApp[_a] = { fqn: "@microsoft/terraform-cdk-constructs.StaticWebApp", version: "1.10.0" };
|
|
229
|
+
(() => {
|
|
230
|
+
azapi_resource_1.AzapiResource.registerSchemas(static_web_app_schemas_1.STATIC_WEB_APP_TYPE, static_web_app_schemas_1.ALL_STATIC_WEB_APP_VERSIONS);
|
|
231
|
+
})();
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXdlYi1hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtc3RhdGljd2ViYXBwL2xpYi9zdGF0aWMtd2ViLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILCtCQUErQjtBQUUvQixxRUFHa0M7QUFDbEMsOEVBR21EO0FBc0luRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsOEJBQWE7SUFvQjdDOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDhCQUE4QjtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGdDQUFnQztTQUM5QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFlBQVk7WUFDbkQsV0FBVyxFQUFFLG9DQUFvQztTQUNsRCxD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QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBaE5ILG9DQWlOQzs7O0FBaE5DO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLDRDQUFtQixFQUNuQixvREFBMkIsQ0FDNUIsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZSBTdGF0aWMgV2ViIEFwcCBpbXBsZW1lbnRhdGlvbiB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB1bmlmaWVkIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBTdGF0aWMgV2ViIEFwcHMgdGhhdFxuICogYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eVxuICogdHJhbnNmb3JtYXRpb24gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjItMDMtMDEgKEFjdGl2ZSlcbiAqIC0gMjAyMy0xMi0wMSAoQWN0aXZlKVxuICogLSAyMDI0LTA0LTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfU1RBVElDX1dFQl9BUFBfVkVSU0lPTlMsXG4gIFNUQVRJQ19XRUJfQVBQX1RZUEUsXG59IGZyb20gXCIuL3N0YXRpYy13ZWItYXBwLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogU0tVIGNvbmZpZ3VyYXRpb24gZm9yIFN0YXRpYyBXZWIgQXBwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljV2ViQXBwU2t1IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFNLVVxuICAgKiBAZXhhbXBsZSBcIkZyZWVcIiwgXCJTdGFuZGFyZFwiXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpZXIgb2YgdGhlIFNLVVxuICAgKiBAZXhhbXBsZSBcIkZyZWVcIiwgXCJTdGFuZGFyZFwiXG4gICAqL1xuICByZWFkb25seSB0aWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBTdGF0aWMgV2ViIEFwcFxuICpcbiAqIFRoZXNlIHByb3BlcnRpZXMgZHJpdmUgdGhlIGJ1aWxkIHBpcGVsaW5lIHRoYXQgdGhlIFN0YXRpYyBXZWIgQXBwXG4gKiB1c2VzIHdoZW4gaW50ZWdyYXRlZCB3aXRoIGEgc291cmNlIGNvbnRyb2wgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNXZWJBcHBCdWlsZFByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGFwcCBjb2RlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeVxuICAgKiBAZXhhbXBsZSBcIi9cIiwgXCJzcmNcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwTG9jYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBBenVyZSBGdW5jdGlvbnMgQVBJIGNvZGUgd2l0aGluIHRoZSByZXBvc2l0b3J5XG4gICAqIEBleGFtcGxlIFwiYXBpXCJcbiAgICovXG4gIHJlYWRvbmx5IGFwaUxvY2F0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgYnVpbGQgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBhcHAgbG9jYXRpb25cbiAgICogQGV4YW1wbGUgXCJidWlsZFwiLCBcImRpc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TG9jYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY3VzdG9tIGNvbW1hbmQgdG8gcnVuIGR1cmluZyBkZXBsb3ltZW50IG9mIHRoZSBzdGF0aWMgY29udGVudCBhcHBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBjb21tYW5kIHRvIHJ1biBkdXJpbmcgZGVwbG95bWVudCBvZiB0aGUgQXp1cmUgRnVuY3Rpb25zIEFQSSBhcHBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBpQnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTa2lwIEdpdGh1YiBBY3Rpb24gd29ya2Zsb3cgZ2VuZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcEdpdGh1YkFjdGlvbldvcmtmbG93R2VuZXJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb24gc2VjcmV0IG5hbWUgb3ZlcnJpZGVcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkFjdGlvblNlY3JldE5hbWVPdmVycmlkZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgQXp1cmUgU3RhdGljIFdlYiBBcHBcbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFN0YXRpYyBXZWIgQXBwIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNXZWJBcHBQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBTS1Ugb2YgdGhlIHN0YXRpYyB3ZWIgYXBwXG4gICAqIEBkZWZhdWx0VmFsdWUgeyBuYW1lOiBcIkZyZWVcIiwgdGllcjogXCJGcmVlXCIgfVxuICAgKi9cbiAgcmVhZG9ubHkgc2t1PzogU3RhdGljV2ViQXBwU2t1O1xuXG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnlcbiAgICogT3B0aW9uYWwgLSBpZiBub3QgcHJvdmlkZWQsIHRoZSBTdGF0aWMgV2ViIEFwcCBpcyBjcmVhdGVkIHdpdGhvdXQgc291cmNlIGNvbnRyb2wgaW50ZWdyYXRpb25cbiAgICogQGV4YW1wbGUgXCJodHRwczovL2dpdGh1Yi5jb20vbXktb3JnL215LXJlcG9cIlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVVybD86IHN0cmluZztcblxuICAvKipcbiAgICogU291cmNlIGNvZGUgYnJhbmNoIGluIHRoZSByZXBvc2l0b3J5XG4gICAqIEBleGFtcGxlIFwibWFpblwiXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRva2VuIHVzZWQgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgdGhlIHJlcG9zaXRvcnlcbiAgICogRm9yIEdpdEh1YiwgdGhpcyBpcyBhIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiB3aXRoIGByZXBvYCBzY29wZVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUcmVhdCB0aGlzIHZhbHVlIGFzIGEgc2VjcmV0LiBQcmVmZXIgcGFzc2luZyBpdCB2aWEgVGVycmFmb3JtIHZhcmlhYmxlc1xuICAgKiBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcmF0aGVyIHRoYW4gaGFyZC1jb2RpbmcgaXQuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdGF0aWMgd2ViIGFwcFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRQcm9wZXJ0aWVzPzogU3RhdGljV2ViQXBwQnVpbGRQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHN0YWdpbmcgZW52aXJvbm1lbnRzIGFyZSBhbGxvd2VkXG4gICAqIEBleGFtcGxlIFwiRW5hYmxlZFwiLCBcIkRpc2FibGVkXCJcbiAgICogQGRlZmF1bHRWYWx1ZSBcIkVuYWJsZWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2luZ0Vudmlyb25tZW50UG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNvbmZpZ3VyYXRpb24gZmlsZSB1cGRhdGVzIGFyZSBhbGxvd2VkXG4gICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDb25maWdGaWxlVXBkYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGdyb3VwIElEIHdoZXJlIHRoZSBTdGF0aWMgV2ViIEFwcCB3aWxsIGJlIGNyZWF0ZWRcbiAgICogT3B0aW9uYWwgLSB3aWxsIHVzZSB0aGUgc3Vic2NyaXB0aW9uIHNjb3BlIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIFVzZWZ1bCBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBleHRlcm5hbGx5IG1hbmFnZWRcbiAgICpcbiAgICogQGV4YW1wbGUgW1widGFnc1wiLCBcImJvZHkucHJvcGVydGllcy5yZXBvc2l0b3J5VG9rZW5cIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBTdGF0aWMgV2ViIEFwcFxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZVxuICogYE1pY3Jvc29mdC5XZWIvc3RhdGljU2l0ZXNgIEF6dXJlIHJlc291cmNlIHR5cGUuIEl0IGF1dG9tYXRpY2FsbHkgaGFuZGxlc1xuICogdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlXG4gKiBleHBvc2luZyB0aGUgbW9zdCBjb21tb25seSB1c2VkIFN0YXRpYyBXZWIgQXBwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgRnJlZS10aWVyIFN0YXRpYyBXZWIgQXBwIHdpdGhvdXQgc291cmNlIGNvbnRyb2wgaW50ZWdyYXRpb246XG4gKiBjb25zdCBzd2EgPSBuZXcgU3RhdGljV2ViQXBwKHRoaXMsIFwic3dhXCIsIHtcbiAqICAgbmFtZTogXCJteS1zdGF0aWMtd2ViLWFwcFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXMyXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdGFuZGFyZCBTdGF0aWMgV2ViIEFwcCB3aXRoIEdpdEh1YiBpbnRlZ3JhdGlvbjpcbiAqIGNvbnN0IHN3YSA9IG5ldyBTdGF0aWNXZWJBcHAodGhpcywgXCJzd2FcIiwge1xuICogICBuYW1lOiBcIm15LXN0YXRpYy13ZWItYXBwXCIsXG4gKiAgIGxvY2F0aW9uOiBcImVhc3R1czJcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBza3U6IHtcbiAqICAgICBuYW1lOiBcIlN0YW5kYXJkXCIsXG4gKiAgICAgdGllcjogXCJTdGFuZGFyZFwiLFxuICogICB9LFxuICogICByZXBvc2l0b3J5VXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9teS1vcmcvbXktcmVwb1wiLFxuICogICBicmFuY2g6IFwibWFpblwiLFxuICogICBidWlsZFByb3BlcnRpZXM6IHtcbiAqICAgICBhcHBMb2NhdGlvbjogXCIvXCIsXG4gKiAgICAgYXBpTG9jYXRpb246IFwiYXBpXCIsXG4gKiAgICAgb3V0cHV0TG9jYXRpb246IFwiZGlzdFwiLFxuICogICB9LFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YXRpY1dlYkFwcCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgU1RBVElDX1dFQl9BUFBfVFlQRSxcbiAgICAgIEFMTF9TVEFUSUNfV0VCX0FQUF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIFN0YXRpYyBXZWIgQXBwIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFN0YXRpY1dlYkFwcFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnc091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdEhvc3RuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgU3RhdGljIFdlYiBBcHAgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0YXRpYyBXZWIgQXBwXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhdGljV2ViQXBwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgU3RhdGljIFdlYiBBcHBcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBTdGF0aWMgV2ViIEFwcFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJsb2NhdGlvblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBTdGF0aWMgV2ViIEFwcFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWdzT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0udGFnc31gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHRhZ3MgYXNzaWduZWQgdG8gdGhlIFN0YXRpYyBXZWIgQXBwXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlZmF1bHRIb3N0bmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJkZWZhdWx0X2hvc3RuYW1lXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmRlZmF1bHRIb3N0bmFtZX1gLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZGVmYXVsdCBob3N0bmFtZSBvZiB0aGUgU3RhdGljIFdlYiBBcHBcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIGNvbnNpc3RlbnQgbmFtaW5nIGNvbnZlbnRpb25cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibG9jYXRpb25cIik7XG4gICAgdGhpcy50YWdzT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwidGFnc1wiKTtcbiAgICB0aGlzLmRlZmF1bHRIb3N0bmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImRlZmF1bHRfaG9zdG5hbWVcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDQtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBTdGF0aWMgV2ViIEFwcHNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU1RBVElDX1dFQl9BUFBfVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBsb2NhdGlvbiBpcyByZXF1aXJlZCBmb3IgU3RhdGljIFdlYiBBcHBzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSB0aGVcbiAgICogYE1pY3Jvc29mdC5XZWIvc3RhdGljU2l0ZXNgIEF6dXJlIFJFU1QgQVBJLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgU3RhdGljV2ViQXBwUHJvcHM7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICBpZiAodHlwZWRQcm9wcy5yZXBvc2l0b3J5VXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXMucmVwb3NpdG9yeVVybCA9IHR5cGVkUHJvcHMucmVwb3NpdG9yeVVybDtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuYnJhbmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXMuYnJhbmNoID0gdHlwZWRQcm9wcy5icmFuY2g7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnJlcG9zaXRvcnlUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnJlcG9zaXRvcnlUb2tlbiA9IHR5cGVkUHJvcHMucmVwb3NpdG9yeVRva2VuO1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5idWlsZFByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcy5idWlsZFByb3BlcnRpZXMgPSB0eXBlZFByb3BzLmJ1aWxkUHJvcGVydGllcztcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc3RhZ2luZ0Vudmlyb25tZW50UG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXMuc3RhZ2luZ0Vudmlyb25tZW50UG9saWN5ID0gdHlwZWRQcm9wcy5zdGFnaW5nRW52aXJvbm1lbnRQb2xpY3k7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLmFsbG93Q29uZmlnRmlsZVVwZGF0ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcy5hbGxvd0NvbmZpZ0ZpbGVVcGRhdGVzID0gdHlwZWRQcm9wcy5hbGxvd0NvbmZpZ0ZpbGVVcGRhdGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0YWdzOiB0aGlzLmFsbFRhZ3MoKSxcbiAgICAgIHNrdTogdHlwZWRQcm9wcy5za3UgfHwgeyBuYW1lOiBcIkZyZWVcIiwgdGllcjogXCJGcmVlXCIgfSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBTVEFUSUMgV0VCIEFQUCBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3Vic2NyaXB0aW9uIElEIGZyb20gdGhlIFN0YXRpYyBXZWIgQXBwIElEXG4gICAqIEV4dHJhY3RzIHRoZSBzdWJzY3JpcHRpb24gSUQgZnJvbSB0aGUgQXp1cmUgcmVzb3VyY2UgSUQgZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1YnNjcmlwdGlvbklkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaWRQYXJ0cyA9IHRoaXMuaWQuc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZGV4ID0gaWRQYXJ0cy5pbmRleE9mKFwic3Vic2NyaXB0aW9uc1wiKTtcbiAgICBpZiAoc3Vic2NyaXB0aW9uSW5kZXggIT09IC0xICYmIHN1YnNjcmlwdGlvbkluZGV4ICsgMSA8IGlkUGFydHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaWRQYXJ0c1tzdWJzY3JpcHRpb25JbmRleCArIDFdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBzdWJzY3JpcHRpb24gSUQgZnJvbSBTdGF0aWMgV2ViIEFwcCBJRFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdXNlIGluIG90aGVyIEF6dXJlIHJlc291cmNlc1xuICAgKiBBbGlhcyBmb3IgdGhlIGlkIHByb3BlcnR5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgaG9zdG5hbWUgb2YgdGhlIFN0YXRpYyBXZWIgQXBwXG4gICAqIFJldHVybnMgdGhlIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgaG9zdG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdEhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZGVmYXVsdEhvc3RuYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFnIHRvIHRoZSBTdGF0aWMgV2ViIEFwcFxuICAgKiBOb3RlOiBUaGlzIG1vZGlmaWVzIHRoZSBjb25zdHJ1Y3QgcHJvcHMgYnV0IHJlcXVpcmVzIGEgbmV3IGRlcGxveW1lbnQgdG8gdGFrZSBlZmZlY3RcbiAgICovXG4gIHB1YmxpYyBhZGRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMudGFncykge1xuICAgICAgKHRoaXMucHJvcHMgYXMgYW55KS50YWdzID0ge307XG4gICAgfVxuICAgIHRoaXMucHJvcHMudGFncyFba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhZyBmcm9tIHRoZSBTdGF0aWMgV2ViIEFwcFxuICAgKiBOb3RlOiBUaGlzIG1vZGlmaWVzIHRoZSBjb25zdHJ1Y3QgcHJvcHMgYnV0IHJlcXVpcmVzIGEgbmV3IGRlcGxveW1lbnQgdG8gdGFrZSBlZmZlY3RcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy50YWdzICYmIHRoaXMucHJvcHMudGFnc1trZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wcy50YWdzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGlnbm9yZSBjaGFuZ2VzIGxpZmVjeWNsZSBydWxlcyBpZiBzcGVjaWZpZWQgaW4gcHJvcHNcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5SWdub3JlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzICYmIHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmFkZE92ZXJyaWRlKFwibGlmZWN5Y2xlXCIsIHtcbiAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Static Web App
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates basic usage of the StaticWebApp 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,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration test for Azure Static Web App
|
|
4
|
+
*
|
|
5
|
+
* This test demonstrates basic usage of the StaticWebApp 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 azure_resourcegroup_1 = require("../../azure-resourcegroup");
|
|
14
|
+
const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
|
|
15
|
+
const testing_1 = require("../../testing");
|
|
16
|
+
const static_web_app_1 = require("../lib/static-web-app");
|
|
17
|
+
/**
|
|
18
|
+
* Example stack demonstrating Static Web App usage
|
|
19
|
+
*/
|
|
20
|
+
class StaticWebAppExampleStack 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 resource group (Static Web Apps location is independent of the RG location)
|
|
26
|
+
const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
|
|
27
|
+
name: "staticwebapp-example-rg",
|
|
28
|
+
location: "eastus2",
|
|
29
|
+
tags: {
|
|
30
|
+
environment: "example",
|
|
31
|
+
purpose: "integration-test",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
// Example 1: Basic Free-tier Static Web App without source control integration
|
|
35
|
+
new static_web_app_1.StaticWebApp(this, "basic-static-web-app", {
|
|
36
|
+
name: "swa-basic-example",
|
|
37
|
+
// Static Web Apps have a constrained set of supported regions
|
|
38
|
+
location: "eastus2",
|
|
39
|
+
resourceGroupId: resourceGroup.id,
|
|
40
|
+
sku: {
|
|
41
|
+
name: "Free",
|
|
42
|
+
tier: "Free",
|
|
43
|
+
},
|
|
44
|
+
tags: {
|
|
45
|
+
example: "basic",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
// Example 2: Static Web App with a specific API version pin
|
|
49
|
+
new static_web_app_1.StaticWebApp(this, "versioned-static-web-app", {
|
|
50
|
+
name: "swa-versioned-example",
|
|
51
|
+
location: "eastus2",
|
|
52
|
+
resourceGroupId: resourceGroup.id,
|
|
53
|
+
sku: {
|
|
54
|
+
name: "Free",
|
|
55
|
+
tier: "Free",
|
|
56
|
+
},
|
|
57
|
+
apiVersion: "2023-12-01",
|
|
58
|
+
tags: {
|
|
59
|
+
example: "versioned",
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
describe("Static Web App Integration Test", () => {
|
|
65
|
+
it("should deploy, validate idempotency, and cleanup static web app resources", () => {
|
|
66
|
+
const app = cdktf_1.Testing.app();
|
|
67
|
+
const stack = new StaticWebAppExampleStack(app, "test-static-web-app");
|
|
68
|
+
const synthesized = cdktf_1.Testing.fullSynth(stack);
|
|
69
|
+
// This will:
|
|
70
|
+
// 1. Run terraform apply to deploy resources
|
|
71
|
+
// 2. Run terraform plan to check idempotency (no changes expected)
|
|
72
|
+
// 3. Run terraform destroy to cleanup resources
|
|
73
|
+
(0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
|
|
74
|
+
}, 600000); // 10 minute timeout for deployment and cleanup
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXdlYi1hcHAuaW50ZWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtc3RhdGljd2ViYXBwL3Rlc3Qvc3RhdGljLXdlYi1hcHAuaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBRUgsaUNBQWdEO0FBRWhELDJDQUF5QztBQUN6QyxtRUFBMEQ7QUFDMUQsa0ZBQW9GO0FBQ3BGLDJDQUE4RDtBQUM5RCwwREFBcUQ7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLHdCQUF5QixTQUFRLHNCQUFjO0lBQ25ELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLHVGQUF1RjtRQUN2RixNQUFNLGFBQWEsR0FBRyxJQUFJLG1DQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUMxRCxJQUFJLEVBQUUseUJBQXlCO1lBQy9CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsU0FBUztnQkFDdEIsT0FBTyxFQUFFLGtCQUFrQjthQUM1QjtTQUNGLENBQUMsQ0FBQztRQUVILCtFQUErRTtRQUMvRSxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzdDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsOERBQThEO1lBQzlELFFBQVEsRUFBRSxTQUFTO1lBQ25CLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLE1BQU07YUFDYjtZQUNELElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ2pELElBQUksRUFBRSx1QkFBdUI7WUFDN0IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ2pDLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0QsVUFBVSxFQUFFLFlBQVk7WUFDeEIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxXQUFXO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxFQUFFLENBQUMsMkVBQTJFLEVBQUUsR0FBRyxFQUFFO1FBQ25GLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsYUFBYTtRQUNiLDZDQUE2QztRQUM3QyxtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELElBQUEsdUNBQTZCLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0NBQStDO0FBQzdELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciBBenVyZSBTdGF0aWMgV2ViIEFwcFxuICpcbiAqIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIFN0YXRpY1dlYkFwcCBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZywgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLXJlc291cmNlZ3JvdXBcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBTdGF0aWNXZWJBcHAgfSBmcm9tIFwiLi4vbGliL3N0YXRpYy13ZWItYXBwXCI7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIFN0YXRpYyBXZWIgQXBwIHVzYWdlXG4gKi9cbmNsYXNzIFN0YXRpY1dlYkFwcEV4YW1wbGVTdGFjayBleHRlbmRzIFRlcnJhZm9ybVN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBDb25maWd1cmUgQVpBUEkgcHJvdmlkZXJcbiAgICBuZXcgQXphcGlQcm92aWRlcih0aGlzLCBcImF6YXBpXCIsIHt9KTtcblxuICAgIC8vIENyZWF0ZSBhIHJlc291cmNlIGdyb3VwIChTdGF0aWMgV2ViIEFwcHMgbG9jYXRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIFJHIGxvY2F0aW9uKVxuICAgIGNvbnN0IHJlc291cmNlR3JvdXAgPSBuZXcgUmVzb3VyY2VHcm91cCh0aGlzLCBcImV4YW1wbGUtcmdcIiwge1xuICAgICAgbmFtZTogXCJzdGF0aWN3ZWJhcHAtZXhhbXBsZS1yZ1wiLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzMlwiLFxuICAgICAgdGFnczoge1xuICAgICAgICBlbnZpcm9ubWVudDogXCJleGFtcGxlXCIsXG4gICAgICAgIHB1cnBvc2U6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgMTogQmFzaWMgRnJlZS10aWVyIFN0YXRpYyBXZWIgQXBwIHdpdGhvdXQgc291cmNlIGNvbnRyb2wgaW50ZWdyYXRpb25cbiAgICBuZXcgU3RhdGljV2ViQXBwKHRoaXMsIFwiYmFzaWMtc3RhdGljLXdlYi1hcHBcIiwge1xuICAgICAgbmFtZTogXCJzd2EtYmFzaWMtZXhhbXBsZVwiLFxuICAgICAgLy8gU3RhdGljIFdlYiBBcHBzIGhhdmUgYSBjb25zdHJhaW5lZCBzZXQgb2Ygc3VwcG9ydGVkIHJlZ2lvbnNcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1czJcIixcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHNrdToge1xuICAgICAgICBuYW1lOiBcIkZyZWVcIixcbiAgICAgICAgdGllcjogXCJGcmVlXCIsXG4gICAgICB9LFxuICAgICAgdGFnczoge1xuICAgICAgICBleGFtcGxlOiBcImJhc2ljXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAyOiBTdGF0aWMgV2ViIEFwcCB3aXRoIGEgc3BlY2lmaWMgQVBJIHZlcnNpb24gcGluXG4gICAgbmV3IFN0YXRpY1dlYkFwcCh0aGlzLCBcInZlcnNpb25lZC1zdGF0aWMtd2ViLWFwcFwiLCB7XG4gICAgICBuYW1lOiBcInN3YS12ZXJzaW9uZWQtZXhhbXBsZVwiLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzMlwiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgc2t1OiB7XG4gICAgICAgIG5hbWU6IFwiRnJlZVwiLFxuICAgICAgICB0aWVyOiBcIkZyZWVcIixcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMTItMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJ2ZXJzaW9uZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJTdGF0aWMgV2ViIEFwcCBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgc3RhdGljIHdlYiBhcHAgcmVzb3VyY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YXRpY1dlYkFwcEV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1zdGF0aWMtd2ViLWFwcFwiKTtcbiAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTtcblxuICAgIC8vIFRoaXMgd2lsbDpcbiAgICAvLyAxLiBSdW4gdGVycmFmb3JtIGFwcGx5IHRvIGRlcGxveSByZXNvdXJjZXNcbiAgICAvLyAyLiBSdW4gdGVycmFmb3JtIHBsYW4gdG8gY2hlY2sgaWRlbXBvdGVuY3kgKG5vIGNoYW5nZXMgZXhwZWN0ZWQpXG4gICAgLy8gMy4gUnVuIHRlcnJhZm9ybSBkZXN0cm95IHRvIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgVGVycmFmb3JtQXBwbHlDaGVja0FuZERlc3Ryb3koc3ludGhlc2l6ZWQpO1xuICB9LCA2MDAwMDApOyAvLyAxMCBtaW51dGUgdGltZW91dCBmb3IgZGVwbG95bWVudCBhbmQgY2xlYW51cFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Azure Static Web App construct
|
|
3
|
+
*
|
|
4
|
+
* Tests cover:
|
|
5
|
+
* - Resource type validation
|
|
6
|
+
* - API version support (2022-03-01, 2023-12-01, 2024-04-01)
|
|
7
|
+
* - Basic creation scenarios
|
|
8
|
+
* - SKU configurations (Free, Standard)
|
|
9
|
+
* - Source control integration
|
|
10
|
+
* - Build properties
|
|
11
|
+
* - Tag management
|
|
12
|
+
* - Output properties
|
|
13
|
+
* - Ignore changes
|
|
14
|
+
*/
|
|
15
|
+
export {};
|