@react-spa-scaffold/mcp 0.3.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 (173) hide show
  1. package/README.md +423 -0
  2. package/dist/features/index.d.ts +5 -0
  3. package/dist/features/index.d.ts.map +1 -0
  4. package/dist/features/index.js +3 -0
  5. package/dist/features/index.js.map +1 -0
  6. package/dist/features/registry.d.ts +10 -0
  7. package/dist/features/registry.d.ts.map +1 -0
  8. package/dist/features/registry.js +508 -0
  9. package/dist/features/registry.js.map +1 -0
  10. package/dist/features/types.d.ts +45 -0
  11. package/dist/features/types.d.ts.map +1 -0
  12. package/dist/features/types.js +5 -0
  13. package/dist/features/types.js.map +1 -0
  14. package/dist/features/versions.d.ts +16 -0
  15. package/dist/features/versions.d.ts.map +1 -0
  16. package/dist/features/versions.js +46 -0
  17. package/dist/features/versions.js.map +1 -0
  18. package/dist/features/versions.json +5 -0
  19. package/dist/index.d.ts +22 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +43 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/resources/docs.d.ts +29 -0
  24. package/dist/resources/docs.d.ts.map +1 -0
  25. package/dist/resources/docs.js +105 -0
  26. package/dist/resources/docs.js.map +1 -0
  27. package/dist/resources/index.d.ts +2 -0
  28. package/dist/resources/index.d.ts.map +1 -0
  29. package/dist/resources/index.js +2 -0
  30. package/dist/resources/index.js.map +1 -0
  31. package/dist/server.d.ts +12 -0
  32. package/dist/server.d.ts.map +1 -0
  33. package/dist/server.js +115 -0
  34. package/dist/server.js.map +1 -0
  35. package/dist/tools/get-example.d.ts +51 -0
  36. package/dist/tools/get-example.d.ts.map +1 -0
  37. package/dist/tools/get-example.js +90 -0
  38. package/dist/tools/get-example.js.map +1 -0
  39. package/dist/tools/get-features.d.ts +30 -0
  40. package/dist/tools/get-features.d.ts.map +1 -0
  41. package/dist/tools/get-features.js +46 -0
  42. package/dist/tools/get-features.js.map +1 -0
  43. package/dist/tools/get-scaffold.d.ts +77 -0
  44. package/dist/tools/get-scaffold.d.ts.map +1 -0
  45. package/dist/tools/get-scaffold.js +153 -0
  46. package/dist/tools/get-scaffold.js.map +1 -0
  47. package/dist/tools/index.d.ts +4 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +4 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/utils/docs.d.ts +14 -0
  52. package/dist/utils/docs.d.ts.map +1 -0
  53. package/dist/utils/docs.js +64 -0
  54. package/dist/utils/docs.js.map +1 -0
  55. package/dist/utils/examples.d.ts +27 -0
  56. package/dist/utils/examples.d.ts.map +1 -0
  57. package/dist/utils/examples.js +399 -0
  58. package/dist/utils/examples.js.map +1 -0
  59. package/dist/utils/index.d.ts +5 -0
  60. package/dist/utils/index.d.ts.map +1 -0
  61. package/dist/utils/index.js +5 -0
  62. package/dist/utils/index.js.map +1 -0
  63. package/dist/utils/paths.d.ts +28 -0
  64. package/dist/utils/paths.d.ts.map +1 -0
  65. package/dist/utils/paths.js +40 -0
  66. package/dist/utils/paths.js.map +1 -0
  67. package/dist/utils/scaffold.d.ts +50 -0
  68. package/dist/utils/scaffold.d.ts.map +1 -0
  69. package/dist/utils/scaffold.js +500 -0
  70. package/dist/utils/scaffold.js.map +1 -0
  71. package/dist/version.d.ts +5 -0
  72. package/dist/version.d.ts.map +1 -0
  73. package/dist/version.js +19 -0
  74. package/dist/version.js.map +1 -0
  75. package/package.json +63 -0
  76. package/templates/.bundled +0 -0
  77. package/templates/CLAUDE.md +145 -0
  78. package/templates/docs/API_REFERENCE.md +58 -0
  79. package/templates/docs/ARCHITECTURE.md +185 -0
  80. package/templates/docs/CODING_STANDARDS.md +53 -0
  81. package/templates/docs/COMPONENT_GUIDELINES.md +301 -0
  82. package/templates/docs/E2E_TESTING.md +116 -0
  83. package/templates/docs/INTERNATIONALIZATION.md +67 -0
  84. package/templates/docs/TESTING.md +259 -0
  85. package/templates/docs/WORKFLOW.md +170 -0
  86. package/templates/src/App.tsx +42 -0
  87. package/templates/src/components/layout/Header.tsx +19 -0
  88. package/templates/src/components/layout/index.ts +1 -0
  89. package/templates/src/components/shared/ErrorBoundary/ErrorBoundary.tsx +104 -0
  90. package/templates/src/components/shared/ErrorBoundary/index.ts +1 -0
  91. package/templates/src/components/shared/LanguageSwitcher/LanguageSwitcher.tsx +45 -0
  92. package/templates/src/components/shared/LanguageSwitcher/index.ts +1 -0
  93. package/templates/src/components/shared/SEO/SEO.tsx +55 -0
  94. package/templates/src/components/shared/SEO/index.ts +1 -0
  95. package/templates/src/components/shared/ThemeToggle/ThemeToggle.tsx +41 -0
  96. package/templates/src/components/shared/ThemeToggle/index.ts +1 -0
  97. package/templates/src/components/shared/index.ts +4 -0
  98. package/templates/src/components/ui/button.tsx +48 -0
  99. package/templates/src/components/ui/dropdown-menu.tsx +228 -0
  100. package/templates/src/components/ui/form-error.tsx +95 -0
  101. package/templates/src/components/ui/loading.tsx +58 -0
  102. package/templates/src/components/ui/skeleton.tsx +52 -0
  103. package/templates/src/components/ui/sonner.tsx +34 -0
  104. package/templates/src/components/ui/spinner.tsx +40 -0
  105. package/templates/src/components/ui/visually-hidden.tsx +51 -0
  106. package/templates/src/contexts/mobileContext.tsx +66 -0
  107. package/templates/src/contexts/queryContext.tsx +28 -0
  108. package/templates/src/hooks/index.ts +7 -0
  109. package/templates/src/hooks/useContactForm.ts +33 -0
  110. package/templates/src/hooks/useExampleQuery.ts +20 -0
  111. package/templates/src/hooks/useLanguage.ts +23 -0
  112. package/templates/src/hooks/useMediaQuery.ts +53 -0
  113. package/templates/src/hooks/useThemeEffect.ts +31 -0
  114. package/templates/src/hooks/useTouchSizes.ts +16 -0
  115. package/templates/src/i18n/config.ts +11 -0
  116. package/templates/src/i18n/detectLanguage.ts +57 -0
  117. package/templates/src/i18n/index.ts +20 -0
  118. package/templates/src/i18n/loadCatalog.ts +30 -0
  119. package/templates/src/index.css +98 -0
  120. package/templates/src/lib/api.ts +142 -0
  121. package/templates/src/lib/config.ts +15 -0
  122. package/templates/src/lib/constants.ts +8 -0
  123. package/templates/src/lib/env.ts +53 -0
  124. package/templates/src/lib/format.ts +119 -0
  125. package/templates/src/lib/index.ts +24 -0
  126. package/templates/src/lib/routes.ts +11 -0
  127. package/templates/src/lib/storage.ts +91 -0
  128. package/templates/src/lib/storageKeys.ts +10 -0
  129. package/templates/src/lib/utils.ts +6 -0
  130. package/templates/src/lib/validations.ts +39 -0
  131. package/templates/src/locales/de.po +65 -0
  132. package/templates/src/locales/en.po +65 -0
  133. package/templates/src/locales/es.po +65 -0
  134. package/templates/src/main.tsx +107 -0
  135. package/templates/src/mocks/fixtures/index.ts +1 -0
  136. package/templates/src/mocks/fixtures/todos.ts +40 -0
  137. package/templates/src/mocks/handlers/index.ts +7 -0
  138. package/templates/src/mocks/handlers/todos.ts +59 -0
  139. package/templates/src/mocks/index.ts +3 -0
  140. package/templates/src/mocks/node.ts +9 -0
  141. package/templates/src/pages/Home.tsx +27 -0
  142. package/templates/src/pages/NotFound.tsx +28 -0
  143. package/templates/src/pages/index.ts +2 -0
  144. package/templates/src/stores/index.ts +2 -0
  145. package/templates/src/stores/preferencesStore.ts +85 -0
  146. package/templates/src/test/index.ts +8 -0
  147. package/templates/src/test/mocks.ts +17 -0
  148. package/templates/src/test/providers.tsx +54 -0
  149. package/templates/src/test-setup.ts +54 -0
  150. package/templates/src/types/api.ts +31 -0
  151. package/templates/src/types/index.ts +2 -0
  152. package/templates/src/types/preferences.ts +5 -0
  153. package/templates/src/vite-env.d.ts +10 -0
  154. package/templates/tests/unit/components/ErrorBoundary.test.tsx +193 -0
  155. package/templates/tests/unit/components/Header.test.tsx +33 -0
  156. package/templates/tests/unit/components/LanguageSwitcher.test.tsx +40 -0
  157. package/templates/tests/unit/components/Loading.test.tsx +76 -0
  158. package/templates/tests/unit/components/SEO.test.tsx +80 -0
  159. package/templates/tests/unit/components/ThemeToggle.test.tsx +62 -0
  160. package/templates/tests/unit/contexts/mobileContext.test.tsx +54 -0
  161. package/templates/tests/unit/hooks/useContactForm.test.ts +60 -0
  162. package/templates/tests/unit/hooks/useExampleQuery.test.tsx +94 -0
  163. package/templates/tests/unit/hooks/useLanguage.test.tsx +75 -0
  164. package/templates/tests/unit/hooks/useMediaQuery.test.ts +57 -0
  165. package/templates/tests/unit/hooks/useThemeEffect.test.ts +42 -0
  166. package/templates/tests/unit/i18n/detectLanguage.test.ts +40 -0
  167. package/templates/tests/unit/i18n/loadCatalog.test.ts +70 -0
  168. package/templates/tests/unit/lib/api.test.ts +142 -0
  169. package/templates/tests/unit/lib/format.test.ts +100 -0
  170. package/templates/tests/unit/lib/storage.test.ts +90 -0
  171. package/templates/tests/unit/lib/utils.test.ts +19 -0
  172. package/templates/tests/unit/lib/validations.test.ts +56 -0
  173. package/templates/tests/unit/stores/preferencesStore.test.ts +75 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * get_scaffold tool
