@fnd-platform/cli 1.0.0-alpha.24 → 1.0.0-alpha.25

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 (230) hide show
  1. package/lib/bin/fnd.js +101 -4
  2. package/lib/bin/fnd.js.map +1 -1
  3. package/lib/commands/add.js +72 -75
  4. package/lib/commands/add.js.map +1 -1
  5. package/lib/commands/build.js +29 -34
  6. package/lib/commands/build.js.map +1 -1
  7. package/lib/commands/deploy.d.ts +13 -5
  8. package/lib/commands/deploy.d.ts.map +1 -1
  9. package/lib/commands/deploy.js +94 -75
  10. package/lib/commands/deploy.js.map +1 -1
  11. package/lib/commands/destroy.js +33 -38
  12. package/lib/commands/destroy.js.map +1 -1
  13. package/lib/commands/index.d.ts +1 -0
  14. package/lib/commands/index.d.ts.map +1 -1
  15. package/lib/commands/index.js +7 -15
  16. package/lib/commands/index.js.map +1 -1
  17. package/lib/commands/new.js +46 -50
  18. package/lib/commands/new.js.map +1 -1
  19. package/lib/commands/synth.d.ts +8 -1
  20. package/lib/commands/synth.d.ts.map +1 -1
  21. package/lib/commands/synth.js +82 -22
  22. package/lib/commands/synth.js.map +1 -1
  23. package/lib/commands/test.d.ts +73 -0
  24. package/lib/commands/test.d.ts.map +1 -0
  25. package/lib/commands/test.js +193 -0
  26. package/lib/commands/test.js.map +1 -0
  27. package/lib/index.d.ts +11 -2
  28. package/lib/index.d.ts.map +1 -1
  29. package/lib/index.js +29 -18
  30. package/lib/index.js.map +1 -1
  31. package/lib/lib/deploy-utils.d.ts.map +1 -1
  32. package/lib/lib/deploy-utils.js +73 -72
  33. package/lib/lib/deploy-utils.js.map +1 -1
  34. package/lib/lib/infra-generator.js +55 -63
  35. package/lib/lib/infra-generator.js.map +1 -1
  36. package/lib/lib/logger.js +23 -29
  37. package/lib/lib/logger.js.map +1 -1
  38. package/lib/lib/nx-stats.js +12 -18
  39. package/lib/lib/nx-stats.js.map +1 -1
  40. package/lib/lib/project.js +7 -11
  41. package/lib/lib/project.js.map +1 -1
  42. package/lib/lib/templates.js +2 -6
  43. package/lib/lib/templates.js.map +1 -1
  44. package/lib/lib/timer.js +2 -7
  45. package/lib/lib/timer.js.map +1 -1
  46. package/lib/lib/validation.d.ts +135 -0
  47. package/lib/lib/validation.d.ts.map +1 -0
  48. package/lib/lib/validation.js +233 -0
  49. package/lib/lib/validation.js.map +1 -0
  50. package/lib/tui/App.d.ts +11 -0
  51. package/lib/tui/App.d.ts.map +1 -0
  52. package/lib/tui/App.js +98 -0
  53. package/lib/tui/App.js.map +1 -0
  54. package/lib/tui/components/branding/AsciiBanner.d.ts +21 -0
  55. package/lib/tui/components/branding/AsciiBanner.d.ts.map +1 -0
  56. package/lib/tui/components/branding/AsciiBanner.js +15 -0
  57. package/lib/tui/components/branding/AsciiBanner.js.map +1 -0
  58. package/lib/tui/components/branding/index.d.ts +5 -0
  59. package/lib/tui/components/branding/index.d.ts.map +1 -0
  60. package/lib/tui/components/branding/index.js +5 -0
  61. package/lib/tui/components/branding/index.js.map +1 -0
  62. package/lib/tui/components/feedback/Notification.d.ts +51 -0
  63. package/lib/tui/components/feedback/Notification.d.ts.map +1 -0
  64. package/lib/tui/components/feedback/Notification.js +89 -0
  65. package/lib/tui/components/feedback/Notification.js.map +1 -0
  66. package/lib/tui/components/feedback/ProgressBar.d.ts +46 -0
  67. package/lib/tui/components/feedback/ProgressBar.d.ts.map +1 -0
  68. package/lib/tui/components/feedback/ProgressBar.js +30 -0
  69. package/lib/tui/components/feedback/ProgressBar.js.map +1 -0
  70. package/lib/tui/components/feedback/ProgressSteps.d.ts +35 -0
  71. package/lib/tui/components/feedback/ProgressSteps.d.ts.map +1 -0
  72. package/lib/tui/components/feedback/ProgressSteps.js +37 -0
  73. package/lib/tui/components/feedback/ProgressSteps.js.map +1 -0
  74. package/lib/tui/components/feedback/Spinner.d.ts +18 -0
  75. package/lib/tui/components/feedback/Spinner.d.ts.map +1 -0
  76. package/lib/tui/components/feedback/Spinner.js +28 -0
  77. package/lib/tui/components/feedback/Spinner.js.map +1 -0
  78. package/lib/tui/components/feedback/index.d.ts +8 -0
  79. package/lib/tui/components/feedback/index.d.ts.map +1 -0
  80. package/lib/tui/components/feedback/index.js +8 -0
  81. package/lib/tui/components/feedback/index.js.map +1 -0
  82. package/lib/tui/components/index.d.ts +8 -0
  83. package/lib/tui/components/index.d.ts.map +1 -0
  84. package/lib/tui/components/index.js +8 -0
  85. package/lib/tui/components/index.js.map +1 -0
  86. package/lib/tui/components/input/Checkbox.d.ts +26 -0
  87. package/lib/tui/components/input/Checkbox.d.ts.map +1 -0
  88. package/lib/tui/components/input/Checkbox.js +20 -0
  89. package/lib/tui/components/input/Checkbox.js.map +1 -0
  90. package/lib/tui/components/input/SelectInput.d.ts +41 -0
  91. package/lib/tui/components/input/SelectInput.d.ts.map +1 -0
  92. package/lib/tui/components/input/SelectInput.js +53 -0
  93. package/lib/tui/components/input/SelectInput.js.map +1 -0
  94. package/lib/tui/components/input/TextInput.d.ts +30 -0
  95. package/lib/tui/components/input/TextInput.d.ts.map +1 -0
  96. package/lib/tui/components/input/TextInput.js +48 -0
  97. package/lib/tui/components/input/TextInput.js.map +1 -0
  98. package/lib/tui/components/input/index.d.ts +7 -0
  99. package/lib/tui/components/input/index.d.ts.map +1 -0
  100. package/lib/tui/components/input/index.js +7 -0
  101. package/lib/tui/components/input/index.js.map +1 -0
  102. package/lib/tui/components/layout/Breadcrumbs.d.ts +11 -0
  103. package/lib/tui/components/layout/Breadcrumbs.d.ts.map +1 -0
  104. package/lib/tui/components/layout/Breadcrumbs.js +34 -0
  105. package/lib/tui/components/layout/Breadcrumbs.js.map +1 -0
  106. package/lib/tui/components/layout/Footer.d.ts +11 -0
  107. package/lib/tui/components/layout/Footer.d.ts.map +1 -0
  108. package/lib/tui/components/layout/Footer.js +20 -0
  109. package/lib/tui/components/layout/Footer.js.map +1 -0
  110. package/lib/tui/components/layout/Header.d.ts +21 -0
  111. package/lib/tui/components/layout/Header.d.ts.map +1 -0
  112. package/lib/tui/components/layout/Header.js +21 -0
  113. package/lib/tui/components/layout/Header.js.map +1 -0
  114. package/lib/tui/components/layout/Screen.d.ts +27 -0
  115. package/lib/tui/components/layout/Screen.d.ts.map +1 -0
  116. package/lib/tui/components/layout/Screen.js +11 -0
  117. package/lib/tui/components/layout/Screen.js.map +1 -0
  118. package/lib/tui/components/layout/index.d.ts +8 -0
  119. package/lib/tui/components/layout/index.d.ts.map +1 -0
  120. package/lib/tui/components/layout/index.js +8 -0
  121. package/lib/tui/components/layout/index.js.map +1 -0
  122. package/lib/tui/hooks/index.d.ts +20 -0
  123. package/lib/tui/hooks/index.d.ts.map +1 -0
  124. package/lib/tui/hooks/index.js +18 -0
  125. package/lib/tui/hooks/index.js.map +1 -0
  126. package/lib/tui/hooks/useAddPackage.d.ts +120 -0
  127. package/lib/tui/hooks/useAddPackage.d.ts.map +1 -0
  128. package/lib/tui/hooks/useAddPackage.js +347 -0
  129. package/lib/tui/hooks/useAddPackage.js.map +1 -0
  130. package/lib/tui/hooks/useCreateProject.d.ts +66 -0
  131. package/lib/tui/hooks/useCreateProject.d.ts.map +1 -0
  132. package/lib/tui/hooks/useCreateProject.js +156 -0
  133. package/lib/tui/hooks/useCreateProject.js.map +1 -0
  134. package/lib/tui/hooks/useDeploy.d.ts +93 -0
  135. package/lib/tui/hooks/useDeploy.d.ts.map +1 -0
  136. package/lib/tui/hooks/useDeploy.js +252 -0
  137. package/lib/tui/hooks/useDeploy.js.map +1 -0
  138. package/lib/tui/hooks/useKeyboard.d.ts +66 -0
  139. package/lib/tui/hooks/useKeyboard.d.ts.map +1 -0
  140. package/lib/tui/hooks/useKeyboard.js +101 -0
  141. package/lib/tui/hooks/useKeyboard.js.map +1 -0
  142. package/lib/tui/hooks/useNavigation.d.ts +33 -0
  143. package/lib/tui/hooks/useNavigation.d.ts.map +1 -0
  144. package/lib/tui/hooks/useNavigation.js +27 -0
  145. package/lib/tui/hooks/useNavigation.js.map +1 -0
  146. package/lib/tui/hooks/useProject.d.ts +36 -0
  147. package/lib/tui/hooks/useProject.d.ts.map +1 -0
  148. package/lib/tui/hooks/useProject.js +47 -0
  149. package/lib/tui/hooks/useProject.js.map +1 -0
  150. package/lib/tui/index.d.ts +15 -0
  151. package/lib/tui/index.d.ts.map +1 -0
  152. package/lib/tui/index.js +16 -0
  153. package/lib/tui/index.js.map +1 -0
  154. package/lib/tui/lib/add-package-tui.d.ts +127 -0
  155. package/lib/tui/lib/add-package-tui.d.ts.map +1 -0
  156. package/lib/tui/lib/add-package-tui.js +467 -0
  157. package/lib/tui/lib/add-package-tui.js.map +1 -0
  158. package/lib/tui/lib/create-project-tui.d.ts +84 -0
  159. package/lib/tui/lib/create-project-tui.d.ts.map +1 -0
  160. package/lib/tui/lib/create-project-tui.js +141 -0
  161. package/lib/tui/lib/create-project-tui.js.map +1 -0
  162. package/lib/tui/lib/deploy-tui.d.ts +131 -0
  163. package/lib/tui/lib/deploy-tui.d.ts.map +1 -0
  164. package/lib/tui/lib/deploy-tui.js +347 -0
  165. package/lib/tui/lib/deploy-tui.js.map +1 -0
  166. package/lib/tui/screens/AddPackageScreen.d.ts +12 -0
  167. package/lib/tui/screens/AddPackageScreen.d.ts.map +1 -0
  168. package/lib/tui/screens/AddPackageScreen.js +436 -0
  169. package/lib/tui/screens/AddPackageScreen.js.map +1 -0
  170. package/lib/tui/screens/CreateProjectScreen.d.ts +12 -0
  171. package/lib/tui/screens/CreateProjectScreen.d.ts.map +1 -0
  172. package/lib/tui/screens/CreateProjectScreen.js +252 -0
  173. package/lib/tui/screens/CreateProjectScreen.js.map +1 -0
  174. package/lib/tui/screens/DeployScreen.d.ts +11 -0
  175. package/lib/tui/screens/DeployScreen.d.ts.map +1 -0
  176. package/lib/tui/screens/DeployScreen.js +224 -0
  177. package/lib/tui/screens/DeployScreen.js.map +1 -0
  178. package/lib/tui/screens/ProjectDashboard.d.ts +11 -0
  179. package/lib/tui/screens/ProjectDashboard.d.ts.map +1 -0
  180. package/lib/tui/screens/ProjectDashboard.js +42 -0
  181. package/lib/tui/screens/ProjectDashboard.js.map +1 -0
  182. package/lib/tui/screens/WelcomeScreen.d.ts +11 -0
  183. package/lib/tui/screens/WelcomeScreen.d.ts.map +1 -0
  184. package/lib/tui/screens/WelcomeScreen.js +26 -0
  185. package/lib/tui/screens/WelcomeScreen.js.map +1 -0
  186. package/lib/tui/screens/index.d.ts +9 -0
  187. package/lib/tui/screens/index.d.ts.map +1 -0
  188. package/lib/tui/screens/index.js +9 -0
  189. package/lib/tui/screens/index.js.map +1 -0
  190. package/lib/tui/services/ConfigService.d.ts +133 -0
  191. package/lib/tui/services/ConfigService.d.ts.map +1 -0
  192. package/lib/tui/services/ConfigService.js +221 -0
  193. package/lib/tui/services/ConfigService.js.map +1 -0
  194. package/lib/tui/services/ProjectService.d.ts +55 -0
  195. package/lib/tui/services/ProjectService.d.ts.map +1 -0
  196. package/lib/tui/services/ProjectService.js +179 -0
  197. package/lib/tui/services/ProjectService.js.map +1 -0
  198. package/lib/tui/services/index.d.ts +6 -0
  199. package/lib/tui/services/index.d.ts.map +1 -0
  200. package/lib/tui/services/index.js +6 -0
  201. package/lib/tui/services/index.js.map +1 -0
  202. package/lib/tui/state/AppContext.d.ts +58 -0
  203. package/lib/tui/state/AppContext.d.ts.map +1 -0
  204. package/lib/tui/state/AppContext.js +75 -0
  205. package/lib/tui/state/AppContext.js.map +1 -0
  206. package/lib/tui/state/index.d.ts +7 -0
  207. package/lib/tui/state/index.d.ts.map +1 -0
  208. package/lib/tui/state/index.js +7 -0
  209. package/lib/tui/state/index.js.map +1 -0
  210. package/lib/tui/state/reducer.d.ts +13 -0
  211. package/lib/tui/state/reducer.d.ts.map +1 -0
  212. package/lib/tui/state/reducer.js +136 -0
  213. package/lib/tui/state/reducer.js.map +1 -0
  214. package/lib/tui/state/types.d.ts +132 -0
  215. package/lib/tui/state/types.d.ts.map +1 -0
  216. package/lib/tui/state/types.js +38 -0
  217. package/lib/tui/state/types.js.map +1 -0
  218. package/lib/tui/utils/ascii.d.ts +42 -0
  219. package/lib/tui/utils/ascii.d.ts.map +1 -0
  220. package/lib/tui/utils/ascii.js +63 -0
  221. package/lib/tui/utils/ascii.js.map +1 -0
  222. package/lib/tui/utils/colors.d.ts +65 -0
  223. package/lib/tui/utils/colors.d.ts.map +1 -0
  224. package/lib/tui/utils/colors.js +65 -0
  225. package/lib/tui/utils/colors.js.map +1 -0
  226. package/lib/tui/utils/index.d.ts +6 -0
  227. package/lib/tui/utils/index.d.ts.map +1 -0
  228. package/lib/tui/utils/index.js +6 -0
  229. package/lib/tui/utils/index.js.map +1 -0
  230. package/package.json +12 -3
