@friggframework/devtools 2.0.0-next.45 → 2.0.0-next.47

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 (212) hide show
  1. package/infrastructure/ARCHITECTURE.md +487 -0
  2. package/infrastructure/HEALTH.md +468 -0
  3. package/infrastructure/README.md +51 -0
  4. package/infrastructure/__tests__/postgres-config.test.js +914 -0
  5. package/infrastructure/__tests__/template-generation.test.js +687 -0
  6. package/infrastructure/create-frigg-infrastructure.js +1 -1
  7. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
  8. package/infrastructure/{DEPLOYMENT-INSTRUCTIONS.md → docs/deployment-instructions.md} +3 -3
  9. package/infrastructure/{IAM-POLICY-TEMPLATES.md → docs/iam-policy-templates.md} +9 -10
  10. package/infrastructure/domains/database/aurora-builder.js +809 -0
  11. package/infrastructure/domains/database/aurora-builder.test.js +950 -0
  12. package/infrastructure/domains/database/aurora-discovery.js +87 -0
  13. package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
  14. package/infrastructure/domains/database/aurora-resolver.js +210 -0
  15. package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
  16. package/infrastructure/domains/database/migration-builder.js +695 -0
  17. package/infrastructure/domains/database/migration-builder.test.js +294 -0
  18. package/infrastructure/domains/database/migration-resolver.js +163 -0
  19. package/infrastructure/domains/database/migration-resolver.test.js +337 -0
  20. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
  21. package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
  22. package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
  23. package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
  24. package/infrastructure/domains/health/application/ports/index.js +26 -0
  25. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
  26. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
  27. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
  28. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
  29. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
  30. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
  31. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
  32. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
  33. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
  34. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
  35. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
  36. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
  37. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
  38. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
  39. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
  40. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
  41. package/infrastructure/domains/health/domain/entities/issue.js +299 -0
  42. package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
  43. package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
  44. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
  45. package/infrastructure/domains/health/domain/entities/resource.js +159 -0
  46. package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
  47. package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
  48. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
  49. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
  50. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
  51. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
  52. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
  53. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
  54. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
  55. package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
  56. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
  57. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
  58. package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
  59. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
  60. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
  61. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
  62. package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
  63. package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
  64. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
  65. package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
  66. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
  67. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
  68. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
  69. package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
  70. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
  71. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
  72. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
  73. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
  74. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
  75. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
  76. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
  77. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
  78. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
  79. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
  80. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
  81. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
  82. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
  83. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
  84. package/infrastructure/domains/integration/integration-builder.js +397 -0
  85. package/infrastructure/domains/integration/integration-builder.test.js +593 -0
  86. package/infrastructure/domains/integration/integration-resolver.js +170 -0
  87. package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
  88. package/infrastructure/domains/integration/websocket-builder.js +69 -0
  89. package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
  90. package/infrastructure/domains/networking/vpc-builder.js +1829 -0
  91. package/infrastructure/domains/networking/vpc-builder.test.js +1262 -0
  92. package/infrastructure/domains/networking/vpc-discovery.js +177 -0
  93. package/infrastructure/domains/networking/vpc-discovery.test.js +350 -0
  94. package/infrastructure/domains/networking/vpc-resolver.js +324 -0
  95. package/infrastructure/domains/networking/vpc-resolver.test.js +501 -0
  96. package/infrastructure/domains/parameters/ssm-builder.js +79 -0
  97. package/infrastructure/domains/parameters/ssm-builder.test.js +189 -0
  98. package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
  99. package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
  100. package/infrastructure/{iam-generator.js → domains/security/iam-generator.js} +2 -2
  101. package/infrastructure/domains/security/kms-builder.js +366 -0
  102. package/infrastructure/domains/security/kms-builder.test.js +374 -0
  103. package/infrastructure/domains/security/kms-discovery.js +80 -0
  104. package/infrastructure/domains/security/kms-discovery.test.js +177 -0
  105. package/infrastructure/domains/security/kms-resolver.js +96 -0
  106. package/infrastructure/domains/security/kms-resolver.test.js +216 -0
  107. package/infrastructure/domains/shared/base-builder.js +112 -0
  108. package/infrastructure/domains/shared/base-resolver.js +186 -0
  109. package/infrastructure/domains/shared/base-resolver.test.js +305 -0
  110. package/infrastructure/domains/shared/builder-orchestrator.js +212 -0
  111. package/infrastructure/domains/shared/builder-orchestrator.test.js +213 -0
  112. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
  113. package/infrastructure/domains/shared/cloudformation-discovery.js +375 -0
  114. package/infrastructure/domains/shared/cloudformation-discovery.test.js +590 -0
  115. package/infrastructure/domains/shared/environment-builder.js +119 -0
  116. package/infrastructure/domains/shared/environment-builder.test.js +247 -0
  117. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +544 -0
  118. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +377 -0
  119. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
  120. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
  121. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
  122. package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
  123. package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
  124. package/infrastructure/domains/shared/resource-discovery.js +192 -0
  125. package/infrastructure/domains/shared/resource-discovery.test.js +552 -0
  126. package/infrastructure/domains/shared/types/app-definition.js +205 -0
  127. package/infrastructure/domains/shared/types/discovery-result.js +106 -0
  128. package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
  129. package/infrastructure/domains/shared/types/index.js +46 -0
  130. package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
  131. package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
  132. package/infrastructure/domains/shared/utilities/base-definition-factory.js +380 -0
  133. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
  134. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +248 -0
  135. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
  136. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
  137. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +55 -0
  138. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +138 -0
  139. package/infrastructure/{env-validator.js → domains/shared/validation/env-validator.js} +2 -1
  140. package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
  141. package/infrastructure/esbuild.config.js +53 -0
  142. package/infrastructure/infrastructure-composer.js +87 -0
  143. package/infrastructure/{serverless-template.test.js → infrastructure-composer.test.js} +115 -24
  144. package/infrastructure/scripts/build-prisma-layer.js +553 -0
  145. package/infrastructure/scripts/build-prisma-layer.test.js +102 -0
  146. package/infrastructure/{build-time-discovery.js → scripts/build-time-discovery.js} +80 -48
  147. package/infrastructure/{build-time-discovery.test.js → scripts/build-time-discovery.test.js} +5 -4
  148. package/layers/prisma/nodejs/package.json +8 -0
  149. package/management-ui/server/utils/cliIntegration.js +1 -1
  150. package/management-ui/server/utils/environment/awsParameterStore.js +29 -18
  151. package/package.json +11 -11
  152. package/frigg-cli/.eslintrc.js +0 -141
  153. package/frigg-cli/__tests__/unit/commands/build.test.js +0 -251
  154. package/frigg-cli/__tests__/unit/commands/db-setup.test.js +0 -548
  155. package/frigg-cli/__tests__/unit/commands/install.test.js +0 -400
  156. package/frigg-cli/__tests__/unit/commands/ui.test.js +0 -346
  157. package/frigg-cli/__tests__/unit/utils/database-validator.test.js +0 -366
  158. package/frigg-cli/__tests__/unit/utils/error-messages.test.js +0 -304
  159. package/frigg-cli/__tests__/unit/utils/prisma-runner.test.js +0 -486
  160. package/frigg-cli/__tests__/utils/mock-factory.js +0 -270
  161. package/frigg-cli/__tests__/utils/prisma-mock.js +0 -194
  162. package/frigg-cli/__tests__/utils/test-fixtures.js +0 -463
  163. package/frigg-cli/__tests__/utils/test-setup.js +0 -287
  164. package/frigg-cli/build-command/index.js +0 -65
  165. package/frigg-cli/db-setup-command/index.js +0 -193
  166. package/frigg-cli/deploy-command/index.js +0 -175
  167. package/frigg-cli/generate-command/__tests__/generate-command.test.js +0 -301
  168. package/frigg-cli/generate-command/azure-generator.js +0 -43
  169. package/frigg-cli/generate-command/gcp-generator.js +0 -47
  170. package/frigg-cli/generate-command/index.js +0 -332
  171. package/frigg-cli/generate-command/terraform-generator.js +0 -555
  172. package/frigg-cli/generate-iam-command.js +0 -118
  173. package/frigg-cli/index.js +0 -75
  174. package/frigg-cli/index.test.js +0 -158
  175. package/frigg-cli/init-command/backend-first-handler.js +0 -756
  176. package/frigg-cli/init-command/index.js +0 -93
  177. package/frigg-cli/init-command/template-handler.js +0 -143
  178. package/frigg-cli/install-command/backend-js.js +0 -33
  179. package/frigg-cli/install-command/commit-changes.js +0 -16
  180. package/frigg-cli/install-command/environment-variables.js +0 -127
  181. package/frigg-cli/install-command/environment-variables.test.js +0 -136
  182. package/frigg-cli/install-command/index.js +0 -54
  183. package/frigg-cli/install-command/install-package.js +0 -13
  184. package/frigg-cli/install-command/integration-file.js +0 -30
  185. package/frigg-cli/install-command/logger.js +0 -12
  186. package/frigg-cli/install-command/template.js +0 -90
  187. package/frigg-cli/install-command/validate-package.js +0 -75
  188. package/frigg-cli/jest.config.js +0 -124
  189. package/frigg-cli/package.json +0 -54
  190. package/frigg-cli/start-command/index.js +0 -149
  191. package/frigg-cli/start-command/start-command.test.js +0 -297
  192. package/frigg-cli/test/init-command.test.js +0 -180
  193. package/frigg-cli/test/npm-registry.test.js +0 -319
  194. package/frigg-cli/ui-command/index.js +0 -154
  195. package/frigg-cli/utils/app-resolver.js +0 -319
  196. package/frigg-cli/utils/backend-path.js +0 -25
  197. package/frigg-cli/utils/database-validator.js +0 -161
  198. package/frigg-cli/utils/error-messages.js +0 -257
  199. package/frigg-cli/utils/npm-registry.js +0 -167
  200. package/frigg-cli/utils/prisma-runner.js +0 -280
  201. package/frigg-cli/utils/process-manager.js +0 -199
  202. package/frigg-cli/utils/repo-detection.js +0 -405
  203. package/infrastructure/aws-discovery.js +0 -1176
  204. package/infrastructure/aws-discovery.test.js +0 -1220
  205. package/infrastructure/serverless-template.js +0 -2094
  206. /package/infrastructure/{WEBSOCKET-CONFIGURATION.md → docs/WEBSOCKET-CONFIGURATION.md} +0 -0
  207. /package/infrastructure/{GENERATE-IAM-DOCS.md → docs/generate-iam-command.md} +0 -0
  208. /package/infrastructure/{iam-generator.test.js → domains/security/iam-generator.test.js} +0 -0
  209. /package/infrastructure/{frigg-deployment-iam-stack.yaml → domains/security/templates/frigg-deployment-iam-stack.yaml} +0 -0
  210. /package/infrastructure/{iam-policy-basic.json → domains/security/templates/iam-policy-basic.json} +0 -0
  211. /package/infrastructure/{iam-policy-full.json → domains/security/templates/iam-policy-full.json} +0 -0
  212. /package/infrastructure/{run-discovery.js → scripts/run-discovery.js} +0 -0
