@drunk-pulumi/azure-components 0.0.6

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 (181) hide show
  1. package/PulumiPlugin.yaml +1 -0
  2. package/README.md +1 -0
  3. package/ResourceBuilder.d.ts +54 -0
  4. package/ResourceBuilder.js +71 -0
  5. package/aks/AzKubernetes.d.ts +55 -0
  6. package/aks/AzKubernetes.js +288 -0
  7. package/aks/ContainerRegistry.d.ts +19 -0
  8. package/aks/ContainerRegistry.js +119 -0
  9. package/aks/helpers.d.ts +6 -0
  10. package/aks/helpers.js +52 -0
  11. package/aks/index.d.ts +3 -0
  12. package/aks/index.js +43 -0
  13. package/app/AppCert.d.ts +15 -0
  14. package/app/AppCert.js +74 -0
  15. package/app/AppConfig.d.ts +18 -0
  16. package/app/AppConfig.js +124 -0
  17. package/app/AppService.d.ts +69 -0
  18. package/app/AppService.js +122 -0
  19. package/app/IoTHub.d.ts +15 -0
  20. package/app/IoTHub.js +80 -0
  21. package/app/LogicApp.d.ts +19 -0
  22. package/app/LogicApp.js +77 -0
  23. package/app/SignalR.d.ts +45 -0
  24. package/app/SignalR.js +125 -0
  25. package/app/index.d.ts +6 -0
  26. package/app/index.js +23 -0
  27. package/azAd/AppRegistration.d.ts +52 -0
  28. package/azAd/AppRegistration.js +165 -0
  29. package/azAd/AzRole.d.ts +14 -0
  30. package/azAd/AzRole.js +72 -0
  31. package/azAd/CustomRoles.d.ts +10 -0
  32. package/azAd/CustomRoles.js +73 -0
  33. package/azAd/GroupRole.d.ts +29 -0
  34. package/azAd/GroupRole.js +107 -0
  35. package/azAd/RoleAssignment.d.ts +15 -0
  36. package/azAd/RoleAssignment.js +63 -0
  37. package/azAd/UserAssignedIdentity.d.ts +17 -0
  38. package/azAd/UserAssignedIdentity.js +76 -0
  39. package/azAd/helpers/graphBuiltIn.d.ts +14 -0
  40. package/azAd/helpers/graphBuiltIn.js +5134 -0
  41. package/azAd/helpers/index.d.ts +3 -0
  42. package/azAd/helpers/index.js +39 -0
  43. package/azAd/helpers/rolesBuiltIn.d.ts +90 -0
  44. package/azAd/helpers/rolesBuiltIn.js +18601 -0
  45. package/azAd/helpers/rsRoleDefinition.d.ts +62 -0
  46. package/azAd/helpers/rsRoleDefinition.js +120 -0
  47. package/azAd/index.d.ts +7 -0
  48. package/azAd/index.js +24 -0
  49. package/base/BaseComponent.d.ts +53 -0
  50. package/base/BaseComponent.js +98 -0
  51. package/base/BaseResourceComponent.d.ts +108 -0
  52. package/base/BaseResourceComponent.js +180 -0
  53. package/base/helpers.d.ts +12 -0
  54. package/base/helpers.js +29 -0
  55. package/base/index.d.ts +3 -0
  56. package/base/index.js +43 -0
  57. package/common/PGPGenerator.d.ts +26 -0
  58. package/common/PGPGenerator.js +72 -0
  59. package/common/RandomPassword.d.ts +21 -0
  60. package/common/RandomPassword.js +84 -0
  61. package/common/RandomString.d.ts +20 -0
  62. package/common/RandomString.js +74 -0
  63. package/common/ResourceLocker.d.ts +9 -0
  64. package/common/ResourceLocker.js +52 -0
  65. package/common/RsGroup.d.ts +20 -0
  66. package/common/RsGroup.js +85 -0
  67. package/common/SshGenerator.d.ts +17 -0
  68. package/common/SshGenerator.js +66 -0
  69. package/common/index.d.ts +5 -0
  70. package/common/index.js +22 -0
  71. package/database/AzSql.d.ts +71 -0
  72. package/database/AzSql.js +283 -0
  73. package/database/MySql.d.ts +35 -0
  74. package/database/MySql.js +181 -0
  75. package/database/Postgres.d.ts +32 -0
  76. package/database/Postgres.js +171 -0
  77. package/database/Redis.d.ts +26 -0
  78. package/database/Redis.js +125 -0
  79. package/database/helpers.d.ts +7 -0
  80. package/database/helpers.js +52 -0
  81. package/database/index.d.ts +5 -0
  82. package/database/index.js +45 -0
  83. package/helpers/Location/LocationBuiltIn.d.ts +6 -0
  84. package/helpers/Location/LocationBuiltIn.js +493 -0
  85. package/helpers/Location/index.d.ts +3 -0
  86. package/helpers/Location/index.js +25 -0
  87. package/helpers/autoTags.d.ts +1 -0
  88. package/helpers/autoTags.js +27 -0
  89. package/helpers/azureEnv.d.ts +21 -0
  90. package/helpers/azureEnv.js +102 -0
  91. package/helpers/configHelper.d.ts +5 -0
  92. package/helpers/configHelper.js +54 -0
  93. package/helpers/index.d.ts +4 -0
  94. package/helpers/index.js +41 -0
  95. package/helpers/rsHelpers.d.ts +18 -0
  96. package/helpers/rsHelpers.js +92 -0
  97. package/helpers/stackEnv.d.ts +4 -0
  98. package/helpers/stackEnv.js +54 -0
  99. package/index.d.ts +14 -0
  100. package/index.js +53 -0
  101. package/logs/Logs.d.ts +48 -0
  102. package/logs/Logs.js +154 -0
  103. package/logs/helpers.d.ts +1 -0
  104. package/logs/helpers.js +38 -0
  105. package/logs/index.d.ts +1 -0
  106. package/logs/index.js +18 -0
  107. package/package.json +34 -0
  108. package/services/Automation.d.ts +16 -0
  109. package/services/Automation.js +85 -0
  110. package/services/AzSearch.d.ts +20 -0
  111. package/services/AzSearch.js +113 -0
  112. package/services/ServiceBus.d.ts +42 -0
  113. package/services/ServiceBus.js +256 -0
  114. package/services/index.d.ts +3 -0
  115. package/services/index.js +20 -0
  116. package/storage/StorageAccount.d.ts +53 -0
  117. package/storage/StorageAccount.js +261 -0
  118. package/storage/helpers.d.ts +24 -0
  119. package/storage/helpers.js +89 -0
  120. package/storage/index.d.ts +2 -0
  121. package/storage/index.js +42 -0
  122. package/types.d.ts +125 -0
  123. package/types.js +3 -0
  124. package/vault/EncryptionKey.d.ts +21 -0
  125. package/vault/EncryptionKey.js +73 -0
  126. package/vault/KeyVault.d.ts +31 -0
  127. package/vault/KeyVault.js +110 -0
  128. package/vault/VaultSecret.d.ts +23 -0
  129. package/vault/VaultSecret.js +72 -0
  130. package/vault/VaultSecrets.d.ts +25 -0
  131. package/vault/VaultSecrets.js +31 -0
  132. package/vault/helpers.d.ts +1 -0
  133. package/vault/helpers.js +13 -0
  134. package/vault/index.d.ts +5 -0
  135. package/vault/index.js +45 -0
  136. package/vm/DiskEncryptionSet.d.ts +16 -0
  137. package/vm/DiskEncryptionSet.js +74 -0
  138. package/vm/VirtualMachine.d.ts +45 -0
  139. package/vm/VirtualMachine.js +192 -0
  140. package/vm/helpers.d.ts +16 -0
  141. package/vm/helpers.js +15 -0
  142. package/vm/index.d.ts +3 -0
  143. package/vm/index.js +43 -0
  144. package/vnet/AzCdn.d.ts +44 -0
  145. package/vnet/AzCdn.js +276 -0
  146. package/vnet/Basion.d.ts +19 -0
  147. package/vnet/Basion.js +78 -0
  148. package/vnet/DnsZone.d.ts +36 -0
  149. package/vnet/DnsZone.js +113 -0
  150. package/vnet/Firewall.d.ts +53 -0
  151. package/vnet/Firewall.js +136 -0
  152. package/vnet/FirewallPolicies/FirewallPolicyBuilder.d.ts +18 -0
  153. package/vnet/FirewallPolicies/FirewallPolicyBuilder.js +91 -0
  154. package/vnet/FirewallPolicies/commonPolicies.d.ts +10 -0
  155. package/vnet/FirewallPolicies/commonPolicies.js +55 -0
  156. package/vnet/FirewallPolicies/index.d.ts +0 -0
  157. package/vnet/FirewallPolicies/index.js +2 -0
  158. package/vnet/IpAddresses.d.ts +36 -0
  159. package/vnet/IpAddresses.js +74 -0
  160. package/vnet/NetworkPeering.d.ts +21 -0
  161. package/vnet/NetworkPeering.js +85 -0
  162. package/vnet/PrivateDnsZone.d.ts +38 -0
  163. package/vnet/PrivateDnsZone.js +111 -0
  164. package/vnet/PrivateEndpoint.d.ts +43 -0
  165. package/vnet/PrivateEndpoint.js +181 -0
  166. package/vnet/RouteTable.d.ts +22 -0
  167. package/vnet/RouteTable.js +75 -0
  168. package/vnet/VirtualNetwork.d.ts +99 -0
  169. package/vnet/VirtualNetwork.js +311 -0
  170. package/vnet/VpnGateway.d.ts +18 -0
  171. package/vnet/VpnGateway.js +90 -0
  172. package/vnet/helpers.d.ts +16 -0
  173. package/vnet/helpers.js +47 -0
  174. package/vnet/index.d.ts +13 -0
  175. package/vnet/index.js +53 -0
  176. package/vnet/securityRules/SecurityRuleBuilder.d.ts +12 -0
  177. package/vnet/securityRules/SecurityRuleBuilder.js +55 -0
  178. package/vnet/securityRules/commonRules.d.ts +9 -0
  179. package/vnet/securityRules/commonRules.js +94 -0
  180. package/vnet/securityRules/index.d.ts +2 -0
  181. package/vnet/securityRules/index.js +19 -0