@@ -0,0 +1,141 @@
1
+ /**
2
+ * TUI-compatible project creation module.
3
+ *
4
+ * Adapted from the CLI new command to work with the TUI:
5
+ * - Does NOT call process.exit()
6
+ * - Reports progress via callback
7
+ * - Returns result object for handling by the UI
8
+ */
9
+ import { execSync } from 'child_process';
10
+ import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'fs';
11
+ import { join, resolve } from 'path';
12
+ import { getProjenrcTemplate, getInitialPackageJson } from '../../lib/templates.js';
13
+ /**
14
+ * Valid project name pattern: lowercase alphanumeric with hyphens.
15
+ * Must start with a letter.
16
+ */
17
+ export const PROJECT_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
18
+ /**
19
+ * Validates a project name.
20
+ *
21
+ * @param name - The project name to validate
22
+ * @returns Validation result with error message if invalid
23
+ */
24
+ export function validateProjectName(name) {
25
+ if (!name || name.trim() === '') {
26
+ return { valid: false, error: 'Project name is required' };
27
+ }
28
+ if (name.length < 2) {
29
+ return { valid: false, error: 'Project name must be at least 2 characters' };
30
+ }
31
+ if (name.length > 50) {
32
+ return { valid: false, error: 'Project name must be 50 characters or less' };
33
+ }
34
+ if (!PROJECT_NAME_PATTERN.test(name)) {
35
+ return {
36
+ valid: false,
37
+ error: 'Name must start with a letter and contain only lowercase letters, numbers, and hyphens',
38
+ };
39
+ }
40
+ return { valid: true };
41
+ }
42
+ /**
43
+ * Checks the status of a directory for project creation.
44
+ *
45
+ * @param name - The project name (directory name)
46
+ * @returns Directory status
47
+ */
48
+ export function checkDirectory(name) {
49
+ const projectDir = resolve(process.cwd(), name);
50
+ if (!existsSync(projectDir)) {
51
+ return { exists: false, empty: true };
52
+ }
53
+ try {
54
+ const contents = readdirSync(projectDir);
55
+ return { exists: true, empty: contents.length === 0 };
56
+ }
57
+ catch {
58
+ return { exists: true, empty: false };
59
+ }
60
+ }
61
+ /**
62
+ * Creates a project in TUI mode.
63
+ *
64
+ * Unlike the CLI version, this function:
65
+ * - Does NOT call process.exit()
66
+ * - Reports progress via callback
67
+ * - Cleans up on failure and returns error result
68
+ *
69
+ * @param options - Project creation options
70
+ * @param onProgress - Progress callback
71
+ * @returns Result indicating success or failure
72
+ */
73
+ export async function createProjectForTUI(options, onProgress) {
74
+ const projectDir = resolve(process.cwd(), options.name);
75
+ // Validate name
76
+ const validation = validateProjectName(options.name);
77
+ if (!validation.valid) {
78
+ onProgress({ step: 'error', message: validation.error || 'Invalid project name' });
79
+ return { success: false, error: validation.error };
80
+ }
81
+ // Check directory
82
+ const dirStatus = checkDirectory(options.name);
83
+ if (dirStatus.exists && !dirStatus.empty) {
84
+ const error = `Directory '${options.name}' already exists and is not empty`;
85
+ onProgress({ step: 'error', message: error });
86
+ return { success: false, error };
87
+ }
88
+ try {
89
+ // Step 1: Create directory
90
+ onProgress({ step: 'creating-directory', message: 'Creating project directory...' });
91
+ if (!dirStatus.exists) {
92
+ mkdirSync(projectDir, { recursive: true });
93
+ }
94
+ // Step 2: Write files
95
+ onProgress({ step: 'writing-files', message: 'Writing project files...' });
96
+ writeFileSync(join(projectDir, '.projenrc.ts'), getProjenrcTemplate(options.name));
97
+ writeFileSync(join(projectDir, 'package.json'), JSON.stringify(getInitialPackageJson(options.name, options.packageManager), null, 2));
98
+ // Step 3: Initialize git (if requested)
99
+ if (options.git) {
100
+ onProgress({ step: 'initializing-git', message: 'Initializing git repository...' });
101
+ try {
102
+ execSync('git init', { cwd: projectDir, stdio: 'pipe' });
103
+ execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });
104
+ execSync('git commit -m "Initial commit from fnd-platform"', {
105
+ cwd: projectDir,
106
+ stdio: 'pipe',
107
+ });
108
+ }
109
+ catch {
110
+ // Git init failure is non-fatal, continue
111
+ }
112
+ }
113
+ // Step 4: Install dependencies (if requested)
114
+ if (options.install) {
115
+ onProgress({ step: 'installing-deps', message: 'Installing dependencies...' });
116
+ const installCmd = options.packageManager === 'pnpm' ? 'pnpm install' : 'yarn install';
117
+ execSync(installCmd, { cwd: projectDir, stdio: 'pipe' });
118
+ // Step 5: Run Projen
119
+ onProgress({ step: 'running-projen', message: 'Running Projen synthesis...' });
120
+ execSync('npx tsx .projenrc.ts', { cwd: projectDir, stdio: 'pipe' });
121
+ }
122
+ // Complete
123
+ onProgress({ step: 'complete', message: 'Project created successfully!' });
124
+ return { success: true, projectPath: projectDir };
125
+ }
126
+ catch (error) {
127
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
128
+ // Clean up partial project on failure
129
+ if (existsSync(projectDir)) {
130
+ try {
131
+ rmSync(projectDir, { recursive: true, force: true });
132
+ }
133
+ catch {
134
+ // Ignore cleanup errors
135
+ }
136
+ }
137
+ onProgress({ step: 'error', message: errorMessage });
138
+ return { success: false, error: errorMessage };
139
+ }
140
+ }
141
+ //# sourceMappingURL=create-project-tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project-tui.js","sourceRoot":"","sources":["../../../src/tui/lib/create-project-tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * TUI-compatible deployment module.
3
+ *
4
+ * Adapted from the CLI deploy command to work with the TUI:
5
+ * - Does NOT call process.exit()
6
+ * - Reports progress via callback
7
+ * - Streams CDK output in real-time
8
+ * - Returns result object for handling by the UI
9
+ */
10
+ import { type StackOutputs } from '../../lib/deploy-utils.js';
11
+ export type { StackOutputs };
12
+ /**
13
+ * Deployment options.
14
+ */
15
+ export interface DeployOptions {
16
+ /** Deployment stage */
17
+ stage: string;
18
+ /** Stacks to deploy (empty = all) */
19
+ stacks: string[];
20
+ /** CDK approval mode */
21
+ requireApproval: 'never' | 'any-change' | 'broadening';
22
+ /** Skip asset deployment */
23
+ skipAssets: boolean;
24
+ /** Skip building before asset deployment */
25
+ skipBuild: boolean;
26
+ }
27
+ /**
28
+ * Result of deployment.
29
+ */
30
+ export interface DeployResult {
31
+ /** Whether deployment succeeded */
32
+ success: boolean;
33
+ /** Stack outputs (if successful) */
34
+ outputs?: StackOutputs;
35
+ /** Error message (if failed) */
36
+ error?: string;
37
+ /** Whether deployment partially succeeded */
38
+ partialSuccess?: boolean;
39
+ /** Stacks that were deployed successfully */
40
+ deployedStacks?: string[];
41
+ /** Stacks that failed to deploy */
42
+ failedStacks?: string[];
43
+ }
44
+ /**
45
+ * Deployment phase identifiers.
46
+ */
47
+ export type DeployPhase = 'idle' | 'validating' | 'building' | 'deploying-stacks' | 'deploying-assets' | 'complete' | 'error';
48
+ /**
49
+ * Progress update during deployment.
50
+ */
51
+ export interface DeployProgress {
52
+ /** Current phase */
53
+ phase: DeployPhase;
54
+ /** Human-readable message */
55
+ message: string;
56
+ /** Current stack being deployed */
57
+ currentStack?: string;
58
+ /** Number of stacks completed */
59
+ stacksCompleted?: number;
60
+ /** Total number of stacks */
61
+ stacksTotal?: number;
62
+ }
63
+ /**
64
+ * Stack information.
65
+ */
66
+ export interface StackInfo {
67
+ /** Stack name */
68
+ name: string;
69
+ /** Stack display name (without prefix/suffix) */
70
+ displayName: string;
71
+ /** Stack type */
72
+ type: 'auth' | 'database' | 'media' | 'api' | 'frontend' | 'cms' | 'other';
73
+ }
74
+ /**
75
+ * Detects available stacks from the infrastructure package.
76
+ *
77
+ * @param projectRoot - Project root directory
78
+ * @param stage - Deployment stage
79
+ * @returns Array of stack information
80
+ */
81
+ export declare function detectAvailableStacks(projectRoot: string, stage: string): StackInfo[];
82
+ /**
83
+ * Validates the deployment environment.
84
+ *
85
+ * @param projectRoot - Project root directory
86
+ * @returns Validation result
87
+ */
88
+ export declare function validateDeployment(projectRoot: string): {
89
+ valid: boolean;
90
+ error?: string;
91
+ };
92
+ /**
93
+ * Gets AWS account information.
94
+ *
95
+ * @returns AWS account ID and region
96
+ */
97
+ export declare function getAwsInfo(): {
98
+ accountId: string;
99
+ region: string;
100
+ } | null;
101
+ /**
102
+ * Deploys infrastructure in TUI mode.
103
+ *
104
+ * Unlike the CLI version, this function:
105
+ * - Does NOT call process.exit()
106
+ * - Reports progress via callback
107
+ * - Streams CDK output via callback
108
+ * - Returns result object
109
+ *
110
+ * @param options - Deployment options
111
+ * @param onProgress - Progress callback
112
+ * @param onCdkOutput - CDK output line callback
113
+ * @returns Result indicating success or failure
114
+ */
115
+ export declare function deployForTUI(options: DeployOptions, onProgress: (progress: DeployProgress) => void, onCdkOutput: (line: string) => void): Promise<DeployResult>;
116
+ /**
117
+ * Gets common deployment stages.
118
+ */
119
+ export declare function getCommonStages(): string[];
120
+ /**
121
+ * Validates a stage name.
122
+ */
123
+ export declare function validateStageName(stage: string): {
124
+ valid: boolean;
125
+ error?: string;
126
+ };
127
+ /**
128
+ * Gets the display label for a stack type.
129
+ */
130
+ export declare function getStackTypeLabel(type: StackInfo['type']): string;
131
+ //# sourceMappingURL=deploy-tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-tui.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/deploy-tui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAUL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAOnC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wBAAwB;IACxB,eAAe,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;IACvD,4BAA4B;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,YAAY,GACZ,UAAU,GACV,kBAAkB,GAClB,kBAAkB,GAClB,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAqDrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB1F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBzE;AA+JD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAC9C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC,YAAY,CAAC,CAgEvB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAWjE"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * TUI-compatible deployment module.
3
+ *
4
+ * Adapted from the CLI deploy command to work with the TUI:
5
+ * - Does NOT call process.exit()
6
+ * - Reports progress via callback
7
+ * - Streams CDK output in real-time
8
+ * - Returns result object for handling by the UI
9
+ */
10
+ import { spawn, execSync } from 'child_process';
11
+ import { existsSync, readdirSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { findProjectRoot } from '../../lib/project.js';
14
+ import { getProjectName, toPascalCase, getStackOutputs, validateAwsCli, hasPackage, buildPackage, syncToS3, invalidateCloudFront, findBuildDirectory, } from '../../lib/deploy-utils.js';
15
+ import { validateStageName as validateStageNameStrict, validateStackName as validateStackNameStrict, } from '../../lib/validation.js';
16
+ /**
17
+ * Detects available stacks from the infrastructure package.
18
+ *
19
+ * @param projectRoot - Project root directory
20
+ * @param stage - Deployment stage
21
+ * @returns Array of stack information
22
+ */
23
+ export function detectAvailableStacks(projectRoot, stage) {
24
+ const stacksDir = join(projectRoot, 'packages', 'infra', 'src', 'stacks');
25
+ if (!existsSync(stacksDir)) {
26
+ return [];
27
+ }
28
+ const projectName = getProjectName(projectRoot);
29
+ const pascalName = toPascalCase(projectName);
30
+ const stacks = [];
31
+ const files = readdirSync(stacksDir);
32
+ for (const file of files) {
33
+ if (file.endsWith('-stack.ts')) {
34
+ // Extract stack type from file (e.g., 'api-stack.ts' -> 'Api')
35
+ const stackType = file
36
+ .replace('-stack.ts', '')
37
+ .split('-')
38
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
39
+ .join('');
40
+ const fullName = `${pascalName}${stackType}Stack-${stage}`;
41
+ let type = 'other';
42
+ const lowerType = stackType.toLowerCase();
43
+ if (lowerType === 'auth')
44
+ type = 'auth';
45
+ else if (lowerType === 'database')
46
+ type = 'database';
47
+ else if (lowerType === 'media')
48
+ type = 'media';
49
+ else if (lowerType === 'api')
50
+ type = 'api';
51
+ else if (lowerType === 'frontend')
52
+ type = 'frontend';
53
+ else if (lowerType === 'cms')
54
+ type = 'cms';
55
+ stacks.push({
56
+ name: fullName,
57
+ displayName: stackType,
58
+ type,
59
+ });
60
+ }
61
+ }
62
+ // Sort stacks in deployment order
63
+ const order = {
64
+ auth: 1,
65
+ database: 2,
66
+ media: 3,
67
+ api: 4,
68
+ frontend: 5,
69
+ cms: 6,
70
+ other: 7,
71
+ };
72
+ return stacks.sort((a, b) => order[a.type] - order[b.type]);
73
+ }
74
+ /**
75
+ * Validates the deployment environment.
76
+ *
77
+ * @param projectRoot - Project root directory
78
+ * @returns Validation result
79
+ */
80
+ export function validateDeployment(projectRoot) {
81
+ // Check infra package exists
82
+ const infraDir = join(projectRoot, 'packages', 'infra');
83
+ if (!existsSync(infraDir)) {
84
+ return {
85
+ valid: false,
86
+ error: 'Infrastructure package not found at packages/infra. Run `fnd add api` to generate it.',
87
+ };
88
+ }
89
+ // Validate AWS CLI
90
+ try {
91
+ validateAwsCli();
92
+ }
93
+ catch (error) {
94
+ return {
95
+ valid: false,
96
+ error: error.message,
97
+ };
98
+ }
99
+ return { valid: true };
100
+ }
101
+ /**
102
+ * Gets AWS account information.
103
+ *
104
+ * @returns AWS account ID and region
105
+ */
106
+ export function getAwsInfo() {
107
+ try {
108
+ const identity = execSync('aws sts get-caller-identity --output json', {
109
+ encoding: 'utf-8',
110
+ stdio: ['pipe', 'pipe', 'pipe'],
111
+ });
112
+ const parsed = JSON.parse(identity);
113
+ const accountId = parsed.Account || 'Unknown';
114
+ // Get region
115
+ const region = process.env.AWS_REGION ||
116
+ process.env.AWS_DEFAULT_REGION ||
117
+ execSync('aws configure get region', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] })
118
+ .trim() ||
119
+ 'us-east-1';
120
+ return { accountId, region };
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ /**
127
+ * Runs CDK deployment with streaming output.
128
+ */
129
+ async function runCdkDeployStreaming(infraDir, stage, stacks, requireApproval, onProgress, onCdkOutput) {
130
+ // Validate inputs to prevent command injection
131
+ validateStageNameStrict(stage);
132
+ stacks.forEach((s) => validateStackNameStrict(s));
133
+ return new Promise((resolve) => {
134
+ const args = ['exec', 'cdk', 'deploy'];
135
+ if (stacks.length > 0) {
136
+ // Deploy specific stacks
137
+ stacks.forEach((s) => args.push(`*${s}*`));
138
+ }
139
+ else {
140
+ args.push('--all');
141
+ }
142
+ args.push('-c', `stage=${stage}`);
143
+ args.push(`--require-approval=${requireApproval}`);
144
+ args.push('--progress=events'); // Better for parsing
145
+ // SECURITY: Do not use shell: true to prevent command injection
146
+ const cdkProcess = spawn('pnpm', args, {
147
+ cwd: infraDir,
148
+ env: { ...process.env, FORCE_COLOR: '1' },
149
+ });
150
+ let completedStacks = 0;
151
+ let currentStack = '';
152
+ let lastError = '';
153
+ const parseOutput = (data) => {
154
+ const text = data.toString();
155
+ const lines = text.split('\n');
156
+ for (const line of lines) {
157
+ if (!line.trim())
158
+ continue;
159
+ onCdkOutput(line);
160
+ // Parse for stack progress
161
+ // Pattern: "MyAppDatabaseStack-dev: creating CloudFormation changeset..."
162
+ const creatingMatch = line.match(/(\S+Stack-\w+):\s*creating/i);
163
+ if (creatingMatch) {
164
+ currentStack = creatingMatch[1];
165
+ onProgress({
166
+ phase: 'deploying-stacks',
167
+ message: `Deploying ${currentStack}...`,
168
+ currentStack,
169
+ stacksCompleted: completedStacks,
170
+ });
171
+ }
172
+ // Pattern: " ✅ MyAppDatabaseStack-dev"
173
+ const successMatch = line.match(/✅\s+(\S+Stack-\w+)/);
174
+ if (successMatch) {
175
+ completedStacks++;
176
+ currentStack = successMatch[1];
177
+ onProgress({
178
+ phase: 'deploying-stacks',
179
+ message: `Completed ${currentStack}`,
180
+ currentStack,
181
+ stacksCompleted: completedStacks,
182
+ });
183
+ }
184
+ // Pattern: "Stack MyAppDatabaseStack-dev has been destroyed"
185
+ if (line.includes('has been destroyed')) {
186
+ completedStacks++;
187
+ }
188
+ // Capture errors
189
+ if (line.includes('Error') || line.includes('FAILED') || line.includes('error:')) {
190
+ lastError = line;
191
+ }
192
+ }
193
+ };
194
+ cdkProcess.stdout.on('data', parseOutput);
195
+ cdkProcess.stderr.on('data', parseOutput);
196
+ cdkProcess.on('close', (code) => {
197
+ if (code === 0) {
198
+ resolve({ success: true });
199
+ }
200
+ else {
201
+ resolve({
202
+ success: false,
203
+ error: lastError || `CDK deployment failed with exit code ${code}`,
204
+ });
205
+ }
206
+ });
207
+ cdkProcess.on('error', (error) => {
208
+ resolve({ success: false, error: error.message });
209
+ });
210
+ });
211
+ }
212
+ /**
213
+ * Deploys static assets to S3 (for non-SSR deployments).
214
+ */
215
+ async function deployStaticAssets(projectRoot, stage, outputs, skipBuild, onProgress) {
216
+ // Deploy frontend assets if exists and has bucket (non-SSR)
217
+ if (hasPackage(projectRoot, 'frontend') && outputs.frontendBucket) {
218
+ onProgress({ phase: 'deploying-assets', message: 'Deploying frontend assets...' });
219
+ const frontendPath = join(projectRoot, 'packages', 'frontend');
220
+ if (!skipBuild) {
221
+ onProgress({ phase: 'building', message: 'Building frontend...' });
222
+ buildPackage(frontendPath, outputs.apiUrl || '', false);
223
+ }
224
+ const buildDir = findBuildDirectory(frontendPath);
225
+ if (buildDir) {
226
+ syncToS3(buildDir, outputs.frontendBucket, false);
227
+ if (outputs.frontendDistributionId) {
228
+ invalidateCloudFront(outputs.frontendDistributionId, false);
229
+ }
230
+ }
231
+ }
232
+ // Deploy CMS assets if exists and has bucket (non-SSR)
233
+ if (hasPackage(projectRoot, 'cms') && outputs.cmsBucket) {
234
+ onProgress({ phase: 'deploying-assets', message: 'Deploying CMS assets...' });
235
+ const cmsPath = join(projectRoot, 'packages', 'cms');
236
+ if (!skipBuild) {
237
+ onProgress({ phase: 'building', message: 'Building CMS...' });
238
+ buildPackage(cmsPath, outputs.apiUrl || '', false);
239
+ }
240
+ const buildDir = findBuildDirectory(cmsPath);
241
+ if (buildDir) {
242
+ syncToS3(buildDir, outputs.cmsBucket, false);
243
+ if (outputs.cmsDistributionId) {
244
+ invalidateCloudFront(outputs.cmsDistributionId, false);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ /**
250
+ * Deploys infrastructure in TUI mode.
251
+ *
252
+ * Unlike the CLI version, this function:
253
+ * - Does NOT call process.exit()
254
+ * - Reports progress via callback
255
+ * - Streams CDK output via callback
256
+ * - Returns result object
257
+ *
258
+ * @param options - Deployment options
259
+ * @param onProgress - Progress callback
260
+ * @param onCdkOutput - CDK output line callback
261
+ * @returns Result indicating success or failure
262
+ */
263
+ export async function deployForTUI(options, onProgress, onCdkOutput) {
264
+ // Find project root
265
+ const projectRoot = findProjectRoot();
266
+ if (!projectRoot) {
267
+ onProgress({ phase: 'error', message: 'Not in an fnd-platform project' });
268
+ return { success: false, error: 'Not inside an fnd-platform project' };
269
+ }
270
+ const infraDir = join(projectRoot, 'packages', 'infra');
271
+ // Step 1: Validate
272
+ onProgress({ phase: 'validating', message: 'Validating deployment environment...' });
273
+ const validation = validateDeployment(projectRoot);
274
+ if (!validation.valid) {
275
+ onProgress({ phase: 'error', message: validation.error || 'Validation failed' });
276
+ return { success: false, error: validation.error };
277
+ }
278
+ try {
279
+ // Step 2: Deploy CDK stacks
280
+ onProgress({ phase: 'deploying-stacks', message: 'Starting CDK deployment...' });
281
+ const cdkResult = await runCdkDeployStreaming(infraDir, options.stage, options.stacks, options.requireApproval, onProgress, onCdkOutput);
282
+ if (!cdkResult.success) {
283
+ onProgress({ phase: 'error', message: cdkResult.error || 'CDK deployment failed' });
284
+ return { success: false, error: cdkResult.error };
285
+ }
286
+ // Step 3: Get stack outputs
287
+ const outputs = getStackOutputs(projectRoot, options.stage);
288
+ // Step 4: Deploy static assets (if applicable)
289
+ if (!options.skipAssets) {
290
+ try {
291
+ await deployStaticAssets(projectRoot, options.stage, outputs, options.skipBuild, onProgress);
292
+ }
293
+ catch (assetError) {
294
+ // Asset deployment failure is non-fatal for SSR deployments
295
+ onCdkOutput(`Warning: Asset deployment failed: ${assetError.message}`);
296
+ }
297
+ }
298
+ // Complete
299
+ onProgress({ phase: 'complete', message: 'Deployment successful!' });
300
+ return { success: true, outputs };
301
+ }
302
+ catch (error) {
303
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
304
+ onProgress({ phase: 'error', message: errorMessage });
305
+ return { success: false, error: errorMessage };
306
+ }
307
+ }
308
+ /**
309
+ * Gets common deployment stages.
310
+ */
311
+ export function getCommonStages() {
312
+ return ['dev', 'staging', 'prod'];
313
+ }
314
+ /**
315
+ * Validates a stage name.
316
+ */
317
+ export function validateStageName(stage) {
318
+ if (!stage || stage.trim() === '') {
319
+ return { valid: false, error: 'Stage name is required' };
320
+ }
321
+ if (stage.length > 20) {
322
+ return { valid: false, error: 'Stage name must be 20 characters or less' };
323
+ }
324
+ if (!/^[a-z][a-z0-9-]*$/.test(stage)) {
325
+ return {
326
+ valid: false,
327
+ error: 'Stage must start with a letter and contain only lowercase letters, numbers, and hyphens',
328
+ };
329
+ }
330
+ return { valid: true };
331
+ }
332
+ /**
333
+ * Gets the display label for a stack type.
334
+ */
335
+ export function getStackTypeLabel(type) {
336
+ const labels = {
337
+ auth: 'Authentication',
338
+ database: 'Database',
339
+ media: 'Media',
340
+ api: 'API',
341
+ frontend: 'Frontend',
342
+ cms: 'CMS',
343
+ other: 'Other',
344
+ };
345
+ return labels[type];
346
+ }
347
+ //# sourceMappingURL=deploy-tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-tui.js","sourceRoot":"","sources":["../../../src/tui/lib/deploy-tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Add package wizard screen for the FND TUI.
3
+ *
4
+ * Multi-step wizard for adding a new package to an existing
5
+ * fnd-platform project.
6
+ */
7
+ import React from 'react';
8
+ /**
9
+ * Add package wizard screen.
10
+ */
11
+ export declare function AddPackageScreen(): React.ReactElement;
12
+ //# sourceMappingURL=AddPackageScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddPackageScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/AddPackageScreen.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AA46BxC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,YAAY,CA0KrD"}