@fnd-platform/cli 1.0.0-alpha.1
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/README.md +224 -0
- package/lib/bin/fnd.d.ts +3 -0
- package/lib/bin/fnd.d.ts.map +1 -0
- package/lib/bin/fnd.js +9 -0
- package/lib/bin/fnd.js.map +1 -0
- package/lib/commands/add.d.ts +28 -0
- package/lib/commands/add.d.ts.map +1 -0
- package/lib/commands/add.js +547 -0
- package/lib/commands/add.js.map +1 -0
- package/lib/commands/build.d.ts +62 -0
- package/lib/commands/build.d.ts.map +1 -0
- package/lib/commands/build.js +155 -0
- package/lib/commands/build.js.map +1 -0
- package/lib/commands/deploy.d.ts +67 -0
- package/lib/commands/deploy.d.ts.map +1 -0
- package/lib/commands/deploy.js +160 -0
- package/lib/commands/deploy.js.map +1 -0
- package/lib/commands/index.d.ts +6 -0
- package/lib/commands/index.d.ts.map +1 -0
- package/lib/commands/index.js +14 -0
- package/lib/commands/index.js.map +1 -0
- package/lib/commands/new.d.ts +47 -0
- package/lib/commands/new.d.ts.map +1 -0
- package/lib/commands/new.js +199 -0
- package/lib/commands/new.js.map +1 -0
- package/lib/commands/synth.d.ts +39 -0
- package/lib/commands/synth.d.ts.map +1 -0
- package/lib/commands/synth.js +72 -0
- package/lib/commands/synth.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +43 -0
- package/lib/index.js.map +1 -0
- package/lib/lib/infra-generator.d.ts +24 -0
- package/lib/lib/infra-generator.d.ts.map +1 -0
- package/lib/lib/infra-generator.js +193 -0
- package/lib/lib/infra-generator.js.map +1 -0
- package/lib/lib/logger.d.ts +50 -0
- package/lib/lib/logger.d.ts.map +1 -0
- package/lib/lib/logger.js +102 -0
- package/lib/lib/logger.js.map +1 -0
- package/lib/lib/nx-stats.d.ts +69 -0
- package/lib/lib/nx-stats.d.ts.map +1 -0
- package/lib/lib/nx-stats.js +117 -0
- package/lib/lib/nx-stats.js.map +1 -0
- package/lib/lib/project.d.ts +17 -0
- package/lib/lib/project.d.ts.map +1 -0
- package/lib/lib/project.js +49 -0
- package/lib/lib/project.js.map +1 -0
- package/lib/lib/templates.d.ts +16 -0
- package/lib/lib/templates.d.ts.map +1 -0
- package/lib/lib/templates.js +42 -0
- package/lib/lib/templates.js.map +1 -0
- package/lib/lib/timer.d.ts +120 -0
- package/lib/lib/timer.d.ts.map +1 -0
- package/lib/lib/timer.js +127 -0
- package/lib/lib/timer.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addCommand = addCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const logger_js_1 = require("../lib/logger.js");
|
|
8
|
+
const project_js_1 = require("../lib/project.js");
|
|
9
|
+
const infra_generator_js_1 = require("../lib/infra-generator.js");
|
|
10
|
+
/**
|
|
11
|
+
* Creates the `fnd add` command with subcommands.
|
|
12
|
+
*
|
|
13
|
+
* @returns Commander command instance
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { addCommand } from '@fnd-platform/cli';
|
|
18
|
+
*
|
|
19
|
+
* const program = new Command();
|
|
20
|
+
* program.addCommand(addCommand());
|
|
21
|
+
*
|
|
22
|
+
* // Add an API package
|
|
23
|
+
* program.parse(['node', 'fnd', 'add', 'api', '--name=api']);
|
|
24
|
+
*
|
|
25
|
+
* // Add a frontend package linked to the API
|
|
26
|
+
* program.parse(['node', 'fnd', 'add', 'frontend', '--name=web', '--api=api']);
|
|
27
|
+
*
|
|
28
|
+
* // Add a CMS package
|
|
29
|
+
* program.parse(['node', 'fnd', 'add', 'cms', '--name=admin', '--api=api']);
|
|
30
|
+
*
|
|
31
|
+
* // Add a component library
|
|
32
|
+
* program.parse(['node', 'fnd', 'add', 'component-library', '--name=ui']);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function addCommand() {
|
|
36
|
+
const cmd = new commander_1.Command('add').description('Add a package to the project');
|
|
37
|
+
// Add api subcommand
|
|
38
|
+
cmd
|
|
39
|
+
.command('api')
|
|
40
|
+
.description('Add a Lambda API package to the project')
|
|
41
|
+
.requiredOption('--name <name>', 'Package name (e.g., "api")')
|
|
42
|
+
.option('--outdir <path>', 'Output directory (default: packages/<name>)')
|
|
43
|
+
.option('--no-dynamodb', 'Disable DynamoDB integration')
|
|
44
|
+
.option('--no-cognito', 'Disable Cognito auth integration')
|
|
45
|
+
.action(async (options) => {
|
|
46
|
+
await addApiPackage(options);
|
|
47
|
+
});
|
|
48
|
+
// Add frontend subcommand
|
|
49
|
+
cmd
|
|
50
|
+
.command('frontend')
|
|
51
|
+
.description('Add a Remix frontend package to the project')
|
|
52
|
+
.requiredOption('--name <name>', 'Package name (e.g., "frontend")')
|
|
53
|
+
.requiredOption('--api <api>', 'API package name to link (e.g., "api")')
|
|
54
|
+
.option('--outdir <path>', 'Output directory (default: packages/<name>)')
|
|
55
|
+
.option('--no-auth', 'Disable authentication integration')
|
|
56
|
+
.option('--port <port>', 'Development server port', '3000')
|
|
57
|
+
.option('--theme <theme>', 'shadcn/ui theme color', 'zinc')
|
|
58
|
+
.action(async (options) => {
|
|
59
|
+
await addFrontendPackage(options);
|
|
60
|
+
});
|
|
61
|
+
// Add cms subcommand
|
|
62
|
+
cmd
|
|
63
|
+
.command('cms')
|
|
64
|
+
.description('Add a CMS admin package to the project')
|
|
65
|
+
.requiredOption('--name <name>', 'Package name (e.g., "cms")')
|
|
66
|
+
.requiredOption('--api <api>', 'API package name to link (e.g., "api")')
|
|
67
|
+
.option('--outdir <path>', 'Output directory (default: packages/<name>)')
|
|
68
|
+
.option('--port <port>', 'Development server port', '3001')
|
|
69
|
+
.option('--no-media-upload', 'Disable media upload features')
|
|
70
|
+
.option('--rich-text-editor <editor>', 'Rich text editor (tiptap|lexical)', 'tiptap')
|
|
71
|
+
.option('--theme <theme>', 'shadcn/ui theme color', 'zinc')
|
|
72
|
+
.action(async (options) => {
|
|
73
|
+
await addCmsPackage(options);
|
|
74
|
+
});
|
|
75
|
+
// Add component-library subcommand
|
|
76
|
+
cmd
|
|
77
|
+
.command('component-library')
|
|
78
|
+
.description('Add a component library package to the project')
|
|
79
|
+
.requiredOption('--name <name>', 'Package name (e.g., "ui")')
|
|
80
|
+
.option('--outdir <path>', 'Output directory (default: packages/<name>)')
|
|
81
|
+
.option('--port <port>', 'Storybook dev server port', '6006')
|
|
82
|
+
.action(async (options) => {
|
|
83
|
+
await addComponentLibraryPackage(options);
|
|
84
|
+
});
|
|
85
|
+
return cmd;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Adds an API package to the project by modifying .projenrc.ts.
|
|
89
|
+
*
|
|
90
|
+
* @param options - Command options
|
|
91
|
+
*/
|
|
92
|
+
async function addApiPackage(options) {
|
|
93
|
+
const projectRoot = (0, project_js_1.requireProjectRoot)();
|
|
94
|
+
const projenrcPath = (0, path_1.join)(projectRoot, '.projenrc.ts');
|
|
95
|
+
logger_js_1.logger.info(`Adding API package '${options.name}' to project...`);
|
|
96
|
+
try {
|
|
97
|
+
// Read existing .projenrc.ts
|
|
98
|
+
const existingContent = (0, fs_1.readFileSync)(projenrcPath, 'utf-8');
|
|
99
|
+
// Check if FndApiProject is already imported
|
|
100
|
+
if (existingContent.includes('FndApiProject')) {
|
|
101
|
+
logger_js_1.logger.warn('FndApiProject is already imported in .projenrc.ts');
|
|
102
|
+
logger_js_1.logger.info('If you want to add another API package, manually add it to .projenrc.ts');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Generate the new content
|
|
106
|
+
const newContent = modifyProjenrc(existingContent, options);
|
|
107
|
+
// Write updated .projenrc.ts
|
|
108
|
+
(0, fs_1.writeFileSync)(projenrcPath, newContent);
|
|
109
|
+
logger_js_1.logger.success(`API package '${options.name}' added to .projenrc.ts`);
|
|
110
|
+
// Extract project name from .projenrc.ts
|
|
111
|
+
const projectName = extractProjectName(existingContent);
|
|
112
|
+
// Generate infrastructure package
|
|
113
|
+
(0, infra_generator_js_1.generateInfraPackage)({
|
|
114
|
+
projectRoot,
|
|
115
|
+
projectName,
|
|
116
|
+
apiPackageName: options.name,
|
|
117
|
+
});
|
|
118
|
+
logger_js_1.logger.info('');
|
|
119
|
+
logger_js_1.logger.info('Next steps:');
|
|
120
|
+
console.log(' 1. Run `fnd synth` to generate the package files');
|
|
121
|
+
console.log(' 2. Run `pnpm install` to install dependencies');
|
|
122
|
+
console.log(` 3. Start developing in packages/${options.name}/src/handlers/`);
|
|
123
|
+
console.log(' 4. Deploy with `cd packages/infra && pnpm deploy --context stage=dev`');
|
|
124
|
+
logger_js_1.logger.info('');
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
logger_js_1.logger.error(`Failed to add API package: ${error.message}`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Modifies the .projenrc.ts content to add FndApiProject.
|
|
133
|
+
*
|
|
134
|
+
* @param content - Existing .projenrc.ts content
|
|
135
|
+
* @param options - Add API options
|
|
136
|
+
* @returns Modified .projenrc.ts content
|
|
137
|
+
*/
|
|
138
|
+
function modifyProjenrc(content, options) {
|
|
139
|
+
const lines = content.split('\n');
|
|
140
|
+
const result = [];
|
|
141
|
+
let foundCoreImport = false;
|
|
142
|
+
let addedApiImport = false;
|
|
143
|
+
let insertedApiProject = false;
|
|
144
|
+
// Determine the project variable name
|
|
145
|
+
const projectMatch = content.match(/const\s+(\w+)\s*=\s*new\s+FndMonorepoProject/);
|
|
146
|
+
const projectVarName = projectMatch ? projectMatch[1] : 'project';
|
|
147
|
+
for (let i = 0; i < lines.length; i++) {
|
|
148
|
+
const line = lines[i];
|
|
149
|
+
// Add FndApiProject import after @fnd-platform/core import
|
|
150
|
+
if (!addedApiImport && line.includes("from '@fnd-platform/core'")) {
|
|
151
|
+
result.push(line);
|
|
152
|
+
result.push("import { FndApiProject } from '@fnd-platform/api';");
|
|
153
|
+
addedApiImport = true;
|
|
154
|
+
foundCoreImport = true;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// If no core import found, add both imports at the top
|
|
158
|
+
if (!foundCoreImport && !addedApiImport && line.trim().startsWith('import')) {
|
|
159
|
+
// Check if this is the last import line
|
|
160
|
+
const nextLine = lines[i + 1] || '';
|
|
161
|
+
if (!nextLine.trim().startsWith('import')) {
|
|
162
|
+
result.push(line);
|
|
163
|
+
result.push("import { FndApiProject } from '@fnd-platform/api';");
|
|
164
|
+
addedApiImport = true;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Insert API project before synth() call
|
|
169
|
+
if (!insertedApiProject && line.includes('.synth()')) {
|
|
170
|
+
// Add empty line and API project definition
|
|
171
|
+
result.push('');
|
|
172
|
+
result.push(generateApiProjectCode(projectVarName, options));
|
|
173
|
+
result.push('');
|
|
174
|
+
insertedApiProject = true;
|
|
175
|
+
}
|
|
176
|
+
result.push(line);
|
|
177
|
+
}
|
|
178
|
+
// If we didn't find synth(), append at the end
|
|
179
|
+
if (!insertedApiProject) {
|
|
180
|
+
result.push('');
|
|
181
|
+
result.push(generateApiProjectCode(projectVarName, options));
|
|
182
|
+
result.push('');
|
|
183
|
+
result.push(`${projectVarName}.synth();`);
|
|
184
|
+
}
|
|
185
|
+
return result.join('\n');
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generates the FndApiProject instantiation code.
|
|
189
|
+
*
|
|
190
|
+
* @param parentVar - Name of the parent project variable
|
|
191
|
+
* @param options - Add API options
|
|
192
|
+
* @returns Generated TypeScript code
|
|
193
|
+
*/
|
|
194
|
+
function generateApiProjectCode(parentVar, options) {
|
|
195
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
196
|
+
const dynamodbLine = !options.dynamodb ? '\n dynamodb: false,' : '';
|
|
197
|
+
const cognitoLine = !options.cognito ? '\n cognito: false,' : '';
|
|
198
|
+
return `const ${options.name} = new FndApiProject({
|
|
199
|
+
parent: ${parentVar},
|
|
200
|
+
name: '${options.name}',${outdirLine}${dynamodbLine}${cognitoLine}
|
|
201
|
+
});`;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Extracts the project name from .projenrc.ts content.
|
|
205
|
+
*
|
|
206
|
+
* @param content - .projenrc.ts file content
|
|
207
|
+
* @returns Project name
|
|
208
|
+
*/
|
|
209
|
+
function extractProjectName(content) {
|
|
210
|
+
// Try to find name in FndMonorepoProject options
|
|
211
|
+
const nameMatch = content.match(/new\s+FndMonorepoProject\s*\(\s*\{[^}]*name:\s*['"]([^'"]+)['"]/s);
|
|
212
|
+
if (nameMatch) {
|
|
213
|
+
return nameMatch[1];
|
|
214
|
+
}
|
|
215
|
+
// Fallback: look for any name property
|
|
216
|
+
const fallbackMatch = content.match(/name:\s*['"]([^'"]+)['"]/);
|
|
217
|
+
if (fallbackMatch) {
|
|
218
|
+
return fallbackMatch[1];
|
|
219
|
+
}
|
|
220
|
+
// Default fallback
|
|
221
|
+
return 'my-app';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Adds a frontend package to the project by modifying .projenrc.ts.
|
|
225
|
+
*
|
|
226
|
+
* @param options - Command options
|
|
227
|
+
*/
|
|
228
|
+
async function addFrontendPackage(options) {
|
|
229
|
+
const projectRoot = (0, project_js_1.requireProjectRoot)();
|
|
230
|
+
const projenrcPath = (0, path_1.join)(projectRoot, '.projenrc.ts');
|
|
231
|
+
logger_js_1.logger.info(`Adding frontend package '${options.name}' to project...`);
|
|
232
|
+
try {
|
|
233
|
+
// Read existing .projenrc.ts
|
|
234
|
+
const existingContent = (0, fs_1.readFileSync)(projenrcPath, 'utf-8');
|
|
235
|
+
// Check if FndFrontendProject is already imported
|
|
236
|
+
if (existingContent.includes('FndFrontendProject')) {
|
|
237
|
+
logger_js_1.logger.warn('FndFrontendProject is already imported in .projenrc.ts');
|
|
238
|
+
logger_js_1.logger.info('If you want to add another frontend package, manually add it to .projenrc.ts');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// Check if the API package exists in .projenrc.ts
|
|
242
|
+
const apiVarPattern = new RegExp(`const\\s+${options.api}\\s*=\\s*new\\s+FndApiProject`);
|
|
243
|
+
if (!apiVarPattern.test(existingContent)) {
|
|
244
|
+
logger_js_1.logger.error(`API package '${options.api}' not found in .projenrc.ts`);
|
|
245
|
+
logger_js_1.logger.info(`Make sure you have added the API package first: fnd add api --name=${options.api}`);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
// Generate the new content
|
|
249
|
+
const newContent = modifyProjenrcForFrontend(existingContent, options);
|
|
250
|
+
// Write updated .projenrc.ts
|
|
251
|
+
(0, fs_1.writeFileSync)(projenrcPath, newContent);
|
|
252
|
+
logger_js_1.logger.success(`Frontend package '${options.name}' added to .projenrc.ts`);
|
|
253
|
+
logger_js_1.logger.info('');
|
|
254
|
+
logger_js_1.logger.info('Next steps:');
|
|
255
|
+
console.log(' 1. Run `fnd synth` to generate the package files');
|
|
256
|
+
console.log(' 2. Run `pnpm install` to install dependencies');
|
|
257
|
+
console.log(` 3. Start developing in packages/${options.name}/app/routes/`);
|
|
258
|
+
console.log(` 4. Run dev server with \`cd packages/${options.name} && pnpm dev\``);
|
|
259
|
+
logger_js_1.logger.info('');
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
logger_js_1.logger.error(`Failed to add frontend package: ${error.message}`);
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Modifies the .projenrc.ts content to add FndFrontendProject.
|
|
268
|
+
*
|
|
269
|
+
* @param content - Existing .projenrc.ts content
|
|
270
|
+
* @param options - Add frontend options
|
|
271
|
+
* @returns Modified .projenrc.ts content
|
|
272
|
+
*/
|
|
273
|
+
function modifyProjenrcForFrontend(content, options) {
|
|
274
|
+
const lines = content.split('\n');
|
|
275
|
+
const result = [];
|
|
276
|
+
let addedFrontendImport = false;
|
|
277
|
+
let insertedFrontendProject = false;
|
|
278
|
+
// Determine the project variable name
|
|
279
|
+
const projectMatch = content.match(/const\s+(\w+)\s*=\s*new\s+FndMonorepoProject/);
|
|
280
|
+
const projectVarName = projectMatch ? projectMatch[1] : 'project';
|
|
281
|
+
for (let i = 0; i < lines.length; i++) {
|
|
282
|
+
const line = lines[i];
|
|
283
|
+
// Add FndFrontendProject import after @fnd-platform/api import (if exists)
|
|
284
|
+
// or after @fnd-platform/core import
|
|
285
|
+
if (!addedFrontendImport &&
|
|
286
|
+
(line.includes("from '@fnd-platform/api'") || line.includes("from '@fnd-platform/core'"))) {
|
|
287
|
+
result.push(line);
|
|
288
|
+
// Check if next line is also an import from @fnd-platform
|
|
289
|
+
const nextLine = lines[i + 1] || '';
|
|
290
|
+
if (!nextLine.includes("from '@fnd-platform/")) {
|
|
291
|
+
result.push("import { FndFrontendProject } from '@fnd-platform/frontend';");
|
|
292
|
+
addedFrontendImport = true;
|
|
293
|
+
}
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
// Insert frontend project before synth() call
|
|
297
|
+
if (!insertedFrontendProject && line.includes('.synth()')) {
|
|
298
|
+
// Add empty line and frontend project definition
|
|
299
|
+
result.push('');
|
|
300
|
+
result.push(generateFrontendProjectCode(projectVarName, options));
|
|
301
|
+
result.push('');
|
|
302
|
+
insertedFrontendProject = true;
|
|
303
|
+
}
|
|
304
|
+
result.push(line);
|
|
305
|
+
}
|
|
306
|
+
// If we didn't find synth(), append at the end
|
|
307
|
+
if (!insertedFrontendProject) {
|
|
308
|
+
result.push('');
|
|
309
|
+
result.push(generateFrontendProjectCode(projectVarName, options));
|
|
310
|
+
result.push('');
|
|
311
|
+
result.push(`${projectVarName}.synth();`);
|
|
312
|
+
}
|
|
313
|
+
return result.join('\n');
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Generates the FndFrontendProject instantiation code.
|
|
317
|
+
*
|
|
318
|
+
* @param parentVar - Name of the parent project variable
|
|
319
|
+
* @param options - Add frontend options
|
|
320
|
+
* @returns Generated TypeScript code
|
|
321
|
+
*/
|
|
322
|
+
function generateFrontendProjectCode(parentVar, options) {
|
|
323
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
324
|
+
const authLine = !options.auth ? '\n auth: false,' : '';
|
|
325
|
+
const portLine = options.port !== '3000' ? `\n port: ${options.port},` : '';
|
|
326
|
+
const themeLine = options.theme !== 'zinc' ? `\n shadcnTheme: '${options.theme}',` : '';
|
|
327
|
+
return `const ${options.name} = new FndFrontendProject({
|
|
328
|
+
parent: ${parentVar},
|
|
329
|
+
name: '${options.name}',
|
|
330
|
+
api: ${options.api},${outdirLine}${authLine}${portLine}${themeLine}
|
|
331
|
+
});`;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Adds a CMS package to the project by modifying .projenrc.ts.
|
|
335
|
+
*
|
|
336
|
+
* @param options - Command options
|
|
337
|
+
*/
|
|
338
|
+
async function addCmsPackage(options) {
|
|
339
|
+
const projectRoot = (0, project_js_1.requireProjectRoot)();
|
|
340
|
+
const projenrcPath = (0, path_1.join)(projectRoot, '.projenrc.ts');
|
|
341
|
+
logger_js_1.logger.info(`Adding CMS package '${options.name}' to project...`);
|
|
342
|
+
try {
|
|
343
|
+
// Read existing .projenrc.ts
|
|
344
|
+
const existingContent = (0, fs_1.readFileSync)(projenrcPath, 'utf-8');
|
|
345
|
+
// Check if FndCmsProject is already imported
|
|
346
|
+
if (existingContent.includes('FndCmsProject')) {
|
|
347
|
+
logger_js_1.logger.warn('FndCmsProject is already imported in .projenrc.ts');
|
|
348
|
+
logger_js_1.logger.info('If you want to add another CMS package, manually add it to .projenrc.ts');
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
// Check if the API package exists in .projenrc.ts
|
|
352
|
+
const apiVarPattern = new RegExp(`const\\s+${options.api}\\s*=\\s*new\\s+FndApiProject`);
|
|
353
|
+
if (!apiVarPattern.test(existingContent)) {
|
|
354
|
+
logger_js_1.logger.error(`API package '${options.api}' not found in .projenrc.ts`);
|
|
355
|
+
logger_js_1.logger.info(`Make sure you have added the API package first: fnd add api --name=${options.api}`);
|
|
356
|
+
process.exit(1);
|
|
357
|
+
}
|
|
358
|
+
// Generate the new content
|
|
359
|
+
const newContent = modifyProjenrcForCms(existingContent, options);
|
|
360
|
+
// Write updated .projenrc.ts
|
|
361
|
+
(0, fs_1.writeFileSync)(projenrcPath, newContent);
|
|
362
|
+
logger_js_1.logger.success(`CMS package '${options.name}' added to .projenrc.ts`);
|
|
363
|
+
logger_js_1.logger.info('');
|
|
364
|
+
logger_js_1.logger.info('Next steps:');
|
|
365
|
+
console.log(' 1. Run `fnd synth` to generate the package files');
|
|
366
|
+
console.log(' 2. Run `pnpm install` to install dependencies');
|
|
367
|
+
console.log(` 3. Start developing in packages/${options.name}/app/routes/`);
|
|
368
|
+
console.log(` 4. Run dev server with \`cd packages/${options.name} && pnpm dev\``);
|
|
369
|
+
logger_js_1.logger.info('');
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
logger_js_1.logger.error(`Failed to add CMS package: ${error.message}`);
|
|
373
|
+
process.exit(1);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Modifies the .projenrc.ts content to add FndCmsProject.
|
|
378
|
+
*
|
|
379
|
+
* @param content - Existing .projenrc.ts content
|
|
380
|
+
* @param options - Add CMS options
|
|
381
|
+
* @returns Modified .projenrc.ts content
|
|
382
|
+
*/
|
|
383
|
+
function modifyProjenrcForCms(content, options) {
|
|
384
|
+
const lines = content.split('\n');
|
|
385
|
+
const result = [];
|
|
386
|
+
let addedCmsImport = false;
|
|
387
|
+
let insertedCmsProject = false;
|
|
388
|
+
// Determine the project variable name
|
|
389
|
+
const projectMatch = content.match(/const\s+(\w+)\s*=\s*new\s+FndMonorepoProject/);
|
|
390
|
+
const projectVarName = projectMatch ? projectMatch[1] : 'project';
|
|
391
|
+
for (let i = 0; i < lines.length; i++) {
|
|
392
|
+
const line = lines[i];
|
|
393
|
+
// Add FndCmsProject import after the last @fnd-platform import
|
|
394
|
+
if (!addedCmsImport &&
|
|
395
|
+
(line.includes("from '@fnd-platform/frontend'") ||
|
|
396
|
+
line.includes("from '@fnd-platform/api'") ||
|
|
397
|
+
line.includes("from '@fnd-platform/core'"))) {
|
|
398
|
+
result.push(line);
|
|
399
|
+
// Check if next line is also an import from @fnd-platform
|
|
400
|
+
const nextLine = lines[i + 1] || '';
|
|
401
|
+
if (!nextLine.includes("from '@fnd-platform/")) {
|
|
402
|
+
result.push("import { FndCmsProject } from '@fnd-platform/cms';");
|
|
403
|
+
addedCmsImport = true;
|
|
404
|
+
}
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
// Insert CMS project before synth() call
|
|
408
|
+
if (!insertedCmsProject && line.includes('.synth()')) {
|
|
409
|
+
// Add empty line and CMS project definition
|
|
410
|
+
result.push('');
|
|
411
|
+
result.push(generateCmsProjectCode(projectVarName, options));
|
|
412
|
+
result.push('');
|
|
413
|
+
insertedCmsProject = true;
|
|
414
|
+
}
|
|
415
|
+
result.push(line);
|
|
416
|
+
}
|
|
417
|
+
// If we didn't find synth(), append at the end
|
|
418
|
+
if (!insertedCmsProject) {
|
|
419
|
+
result.push('');
|
|
420
|
+
result.push(generateCmsProjectCode(projectVarName, options));
|
|
421
|
+
result.push('');
|
|
422
|
+
result.push(`${projectVarName}.synth();`);
|
|
423
|
+
}
|
|
424
|
+
return result.join('\n');
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Generates the FndCmsProject instantiation code.
|
|
428
|
+
*
|
|
429
|
+
* @param parentVar - Name of the parent project variable
|
|
430
|
+
* @param options - Add CMS options
|
|
431
|
+
* @returns Generated TypeScript code
|
|
432
|
+
*/
|
|
433
|
+
function generateCmsProjectCode(parentVar, options) {
|
|
434
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
435
|
+
const portLine = options.port !== '3001' ? `\n port: ${options.port},` : '';
|
|
436
|
+
const mediaUploadLine = !options.mediaUpload ? '\n mediaUpload: false,' : '';
|
|
437
|
+
const richTextEditorLine = options.richTextEditor !== 'tiptap' ? `\n richTextEditor: '${options.richTextEditor}',` : '';
|
|
438
|
+
const themeLine = options.theme !== 'zinc' ? `\n shadcnTheme: '${options.theme}',` : '';
|
|
439
|
+
return `const ${options.name} = new FndCmsProject({
|
|
440
|
+
parent: ${parentVar},
|
|
441
|
+
name: '${options.name}',
|
|
442
|
+
api: ${options.api},${outdirLine}${portLine}${mediaUploadLine}${richTextEditorLine}${themeLine}
|
|
443
|
+
});`;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Adds a component library package to the project by modifying .projenrc.ts.
|
|
447
|
+
*
|
|
448
|
+
* @param options - Command options
|
|
449
|
+
*/
|
|
450
|
+
async function addComponentLibraryPackage(options) {
|
|
451
|
+
const projectRoot = (0, project_js_1.requireProjectRoot)();
|
|
452
|
+
const projenrcPath = (0, path_1.join)(projectRoot, '.projenrc.ts');
|
|
453
|
+
logger_js_1.logger.info(`Adding component library package '${options.name}' to project...`);
|
|
454
|
+
try {
|
|
455
|
+
// Read existing .projenrc.ts
|
|
456
|
+
const existingContent = (0, fs_1.readFileSync)(projenrcPath, 'utf-8');
|
|
457
|
+
// Check if FndComponentLibraryProject is already imported
|
|
458
|
+
if (existingContent.includes('FndComponentLibraryProject')) {
|
|
459
|
+
logger_js_1.logger.warn('FndComponentLibraryProject is already imported in .projenrc.ts');
|
|
460
|
+
logger_js_1.logger.info('If you want to add another component library package, manually add it to .projenrc.ts');
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
// Generate the new content
|
|
464
|
+
const newContent = modifyProjenrcForComponentLibrary(existingContent, options);
|
|
465
|
+
// Write updated .projenrc.ts
|
|
466
|
+
(0, fs_1.writeFileSync)(projenrcPath, newContent);
|
|
467
|
+
logger_js_1.logger.success(`Component library package '${options.name}' added to .projenrc.ts`);
|
|
468
|
+
logger_js_1.logger.info('');
|
|
469
|
+
logger_js_1.logger.info('Next steps:');
|
|
470
|
+
console.log(' 1. Run `fnd synth` to generate the package files');
|
|
471
|
+
console.log(' 2. Run `pnpm install` to install dependencies');
|
|
472
|
+
console.log(` 3. Start Storybook with \`cd packages/${options.name} && pnpm storybook\``);
|
|
473
|
+
console.log(` 4. Add components in packages/${options.name}/src/components/`);
|
|
474
|
+
logger_js_1.logger.info('');
|
|
475
|
+
}
|
|
476
|
+
catch (error) {
|
|
477
|
+
logger_js_1.logger.error(`Failed to add component library package: ${error.message}`);
|
|
478
|
+
process.exit(1);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Modifies the .projenrc.ts content to add FndComponentLibraryProject.
|
|
483
|
+
*
|
|
484
|
+
* @param content - Existing .projenrc.ts content
|
|
485
|
+
* @param options - Add component library options
|
|
486
|
+
* @returns Modified .projenrc.ts content
|
|
487
|
+
*/
|
|
488
|
+
function modifyProjenrcForComponentLibrary(content, options) {
|
|
489
|
+
const lines = content.split('\n');
|
|
490
|
+
const result = [];
|
|
491
|
+
let addedComponentLibraryImport = false;
|
|
492
|
+
let insertedComponentLibraryProject = false;
|
|
493
|
+
// Determine the project variable name
|
|
494
|
+
const projectMatch = content.match(/const\s+(\w+)\s*=\s*new\s+FndMonorepoProject/);
|
|
495
|
+
const projectVarName = projectMatch ? projectMatch[1] : 'project';
|
|
496
|
+
for (let i = 0; i < lines.length; i++) {
|
|
497
|
+
const line = lines[i];
|
|
498
|
+
// Add FndComponentLibraryProject import after the last @fnd-platform import
|
|
499
|
+
if (!addedComponentLibraryImport &&
|
|
500
|
+
(line.includes("from '@fnd-platform/cms'") ||
|
|
501
|
+
line.includes("from '@fnd-platform/frontend'") ||
|
|
502
|
+
line.includes("from '@fnd-platform/api'") ||
|
|
503
|
+
line.includes("from '@fnd-platform/core'"))) {
|
|
504
|
+
result.push(line);
|
|
505
|
+
// Check if next line is also an import from @fnd-platform
|
|
506
|
+
const nextLine = lines[i + 1] || '';
|
|
507
|
+
if (!nextLine.includes("from '@fnd-platform/")) {
|
|
508
|
+
result.push("import { FndComponentLibraryProject } from '@fnd-platform/component-library';");
|
|
509
|
+
addedComponentLibraryImport = true;
|
|
510
|
+
}
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
// Insert component library project before synth() call
|
|
514
|
+
if (!insertedComponentLibraryProject && line.includes('.synth()')) {
|
|
515
|
+
// Add empty line and component library project definition
|
|
516
|
+
result.push('');
|
|
517
|
+
result.push(generateComponentLibraryProjectCode(projectVarName, options));
|
|
518
|
+
result.push('');
|
|
519
|
+
insertedComponentLibraryProject = true;
|
|
520
|
+
}
|
|
521
|
+
result.push(line);
|
|
522
|
+
}
|
|
523
|
+
// If we didn't find synth(), append at the end
|
|
524
|
+
if (!insertedComponentLibraryProject) {
|
|
525
|
+
result.push('');
|
|
526
|
+
result.push(generateComponentLibraryProjectCode(projectVarName, options));
|
|
527
|
+
result.push('');
|
|
528
|
+
result.push(`${projectVarName}.synth();`);
|
|
529
|
+
}
|
|
530
|
+
return result.join('\n');
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Generates the FndComponentLibraryProject instantiation code.
|
|
534
|
+
*
|
|
535
|
+
* @param parentVar - Name of the parent project variable
|
|
536
|
+
* @param options - Add component library options
|
|
537
|
+
* @returns Generated TypeScript code
|
|
538
|
+
*/
|
|
539
|
+
function generateComponentLibraryProjectCode(parentVar, options) {
|
|
540
|
+
const outdirLine = options.outdir ? `\n outdir: '${options.outdir}',` : '';
|
|
541
|
+
const portLine = options.port !== '6006' ? `\n storybookPort: ${options.port},` : '';
|
|
542
|
+
return `const ${options.name} = new FndComponentLibraryProject({
|
|
543
|
+
parent: ${parentVar},
|
|
544
|
+
name: '${options.name}',${outdirLine}${portLine}
|
|
545
|
+
});`;
|
|
546
|
+
}
|
|
547
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the build command.
|
|
4
|
+
*/
|
|
5
|
+
interface BuildCommandOptions {
|
|
6
|
+
skipCache?: boolean;
|
|
7
|
+
parallel?: string;
|
|
8
|
+
package?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates the `fnd build` command.
|
|
12
|
+
*
|
|
13
|
+
* @returns Commander command instance
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { buildCommand } from '@fnd-platform/cli';
|
|
18
|
+
*
|
|
19
|
+
* const program = new Command();
|
|
20
|
+
* program.addCommand(buildCommand());
|
|
21
|
+
* program.parse(['node', 'fnd', 'build']);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildCommand(): Command;
|
|
25
|
+
/**
|
|
26
|
+
* Runs the NX build.
|
|
27
|
+
*
|
|
28
|
+
* @param options - Command options
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Build all packages
|
|
33
|
+
* await runBuild({});
|
|
34
|
+
*
|
|
35
|
+
* // Build a specific package with no cache
|
|
36
|
+
* await runBuild({ package: 'api', skipCache: true });
|
|
37
|
+
*
|
|
38
|
+
* // Build with parallel tasks
|
|
39
|
+
* await runBuild({ parallel: '4' });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function runBuild(options: BuildCommandOptions): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Builds the NX command arguments based on options.
|
|
45
|
+
*
|
|
46
|
+
* @param options - Command options
|
|
47
|
+
* @returns Array of command arguments
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* // Build all packages
|
|
52
|
+
* buildNxArgs({});
|
|
53
|
+
* // Returns: ['npx', 'nx', 'run-many', '--target=build', '--all']
|
|
54
|
+
*
|
|
55
|
+
* // Build specific package with skip cache
|
|
56
|
+
* buildNxArgs({ package: 'api', skipCache: true });
|
|
57
|
+
* // Returns: ['npx', 'nx', 'run', 'api:build', '--skip-nx-cache']
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildNxArgs(options: BuildCommandOptions): string[];
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAStC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAsBlE"}
|