@forgecart/cli 1.0.0 → 1.0.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 (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -7
  3. package/bin/forgecart.js +1 -1
  4. package/dist/package.json +49 -0
  5. package/dist/src/cli.d.ts.map +1 -0
  6. package/dist/{cli.js → src/cli.js} +8 -6
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/commands/delete.d.ts.map +1 -0
  9. package/dist/{commands → src/commands}/delete.js +6 -3
  10. package/dist/src/commands/delete.js.map +1 -0
  11. package/dist/src/commands/deploy.d.ts.map +1 -0
  12. package/dist/src/commands/deploy.js +235 -0
  13. package/dist/src/commands/deploy.js.map +1 -0
  14. package/dist/src/commands/env.d.ts.map +1 -0
  15. package/dist/{commands → src/commands}/env.js +60 -9
  16. package/dist/src/commands/env.js.map +1 -0
  17. package/dist/src/commands/init.d.ts.map +1 -0
  18. package/dist/{commands → src/commands}/init.js +51 -17
  19. package/dist/src/commands/init.js.map +1 -0
  20. package/dist/src/commands/list.d.ts.map +1 -0
  21. package/dist/{commands → src/commands}/list.js +4 -2
  22. package/dist/src/commands/list.js.map +1 -0
  23. package/dist/src/commands/login.d.ts +3 -0
  24. package/dist/src/commands/login.d.ts.map +1 -0
  25. package/dist/src/commands/login.js +120 -0
  26. package/dist/src/commands/login.js.map +1 -0
  27. package/dist/src/commands/logs.d.ts.map +1 -0
  28. package/dist/src/commands/logs.js +88 -0
  29. package/dist/src/commands/logs.js.map +1 -0
  30. package/dist/src/commands/scale.d.ts.map +1 -0
  31. package/dist/{commands → src/commands}/scale.js +6 -3
  32. package/dist/src/commands/scale.js.map +1 -0
  33. package/dist/src/commands/status.d.ts.map +1 -0
  34. package/dist/{commands → src/commands}/status.js +4 -2
  35. package/dist/src/commands/status.js.map +1 -0
  36. package/dist/src/commands/whoami.d.ts.map +1 -0
  37. package/dist/{commands → src/commands}/whoami.js +18 -7
  38. package/dist/src/commands/whoami.js.map +1 -0
  39. package/dist/{index.d.ts.map → src/index.d.ts.map} +1 -1
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/{lib → src/lib}/api-client.d.ts +11 -4
  42. package/dist/src/lib/api-client.d.ts.map +1 -0
  43. package/dist/src/lib/api-client.js +137 -0
  44. package/dist/src/lib/api-client.js.map +1 -0
  45. package/dist/{lib → src/lib}/archive.d.ts +2 -1
  46. package/dist/src/lib/archive.d.ts.map +1 -0
  47. package/dist/{lib → src/lib}/archive.js +27 -5
  48. package/dist/src/lib/archive.js.map +1 -0
  49. package/dist/src/lib/config-updater.d.ts +10 -0
  50. package/dist/src/lib/config-updater.d.ts.map +1 -0
  51. package/dist/src/lib/config-updater.js +34 -0
  52. package/dist/src/lib/config-updater.js.map +1 -0
  53. package/dist/src/lib/config.d.ts +53 -0
  54. package/dist/src/lib/config.d.ts.map +1 -0
  55. package/dist/src/lib/config.js +162 -0
  56. package/dist/src/lib/config.js.map +1 -0
  57. package/dist/src/lib/env-sync.d.ts +36 -0
  58. package/dist/src/lib/env-sync.d.ts.map +1 -0
  59. package/dist/src/lib/env-sync.js +118 -0
  60. package/dist/src/lib/env-sync.js.map +1 -0
  61. package/dist/src/lib/logger.d.ts.map +1 -0
  62. package/dist/src/lib/logger.js.map +1 -0
  63. package/dist/src/lib/nx-generator.d.ts +20 -0
  64. package/dist/src/lib/nx-generator.d.ts.map +1 -0
  65. package/dist/src/lib/nx-generator.js +338 -0
  66. package/dist/src/lib/nx-generator.js.map +1 -0
  67. package/dist/src/lib/standalone.d.ts +28 -0
  68. package/dist/src/lib/standalone.d.ts.map +1 -0
  69. package/dist/src/lib/standalone.js +107 -0
  70. package/dist/src/lib/standalone.js.map +1 -0
  71. package/dist/{types → src/types}/index.d.ts +10 -0
  72. package/dist/src/types/index.d.ts.map +1 -0
  73. package/dist/src/types/index.js.map +1 -0
  74. package/dist/src/utils/spinner.d.ts.map +1 -0
  75. package/dist/src/utils/spinner.js.map +1 -0
  76. package/dist/src/utils/validation.d.ts.map +1 -0
  77. package/dist/{utils → src/utils}/validation.js +18 -2
  78. package/dist/src/utils/validation.js.map +1 -0
  79. package/dist/templates/application-additions/.forgecartignore +1 -1
  80. package/dist/templates/application-additions/Procfile +1 -1
  81. package/dist/templates/application-additions/env.example +7 -0
  82. package/dist/templates/application-additions/src/app/app.module.ts +16 -0
  83. package/dist/templates/application-additions/src/services/forgecart.service.ts +62 -0
  84. package/dist/templates/application-additions/src/services/index.ts +2 -0
  85. package/dist/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
  86. package/dist/templates/storefront-additions/.forgecartignore +30 -6
  87. package/dist/templates/storefront-additions/Procfile +1 -1
  88. package/dist/templates/storefront-additions/env.example +3 -0
  89. package/dist/templates/storefront-additions/package.json +11 -0
  90. package/dist/templates/storefront-additions/src/app/products/page.tsx +16 -28
  91. package/dist/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  92. package/dist/templates/workspace/.nxignore +2 -0
  93. package/package.json +6 -28
  94. package/templates/application-additions/.forgecartignore +1 -1
  95. package/templates/application-additions/Procfile +1 -1
  96. package/templates/application-additions/env.example +7 -0
  97. package/templates/application-additions/src/app/app.module.ts +16 -0
  98. package/templates/application-additions/src/services/forgecart.service.ts +62 -0
  99. package/templates/application-additions/src/services/index.ts +2 -0
  100. package/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
  101. package/templates/storefront-additions/.forgecartignore +30 -6
  102. package/templates/storefront-additions/Procfile +1 -1
  103. package/templates/storefront-additions/env.example +3 -0
  104. package/templates/storefront-additions/package.json +11 -0
  105. package/templates/storefront-additions/src/app/products/page.tsx +16 -28
  106. package/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  107. package/templates/workspace/.nxignore +2 -0
  108. package/dist/cli.d.ts.map +0 -1
  109. package/dist/cli.js.map +0 -1
  110. package/dist/commands/delete.d.ts.map +0 -1
  111. package/dist/commands/delete.js.map +0 -1
  112. package/dist/commands/deploy.d.ts.map +0 -1
  113. package/dist/commands/deploy.js +0 -128
  114. package/dist/commands/deploy.js.map +0 -1
  115. package/dist/commands/env.d.ts.map +0 -1
  116. package/dist/commands/env.js.map +0 -1
  117. package/dist/commands/init.d.ts.map +0 -1
  118. package/dist/commands/init.js.map +0 -1
  119. package/dist/commands/list.d.ts.map +0 -1
  120. package/dist/commands/list.js.map +0 -1
  121. package/dist/commands/logs.d.ts.map +0 -1
  122. package/dist/commands/logs.js +0 -105
  123. package/dist/commands/logs.js.map +0 -1
  124. package/dist/commands/scale.d.ts.map +0 -1
  125. package/dist/commands/scale.js.map +0 -1
  126. package/dist/commands/status.d.ts.map +0 -1
  127. package/dist/commands/status.js.map +0 -1
  128. package/dist/commands/whoami.d.ts.map +0 -1
  129. package/dist/commands/whoami.js.map +0 -1
  130. package/dist/index.js.map +0 -1
  131. package/dist/lib/api-client.d.ts.map +0 -1
  132. package/dist/lib/api-client.js +0 -220
  133. package/dist/lib/api-client.js.map +0 -1
  134. package/dist/lib/archive.d.ts.map +0 -1
  135. package/dist/lib/archive.js.map +0 -1
  136. package/dist/lib/config.d.ts +0 -12
  137. package/dist/lib/config.d.ts.map +0 -1
  138. package/dist/lib/config.js +0 -79
  139. package/dist/lib/config.js.map +0 -1
  140. package/dist/lib/logger.d.ts.map +0 -1
  141. package/dist/lib/logger.js.map +0 -1
  142. package/dist/lib/nx-generator.d.ts +0 -8
  143. package/dist/lib/nx-generator.d.ts.map +0 -1
  144. package/dist/lib/nx-generator.js +0 -146
  145. package/dist/lib/nx-generator.js.map +0 -1
  146. package/dist/types/index.d.ts.map +0 -1
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/utils/spinner.d.ts.map +0 -1
  149. package/dist/utils/spinner.js.map +0 -1
  150. package/dist/utils/validation.d.ts.map +0 -1
  151. package/dist/utils/validation.js.map +0 -1
  152. /package/dist/{cli.d.ts → src/cli.d.ts} +0 -0
  153. /package/dist/{commands → src/commands}/delete.d.ts +0 -0
  154. /package/dist/{commands → src/commands}/deploy.d.ts +0 -0
  155. /package/dist/{commands → src/commands}/env.d.ts +0 -0
  156. /package/dist/{commands → src/commands}/init.d.ts +0 -0
  157. /package/dist/{commands → src/commands}/list.d.ts +0 -0
  158. /package/dist/{commands → src/commands}/logs.d.ts +0 -0
  159. /package/dist/{commands → src/commands}/scale.d.ts +0 -0
  160. /package/dist/{commands → src/commands}/status.d.ts +0 -0
  161. /package/dist/{commands → src/commands}/whoami.d.ts +0 -0
  162. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  163. /package/dist/{index.js → src/index.js} +0 -0
  164. /package/dist/{lib → src/lib}/logger.d.ts +0 -0
  165. /package/dist/{lib → src/lib}/logger.js +0 -0
  166. /package/dist/{types → src/types}/index.js +0 -0
  167. /package/dist/{utils → src/utils}/spinner.d.ts +0 -0
  168. /package/dist/{utils → src/utils}/spinner.js +0 -0
  169. /package/dist/{utils → src/utils}/validation.d.ts +0 -0
@@ -0,0 +1,118 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import logger from './logger.js';
4
+ import { DeploymentType } from '../types/index.js';
5
+ import { readConfig, findProjectRoot } from './config.js';
6
+ // Re-export DeploymentType for convenience
7
+ export { DeploymentType };
8
+ /**
9
+ * Parse a .env file and return key-value pairs
10
+ */
11
+ export function parseEnvFile(filePath) {
12
+ if (!fs.existsSync(filePath)) {
13
+ return [];
14
+ }
15
+ const content = fs.readFileSync(filePath, 'utf-8');
16
+ const vars = [];
17
+ for (const line of content.split('\n')) {
18
+ // Skip empty lines and comments
19
+ const trimmed = line.trim();
20
+ if (!trimmed || trimmed.startsWith('#')) {
21
+ continue;
22
+ }
23
+ // Parse key=value
24
+ const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
25
+ if (match) {
26
+ const key = match[1];
27
+ let value = match[2];
28
+ // Remove surrounding quotes if present
29
+ if ((value.startsWith('"') && value.endsWith('"')) ||
30
+ (value.startsWith("'") && value.endsWith("'"))) {
31
+ value = value.slice(1, -1);
32
+ }
33
+ vars.push({ key, value });
34
+ }
35
+ }
36
+ return vars;
37
+ }
38
+ /**
39
+ * Get the .env file path for a deployment type
40
+ */
41
+ export function getEnvFilePath(type) {
42
+ const projectRoot = findProjectRoot();
43
+ if (!projectRoot) {
44
+ return null;
45
+ }
46
+ const config = readConfig();
47
+ if (!config) {
48
+ return null;
49
+ }
50
+ let appPath;
51
+ if (type === DeploymentType.STOREFRONT) {
52
+ appPath = config.storefrontPath || 'apps/storefront';
53
+ }
54
+ else if (type === DeploymentType.APPLICATION) {
55
+ appPath = config.applicationPath || 'apps/application';
56
+ }
57
+ else {
58
+ return null;
59
+ }
60
+ return path.join(projectRoot, appPath, '.env');
61
+ }
62
+ /**
63
+ * Sync environment variables from a .env file to the deployment
64
+ */
65
+ export async function syncEnvToDeployment(apiClient, type) {
66
+ const envFilePath = getEnvFilePath(type);
67
+ if (!envFilePath) {
68
+ logger.warn(`Could not find .env file path for ${type}`);
69
+ return { synced: 0, errors: 0 };
70
+ }
71
+ if (!fs.existsSync(envFilePath)) {
72
+ logger.debug(`No .env file found at ${envFilePath}`);
73
+ return { synced: 0, errors: 0 };
74
+ }
75
+ const vars = parseEnvFile(envFilePath);
76
+ if (vars.length === 0) {
77
+ logger.debug(`No environment variables found in ${envFilePath}`);
78
+ return { synced: 0, errors: 0 };
79
+ }
80
+ let synced = 0;
81
+ let errors = 0;
82
+ for (const { key, value } of vars) {
83
+ try {
84
+ const success = await apiClient.setDeploymentEnv(type, key, value);
85
+ if (success) {
86
+ synced++;
87
+ logger.debug(`Set ${key}`);
88
+ }
89
+ else {
90
+ errors++;
91
+ logger.warn(`Failed to set ${key}`);
92
+ }
93
+ }
94
+ catch (error) {
95
+ errors++;
96
+ logger.warn(`Error setting ${key}: ${error}`);
97
+ }
98
+ }
99
+ return { synced, errors };
100
+ }
101
+ /**
102
+ * Sync environment variables for all deployments
103
+ */
104
+ export async function syncAllEnvToDeployments(apiClient) {
105
+ const config = readConfig();
106
+ const results = {
107
+ storefront: { synced: 0, errors: 0 },
108
+ application: { synced: 0, errors: 0 },
109
+ };
110
+ // Always sync storefront
111
+ results.storefront = await syncEnvToDeployment(apiClient, DeploymentType.STOREFRONT);
112
+ // Only sync application if it exists
113
+ if (config?.hasApplication) {
114
+ results.application = await syncEnvToDeployment(apiClient, DeploymentType.APPLICATION);
115
+ }
116
+ return results;
117
+ }
118
+ //# sourceMappingURL=env-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-sync.js","sourceRoot":"","sources":["../../../src/lib/env-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBAIH,MAAM;oBAIT,MAAM;qBAIL,MAAM;qBAIN,MAAM;mBAMR,MAAM;;qBAQJ,MAAM;kBAMT,MAAM,EAAE;oBAMN,MAAM,SAAS,MAAM;mBAItB,MAAM;CActB,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare const DEFAULT_NX_VERSION = "21.2.0";
2
+ export declare function createNxWorkspace(projectName: string, targetDir: string, nxVersion?: string): Promise<boolean>;
3
+ export declare function generateNextApp(appName: string, projectRoot: string): Promise<boolean>;
4
+ export declare function generateNestApp(appName: string, projectRoot: string): Promise<boolean>;
5
+ export declare function installDependency(packageName: string, projectRoot: string, dev?: boolean): Promise<boolean>;
6
+ export declare function runNxBuild(appName: string, projectRoot: string): Promise<boolean>;
7
+ export declare function runNxBuildMany(appNames: string[], projectRoot: string): Promise<boolean>;
8
+ export declare function copyTemplateFiles(templateDir: string, targetDir: string, overwrite?: boolean): void;
9
+ export declare function addPackageScripts(projectRoot: string, withApplication: boolean): void;
10
+ export declare function getCliTemplatesDir(): string;
11
+ /**
12
+ * Rename env.example to .env.example in a directory
13
+ * This is a workaround for build tools that don't copy dotfiles
14
+ */
15
+ export declare function renameEnvExample(targetDir: string): void;
16
+ /**
17
+ * Append .env patterns to .gitignore if not already present
18
+ */
19
+ export declare function appendEnvPatternsToGitignore(projectRoot: string): void;
20
+ //# sourceMappingURL=nx-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-generator.d.ts","sourceRoot":"","sources":["../../../src/lib/nx-generator.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAoE1C,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,OAAO,CAAC,CA2DlB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAmDlB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA+ClB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,GAAG,UAAQ,GACV,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,UAAO,GACf,IAAI,CAqBN;AAoBD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,OAAO,GACvB,IAAI,CA4CN;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAwB3C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQxD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA0BtE"}
@@ -0,0 +1,338 @@
1
+ import { spawn } from 'child_process';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import logger from './logger.js';
5
+ export const DEFAULT_NX_VERSION = '21.2.0';
6
+ async function runCommand(command, args, cwd, silent = false) {
7
+ return new Promise((resolve) => {
8
+ const child = spawn(command, args, {
9
+ cwd,
10
+ shell: true,
11
+ stdio: silent ? 'pipe' : 'inherit',
12
+ env: {
13
+ ...process.env,
14
+ NX_DAEMON: 'false', // Disable Nx daemon to avoid cross-project issues
15
+ },
16
+ });
17
+ let output = '';
18
+ let error = '';
19
+ if (silent) {
20
+ child.stdout?.on('data', (data) => {
21
+ output += data.toString();
22
+ });
23
+ child.stderr?.on('data', (data) => {
24
+ error += data.toString();
25
+ });
26
+ }
27
+ child.on('close', (code) => {
28
+ resolve({
29
+ success: code === 0,
30
+ output,
31
+ error,
32
+ });
33
+ });
34
+ child.on('error', (err) => {
35
+ resolve({
36
+ success: false,
37
+ output,
38
+ error: err.message,
39
+ });
40
+ });
41
+ });
42
+ }
43
+ /**
44
+ * Get the NX version from the project's package.json
45
+ */
46
+ function getNxVersion(projectRoot) {
47
+ const packageJsonPath = path.join(projectRoot, 'package.json');
48
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
49
+ // nx version is in devDependencies
50
+ const nxVersion = packageJson.devDependencies?.nx || packageJson.dependencies?.nx;
51
+ // Remove ^ or ~ prefix if present
52
+ return nxVersion?.replace(/^[\^~]/, '') || 'latest';
53
+ }
54
+ export async function createNxWorkspace(projectName, targetDir, nxVersion = DEFAULT_NX_VERSION) {
55
+ logger.info(`Creating NX workspace: ${projectName} (NX v${nxVersion})`);
56
+ const result = await runCommand('npx', [
57
+ `create-nx-workspace@${nxVersion}`,
58
+ projectName,
59
+ '--preset=apps',
60
+ '--nxCloud=skip',
61
+ '--packageManager=npm',
62
+ ], targetDir);
63
+ if (!result.success) {
64
+ logger.error('Failed to create NX workspace');
65
+ return false;
66
+ }
67
+ // Create tsconfig.base.json if it doesn't exist (required by @nx/next generator)
68
+ const projectPath = path.join(targetDir, projectName);
69
+ const tsconfigPath = path.join(projectPath, 'tsconfig.base.json');
70
+ if (!fs.existsSync(tsconfigPath)) {
71
+ const tsconfigContent = {
72
+ compileOnSave: false,
73
+ compilerOptions: {
74
+ rootDir: '.',
75
+ sourceMap: true,
76
+ declaration: false,
77
+ moduleResolution: 'node',
78
+ emitDecoratorMetadata: true,
79
+ experimentalDecorators: true,
80
+ importHelpers: true,
81
+ target: 'es2015',
82
+ module: 'esnext',
83
+ lib: ['es2020', 'dom'],
84
+ skipLibCheck: true,
85
+ skipDefaultLibCheck: true,
86
+ baseUrl: '.',
87
+ paths: {},
88
+ },
89
+ exclude: ['node_modules', 'tmp'],
90
+ };
91
+ fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfigContent, null, 2));
92
+ logger.info('Created tsconfig.base.json');
93
+ }
94
+ // Copy workspace-level templates (like .nxignore)
95
+ const templatesDir = getCliTemplatesDir();
96
+ const workspaceTemplatesDir = path.join(templatesDir, 'workspace');
97
+ if (fs.existsSync(workspaceTemplatesDir)) {
98
+ copyTemplateFiles(workspaceTemplatesDir, projectPath);
99
+ logger.debug('Copied workspace templates');
100
+ }
101
+ return true;
102
+ }
103
+ export async function generateNextApp(appName, projectRoot) {
104
+ // Get the NX version from the workspace package.json
105
+ const nxVersion = getNxVersion(projectRoot);
106
+ // Install all required @nx/* plugins at the SAME version to avoid conflicts
107
+ logger.info('Installing @nx plugins...');
108
+ const plugins = [
109
+ `@nx/next@${nxVersion}`,
110
+ `@nx/react@${nxVersion}`,
111
+ `@nx/jest@${nxVersion}`,
112
+ `@nx/playwright@${nxVersion}`,
113
+ `@nx/eslint@${nxVersion}`,
114
+ ];
115
+ const installResult = await runCommand('npm', ['install', '--save-dev', ...plugins], projectRoot);
116
+ if (!installResult.success) {
117
+ logger.error('Failed to install @nx plugins');
118
+ return false;
119
+ }
120
+ logger.info(`Generating Next.js application: ${appName}`);
121
+ const result = await runCommand('npx', [
122
+ 'nx',
123
+ 'g',
124
+ '@nx/next:application',
125
+ appName,
126
+ '--directory=apps/' + appName,
127
+ '--style=css',
128
+ '--appDir=true',
129
+ '--linter=eslint',
130
+ '--e2eTestRunner=playwright',
131
+ '--unitTestRunner=jest',
132
+ '--src=true',
133
+ ], projectRoot);
134
+ if (!result.success) {
135
+ logger.error('Failed to generate Next.js application');
136
+ return false;
137
+ }
138
+ return true;
139
+ }
140
+ export async function generateNestApp(appName, projectRoot) {
141
+ // Get the NX version from the workspace package.json
142
+ const nxVersion = getNxVersion(projectRoot);
143
+ // Install all required @nx/* plugins at the SAME version to avoid conflicts
144
+ logger.info('Installing @nx plugins...');
145
+ const plugins = [
146
+ `@nx/nest@${nxVersion}`,
147
+ `@nx/node@${nxVersion}`,
148
+ `@nx/jest@${nxVersion}`,
149
+ `@nx/eslint@${nxVersion}`,
150
+ ];
151
+ const installResult = await runCommand('npm', ['install', '--save-dev', ...plugins], projectRoot);
152
+ if (!installResult.success) {
153
+ logger.error('Failed to install @nx plugins');
154
+ return false;
155
+ }
156
+ logger.info(`Generating NestJS application: ${appName}`);
157
+ const result = await runCommand('npx', [
158
+ 'nx',
159
+ 'g',
160
+ '@nx/nest:application',
161
+ '--name=' + appName,
162
+ '--directory=apps/' + appName,
163
+ '--linter=eslint',
164
+ '--e2eTestRunner=jest',
165
+ '--unitTestRunner=jest',
166
+ ], projectRoot);
167
+ if (!result.success) {
168
+ logger.error('Failed to generate NestJS application');
169
+ return false;
170
+ }
171
+ return true;
172
+ }
173
+ export async function installDependency(packageName, projectRoot, dev = false) {
174
+ logger.info(`Installing ${packageName}`);
175
+ const args = ['install', packageName];
176
+ if (dev) {
177
+ args.push('--save-dev');
178
+ }
179
+ const result = await runCommand('npm', args, projectRoot);
180
+ if (!result.success) {
181
+ logger.error(`Failed to install ${packageName}`);
182
+ return false;
183
+ }
184
+ return true;
185
+ }
186
+ export async function runNxBuild(appName, projectRoot) {
187
+ logger.info(`Building ${appName}`);
188
+ // Use npm run to ensure correct project context
189
+ const result = await runCommand('npm', ['run', `build:${appName}`], projectRoot);
190
+ if (!result.success) {
191
+ logger.error(`Failed to build ${appName}`);
192
+ return false;
193
+ }
194
+ return true;
195
+ }
196
+ export async function runNxBuildMany(appNames, projectRoot) {
197
+ logger.info(`Building ${appNames.join(', ')}`);
198
+ // Use npm run build:all to ensure correct project context
199
+ const result = await runCommand('npm', ['run', 'build:all'], projectRoot);
200
+ if (!result.success) {
201
+ logger.error(`Failed to build projects`);
202
+ return false;
203
+ }
204
+ return true;
205
+ }
206
+ export function copyTemplateFiles(templateDir, targetDir, overwrite = true) {
207
+ if (!fs.existsSync(templateDir)) {
208
+ return;
209
+ }
210
+ const files = getAllFiles(templateDir);
211
+ for (const file of files) {
212
+ const relativePath = path.relative(templateDir, file);
213
+ const targetPath = path.join(targetDir, relativePath);
214
+ const targetDirPath = path.dirname(targetPath);
215
+ if (!fs.existsSync(targetDirPath)) {
216
+ fs.mkdirSync(targetDirPath, { recursive: true });
217
+ }
218
+ if (overwrite || !fs.existsSync(targetPath)) {
219
+ fs.copyFileSync(file, targetPath);
220
+ logger.debug(`Copied: ${relativePath}`);
221
+ }
222
+ }
223
+ }
224
+ function getAllFiles(dir) {
225
+ const files = [];
226
+ const items = fs.readdirSync(dir, { withFileTypes: true });
227
+ for (const item of items) {
228
+ const fullPath = path.join(dir, item.name);
229
+ if (item.isDirectory()) {
230
+ files.push(...getAllFiles(fullPath));
231
+ }
232
+ else {
233
+ files.push(fullPath);
234
+ }
235
+ }
236
+ return files;
237
+ }
238
+ export function addPackageScripts(projectRoot, withApplication) {
239
+ const packageJsonPath = path.join(projectRoot, 'package.json');
240
+ if (!fs.existsSync(packageJsonPath)) {
241
+ logger.warn('package.json not found, skipping scripts addition');
242
+ return;
243
+ }
244
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
245
+ packageJson.scripts = {
246
+ ...packageJson.scripts,
247
+ // Storefront scripts
248
+ dev: 'nx run storefront:dev',
249
+ 'dev:storefront': 'nx run storefront:dev',
250
+ start: 'nx run storefront:start',
251
+ 'start:storefront': 'nx run storefront:start',
252
+ build: 'nx run storefront:build',
253
+ 'build:storefront': 'nx run storefront:build',
254
+ test: 'nx run-many --target=test',
255
+ 'test:storefront': 'nx run storefront:test',
256
+ lint: 'nx run-many --target=lint',
257
+ 'lint:storefront': 'nx run storefront:lint',
258
+ e2e: 'nx run storefront-e2e:e2e',
259
+ };
260
+ if (withApplication) {
261
+ // Application scripts
262
+ packageJson.scripts['dev:application'] = 'nx run application:serve';
263
+ packageJson.scripts['start:application'] = 'nx run application:serve';
264
+ packageJson.scripts['build:application'] = 'nx run application:build';
265
+ packageJson.scripts['test:application'] = 'nx run application:test';
266
+ packageJson.scripts['lint:application'] = 'nx run application:lint';
267
+ // Combined scripts
268
+ packageJson.scripts['dev:all'] =
269
+ 'nx run-many --target=dev --projects=storefront & nx run application:serve';
270
+ packageJson.scripts['build:all'] =
271
+ 'nx run-many --target=build --projects=storefront,application';
272
+ packageJson.scripts['test:all'] =
273
+ 'nx run-many --target=test --projects=storefront,application';
274
+ }
275
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
276
+ logger.info('Added convenience scripts to package.json');
277
+ }
278
+ export function getCliTemplatesDir() {
279
+ // When running from CLI package, templates can be in different locations:
280
+ // 1. Development: apps/cli/templates (relative to src/lib)
281
+ // 2. Installed: dist/templates (relative to dist/lib)
282
+ const currentFileUrl = new URL(import.meta.url);
283
+ const currentFilePath = currentFileUrl.pathname;
284
+ const libDir = path.dirname(currentFilePath);
285
+ // Try dist/templates first (installed package)
286
+ const distTemplatesPath = path.resolve(libDir, '..', 'templates');
287
+ if (fs.existsSync(distTemplatesPath)) {
288
+ return distTemplatesPath;
289
+ }
290
+ // Try apps/cli/templates (development)
291
+ const devTemplatesPath = path.resolve(libDir, '..', '..', 'templates');
292
+ if (fs.existsSync(devTemplatesPath)) {
293
+ return devTemplatesPath;
294
+ }
295
+ // Fallback - try to find templates directory
296
+ logger.warn('Templates directory not found, using fallback path');
297
+ return devTemplatesPath;
298
+ }
299
+ /**
300
+ * Rename env.example to .env.example in a directory
301
+ * This is a workaround for build tools that don't copy dotfiles
302
+ */
303
+ export function renameEnvExample(targetDir) {
304
+ const envExamplePath = path.join(targetDir, 'env.example');
305
+ const dotEnvExamplePath = path.join(targetDir, '.env.example');
306
+ if (fs.existsSync(envExamplePath)) {
307
+ fs.renameSync(envExamplePath, dotEnvExamplePath);
308
+ logger.debug(`Renamed env.example to .env.example in ${targetDir}`);
309
+ }
310
+ }
311
+ /**
312
+ * Append .env patterns to .gitignore if not already present
313
+ */
314
+ export function appendEnvPatternsToGitignore(projectRoot) {
315
+ const gitignorePath = path.join(projectRoot, '.gitignore');
316
+ const envPatterns = `
317
+ # Environment files
318
+ .env
319
+ .env.local
320
+ .env.*.local
321
+ !.env.example
322
+ `;
323
+ if (fs.existsSync(gitignorePath)) {
324
+ const content = fs.readFileSync(gitignorePath, 'utf-8');
325
+ // Check if .env patterns are already present
326
+ if (!content.includes('# Environment files') &&
327
+ !content.includes('.env.local')) {
328
+ fs.appendFileSync(gitignorePath, envPatterns);
329
+ logger.debug('Added .env patterns to .gitignore');
330
+ }
331
+ }
332
+ else {
333
+ // Create .gitignore with env patterns
334
+ fs.writeFileSync(gitignorePath, envPatterns.trim() + '\n');
335
+ logger.debug('Created .gitignore with .env patterns');
336
+ }
337
+ }
338
+ //# sourceMappingURL=nx-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-generator.js","sourceRoot":"","sources":["../../../src/lib/nx-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Prepares a Next.js standalone deployment by copying static and public files
3
+ * to the correct location within the standalone output directory.
4
+ *
5
+ * In an Nx monorepo, the standalone output structure is:
6
+ * .next/standalone/apps/storefront/server.js
7
+ *
8
+ * The server looks for static files relative to its location, so we need to copy:
9
+ * - .next/static -> .next/standalone/apps/storefront/.next/static
10
+ * - public -> .next/standalone/apps/storefront/public
11
+ */
12
+ export declare function prepareStandaloneDeployment(appDir: string): Promise<void>;
13
+ /**
14
+ * Prepares a NestJS application deployment by copying the built output
15
+ * and required files to a deployment staging directory.
16
+ *
17
+ * In an Nx monorepo, the build output is at dist/apps/application/
18
+ * We create a staging directory with:
19
+ * - Built JS files from dist/apps/application
20
+ * - Procfile from apps/application
21
+ * - .env file from apps/application or project root
22
+ *
23
+ * @param appDir - The application source directory (apps/application)
24
+ * @param projectRoot - The project root directory
25
+ * @returns The path to the deployment staging directory
26
+ */
27
+ export declare function prepareApplicationDeployment(appDir: string, projectRoot: string): Promise<string>;
28
+ //# sourceMappingURL=standalone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../../src/lib/standalone.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
@@ -0,0 +1,107 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Prepares a Next.js standalone deployment by copying static and public files
5
+ * to the correct location within the standalone output directory.
6
+ *
7
+ * In an Nx monorepo, the standalone output structure is:
8
+ * .next/standalone/apps/storefront/server.js
9
+ *
10
+ * The server looks for static files relative to its location, so we need to copy:
11
+ * - .next/static -> .next/standalone/apps/storefront/.next/static
12
+ * - public -> .next/standalone/apps/storefront/public
13
+ */
14
+ export async function prepareStandaloneDeployment(appDir) {
15
+ const nextDir = path.join(appDir, '.next');
16
+ const standaloneDir = path.join(nextDir, 'standalone');
17
+ // In Nx monorepo, standalone output is at .next/standalone/apps/storefront/
18
+ const standaloneAppDir = path.join(standaloneDir, 'apps', 'storefront');
19
+ if (!fs.existsSync(standaloneAppDir)) {
20
+ throw new Error('Standalone build not found. Ensure next.config.js has output: "standalone"');
21
+ }
22
+ // Copy static files: .next/static -> .next/standalone/apps/storefront/.next/static
23
+ const staticSrc = path.join(nextDir, 'static');
24
+ const staticDest = path.join(standaloneAppDir, '.next', 'static');
25
+ if (fs.existsSync(staticSrc)) {
26
+ copyDirSync(staticSrc, staticDest);
27
+ }
28
+ // Copy public files: public -> .next/standalone/apps/storefront/public
29
+ const publicSrc = path.join(appDir, 'public');
30
+ const publicDest = path.join(standaloneAppDir, 'public');
31
+ if (fs.existsSync(publicSrc)) {
32
+ copyDirSync(publicSrc, publicDest);
33
+ }
34
+ }
35
+ /**
36
+ * Prepares a NestJS application deployment by copying the built output
37
+ * and required files to a deployment staging directory.
38
+ *
39
+ * In an Nx monorepo, the build output is at dist/apps/application/
40
+ * We create a staging directory with:
41
+ * - Built JS files from dist/apps/application
42
+ * - Procfile from apps/application
43
+ * - .env file from apps/application or project root
44
+ *
45
+ * @param appDir - The application source directory (apps/application)
46
+ * @param projectRoot - The project root directory
47
+ * @returns The path to the deployment staging directory
48
+ */
49
+ export async function prepareApplicationDeployment(appDir, projectRoot) {
50
+ const distDir = path.join(projectRoot, 'dist', 'apps', 'application');
51
+ // Use .forgecart directory at project root to avoid Nx detecting it as a duplicate project
52
+ const deployDir = path.join(projectRoot, '.forgecart', 'application-deploy');
53
+ // Check if build output exists
54
+ if (!fs.existsSync(distDir)) {
55
+ throw new Error('Application build not found. Run the build first or check dist/apps/application exists.');
56
+ }
57
+ // Clean and create deploy directory
58
+ if (fs.existsSync(deployDir)) {
59
+ fs.rmSync(deployDir, { recursive: true });
60
+ }
61
+ fs.mkdirSync(deployDir, { recursive: true });
62
+ // Copy built files from dist/apps/application
63
+ copyDirSync(distDir, deployDir);
64
+ // Remove project.json if copied (causes Nx duplicate project error)
65
+ const projectJsonPath = path.join(deployDir, 'project.json');
66
+ if (fs.existsSync(projectJsonPath)) {
67
+ fs.unlinkSync(projectJsonPath);
68
+ }
69
+ // Copy Procfile
70
+ const procfileSrc = path.join(appDir, 'Procfile');
71
+ if (fs.existsSync(procfileSrc)) {
72
+ fs.copyFileSync(procfileSrc, path.join(deployDir, 'Procfile'));
73
+ }
74
+ else {
75
+ throw new Error('Procfile not found in application directory');
76
+ }
77
+ // Copy .env file - check app dir first, then project root
78
+ const envSrcApp = path.join(appDir, '.env');
79
+ const envSrcRoot = path.join(projectRoot, '.env');
80
+ const envDest = path.join(deployDir, '.env');
81
+ if (fs.existsSync(envSrcApp)) {
82
+ fs.copyFileSync(envSrcApp, envDest);
83
+ }
84
+ else if (fs.existsSync(envSrcRoot)) {
85
+ fs.copyFileSync(envSrcRoot, envDest);
86
+ }
87
+ // .env is optional - don't throw if not found
88
+ return deployDir;
89
+ }
90
+ /**
91
+ * Recursively copies a directory and its contents.
92
+ */
93
+ function copyDirSync(src, dest) {
94
+ fs.mkdirSync(dest, { recursive: true });
95
+ const entries = fs.readdirSync(src, { withFileTypes: true });
96
+ for (const entry of entries) {
97
+ const srcPath = path.join(src, entry.name);
98
+ const destPath = path.join(dest, entry.name);
99
+ if (entry.isDirectory()) {
100
+ copyDirSync(srcPath, destPath);
101
+ }
102
+ else {
103
+ fs.copyFileSync(srcPath, destPath);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=standalone.js.map