@friggframework/devtools 2.0.0--canary.461.849e166.0 → 2.0.0--canary.474.aa465e4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/infrastructure/ARCHITECTURE.md +487 -0
- package/infrastructure/domains/database/aurora-builder.js +234 -57
- package/infrastructure/domains/database/aurora-builder.test.js +7 -2
- package/infrastructure/domains/database/aurora-resolver.js +210 -0
- package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
- package/infrastructure/domains/database/migration-builder.js +256 -215
- package/infrastructure/domains/database/migration-builder.test.js +5 -111
- package/infrastructure/domains/database/migration-resolver.js +163 -0
- package/infrastructure/domains/database/migration-resolver.test.js +337 -0
- package/infrastructure/domains/integration/integration-builder.js +258 -84
- package/infrastructure/domains/integration/integration-resolver.js +170 -0
- package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
- package/infrastructure/domains/networking/vpc-builder.js +856 -135
- package/infrastructure/domains/networking/vpc-builder.test.js +10 -6
- package/infrastructure/domains/networking/vpc-resolver.js +324 -0
- package/infrastructure/domains/networking/vpc-resolver.test.js +501 -0
- package/infrastructure/domains/security/kms-builder.js +179 -22
- package/infrastructure/domains/security/kms-resolver.js +96 -0
- package/infrastructure/domains/security/kms-resolver.test.js +216 -0
- package/infrastructure/domains/shared/base-resolver.js +186 -0
- package/infrastructure/domains/shared/base-resolver.test.js +305 -0
- package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
- package/infrastructure/domains/shared/cloudformation-discovery.test.js +26 -1
- package/infrastructure/domains/shared/types/app-definition.js +205 -0
- package/infrastructure/domains/shared/types/discovery-result.js +106 -0
- package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
- package/infrastructure/domains/shared/types/index.js +46 -0
- package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
- package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
- package/package.json +6 -6
- package/infrastructure/REFACTOR.md +0 -532
- package/infrastructure/TRANSFORMATION-VISUAL.md +0 -239
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# Infrastructure Transformation - Before & After
|
|
2
|
-
|
|
3
|
-
## 📉 Before: Monolithic Architecture
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
infrastructure/
|
|
7
|
-
├── serverless-template.js ⚠️ (506 lines - massive!)
|
|
8
|
-
├── aws-discovery.js ⚠️ (1700 lines - AWS-coupled!)
|
|
9
|
-
├── iam-generator.js (scattered)
|
|
10
|
-
├── env-validator.js (scattered)
|
|
11
|
-
├── build-time-discovery.js
|
|
12
|
-
├── run-discovery.js
|
|
13
|
-
└── create-frigg-infrastructure.js
|
|
14
|
-
|
|
15
|
-
Total: ~2400 lines in 7 loosely organized files
|
|
16
|
-
Issues: Tightly coupled, AWS-only, hard to test, hard to extend
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 📈 After: Domain-Driven Hexagonal Architecture
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
infrastructure/
|
|
25
|
-
├── 🎯 infrastructure-composer.js (85 lines - 83% smaller!)
|
|
26
|
-
│
|
|
27
|
-
├── 📁 domains/
|
|
28
|
-
│ ├── database/
|
|
29
|
-
│ │ ├── aurora-builder.js
|
|
30
|
-
│ │ ├── aurora-discovery.js
|
|
31
|
-
│ │ └── *.test.js (✅ tests)
|
|
32
|
-
│ │
|
|
33
|
-
│ ├── integration/
|
|
34
|
-
│ │ ├── integration-builder.js
|
|
35
|
-
│ │ ├── websocket-builder.js
|
|
36
|
-
│ │ └── *.test.js (✅ tests)
|
|
37
|
-
│ │
|
|
38
|
-
│ ├── networking/
|
|
39
|
-
│ │ ├── vpc-builder.js
|
|
40
|
-
│ │ ├── vpc-discovery.js
|
|
41
|
-
│ │ └── *.test.js (✅ tests)
|
|
42
|
-
│ │
|
|
43
|
-
│ ├── parameters/
|
|
44
|
-
│ │ ├── ssm-builder.js
|
|
45
|
-
│ │ ├── ssm-discovery.js
|
|
46
|
-
│ │ └── *.test.js (✅ tests)
|
|
47
|
-
│ │
|
|
48
|
-
│ ├── security/
|
|
49
|
-
│ │ ├── kms-builder.js
|
|
50
|
-
│ │ ├── kms-discovery.js
|
|
51
|
-
│ │ ├── iam-generator.js
|
|
52
|
-
│ │ └── *.test.js (✅ tests)
|
|
53
|
-
│ │
|
|
54
|
-
│ └── shared/
|
|
55
|
-
│ ├── base-builder.js
|
|
56
|
-
│ ├── builder-orchestrator.js
|
|
57
|
-
│ ├── environment-builder.js
|
|
58
|
-
│ ├── resource-discovery.js
|
|
59
|
-
│ │
|
|
60
|
-
│ ├── 🌐 providers/ (MULTI-CLOUD!)
|
|
61
|
-
│ │ ├── cloud-provider-adapter.js (interface)
|
|
62
|
-
│ │ ├── provider-factory.js
|
|
63
|
-
│ │ ├── aws-provider-adapter.js (✅ AWS)
|
|
64
|
-
│ │ ├── gcp-provider-adapter.stub.js (🔜 GCP)
|
|
65
|
-
│ │ └── azure-provider-adapter.stub.js (🔜 Azure)
|
|
66
|
-
│ │
|
|
67
|
-
│ ├── utilities/
|
|
68
|
-
│ │ ├── handler-path-resolver.js
|
|
69
|
-
│ │ ├── base-definition-factory.js
|
|
70
|
-
│ │ └── prisma-layer-manager.js
|
|
71
|
-
│ │
|
|
72
|
-
│ └── validation/
|
|
73
|
-
│ └── env-validator.js
|
|
74
|
-
│
|
|
75
|
-
├── 📜 scripts/
|
|
76
|
-
│ ├── build-prisma-layer.js
|
|
77
|
-
│ ├── run-discovery.js
|
|
78
|
-
│ └── build-time-discovery.js
|
|
79
|
-
│
|
|
80
|
-
└── 📄 create-frigg-infrastructure.js
|
|
81
|
-
|
|
82
|
-
Total: ~2400 lines in 44 well-organized files
|
|
83
|
-
Benefits: Loosely coupled, multi-cloud ready, testable, extensible
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## 🔄 Transformation Flow
|
|
89
|
-
|
|
90
|
-
### Before: Tight Coupling
|
|
91
|
-
```
|
|
92
|
-
User Code
|
|
93
|
-
↓
|
|
94
|
-
serverless-template.js (506 lines)
|
|
95
|
-
↓
|
|
96
|
-
aws-discovery.js (1700 lines)
|
|
97
|
-
↓
|
|
98
|
-
AWS SDK (EC2, KMS, RDS, SSM)
|
|
99
|
-
↓
|
|
100
|
-
AWS Cloud
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### After: Hexagonal Architecture
|
|
104
|
-
```
|
|
105
|
-
User Code
|
|
106
|
-
↓
|
|
107
|
-
infrastructure-composer.js (85 lines)
|
|
108
|
-
↓
|
|
109
|
-
BuilderOrchestrator
|
|
110
|
-
↓
|
|
111
|
-
[VpcBuilder] [KmsBuilder] [AuroraBuilder] [SsmBuilder]
|
|
112
|
-
↓
|
|
113
|
-
[VpcDiscovery] [KmsDiscovery] [AuroraDiscovery] [SsmDiscovery]
|
|
114
|
-
↓
|
|
115
|
-
CloudProviderAdapter (INTERFACE)
|
|
116
|
-
↓
|
|
117
|
-
[AWSAdapter] | [GCPAdapter] | [AzureAdapter]
|
|
118
|
-
↓
|
|
119
|
-
[AWS APIs] | [GCP APIs] | [Azure APIs]
|
|
120
|
-
↓
|
|
121
|
-
[AWS] | [GCP] | [Azure]
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## 📊 Impact Comparison
|
|
127
|
-
|
|
128
|
-
| Aspect | Before | After | Improvement |
|
|
129
|
-
|--------|--------|-------|-------------|
|
|
130
|
-
| **Main File Size** | 506 lines | 85 lines | ✅ 83% reduction |
|
|
131
|
-
| **Largest File** | 1700 lines | <200 lines | ✅ 88% reduction |
|
|
132
|
-
| **Cloud Support** | AWS only | AWS + GCP/Azure ready | ✅ Multi-cloud |
|
|
133
|
-
| **Testability** | Hard | Easy | ✅ DI + mocks |
|
|
134
|
-
| **Domain Separation** | None | 5 clear domains | ✅ DDD |
|
|
135
|
-
| **File Count** | 7 files | 44 files | ✅ Organized |
|
|
136
|
-
| **Test Coverage** | Existing | +350 new tests | ✅ Comprehensive |
|
|
137
|
-
| **Maintainability** | Difficult | Easy | ✅ Clear structure |
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 🎯 Developer Experience
|
|
142
|
-
|
|
143
|
-
### Before:
|
|
144
|
-
```bash
|
|
145
|
-
# Where do I add GCP support?
|
|
146
|
-
# → Nowhere, architecture doesn't support it
|
|
147
|
-
|
|
148
|
-
# Where's the VPC code?
|
|
149
|
-
# → Somewhere in 1700 lines of aws-discovery.js
|
|
150
|
-
|
|
151
|
-
# How do I test this?
|
|
152
|
-
# → Mock the entire AWS SDK? Good luck!
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### After:
|
|
156
|
-
```bash
|
|
157
|
-
# Where do I add GCP support?
|
|
158
|
-
# → Just implement GCPProviderAdapter!
|
|
159
|
-
|
|
160
|
-
# Where's the VPC code?
|
|
161
|
-
# → domains/networking/vpc-builder.js and vpc-discovery.js
|
|
162
|
-
|
|
163
|
-
# How do I test this?
|
|
164
|
-
# → Mock the provider interface - super clean!
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## 🚀 Multi-Cloud Example
|
|
170
|
-
|
|
171
|
-
### AWS (Now):
|
|
172
|
-
```javascript
|
|
173
|
-
export CLOUD_PROVIDER=aws
|
|
174
|
-
export AWS_REGION=us-east-1
|
|
175
|
-
frigg deploy
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### GCP (Future - just implement the adapter):
|
|
179
|
-
```javascript
|
|
180
|
-
export CLOUD_PROVIDER=gcp
|
|
181
|
-
export GCP_REGION=us-central1
|
|
182
|
-
frigg deploy
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### Azure (Future - just implement the adapter):
|
|
186
|
-
```javascript
|
|
187
|
-
export CLOUD_PROVIDER=azure
|
|
188
|
-
export AZURE_REGION=eastus
|
|
189
|
-
frigg deploy
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**Same code, different clouds!** ✨
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## 📈 Code Quality Metrics
|
|
197
|
-
|
|
198
|
-
### Cyclomatic Complexity:
|
|
199
|
-
- **Before:** High (monolithic functions)
|
|
200
|
-
- **After:** Low (focused, single-purpose methods)
|
|
201
|
-
|
|
202
|
-
### Coupling:
|
|
203
|
-
- **Before:** Tight (direct AWS SDK dependencies everywhere)
|
|
204
|
-
- **After:** Loose (dependency injection, interfaces)
|
|
205
|
-
|
|
206
|
-
### Cohesion:
|
|
207
|
-
- **Before:** Low (mixed concerns)
|
|
208
|
-
- **After:** High (clear domain boundaries)
|
|
209
|
-
|
|
210
|
-
### Testability Score:
|
|
211
|
-
- **Before:** 3/10 (hard to mock, hard to isolate)
|
|
212
|
-
- **After:** 9/10 (easy mocks, clean isolation)
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## 🎓 Lessons Learned
|
|
217
|
-
|
|
218
|
-
1. **Plan for multi-cloud early** - Adding abstraction during refactor is 10x easier than retrofitting
|
|
219
|
-
2. **DDD pays off** - Clear domains make everything easier
|
|
220
|
-
3. **Hexagonal Architecture works** - Ports & adapters pattern is perfect for infrastructure
|
|
221
|
-
4. **Start with the interface** - Define CloudProviderAdapter first, implement AWS second
|
|
222
|
-
5. **Tests drive design** - Writing tests reveals design issues early
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## ✨ The Transformation in Numbers
|
|
227
|
-
|
|
228
|
-
- **2,206 lines** of monolithic code → **44 focused files**
|
|
229
|
-
- **1 cloud provider** → **3 clouds supported** (1 implemented, 2 ready)
|
|
230
|
-
- **0 tests** for new architecture → **350+ tests created**
|
|
231
|
-
- **7 scattered files** → **9 organized domains**
|
|
232
|
-
- **506-line monster** → **85-line masterpiece**
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
**From monolithic to modular. From AWS-only to multi-cloud. From hard to test to easy to test.**
|
|
237
|
-
|
|
238
|
-
**That's the power of good architecture!** 🏗️✨
|
|
239
|
-
|