@stacksjs/ts-cloud-core 0.1.8 → 0.1.9

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 (225) hide show
  1. package/package.json +7 -6
  2. package/src/advanced-features.test.ts +465 -0
  3. package/src/aws/cloudformation.ts +421 -0
  4. package/src/aws/cloudfront.ts +158 -0
  5. package/src/aws/credentials.test.ts +132 -0
  6. package/src/aws/credentials.ts +545 -0
  7. package/src/aws/index.ts +87 -0
  8. package/src/aws/s3.test.ts +188 -0
  9. package/src/aws/s3.ts +1088 -0
  10. package/src/aws/signature.test.ts +670 -0
  11. package/src/aws/signature.ts +1155 -0
  12. package/src/backup/disaster-recovery.test.ts +726 -0
  13. package/src/backup/disaster-recovery.ts +500 -0
  14. package/src/backup/index.ts +34 -0
  15. package/src/backup/manager.test.ts +498 -0
  16. package/src/backup/manager.ts +432 -0
  17. package/src/cicd/circleci.ts +430 -0
  18. package/src/cicd/github-actions.ts +424 -0
  19. package/src/cicd/gitlab-ci.ts +255 -0
  20. package/src/cicd/index.ts +8 -0
  21. package/src/cli/history.ts +396 -0
  22. package/src/cli/index.ts +10 -0
  23. package/src/cli/progress.ts +458 -0
  24. package/src/cli/repl.ts +454 -0
  25. package/src/cli/suggestions.ts +327 -0
  26. package/src/cli/table.test.ts +319 -0
  27. package/src/cli/table.ts +332 -0
  28. package/src/cloudformation/builder.test.ts +327 -0
  29. package/src/cloudformation/builder.ts +378 -0
  30. package/src/cloudformation/builders/api-gateway.ts +449 -0
  31. package/src/cloudformation/builders/cache.ts +334 -0
  32. package/src/cloudformation/builders/cdn.ts +278 -0
  33. package/src/cloudformation/builders/compute.ts +485 -0
  34. package/src/cloudformation/builders/database.ts +392 -0
  35. package/src/cloudformation/builders/functions.ts +343 -0
  36. package/src/cloudformation/builders/messaging.ts +140 -0
  37. package/src/cloudformation/builders/monitoring.ts +300 -0
  38. package/src/cloudformation/builders/network.ts +264 -0
  39. package/src/cloudformation/builders/queue.ts +147 -0
  40. package/src/cloudformation/builders/security.ts +399 -0
  41. package/src/cloudformation/builders/storage.ts +285 -0
  42. package/src/cloudformation/index.ts +30 -0
  43. package/src/cloudformation/types.ts +173 -0
  44. package/src/compliance/aws-config.ts +543 -0
  45. package/src/compliance/cloudtrail.ts +376 -0
  46. package/src/compliance/compliance.test.ts +423 -0
  47. package/src/compliance/guardduty.ts +446 -0
  48. package/src/compliance/index.ts +66 -0
  49. package/src/compliance/security-hub.ts +456 -0
  50. package/src/containers/build-optimization.ts +416 -0
  51. package/src/containers/containers.test.ts +508 -0
  52. package/src/containers/image-scanning.ts +360 -0
  53. package/src/containers/index.ts +9 -0
  54. package/src/containers/registry.ts +293 -0
  55. package/src/containers/service-mesh.ts +520 -0
  56. package/src/database/database.test.ts +762 -0
  57. package/src/database/index.ts +9 -0
  58. package/src/database/migrations.ts +444 -0
  59. package/src/database/performance.ts +528 -0
  60. package/src/database/replicas.ts +534 -0
  61. package/src/database/users.ts +494 -0
  62. package/src/dependency-graph.ts +143 -0
  63. package/src/deployment/ab-testing.ts +582 -0
  64. package/src/deployment/blue-green.ts +452 -0
  65. package/src/deployment/canary.ts +500 -0
  66. package/src/deployment/deployment.test.ts +526 -0
  67. package/src/deployment/index.ts +61 -0
  68. package/src/deployment/progressive.ts +62 -0
  69. package/src/dns/dns.test.ts +641 -0
  70. package/src/dns/dnssec.ts +315 -0
  71. package/src/dns/index.ts +8 -0
  72. package/src/dns/resolver.ts +496 -0
  73. package/src/dns/routing.ts +593 -0
  74. package/src/email/advanced/analytics.ts +445 -0
  75. package/src/email/advanced/index.ts +11 -0
  76. package/src/email/advanced/rules.ts +465 -0
  77. package/src/email/advanced/scheduling.ts +352 -0
  78. package/src/email/advanced/search.ts +412 -0
  79. package/src/email/advanced/shared-mailboxes.ts +404 -0
  80. package/src/email/advanced/templates.ts +455 -0
  81. package/src/email/advanced/threading.ts +281 -0
  82. package/src/email/analytics.ts +467 -0
  83. package/src/email/bounce-handling.ts +425 -0
  84. package/src/email/email.test.ts +431 -0
  85. package/src/email/handlers/__tests__/inbound.test.ts +38 -0
  86. package/src/email/handlers/__tests__/outbound.test.ts +37 -0
  87. package/src/email/handlers/converter.ts +227 -0
  88. package/src/email/handlers/feedback.ts +228 -0
  89. package/src/email/handlers/inbound.ts +169 -0
  90. package/src/email/handlers/outbound.ts +178 -0
  91. package/src/email/index.ts +15 -0
  92. package/src/email/reputation.ts +303 -0
  93. package/src/email/templates.ts +352 -0
  94. package/src/errors/index.test.ts +434 -0
  95. package/src/errors/index.ts +416 -0
  96. package/src/health-checks/index.ts +40 -0
  97. package/src/index.ts +360 -0
  98. package/src/intrinsic-functions.ts +118 -0
  99. package/src/lambda/concurrency.ts +330 -0
  100. package/src/lambda/destinations.ts +345 -0
  101. package/src/lambda/dlq.ts +425 -0
  102. package/src/lambda/index.ts +11 -0
  103. package/src/lambda/lambda.test.ts +840 -0
  104. package/src/lambda/layers.ts +263 -0
  105. package/src/lambda/versions.ts +376 -0
  106. package/src/lambda/vpc.ts +399 -0
  107. package/src/local/config.ts +114 -0
  108. package/src/local/index.ts +6 -0
  109. package/src/local/mock-aws.ts +351 -0
  110. package/src/modules/ai.ts +340 -0
  111. package/src/modules/api.ts +478 -0
  112. package/src/modules/auth.ts +805 -0
  113. package/src/modules/cache.ts +417 -0
  114. package/src/modules/cdn.ts +1062 -0
  115. package/src/modules/communication.ts +1094 -0
  116. package/src/modules/compute.ts +3348 -0
  117. package/src/modules/database.ts +554 -0
  118. package/src/modules/deployment.ts +1079 -0
  119. package/src/modules/dns.ts +337 -0
  120. package/src/modules/email.ts +1538 -0
  121. package/src/modules/filesystem.ts +515 -0
  122. package/src/modules/index.ts +32 -0
  123. package/src/modules/messaging.ts +486 -0
  124. package/src/modules/monitoring.ts +2086 -0
  125. package/src/modules/network.ts +664 -0
  126. package/src/modules/parameter-store.ts +325 -0
  127. package/src/modules/permissions.ts +1081 -0
  128. package/src/modules/phone.ts +494 -0
  129. package/src/modules/queue.ts +1260 -0
  130. package/src/modules/redirects.ts +464 -0
  131. package/src/modules/registry.ts +699 -0
  132. package/src/modules/search.ts +401 -0
  133. package/src/modules/secrets.ts +416 -0
  134. package/src/modules/security.ts +731 -0
  135. package/src/modules/sms.ts +389 -0
  136. package/src/modules/storage.ts +1120 -0
  137. package/src/modules/workflow.ts +680 -0
  138. package/src/multi-account/config.ts +521 -0
  139. package/src/multi-account/index.ts +7 -0
  140. package/src/multi-account/manager.ts +427 -0
  141. package/src/multi-region/cross-region.ts +410 -0
  142. package/src/multi-region/index.ts +8 -0
  143. package/src/multi-region/manager.ts +483 -0
  144. package/src/multi-region/regions.ts +435 -0
  145. package/src/network-security/index.ts +48 -0
  146. package/src/observability/index.ts +9 -0
  147. package/src/observability/logs.ts +522 -0
  148. package/src/observability/metrics.ts +460 -0
  149. package/src/observability/observability.test.ts +782 -0
  150. package/src/observability/synthetics.ts +568 -0
  151. package/src/observability/xray.ts +358 -0
  152. package/src/phone/advanced/analytics.ts +349 -0
  153. package/src/phone/advanced/callbacks.ts +428 -0
  154. package/src/phone/advanced/index.ts +8 -0
  155. package/src/phone/advanced/ivr-builder.ts +504 -0
  156. package/src/phone/advanced/recording.ts +310 -0
  157. package/src/phone/handlers/__tests__/incoming-call.test.ts +40 -0
  158. package/src/phone/handlers/incoming-call.ts +117 -0
  159. package/src/phone/handlers/missed-call.ts +116 -0
  160. package/src/phone/handlers/voicemail.ts +179 -0
  161. package/src/phone/index.ts +9 -0
  162. package/src/presets/api-backend.ts +134 -0
  163. package/src/presets/data-pipeline.ts +204 -0
  164. package/src/presets/extend.test.ts +295 -0
  165. package/src/presets/extend.ts +297 -0
  166. package/src/presets/fullstack-app.ts +144 -0
  167. package/src/presets/index.ts +27 -0
  168. package/src/presets/jamstack.ts +135 -0
  169. package/src/presets/microservices.ts +167 -0
  170. package/src/presets/ml-api.ts +208 -0
  171. package/src/presets/nodejs-server.ts +104 -0
  172. package/src/presets/nodejs-serverless.ts +114 -0
  173. package/src/presets/realtime-app.ts +184 -0
  174. package/src/presets/static-site.ts +64 -0
  175. package/src/presets/traditional-web-app.ts +339 -0
  176. package/src/presets/wordpress.ts +138 -0
  177. package/src/preview/github.test.ts +249 -0
  178. package/src/preview/github.ts +297 -0
  179. package/src/preview/index.ts +37 -0
  180. package/src/preview/manager.test.ts +440 -0
  181. package/src/preview/manager.ts +326 -0
  182. package/src/preview/notifications.test.ts +582 -0
  183. package/src/preview/notifications.ts +341 -0
  184. package/src/queue/batch-processing.ts +402 -0
  185. package/src/queue/dlq-monitoring.ts +402 -0
  186. package/src/queue/fifo.ts +342 -0
  187. package/src/queue/index.ts +9 -0
  188. package/src/queue/management.ts +428 -0
  189. package/src/queue/queue.test.ts +429 -0
  190. package/src/resource-mgmt/index.ts +39 -0
  191. package/src/resource-naming.ts +62 -0
  192. package/src/s3/index.ts +523 -0
  193. package/src/schema/cloud-config.schema.json +554 -0
  194. package/src/schema/index.ts +68 -0
  195. package/src/security/certificate-manager.ts +492 -0
  196. package/src/security/index.ts +9 -0
  197. package/src/security/scanning.ts +545 -0
  198. package/src/security/secrets-manager.ts +476 -0
  199. package/src/security/secrets-rotation.ts +456 -0
  200. package/src/security/security.test.ts +738 -0
  201. package/src/sms/advanced/ab-testing.ts +389 -0
  202. package/src/sms/advanced/analytics.ts +336 -0
  203. package/src/sms/advanced/campaigns.ts +523 -0
  204. package/src/sms/advanced/chatbot.ts +224 -0
  205. package/src/sms/advanced/index.ts +10 -0
  206. package/src/sms/advanced/link-tracking.ts +248 -0
  207. package/src/sms/advanced/mms.ts +308 -0
  208. package/src/sms/handlers/__tests__/send.test.ts +40 -0
  209. package/src/sms/handlers/delivery-status.ts +133 -0
  210. package/src/sms/handlers/receive.ts +162 -0
  211. package/src/sms/handlers/send.ts +174 -0
  212. package/src/sms/index.ts +9 -0
  213. package/src/stack-diff.ts +389 -0
  214. package/src/static-site/index.ts +85 -0
  215. package/src/template-builder.ts +110 -0
  216. package/src/template-validator.ts +574 -0
  217. package/src/utils/cache.ts +291 -0
  218. package/src/utils/diff.ts +269 -0
  219. package/src/utils/hash.ts +227 -0
  220. package/src/utils/index.ts +8 -0
  221. package/src/utils/parallel.ts +294 -0
  222. package/src/validators/credentials.test.ts +274 -0
  223. package/src/validators/credentials.ts +233 -0
  224. package/src/validators/quotas.test.ts +434 -0
  225. package/src/validators/quotas.ts +217 -0
