@stacksjs/ts-cloud-core 0.1.1

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 (251) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +321 -0
  3. package/package.json +31 -0
  4. package/src/advanced-features.test.ts +465 -0
  5. package/src/aws/cloudformation.ts +421 -0
  6. package/src/aws/cloudfront.ts +158 -0
  7. package/src/aws/credentials.test.ts +132 -0
  8. package/src/aws/credentials.ts +545 -0
  9. package/src/aws/index.ts +87 -0
  10. package/src/aws/s3.test.ts +188 -0
  11. package/src/aws/s3.ts +1088 -0
  12. package/src/aws/signature.test.ts +670 -0
  13. package/src/aws/signature.ts +1155 -0
  14. package/src/backup/disaster-recovery.test.ts +726 -0
  15. package/src/backup/disaster-recovery.ts +500 -0
  16. package/src/backup/index.ts +34 -0
  17. package/src/backup/manager.test.ts +498 -0
  18. package/src/backup/manager.ts +432 -0
  19. package/src/cicd/circleci.ts +430 -0
  20. package/src/cicd/github-actions.ts +424 -0
  21. package/src/cicd/gitlab-ci.ts +255 -0
  22. package/src/cicd/index.ts +8 -0
  23. package/src/cli/history.ts +396 -0
  24. package/src/cli/index.ts +10 -0
  25. package/src/cli/progress.ts +458 -0
  26. package/src/cli/repl.ts +454 -0
  27. package/src/cli/suggestions.ts +327 -0
  28. package/src/cli/table.test.ts +319 -0
  29. package/src/cli/table.ts +332 -0
  30. package/src/cloudformation/builder.test.ts +327 -0
  31. package/src/cloudformation/builder.ts +378 -0
  32. package/src/cloudformation/builders/api-gateway.ts +449 -0
  33. package/src/cloudformation/builders/cache.ts +334 -0
  34. package/src/cloudformation/builders/cdn.ts +278 -0
  35. package/src/cloudformation/builders/compute.ts +485 -0
  36. package/src/cloudformation/builders/database.ts +392 -0
  37. package/src/cloudformation/builders/functions.ts +343 -0
  38. package/src/cloudformation/builders/messaging.ts +140 -0
  39. package/src/cloudformation/builders/monitoring.ts +300 -0
  40. package/src/cloudformation/builders/network.ts +264 -0
  41. package/src/cloudformation/builders/queue.ts +147 -0
  42. package/src/cloudformation/builders/security.ts +399 -0
  43. package/src/cloudformation/builders/storage.ts +285 -0
  44. package/src/cloudformation/index.ts +30 -0
  45. package/src/cloudformation/types.ts +173 -0
  46. package/src/compliance/aws-config.ts +543 -0
  47. package/src/compliance/cloudtrail.ts +376 -0
  48. package/src/compliance/compliance.test.ts +423 -0
  49. package/src/compliance/guardduty.ts +446 -0
  50. package/src/compliance/index.ts +66 -0
  51. package/src/compliance/security-hub.ts +456 -0
  52. package/src/containers/build-optimization.ts +416 -0
  53. package/src/containers/containers.test.ts +508 -0
  54. package/src/containers/image-scanning.ts +360 -0
  55. package/src/containers/index.ts +9 -0
  56. package/src/containers/registry.ts +293 -0
  57. package/src/containers/service-mesh.ts +520 -0
  58. package/src/database/database.test.ts +762 -0
  59. package/src/database/index.ts +9 -0
  60. package/src/database/migrations.ts +444 -0
  61. package/src/database/performance.ts +528 -0
  62. package/src/database/replicas.ts +534 -0
  63. package/src/database/users.ts +494 -0
  64. package/src/dependency-graph.ts +143 -0
  65. package/src/deployment/ab-testing.ts +582 -0
  66. package/src/deployment/blue-green.ts +452 -0
  67. package/src/deployment/canary.ts +500 -0
  68. package/src/deployment/deployment.test.ts +526 -0
  69. package/src/deployment/index.ts +61 -0
  70. package/src/deployment/progressive.ts +62 -0
  71. package/src/dns/dns.test.ts +641 -0
  72. package/src/dns/dnssec.ts +315 -0
  73. package/src/dns/index.ts +8 -0
  74. package/src/dns/resolver.ts +496 -0
  75. package/src/dns/routing.ts +593 -0
  76. package/src/email/advanced/analytics.ts +445 -0
  77. package/src/email/advanced/index.ts +11 -0
  78. package/src/email/advanced/rules.ts +465 -0
  79. package/src/email/advanced/scheduling.ts +352 -0
  80. package/src/email/advanced/search.ts +412 -0
  81. package/src/email/advanced/shared-mailboxes.ts +404 -0
  82. package/src/email/advanced/templates.ts +455 -0
  83. package/src/email/advanced/threading.ts +281 -0
  84. package/src/email/analytics.ts +467 -0
  85. package/src/email/bounce-handling.ts +425 -0
  86. package/src/email/email.test.ts +431 -0
  87. package/src/email/handlers/__tests__/inbound.test.ts +38 -0
  88. package/src/email/handlers/__tests__/outbound.test.ts +37 -0
  89. package/src/email/handlers/converter.ts +227 -0
  90. package/src/email/handlers/feedback.ts +228 -0
  91. package/src/email/handlers/inbound.ts +169 -0
  92. package/src/email/handlers/outbound.ts +178 -0
  93. package/src/email/index.ts +15 -0
  94. package/src/email/reputation.ts +303 -0
  95. package/src/email/templates.ts +352 -0
  96. package/src/errors/index.test.ts +434 -0
  97. package/src/errors/index.ts +416 -0
  98. package/src/health-checks/index.ts +40 -0
  99. package/src/index.ts +360 -0
  100. package/src/intrinsic-functions.ts +118 -0
  101. package/src/lambda/concurrency.ts +330 -0
  102. package/src/lambda/destinations.ts +345 -0
  103. package/src/lambda/dlq.ts +425 -0
  104. package/src/lambda/index.ts +11 -0
  105. package/src/lambda/lambda.test.ts +840 -0
  106. package/src/lambda/layers.ts +263 -0
  107. package/src/lambda/versions.ts +376 -0
  108. package/src/lambda/vpc.ts +399 -0
  109. package/src/local/config.ts +114 -0
  110. package/src/local/index.ts +6 -0
  111. package/src/local/mock-aws.ts +351 -0
  112. package/src/modules/ai.ts +340 -0
  113. package/src/modules/api.ts +478 -0
  114. package/src/modules/auth.ts +805 -0
  115. package/src/modules/cache.ts +417 -0
  116. package/src/modules/cdn.ts +1062 -0
  117. package/src/modules/communication.ts +1094 -0
  118. package/src/modules/compute.ts +3348 -0
  119. package/src/modules/database.ts +554 -0
  120. package/src/modules/deployment.ts +1079 -0
  121. package/src/modules/dns.ts +337 -0
  122. package/src/modules/email.ts +1538 -0
  123. package/src/modules/filesystem.ts +515 -0
  124. package/src/modules/index.ts +32 -0
  125. package/src/modules/messaging.ts +486 -0
  126. package/src/modules/monitoring.ts +2086 -0
  127. package/src/modules/network.ts +664 -0
  128. package/src/modules/parameter-store.ts +325 -0
  129. package/src/modules/permissions.ts +1081 -0
  130. package/src/modules/phone.ts +494 -0
  131. package/src/modules/queue.ts +1260 -0
  132. package/src/modules/redirects.ts +464 -0
  133. package/src/modules/registry.ts +699 -0
  134. package/src/modules/search.ts +401 -0
  135. package/src/modules/secrets.ts +416 -0
  136. package/src/modules/security.ts +731 -0
  137. package/src/modules/sms.ts +389 -0
  138. package/src/modules/storage.ts +1120 -0
  139. package/src/modules/workflow.ts +680 -0
  140. package/src/multi-account/config.ts +521 -0
  141. package/src/multi-account/index.ts +7 -0
  142. package/src/multi-account/manager.ts +427 -0
  143. package/src/multi-region/cross-region.ts +410 -0
  144. package/src/multi-region/index.ts +8 -0
  145. package/src/multi-region/manager.ts +483 -0
  146. package/src/multi-region/regions.ts +435 -0
  147. package/src/network-security/index.ts +48 -0
  148. package/src/observability/index.ts +9 -0
  149. package/src/observability/logs.ts +522 -0
  150. package/src/observability/metrics.ts +460 -0
  151. package/src/observability/observability.test.ts +782 -0
  152. package/src/observability/synthetics.ts +568 -0
  153. package/src/observability/xray.ts +358 -0
  154. package/src/phone/advanced/analytics.ts +349 -0
  155. package/src/phone/advanced/callbacks.ts +428 -0
  156. package/src/phone/advanced/index.ts +8 -0
  157. package/src/phone/advanced/ivr-builder.ts +504 -0
  158. package/src/phone/advanced/recording.ts +310 -0
  159. package/src/phone/handlers/__tests__/incoming-call.test.ts +40 -0
  160. package/src/phone/handlers/incoming-call.ts +117 -0
  161. package/src/phone/handlers/missed-call.ts +116 -0
  162. package/src/phone/handlers/voicemail.ts +179 -0
  163. package/src/phone/index.ts +9 -0
  164. package/src/presets/api-backend.ts +134 -0
  165. package/src/presets/data-pipeline.ts +204 -0
  166. package/src/presets/extend.test.ts +295 -0
  167. package/src/presets/extend.ts +297 -0
  168. package/src/presets/fullstack-app.ts +144 -0
  169. package/src/presets/index.ts +27 -0
  170. package/src/presets/jamstack.ts +135 -0
  171. package/src/presets/microservices.ts +167 -0
  172. package/src/presets/ml-api.ts +208 -0
  173. package/src/presets/nodejs-server.ts +104 -0
  174. package/src/presets/nodejs-serverless.ts +114 -0
  175. package/src/presets/realtime-app.ts +184 -0
  176. package/src/presets/static-site.ts +64 -0
  177. package/src/presets/traditional-web-app.ts +339 -0
  178. package/src/presets/wordpress.ts +138 -0
  179. package/src/preview/github.test.ts +249 -0
  180. package/src/preview/github.ts +297 -0
  181. package/src/preview/index.ts +37 -0
  182. package/src/preview/manager.test.ts +440 -0
  183. package/src/preview/manager.ts +326 -0
  184. package/src/preview/notifications.test.ts +582 -0
  185. package/src/preview/notifications.ts +341 -0
  186. package/src/queue/batch-processing.ts +402 -0
  187. package/src/queue/dlq-monitoring.ts +402 -0
  188. package/src/queue/fifo.ts +342 -0
  189. package/src/queue/index.ts +9 -0
  190. package/src/queue/management.ts +428 -0
  191. package/src/queue/queue.test.ts +429 -0
  192. package/src/resource-mgmt/index.ts +39 -0
  193. package/src/resource-naming.ts +62 -0
  194. package/src/s3/index.ts +523 -0
  195. package/src/schema/cloud-config.schema.json +554 -0
  196. package/src/schema/index.ts +68 -0
  197. package/src/security/certificate-manager.ts +492 -0
  198. package/src/security/index.ts +9 -0
  199. package/src/security/scanning.ts +545 -0
  200. package/src/security/secrets-manager.ts +476 -0
  201. package/src/security/secrets-rotation.ts +456 -0
  202. package/src/security/security.test.ts +738 -0
  203. package/src/sms/advanced/ab-testing.ts +389 -0
  204. package/src/sms/advanced/analytics.ts +336 -0
  205. package/src/sms/advanced/campaigns.ts +523 -0
  206. package/src/sms/advanced/chatbot.ts +224 -0
  207. package/src/sms/advanced/index.ts +10 -0
  208. package/src/sms/advanced/link-tracking.ts +248 -0
  209. package/src/sms/advanced/mms.ts +308 -0
  210. package/src/sms/handlers/__tests__/send.test.ts +40 -0
  211. package/src/sms/handlers/delivery-status.ts +133 -0
  212. package/src/sms/handlers/receive.ts +162 -0
  213. package/src/sms/handlers/send.ts +174 -0
  214. package/src/sms/index.ts +9 -0
  215. package/src/stack-diff.ts +389 -0
  216. package/src/static-site/index.ts +85 -0
  217. package/src/template-builder.ts +110 -0
  218. package/src/template-validator.ts +574 -0
  219. package/src/utils/cache.ts +291 -0
  220. package/src/utils/diff.ts +269 -0
  221. package/src/utils/hash.ts +227 -0
  222. package/src/utils/index.ts +8 -0
  223. package/src/utils/parallel.ts +294 -0
  224. package/src/validators/credentials.test.ts +274 -0
  225. package/src/validators/credentials.ts +233 -0
  226. package/src/validators/quotas.test.ts +434 -0
  227. package/src/validators/quotas.ts +217 -0
  228. package/test/ai.test.ts +327 -0
  229. package/test/api.test.ts +511 -0
  230. package/test/auth.test.ts +632 -0
  231. package/test/cache.test.ts +406 -0
  232. package/test/cdn.test.ts +247 -0
  233. package/test/compute.test.ts +861 -0
  234. package/test/database.test.ts +523 -0
  235. package/test/deployment.test.ts +499 -0
  236. package/test/dns.test.ts +270 -0
  237. package/test/email.test.ts +439 -0
  238. package/test/filesystem.test.ts +382 -0
  239. package/test/integration.test.ts +350 -0
  240. package/test/messaging.test.ts +514 -0
  241. package/test/monitoring.test.ts +634 -0
  242. package/test/network.test.ts +425 -0
  243. package/test/permissions.test.ts +488 -0
  244. package/test/queue.test.ts +484 -0
  245. package/test/registry.test.ts +306 -0
  246. package/test/security.test.ts +462 -0
  247. package/test/storage.test.ts +463 -0
  248. package/test/template-validator.test.ts +559 -0
  249. package/test/workflow.test.ts +592 -0
  250. package/tsconfig.json +16 -0
  251. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,378 @@