@@ -0,0 +1,62 @@
1
+ import * as types from '../../types';
2
+ export type RsRoleDefinitionType = Record<types.GroupRoleTypes, string[]>;
3
+ declare const rsRoles: {
4
+ rsGroup: {
5
+ admin: string[];
6
+ contributor: string[];
7
+ readOnly: string[];
8
+ };
9
+ aks: {
10
+ readOnly: string[];
11
+ contributor: string[];
12
+ admin: string[];
13
+ };
14
+ iotHub: {
15
+ readOnly: string[];
16
+ contributor: string[];
17
+ admin: string[];
18
+ };
19
+ keyVault: {
20
+ readOnly: string[];
21
+ contributor: string[];
22
+ admin: string[];
23
+ };
24
+ storage: {
25
+ readOnly: string[];
26
+ contributor: string[];
27
+ admin: string[];
28
+ };
29
+ containerRegistry: {
30
+ readOnly: string[];
31
+ contributor: string[];
32
+ admin: string[];
33
+ };
34
+ appConfig: {
35
+ readOnly: string[];
36
+ contributor: string[];
37
+ admin: never[];
38
+ };
39
+ serviceBus: {
40
+ readOnly: string[];
41
+ contributor: string[];
42
+ admin: string[];
43
+ };
44
+ signalR: {
45
+ readOnly: string[];
46
+ contributor: string[];
47
+ admin: string[];
48
+ };
49
+ redis: {
50
+ readOnly: never[];
51
+ contributor: string[];
52
+ admin: never[];
53
+ };
54
+ };
55
+ export type RsRoleDefinitionObject = {
56
+ [K in keyof typeof rsRoles]: RsRoleDefinitionType & {
57
+ getReadOnly: () => RsRoleDefinitionType;
58
+ getContributor: () => RsRoleDefinitionType;
59
+ };
60
+ };
61
+ export declare const rsRoleDefinitions: RsRoleDefinitionObject;
62
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rsRoleDefinitions = void 0;
4
+ const rsRoles = {
5
+ rsGroup: {
6
+ admin: ['Owner'],
7
+ contributor: ['Contributor'],
8
+ readOnly: ['Reader'],
9
+ },
10
+ aks: {
11
+ readOnly: ['Azure Kubernetes Service RBAC Reader', 'Azure Kubernetes Service Cluster User Role'],
12
+ contributor: ['Azure Kubernetes Service RBAC Writer', 'Azure Kubernetes Service Cluster User Role'],
13
+ admin: ['Azure Kubernetes Service RBAC Cluster Admin'],
14
+ },
15
+ iotHub: {
16
+ readOnly: ['IoT Hub Data Reader'],
17
+ contributor: ['IoT Hub Data Contributor'],
18
+ admin: ['IoT Hub Registry Contributor', 'IoT Hub Twin Contributor'],
19
+ },
20
+ keyVault: {
21
+ readOnly: [
22
+ 'Key Vault Crypto Service Encryption User',
23
+ 'Key Vault Crypto Service Release User',
24
+ 'Key Vault Secrets User',
25
+ 'Key Vault Crypto User',
26
+ 'Key Vault Certificate User',
27
+ 'Key Vault Reader',
28
+ ],
29
+ contributor: [
30
+ 'Key Vault Certificates Officer',
31
+ 'Key Vault Crypto Officer',
32
+ 'Key Vault Secrets Officer',
33
+ 'Key Vault Contributor',
34
+ ],
35
+ admin: ['Key Vault Administrator', 'Key Vault Data Access Administrator'],
36
+ },
37
+ storage: {
38
+ readOnly: [
39
+ 'Storage Blob Data Reader',
40
+ 'Storage File Data SMB Share Reader',
41
+ 'Storage Queue Data Reader',
42
+ 'Storage Table Data Reader',
43
+ ],
44
+ contributor: [
45
+ 'Storage Account Backup Contributor',
46
+ 'Storage Account Contributor',
47
+ 'Storage Account Encryption Scope Contributor Role',
48
+ 'Storage Blob Data Contributor',
49
+ 'Storage File Data Privileged Reader',
50
+ 'Storage File Data SMB Share Contributor',
51
+ 'Storage File Data SMB Share Elevated Contributor',
52
+ 'Storage Queue Data Contributor',
53
+ 'Storage Queue Data Message Processor',
54
+ 'Storage Queue Data Message Sender',
55
+ 'Storage Table Data Contributor',
56
+ ],
57
+ admin: [
58
+ 'Storage Account Key Operator Service Role',
59
+ 'Storage Blob Data Owner',
60
+ 'Storage File Data Privileged Contributor',
61
+ ],
62
+ },
63
+ containerRegistry: {
64
+ readOnly: [
65
+ //'ACR Registry Catalog Lister',
66
+ 'ACR Repository Reader',
67
+ 'AcrQuarantineReader',
68
+ //'AcrPull',
69
+ ],
70
+ contributor: [
71
+ 'AcrImageSigner',
72
+ 'AcrPull',
73
+ 'AcrPush',
74
+ //'ACR Repository Contributor',
75
+ //'ACR Repository Writer',
76
+ //'AcrQuarantineWriter',
77
+ ],
78
+ admin: ['AcrDelete'],
79
+ },
80
+ appConfig: {
81
+ readOnly: ['App Configuration Data Reader'],
82
+ contributor: ['App Configuration Data Owner'],
83
+ admin: [],
84
+ },
85
+ serviceBus: {
86
+ readOnly: ['Azure Service Bus Data Receiver'],
87
+ contributor: ['Azure Service Bus Data Sender'],
88
+ admin: ['Azure Service Bus Data Owner'],
89
+ },
90
+ signalR: {
91
+ readOnly: ['SignalR REST API Reader'],
92
+ contributor: ['SignalR App Server'],
93
+ admin: ['SignalR REST API Owner'],
94
+ },
95
+ redis: {
96
+ readOnly: [],
97
+ contributor: ['Redis Cache Contributor'],
98
+ admin: [],
99
+ },
100
+ };
101
+ function getRsRoleDefinitions() {
102
+ return Object.entries(rsRoles).reduce((acc, [key, roles]) => {
103
+ acc[key] = {
104
+ ...roles,
105
+ getReadOnly: () => ({
106
+ admin: [],
107
+ contributor: [],
108
+ readOnly: roles.readOnly,
109
+ }),
110
+ getContributor: () => ({
111
+ admin: [],
112
+ contributor: roles.contributor,
113
+ readOnly: roles.readOnly,
114
+ }),
115
+ };
116
+ return acc;
117
+ }, {});
118
+ }
119
+ exports.rsRoleDefinitions = getRsRoleDefinitions();
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNSb2xlRGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hekFkL2hlbHBlcnMvcnNSb2xlRGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxNQUFNLE9BQU8sR0FBRztJQUNkLE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUNoQixXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDNUIsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO0tBQ3JCO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsUUFBUSxFQUFFLENBQUMsc0NBQXNDLEVBQUUsNENBQTRDLENBQUM7UUFDaEcsV0FBVyxFQUFFLENBQUMsc0NBQXNDLEVBQUUsNENBQTRDLENBQUM7UUFDbkcsS0FBSyxFQUFFLENBQUMsNkNBQTZDLENBQUM7S0FDdkQ7SUFDRCxNQUFNLEVBQUU7UUFDTixRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUNqQyxXQUFXLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztRQUN6QyxLQUFLLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSwwQkFBMEIsQ0FBQztLQUNwRTtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRTtZQUNSLDBDQUEwQztZQUMxQyx1Q0FBdUM7WUFDdkMsd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUN2Qiw0QkFBNEI7WUFDNUIsa0JBQWtCO1NBQ25CO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsZ0NBQWdDO1lBQ2hDLDBCQUEwQjtZQUMxQiwyQkFBMkI7WUFDM0IsdUJBQXVCO1NBQ3hCO1FBQ0QsS0FBSyxFQUFFLENBQUMseUJBQXlCLEVBQUUscUNBQXFDLENBQUM7S0FDMUU7SUFDRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUU7WUFDUiwwQkFBMEI7WUFDMUIsb0NBQW9DO1lBQ3BDLDJCQUEyQjtZQUMzQiwyQkFBMkI7U0FDNUI7UUFDRCxXQUFXLEVBQUU7WUFDWCxvQ0FBb0M7WUFDcEMsNkJBQTZCO1lBQzdCLG1EQUFtRDtZQUNuRCwrQkFBK0I7WUFDL0IscUNBQXFDO1lBQ3JDLHlDQUF5QztZQUN6QyxrREFBa0Q7WUFDbEQsZ0NBQWdDO1lBQ2hDLHNDQUFzQztZQUN0QyxtQ0FBbUM7WUFDbkMsZ0NBQWdDO1NBQ2pDO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsMkNBQTJDO1lBQzNDLHlCQUF5QjtZQUN6QiwwQ0FBMEM7U0FDM0M7S0FDRjtJQUNELGlCQUFpQixFQUFFO1FBQ2pCLFFBQVEsRUFBRTtZQUNSLGdDQUFnQztZQUNoQyx1QkFBdUI7WUFDdkIscUJBQXFCO1lBQ3JCLFlBQVk7U0FDYjtRQUNELFdBQVcsRUFBRTtZQUNYLGdCQUFnQjtZQUNoQixTQUFTO1lBQ1QsU0FBUztZQUVULCtCQUErQjtZQUMvQiwwQkFBMEI7WUFDMUIsd0JBQXdCO1NBQ3pCO1FBQ0QsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQ3JCO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsUUFBUSxFQUFFLENBQUMsK0JBQStCLENBQUM7UUFDM0MsV0FBVyxFQUFFLENBQUMsOEJBQThCLENBQUM7UUFDN0MsS0FBSyxFQUFFLEVBQUU7S0FDVjtJQUNELFVBQVUsRUFBRTtRQUNWLFFBQVEsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO1FBQzdDLFdBQVcsRUFBRSxDQUFDLCtCQUErQixDQUFDO1FBQzlDLEtBQUssRUFBRSxDQUFDLDhCQUE4QixDQUFDO0tBQ3hDO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsUUFBUSxFQUFFLENBQUMseUJBQXlCLENBQUM7UUFDckMsV0FBVyxFQUFFLENBQUMsb0JBQW9CLENBQUM7UUFDbkMsS0FBSyxFQUFFLENBQUMsd0JBQXdCLENBQUM7S0FDbEM7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsRUFBRTtRQUNaLFdBQVcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO1FBQ3hDLEtBQUssRUFBRSxFQUFFO0tBQ1Y7Q0FDRixDQUFDO0FBUUYsU0FBUyxvQkFBb0I7SUFDM0IsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzFELEdBQUcsQ0FBQyxHQUEyQixDQUFDLEdBQUc7WUFDakMsR0FBRyxLQUFLO1lBQ1IsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEtBQUssRUFBRSxFQUFFO2dCQUNULFdBQVcsRUFBRSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTthQUN6QixDQUFDO1lBQ0YsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JCLEtBQUssRUFBRSxFQUFFO2dCQUNULFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCLENBQUM7U0FDSCxDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBNEIsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFWSxRQUFBLGlCQUFpQixHQUFHLG9CQUFvQixFQUFFLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ export * from './helpers';
2
+ export * from './AppRegistration';
3
+ export * from './AzRole';
4
+ export * from './CustomRoles';
5
+ export * from './GroupRole';
6
+ export * from './RoleAssignment';
7
+ export * from './UserAssignedIdentity';
package/azAd/index.js ADDED
@@ -0,0 +1,24 @@
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("./helpers"), exports);
18
+ __exportStar(require("./AppRegistration"), exports);
19
+ __exportStar(require("./AzRole"), exports);
20
+ __exportStar(require("./CustomRoles"), exports);
21
+ __exportStar(require("./GroupRole"), exports);
22
+ __exportStar(require("./RoleAssignment"), exports);
23
+ __exportStar(require("./UserAssignedIdentity"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXpBZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLG9EQUFrQztBQUNsQywyQ0FBeUI7QUFDekIsZ0RBQThCO0FBQzlCLDhDQUE0QjtBQUM1QixtREFBaUM7QUFDakMseURBQXVDIn0=
@@ -0,0 +1,53 @@
1
+ import * as pulumi from '@pulumi/pulumi';
2
+ /**
3
+ * BaseComponent serves as an abstract foundation class for Pulumi resource components.
4
+ * It provides core functionality and structure for creating custom infrastructure components.
5
+ *
6
+ * @template TArgs - Generic type parameter extending pulumi.Inputs to define component arguments
7
+ * @extends pulumi.ComponentResource<TArgs>
8
+ */
9
+ /**
10
+ * @template TArgs - Generic type parameter extending pulumi.Inputs
11
+ * @example
12
+ * // Add usage example here
13
+ * const component = new MyComponent('name', args);
14
+ */
15
+ export declare abstract class BaseComponent<TArgs extends pulumi.Inputs> extends pulumi.ComponentResource<TArgs> {
16
+ readonly name: string;
17
+ protected readonly args: TArgs;
18
+ protected readonly opts?: pulumi.ComponentResourceOptions | undefined;
19
+ /**
20
+ * Creates a new instance of BaseComponent
21
+ * @param type - The resource type identifier for this component
22
+ * @param name - Unique name for this component instance
23
+ * @param args - Configuration arguments for this component
24
+ * @param opts - Optional Pulumi resource options to control component behavior
25
+ */
26
+ constructor(type: string, name: string, args: TArgs, opts?: pulumi.ComponentResourceOptions | undefined);
27
+ /**
28
+ * Registers component outputs with the Pulumi engine.
29
+ * This method should be overridden by derived classes to ensure proper output registration.
30
+ * @param outputs - The outputs to register for this component
31
+ */
32
+ protected registerOutputs(outputs: pulumi.Inputs | pulumi.Output<pulumi.Inputs>): void;
33
+ /**
34
+ * Abstract method that must be implemented by derived classes to expose component outputs.
35
+ * This method should return all relevant outputs that consumers of the component might need.
36
+ * @returns An object containing the component's outputs, either as direct values or Pulumi outputs
37
+ */
38
+ abstract getOutputs(): pulumi.Inputs | pulumi.Output<pulumi.Inputs>;
39
+ /**
40
+ * Utility method to selectively extract specific properties from the component instance.
41
+ * Useful for creating a subset of component properties for downstream consumption.
42
+ *
43
+ * @template K - Generic type parameter constrained to keys of the component instance
44
+ * @param keys - Array of property names to extract from the component
45
+ * @returns A new object containing only the requested properties from the component
46
+ * @example
47
+ * ```typescript
48
+ * const component = new MyComponent();
49
+ * const subset = component.PickOutputs('name', 'id');
50
+ * ```
51
+ */
52
+ PickOutputs<K extends keyof this>(...keys: K[]): Pick<this, K>;
53
+ }
@@ -0,0 +1,98 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BaseComponent = void 0;
37
+ const pulumi = __importStar(require("@pulumi/pulumi"));
38
+ const helpers_1 = require("./helpers");
39
+ /**
40
+ * BaseComponent serves as an abstract foundation class for Pulumi resource components.
41
+ * It provides core functionality and structure for creating custom infrastructure components.
42
+ *
43
+ * @template TArgs - Generic type parameter extending pulumi.Inputs to define component arguments
44
+ * @extends pulumi.ComponentResource<TArgs>
45
+ */
46
+ /**
47
+ * @template TArgs - Generic type parameter extending pulumi.Inputs
48
+ * @example
49
+ * // Add usage example here
50
+ * const component = new MyComponent('name', args);
51
+ */
52
+ class BaseComponent extends pulumi.ComponentResource {
53
+ name;
54
+ args;
55
+ opts;
56
+ /**
57
+ * Creates a new instance of BaseComponent
58
+ * @param type - The resource type identifier for this component
59
+ * @param name - Unique name for this component instance
60
+ * @param args - Configuration arguments for this component
61
+ * @param opts - Optional Pulumi resource options to control component behavior
62
+ */
63
+ constructor(type, name, args, opts) {
64
+ super((0, helpers_1.getComponentResourceType)(type), name, args, opts);
65
+ this.name = name;
66
+ this.args = args;
67
+ this.opts = opts;
68
+ }
69
+ /**
70
+ * Registers component outputs with the Pulumi engine.
71
+ * This method should be overridden by derived classes to ensure proper output registration.
72
+ * @param outputs - The outputs to register for this component
73
+ */
74
+ registerOutputs(outputs) {
75
+ super.registerOutputs(outputs);
76
+ }
77
+ /**
78
+ * Utility method to selectively extract specific properties from the component instance.
79
+ * Useful for creating a subset of component properties for downstream consumption.
80
+ *
81
+ * @template K - Generic type parameter constrained to keys of the component instance
82
+ * @param keys - Array of property names to extract from the component
83
+ * @returns A new object containing only the requested properties from the component
84
+ * @example
85
+ * ```typescript
86
+ * const component = new MyComponent();
87
+ * const subset = component.PickOutputs('name', 'id');
88
+ * ```
89
+ */
90
+ PickOutputs(...keys) {
91
+ return keys.reduce((acc, key) => {
92
+ acc[key] = this[key];
93
+ return acc;
94
+ }, {});
95
+ }
96
+ }
97
+ exports.BaseComponent = BaseComponent;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL0Jhc2VDb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBQ3pDLHVDQUFxRDtBQUVyRDs7Ozs7O0dBTUc7QUFDSDs7Ozs7R0FLRztBQUNILE1BQXNCLGFBQTJDLFNBQVEsTUFBTSxDQUFDLGlCQUF3QjtJQVVwRjtJQUNHO0lBQ0E7SUFYckI7Ozs7OztPQU1HO0lBQ0gsWUFDRSxJQUFZLEVBQ0ksSUFBWSxFQUNULElBQVcsRUFDWCxJQUFzQztRQUV6RCxLQUFLLENBQUMsSUFBQSxrQ0FBd0IsRUFBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSnhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFDVCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBa0M7SUFHM0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxlQUFlLENBQUMsT0FBcUQ7UUFDN0UsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBU0Q7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksV0FBVyxDQUF1QixHQUFHLElBQVM7UUFDbkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQXBERCxzQ0FvREMifQ==
@@ -0,0 +1,108 @@
1
+ import * as pulumi from '@pulumi/pulumi';
2
+ import { RandomPassword, RandomPasswordArgs } from '../common/RandomPassword';
3
+ import { RandomString, RandomStringArgs } from '../common/RandomString';
4
+ import { ResourceLocker } from '../common/ResourceLocker';
5
+ import * as types from '../types';
6
+ import { EncryptionKey } from '../vault/EncryptionKey';
7
+ import { VaultSecretResult } from '../vault/VaultSecrets';
8
+ import { BaseComponent } from './BaseComponent';
9
+ /**
10
+ * Base interface for resource component arguments that combines vault information
11
+ * and Azure AD group role requirements.
12
+ *
13
+ * This interface extends:
14
+ * - WithVaultInfo: Provides Azure Key Vault configuration
15
+ * - WithGroupRolesArgs: Defines Azure AD group role assignments
16
+ */
17
+ export interface BaseArgs extends types.WithVaultInfo, types.WithGroupRolesArgs {
18
+ }
19
+ /**
20
+ * Extended interface that includes resource group input parameters
21
+ * alongside base vault and role requirements
22
+ */
23
+ export interface CommonBaseArgs extends BaseArgs, types.WithResourceGroupInputs {
24
+ }
25
+ /**
26
+ * BaseResourceComponent serves as a foundational abstract class for Azure resource management
27
+ * with integrated Key Vault capabilities. It provides:
28
+ *
29
+ * Key Features:
30
+ * - Automated secret management with Azure Key Vault integration
31
+ * - Resource group handling and organization
32
+ * - Managed identity role assignments
33
+ * - Resource locking capabilities
34
+ * - Random string/password generation
35
+ * - Encryption key management
36
+ *
37
+ * This component is designed to be extended by specific Azure resource implementations
38
+ * that require secure secret management and standardized resource organization.
39
+ *
40
+ * @template TArgs - Type parameter extending BaseArgs to define required component arguments
41
+ */
42
+ export declare abstract class BaseResourceComponent<TArgs extends BaseArgs> extends BaseComponent<TArgs> {
43
+ private readonly type;
44
+ readonly name: string;
45
+ protected readonly args: TArgs;
46
+ protected readonly opts?: pulumi.ComponentResourceOptions | undefined;
47
+ private _secrets;
48
+ private _vaultSecretsCreated;
49
+ vaultSecrets?: {
50
+ [key: string]: VaultSecretResult;
51
+ };
52
+ /**
53
+ * Creates a new instance of BaseResourceComponent
54
+ * @param type - The type of the resource component
55
+ * @param name - The unique name of the resource component
56
+ * @param args - Arguments containing vault and resource group information
57
+ * @param opts - Optional component resource options
58
+ */
59
+ constructor(type: string, name: string, args: TArgs, opts?: pulumi.ComponentResourceOptions | undefined);
60
+ /**
61
+ * Internal method to handle post-creation secret management
62
+ * Creates vault secrets if any secrets were added during component creation
63
+ */
64
+ private postCreated;
65
+ /**
66
+ * Adds a single secret to the component
67
+ * Can be called multiple times to add different secrets
68
+ * @param name - The name of the secret
69
+ * @param value - The value to be stored in the secret
70
+ */
71
+ protected addSecret(name: string, value: pulumi.Input<string>): void;
72
+ /**
73
+ * Adds multiple secrets to the component at once
74
+ * Should only be called once as it replaces existing secrets
75
+ * @param secrets - Object containing secret name-value pairs
76
+ */
77
+ protected addSecrets(secrets: {
78
+ [key: string]: pulumi.Input<string>;
79
+ }): void;
80
+ /**
81
+ * Overwrote this method with no parameters as it will be provided by calling getOutputs method.
82
+ */
83
+ protected registerOutputs(): void;
84
+ /**
85
+ * Creates a new encryption key in the Azure Key Vault
86
+ * @returns A new EncryptionKey instance if vaultInfo is provided, undefined otherwise
87
+ */
88
+ protected getEncryptionKey({ name, keySize }?: {
89
+ name?: string;
90
+ keySize?: 2048 | 3072 | 4096;
91
+ }): EncryptionKey;
92
+ /**
93
+ * Generates a new random password with predefined settings
94
+ * @returns A new RandomPassword instance with 20 characters length, yearly rotation policy, and no special characters
95
+ */
96
+ protected createPassword(props?: RandomPasswordArgs): RandomPassword;
97
+ protected createRandomString(props?: RandomStringArgs): RandomString;
98
+ protected lockFromDeleting(resource: pulumi.CustomResource): ResourceLocker;
99
+ /**
100
+ * Adds a managed identity to a specified Azure AD group role
101
+ * @param type - The type of group role to add the identity to (from GroupRoleTypes enum)
102
+ * @param identity - A Pulumi output containing the managed identity with its principal ID
103
+ * @returns A new GroupMember resource if successful, undefined if groupRoles not configured or identity invalid
104
+ */
105
+ addIdentityToRole(type: types.GroupRoleTypes, identity: pulumi.Input<{
106
+ principalId: pulumi.Input<string>;
107
+ } | undefined>): pulumi.OutputInstance<import("@pulumi/azuread/groupMember").GroupMember | undefined> | undefined;
108
+ }
@@ -0,0 +1,180 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BaseResourceComponent = void 0;
37
+ const azAd = __importStar(require("@pulumi/azuread"));
38
+ const pulumi = __importStar(require("@pulumi/pulumi"));
39
+ const RandomPassword_1 = require("../common/RandomPassword");
40
+ const RandomString_1 = require("../common/RandomString");
41
+ const ResourceLocker_1 = require("../common/ResourceLocker");
42
+ const EncryptionKey_1 = require("../vault/EncryptionKey");
43
+ const VaultSecrets_1 = require("../vault/VaultSecrets");
44
+ const BaseComponent_1 = require("./BaseComponent");
45
+ const helpers_1 = require("./helpers");
46
+ /**
47
+ * BaseResourceComponent serves as a foundational abstract class for Azure resource management
48
+ * with integrated Key Vault capabilities. It provides:
49
+ *
50
+ * Key Features:
51
+ * - Automated secret management with Azure Key Vault integration
52
+ * - Resource group handling and organization
53
+ * - Managed identity role assignments
54
+ * - Resource locking capabilities
55
+ * - Random string/password generation
56
+ * - Encryption key management
57
+ *
58
+ * This component is designed to be extended by specific Azure resource implementations
59
+ * that require secure secret management and standardized resource organization.
60
+ *
61
+ * @template TArgs - Type parameter extending BaseArgs to define required component arguments
62
+ */
63
+ class BaseResourceComponent extends BaseComponent_1.BaseComponent {
64
+ type;
65
+ name;
66
+ args;
67
+ opts;
68
+ _secrets = {};
69
+ _vaultSecretsCreated = false;
70
+ vaultSecrets;
71
+ /**
72
+ * Creates a new instance of BaseResourceComponent
73
+ * @param type - The type of the resource component
74
+ * @param name - The unique name of the resource component
75
+ * @param args - Arguments containing vault and resource group information
76
+ * @param opts - Optional component resource options
77
+ */
78
+ constructor(type, name, args, opts) {
79
+ super((0, helpers_1.getComponentResourceType)(type), name, args, opts);
80
+ this.type = type;
81
+ this.name = name;
82
+ this.args = args;
83
+ this.opts = opts;
84
+ }
85
+ /**
86
+ * Internal method to handle post-creation secret management
87
+ * Creates vault secrets if any secrets were added during component creation
88
+ */
89
+ postCreated() {
90
+ const { vaultInfo } = this.args;
91
+ if (Object.keys(this._secrets).length <= 0 || !vaultInfo)
92
+ return;
93
+ if (this._vaultSecretsCreated)
94
+ return;
95
+ const se = {};
96
+ for (const key in this._secrets) {
97
+ se[key] = {
98
+ value: this._secrets[key],
99
+ contentType: `${this.type} ${key}`,
100
+ };
101
+ }
102
+ this._vaultSecretsCreated = true;
103
+ const rs = new VaultSecrets_1.VaultSecrets(this.name, {
104
+ vaultInfo,
105
+ secrets: se,
106
+ }, { dependsOn: this.opts?.dependsOn, parent: this });
107
+ this.vaultSecrets = rs.results;
108
+ }
109
+ /**
110
+ * Adds a single secret to the component
111
+ * Can be called multiple times to add different secrets
112
+ * @param name - The name of the secret
113
+ * @param value - The value to be stored in the secret
114
+ */
115
+ addSecret(name, value) {
116
+ this._secrets[name] = value;
117
+ }
118
+ /**
119
+ * Adds multiple secrets to the component at once
120
+ * Should only be called once as it replaces existing secrets
121
+ * @param secrets - Object containing secret name-value pairs
122
+ */
123
+ addSecrets(secrets) {
124
+ this._secrets = { ...this._secrets, ...secrets };
125
+ }
126
+ /**
127
+ * Overwrote this method with no parameters as it will be provided by calling getOutputs method.
128
+ */
129
+ registerOutputs() {
130
+ this.postCreated();
131
+ super.registerOutputs({ ...this.getOutputs(), vaultSecrets: this.vaultSecrets });
132
+ }
133
+ /**
134
+ * Creates a new encryption key in the Azure Key Vault
135
+ * @returns A new EncryptionKey instance if vaultInfo is provided, undefined otherwise
136
+ */
137
+ getEncryptionKey({ name, keySize } = { keySize: 4096 }) {
138
+ if (!this.args.vaultInfo) {
139
+ throw new Error(`VaultInfo is required for encryption key creation in component ${this.name}`);
140
+ }
141
+ return new EncryptionKey_1.EncryptionKey(name ? `${this.name}-${name}` : this.name, { vaultInfo: this.args.vaultInfo, keySize }, { dependsOn: this.opts?.dependsOn, parent: this });
142
+ }
143
+ /**
144
+ * Generates a new random password with predefined settings
145
+ * @returns A new RandomPassword instance with 20 characters length, yearly rotation policy, and no special characters
146
+ */
147
+ createPassword(props = { length: 20, policy: 'yearly', options: { special: false } }) {
148
+ return new RandomPassword_1.RandomPassword(this.name, props, { parent: this });
149
+ }
150
+ createRandomString(props = { type: 'string', length: 10, options: { special: false } }) {
151
+ return new RandomString_1.RandomString(this.name, props, { parent: this });
152
+ }
153
+ lockFromDeleting(resource) {
154
+ return new ResourceLocker_1.ResourceLocker(`${this.name}-lock`, {
155
+ resource,
156
+ level: 'CanNotDelete',
157
+ }, { dependsOn: resource, parent: this });
158
+ }
159
+ /**
160
+ * Adds a managed identity to a specified Azure AD group role
161
+ * @param type - The type of group role to add the identity to (from GroupRoleTypes enum)
162
+ * @param identity - A Pulumi output containing the managed identity with its principal ID
163
+ * @returns A new GroupMember resource if successful, undefined if groupRoles not configured or identity invalid
164
+ */
165
+ addIdentityToRole(type, identity) {
166
+ const { groupRoles } = this.args;
167
+ if (!groupRoles)
168
+ return;
169
+ return pulumi.output(identity).apply((i) => {
170
+ if (!i?.principalId)
171
+ return;
172
+ return new azAd.GroupMember(`${this.name}-${type}-${i.principalId}`, {
173
+ groupObjectId: groupRoles[type].objectId,
174
+ memberObjectId: i.principalId,
175
+ });
176
+ });
177
+ }
178
+ }
179
+ exports.BaseResourceComponent = BaseResourceComponent;
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVJlc291cmNlQ29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvQmFzZVJlc291cmNlQ29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3QztBQUN4Qyx1REFBeUM7QUFDekMsNkRBQThFO0FBQzlFLHlEQUF3RTtBQUN4RSw2REFBMEQ7QUFFMUQsMERBQXVEO0FBRXZELHdEQUF3RTtBQUN4RSxtREFBZ0Q7QUFDaEQsdUNBQXFEO0FBa0JyRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQXNCLHFCQUE4QyxTQUFRLDZCQUFvQjtJQWEzRTtJQUNEO0lBQ0c7SUFDQTtJQWZiLFFBQVEsR0FBNEMsRUFBRSxDQUFDO0lBQ3ZELG9CQUFvQixHQUFZLEtBQUssQ0FBQztJQUN2QyxZQUFZLENBQXdDO0lBRTNEOzs7Ozs7T0FNRztJQUNILFlBQ21CLElBQVksRUFDYixJQUFZLEVBQ1QsSUFBVyxFQUNYLElBQXNDO1FBRXpELEtBQUssQ0FBQyxJQUFBLGtDQUF3QixFQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFMdkMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNiLFNBQUksR0FBSixJQUFJLENBQVE7UUFDVCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBa0M7SUFHM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFdBQVc7UUFDakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDakUsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUV0QyxNQUFNLEVBQUUsR0FBc0MsRUFBRSxDQUFDO1FBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO2FBQ25DLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLDJCQUFZLENBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQ1Q7WUFDRSxTQUFTO1lBQ1QsT0FBTyxFQUFFLEVBQUU7U0FDWixFQUNELEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FDbEQsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQTJCO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sVUFBVSxDQUFDLE9BQWdEO1FBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxlQUFlO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEtBQXNELEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUMvRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLDZCQUFhLENBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUN6QyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFDM0MsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNPLGNBQWMsQ0FBQyxRQUE0QixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEgsT0FBTyxJQUFJLCtCQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRVMsa0JBQWtCLENBQUMsUUFBMEIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2hILE9BQU8sSUFBSSwyQkFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVTLGdCQUFnQixDQUFDLFFBQStCO1FBQ3hELE9BQU8sSUFBSSwrQkFBYyxDQUN2QixHQUFHLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFDbkI7WUFDRSxRQUFRO1lBQ1IsS0FBSyxFQUFFLGNBQWM7U0FDdEIsRUFDRCxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQ3RCLElBQTBCLEVBQzFCLFFBQXlFO1FBRXpFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXO2dCQUFFLE9BQU87WUFDNUIsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ25FLGFBQWEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDeEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBeklELHNEQXlJQyJ9