@react-spa-scaffold/mcp 1.1.3 → 1.2.0

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 (217) hide show
  1. package/README.md +19 -15
  2. package/dist/features/definitions/api.d.ts +3 -0
  3. package/dist/features/definitions/api.d.ts.map +1 -0
  4. package/dist/features/definitions/api.js +20 -0
  5. package/dist/features/definitions/api.js.map +1 -0
  6. package/dist/features/definitions/ci.d.ts +3 -0
  7. package/dist/features/definitions/ci.d.ts.map +1 -0
  8. package/dist/features/definitions/ci.js +25 -0
  9. package/dist/features/definitions/ci.js.map +1 -0
  10. package/dist/features/definitions/core.d.ts +3 -0
  11. package/dist/features/definitions/core.d.ts.map +1 -0
  12. package/dist/features/definitions/core.js +76 -0
  13. package/dist/features/definitions/core.js.map +1 -0
  14. package/dist/features/definitions/devtools.d.ts +3 -0
  15. package/dist/features/definitions/devtools.d.ts.map +1 -0
  16. package/dist/features/definitions/devtools.js +53 -0
  17. package/dist/features/definitions/devtools.js.map +1 -0
  18. package/dist/features/definitions/forms.d.ts +3 -0
  19. package/dist/features/definitions/forms.d.ts.map +1 -0
  20. package/dist/features/definitions/forms.js +32 -0
  21. package/dist/features/definitions/forms.js.map +1 -0
  22. package/dist/features/definitions/i18n.d.ts +3 -0
  23. package/dist/features/definitions/i18n.d.ts.map +1 -0
  24. package/dist/features/definitions/i18n.js +50 -0
  25. package/dist/features/definitions/i18n.js.map +1 -0
  26. package/dist/features/definitions/index.d.ts +15 -0
  27. package/dist/features/definitions/index.d.ts.map +1 -0
  28. package/dist/features/definitions/index.js +15 -0
  29. package/dist/features/definitions/index.js.map +1 -0
  30. package/dist/features/definitions/mobile.d.ts +3 -0
  31. package/dist/features/definitions/mobile.d.ts.map +1 -0
  32. package/dist/features/definitions/mobile.js +19 -0
  33. package/dist/features/definitions/mobile.js.map +1 -0
  34. package/dist/features/definitions/observability.d.ts +3 -0
  35. package/dist/features/definitions/observability.d.ts.map +1 -0
  36. package/dist/features/definitions/observability.js +21 -0
  37. package/dist/features/definitions/observability.js.map +1 -0
  38. package/dist/features/definitions/performance.d.ts +3 -0
  39. package/dist/features/definitions/performance.d.ts.map +1 -0
  40. package/dist/features/definitions/performance.js +28 -0
  41. package/dist/features/definitions/performance.js.map +1 -0
  42. package/dist/features/definitions/routing.d.ts +3 -0
  43. package/dist/features/definitions/routing.d.ts.map +1 -0
  44. package/dist/features/definitions/routing.js +25 -0
  45. package/dist/features/definitions/routing.js.map +1 -0
  46. package/dist/features/definitions/state.d.ts +3 -0
  47. package/dist/features/definitions/state.d.ts.map +1 -0
  48. package/dist/features/definitions/state.js +27 -0
  49. package/dist/features/definitions/state.js.map +1 -0
  50. package/dist/features/definitions/testing.d.ts +3 -0
  51. package/dist/features/definitions/testing.d.ts.map +1 -0
  52. package/dist/features/definitions/testing.js +56 -0
  53. package/dist/features/definitions/testing.js.map +1 -0
  54. package/dist/features/definitions/theming.d.ts +3 -0
  55. package/dist/features/definitions/theming.d.ts.map +1 -0
  56. package/dist/features/definitions/theming.js +26 -0
  57. package/dist/features/definitions/theming.js.map +1 -0
  58. package/dist/features/definitions/ui.d.ts +3 -0
  59. package/dist/features/definitions/ui.d.ts.map +1 -0
  60. package/dist/features/definitions/ui.js +44 -0
  61. package/dist/features/definitions/ui.js.map +1 -0
  62. package/dist/features/index.d.ts +3 -2
  63. package/dist/features/index.d.ts.map +1 -1
  64. package/dist/features/index.js +2 -1
  65. package/dist/features/index.js.map +1 -1
  66. package/dist/features/registry.d.ts +3 -9
  67. package/dist/features/registry.d.ts.map +1 -1
  68. package/dist/features/registry.js +3 -554
  69. package/dist/features/registry.js.map +1 -1
  70. package/dist/features/types.d.ts +11 -9
  71. package/dist/features/types.d.ts.map +1 -1
  72. package/dist/features/types.js +24 -1
  73. package/dist/features/types.js.map +1 -1
  74. package/dist/server.d.ts +2 -7
  75. package/dist/server.d.ts.map +1 -1
  76. package/dist/server.js +22 -56
  77. package/dist/server.js.map +1 -1
  78. package/dist/server.test.d.ts +2 -0
  79. package/dist/server.test.d.ts.map +1 -0
  80. package/dist/server.test.js +14 -0
  81. package/dist/server.test.js.map +1 -0
  82. package/dist/tools/get-example.test.d.ts +5 -0
  83. package/dist/tools/get-example.test.d.ts.map +1 -0
  84. package/dist/tools/get-example.test.js +63 -0
  85. package/dist/tools/get-example.test.js.map +1 -0
  86. package/dist/tools/get-features.d.ts +0 -5
  87. package/dist/tools/get-features.d.ts.map +1 -1
  88. package/dist/tools/get-features.js +0 -2
  89. package/dist/tools/get-features.js.map +1 -1
  90. package/dist/tools/get-features.test.d.ts +5 -0
  91. package/dist/tools/get-features.test.d.ts.map +1 -0
  92. package/dist/tools/get-features.test.js +45 -0
  93. package/dist/tools/get-features.test.js.map +1 -0
  94. package/dist/tools/get-scaffold.d.ts +2 -2
  95. package/dist/tools/get-scaffold.test.d.ts +5 -0
  96. package/dist/tools/get-scaffold.test.d.ts.map +1 -0
  97. package/dist/tools/get-scaffold.test.js +194 -0
  98. package/dist/tools/get-scaffold.test.js.map +1 -0
  99. package/dist/tools/index.d.ts +2 -0
  100. package/dist/tools/index.d.ts.map +1 -1
  101. package/dist/tools/index.js +1 -0
  102. package/dist/tools/index.js.map +1 -1
  103. package/dist/tools/registry.d.ts +9 -0
  104. package/dist/tools/registry.d.ts.map +1 -0
  105. package/dist/tools/registry.js +29 -0
  106. package/dist/tools/registry.js.map +1 -0
  107. package/dist/tools/types.d.ts +23 -0
  108. package/dist/tools/types.d.ts.map +1 -0
  109. package/dist/tools/types.js +5 -0
  110. package/dist/tools/types.js.map +1 -0
  111. package/dist/utils/cache.d.ts +21 -0
  112. package/dist/utils/cache.d.ts.map +1 -0
  113. package/dist/utils/cache.js +45 -0
  114. package/dist/utils/cache.js.map +1 -0
  115. package/dist/utils/docs.test.d.ts +5 -0
  116. package/dist/utils/docs.test.d.ts.map +1 -0
  117. package/dist/utils/docs.test.js +37 -0
  118. package/dist/utils/docs.test.js.map +1 -0
  119. package/dist/utils/errors.d.ts +8 -0
  120. package/dist/utils/errors.d.ts.map +1 -0
  121. package/dist/utils/errors.js +19 -0
  122. package/dist/utils/errors.js.map +1 -0
  123. package/dist/utils/examples/api-patterns.d.ts +3 -0
  124. package/dist/utils/examples/api-patterns.d.ts.map +1 -0
  125. package/dist/utils/examples/api-patterns.js +19 -0
  126. package/dist/utils/examples/api-patterns.js.map +1 -0
  127. package/dist/utils/examples/component-patterns.d.ts +3 -0
  128. package/dist/utils/examples/component-patterns.d.ts.map +1 -0
  129. package/dist/utils/examples/component-patterns.js +71 -0
  130. package/dist/utils/examples/component-patterns.js.map +1 -0
  131. package/dist/utils/examples/context-patterns.d.ts +3 -0
  132. package/dist/utils/examples/context-patterns.d.ts.map +1 -0
  133. package/dist/utils/examples/context-patterns.js +32 -0
  134. package/dist/utils/examples/context-patterns.js.map +1 -0
  135. package/dist/utils/examples/hook-patterns.d.ts +3 -0
  136. package/dist/utils/examples/hook-patterns.d.ts.map +1 -0
  137. package/dist/utils/examples/hook-patterns.js +55 -0
  138. package/dist/utils/examples/hook-patterns.js.map +1 -0
  139. package/dist/utils/examples/i18n-patterns.d.ts +3 -0
  140. package/dist/utils/examples/i18n-patterns.d.ts.map +1 -0
  141. package/dist/utils/examples/i18n-patterns.js +43 -0
  142. package/dist/utils/examples/i18n-patterns.js.map +1 -0
  143. package/dist/utils/examples/index.d.ts +12 -0
  144. package/dist/utils/examples/index.d.ts.map +1 -0
  145. package/dist/utils/examples/index.js +69 -0
  146. package/dist/utils/examples/index.js.map +1 -0
  147. package/dist/utils/examples/mobile-patterns.d.ts +3 -0
  148. package/dist/utils/examples/mobile-patterns.d.ts.map +1 -0
  149. package/dist/utils/examples/mobile-patterns.js +38 -0
  150. package/dist/utils/examples/mobile-patterns.js.map +1 -0
  151. package/dist/utils/examples/page-patterns.d.ts +3 -0
  152. package/dist/utils/examples/page-patterns.d.ts.map +1 -0
  153. package/dist/utils/examples/page-patterns.js +34 -0
  154. package/dist/utils/examples/page-patterns.js.map +1 -0
  155. package/dist/utils/examples/store-patterns.d.ts +3 -0
  156. package/dist/utils/examples/store-patterns.d.ts.map +1 -0
  157. package/dist/utils/examples/store-patterns.js +40 -0
  158. package/dist/utils/examples/store-patterns.js.map +1 -0
  159. package/dist/utils/examples/test-patterns.d.ts +3 -0
  160. package/dist/utils/examples/test-patterns.d.ts.map +1 -0
  161. package/dist/utils/examples/test-patterns.js +58 -0
  162. package/dist/utils/examples/test-patterns.js.map +1 -0
  163. package/dist/utils/examples/types.d.ts +17 -0
  164. package/dist/utils/examples/types.d.ts.map +1 -0
  165. package/dist/utils/examples/types.js +2 -0
  166. package/dist/utils/examples/types.js.map +1 -0
  167. package/dist/utils/examples/utility-patterns.d.ts +3 -0
  168. package/dist/utils/examples/utility-patterns.d.ts.map +1 -0
  169. package/dist/utils/examples/utility-patterns.js +77 -0
  170. package/dist/utils/examples/utility-patterns.js.map +1 -0
  171. package/dist/utils/index.d.ts +5 -3
  172. package/dist/utils/index.d.ts.map +1 -1
  173. package/dist/utils/index.js +5 -3
  174. package/dist/utils/index.js.map +1 -1
  175. package/dist/utils/paths.d.ts +6 -25
  176. package/dist/utils/paths.d.ts.map +1 -1
  177. package/dist/utils/paths.js +11 -40
  178. package/dist/utils/paths.js.map +1 -1
  179. package/dist/utils/paths.test.d.ts +2 -0
  180. package/dist/utils/paths.test.d.ts.map +1 -0
  181. package/dist/utils/paths.test.js +17 -0
  182. package/dist/utils/paths.test.js.map +1 -0
  183. package/dist/utils/scaffold/commands.d.ts +11 -0
  184. package/dist/utils/scaffold/commands.d.ts.map +1 -0
  185. package/dist/utils/scaffold/commands.js +22 -0
  186. package/dist/utils/scaffold/commands.js.map +1 -0
  187. package/dist/utils/scaffold/compute.d.ts +18 -0
  188. package/dist/utils/scaffold/compute.d.ts.map +1 -0
  189. package/dist/utils/scaffold/compute.js +78 -0
  190. package/dist/utils/scaffold/compute.js.map +1 -0
  191. package/dist/utils/scaffold/dependencies.d.ts +32 -0
  192. package/dist/utils/scaffold/dependencies.d.ts.map +1 -0
  193. package/dist/utils/scaffold/dependencies.js +107 -0
  194. package/dist/utils/scaffold/dependencies.js.map +1 -0
  195. package/dist/utils/scaffold/file-structure.d.ts +23 -0
  196. package/dist/utils/scaffold/file-structure.d.ts.map +1 -0
  197. package/dist/utils/scaffold/file-structure.js +62 -0
  198. package/dist/utils/scaffold/file-structure.js.map +1 -0
  199. package/dist/utils/scaffold/generators.d.ts +17 -0
  200. package/dist/utils/scaffold/generators.d.ts.map +1 -0
  201. package/dist/utils/{scaffold.js → scaffold/generators.js} +6 -254
  202. package/dist/utils/scaffold/generators.js.map +1 -0
  203. package/dist/utils/scaffold/index.d.ts +11 -0
  204. package/dist/utils/scaffold/index.d.ts.map +1 -0
  205. package/dist/utils/scaffold/index.js +11 -0
  206. package/dist/utils/scaffold/index.js.map +1 -0
  207. package/package.json +1 -1
  208. package/templates/.github/workflows/release.yml +1 -1
  209. package/templates/e2e/tests/home.spec.ts +2 -2
  210. package/templates/e2e/tests/language.spec.ts +7 -3
  211. package/dist/utils/examples.d.ts +0 -27
  212. package/dist/utils/examples.d.ts.map +0 -1
  213. package/dist/utils/examples.js +0 -438
  214. package/dist/utils/examples.js.map +0 -1
  215. package/dist/utils/scaffold.d.ts +0 -59
  216. package/dist/utils/scaffold.d.ts.map +0 -1
  217. package/dist/utils/scaffold.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Setup commands utility