@@ -1,463 +0,0 @@
1
- /**
2
- * TestFixtures - Centralized test data and fixtures
3
- * Provides consistent test data across all CLI tests
4
- */
5
- class TestFixtures {
6
- /**
7
- * Get sample package.json configurations
8
- */
9
- static get packageConfigs() {
10
- return {
11
- valid: {
12
- name: 'test-frigg-app',
13
- version: '1.0.0',
14
- description: 'Test Frigg application',
15
- main: 'index.js',
16
- scripts: {
17
- start: 'node index.js',
18
- test: 'jest',
19
- build: 'webpack --mode production'
20
- },
21
- dependencies: {
22
- '@friggframework/core': '^1.0.0',
23
- 'express': '^4.18.0'
24
- },
25
- devDependencies: {
26
- 'jest': '^29.0.0',
27
- 'webpack': '^5.0.0'
28
- },
29
- frigg: {
30
- stage: 'dev',
31
- region: 'us-east-1'
32
- }
33
- },
34
-
35
- invalid: {
36
- name: '', // Invalid name
37
- version: 'not-semver', // Invalid version
38
- main: 'non-existent.js'
39
- },
40
-
41
- minimal: {
42
- name: 'minimal-app',
43
- version: '1.0.0',
44
- main: 'index.js'
45
- },
46
-
47
- withFriggConfig: {
48
- name: 'frigg-configured-app',
49
- version: '1.0.0',
50
- main: 'index.js',
51
- frigg: {
52
- stage: 'production',
53
- region: 'eu-west-1',
54
- profile: 'production',
55
- backend: {
56
- runtime: 'nodejs18.x',
57
- timeout: 30,
58
- memory: 256
59
- }
60
- }
61
- }
62
- };
63
- }
64
-
65
- /**
66
- * Get sample Frigg configuration files
67
- */
68
- static get friggConfigs() {
69
- return {
70
- development: {
71
- stage: 'dev',
72
- region: 'us-east-1',
73
- profile: 'default',
74
- backend: {
75
- runtime: 'nodejs18.x',
76
- timeout: 30,
77
- memory: 128,
78
- environment: {
79
- NODE_ENV: 'development',
80
- DEBUG: 'true'
81
- }
82
- },
83
- frontend: {
84
- framework: 'react',
85
- buildCommand: 'npm run build',
86
- outputDir: 'dist',
87
- environment: {
88
- REACT_APP_API_URL: 'http://localhost:3000'
89
- }
90
- }
91
- },
92
-
93
- production: {
94
- stage: 'prod',
95
- region: 'us-east-1',
96
- profile: 'production',
97
- backend: {
98
- runtime: 'nodejs18.x',
99
- timeout: 30,
100
- memory: 256,
101
- environment: {
102
- NODE_ENV: 'production'
103
- }
104
- },
105
- frontend: {
106
- framework: 'react',
107
- buildCommand: 'npm run build:prod',
108
- outputDir: 'build',
109
- environment: {
110
- REACT_APP_API_URL: 'https://api.example.com'
111
- }
112
- },
113
- monitoring: {
114
- enabled: true,
115
- logLevel: 'info'
116
- }
117
- },
118
-
119
- multiStage: {
120
- stages: {
121
- dev: {
122
- region: 'us-east-1',
123
- profile: 'dev',
124
- backend: {
125
- memory: 128
126
- }
127
- },
128
- staging: {
129
- region: 'us-west-2',
130
- profile: 'staging',
131
- backend: {
132
- memory: 256
133
- }
134
- },
135
- prod: {
136
- region: 'eu-west-1',
137
- profile: 'production',
138
- backend: {
139
- memory: 512
140
- }
141
- }
142
- }
143
- }
144
- };
145
- }
146
-
147
- /**
148
- * Get sample directory structures
149
- */
150
- static get directoryStructures() {
151
- return {
152
- basicFriggApp: {
153
- 'package.json': JSON.stringify(this.packageConfigs.valid, null, 2),
154
- 'frigg.config.json': JSON.stringify(this.friggConfigs.development, null, 2),
155
- 'backend/': {
156
- 'index.js': 'module.exports = { handler: () => {} };',
157
- 'package.json': JSON.stringify({
158
- name: 'backend',
159
- version: '1.0.0',
160
- main: 'index.js'
161
- }, null, 2)
162
- },
163
- 'frontend/': {
164
- 'package.json': JSON.stringify({
165
- name: 'frontend',
166
- version: '1.0.0',
167
- main: 'src/index.js'
168
- }, null, 2),
169
- 'src/': {
170
- 'index.js': 'console.log("Hello Frigg");'
171
- }
172
- }
173
- },
174
-
175
- backendOnly: {
176
- 'package.json': JSON.stringify(this.packageConfigs.minimal, null, 2),
177
- 'backend/': {
178
- 'index.js': 'module.exports = { handler: () => {} };',
179
- 'package.json': JSON.stringify({
180
- name: 'backend',
181
- version: '1.0.0',
182
- main: 'index.js'
183
- }, null, 2)
184
- }
185
- },
186
-
187
- emptyProject: {
188
- 'package.json': JSON.stringify(this.packageConfigs.minimal, null, 2)
189
- }
190
- };
191
- }
192
-
193
- /**
194
- * Get sample API module configurations
195
- */
196
- static get apiModules() {
197
- return {
198
- valid: {
199
- name: 'salesforce',
200
- packageName: '@friggframework/api-module-salesforce',
201
- version: '1.0.0',
202
- description: 'Salesforce API integration',
203
- dependencies: {
204
- '@friggframework/core': '^1.0.0',
205
- 'jsforce': '^2.0.0'
206
- }
207
- },
208
-
209
- invalid: {
210
- name: 'non-existent-module',
211
- packageName: '@friggframework/api-module-non-existent',
212
- error: 'Package not found'
213
- },
214
-
215
- deprecated: {
216
- name: 'old-module',
217
- packageName: '@friggframework/api-module-old',
218
- version: '0.5.0',
219
- deprecated: true,
220
- replacement: '@friggframework/api-module-new'
221
- }
222
- };
223
- }
224
-
225
- /**
226
- * Get sample command arguments and options
227
- */
228
- static get commandArgs() {
229
- return {
230
- install: {
231
- valid: [
232
- ['salesforce'],
233
- ['hubspot', '--app-path', '/custom/path'],
234
- ['slack', '--config', '/custom/config.json']
235
- ],
236
- invalid: [
237
- [], // Missing module name
238
- [''], // Empty module name
239
- ['invalid-@characters']
240
- ]
241
- },
242
-
243
- build: {
244
- valid: [
245
- [],
246
- ['--stage', 'production'],
247
- ['--verbose'],
248
- ['--stage', 'dev', '--verbose']
249
- ],
250
- invalid: [
251
- ['--stage', ''], // Empty stage
252
- ['--invalid-option']
253
- ]
254
- },
255
-
256
- deploy: {
257
- valid: [
258
- [],
259
- ['--stage', 'production'],
260
- ['--verbose'],
261
- ['--stage', 'staging', '--verbose']
262
- ],
263
- invalid: [
264
- ['--stage', 'invalid-stage']
265
- ]
266
- },
267
-
268
- generate: {
269
- valid: [
270
- ['--provider', 'aws'],
271
- ['--provider', 'azure', '--format', 'arm'],
272
- ['--provider', 'gcp', '--format', 'terraform']
273
- ],
274
- invalid: [
275
- [], // Missing provider
276
- ['--provider', 'invalid-provider'],
277
- ['--format', 'invalid-format']
278
- ]
279
- }
280
- };
281
- }
282
-
283
- /**
284
- * Get sample environment variables
285
- */
286
- static get environments() {
287
- return {
288
- development: {
289
- NODE_ENV: 'development',
290
- DEBUG: 'true',
291
- AWS_PROFILE: 'default',
292
- AWS_REGION: 'us-east-1'
293
- },
294
-
295
- production: {
296
- NODE_ENV: 'production',
297
- AWS_PROFILE: 'production',
298
- AWS_REGION: 'us-east-1'
299
- },
300
-
301
- testing: {
302
- NODE_ENV: 'test',
303
- DEBUG: 'false',
304
- AWS_PROFILE: 'test',
305
- AWS_REGION: 'us-east-1'
306
- }
307
- };
308
- }
309
-
310
- /**
311
- * Get sample file contents
312
- */
313
- static get fileContents() {
314
- return {
315
- validJson: '{"valid": true, "data": {"key": "value"}}',
316
- invalidJson: '{"invalid": json}',
317
- emptyJson: '{}',
318
-
319
- validYaml: `
320
- stage: dev
321
- region: us-east-1
322
- backend:
323
- runtime: nodejs18.x
324
- timeout: 30
325
- `,
326
-
327
- invalidYaml: `
328
- invalid: yaml: content
329
- - missing: structure
330
- `,
331
-
332
- basicJavaScript: `
333
- module.exports = {
334
- handler: async (event) => {
335
- return { statusCode: 200, body: 'Hello World' };
336
- }
337
- };
338
- `,
339
-
340
- packageJsonTemplate: `
341
- {
342
- "name": "{{name}}",
343
- "version": "{{version}}",
344
- "main": "{{main}}",
345
- "dependencies": {{dependencies}}
346
- }
347
- `
348
- };
349
- }
350
-
351
- /**
352
- * Get sample error scenarios
353
- */
354
- static get errorScenarios() {
355
- return {
356
- fileNotFound: {
357
- code: 'ENOENT',
358
- message: 'File not found',
359
- path: '/non/existent/file.json'
360
- },
361
-
362
- permissionDenied: {
363
- code: 'EACCES',
364
- message: 'Permission denied',
365
- path: '/protected/file.json'
366
- },
367
-
368
- networkError: {
369
- code: 'ECONNREFUSED',
370
- message: 'Connection refused',
371
- address: '127.0.0.1',
372
- port: 8080
373
- },
374
-
375
- validationError: {
376
- code: 'VALIDATION_ERROR',
377
- message: 'Invalid configuration',
378
- details: {
379
- field: 'stage',
380
- value: 'invalid-stage',
381
- allowed: ['dev', 'staging', 'prod']
382
- }
383
- },
384
-
385
- installationError: {
386
- code: 'INSTALLATION_ERROR',
387
- message: 'Failed to install package',
388
- package: '@friggframework/api-module-test',
389
- reason: 'Package not found in registry'
390
- }
391
- };
392
- }
393
-
394
- /**
395
- * Get sample network responses
396
- */
397
- static get networkResponses() {
398
- return {
399
- packageExists: {
400
- status: 200,
401
- data: {
402
- name: '@friggframework/api-module-test',
403
- version: '1.0.0',
404
- description: 'Test API module'
405
- }
406
- },
407
-
408
- packageNotFound: {
409
- status: 404,
410
- data: {
411
- error: 'Package not found'
412
- }
413
- },
414
-
415
- registryError: {
416
- status: 500,
417
- data: {
418
- error: 'Internal server error'
419
- }
420
- }
421
- };
422
- }
423
-
424
- /**
425
- * Create a temporary file structure for testing
426
- * @param {object} structure - Directory structure object
427
- * @returns {string} - Temporary directory path
428
- */
429
- static createTempStructure(structure) {
430
- const fs = require('fs');
431
- const path = require('path');
432
- const os = require('os');
433
-
434
- const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'frigg-test-'));
435
-
436
- const createFiles = (dir, structure) => {
437
- for (const [name, content] of Object.entries(structure)) {
438
- const fullPath = path.join(dir, name);
439
-
440
- if (typeof content === 'object' && content !== null) {
441
- fs.mkdirSync(fullPath, { recursive: true });
442
- createFiles(fullPath, content);
443
- } else {
444
- fs.writeFileSync(fullPath, content);
445
- }
446
- }
447
- };
448
-
449
- createFiles(tempDir, structure);
450
- return tempDir;
451
- }
452
-
453
- /**
454
- * Clean up temporary directory
455
- * @param {string} tempDir - Temporary directory path
456
- */
457
- static cleanupTempStructure(tempDir) {
458
- const fs = require('fs');
459
- fs.rmSync(tempDir, { recursive: true, force: true });
460
- }
461
- }
462
-
463
- module.exports = { TestFixtures };