@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,430 @@
1
+ /**
2
+ * CircleCI Configuration Generator
3
+ * Generate CI/CD pipelines for CircleCI
4
+ */
5
+
6
+ export interface CircleCIOptions {
7
+ awsRegion?: string
8
+ dockerImage?: string
9
+ bunVersion?: string
10
+ deployCommand?: string
11
+ testCommand?: string
12
+ buildCommand?: string
13
+ workflows?: boolean
14
+ }
15
+
16
+ /**
17
+ * Generate deployment config
18
+ */
19
+ export function generateDeploymentConfig(options: CircleCIOptions = {}): string {
20
+ const {
21
+ awsRegion = 'us-east-1',
22
+ dockerImage = 'oven/bun:latest',
23
+ deployCommand = 'bun run cloud deploy',
24
+ testCommand = 'bun test',
25
+ buildCommand = 'bun run build',
26
+ workflows = true,
27
+ } = options
28
+
29
+ return `version: 2.1
30
+
31
+ orbs:
32
+ aws-cli: circleci/aws-cli@4.0
33
+
34
+ executors:
35
+ bun-executor:
36
+ docker:
37
+ - image: ${dockerImage}
38
+ environment:
39
+ AWS_DEFAULT_REGION: ${awsRegion}
40
+ AWS_REGION: ${awsRegion}
41
+
42
+ jobs:
43
+ test:
44
+ executor: bun-executor
45
+ steps:
46
+ - checkout
47
+ - restore_cache:
48
+ keys:
49
+ - dependencies-{{ checksum "package.json" }}
50
+ - dependencies-
51
+ - run:
52
+ name: Install dependencies
53
+ command: bun install
54
+ - save_cache:
55
+ paths:
56
+ - node_modules
57
+ key: dependencies-{{ checksum "package.json" }}
58
+ - run:
59
+ name: Run tests
60
+ command: ${testCommand}
61
+
62
+ build:
63
+ executor: bun-executor
64
+ steps:
65
+ - checkout
66
+ - restore_cache:
67
+ keys:
68
+ - dependencies-{{ checksum "package.json" }}
69
+ - run:
70
+ name: Install dependencies
71
+ command: bun install
72
+ - run:
73
+ name: Build application
74
+ command: ${buildCommand}
75
+ - persist_to_workspace:
76
+ root: .
77
+ paths:
78
+ - dist
79
+
80
+ deploy:
81
+ executor: bun-executor
82
+ steps:
83
+ - checkout
84
+ - attach_workspace:
85
+ at: .
86
+ - aws-cli/setup
87
+ - restore_cache:
88
+ keys:
89
+ - dependencies-{{ checksum "package.json" }}
90
+ - run:
91
+ name: Install dependencies
92
+ command: bun install
93
+ - run:
94
+ name: Deploy to AWS
95
+ command: ${deployCommand}
96
+
97
+ ${workflows ? `workflows:
98
+ version: 2
99
+ build-test-deploy:
100
+ jobs:
101
+ - test
102
+ - build:
103
+ requires:
104
+ - test
105
+ - deploy:
106
+ requires:
107
+ - build
108
+ filters:
109
+ branches:
110
+ only: main
111
+ ` : ''}
112
+ `
113
+ }
114
+
115
+ /**
116
+ * Generate multi-environment config
117
+ */
118
+ export function generateMultiEnvConfig(options: {
119
+ environments: Array<{ name: string; branch: string }>
120
+ awsRegion?: string
121
+ }): string {
122
+ const { environments, awsRegion = 'us-east-1' } = options
123
+
124
+ const deployJobs = environments.map(env => `
125
+ deploy-${env.name}:
126
+ executor: bun-executor
127
+ steps:
128
+ - checkout
129
+ - attach_workspace:
130
+ at: .
131
+ - aws-cli/setup
132
+ - restore_cache:
133
+ keys:
134
+ - dependencies-{{ checksum "package.json" }}
135
+ - run:
136
+ name: Install dependencies
137
+ command: bun install
138
+ - run:
139
+ name: Deploy to ${env.name}
140
+ command: bun run cloud deploy --env=${env.name}
141
+ `).join('\n')
142
+
143
+ const workflowJobs = environments.map(env => `
144
+ - deploy-${env.name}:
145
+ requires:
146
+ - build
147
+ filters:
148
+ branches:
149
+ only: ${env.branch}
150
+ `).join('')
151
+
152
+ return `version: 2.1
153
+
154
+ orbs:
155
+ aws-cli: circleci/aws-cli@4.0
156
+
157
+ executors:
158
+ bun-executor:
159
+ docker:
160
+ - image: oven/bun:latest
161
+ environment:
162
+ AWS_DEFAULT_REGION: ${awsRegion}
163
+
164
+ jobs:
165
+ test:
166
+ executor: bun-executor
167
+ steps:
168
+ - checkout
169
+ - restore_cache:
170
+ keys:
171
+ - dependencies-{{ checksum "package.json" }}
172
+ - run: bun install
173
+ - save_cache:
174
+ paths:
175
+ - node_modules
176
+ key: dependencies-{{ checksum "package.json" }}
177
+ - run: bun test
178
+
179
+ build:
180
+ executor: bun-executor
181
+ steps:
182
+ - checkout
183
+ - restore_cache:
184
+ keys:
185
+ - dependencies-{{ checksum "package.json" }}
186
+ - run: bun install
187
+ - run: bun run build
188
+ - persist_to_workspace:
189
+ root: .
190
+ paths:
191
+ - dist
192
+ ${deployJobs}
193
+
194
+ workflows:
195
+ version: 2
196
+ build-test-deploy:
197
+ jobs:
198
+ - test
199
+ - build:
200
+ requires:
201
+ - test
202
+ ${workflowJobs}
203
+ `
204
+ }
205
+
206
+ /**
207
+ * Generate scheduled workflow config
208
+ */
209
+ export function generateScheduledConfig(options: {
210
+ schedule: string
211
+ environment: string
212
+ awsRegion?: string
213
+ }): string {
214
+ const { schedule, environment, awsRegion = 'us-east-1' } = options
215
+
216
+ return `version: 2.1
217
+
218
+ orbs:
219
+ aws-cli: circleci/aws-cli@4.0
220
+
221
+ executors:
222
+ bun-executor:
223
+ docker:
224
+ - image: oven/bun:latest
225
+ environment:
226
+ AWS_DEFAULT_REGION: ${awsRegion}
227
+ ENVIRONMENT: ${environment}
228
+
229
+ jobs:
230
+ deploy:
231
+ executor: bun-executor
232
+ steps:
233
+ - checkout
234
+ - aws-cli/setup
235
+ - run:
236
+ name: Install dependencies
237
+ command: bun install
238
+ - run:
239
+ name: Deploy to \${ENVIRONMENT}
240
+ command: bun run cloud deploy --env=\${ENVIRONMENT}
241
+
242
+ workflows:
243
+ version: 2
244
+ scheduled-deployment:
245
+ triggers:
246
+ - schedule:
247
+ cron: "${schedule}"
248
+ filters:
249
+ branches:
250
+ only: main
251
+ jobs:
252
+ - deploy
253
+ `
254
+ }
255
+
256
+ /**
257
+ * Generate approval workflow config
258
+ */
259
+ export function generateApprovalConfig(options: {
260
+ environments: string[]
261
+ awsRegion?: string
262
+ }): string {
263
+ const { environments, awsRegion = 'us-east-1' } = options
264
+
265
+ const deployJobs = environments.map(env => `
266
+ deploy-${env}:
267
+ executor: bun-executor
268
+ steps:
269
+ - checkout
270
+ - attach_workspace:
271
+ at: .
272
+ - aws-cli/setup
273
+ - restore_cache:
274
+ keys:
275
+ - dependencies-{{ checksum "package.json" }}
276
+ - run: bun install
277
+ - run: bun run cloud deploy --env=${env}
278
+ `).join('\n')
279
+
280
+ const workflowJobs = environments.map(env => `
281
+ - hold-${env}:
282
+ type: approval
283
+ requires:
284
+ - build
285
+ filters:
286
+ branches:
287
+ only: main
288
+ - deploy-${env}:
289
+ requires:
290
+ - hold-${env}
291
+ `).join('')
292
+
293
+ return `version: 2.1
294
+
295
+ orbs:
296
+ aws-cli: circleci/aws-cli@4.0
297
+
298
+ executors:
299
+ bun-executor:
300
+ docker:
301
+ - image: oven/bun:latest
302
+ environment:
303
+ AWS_DEFAULT_REGION: ${awsRegion}
304
+
305
+ jobs:
306
+ test:
307
+ executor: bun-executor
308
+ steps:
309
+ - checkout
310
+ - restore_cache:
311
+ keys:
312
+ - dependencies-{{ checksum "package.json" }}
313
+ - run: bun install
314
+ - save_cache:
315
+ paths:
316
+ - node_modules
317
+ key: dependencies-{{ checksum "package.json" }}
318
+ - run: bun test
319
+
320
+ build:
321
+ executor: bun-executor
322
+ steps:
323
+ - checkout
324
+ - restore_cache:
325
+ keys:
326
+ - dependencies-{{ checksum "package.json" }}
327
+ - run: bun install
328
+ - run: bun run build
329
+ - persist_to_workspace:
330
+ root: .
331
+ paths:
332
+ - dist
333
+ ${deployJobs}
334
+
335
+ workflows:
336
+ version: 2
337
+ build-test-deploy-with-approval:
338
+ jobs:
339
+ - test
340
+ - build:
341
+ requires:
342
+ - test
343
+ ${workflowJobs}
344
+ `
345
+ }
346
+
347
+ /**
348
+ * Generate parallel deployment config
349
+ */
350
+ export function generateParallelConfig(options: {
351
+ regions: string[]
352
+ environment: string
353
+ awsRegion?: string
354
+ }): string {
355
+ const { regions, environment } = options
356
+
357
+ const deployJobs = regions.map(region => `
358
+ deploy-${region.replace(/-/g, '_')}:
359
+ executor: bun-executor
360
+ environment:
361
+ AWS_REGION: ${region}
362
+ steps:
363
+ - checkout
364
+ - attach_workspace:
365
+ at: .
366
+ - aws-cli/setup
367
+ - restore_cache:
368
+ keys:
369
+ - dependencies-{{ checksum "package.json" }}
370
+ - run: bun install
371
+ - run: bun run cloud deploy --env=${environment} --region=${region}
372
+ `).join('\n')
373
+
374
+ const workflowJobs = regions.map(region => `
375
+ - deploy-${region.replace(/-/g, '_')}:
376
+ requires:
377
+ - build
378
+ `).join('')
379
+
380
+ return `version: 2.1
381
+
382
+ orbs:
383
+ aws-cli: circleci/aws-cli@4.0
384
+
385
+ executors:
386
+ bun-executor:
387
+ docker:
388
+ - image: oven/bun:latest
389
+
390
+ jobs:
391
+ test:
392
+ executor: bun-executor
393
+ steps:
394
+ - checkout
395
+ - restore_cache:
396
+ keys:
397
+ - dependencies-{{ checksum "package.json" }}
398
+ - run: bun install
399
+ - save_cache:
400
+ paths:
401
+ - node_modules
402
+ key: dependencies-{{ checksum "package.json" }}
403
+ - run: bun test
404
+
405
+ build:
406
+ executor: bun-executor
407
+ steps:
408
+ - checkout
409
+ - restore_cache:
410
+ keys:
411
+ - dependencies-{{ checksum "package.json" }}
412
+ - run: bun install
413
+ - run: bun run build
414
+ - persist_to_workspace:
415
+ root: .
416
+ paths:
417
+ - dist
418
+ ${deployJobs}
419
+
420
+ workflows:
421
+ version: 2
422
+ multi-region-deploy:
423
+ jobs:
424
+ - test
425
+ - build:
426
+ requires:
427
+ - test
428
+ ${workflowJobs}
429
+ `
430
+ }