3
+ *
4
+ * Generates the npm commands needed to set up a scaffolded project.
5
+ */
6
+ /**
7
+ * Generate setup commands based on selected features
8
+ */
9
+ export function getSetupCommands(featureIds) {
10
+ const commands = ['npm install'];
11
+ if (featureIds.includes('devtools')) {
12
+ commands.push('npm run prepare'); // Initialize husky
13
+ }
14
+ if (featureIds.includes('testing')) {
15
+ commands.push('npx playwright install chromium'); // Install Playwright browser
16
+ }
17
+ if (featureIds.includes('i18n')) {
18
+ commands.push('npm run i18n:extract'); // Extract initial translations
19
+ }
20
+ return commands;
21
+ }
22
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/utils/scaffold/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAuB;IACtD,MAAM,QAAQ,GAAa,CAAC,aAAa,CAAC,CAAC;IAE3C,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB;IACvD,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC,6BAA6B;IACjF,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,+BAA+B;IACxE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Scaffold computation orchestrator
3
+ *
4
+ * Coordinates all scaffold components to produce the final scaffold result.
5
+ */
6
+ import type { ScaffoldResult } from '../../features/types.js';
7
+ /**
8
+ * Computes complete scaffold for selected features.
9
+ *
10
+ * Orchestrates dependency resolution, file structure computation,
11
+ * and dynamic content generation to produce a complete project scaffold.
12
+ *
13
+ * @example
14
+ * const scaffold = await computeScaffold(['routing', 'ui'], 'my-app');
15
+ * // Returns: { packageJson, structure, configFiles, claudeMd, ... }
16
+ */
17
+ export declare function computeScaffold(selectedFeatures: string[], projectName?: string): Promise<ScaffoldResult>;
18
+ //# sourceMappingURL=compute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAe9D;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA6DzB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Scaffold computation orchestrator
3
+ *
4
+ * Coordinates all scaffold components to produce the final scaffold result.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { computeDocsContent, computeDocsForFeatures } from '../docs.js';
8
+ import { resolveTemplatePath } from '../paths.js';
9
+ import { resolveFeatureDependencies, mergeDependencies, mergeScripts } from './dependencies.js';
10
+ import { computeFileStructure, getConfigFiles, readConfigFileContent } from './file-structure.js';
11
+ import { getSetupCommands } from './commands.js';
12
+ import { generateClaudeMd, generateViteEnvDts, generateEnvTs, generateRoutesTs } from './generators.js';
13
+ async function readSourcePackageJson() {
14
+ const path = resolveTemplatePath('package.json');
15
+ const content = await readFile(path, 'utf-8');
16
+ return JSON.parse(content);
17
+ }
18
+ /**
19
+ * Computes complete scaffold for selected features.
20
+ *
21
+ * Orchestrates dependency resolution, file structure computation,
22
+ * and dynamic content generation to produce a complete project scaffold.
23
+ *
24
+ * @example
25
+ * const scaffold = await computeScaffold(['routing', 'ui'], 'my-app');
26
+ * // Returns: { packageJson, structure, configFiles, claudeMd, ... }
27
+ */
28
+ export async function computeScaffold(selectedFeatures, projectName = 'my-app') {
29
+ // Resolve all dependencies
30
+ const resolvedFeatures = resolveFeatureDependencies(selectedFeatures);
31
+ // Read engines from source package.json
32
+ const sourcePackageJson = await readSourcePackageJson();
33
+ const engines = sourcePackageJson.engines || {};
34
+ // Merge all dependencies (async to read versions from source package.json)
35
+ const { dependencies, devDependencies } = await mergeDependencies(resolvedFeatures);
36
+ // Merge all scripts
37
+ const scripts = mergeScripts(resolvedFeatures);
38
+ // Get file structure (add CLAUDE.md which is generated, not from patterns)
39
+ // Also add docs based on selected features
40
+ const docPaths = computeDocsForFeatures(resolvedFeatures);
41
+ const structure = [...computeFileStructure(resolvedFeatures), 'CLAUDE.md', ...docPaths];
42
+ // Get config files with actual content read from templates
43
+ const configFiles = {};
44
+ const configPaths = getConfigFiles(resolvedFeatures);
45
+ for (const config of configPaths) {
46
+ configFiles[config] = await readConfigFileContent(config);
47
+ }
48
+ // Get setup commands
49
+ const setupCommands = getSetupCommands(resolvedFeatures);
50
+ // Generate CLAUDE.md content
51
+ const claudeMd = generateClaudeMd(resolvedFeatures, projectName, scripts);
52
+ // Generate vite-env.d.ts content
53
+ const viteEnvDts = generateViteEnvDts(resolvedFeatures);
54
+ // Generate env.ts content
55
+ const envTs = generateEnvTs(resolvedFeatures);
56
+ // Generate routes.ts content (only if routing feature is selected)
57
+ const routesTs = resolvedFeatures.includes('routing') ? generateRoutesTs() : undefined;
58
+ // Get docs with content filtered by features
59
+ const docs = await computeDocsContent(resolvedFeatures);
60
+ return {
61
+ packageJson: {
62
+ name: projectName,
63
+ dependencies,
64
+ devDependencies,
65
+ scripts,
66
+ engines,
67
+ },
68
+ structure,
69
+ configFiles,
70
+ setupCommands,
71
+ claudeMd,
72
+ viteEnvDts,
73
+ envTs,
74
+ routesTs,
75
+ docs,
76
+ };
77
+ }
78
+ //# sourceMappingURL=compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Dependency resolution utilities
3
+ *
4
+ * Handles merging dependencies from features and resolving versions
5
+ * from the source package.json at runtime.
6
+ */
7
+ import type { FeatureId } from '../../features/types.js';
8
+ /**
9
+ * Resolves feature dependencies and auto-includes required features.
10
+ *
11
+ * - Core is always included
12
+ * - Theming auto-includes state (for Zustand persistence)
13
+ *
14
+ * @param selectedFeatures - Array of feature IDs selected by user
15
+ * @returns Array of resolved FeatureIds including auto-included dependencies
16
+ */
17
+ export declare function resolveFeatureDependencies(selectedFeatures: string[]): FeatureId[];
18
+ /**
19
+ * Merges dependencies from multiple features.
20
+ *
21
+ * Resolves package versions from the source package.json at runtime.
22
+ * This ensures scaffolded projects always use up-to-date dependency versions.
23
+ */
24
+ export declare function mergeDependencies(featureIds: FeatureId[]): Promise<{
25
+ dependencies: Record<string, string>;
26
+ devDependencies: Record<string, string>;
27
+ }>;
28
+ /**
29
+ * Merge scripts from multiple features
30
+ */
31
+ export declare function mergeScripts(featureIds: FeatureId[]): Record<string, string>;
32
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA4BzD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAmBlF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAAC,CAwCD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW5E"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Dependency resolution utilities
3
+ *
4
+ * Handles merging dependencies from features and resolving versions
5
+ * from the source package.json at runtime.
6
+ */
7
+ import { readFile } from 'fs/promises';
8
+ import { FEATURES, isFeatureId } from '../../features/index.js';
9
+ import { resolveTemplatePath } from '../paths.js';
10
+ // Cache for source package.json to avoid repeated file reads
11
+ let cachedSourcePackageJson = null;
12
+ /**
13
+ * Read and cache the source package.json dependencies
14
+ */
15
+ async function getSourceDependencies() {
16
+ if (!cachedSourcePackageJson) {
17
+ const path = resolveTemplatePath('package.json');
18
+ const content = await readFile(path, 'utf-8');
19
+ const pkg = JSON.parse(content);
20
+ cachedSourcePackageJson = {
21
+ dependencies: (pkg.dependencies || {}),
22
+ devDependencies: (pkg.devDependencies || {}),
23
+ };
24
+ }
25
+ return cachedSourcePackageJson;
26
+ }
27
+ /**
28
+ * Resolves feature dependencies and auto-includes required features.
29
+ *
30
+ * - Core is always included
31
+ * - Theming auto-includes state (for Zustand persistence)
32
+ *
33
+ * @param selectedFeatures - Array of feature IDs selected by user
34
+ * @returns Array of resolved FeatureIds including auto-included dependencies
35
+ */
36
+ export function resolveFeatureDependencies(selectedFeatures) {
37
+ const resolved = new Set();
38
+ // Always include core
39
+ resolved.add('core');
40
+ // Add all selected features (no recursive dependency resolution)
41
+ for (const featureId of selectedFeatures) {
42
+ if (isFeatureId(featureId)) {
43
+ resolved.add(featureId);
44
+ }
45
+ }
46
+ // Theming requires state feature for Zustand persistence
47
+ if (resolved.has('theming') && !resolved.has('state')) {
48
+ resolved.add('state');
49
+ }
50
+ return Array.from(resolved);
51
+ }
52
+ /**
53
+ * Merges dependencies from multiple features.
54
+ *
55
+ * Resolves package versions from the source package.json at runtime.
56
+ * This ensures scaffolded projects always use up-to-date dependency versions.
57
+ */
58
+ export async function mergeDependencies(featureIds) {
59
+ const dependencies = {};
60
+ const devDependencies = {};
61
+ // Get source package.json for version lookup
62
+ const sourcePkg = await getSourceDependencies();
63
+ for (const featureId of featureIds) {
64
+ const feature = FEATURES[featureId];
65
+ // Look up dependency versions from source package.json
66
+ if (feature.dependencyNames) {
67
+ for (const name of feature.dependencyNames) {
68
+ if (sourcePkg.dependencies[name]) {
69
+ dependencies[name] = sourcePkg.dependencies[name];
70
+ }
71
+ else {
72
+ console.warn(`Dependency "${name}" not found in source package.json`);
73
+ }
74
+ }
75
+ }
76
+ if (feature.devDependencyNames) {
77
+ for (const name of feature.devDependencyNames) {
78
+ if (sourcePkg.devDependencies[name]) {
79
+ devDependencies[name] = sourcePkg.devDependencies[name];
80
+ }
81
+ else {
82
+ console.warn(`DevDependency "${name}" not found in source package.json`);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ // Sort alphabetically
88
+ const sortObject = (obj) => Object.fromEntries(Object.entries(obj).sort(([a], [b]) => a.localeCompare(b)));
89
+ return {
90
+ dependencies: sortObject(dependencies),
91
+ devDependencies: sortObject(devDependencies),
92
+ };
93
+ }
94
+ /**
95
+ * Merge scripts from multiple features
96
+ */
97
+ export function mergeScripts(featureIds) {
98
+ const scripts = {};
99
+ for (const featureId of featureIds) {
100
+ const feature = FEATURES[featureId];
101
+ if (feature.scripts) {
102
+ Object.assign(scripts, feature.scripts);
103
+ }
104
+ }
105
+ return scripts;
106
+ }
107
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * File structure utilities
3
+ *
4
+ * Handles computing which files to include based on selected features.
5
+ */
6
+ import type { FeatureId } from '../../features/types.js';
7
+ /**
8
+ * Compute file structure for selected features
9
+ *
10
+ * When the 'testing' feature is selected, testFiles from all selected features
11
+ * are also included. This ensures scaffolded projects get tests that match
12
+ * their source files.
13
+ */
14
+ export declare function computeFileStructure(featureIds: FeatureId[]): string[];
15
+ /**
16
+ * Get config files needed for selected features
17
+ */
18
+ export declare function getConfigFiles(featureIds: FeatureId[]): string[];
19
+ /**
20
+ * Read config file content from template
21
+ */
22
+ export declare function readConfigFileContent(configPath: string): Promise<string>;
23
+ //# sourceMappingURL=file-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-structure.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/file-structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAqBtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAahE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * File structure utilities
3
+ *
4
+ * Handles computing which files to include based on selected features.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { FEATURES } from '../../features/index.js';
8
+ import { resolveTemplatePath } from '../paths.js';
9
+ /**
10
+ * Compute file structure for selected features
11
+ *
12
+ * When the 'testing' feature is selected, testFiles from all selected features
13
+ * are also included. This ensures scaffolded projects get tests that match
14
+ * their source files.
15
+ */
16
+ export function computeFileStructure(featureIds) {
17
+ const files = new Set();
18
+ const includeTests = featureIds.includes('testing');
19
+ for (const featureId of featureIds) {
20
+ const feature = FEATURES[featureId];
21
+ // Always include source files
22
+ for (const file of feature.files) {
23
+ files.add(file);
24
+ }
25
+ // Include test files only when testing feature is selected
26
+ if (includeTests && feature.testFiles) {
27
+ for (const file of feature.testFiles) {
28
+ files.add(file);
29
+ }
30
+ }
31
+ }
32
+ return Array.from(files).sort();
33
+ }
34
+ /**
35
+ * Get config files needed for selected features
36
+ */
37
+ export function getConfigFiles(featureIds) {
38
+ const configs = new Set();
39
+ for (const featureId of featureIds) {
40
+ const feature = FEATURES[featureId];
41
+ if (feature.configFiles) {
42
+ for (const config of feature.configFiles) {
43
+ configs.add(config);
44
+ }
45
+ }
46
+ }
47
+ return Array.from(configs).sort();
48
+ }
49
+ /**
50
+ * Read config file content from template
51
+ */
52
+ export async function readConfigFileContent(configPath) {
53
+ const fullPath = resolveTemplatePath(configPath);
54
+ try {
55
+ return await readFile(fullPath, 'utf-8');
56
+ }
57
+ catch {
58
+ // File might not exist if running outside react-spa-scaffold
59
+ return `// File not found: ${configPath}\n// Run MCP server from within react-spa-scaffold repository`;
60
+ }
61
+ }
62
+ //# sourceMappingURL=file-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-structure.js","sourceRoot":"","sources":["../../../src/utils/scaffold/file-structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAuB;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpC,8BAA8B;QAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,2DAA2D;QAC3D,IAAI,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACrC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAuB;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO,sBAAsB,UAAU,+DAA+D,CAAC;IACzG,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Content generators for CLAUDE.md, env.ts, routes.ts, etc.
3
+ */
4
+ import type { FeatureId } from '../../features/types.js';
5
+ /** Generates CLAUDE.md content based on selected features. */
6
+ export declare function generateClaudeMd(featureIds: FeatureId[], projectName: string, scripts: Record<string, string>): string;
7
+ /**
8
+ * Generate vite-env.d.ts content based on selected features
9
+ */
10
+ export declare function generateViteEnvDts(featureIds: FeatureId[]): string;
11
+ /**
12
+ * Generate env.ts content based on selected features
13
+ */
14
+ export declare function generateEnvTs(featureIds: FeatureId[]): string;
15
+ /** Generates routes.ts content. */
16
+ export declare function generateRoutesTs(): string;
17
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CA0RR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAwClE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA0E7D;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,IAAI,MAAM,CAazC"}