1
+ import type { CloudConfig } from '@stacksjs/ts-cloud-types'
2
+ import type { CloudFormationTemplate, CloudFormationResource } from './types'
3
+ import { Fn } from './types'
4
+ import { addNetworkResources } from './builders/network'
5
+ import { addStorageResources } from './builders/storage'
6
+ import { addComputeResources } from './builders/compute'
7
+ import { addDatabaseResources } from './builders/database'
8
+ import { addFunctionResources } from './builders/functions'
9
+ import { addCacheResources } from './builders/cache'
10
+ import { addQueueResources } from './builders/queue'
11
+ import { addMessagingResources } from './builders/messaging'
12
+ import { addCDNResources } from './builders/cdn'
13
+ import { addApiGatewayResources } from './builders/api-gateway'
14
+ import { addMonitoringResources } from './builders/monitoring'
15
+ import { addSecurityResources } from './builders/security'
16
+
17
+ /**
18
+ * CloudFormation Template Builder
19
+ * Converts-cloudConfig to CloudFormation templates
20
+ */
21
+ export class CloudFormationBuilder {
22
+ protected template: CloudFormationTemplate
23
+ private config: CloudConfig
24
+ private resourceDependencies: Map<string, Set<string>>
25
+
26
+ constructor(config: CloudConfig) {
27
+ this.config = config
28
+ this.resourceDependencies = new Map()
29
+ this.template = {
30
+ AWSTemplateFormatVersion: '2010-09-09',
31
+ Description: `Infrastructure for ${config.project.name} (${config.project.slug})`,
32
+ Resources: {},
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Build the complete CloudFormation template
38
+ */
39
+ build(): CloudFormationTemplate {
40
+ this.addParameters()
41
+ this.addMappings()
42
+ this.addConditions()
43
+ this.addResources()
44
+ this.initializeOutputs()
45
+ this.resolveDependencies()
46
+
47
+ return this.template
48
+ }
49
+
50
+ /**
51
+ * Add parameters to the template
52
+ */
53
+ private addParameters(): void {
54
+ this.template.Parameters = {
55
+ Environment: {
56
+ Type: 'String',
57
+ Default: 'production',
58
+ AllowedValues: ['development', 'staging', 'production'],
59
+ Description: 'Environment name',
60
+ },
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Add mappings to the template
66
+ */
67
+ private addMappings(): void {
68
+ // Region-specific AMI mappings
69
+ this.template.Mappings = {
70
+ RegionMap: {
71
+ 'us-east-1': { AMI: 'ami-0c55b159cbfafe1f0' },
72
+ 'us-west-2': { AMI: 'ami-0d1cd67c26f5fca19' },
73
+ 'eu-west-1': { AMI: 'ami-0bbc25e23a7640b9b' },
74
+ // Add more regions as needed
75
+ },
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Add conditions to the template
81
+ */
82
+ private addConditions(): void {
83
+ this.template.Conditions = {
84
+ IsProduction: Fn.equals(Fn.ref('Environment'), 'production'),
85
+ HasDomain: Fn.not([Fn.equals(this.config.environments?.production?.domain || '', '')]),
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Add all resources to the template
91
+ */
92
+ private addResources(): void {
93
+ const { infrastructure } = this.config
94
+
95
+ if (!infrastructure) {
96
+ return
97
+ }
98
+
99
+ // Network resources
100
+ if (infrastructure.network) {
101
+ this.addNetworkResources(infrastructure.network)
102
+ }
103
+
104
+ // Storage resources
105
+ if (infrastructure.storage) {
106
+ this.addStorageResources(infrastructure.storage)
107
+ }
108
+
109
+ // Compute resources
110
+ if (infrastructure.compute) {
111
+ this.addComputeResources(infrastructure.compute)
112
+ }
113
+
114
+ // Database resources
115
+ if (infrastructure.databases) {
116
+ this.addDatabaseResources(infrastructure.databases)
117
+ }
118
+
119
+ // Cache resources
120
+ if (infrastructure.cache) {
121
+ this.addCacheResources(infrastructure.cache)
122
+ }
123
+
124
+ // CDN resources
125
+ if (infrastructure.cdn) {
126
+ this.addCDNResources(infrastructure.cdn)
127
+ }
128
+
129
+ // API Gateway resources
130
+ if (infrastructure.apiGateway) {
131
+ this.addApiGatewayResources(infrastructure.apiGateway)
132
+ }
133
+
134
+ // Lambda functions
135
+ if (infrastructure.functions) {
136
+ this.addFunctionResources(infrastructure.functions)
137
+ }
138
+
139
+ // Queue resources
140
+ if (infrastructure.queues) {
141
+ this.addQueueResources(infrastructure.queues)
142
+ }
143
+
144
+ // Messaging resources
145
+ if (infrastructure.messaging) {
146
+ this.addMessagingResources(infrastructure.messaging)
147
+ }
148
+
149
+ // Monitoring resources
150
+ if (infrastructure.monitoring) {
151
+ this.addMonitoringResources(infrastructure.monitoring)
152
+ }
153
+
154
+ // Security resources
155
+ if (infrastructure.security) {
156
+ this.addSecurityResources(infrastructure.security)
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Initialize default outputs in the template
162
+ */
163
+ private initializeOutputs(): void {
164
+ this.template.Outputs = {
165
+ StackName: {
166
+ Description: 'Stack name',
167
+ Value: Fn.ref('AWS::StackName'),
168
+ Export: {
169
+ Name: Fn.sub('${AWS::StackName}-Name'),
170
+ },
171
+ },
172
+ Region: {
173
+ Description: 'AWS Region',
174
+ Value: Fn.ref('AWS::Region'),
175
+ Export: {
176
+ Name: Fn.sub('${AWS::StackName}-Region'),
177
+ },
178
+ },
179
+ }
180
+
181
+ // Add domain output if configured
182
+ if (this.config.environments?.production?.domain) {
183
+ this.template.Outputs.Domain = {
184
+ Description: 'Production domain',
185
+ Value: this.config.environments.production.domain,
186
+ Condition: 'HasDomain',
187
+ }
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Add a resource to the template
193
+ */
194
+ addResource(
195
+ logicalId: string,
196
+ type: string,
197
+ properties: Record<string, any>,
198
+ options?: {
199
+ dependsOn?: string | string[]
200
+ condition?: string
201
+ deletionPolicy?: 'Delete' | 'Retain' | 'Snapshot'
202
+ updateReplacePolicy?: 'Delete' | 'Retain' | 'Snapshot'
203
+ },
204
+ ): void {
205
+ const resource: CloudFormationResource = {
206
+ Type: type,
207
+ Properties: properties,
208
+ }
209
+
210
+ if (options?.dependsOn) {
211
+ resource.DependsOn = options.dependsOn
212
+ this.trackDependency(logicalId, options.dependsOn)
213
+ }
214
+
215
+ if (options?.condition) {
216
+ resource.Condition = options.condition
217
+ }
218
+
219
+ if (options?.deletionPolicy) {
220
+ resource.DeletionPolicy = options.deletionPolicy
221
+ }
222
+
223
+ if (options?.updateReplacePolicy) {
224
+ resource.UpdateReplacePolicy = options.updateReplacePolicy
225
+ }
226
+
227
+ this.template.Resources[logicalId] = resource
228
+ }
229
+
230
+ /**
231
+ * Add or merge outputs to the template
232
+ */
233
+ addOutputs(outputs: Record<string, any>): void {
234
+ this.template.Outputs = {
235
+ ...this.template.Outputs,
236
+ ...outputs,
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Get the current outputs
242
+ */
243
+ getOutputs(): Record<string, any> {
244
+ return this.template.Outputs || {}
245
+ }
246
+
247
+ /**
248
+ * Check if a resource exists in the template
249
+ */
250
+ hasResource(logicalId: string): boolean {
251
+ return logicalId in this.template.Resources
252
+ }
253
+
254
+ /**
255
+ * Get a resource from the template
256
+ */
257
+ getResource(logicalId: string): CloudFormationResource | undefined {
258
+ return this.template.Resources[logicalId]
259
+ }
260
+
261
+ /**
262
+ * Track resource dependencies for cycle detection
263
+ */
264
+ private trackDependency(resource: string, dependencies: string | string[]): void {
265
+ if (!this.resourceDependencies.has(resource)) {
266
+ this.resourceDependencies.set(resource, new Set())
267
+ }
268
+
269
+ const deps = Array.isArray(dependencies) ? dependencies : [dependencies]
270
+ deps.forEach(dep => this.resourceDependencies.get(resource)!.add(dep))
271
+ }
272
+
273
+ /**
274
+ * Resolve and validate resource dependencies
275
+ * Detects circular dependencies and reorders if needed
276
+ */
277
+ private resolveDependencies(): void {
278
+ // Topological sort to detect cycles
279
+ const visited = new Set<string>()
280
+ const recursionStack = new Set<string>()
281
+
282
+ const visit = (resource: string): boolean => {
283
+ if (recursionStack.has(resource)) {
284
+ throw new Error(`Circular dependency detected involving resource: ${resource}`)
285
+ }
286
+
287
+ if (visited.has(resource)) {
288
+ return true
289
+ }
290
+
291
+ visited.add(resource)
292
+ recursionStack.add(resource)
293
+
294
+ const deps = this.resourceDependencies.get(resource)
295
+ if (deps) {
296
+ for (const dep of deps) {
297
+ visit(dep)
298
+ }
299
+ }
300
+
301
+ recursionStack.delete(resource)
302
+ return true
303
+ }
304
+
305
+ for (const resource of this.resourceDependencies.keys()) {
306
+ visit(resource)
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Generate a logical ID from a name
312
+ */
313
+ toLogicalId(name: string): string {
314
+ return name
315
+ .split(/[-_\s]/)
316
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
317
+ .join('')
318
+ }
319
+
320
+ /**
321
+ * Call resource builder functions
322
+ */
323
+ private addNetworkResources(network: any): void {
324
+ addNetworkResources(this as any, network)
325
+ }
326
+
327
+ private addStorageResources(storage: any): void {
328
+ addStorageResources(this as any, storage)
329
+ }
330
+
331
+ private addComputeResources(compute: any): void {
332
+ addComputeResources(this as any, compute)
333
+ }
334
+
335
+ private addDatabaseResources(database: any): void {
336
+ addDatabaseResources(this as any, database)
337
+ }
338
+
339
+ private addFunctionResources(functions: any): void {
340
+ addFunctionResources(this as any, functions)
341
+ }
342
+
343
+ private addCacheResources(cache: any): void {
344
+ addCacheResources(this as any, cache)
345
+ }
346
+
347
+ private addQueueResources(queue: any): void {
348
+ addQueueResources(this as any, queue)
349
+ }
350
+
351
+ private addMessagingResources(messaging: any): void {
352
+ addMessagingResources(this as any, messaging)
353
+ }
354
+
355
+ private addCDNResources(cdn: any): void {
356
+ addCDNResources(this as any, cdn)
357
+ }
358
+
359
+ private addApiGatewayResources(apiGateway: any): void {
360
+ addApiGatewayResources(this as any, apiGateway)
361
+ }
362
+
363
+ private addMonitoringResources(monitoring: any): void {
364
+ addMonitoringResources(this as any, monitoring)
365
+ }
366
+
367
+ private addSecurityResources(security: any): void {
368
+ addSecurityResources(this as any, security)
369
+ }
370
+ }
371
+
372
+ /**
373
+ * Main function to convert CloudConfig to CloudFormation template
374
+ */
375
+ export function buildCloudFormationTemplate(config: CloudConfig): CloudFormationTemplate {
376
+ const builder = new CloudFormationBuilder(config)
377
+ return builder.build()
378
+ }