@@ -0,0 +1,416 @@
1
+ /**
2
+ * Container Build Optimization
3
+ * Multi-stage builds, layer caching, and build performance
4
+ */
5
+
6
+ export interface BuildConfig {
7
+ id: string
8
+ name: string
9
+ dockerfile: string
10
+ context: string
11
+ target?: string // Multi-stage build target
12
+ buildArgs?: Record<string, string>
13
+ labels?: Record<string, string>
14
+ cacheStrategy: CacheStrategy
15
+ platform?: string
16
+ }
17
+
18
+ export interface CacheStrategy {
19
+ type: 'inline' | 'registry' | 'local' | 's3'
20
+ cacheFrom?: string[]
21
+ cacheTo?: string
22
+ maxCacheAge?: number // days
23
+ }
24
+
25
+ export interface MultiStageConfig {
26
+ id: string
27
+ name: string
28
+ stages: BuildStage[]
29
+ targetStage?: string
30
+ }
31
+
32
+ export interface BuildStage {
33
+ name: string
34
+ baseImage: string
35
+ commands: string[]
36
+ copyFrom?: string[] // Copy artifacts from other stages
37
+ workdir?: string
38
+ env?: Record<string, string>
39
+ }
40
+
41
+ export interface BuildOptimization {
42
+ id: string
43
+ name: string
44
+ recommendations: OptimizationRecommendation[]
45
+ estimatedSavings: BuildSavings
46
+ }
47
+
48
+ export interface OptimizationRecommendation {
49
+ type: 'layer_reduction' | 'cache_optimization' | 'base_image' | 'dependencies'
50
+ priority: 'high' | 'medium' | 'low'
51
+ title: string
52
+ description: string
53
+ example?: string
54
+ impact: string
55
+ }
56
+
57
+ export interface BuildSavings {
58
+ sizeBefore: number // MB
59
+ sizeAfter: number // MB
60
+ timeBefore: number // seconds
61
+ timeAfter: number // seconds
62
+ }
63
+
64
+ export interface LayerAnalysis {
65
+ id: string
66
+ imageId: string
67
+ layers: ImageLayer[]
68
+ totalSize: number
69
+ unnecessaryLayers: number
70
+ }
71
+
72
+ export interface ImageLayer {
73
+ index: number
74
+ command: string
75
+ size: number // MB
76
+ created: Date
77
+ cacheable: boolean
78
+ }
79
+
80
+ /**
81
+ * Build optimization manager
82
+ */
83
+ export class BuildOptimizationManager {
84
+ private configs: Map<string, BuildConfig> = new Map()
85
+ private multiStageConfigs: Map<string, MultiStageConfig> = new Map()
86
+ private optimizations: Map<string, BuildOptimization> = new Map()
87
+ private analyses: Map<string, LayerAnalysis> = new Map()
88
+ private configCounter = 0
89
+ private multiStageCounter = 0
90
+ private optimizationCounter = 0
91
+ private analysisCounter = 0
92
+
93
+ /**
94
+ * Create build config
95
+ */
96
+ createBuildConfig(config: Omit<BuildConfig, 'id'>): BuildConfig {
97
+ const id = `build-config-${Date.now()}-${this.configCounter++}`
98
+
99
+ const buildConfig: BuildConfig = {
100
+ id,
101
+ ...config,
102
+ }
103
+
104
+ this.configs.set(id, buildConfig)
105
+
106
+ return buildConfig
107
+ }
108
+
109
+ /**
110
+ * Create optimized build config
111
+ */
112
+ createOptimizedBuildConfig(options: {
113
+ name: string
114
+ dockerfile: string
115
+ enableCache?: boolean
116
+ registry?: string
117
+ }): BuildConfig {
118
+ const cacheStrategy: CacheStrategy = {
119
+ type: options.enableCache ? 'registry' : 'inline',
120
+ cacheFrom: options.registry ? [`${options.registry}/cache`] : undefined,
121
+ cacheTo: options.registry ? `${options.registry}/cache` : undefined,
122
+ maxCacheAge: 7,
123
+ }
124
+
125
+ return this.createBuildConfig({
126
+ name: options.name,
127
+ dockerfile: options.dockerfile,
128
+ context: '.',
129
+ cacheStrategy,
130
+ buildArgs: {
131
+ BUILDKIT_INLINE_CACHE: '1',
132
+ },
133
+ })
134
+ }
135
+
136
+ /**
137
+ * Create multi-stage config
138
+ */
139
+ createMultiStageConfig(config: Omit<MultiStageConfig, 'id'>): MultiStageConfig {
140
+ const id = `multi-stage-${Date.now()}-${this.multiStageCounter++}`
141
+
142
+ const multiStageConfig: MultiStageConfig = {
143
+ id,
144
+ ...config,
145
+ }
146
+
147
+ this.multiStageConfigs.set(id, multiStageConfig)
148
+
149
+ return multiStageConfig
150
+ }
151
+
152
+ /**
153
+ * Create Node.js multi-stage build
154
+ */
155
+ createNodeMultiStageBuild(options: {
156
+ name: string
157
+ nodeVersion?: string
158
+ targetStage?: 'production' | 'development'
159
+ }): MultiStageConfig {
160
+ const nodeVersion = options.nodeVersion || '18-alpine'
161
+
162
+ return this.createMultiStageConfig({
163
+ name: options.name,
164
+ targetStage: options.targetStage || 'production',
165
+ stages: [
166
+ {
167
+ name: 'dependencies',
168
+ baseImage: `node:${nodeVersion}`,
169
+ workdir: '/app',
170
+ commands: [
171
+ 'COPY package*.json ./',
172
+ 'RUN npm ci --only=production',
173
+ ],
174
+ },
175
+ {
176
+ name: 'build',
177
+ baseImage: `node:${nodeVersion}`,
178
+ workdir: '/app',
179
+ commands: [
180
+ 'COPY package*.json ./',
181
+ 'RUN npm ci',
182
+ 'COPY . .',
183
+ 'RUN npm run build',
184
+ ],
185
+ },
186
+ {
187
+ name: 'production',
188
+ baseImage: `node:${nodeVersion}`,
189
+ workdir: '/app',
190
+ copyFrom: ['dependencies:/app/node_modules', 'build:/app/dist'],
191
+ commands: [
192
+ 'COPY package*.json ./',
193
+ 'ENV NODE_ENV=production',
194
+ 'CMD ["node", "dist/index.js"]',
195
+ ],
196
+ },
197
+ ],
198
+ })
199
+ }
200
+
201
+ /**
202
+ * Generate Dockerfile from multi-stage config
203
+ */
204
+ generateDockerfile(configId: string): string {
205
+ const config = this.multiStageConfigs.get(configId)
206
+
207
+ if (!config) {
208
+ throw new Error(`Multi-stage config not found: ${configId}`)
209
+ }
210
+
211
+ const lines: string[] = []
212
+
213
+ for (const stage of config.stages) {
214
+ lines.push(`# Stage: ${stage.name}`)
215
+ lines.push(`FROM ${stage.baseImage} AS ${stage.name}`)
216
+
217
+ if (stage.workdir) {
218
+ lines.push(`WORKDIR ${stage.workdir}`)
219
+ }
220
+
221
+ if (stage.env) {
222
+ for (const [key, value] of Object.entries(stage.env)) {
223
+ lines.push(`ENV ${key}=${value}`)
224
+ }
225
+ }
226
+
227
+ for (const command of stage.commands) {
228
+ lines.push(command)
229
+ }
230
+
231
+ lines.push('')
232
+ }
233
+
234
+ return lines.join('\n')
235
+ }
236
+
237
+ /**
238
+ * Analyze image layers
239
+ */
240
+ analyzeImage(imageId: string, layers: Omit<ImageLayer, 'cacheable'>[]): LayerAnalysis {
241
+ const id = `analysis-${Date.now()}-${this.analysisCounter++}`
242
+
243
+ const analyzedLayers: ImageLayer[] = layers.map(layer => ({
244
+ ...layer,
245
+ cacheable: this.isLayerCacheable(layer.command),
246
+ }))
247
+
248
+ const totalSize = analyzedLayers.reduce((sum, layer) => sum + layer.size, 0)
249
+ const unnecessaryLayers = analyzedLayers.filter(
250
+ layer => !layer.cacheable && layer.size > 100
251
+ ).length
252
+
253
+ const analysis: LayerAnalysis = {
254
+ id,
255
+ imageId,
256
+ layers: analyzedLayers,
257
+ totalSize,
258
+ unnecessaryLayers,
259
+ }
260
+
261
+ this.analyses.set(id, analysis)
262
+
263
+ return analysis
264
+ }
265
+
266
+ /**
267
+ * Check if layer is cacheable
268
+ */
269
+ private isLayerCacheable(command: string): boolean {
270
+ const cacheableCommands = ['FROM', 'RUN', 'COPY', 'ADD', 'WORKDIR', 'ENV']
271
+ const nonCacheableCommands = ['CMD', 'ENTRYPOINT', 'LABEL']
272
+
273
+ for (const cmd of cacheableCommands) {
274
+ if (command.startsWith(cmd)) return true
275
+ }
276
+
277
+ for (const cmd of nonCacheableCommands) {
278
+ if (command.startsWith(cmd)) return false
279
+ }
280
+
281
+ return false
282
+ }
283
+
284
+ /**
285
+ * Generate optimization recommendations
286
+ */
287
+ generateOptimizations(analysisId: string): BuildOptimization {
288
+ const analysis = this.analyses.get(analysisId)
289
+
290
+ if (!analysis) {
291
+ throw new Error(`Analysis not found: ${analysisId}`)
292
+ }
293
+
294
+ const id = `optimization-${Date.now()}-${this.optimizationCounter++}`
295
+
296
+ const recommendations: OptimizationRecommendation[] = []
297
+
298
+ // Check for layer reduction opportunities
299
+ const runLayers = analysis.layers.filter(l => l.command.startsWith('RUN'))
300
+ if (runLayers.length > 5) {
301
+ recommendations.push({
302
+ type: 'layer_reduction',
303
+ priority: 'high',
304
+ title: 'Combine RUN commands',
305
+ description: `${runLayers.length} RUN commands found. Combine them to reduce layers.`,
306
+ example: 'RUN apt-get update && apt-get install -y package1 package2',
307
+ impact: 'Reduce image size by 20-30% and improve build time',
308
+ })
309
+ }
310
+
311
+ // Check for base image optimization
312
+ const baseLayer = analysis.layers[0]
313
+ if (baseLayer.command.includes('ubuntu') || baseLayer.command.includes('debian')) {
314
+ recommendations.push({
315
+ type: 'base_image',
316
+ priority: 'medium',
317
+ title: 'Use Alpine base image',
318
+ description: 'Switch to Alpine Linux for smaller image size',
319
+ example: 'FROM node:18-alpine',
320
+ impact: 'Reduce image size by 50-70%',
321
+ })
322
+ }
323
+
324
+ // Check for cache optimization
325
+ const copyLayers = analysis.layers.filter(l => l.command.startsWith('COPY'))
326
+ if (copyLayers.length > 0 && copyLayers[0].index > 3) {
327
+ recommendations.push({
328
+ type: 'cache_optimization',
329
+ priority: 'high',
330
+ title: 'Copy dependencies first',
331
+ description: 'Copy package files before source code to leverage layer caching',
332
+ example: 'COPY package*.json ./\nRUN npm install\nCOPY . .',
333
+ impact: 'Improve build time by 60-80% on subsequent builds',
334
+ })
335
+ }
336
+
337
+ const estimatedSavings: BuildSavings = {
338
+ sizeBefore: analysis.totalSize,
339
+ sizeAfter: analysis.totalSize * 0.6, // Estimated 40% reduction
340
+ timeBefore: 300, // 5 minutes
341
+ timeAfter: 120, // 2 minutes
342
+ }
343
+
344
+ const optimization: BuildOptimization = {
345
+ id,
346
+ name: `Optimization for ${analysis.imageId}`,
347
+ recommendations,
348
+ estimatedSavings,
349
+ }
350
+
351
+ this.optimizations.set(id, optimization)
352
+
353
+ return optimization
354
+ }
355
+
356
+ /**
357
+ * Get build config
358
+ */
359
+ getBuildConfig(id: string): BuildConfig | undefined {
360
+ return this.configs.get(id)
361
+ }
362
+
363
+ /**
364
+ * List build configs
365
+ */
366
+ listBuildConfigs(): BuildConfig[] {
367
+ return Array.from(this.configs.values())
368
+ }
369
+
370
+ /**
371
+ * Get multi-stage config
372
+ */
373
+ getMultiStageConfig(id: string): MultiStageConfig | undefined {
374
+ return this.multiStageConfigs.get(id)
375
+ }
376
+
377
+ /**
378
+ * List multi-stage configs
379
+ */
380
+ listMultiStageConfigs(): MultiStageConfig[] {
381
+ return Array.from(this.multiStageConfigs.values())
382
+ }
383
+
384
+ /**
385
+ * Get optimization
386
+ */
387
+ getOptimization(id: string): BuildOptimization | undefined {
388
+ return this.optimizations.get(id)
389
+ }
390
+
391
+ /**
392
+ * List optimizations
393
+ */
394
+ listOptimizations(): BuildOptimization[] {
395
+ return Array.from(this.optimizations.values())
396
+ }
397
+
398
+ /**
399
+ * Clear all data
400
+ */
401
+ clear(): void {
402
+ this.configs.clear()
403
+ this.multiStageConfigs.clear()
404
+ this.optimizations.clear()
405
+ this.analyses.clear()
406
+ this.configCounter = 0
407
+ this.multiStageCounter = 0
408
+ this.optimizationCounter = 0
409
+ this.analysisCounter = 0
410
+ }
411
+ }
412
+
413
+ /**
414
+ * Global build optimization manager instance
415
+ */
416
+ export const buildOptimizationManager: BuildOptimizationManager = new BuildOptimizationManager()