@fnd-platform/cli 1.0.0-alpha.3 → 1.0.0-alpha.31
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/LICENSE +21 -0
- package/lib/bin/fnd.js +101 -4
- package/lib/bin/fnd.js.map +1 -1
- package/lib/commands/add.d.ts.map +1 -1
- package/lib/commands/add.js +134 -67
- package/lib/commands/add.js.map +1 -1
- package/lib/commands/build.js +29 -34
- package/lib/commands/build.js.map +1 -1
- package/lib/commands/deploy.d.ts +34 -9
- package/lib/commands/deploy.d.ts.map +1 -1
- package/lib/commands/deploy.js +246 -52
- package/lib/commands/deploy.js.map +1 -1
- package/lib/commands/destroy.d.ts +69 -0
- package/lib/commands/destroy.d.ts.map +1 -0
- package/lib/commands/destroy.js +172 -0
- package/lib/commands/destroy.js.map +1 -0
- package/lib/commands/index.d.ts +2 -0
- package/lib/commands/index.d.ts.map +1 -1
- package/lib/commands/index.js +7 -13
- package/lib/commands/index.js.map +1 -1
- package/lib/commands/new.js +46 -50
- package/lib/commands/new.js.map +1 -1
- package/lib/commands/synth.d.ts +8 -1
- package/lib/commands/synth.d.ts.map +1 -1
- package/lib/commands/synth.js +82 -22
- package/lib/commands/synth.js.map +1 -1
- package/lib/commands/test.d.ts +73 -0
- package/lib/commands/test.d.ts.map +1 -0
- package/lib/commands/test.js +193 -0
- package/lib/commands/test.js.map +1 -0
- package/lib/index.d.ts +11 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +31 -15
- package/lib/index.js.map +1 -1
- package/lib/lib/deploy-utils.d.ts +190 -0
- package/lib/lib/deploy-utils.d.ts.map +1 -0
- package/lib/lib/deploy-utils.js +372 -0
- package/lib/lib/deploy-utils.js.map +1 -0
- package/lib/lib/infra-generator.d.ts +118 -0
- package/lib/lib/infra-generator.d.ts.map +1 -1
- package/lib/lib/infra-generator.js +1051 -59
- package/lib/lib/infra-generator.js.map +1 -1
- package/lib/lib/logger.js +23 -29
- package/lib/lib/logger.js.map +1 -1
- package/lib/lib/nx-stats.js +12 -18
- package/lib/lib/nx-stats.js.map +1 -1
- package/lib/lib/project.js +7 -11
- package/lib/lib/project.js.map +1 -1
- package/lib/lib/templates.js +2 -6
- package/lib/lib/templates.js.map +1 -1
- package/lib/lib/timer.js +2 -7
- package/lib/lib/timer.js.map +1 -1
- package/lib/lib/validation.d.ts +135 -0
- package/lib/lib/validation.d.ts.map +1 -0
- package/lib/lib/validation.js +233 -0
- package/lib/lib/validation.js.map +1 -0
- package/lib/tui/App.d.ts +11 -0
- package/lib/tui/App.d.ts.map +1 -0
- package/lib/tui/App.js +98 -0
- package/lib/tui/App.js.map +1 -0
- package/lib/tui/components/branding/AsciiBanner.d.ts +21 -0
- package/lib/tui/components/branding/AsciiBanner.d.ts.map +1 -0
- package/lib/tui/components/branding/AsciiBanner.js +15 -0
- package/lib/tui/components/branding/AsciiBanner.js.map +1 -0
- package/lib/tui/components/branding/index.d.ts +5 -0
- package/lib/tui/components/branding/index.d.ts.map +1 -0
- package/lib/tui/components/branding/index.js +5 -0
- package/lib/tui/components/branding/index.js.map +1 -0
- package/lib/tui/components/feedback/Notification.d.ts +51 -0
- package/lib/tui/components/feedback/Notification.d.ts.map +1 -0
- package/lib/tui/components/feedback/Notification.js +89 -0
- package/lib/tui/components/feedback/Notification.js.map +1 -0
- package/lib/tui/components/feedback/ProgressBar.d.ts +46 -0
- package/lib/tui/components/feedback/ProgressBar.d.ts.map +1 -0
- package/lib/tui/components/feedback/ProgressBar.js +30 -0
- package/lib/tui/components/feedback/ProgressBar.js.map +1 -0
- package/lib/tui/components/feedback/ProgressSteps.d.ts +35 -0
- package/lib/tui/components/feedback/ProgressSteps.d.ts.map +1 -0
- package/lib/tui/components/feedback/ProgressSteps.js +37 -0
- package/lib/tui/components/feedback/ProgressSteps.js.map +1 -0
- package/lib/tui/components/feedback/Spinner.d.ts +18 -0
- package/lib/tui/components/feedback/Spinner.d.ts.map +1 -0
- package/lib/tui/components/feedback/Spinner.js +28 -0
- package/lib/tui/components/feedback/Spinner.js.map +1 -0
- package/lib/tui/components/feedback/index.d.ts +8 -0
- package/lib/tui/components/feedback/index.d.ts.map +1 -0
- package/lib/tui/components/feedback/index.js +8 -0
- package/lib/tui/components/feedback/index.js.map +1 -0
- package/lib/tui/components/index.d.ts +8 -0
- package/lib/tui/components/index.d.ts.map +1 -0
- package/lib/tui/components/index.js +8 -0
- package/lib/tui/components/index.js.map +1 -0
- package/lib/tui/components/input/Checkbox.d.ts +26 -0
- package/lib/tui/components/input/Checkbox.d.ts.map +1 -0
- package/lib/tui/components/input/Checkbox.js +20 -0
- package/lib/tui/components/input/Checkbox.js.map +1 -0
- package/lib/tui/components/input/SelectInput.d.ts +41 -0
- package/lib/tui/components/input/SelectInput.d.ts.map +1 -0
- package/lib/tui/components/input/SelectInput.js +53 -0
- package/lib/tui/components/input/SelectInput.js.map +1 -0
- package/lib/tui/components/input/TextInput.d.ts +30 -0
- package/lib/tui/components/input/TextInput.d.ts.map +1 -0
- package/lib/tui/components/input/TextInput.js +48 -0
- package/lib/tui/components/input/TextInput.js.map +1 -0
- package/lib/tui/components/input/index.d.ts +7 -0
- package/lib/tui/components/input/index.d.ts.map +1 -0
- package/lib/tui/components/input/index.js +7 -0
- package/lib/tui/components/input/index.js.map +1 -0
- package/lib/tui/components/layout/Breadcrumbs.d.ts +11 -0
- package/lib/tui/components/layout/Breadcrumbs.d.ts.map +1 -0
- package/lib/tui/components/layout/Breadcrumbs.js +34 -0
- package/lib/tui/components/layout/Breadcrumbs.js.map +1 -0
- package/lib/tui/components/layout/Footer.d.ts +11 -0
- package/lib/tui/components/layout/Footer.d.ts.map +1 -0
- package/lib/tui/components/layout/Footer.js +20 -0
- package/lib/tui/components/layout/Footer.js.map +1 -0
- package/lib/tui/components/layout/Header.d.ts +21 -0
- package/lib/tui/components/layout/Header.d.ts.map +1 -0
- package/lib/tui/components/layout/Header.js +21 -0
- package/lib/tui/components/layout/Header.js.map +1 -0
- package/lib/tui/components/layout/Screen.d.ts +27 -0
- package/lib/tui/components/layout/Screen.d.ts.map +1 -0
- package/lib/tui/components/layout/Screen.js +11 -0
- package/lib/tui/components/layout/Screen.js.map +1 -0
- package/lib/tui/components/layout/index.d.ts +8 -0
- package/lib/tui/components/layout/index.d.ts.map +1 -0
- package/lib/tui/components/layout/index.js +8 -0
- package/lib/tui/components/layout/index.js.map +1 -0
- package/lib/tui/hooks/index.d.ts +20 -0
- package/lib/tui/hooks/index.d.ts.map +1 -0
- package/lib/tui/hooks/index.js +18 -0
- package/lib/tui/hooks/index.js.map +1 -0
- package/lib/tui/hooks/useAddPackage.d.ts +120 -0
- package/lib/tui/hooks/useAddPackage.d.ts.map +1 -0
- package/lib/tui/hooks/useAddPackage.js +357 -0
- package/lib/tui/hooks/useAddPackage.js.map +1 -0
- package/lib/tui/hooks/useCreateProject.d.ts +66 -0
- package/lib/tui/hooks/useCreateProject.d.ts.map +1 -0
- package/lib/tui/hooks/useCreateProject.js +158 -0
- package/lib/tui/hooks/useCreateProject.js.map +1 -0
- package/lib/tui/hooks/useDeploy.d.ts +93 -0
- package/lib/tui/hooks/useDeploy.d.ts.map +1 -0
- package/lib/tui/hooks/useDeploy.js +254 -0
- package/lib/tui/hooks/useDeploy.js.map +1 -0
- package/lib/tui/hooks/useKeyboard.d.ts +66 -0
- package/lib/tui/hooks/useKeyboard.d.ts.map +1 -0
- package/lib/tui/hooks/useKeyboard.js +102 -0
- package/lib/tui/hooks/useKeyboard.js.map +1 -0
- package/lib/tui/hooks/useNavigation.d.ts +33 -0
- package/lib/tui/hooks/useNavigation.d.ts.map +1 -0
- package/lib/tui/hooks/useNavigation.js +27 -0
- package/lib/tui/hooks/useNavigation.js.map +1 -0
- package/lib/tui/hooks/useProject.d.ts +36 -0
- package/lib/tui/hooks/useProject.d.ts.map +1 -0
- package/lib/tui/hooks/useProject.js +47 -0
- package/lib/tui/hooks/useProject.js.map +1 -0
- package/lib/tui/index.d.ts +15 -0
- package/lib/tui/index.d.ts.map +1 -0
- package/lib/tui/index.js +16 -0
- package/lib/tui/index.js.map +1 -0
- package/lib/tui/lib/add-package-tui.d.ts +130 -0
- package/lib/tui/lib/add-package-tui.d.ts.map +1 -0
- package/lib/tui/lib/add-package-tui.js +492 -0
- package/lib/tui/lib/add-package-tui.js.map +1 -0
- package/lib/tui/lib/create-project-tui.d.ts +92 -0
- package/lib/tui/lib/create-project-tui.d.ts.map +1 -0
- package/lib/tui/lib/create-project-tui.js +181 -0
- package/lib/tui/lib/create-project-tui.js.map +1 -0
- package/lib/tui/lib/deploy-tui.d.ts +131 -0
- package/lib/tui/lib/deploy-tui.d.ts.map +1 -0
- package/lib/tui/lib/deploy-tui.js +347 -0
- package/lib/tui/lib/deploy-tui.js.map +1 -0
- package/lib/tui/screens/AddPackageScreen.d.ts +12 -0
- package/lib/tui/screens/AddPackageScreen.d.ts.map +1 -0
- package/lib/tui/screens/AddPackageScreen.js +436 -0
- package/lib/tui/screens/AddPackageScreen.js.map +1 -0
- package/lib/tui/screens/CreateProjectScreen.d.ts +12 -0
- package/lib/tui/screens/CreateProjectScreen.d.ts.map +1 -0
- package/lib/tui/screens/CreateProjectScreen.js +261 -0
- package/lib/tui/screens/CreateProjectScreen.js.map +1 -0
- package/lib/tui/screens/DeployScreen.d.ts +11 -0
- package/lib/tui/screens/DeployScreen.d.ts.map +1 -0
- package/lib/tui/screens/DeployScreen.js +224 -0
- package/lib/tui/screens/DeployScreen.js.map +1 -0
- package/lib/tui/screens/ProjectDashboard.d.ts +11 -0
- package/lib/tui/screens/ProjectDashboard.d.ts.map +1 -0
- package/lib/tui/screens/ProjectDashboard.js +81 -0
- package/lib/tui/screens/ProjectDashboard.js.map +1 -0
- package/lib/tui/screens/WelcomeScreen.d.ts +11 -0
- package/lib/tui/screens/WelcomeScreen.d.ts.map +1 -0
- package/lib/tui/screens/WelcomeScreen.js +26 -0
- package/lib/tui/screens/WelcomeScreen.js.map +1 -0
- package/lib/tui/screens/index.d.ts +9 -0
- package/lib/tui/screens/index.d.ts.map +1 -0
- package/lib/tui/screens/index.js +9 -0
- package/lib/tui/screens/index.js.map +1 -0
- package/lib/tui/services/ConfigService.d.ts +133 -0
- package/lib/tui/services/ConfigService.d.ts.map +1 -0
- package/lib/tui/services/ConfigService.js +221 -0
- package/lib/tui/services/ConfigService.js.map +1 -0
- package/lib/tui/services/ProjectService.d.ts +55 -0
- package/lib/tui/services/ProjectService.d.ts.map +1 -0
- package/lib/tui/services/ProjectService.js +179 -0
- package/lib/tui/services/ProjectService.js.map +1 -0
- package/lib/tui/services/index.d.ts +6 -0
- package/lib/tui/services/index.d.ts.map +1 -0
- package/lib/tui/services/index.js +6 -0
- package/lib/tui/services/index.js.map +1 -0
- package/lib/tui/state/AppContext.d.ts +58 -0
- package/lib/tui/state/AppContext.d.ts.map +1 -0
- package/lib/tui/state/AppContext.js +75 -0
- package/lib/tui/state/AppContext.js.map +1 -0
- package/lib/tui/state/index.d.ts +7 -0
- package/lib/tui/state/index.d.ts.map +1 -0
- package/lib/tui/state/index.js +7 -0
- package/lib/tui/state/index.js.map +1 -0
- package/lib/tui/state/reducer.d.ts +13 -0
- package/lib/tui/state/reducer.d.ts.map +1 -0
- package/lib/tui/state/reducer.js +136 -0
- package/lib/tui/state/reducer.js.map +1 -0
- package/lib/tui/state/types.d.ts +132 -0
- package/lib/tui/state/types.d.ts.map +1 -0
- package/lib/tui/state/types.js +38 -0
- package/lib/tui/state/types.js.map +1 -0
- package/lib/tui/utils/ascii.d.ts +42 -0
- package/lib/tui/utils/ascii.d.ts.map +1 -0
- package/lib/tui/utils/ascii.js +63 -0
- package/lib/tui/utils/ascii.js.map +1 -0
- package/lib/tui/utils/colors.d.ts +65 -0
- package/lib/tui/utils/colors.d.ts.map +1 -0
- package/lib/tui/utils/colors.js +65 -0
- package/lib/tui/utils/colors.js.map +1 -0
- package/lib/tui/utils/index.d.ts +6 -0
- package/lib/tui/utils/index.d.ts.map +1 -0
- package/lib/tui/utils/index.js +6 -0
- package/lib/tui/utils/index.js.map +1 -0
- package/package.json +23 -14
package/lib/commands/synth.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const project_js_1 = require("../lib/project.js");
|
|
8
|
-
const logger_js_1 = require("../lib/logger.js");
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { watch, existsSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { requireProjectRoot } from '../lib/project.js';
|
|
6
|
+
import { logger } from '../lib/logger.js';
|
|
9
7
|
/**
|
|
10
8
|
* Creates the `fnd synth` command.
|
|
11
9
|
*
|
|
@@ -20,10 +18,10 @@ const logger_js_1 = require("../lib/logger.js");
|
|
|
20
18
|
* program.parse(['node', 'fnd', 'synth']);
|
|
21
19
|
* ```
|
|
22
20
|
*/
|
|
23
|
-
function synthCommand() {
|
|
24
|
-
return new
|
|
21
|
+
export function synthCommand() {
|
|
22
|
+
return new Command('synth')
|
|
25
23
|
.description('Synthesize project configuration using Projen')
|
|
26
|
-
.option('--watch', 'Watch for changes and re-synthesize
|
|
24
|
+
.option('--watch', 'Watch for changes and re-synthesize')
|
|
27
25
|
.action(async (options) => {
|
|
28
26
|
await runSynth(options);
|
|
29
27
|
});
|
|
@@ -38,35 +36,97 @@ function synthCommand() {
|
|
|
38
36
|
* // Run synthesis with default options
|
|
39
37
|
* await runSynth({});
|
|
40
38
|
*
|
|
41
|
-
* // Run synthesis with watch mode
|
|
39
|
+
* // Run synthesis with watch mode
|
|
42
40
|
* await runSynth({ watch: true });
|
|
43
41
|
* ```
|
|
44
42
|
*/
|
|
45
|
-
async function runSynth(options) {
|
|
43
|
+
export async function runSynth(options) {
|
|
46
44
|
let projectRoot;
|
|
47
45
|
try {
|
|
48
|
-
projectRoot =
|
|
46
|
+
projectRoot = requireProjectRoot();
|
|
49
47
|
}
|
|
50
48
|
catch (error) {
|
|
51
|
-
|
|
49
|
+
logger.error(error.message);
|
|
52
50
|
process.exit(1);
|
|
53
51
|
}
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
logger.info('Synthesizing project configuration...');
|
|
53
|
+
logger.debug(`Project root: ${projectRoot}`);
|
|
54
|
+
// Run initial synthesis
|
|
55
|
+
if (!runProjenSynth(projectRoot)) {
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
// If watch mode, set up file watcher
|
|
56
59
|
if (options.watch) {
|
|
57
|
-
|
|
60
|
+
await watchForChanges(projectRoot);
|
|
58
61
|
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Runs the Projen synthesis command.
|
|
65
|
+
*
|
|
66
|
+
* @param projectRoot - Root directory of the project
|
|
67
|
+
* @returns true if successful, false otherwise
|
|
68
|
+
*/
|
|
69
|
+
export function runProjenSynth(projectRoot) {
|
|
59
70
|
try {
|
|
60
|
-
|
|
71
|
+
execSync('npx projen', {
|
|
61
72
|
cwd: projectRoot,
|
|
62
73
|
stdio: 'inherit',
|
|
63
74
|
});
|
|
64
|
-
|
|
75
|
+
logger.success('Synthesis complete');
|
|
76
|
+
return true;
|
|
65
77
|
}
|
|
66
78
|
catch (error) {
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
logger.error('Synthesis failed');
|
|
80
|
+
logger.debug(`Error: ${error.message}`);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Watches for changes to .projenrc.ts and re-runs synthesis.
|
|
86
|
+
*
|
|
87
|
+
* @param projectRoot - Root directory of the project
|
|
88
|
+
*/
|
|
89
|
+
async function watchForChanges(projectRoot) {
|
|
90
|
+
const projenrcPath = join(projectRoot, '.projenrc.ts');
|
|
91
|
+
if (!existsSync(projenrcPath)) {
|
|
92
|
+
logger.error('.projenrc.ts not found');
|
|
69
93
|
process.exit(1);
|
|
70
94
|
}
|
|
95
|
+
logger.info('Watching for changes to .projenrc.ts... (Ctrl+C to stop)');
|
|
96
|
+
// Debounce timer to avoid rapid re-runs
|
|
97
|
+
let debounceTimer = null;
|
|
98
|
+
const debounceMs = 500;
|
|
99
|
+
const watcher = watch(projenrcPath, (eventType) => {
|
|
100
|
+
if (eventType === 'change') {
|
|
101
|
+
// Clear existing timer if present
|
|
102
|
+
if (debounceTimer) {
|
|
103
|
+
clearTimeout(debounceTimer);
|
|
104
|
+
}
|
|
105
|
+
// Set new debounce timer
|
|
106
|
+
debounceTimer = setTimeout(() => {
|
|
107
|
+
logger.info('');
|
|
108
|
+
logger.info('Detected change in .projenrc.ts, re-synthesizing...');
|
|
109
|
+
runProjenSynth(projectRoot);
|
|
110
|
+
logger.info('Watching for changes... (Ctrl+C to stop)');
|
|
111
|
+
}, debounceMs);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Handle graceful shutdown
|
|
115
|
+
const cleanup = () => {
|
|
116
|
+
if (debounceTimer) {
|
|
117
|
+
clearTimeout(debounceTimer);
|
|
118
|
+
}
|
|
119
|
+
watcher.close();
|
|
120
|
+
logger.info('');
|
|
121
|
+
logger.info('Watch mode stopped');
|
|
122
|
+
process.exit(0);
|
|
123
|
+
};
|
|
124
|
+
process.on('SIGINT', cleanup);
|
|
125
|
+
process.on('SIGTERM', cleanup);
|
|
126
|
+
// Keep the process running
|
|
127
|
+
await new Promise(() => {
|
|
128
|
+
// This promise never resolves, keeping the process alive
|
|
129
|
+
// The process will exit via SIGINT/SIGTERM handlers
|
|
130
|
+
});
|
|
71
131
|
}
|
|
72
132
|
//# sourceMappingURL=synth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the test command.
|
|
4
|
+
*/
|
|
5
|
+
interface TestCommandOptions {
|
|
6
|
+
package?: string;
|
|
7
|
+
coverage?: boolean;
|
|
8
|
+
watch?: boolean;
|
|
9
|
+
update?: boolean;
|
|
10
|
+
ci?: boolean;
|
|
11
|
+
skipCache?: boolean;
|
|
12
|
+
parallel?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Creates the `fnd test` command.
|
|
16
|
+
*
|
|
17
|
+
* @returns Commander command instance
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { testCommand } from '@fnd-platform/cli';
|
|
22
|
+
*
|
|
23
|
+
* const program = new Command();
|
|
24
|
+
* program.addCommand(testCommand());
|
|
25
|
+
* program.parse(['node', 'fnd', 'test']);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function testCommand(): Command;
|
|
29
|
+
/**
|
|
30
|
+
* Runs the NX test.
|
|
31
|
+
*
|
|
32
|
+
* @param options - Command options
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Run all tests
|
|
37
|
+
* await runTest({});
|
|
38
|
+
*
|
|
39
|
+
* // Test a specific package with coverage
|
|
40
|
+
* await runTest({ package: 'api', coverage: true });
|
|
41
|
+
*
|
|
42
|
+
* // Run tests in watch mode
|
|
43
|
+
* await runTest({ watch: true });
|
|
44
|
+
*
|
|
45
|
+
* // Run tests in CI mode
|
|
46
|
+
* await runTest({ ci: true });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function runTest(options: TestCommandOptions): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Builds the NX command arguments based on options.
|
|
52
|
+
*
|
|
53
|
+
* @param options - Command options
|
|
54
|
+
* @returns Array of command arguments
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* // Run all tests
|
|
59
|
+
* buildNxTestArgs({});
|
|
60
|
+
* // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all']
|
|
61
|
+
*
|
|
62
|
+
* // Test specific package with coverage
|
|
63
|
+
* buildNxTestArgs({ package: 'api', coverage: true });
|
|
64
|
+
* // Returns: ['npx', 'nx', 'run', 'api:test', '--', '--coverage']
|
|
65
|
+
*
|
|
66
|
+
* // Run all tests in CI mode
|
|
67
|
+
* buildNxTestArgs({ ci: true });
|
|
68
|
+
* // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all', '--', '--ci']
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildNxTestArgs(options: TestCommandOptions): string[];
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAarC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwExE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAiCrE"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { requireProjectRoot } from '../lib/project.js';
|
|
4
|
+
import { logger } from '../lib/logger.js';
|
|
5
|
+
import { PerformanceTimer } from '../lib/timer.js';
|
|
6
|
+
import { parseNxOutput } from '../lib/nx-stats.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates the `fnd test` command.
|
|
9
|
+
*
|
|
10
|
+
* @returns Commander command instance
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { testCommand } from '@fnd-platform/cli';
|
|
15
|
+
*
|
|
16
|
+
* const program = new Command();
|
|
17
|
+
* program.addCommand(testCommand());
|
|
18
|
+
* program.parse(['node', 'fnd', 'test']);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function testCommand() {
|
|
22
|
+
return new Command('test')
|
|
23
|
+
.description('Run tests across all packages using NX')
|
|
24
|
+
.option('--package <name>', 'Test specific package only')
|
|
25
|
+
.option('--coverage', 'Generate coverage report')
|
|
26
|
+
.option('--watch', 'Watch mode')
|
|
27
|
+
.option('--update', 'Update snapshots')
|
|
28
|
+
.option('--ci', 'CI mode (no watch, fail on threshold)')
|
|
29
|
+
.option('--skip-cache', 'Skip NX cache')
|
|
30
|
+
.option('--parallel <n>', 'Number of parallel tasks')
|
|
31
|
+
.action(async (options) => {
|
|
32
|
+
await runTest(options);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Runs the NX test.
|
|
37
|
+
*
|
|
38
|
+
* @param options - Command options
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // Run all tests
|
|
43
|
+
* await runTest({});
|
|
44
|
+
*
|
|
45
|
+
* // Test a specific package with coverage
|
|
46
|
+
* await runTest({ package: 'api', coverage: true });
|
|
47
|
+
*
|
|
48
|
+
* // Run tests in watch mode
|
|
49
|
+
* await runTest({ watch: true });
|
|
50
|
+
*
|
|
51
|
+
* // Run tests in CI mode
|
|
52
|
+
* await runTest({ ci: true });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export async function runTest(options) {
|
|
56
|
+
// Initialize profiling if enabled
|
|
57
|
+
const timer = PerformanceTimer.isEnabled() ? new PerformanceTimer('fnd test') : null;
|
|
58
|
+
let projectRoot;
|
|
59
|
+
timer?.start('project-detection');
|
|
60
|
+
try {
|
|
61
|
+
projectRoot = requireProjectRoot();
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (timer) {
|
|
65
|
+
timer.end('project-detection');
|
|
66
|
+
logger.report(timer.getReport(false));
|
|
67
|
+
}
|
|
68
|
+
logger.error(error.message);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
const detectResult = timer?.end('project-detection');
|
|
72
|
+
if (detectResult) {
|
|
73
|
+
logger.timing('project-detection', detectResult.durationMs);
|
|
74
|
+
}
|
|
75
|
+
logger.info('Running tests...');
|
|
76
|
+
logger.debug(`Project root: ${projectRoot}`);
|
|
77
|
+
// Build the NX command arguments
|
|
78
|
+
const args = buildNxTestArgs(options);
|
|
79
|
+
const command = args.join(' ');
|
|
80
|
+
logger.debug(`Running: ${command}`);
|
|
81
|
+
timer?.start('nx-test');
|
|
82
|
+
try {
|
|
83
|
+
if (timer) {
|
|
84
|
+
// Capture output for cache statistics when profiling is enabled
|
|
85
|
+
const output = execSync(command, {
|
|
86
|
+
cwd: projectRoot,
|
|
87
|
+
stdio: 'pipe',
|
|
88
|
+
encoding: 'utf-8',
|
|
89
|
+
});
|
|
90
|
+
const testResult = timer.end('nx-test');
|
|
91
|
+
logger.timing('nx-test', testResult.durationMs);
|
|
92
|
+
// Print output since we captured it
|
|
93
|
+
console.log(output);
|
|
94
|
+
// Parse and display NX cache statistics
|
|
95
|
+
const stats = parseNxOutput(output);
|
|
96
|
+
if (stats) {
|
|
97
|
+
logger.cacheStats(stats);
|
|
98
|
+
}
|
|
99
|
+
logger.success('Tests complete');
|
|
100
|
+
logger.report(timer.getReport(true));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Normal execution without profiling
|
|
104
|
+
execSync(command, {
|
|
105
|
+
cwd: projectRoot,
|
|
106
|
+
stdio: 'inherit',
|
|
107
|
+
});
|
|
108
|
+
logger.success('Tests complete');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (timer) {
|
|
113
|
+
timer.end('nx-test');
|
|
114
|
+
logger.report(timer.getReport(false));
|
|
115
|
+
}
|
|
116
|
+
logger.error('Tests failed');
|
|
117
|
+
logger.debug(`Error: ${error.message}`);
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Builds the NX command arguments based on options.
|
|
123
|
+
*
|
|
124
|
+
* @param options - Command options
|
|
125
|
+
* @returns Array of command arguments
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* // Run all tests
|
|
130
|
+
* buildNxTestArgs({});
|
|
131
|
+
* // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all']
|
|
132
|
+
*
|
|
133
|
+
* // Test specific package with coverage
|
|
134
|
+
* buildNxTestArgs({ package: 'api', coverage: true });
|
|
135
|
+
* // Returns: ['npx', 'nx', 'run', 'api:test', '--', '--coverage']
|
|
136
|
+
*
|
|
137
|
+
* // Run all tests in CI mode
|
|
138
|
+
* buildNxTestArgs({ ci: true });
|
|
139
|
+
* // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all', '--', '--ci']
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export function buildNxTestArgs(options) {
|
|
143
|
+
// If testing a specific package
|
|
144
|
+
if (options.package) {
|
|
145
|
+
const args = ['npx', 'nx', 'run', `${options.package}:test`];
|
|
146
|
+
if (options.skipCache) {
|
|
147
|
+
args.push('--skip-nx-cache');
|
|
148
|
+
}
|
|
149
|
+
// Vitest/Jest options go after --
|
|
150
|
+
const vitestArgs = buildVitestArgs(options);
|
|
151
|
+
if (vitestArgs.length > 0) {
|
|
152
|
+
args.push('--', ...vitestArgs);
|
|
153
|
+
}
|
|
154
|
+
return args;
|
|
155
|
+
}
|
|
156
|
+
// Testing all packages
|
|
157
|
+
const args = ['npx', 'nx', 'run-many', '--target=test', '--all'];
|
|
158
|
+
if (options.skipCache) {
|
|
159
|
+
args.push('--skip-nx-cache');
|
|
160
|
+
}
|
|
161
|
+
if (options.parallel) {
|
|
162
|
+
args.push(`--parallel=${options.parallel}`);
|
|
163
|
+
}
|
|
164
|
+
// Vitest/Jest options go after --
|
|
165
|
+
const vitestArgs = buildVitestArgs(options);
|
|
166
|
+
if (vitestArgs.length > 0) {
|
|
167
|
+
args.push('--', ...vitestArgs);
|
|
168
|
+
}
|
|
169
|
+
return args;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Builds Vitest/Jest specific arguments.
|
|
173
|
+
*
|
|
174
|
+
* @param options - Command options
|
|
175
|
+
* @returns Array of test runner arguments
|
|
176
|
+
*/
|
|
177
|
+
function buildVitestArgs(options) {
|
|
178
|
+
const args = [];
|
|
179
|
+
if (options.coverage) {
|
|
180
|
+
args.push('--coverage');
|
|
181
|
+
}
|
|
182
|
+
if (options.watch) {
|
|
183
|
+
args.push('--watch');
|
|
184
|
+
}
|
|
185
|
+
if (options.update) {
|
|
186
|
+
args.push('--update');
|
|
187
|
+
}
|
|
188
|
+
if (options.ci) {
|
|
189
|
+
args.push('--ci');
|
|
190
|
+
}
|
|
191
|
+
return args;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -6,10 +6,19 @@
|
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Gets the CLI version.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getVersion(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Runs the fnd CLI in traditional Commander.js mode.
|
|
10
14
|
*
|
|
11
15
|
* @param args - Command line arguments (defaults to process.argv)
|
|
12
16
|
* @returns Promise that resolves when command completes
|
|
13
17
|
*/
|
|
14
|
-
export declare function
|
|
18
|
+
export declare function runCommander(args?: string[]): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Backward-compatible alias for runCommander.
|
|
21
|
+
* @deprecated Use runCommander instead.
|
|
22
|
+
*/
|
|
23
|
+
export declare const run: typeof runCommander;
|
|
15
24
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwBH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/E;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,qBAAe,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @fnd-platform/cli
|
|
4
3
|
*
|
|
@@ -6,32 +5,44 @@
|
|
|
6
5
|
*
|
|
7
6
|
* @packageDocumentation
|
|
8
7
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import { readFileSync } from 'fs';
|
|
10
|
+
import { dirname, join } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import { newCommand, synthCommand, buildCommand, testCommand, addCommand, deployCommand, destroyCommand, } from './commands/index.js';
|
|
13
13
|
/**
|
|
14
|
-
* CLI version
|
|
14
|
+
* CLI version from package.json.
|
|
15
15
|
*/
|
|
16
|
-
const
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
19
|
+
const VERSION = pkg.version;
|
|
17
20
|
/**
|
|
18
|
-
*
|
|
21
|
+
* Gets the CLI version.
|
|
22
|
+
*/
|
|
23
|
+
export function getVersion() {
|
|
24
|
+
return VERSION;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Runs the fnd CLI in traditional Commander.js mode.
|
|
19
28
|
*
|
|
20
29
|
* @param args - Command line arguments (defaults to process.argv)
|
|
21
30
|
* @returns Promise that resolves when command completes
|
|
22
31
|
*/
|
|
23
|
-
async function
|
|
24
|
-
const program = new
|
|
32
|
+
export async function runCommander(args = process.argv) {
|
|
33
|
+
const program = new Command();
|
|
25
34
|
program
|
|
26
35
|
.name('fnd')
|
|
27
36
|
.description('fnd-platform CLI - Scaffold AWS-native TypeScript monorepo projects')
|
|
28
37
|
.version(VERSION, '-v, --version', 'Display version number');
|
|
29
38
|
// Register commands
|
|
30
|
-
program.addCommand(
|
|
31
|
-
program.addCommand(
|
|
32
|
-
program.addCommand(
|
|
33
|
-
program.addCommand((
|
|
34
|
-
program.addCommand((
|
|
39
|
+
program.addCommand(newCommand());
|
|
40
|
+
program.addCommand(synthCommand());
|
|
41
|
+
program.addCommand(buildCommand());
|
|
42
|
+
program.addCommand(testCommand());
|
|
43
|
+
program.addCommand(addCommand());
|
|
44
|
+
program.addCommand(deployCommand());
|
|
45
|
+
program.addCommand(destroyCommand());
|
|
35
46
|
// Handle unknown commands
|
|
36
47
|
program.on('command:*', () => {
|
|
37
48
|
console.error(`Invalid command: ${program.args.join(' ')}\n` +
|
|
@@ -40,4 +51,9 @@ async function run(args = process.argv) {
|
|
|
40
51
|
});
|
|
41
52
|
await program.parseAsync(args);
|
|
42
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Backward-compatible alias for runCommander.
|
|
56
|
+
* @deprecated Use runCommander instead.
|
|
57
|
+
*/
|
|
58
|
+
export const run = runCommander;
|
|
43
59
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAiB,OAAO,CAAC,IAAI;IAC9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAE/D,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IAErC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,KAAK,CACX,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;YAC5C,8CAA8C,CACjD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC"}
|