@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
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI-compatible package addition module.
|
|
3
|
+
*
|
|
4
|
+
* Adapted from the CLI add 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, readFileSync, writeFileSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { findProjectRoot } from '../../lib/project.js';
|
|
13
|
+
import { generateInfraPackage, generateFrontendStack, generateCmsStack, } from '../../lib/infra-generator.js';
|
|
14
|
+
import { ProjectService } from '../services/ProjectService.js';
|
|
15
|
+
/**
|
|
16
|
+
* Package version to use for @fnd-platform dependencies.
|
|
17
|
+
*/
|
|
18
|
+
const FND_PACKAGE_VERSION = '^1.0.0-alpha.1';
|
|
19
|
+
/**
|
|
20
|
+
* Valid package name pattern: lowercase alphanumeric with hyphens.
|
|
21
|
+
* Must start with a letter.
|
|
22
|
+
*/
|
|
23
|
+
export const PACKAGE_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
24
|
+
/**
|
|
25
|
+
* Validates a package name.
|
|
26
|
+
*
|
|
27
|
+
* @param name - The package name to validate
|
|
28
|
+
* @returns Validation result with error message if invalid
|
|
29
|
+
*/
|
|
30
|
+
export function validatePackageName(name) {
|
|
31
|
+
if (!name || name.trim() === '') {
|
|
32
|
+
return { valid: false, error: 'Package name is required' };
|
|
33
|
+
}
|
|
34
|
+
if (name.length < 2) {
|
|
35
|
+
return { valid: false, error: 'Package name must be at least 2 characters' };
|
|
36
|
+
}
|
|
37
|
+
if (name.length > 50) {
|
|
38
|
+
return { valid: false, error: 'Package name must be 50 characters or less' };
|
|
39
|
+
}
|
|
40
|
+
if (!PACKAGE_NAME_PATTERN.test(name)) {
|
|
41
|
+
return {
|
|
42
|
+
valid: false,
|
|
43
|
+
error: 'Name must start with a letter and contain only lowercase letters, numbers, and hyphens',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Reserved names
|
|
47
|
+
const reserved = ['node_modules', 'src', 'test', 'build', 'dist', 'lib', 'shared', 'types'];
|
|
48
|
+
if (reserved.includes(name)) {
|
|
49
|
+
return { valid: false, error: `'${name}' is a reserved name` };
|
|
50
|
+
}
|
|
51
|
+
return { valid: true };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks if a package already exists in the project.
|
|
55
|
+
*
|
|
56
|
+
* @param projectRoot - Project root directory
|
|
57
|
+
* @param packageName - Package name to check
|
|
58
|
+
* @returns True if package exists
|
|
59
|
+
*/
|
|
60
|
+
export function checkPackageExists(projectRoot, packageName) {
|
|
61
|
+
const packagesDir = join(projectRoot, 'packages');
|
|
62
|
+
return existsSync(join(packagesDir, packageName));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Gets available API packages in the project.
|
|
66
|
+
*
|
|
67
|
+
* Checks both filesystem (for existing packages) and .projenrc.ts
|
|
68
|
+
* (for packages that may not be fully synthesized yet).
|
|
69
|
+
*
|
|
70
|
+
* @param projectRoot - Project root directory
|
|
71
|
+
* @returns Array of API package names
|
|
72
|
+
*/
|
|
73
|
+
export function getAvailableApiPackages(projectRoot) {
|
|
74
|
+
const apiPackages = new Set();
|
|
75
|
+
// Check filesystem for existing API packages
|
|
76
|
+
const packages = ProjectService.detectPackages(projectRoot);
|
|
77
|
+
for (const pkg of packages) {
|
|
78
|
+
if (pkg.type === 'api') {
|
|
79
|
+
apiPackages.add(pkg.name);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Also check .projenrc.ts for API packages that may not be synthesized yet
|
|
83
|
+
const projenrcPath = join(projectRoot, '.projenrc.ts');
|
|
84
|
+
if (existsSync(projenrcPath)) {
|
|
85
|
+
try {
|
|
86
|
+
const content = readFileSync(projenrcPath, 'utf-8');
|
|
87
|
+
// Match: const <name> = new FndApiProject({
|
|
88
|
+
const apiMatches = content.matchAll(/const\s+(\w+)\s*=\s*new\s+FndApiProject\s*\(/g);
|
|
89
|
+
for (const match of apiMatches) {
|
|
90
|
+
apiPackages.add(match[1]);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Ignore read errors
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return Array.from(apiPackages);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Checks if an API package exists in .projenrc.ts.
|
|
101
|
+
*
|
|
102
|
+
* @param projenrcContent - Content of .projenrc.ts
|
|
103
|
+
* @param apiName - API package name to check
|
|
104
|
+
* @returns True if API package exists
|
|
105
|
+
*/
|
|
106
|
+
export function checkApiInProjenrc(projenrcContent, apiName) {
|
|
107
|
+
const apiVarPattern = new RegExp(`const\\s+${apiName}\\s*=\\s*new\\s+FndApiProject`);
|
|
108
|
+
return apiVarPattern.test(projenrcContent);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Extracts the project variable name from .projenrc.ts.
|
|
112
|
+
*
|
|
113
|
+
* @param content - .projenrc.ts content
|
|
114
|
+
* @returns Project variable name
|
|
115
|
+
*/
|
|
116
|
+
function extractProjectVarName(content) {
|
|
117
|
+
const projectMatch = content.match(/const\s+(\w+)\s*=\s*new\s+FndMonorepoProject/);
|
|
118
|
+
return projectMatch ? projectMatch[1] : 'project';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Extracts the project name from .projenrc.ts content.
|
|
122
|
+
*
|
|
123
|
+
* @param content - .projenrc.ts file content
|
|
124
|
+
* @returns Project name
|
|
125
|
+
*/
|
|
126
|
+
function extractProjectNameFromContent(content) {
|
|
127
|
+
const nameMatch = content.match(/new\s+FndMonorepoProject\s*\(\s*\{[^}]*name:\s*['"]([^'"]+)['"]/s);
|
|
128
|
+
if (nameMatch) {
|
|
129
|
+
return nameMatch[1];
|
|
130
|
+
}
|
|
131
|
+
const fallbackMatch = content.match(/name:\s*['"]([^'"]+)['"]/);
|
|
132
|
+
if (fallbackMatch) {
|
|
133
|
+
return fallbackMatch[1];
|
|
134
|
+
}
|
|
135
|
+
return 'my-app';
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Generates the FndApiProject instantiation code.
|
|
139
|
+
*/
|
|
140
|
+
function generateApiProjectCode(parentVar, options) {
|
|
141
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
142
|
+
const dynamodbLine = options.dynamodb === false ? '\n dynamodb: false,' : '';
|
|
143
|
+
const cognitoLine = options.cognito === false ? '\n cognito: false,' : '';
|
|
144
|
+
return `const ${options.name} = new FndApiProject({
|
|
145
|
+
parent: ${parentVar},
|
|
146
|
+
name: '${options.name}',${outdirLine}${dynamodbLine}${cognitoLine}
|
|
147
|
+
});`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Generates the FndFrontendProject instantiation code.
|
|
151
|
+
*/
|
|
152
|
+
function generateFrontendProjectCode(parentVar, options) {
|
|
153
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
154
|
+
const authLine = options.auth === false ? '\n auth: false,' : '';
|
|
155
|
+
const portLine = options.port && options.port !== 3000 ? `\n port: ${options.port},` : '';
|
|
156
|
+
const themeLine = options.theme && options.theme !== 'zinc' ? `\n shadcnTheme: '${options.theme}',` : '';
|
|
157
|
+
return `new FndFrontendProject({
|
|
158
|
+
parent: ${parentVar},
|
|
159
|
+
name: '${options.name}',
|
|
160
|
+
api: ${options.api},${outdirLine}${authLine}${portLine}${themeLine}
|
|
161
|
+
});`;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generates the FndCmsProject instantiation code.
|
|
165
|
+
*/
|
|
166
|
+
function generateCmsProjectCode(parentVar, options) {
|
|
167
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
168
|
+
const portLine = options.port && options.port !== 3001 ? `\n port: ${options.port},` : '';
|
|
169
|
+
const mediaUploadLine = options.mediaUpload === false ? '\n mediaUpload: false,' : '';
|
|
170
|
+
const richTextEditorLine = options.richTextEditor && options.richTextEditor !== 'tiptap'
|
|
171
|
+
? `\n richTextEditor: '${options.richTextEditor}',`
|
|
172
|
+
: '';
|
|
173
|
+
const themeLine = options.theme && options.theme !== 'zinc' ? `\n shadcnTheme: '${options.theme}',` : '';
|
|
174
|
+
return `new FndCmsProject({
|
|
175
|
+
parent: ${parentVar},
|
|
176
|
+
name: '${options.name}',
|
|
177
|
+
api: ${options.api},${outdirLine}${portLine}${mediaUploadLine}${richTextEditorLine}${themeLine}
|
|
178
|
+
});`;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Generates the FndComponentLibraryProject instantiation code.
|
|
182
|
+
*/
|
|
183
|
+
function generateComponentLibraryProjectCode(parentVar, options) {
|
|
184
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
185
|
+
const portLine = options.port && options.port !== 6006 ? `\n storybookPort: ${options.port},` : '';
|
|
186
|
+
return `new FndComponentLibraryProject({
|
|
187
|
+
parent: ${parentVar},
|
|
188
|
+
name: '${options.name}',${outdirLine}${portLine}
|
|
189
|
+
});`;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Modifies .projenrc.ts to add a package.
|
|
193
|
+
*/
|
|
194
|
+
function modifyProjenrc(content, options) {
|
|
195
|
+
const lines = content.split('\n');
|
|
196
|
+
const result = [];
|
|
197
|
+
const projectVarName = extractProjectVarName(content);
|
|
198
|
+
let addedImport = false;
|
|
199
|
+
let insertedProject = false;
|
|
200
|
+
// Determine import and code based on package type
|
|
201
|
+
let importStatement;
|
|
202
|
+
let projectCode;
|
|
203
|
+
let importSource;
|
|
204
|
+
switch (options.type) {
|
|
205
|
+
case 'api':
|
|
206
|
+
importStatement = "import { FndApiProject } from '@fnd-platform/api';";
|
|
207
|
+
importSource = '@fnd-platform/api';
|
|
208
|
+
projectCode = generateApiProjectCode(projectVarName, options);
|
|
209
|
+
break;
|
|
210
|
+
case 'frontend':
|
|
211
|
+
importStatement = "import { FndFrontendProject } from '@fnd-platform/frontend';";
|
|
212
|
+
importSource = '@fnd-platform/frontend';
|
|
213
|
+
projectCode = generateFrontendProjectCode(projectVarName, options);
|
|
214
|
+
break;
|
|
215
|
+
case 'cms':
|
|
216
|
+
importStatement = "import { FndCmsProject } from '@fnd-platform/cms';";
|
|
217
|
+
importSource = '@fnd-platform/cms';
|
|
218
|
+
projectCode = generateCmsProjectCode(projectVarName, options);
|
|
219
|
+
break;
|
|
220
|
+
case 'component-library':
|
|
221
|
+
importStatement = "import { FndComponentLibraryProject } from '@fnd-platform/component-library';";
|
|
222
|
+
importSource = '@fnd-platform/component-library';
|
|
223
|
+
projectCode = generateComponentLibraryProjectCode(projectVarName, options);
|
|
224
|
+
break;
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`Unknown package type: ${options.type}`);
|
|
227
|
+
}
|
|
228
|
+
// Check if import already exists
|
|
229
|
+
if (content.includes(importSource)) {
|
|
230
|
+
addedImport = true;
|
|
231
|
+
}
|
|
232
|
+
for (let i = 0; i < lines.length; i++) {
|
|
233
|
+
const line = lines[i];
|
|
234
|
+
// Add import after last @fnd-platform import
|
|
235
|
+
if (!addedImport &&
|
|
236
|
+
(line.includes("from '@fnd-platform/cms'") ||
|
|
237
|
+
line.includes("from '@fnd-platform/frontend'") ||
|
|
238
|
+
line.includes("from '@fnd-platform/api'") ||
|
|
239
|
+
line.includes("from '@fnd-platform/core'") ||
|
|
240
|
+
line.includes("from '@fnd-platform/component-library'"))) {
|
|
241
|
+
result.push(line);
|
|
242
|
+
const nextLine = lines[i + 1] || '';
|
|
243
|
+
if (!nextLine.includes("from '@fnd-platform/")) {
|
|
244
|
+
result.push(importStatement);
|
|
245
|
+
addedImport = true;
|
|
246
|
+
}
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// Insert project before synth() call
|
|
250
|
+
if (!insertedProject && line.includes('.synth()')) {
|
|
251
|
+
result.push('');
|
|
252
|
+
result.push(projectCode);
|
|
253
|
+
result.push('');
|
|
254
|
+
insertedProject = true;
|
|
255
|
+
}
|
|
256
|
+
result.push(line);
|
|
257
|
+
}
|
|
258
|
+
// If we didn't find synth(), append at the end
|
|
259
|
+
if (!insertedProject) {
|
|
260
|
+
result.push('');
|
|
261
|
+
result.push(projectCode);
|
|
262
|
+
result.push('');
|
|
263
|
+
result.push(`${projectVarName}.synth();`);
|
|
264
|
+
}
|
|
265
|
+
return result.join('\n');
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Adds a devDependency to the root package.json using pnpm.
|
|
269
|
+
*/
|
|
270
|
+
async function addDevDependency(projectRoot, packageName) {
|
|
271
|
+
const fullPackageName = `${packageName}@${FND_PACKAGE_VERSION}`;
|
|
272
|
+
try {
|
|
273
|
+
execSync(`pnpm add -D -w ${fullPackageName}`, {
|
|
274
|
+
cwd: projectRoot,
|
|
275
|
+
stdio: 'pipe',
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// If pnpm fails, try npm
|
|
280
|
+
try {
|
|
281
|
+
execSync(`npm install --save-dev ${fullPackageName}`, {
|
|
282
|
+
cwd: projectRoot,
|
|
283
|
+
stdio: 'pipe',
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// Non-fatal, user can add manually
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Adds a package in TUI mode.
|
|
293
|
+
*
|
|
294
|
+
* Unlike the CLI version, this function:
|
|
295
|
+
* - Does NOT call process.exit()
|
|
296
|
+
* - Reports progress via callback
|
|
297
|
+
* - Returns result object
|
|
298
|
+
*
|
|
299
|
+
* @param options - Package addition options
|
|
300
|
+
* @param onProgress - Progress callback
|
|
301
|
+
* @returns Result indicating success or failure
|
|
302
|
+
*/
|
|
303
|
+
export async function addPackageForTUI(options, onProgress) {
|
|
304
|
+
// Find project root
|
|
305
|
+
const projectRoot = findProjectRoot();
|
|
306
|
+
if (!projectRoot) {
|
|
307
|
+
onProgress({ step: 'error', message: 'Not in an fnd-platform project' });
|
|
308
|
+
return { success: false, error: 'Not inside an fnd-platform project' };
|
|
309
|
+
}
|
|
310
|
+
const projenrcPath = join(projectRoot, '.projenrc.ts');
|
|
311
|
+
// Step 1: Validate
|
|
312
|
+
onProgress({ step: 'validating', message: 'Validating configuration...' });
|
|
313
|
+
// Validate package name
|
|
314
|
+
const validation = validatePackageName(options.name);
|
|
315
|
+
if (!validation.valid) {
|
|
316
|
+
onProgress({ step: 'error', message: validation.error || 'Invalid package name' });
|
|
317
|
+
return { success: false, error: validation.error };
|
|
318
|
+
}
|
|
319
|
+
// Check if package already exists
|
|
320
|
+
if (checkPackageExists(projectRoot, options.name)) {
|
|
321
|
+
const error = `Package '${options.name}' already exists`;
|
|
322
|
+
onProgress({ step: 'error', message: error });
|
|
323
|
+
return { success: false, error };
|
|
324
|
+
}
|
|
325
|
+
// Read existing .projenrc.ts
|
|
326
|
+
let existingContent;
|
|
327
|
+
try {
|
|
328
|
+
existingContent = readFileSync(projenrcPath, 'utf-8');
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
const error = '.projenrc.ts not found';
|
|
332
|
+
onProgress({ step: 'error', message: error });
|
|
333
|
+
return { success: false, error };
|
|
334
|
+
}
|
|
335
|
+
// For frontend/cms, validate API package exists
|
|
336
|
+
if (options.type === 'frontend' || options.type === 'cms') {
|
|
337
|
+
if (!options.api) {
|
|
338
|
+
const error = 'API package name is required for frontend/cms packages';
|
|
339
|
+
onProgress({ step: 'error', message: error });
|
|
340
|
+
return { success: false, error };
|
|
341
|
+
}
|
|
342
|
+
if (!checkApiInProjenrc(existingContent, options.api)) {
|
|
343
|
+
const error = `API package '${options.api}' not found in .projenrc.ts`;
|
|
344
|
+
onProgress({ step: 'error', message: error });
|
|
345
|
+
return { success: false, error };
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Check for duplicate project type import (warn but continue)
|
|
349
|
+
const typeClassName = getProjectClassName(options.type);
|
|
350
|
+
if (existingContent.includes(typeClassName)) {
|
|
351
|
+
// Package type already exists, but we can still add another instance
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
// Step 2: Modify .projenrc.ts
|
|
355
|
+
onProgress({ step: 'modifying-projenrc', message: 'Updating .projenrc.ts...' });
|
|
356
|
+
const newContent = modifyProjenrc(existingContent, options);
|
|
357
|
+
writeFileSync(projenrcPath, newContent);
|
|
358
|
+
// Step 3: Install dependencies
|
|
359
|
+
onProgress({ step: 'installing-deps', message: 'Installing dependencies...' });
|
|
360
|
+
const packageNameForDep = getPackageNameForType(options.type);
|
|
361
|
+
await addDevDependency(projectRoot, packageNameForDep);
|
|
362
|
+
// Step 4: Generate infrastructure (for api, frontend, cms)
|
|
363
|
+
onProgress({ step: 'generating-infra', message: 'Generating infrastructure...' });
|
|
364
|
+
const projectName = extractProjectNameFromContent(existingContent);
|
|
365
|
+
if (options.type === 'api') {
|
|
366
|
+
generateInfraPackage({
|
|
367
|
+
projectRoot,
|
|
368
|
+
projectName,
|
|
369
|
+
apiPackageName: options.name,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
else if (options.type === 'frontend' && options.api) {
|
|
373
|
+
try {
|
|
374
|
+
await generateFrontendStack({
|
|
375
|
+
projectPath: projectRoot,
|
|
376
|
+
projectName,
|
|
377
|
+
apiName: options.api,
|
|
378
|
+
frontendName: options.name,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
// Non-fatal for frontend stack
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
else if (options.type === 'cms' && options.api) {
|
|
386
|
+
try {
|
|
387
|
+
await generateCmsStack({
|
|
388
|
+
projectPath: projectRoot,
|
|
389
|
+
projectName,
|
|
390
|
+
apiName: options.api,
|
|
391
|
+
cmsName: options.name,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
// Non-fatal for cms stack
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
// Step 5: Run synth (optional, non-blocking)
|
|
399
|
+
onProgress({ step: 'running-synth', message: 'Running Projen synthesis...' });
|
|
400
|
+
try {
|
|
401
|
+
execSync('pnpm exec projen', { cwd: projectRoot, stdio: 'pipe' });
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
// Synth failure is non-fatal in TUI mode
|
|
405
|
+
// User can run it manually
|
|
406
|
+
}
|
|
407
|
+
// Complete
|
|
408
|
+
onProgress({ step: 'complete', message: 'Package added successfully!' });
|
|
409
|
+
return { success: true, packageName: options.name };
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
413
|
+
onProgress({ step: 'error', message: errorMessage });
|
|
414
|
+
return { success: false, error: errorMessage };
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Gets the project class name for a package type.
|
|
419
|
+
*/
|
|
420
|
+
function getProjectClassName(type) {
|
|
421
|
+
switch (type) {
|
|
422
|
+
case 'api':
|
|
423
|
+
return 'FndApiProject';
|
|
424
|
+
case 'frontend':
|
|
425
|
+
return 'FndFrontendProject';
|
|
426
|
+
case 'cms':
|
|
427
|
+
return 'FndCmsProject';
|
|
428
|
+
case 'component-library':
|
|
429
|
+
return 'FndComponentLibraryProject';
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Gets the npm package name for a package type.
|
|
434
|
+
*/
|
|
435
|
+
function getPackageNameForType(type) {
|
|
436
|
+
switch (type) {
|
|
437
|
+
case 'api':
|
|
438
|
+
return '@fnd-platform/api';
|
|
439
|
+
case 'frontend':
|
|
440
|
+
return '@fnd-platform/frontend';
|
|
441
|
+
case 'cms':
|
|
442
|
+
return '@fnd-platform/cms';
|
|
443
|
+
case 'component-library':
|
|
444
|
+
return '@fnd-platform/component-library';
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Gets the display label for a package type.
|
|
449
|
+
*/
|
|
450
|
+
export function getPackageTypeLabel(type) {
|
|
451
|
+
switch (type) {
|
|
452
|
+
case 'api':
|
|
453
|
+
return 'API';
|
|
454
|
+
case 'frontend':
|
|
455
|
+
return 'Frontend';
|
|
456
|
+
case 'cms':
|
|
457
|
+
return 'CMS';
|
|
458
|
+
case 'component-library':
|
|
459
|
+
return 'Component Library';
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Gets the description for a package type.
|
|
464
|
+
*/
|
|
465
|
+
export function getPackageTypeDescription(type) {
|
|
466
|
+
switch (type) {
|
|
467
|
+
case 'api':
|
|
468
|
+
return 'Backend Lambda functions with DynamoDB';
|
|
469
|
+
case 'frontend':
|
|
470
|
+
return 'Remix app with SSR and authentication';
|
|
471
|
+
case 'cms':
|
|
472
|
+
return 'Content management admin interface';
|
|
473
|
+
case 'component-library':
|
|
474
|
+
return 'Storybook component library';
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Gets the default port for a package type.
|
|
479
|
+
*/
|
|
480
|
+
export function getDefaultPort(type) {
|
|
481
|
+
switch (type) {
|
|
482
|
+
case 'frontend':
|
|
483
|
+
return 3000;
|
|
484
|
+
case 'cms':
|
|
485
|
+
return 3001;
|
|
486
|
+
case 'component-library':
|
|
487
|
+
return 6006;
|
|
488
|
+
default:
|
|
489
|
+
return 3000;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=add-package-tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-package-tui.js","sourceRoot":"","sources":["../../../src/tui/lib/add-package-tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Valid project name pattern: lowercase alphanumeric with hyphens.
|
|
11
|
+
* Must start with a letter.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PROJECT_NAME_PATTERN: RegExp;
|
|
14
|
+
/**
|
|
15
|
+
* Options for creating a project.
|
|
16
|
+
*/
|
|
17
|
+
export interface CreateProjectOptions {
|
|
18
|
+
/** Project name */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Package manager to use */
|
|
21
|
+
packageManager: 'pnpm' | 'yarn';
|
|
22
|
+
/** Whether to initialize git */
|
|
23
|
+
git: boolean;
|
|
24
|
+
/** Whether to install dependencies */
|
|
25
|
+
install: boolean;
|
|
26
|
+
/** Whether to create in current directory (TUI mode) instead of a subdirectory */
|
|
27
|
+
useCurrentDirectory?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of project creation.
|
|
31
|
+
*/
|
|
32
|
+
export interface CreateProjectResult {
|
|
33
|
+
/** Whether creation succeeded */
|
|
34
|
+
success: boolean;
|
|
35
|
+
/** Path to created project (if successful) */
|
|
36
|
+
projectPath?: string;
|
|
37
|
+
/** Error message (if failed) */
|
|
38
|
+
error?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creation step identifiers.
|
|
42
|
+
*/
|
|
43
|
+
export type CreationStep = 'idle' | 'creating-directory' | 'writing-files' | 'initializing-git' | 'installing-deps' | 'running-projen' | 'complete' | 'error';
|
|
44
|
+
/**
|
|
45
|
+
* Progress update during creation.
|
|
46
|
+
*/
|
|
47
|
+
export interface CreationProgress {
|
|
48
|
+
/** Current step */
|
|
49
|
+
step: CreationStep;
|
|
50
|
+
/** Human-readable message */
|
|
51
|
+
message: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validates a project name.
|
|
55
|
+
*
|
|
56
|
+
* @param name - The project name to validate
|
|
57
|
+
* @returns Validation result with error message if invalid
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateProjectName(name: string): {
|
|
60
|
+
valid: boolean;
|
|
61
|
+
error?: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Checks the status of a directory for project creation.
|
|
65
|
+
*
|
|
66
|
+
* @param name - The project name (directory name)
|
|
67
|
+
* @returns Directory status
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkDirectory(name: string): {
|
|
70
|
+
exists: boolean;
|
|
71
|
+
empty: boolean;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the current directory is empty or contains only hidden files.
|
|
75
|
+
*
|
|
76
|
+
* @returns True if current directory is empty/suitable for project creation
|
|
77
|
+
*/
|
|
78
|
+
export declare function isCurrentDirectoryEmpty(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Creates a project in TUI mode.
|
|
81
|
+
*
|
|
82
|
+
* Unlike the CLI version, this function:
|
|
83
|
+
* - Does NOT call process.exit()
|
|
84
|
+
* - Reports progress via callback
|
|
85
|
+
* - Cleans up on failure and returns error result
|
|
86
|
+
*
|
|
87
|
+
* @param options - Project creation options
|
|
88
|
+
* @param onProgress - Progress callback
|
|
89
|
+
* @returns Result indicating success or failure
|
|
90
|
+
*/
|
|
91
|
+
export declare function createProjectForTUI(options: CreateProjectOptions, onProgress: (progress: CreationProgress) => void): Promise<CreateProjectResult>;
|
|
92
|
+
//# sourceMappingURL=create-project-tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project-tui.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/create-project-tui.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,gCAAgC;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,oBAAoB,GACpB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBpF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAahF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CASjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAoG9B"}
|