@friggframework/devtools 2.0.0-next.47 → 2.0.0-next.48
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/frigg-cli/README.md +1290 -0
- package/frigg-cli/__tests__/unit/commands/build.test.js +279 -0
- package/frigg-cli/__tests__/unit/commands/db-setup.test.js +548 -0
- package/frigg-cli/__tests__/unit/commands/deploy.test.js +320 -0
- package/frigg-cli/__tests__/unit/commands/doctor.test.js +309 -0
- package/frigg-cli/__tests__/unit/commands/install.test.js +400 -0
- package/frigg-cli/__tests__/unit/commands/ui.test.js +346 -0
- package/frigg-cli/__tests__/unit/dependencies.test.js +74 -0
- package/frigg-cli/__tests__/unit/utils/database-validator.test.js +366 -0
- package/frigg-cli/__tests__/unit/utils/error-messages.test.js +304 -0
- package/frigg-cli/__tests__/unit/version-detection.test.js +171 -0
- package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
- package/frigg-cli/__tests__/utils/prisma-mock.js +194 -0
- package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
- package/frigg-cli/__tests__/utils/test-setup.js +287 -0
- package/frigg-cli/build-command/index.js +66 -0
- package/frigg-cli/db-setup-command/index.js +193 -0
- package/frigg-cli/deploy-command/SPEC-DEPLOY-DRY-RUN.md +981 -0
- package/frigg-cli/deploy-command/index.js +302 -0
- package/frigg-cli/doctor-command/index.js +335 -0
- package/frigg-cli/generate-command/__tests__/generate-command.test.js +301 -0
- package/frigg-cli/generate-command/azure-generator.js +43 -0
- package/frigg-cli/generate-command/gcp-generator.js +47 -0
- package/frigg-cli/generate-command/index.js +332 -0
- package/frigg-cli/generate-command/terraform-generator.js +555 -0
- package/frigg-cli/generate-iam-command.js +118 -0
- package/frigg-cli/index.js +173 -0
- package/frigg-cli/index.test.js +158 -0
- package/frigg-cli/init-command/backend-first-handler.js +756 -0
- package/frigg-cli/init-command/index.js +93 -0
- package/frigg-cli/init-command/template-handler.js +143 -0
- package/frigg-cli/install-command/backend-js.js +33 -0
- package/frigg-cli/install-command/commit-changes.js +16 -0
- package/frigg-cli/install-command/environment-variables.js +127 -0
- package/frigg-cli/install-command/environment-variables.test.js +136 -0
- package/frigg-cli/install-command/index.js +54 -0
- package/frigg-cli/install-command/install-package.js +13 -0
- package/frigg-cli/install-command/integration-file.js +30 -0
- package/frigg-cli/install-command/logger.js +12 -0
- package/frigg-cli/install-command/template.js +90 -0
- package/frigg-cli/install-command/validate-package.js +75 -0
- package/frigg-cli/jest.config.js +124 -0
- package/frigg-cli/package.json +63 -0
- package/frigg-cli/repair-command/index.js +564 -0
- package/frigg-cli/start-command/index.js +149 -0
- package/frigg-cli/start-command/start-command.test.js +297 -0
- package/frigg-cli/test/init-command.test.js +180 -0
- package/frigg-cli/test/npm-registry.test.js +319 -0
- package/frigg-cli/ui-command/index.js +154 -0
- package/frigg-cli/utils/app-resolver.js +319 -0
- package/frigg-cli/utils/backend-path.js +25 -0
- package/frigg-cli/utils/database-validator.js +154 -0
- package/frigg-cli/utils/error-messages.js +257 -0
- package/frigg-cli/utils/npm-registry.js +167 -0
- package/frigg-cli/utils/process-manager.js +199 -0
- package/frigg-cli/utils/repo-detection.js +405 -0
- package/infrastructure/create-frigg-infrastructure.js +125 -12
- package/infrastructure/docs/PRE-DEPLOYMENT-HEALTH-CHECK-SPEC.md +1317 -0
- package/infrastructure/domains/shared/resource-discovery.enhanced.test.js +306 -0
- package/infrastructure/domains/shared/resource-discovery.js +31 -2
- package/infrastructure/domains/shared/utilities/base-definition-factory.js +1 -1
- package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +109 -5
- package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +310 -4
- package/infrastructure/domains/shared/validation/plugin-validator.js +187 -0
- package/infrastructure/domains/shared/validation/plugin-validator.test.js +323 -0
- package/infrastructure/infrastructure-composer.js +22 -0
- package/layers/prisma/.build-complete +3 -0
- package/package.json +18 -7
- package/management-ui/package-lock.json +0 -16517
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Validator Tests
|
|
3
|
+
*
|
|
4
|
+
* Test suite following TDD best practices for plugin conflict detection
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const {
|
|
8
|
+
detectConflictingPlugins,
|
|
9
|
+
validateAndCleanPlugins,
|
|
10
|
+
validatePackagingConfiguration,
|
|
11
|
+
} = require('./plugin-validator');
|
|
12
|
+
|
|
13
|
+
describe('Plugin Validator', () => {
|
|
14
|
+
describe('detectConflictingPlugins', () => {
|
|
15
|
+
it('should detect conflict when both esbuild and jetpack are present', () => {
|
|
16
|
+
const plugins = ['serverless-esbuild', 'serverless-jetpack'];
|
|
17
|
+
const result = detectConflictingPlugins(plugins);
|
|
18
|
+
|
|
19
|
+
expect(result.hasConflict).toBe(true);
|
|
20
|
+
expect(result.hasEsbuild).toBe(true);
|
|
21
|
+
expect(result.hasJetpack).toBe(true);
|
|
22
|
+
expect(result.warnings).toHaveLength(1);
|
|
23
|
+
expect(result.warnings[0]).toContain('overlapping functionality');
|
|
24
|
+
expect(result.recommendations).toHaveLength(3);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('should not detect conflict when only esbuild is present', () => {
|
|
28
|
+
const plugins = ['serverless-esbuild'];
|
|
29
|
+
const result = detectConflictingPlugins(plugins);
|
|
30
|
+
|
|
31
|
+
expect(result.hasConflict).toBe(false);
|
|
32
|
+
expect(result.hasEsbuild).toBe(true);
|
|
33
|
+
expect(result.hasJetpack).toBe(false);
|
|
34
|
+
expect(result.warnings).toHaveLength(0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should warn about legacy jetpack usage', () => {
|
|
38
|
+
const plugins = ['serverless-jetpack'];
|
|
39
|
+
const result = detectConflictingPlugins(plugins);
|
|
40
|
+
|
|
41
|
+
expect(result.hasConflict).toBe(false);
|
|
42
|
+
expect(result.hasEsbuild).toBe(false);
|
|
43
|
+
expect(result.hasJetpack).toBe(true);
|
|
44
|
+
expect(result.warnings).toHaveLength(1);
|
|
45
|
+
expect(result.warnings[0]).toContain('legacy packaging plugin');
|
|
46
|
+
expect(result.recommendations.length).toBeGreaterThan(0);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should warn when no packaging plugin is present', () => {
|
|
50
|
+
const plugins = ['serverless-offline'];
|
|
51
|
+
const result = detectConflictingPlugins(plugins);
|
|
52
|
+
|
|
53
|
+
expect(result.hasConflict).toBe(false);
|
|
54
|
+
expect(result.hasEsbuild).toBe(false);
|
|
55
|
+
expect(result.hasJetpack).toBe(false);
|
|
56
|
+
expect(result.warnings).toHaveLength(1);
|
|
57
|
+
expect(result.warnings[0]).toContain('No packaging plugin detected');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should handle empty plugin array', () => {
|
|
61
|
+
const result = detectConflictingPlugins([]);
|
|
62
|
+
|
|
63
|
+
expect(result.hasConflict).toBe(false);
|
|
64
|
+
expect(result.hasEsbuild).toBe(false);
|
|
65
|
+
expect(result.hasJetpack).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should handle undefined plugin array', () => {
|
|
69
|
+
const result = detectConflictingPlugins();
|
|
70
|
+
|
|
71
|
+
expect(result.hasConflict).toBe(false);
|
|
72
|
+
expect(result.hasEsbuild).toBe(false);
|
|
73
|
+
expect(result.hasJetpack).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('validateAndCleanPlugins', () => {
|
|
78
|
+
it('should auto-fix conflict by removing jetpack when autoFix is true', () => {
|
|
79
|
+
const plugins = ['serverless-esbuild', 'serverless-jetpack', 'serverless-offline'];
|
|
80
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: true, silent: true });
|
|
81
|
+
|
|
82
|
+
expect(result.modified).toBe(true);
|
|
83
|
+
expect(result.plugins).toEqual(['serverless-esbuild', 'serverless-offline']);
|
|
84
|
+
expect(result.plugins).not.toContain('serverless-jetpack');
|
|
85
|
+
expect(result.validation.hasConflict).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('should not modify plugins when autoFix is false', () => {
|
|
89
|
+
const plugins = ['serverless-esbuild', 'serverless-jetpack'];
|
|
90
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: false, silent: true });
|
|
91
|
+
|
|
92
|
+
expect(result.modified).toBe(false);
|
|
93
|
+
expect(result.plugins).toEqual(plugins);
|
|
94
|
+
expect(result.validation.hasConflict).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('should not modify plugins when no conflict exists', () => {
|
|
98
|
+
const plugins = ['serverless-esbuild', 'serverless-offline'];
|
|
99
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: true, silent: true });
|
|
100
|
+
|
|
101
|
+
expect(result.modified).toBe(false);
|
|
102
|
+
expect(result.plugins).toEqual(plugins);
|
|
103
|
+
expect(result.validation.hasConflict).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('should preserve order of non-conflicting plugins', () => {
|
|
107
|
+
const plugins = [
|
|
108
|
+
'serverless-offline',
|
|
109
|
+
'serverless-esbuild',
|
|
110
|
+
'serverless-jetpack',
|
|
111
|
+
'@friggframework/serverless-plugin',
|
|
112
|
+
];
|
|
113
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: true, silent: true });
|
|
114
|
+
|
|
115
|
+
expect(result.plugins).toEqual([
|
|
116
|
+
'serverless-offline',
|
|
117
|
+
'serverless-esbuild',
|
|
118
|
+
'@friggframework/serverless-plugin',
|
|
119
|
+
]);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('should handle empty plugin array', () => {
|
|
123
|
+
const result = validateAndCleanPlugins([], { autoFix: true, silent: true });
|
|
124
|
+
|
|
125
|
+
expect(result.modified).toBe(false);
|
|
126
|
+
expect(result.plugins).toEqual([]);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it('should use default options when none provided', () => {
|
|
130
|
+
const plugins = ['serverless-esbuild', 'serverless-jetpack'];
|
|
131
|
+
|
|
132
|
+
// Suppress console output for test
|
|
133
|
+
const originalWarn = console.warn;
|
|
134
|
+
console.warn = jest.fn();
|
|
135
|
+
|
|
136
|
+
const result = validateAndCleanPlugins(plugins);
|
|
137
|
+
|
|
138
|
+
expect(result.modified).toBe(true);
|
|
139
|
+
expect(result.plugins).not.toContain('serverless-jetpack');
|
|
140
|
+
expect(console.warn).toHaveBeenCalled();
|
|
141
|
+
|
|
142
|
+
console.warn = originalWarn;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('should not log warnings when silent is true', () => {
|
|
146
|
+
const plugins = ['serverless-esbuild', 'serverless-jetpack'];
|
|
147
|
+
const originalWarn = console.warn;
|
|
148
|
+
console.warn = jest.fn();
|
|
149
|
+
|
|
150
|
+
validateAndCleanPlugins(plugins, { autoFix: true, silent: true });
|
|
151
|
+
|
|
152
|
+
expect(console.warn).not.toHaveBeenCalled();
|
|
153
|
+
|
|
154
|
+
console.warn = originalWarn;
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe('validatePackagingConfiguration', () => {
|
|
159
|
+
it('should validate a properly configured esbuild setup', () => {
|
|
160
|
+
const serverlessDefinition = {
|
|
161
|
+
plugins: ['serverless-esbuild'],
|
|
162
|
+
custom: {
|
|
163
|
+
esbuild: {
|
|
164
|
+
bundle: true,
|
|
165
|
+
external: ['@aws-sdk/*', '@prisma/client'],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
171
|
+
|
|
172
|
+
expect(result.valid).toBe(true);
|
|
173
|
+
expect(result.errors).toHaveLength(0);
|
|
174
|
+
expect(result.warnings).toHaveLength(0);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('should warn when esbuild plugin is present but config is missing', () => {
|
|
178
|
+
const serverlessDefinition = {
|
|
179
|
+
plugins: ['serverless-esbuild'],
|
|
180
|
+
custom: {},
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
184
|
+
|
|
185
|
+
expect(result.valid).toBe(true);
|
|
186
|
+
expect(result.warnings).toHaveLength(1);
|
|
187
|
+
expect(result.warnings[0]).toContain('custom.esbuild configuration is missing');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('should warn when AWS SDK is not externalized', () => {
|
|
191
|
+
const serverlessDefinition = {
|
|
192
|
+
plugins: ['serverless-esbuild'],
|
|
193
|
+
custom: {
|
|
194
|
+
esbuild: {
|
|
195
|
+
bundle: true,
|
|
196
|
+
external: ['@prisma/client'],
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
202
|
+
|
|
203
|
+
expect(result.valid).toBe(true);
|
|
204
|
+
expect(result.warnings.some(w => w.includes('AWS SDK'))).toBe(true);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('should warn when Prisma is not externalized', () => {
|
|
208
|
+
const serverlessDefinition = {
|
|
209
|
+
plugins: ['serverless-esbuild'],
|
|
210
|
+
custom: {
|
|
211
|
+
esbuild: {
|
|
212
|
+
bundle: true,
|
|
213
|
+
external: ['@aws-sdk/*'],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
219
|
+
|
|
220
|
+
expect(result.valid).toBe(true);
|
|
221
|
+
expect(result.warnings.some(w => w.includes('Prisma'))).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('should accept aws-sdk as valid AWS SDK externalization', () => {
|
|
225
|
+
const serverlessDefinition = {
|
|
226
|
+
plugins: ['serverless-esbuild'],
|
|
227
|
+
custom: {
|
|
228
|
+
esbuild: {
|
|
229
|
+
external: ['aws-sdk', '@prisma/client'],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
235
|
+
|
|
236
|
+
expect(result.warnings.some(w => w.includes('AWS SDK'))).toBe(false);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('should accept .prisma/* as valid Prisma externalization', () => {
|
|
240
|
+
const serverlessDefinition = {
|
|
241
|
+
plugins: ['serverless-esbuild'],
|
|
242
|
+
custom: {
|
|
243
|
+
esbuild: {
|
|
244
|
+
external: ['@aws-sdk/*', '.prisma/*'],
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
250
|
+
|
|
251
|
+
expect(result.warnings.some(w => w.includes('Prisma'))).toBe(false);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('should handle serverless definition without plugins', () => {
|
|
255
|
+
const serverlessDefinition = {
|
|
256
|
+
custom: {},
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
const result = validatePackagingConfiguration(serverlessDefinition);
|
|
260
|
+
|
|
261
|
+
expect(result.valid).toBe(true);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('should handle empty serverless definition', () => {
|
|
265
|
+
const result = validatePackagingConfiguration({});
|
|
266
|
+
|
|
267
|
+
expect(result.valid).toBe(true);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
describe('Integration Tests', () => {
|
|
272
|
+
it('should handle complete migration scenario from jetpack to esbuild', () => {
|
|
273
|
+
const plugins = [
|
|
274
|
+
'serverless-offline',
|
|
275
|
+
'serverless-jetpack',
|
|
276
|
+
'serverless-esbuild',
|
|
277
|
+
'@friggframework/serverless-plugin',
|
|
278
|
+
];
|
|
279
|
+
|
|
280
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: true, silent: true });
|
|
281
|
+
|
|
282
|
+
expect(result.modified).toBe(true);
|
|
283
|
+
expect(result.plugins).toEqual([
|
|
284
|
+
'serverless-offline',
|
|
285
|
+
'serverless-esbuild',
|
|
286
|
+
'@friggframework/serverless-plugin',
|
|
287
|
+
]);
|
|
288
|
+
expect(result.validation.hasConflict).toBe(true);
|
|
289
|
+
expect(result.validation.hasEsbuild).toBe(true);
|
|
290
|
+
expect(result.validation.hasJetpack).toBe(true);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('should provide helpful recommendations for legacy configurations', () => {
|
|
294
|
+
const plugins = ['serverless-jetpack'];
|
|
295
|
+
const result = validateAndCleanPlugins(plugins, { autoFix: false, silent: true });
|
|
296
|
+
|
|
297
|
+
expect(result.validation.recommendations).toContain(
|
|
298
|
+
'Consider migrating to serverless-esbuild for improved build times and tree-shaking.'
|
|
299
|
+
);
|
|
300
|
+
expect(
|
|
301
|
+
result.validation.recommendations.some(r => r.includes('migration guidance'))
|
|
302
|
+
).toBe(true);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('should work with Frigg standard plugin configuration', () => {
|
|
306
|
+
const standardPlugins = [
|
|
307
|
+
'serverless-esbuild',
|
|
308
|
+
'serverless-offline-sqs',
|
|
309
|
+
'serverless-offline',
|
|
310
|
+
'@friggframework/serverless-plugin',
|
|
311
|
+
];
|
|
312
|
+
|
|
313
|
+
const result = validateAndCleanPlugins(standardPlugins, {
|
|
314
|
+
autoFix: true,
|
|
315
|
+
silent: true,
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
expect(result.modified).toBe(false);
|
|
319
|
+
expect(result.plugins).toEqual(standardPlugins);
|
|
320
|
+
expect(result.validation.hasConflict).toBe(false);
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
});
|
|
@@ -21,6 +21,7 @@ const { IntegrationBuilder } = require('./domains/integration/integration-builde
|
|
|
21
21
|
const { modifyHandlerPaths } = require('./domains/shared/utilities/handler-path-resolver');
|
|
22
22
|
const { createBaseDefinition } = require('./domains/shared/utilities/base-definition-factory');
|
|
23
23
|
const { ensurePrismaLayerExists } = require('./domains/shared/utilities/prisma-layer-manager');
|
|
24
|
+
const { validateAndCleanPlugins, validatePackagingConfiguration } = require('./domains/shared/validation/plugin-validator');
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* Compose serverless definition using domain builders
|
|
@@ -76,6 +77,27 @@ const composeServerlessDefinition = async (AppDefinition) => {
|
|
|
76
77
|
|
|
77
78
|
Object.assign(definition.custom, merged.custom);
|
|
78
79
|
|
|
80
|
+
// Validate and clean plugins (detect conflicts, auto-fix if needed)
|
|
81
|
+
const pluginValidation = validateAndCleanPlugins(definition.plugins, {
|
|
82
|
+
autoFix: true,
|
|
83
|
+
silent: false,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (pluginValidation.modified) {
|
|
87
|
+
definition.plugins = pluginValidation.plugins;
|
|
88
|
+
console.log(' ✓ Plugin configuration auto-fixed');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Validate packaging configuration
|
|
92
|
+
const packagingValidation = validatePackagingConfiguration(definition);
|
|
93
|
+
if (!packagingValidation.valid) {
|
|
94
|
+
console.warn('⚠️ Packaging configuration issues detected:');
|
|
95
|
+
packagingValidation.errors.forEach(err => console.warn(` ✗ ${err}`));
|
|
96
|
+
}
|
|
97
|
+
if (packagingValidation.warnings.length > 0) {
|
|
98
|
+
packagingValidation.warnings.forEach(warn => console.warn(` ℹ ${warn}`));
|
|
99
|
+
}
|
|
100
|
+
|
|
79
101
|
// Modify handler paths for offline mode
|
|
80
102
|
definition.functions = modifyHandlerPaths(definition.functions);
|
|
81
103
|
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@friggframework/devtools",
|
|
3
3
|
"prettier": "@friggframework/prettier-config",
|
|
4
|
-
"version": "2.0.0-next.
|
|
4
|
+
"version": "2.0.0-next.48",
|
|
5
|
+
"bin": {
|
|
6
|
+
"frigg": "./frigg-cli/index.js"
|
|
7
|
+
},
|
|
5
8
|
"dependencies": {
|
|
9
|
+
"@aws-sdk/client-cloudformation": "^3.705.0",
|
|
6
10
|
"@aws-sdk/client-ec2": "^3.835.0",
|
|
7
11
|
"@aws-sdk/client-kms": "^3.835.0",
|
|
8
12
|
"@aws-sdk/client-rds": "^3.906.0",
|
|
@@ -12,14 +16,17 @@
|
|
|
12
16
|
"@babel/eslint-parser": "^7.18.9",
|
|
13
17
|
"@babel/parser": "^7.25.3",
|
|
14
18
|
"@babel/traverse": "^7.25.3",
|
|
15
|
-
"@friggframework/
|
|
16
|
-
"@friggframework/
|
|
19
|
+
"@friggframework/core": "2.0.0-next.48",
|
|
20
|
+
"@friggframework/schemas": "2.0.0-next.48",
|
|
21
|
+
"@friggframework/test": "2.0.0-next.48",
|
|
17
22
|
"@hapi/boom": "^10.0.1",
|
|
18
23
|
"@inquirer/prompts": "^5.3.8",
|
|
19
24
|
"axios": "^1.7.2",
|
|
20
25
|
"body-parser": "^1.20.2",
|
|
26
|
+
"chalk": "^4.1.2",
|
|
21
27
|
"commander": "^12.1.0",
|
|
22
28
|
"cors": "^2.8.5",
|
|
29
|
+
"cross-spawn": "^7.0.3",
|
|
23
30
|
"dotenv": "^16.4.5",
|
|
24
31
|
"eslint": "^8.22.0",
|
|
25
32
|
"eslint-config-prettier": "^8.5.0",
|
|
@@ -32,11 +39,15 @@
|
|
|
32
39
|
"fs-extra": "^11.2.0",
|
|
33
40
|
"js-yaml": "^4.1.0",
|
|
34
41
|
"lodash": "4.17.21",
|
|
35
|
-
"
|
|
42
|
+
"node-cache": "^5.1.2",
|
|
43
|
+
"open": "^8.4.2",
|
|
44
|
+
"semver": "^7.6.0",
|
|
45
|
+
"serverless-http": "^2.7.0",
|
|
46
|
+
"validate-npm-package-name": "^5.0.0"
|
|
36
47
|
},
|
|
37
48
|
"devDependencies": {
|
|
38
|
-
"@friggframework/eslint-config": "2.0.0-next.
|
|
39
|
-
"@friggframework/prettier-config": "2.0.0-next.
|
|
49
|
+
"@friggframework/eslint-config": "2.0.0-next.48",
|
|
50
|
+
"@friggframework/prettier-config": "2.0.0-next.48",
|
|
40
51
|
"aws-sdk-client-mock": "^4.1.0",
|
|
41
52
|
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
42
53
|
"jest": "^30.1.3",
|
|
@@ -68,5 +79,5 @@
|
|
|
68
79
|
"publishConfig": {
|
|
69
80
|
"access": "public"
|
|
70
81
|
},
|
|
71
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "5167dd83884504bd0a4a91298208b102ebced687"
|
|
72
83
|
}
|