@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.
Files changed (201) hide show
  1. package/.jsii +60376 -32133
  2. package/API.md +72290 -37038
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-applicationinsights/index.d.ts +7 -0
  7. package/lib/azure-applicationinsights/index.js +24 -0
  8. package/lib/azure-applicationinsights/lib/application-insights-schemas.d.ts +29 -0
  9. package/lib/azure-applicationinsights/lib/application-insights-schemas.js +162 -0
  10. package/lib/azure-applicationinsights/lib/application-insights.d.ts +206 -0
  11. package/lib/azure-applicationinsights/lib/application-insights.js +209 -0
  12. package/lib/azure-applicationinsights/lib/index.d.ts +5 -0
  13. package/lib/azure-applicationinsights/lib/index.js +22 -0
  14. package/lib/azure-applicationinsights/test/application-insights.integ.d.ts +9 -0
  15. package/lib/azure-applicationinsights/test/application-insights.integ.js +84 -0
  16. package/lib/azure-applicationinsights/test/application-insights.spec.d.ts +8 -0
  17. package/lib/azure-applicationinsights/test/application-insights.spec.js +209 -0
  18. package/lib/azure-containerapps/index.d.ts +1 -0
  19. package/lib/azure-containerapps/index.js +18 -0
  20. package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
  21. package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
  22. package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
  23. package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
  24. package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
  25. package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
  26. package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
  27. package/lib/azure-containerapps/lib/container-app.js +320 -0
  28. package/lib/azure-containerapps/lib/index.d.ts +4 -0
  29. package/lib/azure-containerapps/lib/index.js +21 -0
  30. package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
  31. package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
  32. package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
  33. package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
  34. package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
  35. package/lib/azure-containerapps/test/container-app.integ.js +119 -0
  36. package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
  37. package/lib/azure-containerapps/test/container-app.spec.js +839 -0
  38. package/lib/azure-containerregistry/index.d.ts +1 -0
  39. package/lib/azure-containerregistry/index.js +18 -0
  40. package/lib/azure-containerregistry/lib/container-registry-schemas.d.ts +32 -0
  41. package/lib/azure-containerregistry/lib/container-registry-schemas.js +316 -0
  42. package/lib/azure-containerregistry/lib/container-registry.d.ts +330 -0
  43. package/lib/azure-containerregistry/lib/container-registry.js +217 -0
  44. package/lib/azure-containerregistry/lib/index.d.ts +2 -0
  45. package/lib/azure-containerregistry/lib/index.js +19 -0
  46. package/lib/azure-containerregistry/test/container-registry.integ.d.ts +9 -0
  47. package/lib/azure-containerregistry/test/container-registry.integ.js +101 -0
  48. package/lib/azure-containerregistry/test/container-registry.spec.d.ts +4 -0
  49. package/lib/azure-containerregistry/test/container-registry.spec.js +425 -0
  50. package/lib/azure-cosmosdb/index.d.ts +1 -0
  51. package/lib/azure-cosmosdb/index.js +18 -0
  52. package/lib/azure-cosmosdb/lib/cosmos-db-schemas.d.ts +40 -0
  53. package/lib/azure-cosmosdb/lib/cosmos-db-schemas.js +330 -0
  54. package/lib/azure-cosmosdb/lib/cosmos-db.d.ts +290 -0
  55. package/lib/azure-cosmosdb/lib/cosmos-db.js +222 -0
  56. package/lib/azure-cosmosdb/lib/index.d.ts +2 -0
  57. package/lib/azure-cosmosdb/lib/index.js +19 -0
  58. package/lib/azure-cosmosdb/test/cosmos-db.integ.d.ts +9 -0
  59. package/lib/azure-cosmosdb/test/cosmos-db.integ.js +98 -0
  60. package/lib/azure-cosmosdb/test/cosmos-db.spec.d.ts +4 -0
  61. package/lib/azure-cosmosdb/test/cosmos-db.spec.js +339 -0
  62. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  63. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  64. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  65. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  66. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  67. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  68. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  69. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  70. package/lib/azure-dnszone/lib/records/dns-records.js +10 -10
  71. package/lib/azure-functionapp/index.d.ts +1 -0
  72. package/lib/azure-functionapp/index.js +18 -0
  73. package/lib/azure-functionapp/lib/function-app-schemas.d.ts +32 -0
  74. package/lib/azure-functionapp/lib/function-app-schemas.js +303 -0
  75. package/lib/azure-functionapp/lib/function-app.d.ts +367 -0
  76. package/lib/azure-functionapp/lib/function-app.js +223 -0
  77. package/lib/azure-functionapp/lib/index.d.ts +2 -0
  78. package/lib/azure-functionapp/lib/index.js +19 -0
  79. package/lib/azure-functionapp/test/function-app.integ.d.ts +12 -0
  80. package/lib/azure-functionapp/test/function-app.integ.js +134 -0
  81. package/lib/azure-functionapp/test/function-app.spec.d.ts +4 -0
  82. package/lib/azure-functionapp/test/function-app.spec.js +566 -0
  83. package/lib/azure-keyvault/index.d.ts +1 -0
  84. package/lib/azure-keyvault/index.js +18 -0
  85. package/lib/azure-keyvault/lib/index.d.ts +2 -0
  86. package/lib/azure-keyvault/lib/index.js +19 -0
  87. package/lib/azure-keyvault/lib/key-vault-schemas.d.ts +40 -0
  88. package/lib/azure-keyvault/lib/key-vault-schemas.js +312 -0
  89. package/lib/azure-keyvault/lib/key-vault.d.ts +344 -0
  90. package/lib/azure-keyvault/lib/key-vault.js +243 -0
  91. package/lib/azure-keyvault/test/key-vault.integ.d.ts +9 -0
  92. package/lib/azure-keyvault/test/key-vault.integ.js +108 -0
  93. package/lib/azure-keyvault/test/key-vault.spec.d.ts +4 -0
  94. package/lib/azure-keyvault/test/key-vault.spec.js +264 -0
  95. package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
  96. package/lib/azure-loganalyticsworkspace/index.js +23 -0
  97. package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
  98. package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
  99. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
  100. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
  101. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
  102. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
  103. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
  104. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
  105. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
  106. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
  107. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  108. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  109. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  110. package/lib/azure-networkwatcher/index.d.ts +14 -0
  111. package/lib/azure-networkwatcher/index.js +31 -0
  112. package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
  113. package/lib/azure-networkwatcher/lib/index.js +22 -0
  114. package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
  115. package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
  116. package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
  117. package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
  118. package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
  119. package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
  120. package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
  121. package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
  122. package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
  123. package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
  124. package/lib/azure-policysetdefinition/index.d.ts +10 -0
  125. package/lib/azure-policysetdefinition/index.js +27 -0
  126. package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
  127. package/lib/azure-policysetdefinition/lib/index.js +22 -0
  128. package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
  129. package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
  130. package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
  131. package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
  132. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
  133. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
  134. package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
  135. package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
  136. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  137. package/lib/azure-privatednszone/lib/records/private-dns-records.js +8 -8
  138. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  139. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  140. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  141. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  142. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  143. package/lib/azure-sreagent/index.d.ts +1 -0
  144. package/lib/azure-sreagent/index.js +18 -0
  145. package/lib/azure-sreagent/lib/index.d.ts +2 -0
  146. package/lib/azure-sreagent/lib/index.js +19 -0
  147. package/lib/azure-sreagent/lib/sre-agent-schemas.d.ts +29 -0
  148. package/lib/azure-sreagent/lib/sre-agent-schemas.js +296 -0
  149. package/lib/azure-sreagent/lib/sre-agent.d.ts +208 -0
  150. package/lib/azure-sreagent/lib/sre-agent.js +217 -0
  151. package/lib/azure-sreagent/test/sre-agent.integ.d.ts +9 -0
  152. package/lib/azure-sreagent/test/sre-agent.integ.js +78 -0
  153. package/lib/azure-sreagent/test/sre-agent.spec.d.ts +4 -0
  154. package/lib/azure-sreagent/test/sre-agent.spec.js +216 -0
  155. package/lib/azure-staticwebapp/index.d.ts +1 -0
  156. package/lib/azure-staticwebapp/index.js +18 -0
  157. package/lib/azure-staticwebapp/lib/index.d.ts +2 -0
  158. package/lib/azure-staticwebapp/lib/index.js +19 -0
  159. package/lib/azure-staticwebapp/lib/static-web-app-schemas.d.ts +40 -0
  160. package/lib/azure-staticwebapp/lib/static-web-app-schemas.js +236 -0
  161. package/lib/azure-staticwebapp/lib/static-web-app.d.ts +242 -0
  162. package/lib/azure-staticwebapp/lib/static-web-app.js +232 -0
  163. package/lib/azure-staticwebapp/test/static-web-app.integ.d.ts +9 -0
  164. package/lib/azure-staticwebapp/test/static-web-app.integ.js +76 -0
  165. package/lib/azure-staticwebapp/test/static-web-app.spec.d.ts +15 -0
  166. package/lib/azure-staticwebapp/test/static-web-app.spec.js +293 -0
  167. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  168. package/lib/azure-subnet/lib/subnet.js +1 -1
  169. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  170. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  171. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
  172. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
  173. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
  174. package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
  175. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
  176. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  177. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
  178. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
  179. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  180. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  181. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  182. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  183. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  184. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
  185. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  186. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  187. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  188. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  189. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  190. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  191. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  192. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  193. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  194. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  195. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  196. package/lib/index.d.ts +25 -0
  197. package/lib/index.js +27 -2
  198. package/lib/testing/index.js +2 -2
  199. package/lib/testing/lib/cleanup.js +1 -1
  200. package/lib/testing/lib/metadata.js +1 -1
  201. 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 {};