@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,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Azure Function App implementation using VersionedAzapiResource framework
|
|
3
|
+
*
|
|
4
|
+
* This class provides a single, version-aware implementation for Azure Function App
|
|
5
|
+
* that automatically handles version management, schema validation, and property transformation
|
|
6
|
+
* across all supported API versions.
|
|
7
|
+
*
|
|
8
|
+
* Supported API Versions:
|
|
9
|
+
* - 2024-04-01 (Maintenance)
|
|
10
|
+
* - 2024-11-01 (Active, Latest)
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Automatic latest version resolution when no version is specified
|
|
14
|
+
* - Explicit version pinning for stability requirements
|
|
15
|
+
* - Schema-driven validation and transformation
|
|
16
|
+
* - JSII compliance for multi-language support
|
|
17
|
+
*/
|
|
18
|
+
import * as cdktf from "cdktf";
|
|
19
|
+
import { Construct } from "constructs";
|
|
20
|
+
import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
|
|
21
|
+
import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
|
|
22
|
+
/**
|
|
23
|
+
* App setting for Function App configuration
|
|
24
|
+
*/
|
|
25
|
+
export interface FunctionAppSetting {
|
|
26
|
+
/**
|
|
27
|
+
* The name of the application setting
|
|
28
|
+
*/
|
|
29
|
+
readonly name: string;
|
|
30
|
+
/**
|
|
31
|
+
* The value of the application setting
|
|
32
|
+
*/
|
|
33
|
+
readonly value: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Site configuration for Function App
|
|
37
|
+
*/
|
|
38
|
+
export interface FunctionAppSiteConfig {
|
|
39
|
+
/**
|
|
40
|
+
* Application settings for the Function App
|
|
41
|
+
*/
|
|
42
|
+
readonly appSettings?: FunctionAppSetting[];
|
|
43
|
+
/**
|
|
44
|
+
* The runtime stack (e.g., "node", "dotnet", "python", "java")
|
|
45
|
+
*/
|
|
46
|
+
readonly linuxFxVersion?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Whether Always On is enabled
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
readonly alwaysOn?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* The minimum TLS version
|
|
54
|
+
* @default "1.2"
|
|
55
|
+
*/
|
|
56
|
+
readonly minTlsVersion?: string;
|
|
57
|
+
/**
|
|
58
|
+
* Whether HTTP 2.0 is enabled
|
|
59
|
+
* @default false
|
|
60
|
+
*/
|
|
61
|
+
readonly http20Enabled?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* The .NET Framework version
|
|
64
|
+
*/
|
|
65
|
+
readonly netFrameworkVersion?: string;
|
|
66
|
+
/**
|
|
67
|
+
* CORS configuration
|
|
68
|
+
*/
|
|
69
|
+
readonly cors?: FunctionAppCorsSettings;
|
|
70
|
+
/**
|
|
71
|
+
* Whether FTP state is allowed
|
|
72
|
+
* @default "Disabled"
|
|
73
|
+
*/
|
|
74
|
+
readonly ftpsState?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Whether use 32-bit worker process
|
|
77
|
+
* @default false
|
|
78
|
+
*/
|
|
79
|
+
readonly use32BitWorkerProcess?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* CORS settings for Function App
|
|
83
|
+
*/
|
|
84
|
+
export interface FunctionAppCorsSettings {
|
|
85
|
+
/**
|
|
86
|
+
* Allowed origins
|
|
87
|
+
*/
|
|
88
|
+
readonly allowedOrigins?: string[];
|
|
89
|
+
/**
|
|
90
|
+
* Whether credentials are supported
|
|
91
|
+
* @default false
|
|
92
|
+
*/
|
|
93
|
+
readonly supportCredentials?: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Identity configuration for Function App
|
|
97
|
+
*/
|
|
98
|
+
export interface FunctionAppIdentity {
|
|
99
|
+
/**
|
|
100
|
+
* The type of identity (SystemAssigned, UserAssigned, SystemAssigned,UserAssigned)
|
|
101
|
+
*/
|
|
102
|
+
readonly type: string;
|
|
103
|
+
/**
|
|
104
|
+
* User assigned identity IDs
|
|
105
|
+
*/
|
|
106
|
+
readonly userAssignedIdentities?: {
|
|
107
|
+
[key: string]: any;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Storage authentication configuration for Flex Consumption deployment
|
|
112
|
+
*/
|
|
113
|
+
export interface FunctionAppStorageAuthentication {
|
|
114
|
+
/**
|
|
115
|
+
* The authentication type (SystemAssignedIdentity, UserAssignedIdentity, StorageAccountConnectionString)
|
|
116
|
+
*/
|
|
117
|
+
readonly type: string;
|
|
118
|
+
/**
|
|
119
|
+
* User assigned identity resource ID (when type is UserAssignedIdentity)
|
|
120
|
+
*/
|
|
121
|
+
readonly userAssignedIdentityResourceId?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Storage account connection string setting name (when type is StorageAccountConnectionString)
|
|
124
|
+
*/
|
|
125
|
+
readonly storageAccountConnectionStringName?: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Deployment storage configuration for Flex Consumption plans
|
|
129
|
+
*/
|
|
130
|
+
export interface FunctionAppDeploymentStorage {
|
|
131
|
+
/**
|
|
132
|
+
* The storage type (blobContainer)
|
|
133
|
+
*/
|
|
134
|
+
readonly type: string;
|
|
135
|
+
/**
|
|
136
|
+
* The blob container URL for deployment artifacts
|
|
137
|
+
*/
|
|
138
|
+
readonly value: string;
|
|
139
|
+
/**
|
|
140
|
+
* Authentication configuration for the storage
|
|
141
|
+
*/
|
|
142
|
+
readonly authentication: FunctionAppStorageAuthentication;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Deployment configuration for Flex Consumption Function Apps
|
|
146
|
+
*/
|
|
147
|
+
export interface FunctionAppDeployment {
|
|
148
|
+
/**
|
|
149
|
+
* Storage configuration for deployment artifacts
|
|
150
|
+
*/
|
|
151
|
+
readonly storage: FunctionAppDeploymentStorage;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Runtime configuration for Flex Consumption Function Apps
|
|
155
|
+
*/
|
|
156
|
+
export interface FunctionAppRuntime {
|
|
157
|
+
/**
|
|
158
|
+
* The runtime name (node, python, dotnet-isolated, java, powershell)
|
|
159
|
+
*/
|
|
160
|
+
readonly name: string;
|
|
161
|
+
/**
|
|
162
|
+
* The runtime version
|
|
163
|
+
*/
|
|
164
|
+
readonly version: string;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Scale and concurrency configuration for Flex Consumption Function Apps
|
|
168
|
+
*/
|
|
169
|
+
export interface FunctionAppScaleAndConcurrency {
|
|
170
|
+
/**
|
|
171
|
+
* Maximum number of instances
|
|
172
|
+
* @default 100
|
|
173
|
+
*/
|
|
174
|
+
readonly maximumInstanceCount?: number;
|
|
175
|
+
/**
|
|
176
|
+
* Instance memory in MB (512, 1024, 2048, 4096)
|
|
177
|
+
* @default 2048
|
|
178
|
+
*/
|
|
179
|
+
readonly instanceMemoryMB?: number;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Function App configuration for Flex Consumption plans
|
|
183
|
+
*
|
|
184
|
+
* Required when using FlexConsumption SKU (FC1) App Service Plans.
|
|
185
|
+
* Configures deployment storage, runtime, and scaling.
|
|
186
|
+
*/
|
|
187
|
+
export interface FunctionAppConfig {
|
|
188
|
+
/**
|
|
189
|
+
* Deployment configuration with storage for artifacts
|
|
190
|
+
*/
|
|
191
|
+
readonly deployment: FunctionAppDeployment;
|
|
192
|
+
/**
|
|
193
|
+
* Runtime configuration (name and version)
|
|
194
|
+
*/
|
|
195
|
+
readonly runtime: FunctionAppRuntime;
|
|
196
|
+
/**
|
|
197
|
+
* Scale and concurrency settings
|
|
198
|
+
*/
|
|
199
|
+
readonly scaleAndConcurrency?: FunctionAppScaleAndConcurrency;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Properties for the unified Azure Function App
|
|
203
|
+
*
|
|
204
|
+
* Extends AzapiResourceProps with Function App specific properties
|
|
205
|
+
*/
|
|
206
|
+
export interface FunctionAppProps extends AzapiResourceProps {
|
|
207
|
+
/**
|
|
208
|
+
* The kind of Function App
|
|
209
|
+
* @default "functionapp"
|
|
210
|
+
* @example "functionapp" for Windows, "functionapp,linux" for Linux
|
|
211
|
+
*/
|
|
212
|
+
readonly kind?: string;
|
|
213
|
+
/**
|
|
214
|
+
* The resource ID of the App Service Plan hosting this Function App
|
|
215
|
+
*/
|
|
216
|
+
readonly serverFarmId: string;
|
|
217
|
+
/**
|
|
218
|
+
* Whether the Function App only accepts HTTPS traffic
|
|
219
|
+
* @default true
|
|
220
|
+
*/
|
|
221
|
+
readonly httpsOnly?: boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Whether client affinity (session affinity) is enabled
|
|
224
|
+
* @default false
|
|
225
|
+
*/
|
|
226
|
+
readonly clientAffinityEnabled?: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Whether the Function App is enabled
|
|
229
|
+
* @default true
|
|
230
|
+
*/
|
|
231
|
+
readonly enabled?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Site configuration including app settings and runtime
|
|
234
|
+
*/
|
|
235
|
+
readonly siteConfig?: FunctionAppSiteConfig;
|
|
236
|
+
/**
|
|
237
|
+
* Managed identity configuration
|
|
238
|
+
*/
|
|
239
|
+
readonly identity?: FunctionAppIdentity;
|
|
240
|
+
/**
|
|
241
|
+
* Whether public network access is enabled
|
|
242
|
+
* @default "Enabled"
|
|
243
|
+
*/
|
|
244
|
+
readonly publicNetworkAccess?: string;
|
|
245
|
+
/**
|
|
246
|
+
* Subnet resource ID for VNet integration
|
|
247
|
+
*/
|
|
248
|
+
readonly virtualNetworkSubnetId?: string;
|
|
249
|
+
/**
|
|
250
|
+
* Whether client certificate authentication is enabled
|
|
251
|
+
* @default false
|
|
252
|
+
*/
|
|
253
|
+
readonly clientCertEnabled?: boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Client certificate mode (Required, Optional, OptionalInteractiveUser)
|
|
256
|
+
*/
|
|
257
|
+
readonly clientCertMode?: string;
|
|
258
|
+
/**
|
|
259
|
+
* Function App configuration for Flex Consumption plans
|
|
260
|
+
*
|
|
261
|
+
* Required when using FlexConsumption SKU (FC1) App Service Plans.
|
|
262
|
+
* Configures deployment storage, runtime, and scaling.
|
|
263
|
+
*/
|
|
264
|
+
readonly functionAppConfig?: FunctionAppConfig;
|
|
265
|
+
/**
|
|
266
|
+
* The lifecycle rules to ignore changes
|
|
267
|
+
* @example ["tags"]
|
|
268
|
+
*/
|
|
269
|
+
readonly ignoreChanges?: string[];
|
|
270
|
+
/**
|
|
271
|
+
* Resource group ID where the Function App will be created
|
|
272
|
+
*/
|
|
273
|
+
readonly resourceGroupId?: string;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Unified Azure Function App implementation
|
|
277
|
+
*
|
|
278
|
+
* This class provides a single, version-aware implementation that replaces all
|
|
279
|
+
* version-specific Function App classes. It automatically handles version
|
|
280
|
+
* resolution, schema validation, and property transformation while maintaining
|
|
281
|
+
* full backward compatibility.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* // Basic usage with automatic version resolution:
|
|
285
|
+
* const functionApp = new FunctionApp(this, "func", {
|
|
286
|
+
* name: "my-function-app",
|
|
287
|
+
* location: "eastus",
|
|
288
|
+
* resourceGroupId: resourceGroup.id,
|
|
289
|
+
* serverFarmId: appServicePlan.id,
|
|
290
|
+
* kind: "functionapp,linux",
|
|
291
|
+
* siteConfig: {
|
|
292
|
+
* appSettings: [
|
|
293
|
+
* { name: "FUNCTIONS_WORKER_RUNTIME", value: "node" },
|
|
294
|
+
* { name: "FUNCTIONS_EXTENSION_VERSION", value: "~4" },
|
|
295
|
+
* ],
|
|
296
|
+
* linuxFxVersion: "NODE|20",
|
|
297
|
+
* },
|
|
298
|
+
* });
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* // Function App with managed identity:
|
|
302
|
+
* const functionApp = new FunctionApp(this, "func", {
|
|
303
|
+
* name: "my-function-app",
|
|
304
|
+
* location: "eastus",
|
|
305
|
+
* resourceGroupId: resourceGroup.id,
|
|
306
|
+
* serverFarmId: appServicePlan.id,
|
|
307
|
+
* kind: "functionapp,linux",
|
|
308
|
+
* identity: {
|
|
309
|
+
* type: "SystemAssigned",
|
|
310
|
+
* },
|
|
311
|
+
* httpsOnly: true,
|
|
312
|
+
* });
|
|
313
|
+
*
|
|
314
|
+
* @stability stable
|
|
315
|
+
*/
|
|
316
|
+
export declare class FunctionApp extends AzapiResource {
|
|
317
|
+
readonly props: FunctionAppProps;
|
|
318
|
+
readonly idOutput: cdktf.TerraformOutput;
|
|
319
|
+
readonly locationOutput: cdktf.TerraformOutput;
|
|
320
|
+
readonly nameOutput: cdktf.TerraformOutput;
|
|
321
|
+
readonly tagsOutput: cdktf.TerraformOutput;
|
|
322
|
+
readonly defaultHostNameOutput: cdktf.TerraformOutput;
|
|
323
|
+
/**
|
|
324
|
+
* Creates a new Azure Function App using the VersionedAzapiResource framework
|
|
325
|
+
*
|
|
326
|
+
* @param scope - The scope in which to define this construct
|
|
327
|
+
* @param id - The unique identifier for this instance
|
|
328
|
+
* @param props - Configuration properties for the Function App
|
|
329
|
+
*/
|
|
330
|
+
constructor(scope: Construct, id: string, props: FunctionAppProps);
|
|
331
|
+
/**
|
|
332
|
+
* Gets the default API version to use when no explicit version is specified
|
|
333
|
+
*/
|
|
334
|
+
protected defaultVersion(): string;
|
|
335
|
+
/**
|
|
336
|
+
* Gets the Azure resource type for Function Apps
|
|
337
|
+
*/
|
|
338
|
+
protected resourceType(): string;
|
|
339
|
+
/**
|
|
340
|
+
* Gets the API schema for the resolved version
|
|
341
|
+
*/
|
|
342
|
+
protected apiSchema(): ApiSchema;
|
|
343
|
+
/**
|
|
344
|
+
* Indicates that location is required for Function Apps
|
|
345
|
+
*/
|
|
346
|
+
protected requiresLocation(): boolean;
|
|
347
|
+
/**
|
|
348
|
+
* Creates the resource body for the Azure API call
|
|
349
|
+
*/
|
|
350
|
+
protected createResourceBody(props: any): any;
|
|
351
|
+
/**
|
|
352
|
+
* Get the default hostname of the Function App
|
|
353
|
+
*/
|
|
354
|
+
get defaultHostName(): string;
|
|
355
|
+
/**
|
|
356
|
+
* Add a tag to the Function App
|
|
357
|
+
*/
|
|
358
|
+
addTag(key: string, value: string): void;
|
|
359
|
+
/**
|
|
360
|
+
* Remove a tag from the Function App
|
|
361
|
+
*/
|
|
362
|
+
removeTag(key: string): void;
|
|
363
|
+
/**
|
|
364
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
365
|
+
*/
|
|
366
|
+
private _applyIgnoreChanges;
|
|
367
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.FunctionApp = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Unified Azure Function App implementation using VersionedAzapiResource framework
|
|
8
|
+
*
|
|
9
|
+
* This class provides a single, version-aware implementation for Azure Function App
|
|
10
|
+
* that automatically handles version management, schema validation, and property transformation
|
|
11
|
+
* across all supported API versions.
|
|
12
|
+
*
|
|
13
|
+
* Supported API Versions:
|
|
14
|
+
* - 2024-04-01 (Maintenance)
|
|
15
|
+
* - 2024-11-01 (Active, Latest)
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Automatic latest version resolution when no version is specified
|
|
19
|
+
* - Explicit version pinning for stability requirements
|
|
20
|
+
* - Schema-driven validation and transformation
|
|
21
|
+
* - JSII compliance for multi-language support
|
|
22
|
+
*/
|
|
23
|
+
const cdktf = require("cdktf");
|
|
24
|
+
const function_app_schemas_1 = require("./function-app-schemas");
|
|
25
|
+
const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
|
|
26
|
+
/**
|
|
27
|
+
* Unified Azure Function App implementation
|
|
28
|
+
*
|
|
29
|
+
* This class provides a single, version-aware implementation that replaces all
|
|
30
|
+
* version-specific Function App classes. It automatically handles version
|
|
31
|
+
* resolution, schema validation, and property transformation while maintaining
|
|
32
|
+
* full backward compatibility.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // Basic usage with automatic version resolution:
|
|
36
|
+
* const functionApp = new FunctionApp(this, "func", {
|
|
37
|
+
* name: "my-function-app",
|
|
38
|
+
* location: "eastus",
|
|
39
|
+
* resourceGroupId: resourceGroup.id,
|
|
40
|
+
* serverFarmId: appServicePlan.id,
|
|
41
|
+
* kind: "functionapp,linux",
|
|
42
|
+
* siteConfig: {
|
|
43
|
+
* appSettings: [
|
|
44
|
+
* { name: "FUNCTIONS_WORKER_RUNTIME", value: "node" },
|
|
45
|
+
* { name: "FUNCTIONS_EXTENSION_VERSION", value: "~4" },
|
|
46
|
+
* ],
|
|
47
|
+
* linuxFxVersion: "NODE|20",
|
|
48
|
+
* },
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // Function App with managed identity:
|
|
53
|
+
* const functionApp = new FunctionApp(this, "func", {
|
|
54
|
+
* name: "my-function-app",
|
|
55
|
+
* location: "eastus",
|
|
56
|
+
* resourceGroupId: resourceGroup.id,
|
|
57
|
+
* serverFarmId: appServicePlan.id,
|
|
58
|
+
* kind: "functionapp,linux",
|
|
59
|
+
* identity: {
|
|
60
|
+
* type: "SystemAssigned",
|
|
61
|
+
* },
|
|
62
|
+
* httpsOnly: true,
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* @stability stable
|
|
66
|
+
*/
|
|
67
|
+
class FunctionApp extends azapi_resource_1.AzapiResource {
|
|
68
|
+
/**
|
|
69
|
+
* Creates a new Azure Function App using the VersionedAzapiResource framework
|
|
70
|
+
*
|
|
71
|
+
* @param scope - The scope in which to define this construct
|
|
72
|
+
* @param id - The unique identifier for this instance
|
|
73
|
+
* @param props - Configuration properties for the Function App
|
|
74
|
+
*/
|
|
75
|
+
constructor(scope, id, props) {
|
|
76
|
+
super(scope, id, props);
|
|
77
|
+
this.props = props;
|
|
78
|
+
// Create Terraform outputs
|
|
79
|
+
this.idOutput = new cdktf.TerraformOutput(this, "id", {
|
|
80
|
+
value: this.id,
|
|
81
|
+
description: "The ID of the Function App",
|
|
82
|
+
});
|
|
83
|
+
this.locationOutput = new cdktf.TerraformOutput(this, "location", {
|
|
84
|
+
value: `\${${this.terraformResource.fqn}.location}`,
|
|
85
|
+
description: "The location of the Function App",
|
|
86
|
+
});
|
|
87
|
+
this.nameOutput = new cdktf.TerraformOutput(this, "name", {
|
|
88
|
+
value: `\${${this.terraformResource.fqn}.name}`,
|
|
89
|
+
description: "The name of the Function App",
|
|
90
|
+
});
|
|
91
|
+
this.tagsOutput = new cdktf.TerraformOutput(this, "tags", {
|
|
92
|
+
value: `\${${this.terraformResource.fqn}.tags}`,
|
|
93
|
+
description: "The tags assigned to the Function App",
|
|
94
|
+
});
|
|
95
|
+
this.defaultHostNameOutput = new cdktf.TerraformOutput(this, "default_host_name", {
|
|
96
|
+
value: `\${${this.terraformResource.fqn}.output.properties.defaultHostName}`,
|
|
97
|
+
description: "The default hostname of the Function App",
|
|
98
|
+
});
|
|
99
|
+
// Override logical IDs
|
|
100
|
+
this.idOutput.overrideLogicalId("id");
|
|
101
|
+
this.locationOutput.overrideLogicalId("location");
|
|
102
|
+
this.nameOutput.overrideLogicalId("name");
|
|
103
|
+
this.tagsOutput.overrideLogicalId("tags");
|
|
104
|
+
this.defaultHostNameOutput.overrideLogicalId("default_host_name");
|
|
105
|
+
// Apply ignore changes if specified
|
|
106
|
+
this._applyIgnoreChanges();
|
|
107
|
+
}
|
|
108
|
+
// =============================================================================
|
|
109
|
+
// REQUIRED ABSTRACT METHODS FROM VersionedAzapiResource
|
|
110
|
+
// =============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Gets the default API version to use when no explicit version is specified
|
|
113
|
+
*/
|
|
114
|
+
defaultVersion() {
|
|
115
|
+
return "2024-04-01";
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gets the Azure resource type for Function Apps
|
|
119
|
+
*/
|
|
120
|
+
resourceType() {
|
|
121
|
+
return function_app_schemas_1.FUNCTION_APP_TYPE;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Gets the API schema for the resolved version
|
|
125
|
+
*/
|
|
126
|
+
apiSchema() {
|
|
127
|
+
return this.resolveSchema();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Indicates that location is required for Function Apps
|
|
131
|
+
*/
|
|
132
|
+
requiresLocation() {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Creates the resource body for the Azure API call
|
|
137
|
+
*/
|
|
138
|
+
createResourceBody(props) {
|
|
139
|
+
const typedProps = props;
|
|
140
|
+
const properties = {
|
|
141
|
+
serverFarmId: typedProps.serverFarmId,
|
|
142
|
+
httpsOnly: typedProps.httpsOnly !== undefined ? typedProps.httpsOnly : true,
|
|
143
|
+
clientAffinityEnabled: typedProps.clientAffinityEnabled || false,
|
|
144
|
+
};
|
|
145
|
+
// Add optional properties if specified
|
|
146
|
+
if (typedProps.enabled !== undefined) {
|
|
147
|
+
properties.enabled = typedProps.enabled;
|
|
148
|
+
}
|
|
149
|
+
if (typedProps.siteConfig) {
|
|
150
|
+
properties.siteConfig = typedProps.siteConfig;
|
|
151
|
+
}
|
|
152
|
+
if (typedProps.publicNetworkAccess) {
|
|
153
|
+
properties.publicNetworkAccess = typedProps.publicNetworkAccess;
|
|
154
|
+
}
|
|
155
|
+
if (typedProps.virtualNetworkSubnetId) {
|
|
156
|
+
properties.virtualNetworkSubnetId = typedProps.virtualNetworkSubnetId;
|
|
157
|
+
}
|
|
158
|
+
if (typedProps.clientCertEnabled !== undefined) {
|
|
159
|
+
properties.clientCertEnabled = typedProps.clientCertEnabled;
|
|
160
|
+
}
|
|
161
|
+
if (typedProps.clientCertMode) {
|
|
162
|
+
properties.clientCertMode = typedProps.clientCertMode;
|
|
163
|
+
}
|
|
164
|
+
if (typedProps.functionAppConfig) {
|
|
165
|
+
properties.functionAppConfig = typedProps.functionAppConfig;
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
kind: typedProps.kind || "functionapp",
|
|
169
|
+
tags: this.allTags(),
|
|
170
|
+
properties: properties,
|
|
171
|
+
identity: typedProps.identity,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// =============================================================================
|
|
175
|
+
// PUBLIC METHODS FOR FUNCTION APP OPERATIONS
|
|
176
|
+
// =============================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Get the default hostname of the Function App
|
|
179
|
+
*/
|
|
180
|
+
get defaultHostName() {
|
|
181
|
+
return `\${${this.terraformResource.fqn}.output.properties.defaultHostName}`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Add a tag to the Function App
|
|
185
|
+
*/
|
|
186
|
+
addTag(key, value) {
|
|
187
|
+
if (!this.props.tags) {
|
|
188
|
+
this.props.tags = {};
|
|
189
|
+
}
|
|
190
|
+
this.props.tags[key] = value;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Remove a tag from the Function App
|
|
194
|
+
*/
|
|
195
|
+
removeTag(key) {
|
|
196
|
+
if (this.props.tags && this.props.tags[key]) {
|
|
197
|
+
delete this.props.tags[key];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// =============================================================================
|
|
201
|
+
// PRIVATE HELPER METHODS
|
|
202
|
+
// =============================================================================
|
|
203
|
+
/**
|
|
204
|
+
* Applies ignore changes lifecycle rules if specified in props
|
|
205
|
+
*/
|
|
206
|
+
_applyIgnoreChanges() {
|
|
207
|
+
if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
|
|
208
|
+
this.terraformResource.addOverride("lifecycle", [
|
|
209
|
+
{
|
|
210
|
+
ignore_changes: this.props.ignoreChanges,
|
|
211
|
+
},
|
|
212
|
+
]);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.FunctionApp = FunctionApp;
|
|
217
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
218
|
+
FunctionApp[_a] = { fqn: "@microsoft/terraform-cdk-constructs.FunctionApp", version: "1.10.0" };
|
|
219
|
+
// Static initializer runs once when the class is first loaded
|
|
220
|
+
(() => {
|
|
221
|
+
azapi_resource_1.AzapiResource.registerSchemas(function_app_schemas_1.FUNCTION_APP_TYPE, function_app_schemas_1.ALL_FUNCTION_APP_VERSIONS);
|
|
222
|
+
})();
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWZ1bmN0aW9uYXBwL2xpYi9mdW5jdGlvbi1hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQixpRUFHZ0M7QUFDaEMsOEVBR21EO0FBeVNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUNILE1BQWEsV0FBWSxTQUFRLDhCQUFhO0lBZTVDOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDRCQUE0QjtTQUMxQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFlBQVk7WUFDbkQsV0FBVyxFQUFFLGtDQUFrQztTQUNoRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDhCQUE4QjtTQUM1QyxDQUFD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QyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDOUM7b0JBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtpQkFDekM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFuTUgsa0NBb01DOzs7QUFuTUMsOERBQThEO0FBQzlEO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQUMsd0NBQWlCLEVBQUUsZ0RBQXlCLENBQUMsQ0FBQztBQUM5RSxDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBGdW5jdGlvbiBBcHAgaW1wbGVtZW50YXRpb24gdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBGdW5jdGlvbiBBcHBcbiAqIHRoYXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvblxuICogYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjQtMDQtMDEgKE1haW50ZW5hbmNlKVxuICogLSAyMDI0LTExLTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfRlVOQ1RJT05fQVBQX1ZFUlNJT05TLFxuICBGVU5DVElPTl9BUFBfVFlQRSxcbn0gZnJvbSBcIi4vZnVuY3Rpb24tYXBwLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogQXBwIHNldHRpbmcgZm9yIEZ1bmN0aW9uIEFwcCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25BcHBTZXR0aW5nIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5nXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYXBwbGljYXRpb24gc2V0dGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTaXRlIGNvbmZpZ3VyYXRpb24gZm9yIEZ1bmN0aW9uIEFwcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXBwU2l0ZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIEZ1bmN0aW9uIEFwcFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwU2V0dGluZ3M/OiBGdW5jdGlvbkFwcFNldHRpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgc3RhY2sgKGUuZy4sIFwibm9kZVwiLCBcImRvdG5ldFwiLCBcInB5dGhvblwiLCBcImphdmFcIilcbiAgICovXG4gIHJlYWRvbmx5IGxpbnV4RnhWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIEFsd2F5cyBPbiBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbHdheXNPbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIFRMUyB2ZXJzaW9uXG4gICAqIEBkZWZhdWx0IFwiMS4yXCJcbiAgICovXG4gIHJlYWRvbmx5IG1pblRsc1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSFRUUCAyLjAgaXMgZW5hYmxlZFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cDIwRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIEZyYW1ld29yayB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBuZXRGcmFtZXdvcmtWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDT1JTIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNvcnM/OiBGdW5jdGlvbkFwcENvcnNTZXR0aW5ncztcblxuICAvKipcbiAgICogV2hldGhlciBGVFAgc3RhdGUgaXMgYWxsb3dlZFxuICAgKiBAZGVmYXVsdCBcIkRpc2FibGVkXCJcbiAgICovXG4gIHJlYWRvbmx5IGZ0cHNTdGF0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB1c2UgMzItYml0IHdvcmtlciBwcm9jZXNzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB1c2UzMkJpdFdvcmtlclByb2Nlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENPUlMgc2V0dGluZ3MgZm9yIEZ1bmN0aW9uIEFwcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXBwQ29yc1NldHRpbmdzIHtcbiAgLyoqXG4gICAqIEFsbG93ZWQgb3JpZ2luc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZE9yaWdpbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciBjcmVkZW50aWFscyBhcmUgc3VwcG9ydGVkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0Q3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGNvbmZpZ3VyYXRpb24gZm9yIEZ1bmN0aW9uIEFwcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXBwSWRlbnRpdHkge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgaWRlbnRpdHkgKFN5c3RlbUFzc2lnbmVkLCBVc2VyQXNzaWduZWQsIFN5c3RlbUFzc2lnbmVkLFVzZXJBc3NpZ25lZClcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlciBhc3NpZ25lZCBpZGVudGl0eSBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJBc3NpZ25lZElkZW50aXRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIFN0b3JhZ2UgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgRmxleCBDb25zdW1wdGlvbiBkZXBsb3ltZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25BcHBTdG9yYWdlQXV0aGVudGljYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUgKFN5c3RlbUFzc2lnbmVkSWRlbnRpdHksIFVzZXJBc3NpZ25lZElkZW50aXR5LCBTdG9yYWdlQWNjb3VudENvbm5lY3Rpb25TdHJpbmcpXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgYXNzaWduZWQgaWRlbnRpdHkgcmVzb3VyY2UgSUQgKHdoZW4gdHlwZSBpcyBVc2VyQXNzaWduZWRJZGVudGl0eSlcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJBc3NpZ25lZElkZW50aXR5UmVzb3VyY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIHNldHRpbmcgbmFtZSAod2hlbiB0eXBlIGlzIFN0b3JhZ2VBY2NvdW50Q29ubmVjdGlvblN0cmluZylcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VBY2NvdW50Q29ubmVjdGlvblN0cmluZ05hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVwbG95bWVudCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24gZm9yIEZsZXggQ29uc3VtcHRpb24gcGxhbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkFwcERlcGxveW1lbnRTdG9yYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdG9yYWdlIHR5cGUgKGJsb2JDb250YWluZXIpXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBibG9iIGNvbnRhaW5lciBVUkwgZm9yIGRlcGxveW1lbnQgYXJ0aWZhY3RzXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb246IEZ1bmN0aW9uQXBwU3RvcmFnZUF1dGhlbnRpY2F0aW9uO1xufVxuXG4vKipcbiAqIERlcGxveW1lbnQgY29uZmlndXJhdGlvbiBmb3IgRmxleCBDb25zdW1wdGlvbiBGdW5jdGlvbiBBcHBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25BcHBEZXBsb3ltZW50IHtcbiAgLyoqXG4gICAqIFN0b3JhZ2UgY29uZmlndXJhdGlvbiBmb3IgZGVwbG95bWVudCBhcnRpZmFjdHNcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2U6IEZ1bmN0aW9uQXBwRGVwbG95bWVudFN0b3JhZ2U7XG59XG5cbi8qKlxuICogUnVudGltZSBjb25maWd1cmF0aW9uIGZvciBGbGV4IENvbnN1bXB0aW9uIEZ1bmN0aW9uIEFwcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkFwcFJ1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgbmFtZSAobm9kZSwgcHl0aG9uLCBkb3RuZXQtaXNvbGF0ZWQsIGphdmEsIHBvd2Vyc2hlbGwpXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIHZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTY2FsZSBhbmQgY29uY3VycmVuY3kgY29uZmlndXJhdGlvbiBmb3IgRmxleCBDb25zdW1wdGlvbiBGdW5jdGlvbiBBcHBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25BcHBTY2FsZUFuZENvbmN1cnJlbmN5IHtcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlc1xuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIHJlYWRvbmx5IG1heGltdW1JbnN0YW5jZUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBtZW1vcnkgaW4gTUIgKDUxMiwgMTAyNCwgMjA0OCwgNDA5NilcbiAgICogQGRlZmF1bHQgMjA0OFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VNZW1vcnlNQj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBBcHAgY29uZmlndXJhdGlvbiBmb3IgRmxleCBDb25zdW1wdGlvbiBwbGFuc1xuICpcbiAqIFJlcXVpcmVkIHdoZW4gdXNpbmcgRmxleENvbnN1bXB0aW9uIFNLVSAoRkMxKSBBcHAgU2VydmljZSBQbGFucy5cbiAqIENvbmZpZ3VyZXMgZGVwbG95bWVudCBzdG9yYWdlLCBydW50aW1lLCBhbmQgc2NhbGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkFwcENvbmZpZyB7XG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24gd2l0aCBzdG9yYWdlIGZvciBhcnRpZmFjdHNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnQ6IEZ1bmN0aW9uQXBwRGVwbG95bWVudDtcblxuICAvKipcbiAgICogUnVudGltZSBjb25maWd1cmF0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZTogRnVuY3Rpb25BcHBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBTY2FsZSBhbmQgY29uY3VycmVuY3kgc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IHNjYWxlQW5kQ29uY3VycmVuY3k/OiBGdW5jdGlvbkFwcFNjYWxlQW5kQ29uY3VycmVuY3k7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHVuaWZpZWQgQXp1cmUgRnVuY3Rpb24gQXBwXG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBGdW5jdGlvbiBBcHAgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXBwUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGtpbmQgb2YgRnVuY3Rpb24gQXBwXG4gICAqIEBkZWZhdWx0IFwiZnVuY3Rpb25hcHBcIlxuICAgKiBAZXhhbXBsZSBcImZ1bmN0aW9uYXBwXCIgZm9yIFdpbmRvd3MsIFwiZnVuY3Rpb25hcHAsbGludXhcIiBmb3IgTGludXhcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBJRCBvZiB0aGUgQXBwIFNlcnZpY2UgUGxhbiBob3N0aW5nIHRoaXMgRnVuY3Rpb24gQXBwXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJGYXJtSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgRnVuY3Rpb24gQXBwIG9ubHkgYWNjZXB0cyBIVFRQUyB0cmFmZmljXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBzT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpZW50IGFmZmluaXR5IChzZXNzaW9uIGFmZmluaXR5KSBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjbGllbnRBZmZpbml0eUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBGdW5jdGlvbiBBcHAgaXMgZW5hYmxlZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2l0ZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBhcHAgc2V0dGluZ3MgYW5kIHJ1bnRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHNpdGVDb25maWc/OiBGdW5jdGlvbkFwcFNpdGVDb25maWc7XG5cbiAgLyoqXG4gICAqIE1hbmFnZWQgaWRlbnRpdHkgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHk/OiBGdW5jdGlvbkFwcElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHB1YmxpYyBuZXR3b3JrIGFjY2VzcyBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IFwiRW5hYmxlZFwiXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNOZXR3b3JrQWNjZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJuZXQgcmVzb3VyY2UgSUQgZm9yIFZOZXQgaW50ZWdyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHZpcnR1YWxOZXR3b3JrU3VibmV0SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpZW50IGNlcnRpZmljYXRlIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2xpZW50IGNlcnRpZmljYXRlIG1vZGUgKFJlcXVpcmVkLCBPcHRpb25hbCwgT3B0aW9uYWxJbnRlcmFjdGl2ZVVzZXIpXG4gICAqL1xuICByZWFkb25seSBjbGllbnRDZXJ0TW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogRnVuY3Rpb24gQXBwIGNvbmZpZ3VyYXRpb24gZm9yIEZsZXggQ29uc3VtcHRpb24gcGxhbnNcbiAgICpcbiAgICogUmVxdWlyZWQgd2hlbiB1c2luZyBGbGV4Q29uc3VtcHRpb24gU0tVIChGQzEpIEFwcCBTZXJ2aWNlIFBsYW5zLlxuICAgKiBDb25maWd1cmVzIGRlcGxveW1lbnQgc3RvcmFnZSwgcnVudGltZSwgYW5kIHNjYWxpbmcuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbkFwcENvbmZpZz86IEZ1bmN0aW9uQXBwQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIEBleGFtcGxlIFtcInRhZ3NcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVzb3VyY2UgZ3JvdXAgSUQgd2hlcmUgdGhlIEZ1bmN0aW9uIEFwcCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXBJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIEZ1bmN0aW9uIEFwcCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gdGhhdCByZXBsYWNlcyBhbGxcbiAqIHZlcnNpb24tc3BlY2lmaWMgRnVuY3Rpb24gQXBwIGNsYXNzZXMuIEl0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uXG4gKiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlIG1haW50YWluaW5nXG4gKiBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbjpcbiAqIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IEZ1bmN0aW9uQXBwKHRoaXMsIFwiZnVuY1wiLCB7XG4gKiAgIG5hbWU6IFwibXktZnVuY3Rpb24tYXBwXCIsXG4gKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICogICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gKiAgIHNlcnZlckZhcm1JZDogYXBwU2VydmljZVBsYW4uaWQsXG4gKiAgIGtpbmQ6IFwiZnVuY3Rpb25hcHAsbGludXhcIixcbiAqICAgc2l0ZUNvbmZpZzoge1xuICogICAgIGFwcFNldHRpbmdzOiBbXG4gKiAgICAgICB7IG5hbWU6IFwiRlVOQ1RJT05TX1dPUktFUl9SVU5USU1FXCIsIHZhbHVlOiBcIm5vZGVcIiB9LFxuICogICAgICAgeyBuYW1lOiBcIkZVTkNUSU9OU19FWFRFTlNJT05fVkVSU0lPTlwiLCB2YWx1ZTogXCJ+NFwiIH0sXG4gKiAgICAgXSxcbiAqICAgICBsaW51eEZ4VmVyc2lvbjogXCJOT0RFfDIwXCIsXG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRnVuY3Rpb24gQXBwIHdpdGggbWFuYWdlZCBpZGVudGl0eTpcbiAqIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IEZ1bmN0aW9uQXBwKHRoaXMsIFwiZnVuY1wiLCB7XG4gKiAgIG5hbWU6IFwibXktZnVuY3Rpb24tYXBwXCIsXG4gKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICogICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gKiAgIHNlcnZlckZhcm1JZDogYXBwU2VydmljZVBsYW4uaWQsXG4gKiAgIGtpbmQ6IFwiZnVuY3Rpb25hcHAsbGludXhcIixcbiAqICAgaWRlbnRpdHk6IHtcbiAqICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCIsXG4gKiAgIH0sXG4gKiAgIGh0dHBzT25seTogdHJ1ZSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkFwcCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICAvLyBTdGF0aWMgaW5pdGlhbGl6ZXIgcnVucyBvbmNlIHdoZW4gdGhlIGNsYXNzIGlzIGZpcnN0IGxvYWRlZFxuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKEZVTkNUSU9OX0FQUF9UWVBFLCBBTExfRlVOQ1RJT05fQVBQX1ZFUlNJT05TKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRnVuY3Rpb25BcHBQcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbG9jYXRpb25PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ3NPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRIb3N0TmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIEZ1bmN0aW9uIEFwcCB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgRnVuY3Rpb24gQXBwXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRnVuY3Rpb25BcHBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgRnVuY3Rpb24gQXBwXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmxvY2F0aW9ufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbG9jYXRpb24gb2YgdGhlIEZ1bmN0aW9uIEFwcFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIEZ1bmN0aW9uIEFwcFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWdzT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0udGFnc31gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHRhZ3MgYXNzaWduZWQgdG8gdGhlIEZ1bmN0aW9uIEFwcFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWZhdWx0SG9zdE5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwiZGVmYXVsdF9ob3N0X25hbWVcIixcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZGVmYXVsdEhvc3ROYW1lfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBkZWZhdWx0IGhvc3RuYW1lIG9mIHRoZSBGdW5jdGlvbiBBcHBcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubG9jYXRpb25PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJsb2NhdGlvblwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5kZWZhdWx0SG9zdE5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJkZWZhdWx0X2hvc3RfbmFtZVwiKTtcblxuICAgIC8vIEFwcGx5IGlnbm9yZSBjaGFuZ2VzIGlmIHNwZWNpZmllZFxuICAgIHRoaXMuX2FwcGx5SWdub3JlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVRVUlSRUQgQUJTVFJBQ1QgTUVUSE9EUyBGUk9NIFZlcnNpb25lZEF6YXBpUmVzb3VyY2VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKi9cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyNC0wNC0wMVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEF6dXJlIHJlc291cmNlIHR5cGUgZm9yIEZ1bmN0aW9uIEFwcHNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRlVOQ1RJT05fQVBQX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgbG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIEZ1bmN0aW9uIEFwcHNcbiAgICovXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRnVuY3Rpb25BcHBQcm9wcztcblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICBzZXJ2ZXJGYXJtSWQ6IHR5cGVkUHJvcHMuc2VydmVyRmFybUlkLFxuICAgICAgaHR0cHNPbmx5OlxuICAgICAgICB0eXBlZFByb3BzLmh0dHBzT25seSAhPT0gdW5kZWZpbmVkID8gdHlwZWRQcm9wcy5odHRwc09ubHkgOiB0cnVlLFxuICAgICAgY2xpZW50QWZmaW5pdHlFbmFibGVkOiB0eXBlZFByb3BzLmNsaWVudEFmZmluaXR5RW5hYmxlZCB8fCBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIG9wdGlvbmFsIHByb3BlcnRpZXMgaWYgc3BlY2lmaWVkXG4gICAgaWYgKHR5cGVkUHJvcHMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLmVuYWJsZWQgPSB0eXBlZFByb3BzLmVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMuc2l0ZUNvbmZpZykge1xuICAgICAgcHJvcGVydGllcy5zaXRlQ29uZmlnID0gdHlwZWRQcm9wcy5zaXRlQ29uZmlnO1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLnB1YmxpY05ldHdvcmtBY2Nlc3MpIHtcbiAgICAgIHByb3BlcnRpZXMucHVibGljTmV0d29ya0FjY2VzcyA9IHR5cGVkUHJvcHMucHVibGljTmV0d29ya0FjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy52aXJ0dWFsTmV0d29ya1N1Ym5ldElkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnZpcnR1YWxOZXR3b3JrU3VibmV0SWQgPSB0eXBlZFByb3BzLnZpcnR1YWxOZXR3b3JrU3VibmV0SWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMuY2xpZW50Q2VydEVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcy5jbGllbnRDZXJ0RW5hYmxlZCA9IHR5cGVkUHJvcHMuY2xpZW50Q2VydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMuY2xpZW50Q2VydE1vZGUpIHtcbiAgICAgIHByb3BlcnRpZXMuY2xpZW50Q2VydE1vZGUgPSB0eXBlZFByb3BzLmNsaWVudENlcnRNb2RlO1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLmZ1bmN0aW9uQXBwQ29uZmlnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmZ1bmN0aW9uQXBwQ29uZmlnID0gdHlwZWRQcm9wcy5mdW5jdGlvbkFwcENvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAga2luZDogdHlwZWRQcm9wcy5raW5kIHx8IFwiZnVuY3Rpb25hcHBcIixcbiAgICAgIHRhZ3M6IHRoaXMuYWxsVGFncygpLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICAgIGlkZW50aXR5OiB0eXBlZFByb3BzLmlkZW50aXR5LFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgRlVOQ1RJT04gQVBQIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGhvc3RuYW1lIG9mIHRoZSBGdW5jdGlvbiBBcHBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdEhvc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZGVmYXVsdEhvc3ROYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFnIHRvIHRoZSBGdW5jdGlvbiBBcHBcbiAgICovXG4gIHB1YmxpYyBhZGRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMudGFncykge1xuICAgICAgKHRoaXMucHJvcHMgYXMgYW55KS50YWdzID0ge307XG4gICAgfVxuICAgIHRoaXMucHJvcHMudGFncyFba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhZyBmcm9tIHRoZSBGdW5jdGlvbiBBcHBcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy50YWdzICYmIHRoaXMucHJvcHMudGFnc1trZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wcy50YWdzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGlnbm9yZSBjaGFuZ2VzIGxpZmVjeWNsZSBydWxlcyBpZiBzcGVjaWZpZWQgaW4gcHJvcHNcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5SWdub3JlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzICYmIHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmFkZE92ZXJyaWRlKFwibGlmZWN5Y2xlXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./function-app-schemas"), exports);
|
|
18
|
+
__exportStar(require("./function-app"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtZnVuY3Rpb25hcHAvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBdUM7QUFDdkMsaURBQStCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb24tYXBwLXNjaGVtYXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uLWFwcFwiO1xuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for Azure Function App
|
|
3
|
+
*
|
|
4
|
+
* This test demonstrates usage of the FunctionApp construct
|
|
5
|
+
* and validates deployment, idempotency, and cleanup.
|
|
6
|
+
*
|
|
7
|
+
* Uses Flex Consumption (FC1) plan which does not require
|
|
8
|
+
* traditional App Service VM quota.
|
|
9
|
+
*
|
|
10
|
+
* Run with: npm run integration:nostream
|
|
11
|
+
*/
|
|
12
|
+
import "cdktf/lib/testing/adapters/jest";
|