3
+ *
4
+ * Returns complete scaffold information for selected features.
5
+ * This includes dependencies, file structure, config files,
6
+ * and setup commands needed to create a new project.
7
+ */
8
+ import { z } from 'zod';
9
+ import { type CodeExample } from '../utils/index.js';
10
+ export declare const getScaffoldSchema: z.ZodObject<{
11
+ features: z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>;
12
+ projectName: z.ZodOptional<z.ZodString>;
13
+ includeExamples: z.ZodOptional<z.ZodBoolean>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ features: string[];
16
+ projectName?: string | undefined;
17
+ includeExamples?: boolean | undefined;
18
+ }, {
19
+ features: string[];
20
+ projectName?: string | undefined;
21
+ includeExamples?: boolean | undefined;
22
+ }>;
23
+ export type GetScaffoldInput = z.infer<typeof getScaffoldSchema>;
24
+ export declare function getScaffold(input: GetScaffoldInput): Promise<{
25
+ projectName: string;
26
+ selectedFeatures: string[];
27
+ resolvedFeatures: string[];
28
+ featureDetails: {
29
+ id: string;
30
+ name: string;
31
+ wasExplicitlySelected: boolean;
32
+ wasAutoIncluded: boolean;
33
+ patterns: string[];
34
+ }[];
35
+ packageJson: {
36
+ name: string;
37
+ dependencies: Record<string, string>;
38
+ devDependencies: Record<string, string>;
39
+ scripts: Record<string, string>;
40
+ engines: Record<string, string>;
41
+ };
42
+ fileStructure: string[];
43
+ configFiles: Record<string, string>;
44
+ setupCommands: string[];
45
+ claudeMd: string;
46
+ viteEnvDts: string;
47
+ envTs: string;
48
+ docs: Record<string, string>;
49
+ examples: Record<string, CodeExample[]> | undefined;
50
+ instructions: string;
51
+ }>;
52
+ export declare const getScaffoldToolDefinition: {
53
+ name: string;
54
+ description: string;
55
+ inputSchema: {
56
+ type: "object";
57
+ properties: {
58
+ features: {
59
+ type: "array";
60
+ items: {
61
+ type: "string";
62
+ };
63
+ description: string;
64
+ };
65
+ projectName: {
66
+ type: "string";
67
+ description: string;
68
+ };
69
+ includeExamples: {
70
+ type: "boolean";
71
+ description: string;
72
+ };
73
+ };
74
+ required: string[];
75
+ };
76
+ };
77
+ //# sourceMappingURL=get-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/get-scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEtH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAkB5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDxD;AA0CD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;CAyCrC,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * get_scaffold tool
3
+ *
4
+ * Returns complete scaffold information for selected features.
5
+ * This includes dependencies, file structure, config files,
6
+ * and setup commands needed to create a new project.
7
+ */
8
+ import { z } from 'zod';
9
+ import { FEATURE_IDS, FEATURES } from '../features/index.js';
10
+ import { computeScaffold, resolveFeatureDependencies, getFeatureExamples } from '../utils/index.js';
11
+ export const getScaffoldSchema = z.object({
12
+ features: z
13
+ .array(z.string())
14
+ .max(15, 'Maximum 15 features allowed')
15
+ .refine((features) => features.every((f) => f in FEATURES), (features) => ({
16
+ message: `Invalid features: ${features.filter((f) => !(f in FEATURES)).join(', ')}. Valid: ${FEATURE_IDS.join(', ')}`,
17
+ }))
18
+ .describe('List of feature IDs to include (e.g., ["routing", "ui", "forms"])'),
19
+ projectName: z
20
+ .string()
21
+ .max(50, 'Project name too long')
22
+ .regex(/^[a-z0-9-]*$/, 'Project name must be lowercase letters, numbers, and hyphens only')
23
+ .optional()
24
+ .describe('Name for the new project (defaults to "my-app")'),
25
+ includeExamples: z.boolean().optional().describe('Include code examples for each feature pattern (default: false)'),
26
+ });
27
+ export async function getScaffold(input) {
28
+ const { features, projectName = 'my-app', includeExamples = false } = input;
29
+ // Resolve dependencies
30
+ const resolvedFeatures = resolveFeatureDependencies(features);
31
+ // Get scaffold result
32
+ const scaffold = await computeScaffold(features, projectName);
33
+ // Build feature details
34
+ const featureDetails = resolvedFeatures.map((id) => {
35
+ const feature = FEATURES[id];
36
+ return {
37
+ id,
38
+ name: feature.name,
39
+ wasExplicitlySelected: features.includes(id),
40
+ wasAutoIncluded: !features.includes(id),
41
+ patterns: feature.patterns,
42
+ };
43
+ });
44
+ // Optionally include examples
45
+ let examples;
46
+ if (includeExamples) {
47
+ examples = {};
48
+ for (const id of resolvedFeatures) {
49
+ const feature = FEATURES[id];
50
+ if (feature.patterns.length > 0) {
51
+ examples[id] = await getFeatureExamples(feature.patterns);
52
+ }
53
+ }
54
+ }
55
+ return {
56
+ projectName,
57
+ selectedFeatures: features,
58
+ resolvedFeatures,
59
+ featureDetails,
60
+ packageJson: scaffold.packageJson,
61
+ fileStructure: scaffold.structure,
62
+ configFiles: scaffold.configFiles,
63
+ setupCommands: scaffold.setupCommands,
64
+ claudeMd: scaffold.claudeMd,
65
+ viteEnvDts: scaffold.viteEnvDts,
66
+ envTs: scaffold.envTs,
67
+ docs: scaffold.docs,
68
+ examples,
69
+ instructions: generateInstructions(projectName, scaffold.setupCommands),
70
+ };
71
+ }
72
+ function generateInstructions(projectName, setupCommands) {
73
+ return `## Setup Instructions
74
+
75
+ 1. Create project directory:
76
+ \`\`\`bash
77
+ mkdir ${projectName} && cd ${projectName}
78
+ \`\`\`
79
+
80
+ 2. Initialize package.json with the provided dependencies
81
+
82
+ 3. Create the file structure as listed
83
+
84
+ 4. Create src/vite-env.d.ts using the provided viteEnvDts content
85
+
86
+ 5. Create src/lib/env.ts using the provided envTs content
87
+
88
+ 6. Create CLAUDE.md using the provided claudeMd content
89
+
90
+ 7. Create docs/ directory with the provided docs content
91
+
92
+ 8. Run setup commands:
93
+ \`\`\`bash
94
+ ${setupCommands.join('\n ')}
95
+ \`\`\`
96
+
97
+ 9. Start development:
98
+ \`\`\`bash
99
+ npm run dev
100
+ \`\`\`
101
+
102
+ ## Notes
103
+ - Core feature is always included
104
+ - Auto-included features are dependencies of selected features
105
+ - Use get_example tool to get code patterns for each file type
106
+ - CLAUDE.md content is dynamically generated based on selected features
107
+ - vite-env.d.ts content is dynamically generated based on selected features
108
+ - env.ts content is dynamically generated based on selected features
109
+ - docs/ content is filtered based on selected features`;
110
+ }
111
+ export const getScaffoldToolDefinition = {
112
+ name: 'get_scaffold',
113
+ description: `Get complete scaffold information for a new react-spa-scaffold project.
114
+
115
+ Given a list of features, returns:
116
+ - Resolved dependencies (including auto-required features)
117
+ - Complete package.json (dependencies + devDependencies + scripts)
118
+ - File structure to create
119
+ - Config files needed
120
+ - Documentation files (filtered by selected features)
121
+ - Setup commands to run after creation
122
+
123
+ The AI agent should use this information to:
124
+ 1. Create the project directory
125
+ 2. Write package.json
126
+ 3. Create all files using get_example for patterns
127
+ 4. Create docs/ with provided documentation
128
+ 5. Run setup commands
129
+
130
+ Example usage:
131
+ - features: ["routing", "ui", "forms", "testing"]
132
+ - This will auto-include: core, state (ui requires it)`,
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: {
136
+ features: {
137
+ type: 'array',
138
+ items: { type: 'string' },
139
+ description: 'List of feature IDs to include',
140
+ },
141
+ projectName: {
142
+ type: 'string',
143
+ description: 'Name for the new project',
144
+ },
145
+ includeExamples: {
146
+ type: 'boolean',
147
+ description: 'Include code examples for patterns',
148
+ },
149
+ },
150
+ required: ['features'],
151
+ },
152
+ };
153
+ //# sourceMappingURL=get-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-scaffold.js","sourceRoot":"","sources":["../../src/tools/get-scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { getFeatures, getFeaturesToolDefinition, type FeatureSummary } from './get-features.js';
2
+ export { getScaffold, getScaffoldSchema, getScaffoldToolDefinition, type GetScaffoldInput } from './get-scaffold.js';
3
+ export { getExample, getExampleSchema, getExampleToolDefinition, type GetExampleInput } from './get-example.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getFeatures, getFeaturesToolDefinition } from './get-features.js';
2
+ export { getScaffold, getScaffoldSchema, getScaffoldToolDefinition } from './get-scaffold.js';
3
+ export { getExample, getExampleSchema, getExampleToolDefinition } from './get-example.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAuB,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,yBAAyB,EAAyB,MAAM,mBAAmB,CAAC;AAErH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,wBAAwB,EAAwB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Documentation utilities for scaffolding
3
+ *
4
+ * Handles doc selection based on selected features.
5
+ */
6
+ /**
7
+ * Determine which docs to include based on selected features
8
+ */
9
+ export declare function computeDocsForFeatures(featureIds: readonly string[]): string[];
10
+ /**
11
+ * Read all docs for scaffolding based on selected features
12
+ */
13
+ export declare function computeDocsContent(featureIds: readonly string[]): Promise<Record<string, string>>;
14
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAU9E;AAeD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CASvG"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Documentation utilities for scaffolding
3
+ *
4
+ * Handles doc selection based on selected features.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { resolveTemplatePath } from './paths.js';
8
+ /**
9
+ * Documentation configuration
10
+ *
11
+ * - If requiredFeatures is set: only included when one of those features is selected
12
+ * - If requiredFeatures is not set: always included (universal reference material)
13
+ *
14
+ * WORKFLOW.md is intentionally excluded - not relevant to scaffolded projects
15
+ */
16
+ const DOCS_CONFIG = {
17
+ // Universal - always included
18
+ 'docs/ARCHITECTURE.md': {},
19
+ 'docs/CODING_STANDARDS.md': {},
20
+ 'docs/COMPONENT_GUIDELINES.md': {},
21
+ 'docs/API_REFERENCE.md': {},
22
+ // Feature-specific
23
+ 'docs/TESTING.md': { requiredFeatures: ['testing'] },
24
+ 'docs/E2E_TESTING.md': { requiredFeatures: ['testing'] },
25
+ 'docs/INTERNATIONALIZATION.md': { requiredFeatures: ['i18n'] },
26
+ };
27
+ /**
28
+ * Determine which docs to include based on selected features
29
+ */
30
+ export function computeDocsForFeatures(featureIds) {
31
+ const featureSet = new Set(featureIds);
32
+ return Object.entries(DOCS_CONFIG)
33
+ .filter(([, config]) => {
34
+ if (!config.requiredFeatures)
35
+ return true; // Universal
36
+ return config.requiredFeatures.some((f) => featureSet.has(f));
37
+ })
38
+ .map(([path]) => path)
39
+ .sort();
40
+ }
41
+ /**
42
+ * Read a documentation file for scaffolding
43
+ */
44
+ async function readDoc(docPath) {
45
+ const fullPath = resolveTemplatePath(docPath);
46
+ try {
47
+ return await readFile(fullPath, 'utf-8');
48
+ }
49
+ catch {
50
+ return `<!-- File not found: ${docPath} -->\n<!-- Run MCP server from within react-spa-scaffold repository -->`;
51
+ }
52
+ }
53
+ /**
54
+ * Read all docs for scaffolding based on selected features
55
+ */
56
+ export async function computeDocsContent(featureIds) {
57
+ const docPaths = computeDocsForFeatures(featureIds);
58
+ const docs = {};
59
+ for (const docPath of docPaths) {
60
+ docs[docPath] = await readDoc(docPath);
61
+ }
62
+ return docs;
63
+ }
64
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,GAAoD;IACnE,8BAA8B;IAC9B,sBAAsB,EAAE,EAAE;IAC1B,0BAA0B,EAAE,EAAE;IAC9B,8BAA8B,EAAE,EAAE;IAClC,uBAAuB,EAAE,EAAE;IAE3B,mBAAmB;IACnB,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,qBAAqB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACxD,8BAA8B,EAAE,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE;CAC/D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA6B;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,CAAC,YAAY;QACvD,OAAO,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SACrB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wBAAwB,OAAO,yEAAyE,CAAC;IAClH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAA6B;IACpE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,IAAI,GAA2B,EAAE,CAAC;IAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Code example utilities
3
+ *
4
+ * Maps pattern types to actual files in the react-spa-scaffold repository.
5
+ * When the MCP server runs, it reads these files to provide real,
6
+ * working examples to AI agents.
7
+ */
8
+ export interface CodeExample {
9
+ pattern: string;
10
+ description: string;
11
+ filePath: string;
12
+ code: string;
13
+ keyPoints: string[];
14
+ }
15
+ /**
16
+ * Get available pattern types
17
+ */
18
+ export declare function getAvailablePatterns(): string[];
19
+ /**
20
+ * Get code example for a pattern
21
+ */
22
+ export declare function getCodeExample(pattern: string): Promise<CodeExample | null>;
23
+ /**
24
+ * Get all examples for a feature's patterns
25
+ */
26
+ export declare function getFeatureExamples(patterns: string[]): Promise<CodeExample[]>;
27
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/utils/examples.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA2WD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4BjF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAWnF"}