@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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/lib/bin/fnd.d.ts +3 -0
  4. package/lib/bin/fnd.d.ts.map +1 -0
  5. package/lib/bin/fnd.js +9 -0
  6. package/lib/bin/fnd.js.map +1 -0
  7. package/lib/commands/add.d.ts +28 -0
  8. package/lib/commands/add.d.ts.map +1 -0
  9. package/lib/commands/add.js +547 -0
  10. package/lib/commands/add.js.map +1 -0
  11. package/lib/commands/build.d.ts +62 -0
  12. package/lib/commands/build.d.ts.map +1 -0
  13. package/lib/commands/build.js +155 -0
  14. package/lib/commands/build.js.map +1 -0
  15. package/lib/commands/deploy.d.ts +67 -0
  16. package/lib/commands/deploy.d.ts.map +1 -0
  17. package/lib/commands/deploy.js +160 -0
  18. package/lib/commands/deploy.js.map +1 -0
  19. package/lib/commands/index.d.ts +6 -0
  20. package/lib/commands/index.d.ts.map +1 -0
  21. package/lib/commands/index.js +14 -0
  22. package/lib/commands/index.js.map +1 -0
  23. package/lib/commands/new.d.ts +47 -0
  24. package/lib/commands/new.d.ts.map +1 -0
  25. package/lib/commands/new.js +199 -0
  26. package/lib/commands/new.js.map +1 -0
  27. package/lib/commands/synth.d.ts +39 -0
  28. package/lib/commands/synth.d.ts.map +1 -0
  29. package/lib/commands/synth.js +72 -0
  30. package/lib/commands/synth.js.map +1 -0
  31. package/lib/index.d.ts +15 -0
  32. package/lib/index.d.ts.map +1 -0
  33. package/lib/index.js +43 -0
  34. package/lib/index.js.map +1 -0
  35. package/lib/lib/infra-generator.d.ts +24 -0
  36. package/lib/lib/infra-generator.d.ts.map +1 -0
  37. package/lib/lib/infra-generator.js +193 -0
  38. package/lib/lib/infra-generator.js.map +1 -0
  39. package/lib/lib/logger.d.ts +50 -0
  40. package/lib/lib/logger.d.ts.map +1 -0
  41. package/lib/lib/logger.js +102 -0
  42. package/lib/lib/logger.js.map +1 -0
  43. package/lib/lib/nx-stats.d.ts +69 -0
  44. package/lib/lib/nx-stats.d.ts.map +1 -0
  45. package/lib/lib/nx-stats.js +117 -0
  46. package/lib/lib/nx-stats.js.map +1 -0
  47. package/lib/lib/project.d.ts +17 -0
  48. package/lib/lib/project.d.ts.map +1 -0
  49. package/lib/lib/project.js +49 -0
  50. package/lib/lib/project.js.map +1 -0
  51. package/lib/lib/templates.d.ts +16 -0
  52. package/lib/lib/templates.d.ts.map +1 -0
  53. package/lib/lib/templates.js +42 -0
  54. package/lib/lib/templates.js.map +1 -0
  55. package/lib/lib/timer.d.ts +120 -0
  56. package/lib/lib/timer.d.ts.map +1 -0
  57. package/lib/lib/timer.js +127 -0
  58. package/lib/lib/timer.js.map +1 -0
  59. 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":";;AA4EA,gCAwDC;AApID,yCAAoC;AACpC,2BAAiD;AACjD,+BAA4B;AAC5B,gDAA0C;AAC1C,kDAAuD;AACvD,kEAAiE;AA8CjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,UAAU;IACxB,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;IAE3E,qBAAqB;IACrB,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,yCAAyC,CAAC;SACtD,cAAc,CAAC,eAAe,EAAE,4BAA4B,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC;SACvD,MAAM,CAAC,cAAc,EAAE,kCAAkC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,GAAG;SACA,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,cAAc,CAAC,eAAe,EAAE,iCAAiC,CAAC;SAClE,cAAc,CAAC,aAAa,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,yBAAyB,EAAE,MAAM,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,wCAAwC,CAAC;SACrD,cAAc,CAAC,eAAe,EAAE,4BAA4B,CAAC;SAC7D,cAAc,CAAC,aAAa,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,yBAAyB,EAAE,MAAM,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SAC5D,MAAM,CAAC,6BAA6B,EAAE,mCAAmC,EAAE,QAAQ,CAAC;SACpF,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,mCAAmC;IACnC,GAAG;SACA,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,gDAAgD,CAAC;SAC7D,cAAc,CAAC,eAAe,EAAE,2BAA2B,CAAC;SAC5D,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAmC,EAAE,EAAE;QACpD,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,MAAM,WAAW,GAAG,IAAA,+BAAkB,GAAE,CAAC;IACzC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvD,kBAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,6CAA6C;QAC7C,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,kBAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,kBAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE5D,6BAA6B;QAC7B,IAAA,kBAAa,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExC,kBAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAEtE,yCAAyC;QACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAExD,kCAAkC;QAClC,IAAA,yCAAoB,EAAC;YACnB,WAAW;YACX,WAAW;YACX,cAAc,EAAE,OAAO,CAAC,IAAI;SAC7B,CAAC,CAAC;QAEH,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,IAAI,gBAAgB,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,8BAA+B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,OAAsB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,sCAAsC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,2DAA2D;QAC3D,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YAClE,cAAc,GAAG,IAAI,CAAC;YACtB,eAAe,GAAG,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,wCAAwC;YACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAClE,cAAc,GAAG,IAAI,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,4CAA4C;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,SAAiB,EAAE,OAAsB;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,OAAO,SAAS,OAAO,CAAC,IAAI;YAClB,SAAS;WACV,OAAO,CAAC,IAAI,KAAK,UAAU,GAAG,YAAY,GAAG,WAAW;IAC/D,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,iDAAiD;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC7B,kEAAkE,CACnE,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,uCAAuC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,mBAAmB;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAC3D,MAAM,WAAW,GAAG,IAAA,+BAAkB,GAAE,CAAC;IACzC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvD,kBAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,kDAAkD;QAClD,IAAI,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACnD,kBAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACtE,kBAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,YAAY,OAAO,CAAC,GAAG,+BAA+B,CAAC,CAAC;QACzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,kBAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,GAAG,6BAA6B,CAAC,CAAC;YACvE,kBAAM,CAAC,IAAI,CACT,sEAAsE,OAAO,CAAC,GAAG,EAAE,CACpF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,yBAAyB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEvE,6BAA6B;QAC7B,IAAA,kBAAa,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExC,kBAAM,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAE3E,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,IAAI,cAAc,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACpF,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe,EAAE,OAA2B;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,uBAAuB,GAAG,KAAK,CAAC;IAEpC,sCAAsC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,2EAA2E;QAC3E,qCAAqC;QACrC,IACE,CAAC,mBAAmB;YACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,EACzF,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;gBAC5E,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,iDAAiD;YACjD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,2BAA2B,CAAC,SAAiB,EAAE,OAA2B;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzF,OAAO,SAAS,OAAO,CAAC,IAAI;YAClB,SAAS;WACV,OAAO,CAAC,IAAI;SACd,OAAO,CAAC,GAAG,IAAI,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAChE,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,MAAM,WAAW,GAAG,IAAA,+BAAkB,GAAE,CAAC;IACzC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvD,kBAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,6CAA6C;QAC7C,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,kBAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,kBAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,YAAY,OAAO,CAAC,GAAG,+BAA+B,CAAC,CAAC;QACzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,kBAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,GAAG,6BAA6B,CAAC,CAAC;YACvE,kBAAM,CAAC,IAAI,CACT,sEAAsE,OAAO,CAAC,GAAG,EAAE,CACpF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAElE,6BAA6B;QAC7B,IAAA,kBAAa,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExC,kBAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAEtE,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,IAAI,cAAc,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACpF,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,8BAA+B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,OAAe,EAAE,OAAsB;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,sCAAsC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,+DAA+D;QAC/D,IACE,CAAC,cAAc;YACf,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBAC7C,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,EAC7C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAClE,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,SAAS;QACX,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,4CAA4C;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,SAAiB,EAAE,OAAsB;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,kBAAkB,GACtB,OAAO,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAwB,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzF,OAAO,SAAS,OAAO,CAAC,IAAI;YAClB,SAAS;WACV,OAAO,CAAC,IAAI;SACd,OAAO,CAAC,GAAG,IAAI,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,kBAAkB,GAAG,SAAS;IAC5F,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,0BAA0B,CAAC,OAAmC;IAC3E,MAAM,WAAW,GAAG,IAAA,+BAAkB,GAAE,CAAC;IACzC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvD,kBAAM,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAEhF,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,0DAA0D;QAC1D,IAAI,eAAe,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE,CAAC;YAC3D,kBAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC9E,kBAAM,CAAC,IAAI,CACT,uFAAuF,CACxF,CAAC;YACF,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,iCAAiC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE/E,6BAA6B;QAC7B,IAAA,kBAAa,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExC,kBAAM,CAAC,OAAO,CAAC,8BAA8B,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAEpF,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,2CAA2C,OAAO,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAC/E,kBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,4CAA6C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iCAAiC,CACxC,OAAe,EACf,OAAmC;IAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,2BAA2B,GAAG,KAAK,CAAC;IACxC,IAAI,+BAA+B,GAAG,KAAK,CAAC;IAE5C,sCAAsC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,4EAA4E;QAC5E,IACE,CAAC,2BAA2B;YAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,EAC7C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CACT,+EAA+E,CAChF,CAAC;gBACF,2BAA2B,GAAG,IAAI,CAAC;YACrC,CAAC;YACD,SAAS;QACX,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,+BAA+B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,+BAA+B,GAAG,IAAI,CAAC;QACzC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mCAAmC,CAC1C,SAAiB,EACjB,OAAmC;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO,SAAS,OAAO,CAAC,IAAI;YAClB,SAAS;WACV,OAAO,CAAC,IAAI,KAAK,UAAU,GAAG,QAAQ;IAC7C,CAAC;AACL,CAAC"}
@@ -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"}