create-react-forge 1.0.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 (90) hide show
  1. package/README.md +109 -0
  2. package/dist/assembler/index.d.ts +100 -0
  3. package/dist/assembler/index.d.ts.map +1 -0
  4. package/dist/assembler/index.js +198 -0
  5. package/dist/assembler/index.js.map +1 -0
  6. package/dist/assembler/merger.d.ts +14 -0
  7. package/dist/assembler/merger.d.ts.map +1 -0
  8. package/dist/assembler/merger.js +58 -0
  9. package/dist/assembler/merger.js.map +1 -0
  10. package/dist/cli/index.d.ts +57 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +110 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli/parser.d.ts +3 -0
  15. package/dist/cli/parser.d.ts.map +1 -0
  16. package/dist/cli/parser.js +50 -0
  17. package/dist/cli/parser.js.map +1 -0
  18. package/dist/cli/prompts.d.ts +24 -0
  19. package/dist/cli/prompts.d.ts.map +1 -0
  20. package/dist/cli/prompts.js +126 -0
  21. package/dist/cli/prompts.js.map +1 -0
  22. package/dist/config/builder.d.ts +42 -0
  23. package/dist/config/builder.d.ts.map +1 -0
  24. package/dist/config/builder.js +113 -0
  25. package/dist/config/builder.js.map +1 -0
  26. package/dist/config/defaults.d.ts +51 -0
  27. package/dist/config/defaults.d.ts.map +1 -0
  28. package/dist/config/defaults.js +41 -0
  29. package/dist/config/defaults.js.map +1 -0
  30. package/dist/config/schema.d.ts +318 -0
  31. package/dist/config/schema.d.ts.map +1 -0
  32. package/dist/config/schema.js +100 -0
  33. package/dist/config/schema.js.map +1 -0
  34. package/dist/dependencies/resolver.d.ts +43 -0
  35. package/dist/dependencies/resolver.d.ts.map +1 -0
  36. package/dist/dependencies/resolver.js +117 -0
  37. package/dist/dependencies/resolver.js.map +1 -0
  38. package/dist/docs/architecture-generator.d.ts +3 -0
  39. package/dist/docs/architecture-generator.d.ts.map +1 -0
  40. package/dist/docs/architecture-generator.js +73 -0
  41. package/dist/docs/architecture-generator.js.map +1 -0
  42. package/dist/docs/index.d.ts +2 -0
  43. package/dist/docs/index.d.ts.map +1 -0
  44. package/dist/docs/index.js +2 -0
  45. package/dist/docs/index.js.map +1 -0
  46. package/dist/generator/index.d.ts +41 -0
  47. package/dist/generator/index.d.ts.map +1 -0
  48. package/dist/generator/index.js +201 -0
  49. package/dist/generator/index.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +7 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lifecycle/index.d.ts +2 -0
  55. package/dist/lifecycle/index.d.ts.map +1 -0
  56. package/dist/lifecycle/index.js +2 -0
  57. package/dist/lifecycle/index.js.map +1 -0
  58. package/dist/lifecycle/installer.d.ts +2 -0
  59. package/dist/lifecycle/installer.d.ts.map +1 -0
  60. package/dist/lifecycle/installer.js +14 -0
  61. package/dist/lifecycle/installer.js.map +1 -0
  62. package/dist/plugins/index.d.ts +4 -0
  63. package/dist/plugins/index.d.ts.map +1 -0
  64. package/dist/plugins/index.js +4 -0
  65. package/dist/plugins/index.js.map +1 -0
  66. package/dist/plugins/loader.d.ts +5 -0
  67. package/dist/plugins/loader.d.ts.map +1 -0
  68. package/dist/plugins/loader.js +16 -0
  69. package/dist/plugins/loader.js.map +1 -0
  70. package/dist/plugins/manager.d.ts +9 -0
  71. package/dist/plugins/manager.d.ts.map +1 -0
  72. package/dist/plugins/manager.js +41 -0
  73. package/dist/plugins/manager.js.map +1 -0
  74. package/dist/plugins/types.d.ts +17 -0
  75. package/dist/plugins/types.d.ts.map +1 -0
  76. package/dist/plugins/types.js +2 -0
  77. package/dist/plugins/types.js.map +1 -0
  78. package/dist/templates/registry.d.ts +108 -0
  79. package/dist/templates/registry.d.ts.map +1 -0
  80. package/dist/templates/registry.js +238 -0
  81. package/dist/templates/registry.js.map +1 -0
  82. package/dist/templates/utils.d.ts +49 -0
  83. package/dist/templates/utils.d.ts.map +1 -0
  84. package/dist/templates/utils.js +103 -0
  85. package/dist/templates/utils.js.map +1 -0
  86. package/dist/testing/configurer.d.ts +29 -0
  87. package/dist/testing/configurer.d.ts.map +1 -0
  88. package/dist/testing/configurer.js +163 -0
  89. package/dist/testing/configurer.js.map +1 -0
  90. package/package.json +84 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Template manifest - metadata for each template overlay
3
+ */
4
+ export interface TemplateManifest {
5
+ name: string;
6
+ version: string;
7
+ description?: string;
8
+ compatibleWith?: string[];
9
+ dependencies?: Record<string, string>;
10
+ devDependencies?: Record<string, string>;
11
+ scripts?: Record<string, string>;
12
+ filePatterns?: {
13
+ include?: string[];
14
+ exclude?: string[];
15
+ };
16
+ }
17
+ /**
18
+ * Template overlay - a composable set of files and configuration
19
+ */
20
+ export interface TemplateOverlay {
21
+ name: string;
22
+ path: string;
23
+ manifest: TemplateManifest;
24
+ files: Map<string, string>;
25
+ }
26
+ /**
27
+ * Template registry - manages template discovery and loading
28
+ */
29
+ export declare class TemplateRegistry {
30
+ private loadedTemplates;
31
+ private templatesDir;
32
+ constructor(templatesDir?: string);
33
+ /**
34
+ * Load a template manifest from path
35
+ */
36
+ loadManifest(manifestPath: string): TemplateManifest;
37
+ /**
38
+ * Load a template overlay from a directory
39
+ */
40
+ loadTemplate(templatePath: string): TemplateOverlay;
41
+ /**
42
+ * Load and register a template
43
+ */
44
+ loadAndRegister(templatePath: string): TemplateOverlay;
45
+ /**
46
+ * Register a template overlay
47
+ */
48
+ register(name: string, overlay: TemplateOverlay): void;
49
+ /**
50
+ * Get a loaded template
51
+ */
52
+ get(name: string): TemplateOverlay | undefined;
53
+ /**
54
+ * List all loaded templates
55
+ */
56
+ list(): TemplateOverlay[];
57
+ /**
58
+ * Get templates by category
59
+ */
60
+ getByCategory(category: 'base' | 'runtime' | 'feature' | 'testing'): TemplateOverlay[];
61
+ /**
62
+ * Load multiple templates for a project configuration
63
+ */
64
+ loadTemplatesForConfig(config: {
65
+ runtime: 'vite' | 'nextjs';
66
+ styling: {
67
+ solution: string;
68
+ };
69
+ stateManagement: string;
70
+ testing: {
71
+ enabled: boolean;
72
+ unit?: {
73
+ runner: string;
74
+ };
75
+ e2e?: {
76
+ enabled: boolean;
77
+ runner: string;
78
+ };
79
+ };
80
+ dataFetching: {
81
+ enabled: boolean;
82
+ };
83
+ }): TemplateOverlay[];
84
+ /**
85
+ * Get all dependencies from a set of templates
86
+ */
87
+ getDependencies(templateNames: string[]): {
88
+ dependencies: Record<string, string>;
89
+ devDependencies: Record<string, string>;
90
+ };
91
+ /**
92
+ * Get merged scripts from templates
93
+ */
94
+ getScripts(templateNames: string[]): Record<string, string>;
95
+ /**
96
+ * Get all files from loaded templates merged together
97
+ */
98
+ getMergedFiles(): Map<string, string>;
99
+ /**
100
+ * Get merged dependencies from all loaded templates
101
+ */
102
+ getMergedDependencies(): {
103
+ dependencies: Record<string, string>;
104
+ devDependencies: Record<string, string>;
105
+ scripts: Record<string, string>;
106
+ };
107
+ }
108
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
2
+ import { dirname, join, relative } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ /**
5
+ * Get the templates directory path
6
+ */
7
+ function getTemplatesDir() {
8
+ // Handle both ESM and compiled scenarios
9
+ const currentFile = fileURLToPath(import.meta.url);
10
+ const currentDir = dirname(currentFile);
11
+ // Check if we're in dist or src
12
+ if (currentDir.includes('/dist/')) {
13
+ // Running from compiled dist, templates are in src
14
+ return join(currentDir, '../../src/templates/overlays');
15
+ }
16
+ return join(currentDir, 'overlays');
17
+ }
18
+ /**
19
+ * Binary file extensions to skip
20
+ */
21
+ const BINARY_EXTENSIONS = new Set([
22
+ '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.svg',
23
+ '.woff', '.woff2', '.ttf', '.eot', '.otf',
24
+ '.mp3', '.mp4', '.wav', '.ogg', '.webm',
25
+ '.zip', '.tar', '.gz', '.rar',
26
+ '.pdf', '.doc', '.docx',
27
+ ]);
28
+ /**
29
+ * Check if a file is binary based on extension
30
+ */
31
+ function isBinaryFile(filePath) {
32
+ const ext = filePath.substring(filePath.lastIndexOf('.')).toLowerCase();
33
+ return BINARY_EXTENSIONS.has(ext);
34
+ }
35
+ /**
36
+ * Recursively read all files in a directory
37
+ */
38
+ function readDirectoryRecursively(dirPath, basePath = dirPath, exclude = ['manifest.json']) {
39
+ const files = new Map();
40
+ if (!existsSync(dirPath)) {
41
+ return files;
42
+ }
43
+ const entries = readdirSync(dirPath);
44
+ for (const entry of entries) {
45
+ const fullPath = join(dirPath, entry);
46
+ const relativePath = relative(basePath, fullPath);
47
+ // Skip excluded files
48
+ if (exclude.includes(entry) || exclude.includes(relativePath)) {
49
+ continue;
50
+ }
51
+ const stat = statSync(fullPath);
52
+ if (stat.isDirectory()) {
53
+ // Recursively read subdirectory
54
+ const subFiles = readDirectoryRecursively(fullPath, basePath, exclude);
55
+ subFiles.forEach((content, path) => files.set(path, content));
56
+ }
57
+ else if (stat.isFile()) {
58
+ // Read file content (skip binary files)
59
+ if (!isBinaryFile(fullPath)) {
60
+ try {
61
+ const content = readFileSync(fullPath, 'utf-8');
62
+ files.set(relativePath, content);
63
+ }
64
+ catch {
65
+ // Skip files that can't be read as text
66
+ }
67
+ }
68
+ else {
69
+ // For binary files, store a marker to copy them
70
+ files.set(relativePath, `__BINARY__:${fullPath}`);
71
+ }
72
+ }
73
+ }
74
+ return files;
75
+ }
76
+ /**
77
+ * Template registry - manages template discovery and loading
78
+ */
79
+ export class TemplateRegistry {
80
+ constructor(templatesDir) {
81
+ this.loadedTemplates = new Map();
82
+ this.templatesDir = templatesDir || getTemplatesDir();
83
+ }
84
+ /**
85
+ * Load a template manifest from path
86
+ */
87
+ loadManifest(manifestPath) {
88
+ try {
89
+ const content = readFileSync(manifestPath, 'utf-8');
90
+ return JSON.parse(content);
91
+ }
92
+ catch (error) {
93
+ throw new Error(`Failed to load manifest from '${manifestPath}': ${error}`);
94
+ }
95
+ }
96
+ /**
97
+ * Load a template overlay from a directory
98
+ */
99
+ loadTemplate(templatePath) {
100
+ const fullPath = join(this.templatesDir, templatePath);
101
+ const manifestPath = join(fullPath, 'manifest.json');
102
+ if (!existsSync(manifestPath)) {
103
+ throw new Error(`Template manifest not found: ${manifestPath}`);
104
+ }
105
+ const manifest = this.loadManifest(manifestPath);
106
+ const exclude = ['manifest.json', ...(manifest.filePatterns?.exclude || [])];
107
+ const files = readDirectoryRecursively(fullPath, fullPath, exclude);
108
+ const overlay = {
109
+ name: manifest.name,
110
+ path: templatePath,
111
+ manifest,
112
+ files,
113
+ };
114
+ return overlay;
115
+ }
116
+ /**
117
+ * Load and register a template
118
+ */
119
+ loadAndRegister(templatePath) {
120
+ const overlay = this.loadTemplate(templatePath);
121
+ this.loadedTemplates.set(templatePath, overlay);
122
+ return overlay;
123
+ }
124
+ /**
125
+ * Register a template overlay
126
+ */
127
+ register(name, overlay) {
128
+ this.loadedTemplates.set(name, overlay);
129
+ }
130
+ /**
131
+ * Get a loaded template
132
+ */
133
+ get(name) {
134
+ return this.loadedTemplates.get(name);
135
+ }
136
+ /**
137
+ * List all loaded templates
138
+ */
139
+ list() {
140
+ return Array.from(this.loadedTemplates.values());
141
+ }
142
+ /**
143
+ * Get templates by category
144
+ */
145
+ getByCategory(category) {
146
+ return Array.from(this.loadedTemplates.values()).filter((t) => t.path.includes(`/${category}/`) || t.path.startsWith(`${category}/`) || t.path === category);
147
+ }
148
+ /**
149
+ * Load multiple templates for a project configuration
150
+ */
151
+ loadTemplatesForConfig(config) {
152
+ const templates = [];
153
+ // Always load base template
154
+ templates.push(this.loadAndRegister('base'));
155
+ // Load runtime template
156
+ templates.push(this.loadAndRegister(`runtime/${config.runtime}`));
157
+ // Load styling template
158
+ if (config.styling.solution === 'tailwind') {
159
+ templates.push(this.loadAndRegister('styling/tailwind'));
160
+ }
161
+ else if (config.styling.solution === 'css-modules') {
162
+ templates.push(this.loadAndRegister('styling/css-modules'));
163
+ }
164
+ // Load state management template
165
+ if (config.stateManagement && config.stateManagement !== 'none') {
166
+ templates.push(this.loadAndRegister(`state/${config.stateManagement}`));
167
+ }
168
+ // Load testing templates
169
+ if (config.testing.enabled) {
170
+ if (config.testing.unit?.runner) {
171
+ templates.push(this.loadAndRegister(`testing/${config.testing.unit.runner}`));
172
+ }
173
+ if (config.testing.e2e?.enabled && config.testing.e2e.runner && config.testing.e2e.runner !== 'none') {
174
+ templates.push(this.loadAndRegister(`testing/${config.testing.e2e.runner}`));
175
+ }
176
+ }
177
+ // Load data fetching template
178
+ if (config.dataFetching.enabled) {
179
+ templates.push(this.loadAndRegister('features/tanstack-query'));
180
+ }
181
+ return templates;
182
+ }
183
+ /**
184
+ * Get all dependencies from a set of templates
185
+ */
186
+ getDependencies(templateNames) {
187
+ const deps = {};
188
+ const devDeps = {};
189
+ for (const name of templateNames) {
190
+ const template = this.get(name);
191
+ if (!template)
192
+ continue;
193
+ Object.assign(deps, template.manifest.dependencies || {});
194
+ Object.assign(devDeps, template.manifest.devDependencies || {});
195
+ }
196
+ return { dependencies: deps, devDependencies: devDeps };
197
+ }
198
+ /**
199
+ * Get merged scripts from templates
200
+ */
201
+ getScripts(templateNames) {
202
+ const scripts = {};
203
+ for (const name of templateNames) {
204
+ const template = this.get(name);
205
+ if (!template)
206
+ continue;
207
+ Object.assign(scripts, template.manifest.scripts || {});
208
+ }
209
+ return scripts;
210
+ }
211
+ /**
212
+ * Get all files from loaded templates merged together
213
+ */
214
+ getMergedFiles() {
215
+ const mergedFiles = new Map();
216
+ for (const template of this.loadedTemplates.values()) {
217
+ template.files.forEach((content, path) => {
218
+ mergedFiles.set(path, content);
219
+ });
220
+ }
221
+ return mergedFiles;
222
+ }
223
+ /**
224
+ * Get merged dependencies from all loaded templates
225
+ */
226
+ getMergedDependencies() {
227
+ const deps = {};
228
+ const devDeps = {};
229
+ const scripts = {};
230
+ for (const template of this.loadedTemplates.values()) {
231
+ Object.assign(deps, template.manifest.dependencies || {});
232
+ Object.assign(devDeps, template.manifest.devDependencies || {});
233
+ Object.assign(scripts, template.manifest.scripts || {});
234
+ }
235
+ return { dependencies: deps, devDependencies: devDeps, scripts };
236
+ }
237
+ }
238
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ProjectConfig } from '../config/schema.js';
2
+ /**
3
+ * Utility functions for template operations
4
+ */
5
+ /**
6
+ * Get template path for a configuration
7
+ */
8
+ export declare function getTemplatePathForRuntime(runtime: 'vite' | 'nextjs'): string;
9
+ /**
10
+ * Get template path for styling solution
11
+ */
12
+ export declare function getTemplatePathForStyling(styling: string): string;
13
+ /**
14
+ * Get template path for state management
15
+ */
16
+ export declare function getTemplatePathForState(state: string): string;
17
+ /**
18
+ * Get template path for testing setup
19
+ */
20
+ export declare function getTemplatePathForTesting(runner: string): string;
21
+ /**
22
+ * Get template path for data fetching
23
+ */
24
+ export declare function getTemplatePathForDataFetching(library: string): string;
25
+ /**
26
+ * Determine applicable template paths based on configuration
27
+ */
28
+ export declare function getApplicableTemplatePaths(config: ProjectConfig): string[];
29
+ /**
30
+ * Legacy function for backward compatibility
31
+ * @deprecated Use getApplicableTemplatePaths instead
32
+ */
33
+ export declare function getApplicableTemplates(config: {
34
+ runtime: string;
35
+ styling: string;
36
+ stateManagement: string;
37
+ testing: {
38
+ unit?: {
39
+ enabled?: boolean;
40
+ };
41
+ e2e?: {
42
+ enabled?: boolean;
43
+ };
44
+ };
45
+ dataFetching?: {
46
+ enabled?: boolean;
47
+ };
48
+ }): string[];
49
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/templates/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AAEH;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAuC1E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;IACvE,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACtC,GAAG,MAAM,EAAE,CAiBX"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Utility functions for template operations
3
+ */
4
+ /**
5
+ * Get template path for a configuration
6
+ */
7
+ export function getTemplatePathForRuntime(runtime) {
8
+ return `runtime/${runtime}`;
9
+ }
10
+ /**
11
+ * Get template path for styling solution
12
+ */
13
+ export function getTemplatePathForStyling(styling) {
14
+ if (styling === 'css')
15
+ return '';
16
+ if (styling === 'tailwind')
17
+ return 'styling/tailwind';
18
+ if (styling === 'css-modules')
19
+ return 'styling/css-modules';
20
+ return `styling/${styling}`;
21
+ }
22
+ /**
23
+ * Get template path for state management
24
+ */
25
+ export function getTemplatePathForState(state) {
26
+ if (state === 'none')
27
+ return '';
28
+ return `state/${state}`;
29
+ }
30
+ /**
31
+ * Get template path for testing setup
32
+ */
33
+ export function getTemplatePathForTesting(runner) {
34
+ if (runner === 'none')
35
+ return '';
36
+ return `testing/${runner}`;
37
+ }
38
+ /**
39
+ * Get template path for data fetching
40
+ */
41
+ export function getTemplatePathForDataFetching(library) {
42
+ if (library === 'none')
43
+ return '';
44
+ return 'features/tanstack-query';
45
+ }
46
+ /**
47
+ * Determine applicable template paths based on configuration
48
+ */
49
+ export function getApplicableTemplatePaths(config) {
50
+ const templates = [];
51
+ // Always include base template
52
+ templates.push('base');
53
+ // Runtime template
54
+ templates.push(getTemplatePathForRuntime(config.runtime));
55
+ // Styling template
56
+ const stylingPath = getTemplatePathForStyling(config.styling.solution);
57
+ if (stylingPath) {
58
+ templates.push(stylingPath);
59
+ }
60
+ // State management template
61
+ const statePath = getTemplatePathForState(config.stateManagement);
62
+ if (statePath) {
63
+ templates.push(statePath);
64
+ }
65
+ // Testing templates
66
+ if (config.testing.enabled) {
67
+ if (config.testing.unit?.enabled) {
68
+ const unitPath = getTemplatePathForTesting(config.testing.unit.runner);
69
+ if (unitPath)
70
+ templates.push(unitPath);
71
+ }
72
+ if (config.testing.e2e?.enabled && config.testing.e2e.runner !== 'none') {
73
+ const e2ePath = getTemplatePathForTesting(config.testing.e2e.runner);
74
+ if (e2ePath)
75
+ templates.push(e2ePath);
76
+ }
77
+ }
78
+ // Data fetching template
79
+ if (config.dataFetching.enabled) {
80
+ templates.push(getTemplatePathForDataFetching('tanstack-query'));
81
+ }
82
+ return templates;
83
+ }
84
+ /**
85
+ * Legacy function for backward compatibility
86
+ * @deprecated Use getApplicableTemplatePaths instead
87
+ */
88
+ export function getApplicableTemplates(config) {
89
+ const templates = ['base', getTemplatePathForRuntime(config.runtime)];
90
+ if (config.styling && config.styling !== 'css') {
91
+ const stylingPath = getTemplatePathForStyling(config.styling);
92
+ if (stylingPath)
93
+ templates.push(stylingPath);
94
+ }
95
+ if (config.stateManagement && config.stateManagement !== 'none') {
96
+ templates.push(getTemplatePathForState(config.stateManagement));
97
+ }
98
+ if (config.dataFetching?.enabled) {
99
+ templates.push(getTemplatePathForDataFetching('tanstack-query'));
100
+ }
101
+ return templates;
102
+ }
103
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/templates/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ProjectConfig } from '../config/schema.js';
2
+ /**
3
+ * Testing configuration orchestration
4
+ */
5
+ export declare class TestingConfigurer {
6
+ private config;
7
+ constructor(config: ProjectConfig);
8
+ /**
9
+ * Get unit test runner based on config and runtime
10
+ */
11
+ getUnitTestRunner(): 'vitest' | 'jest';
12
+ /**
13
+ * Get E2E test runner
14
+ */
15
+ getE2ETestRunner(): 'playwright' | 'cypress' | 'none';
16
+ /**
17
+ * Generate test scripts for package.json
18
+ */
19
+ generateScripts(): Record<string, string>;
20
+ /**
21
+ * Get test configuration files needed
22
+ */
23
+ getConfigFiles(): Record<string, string>;
24
+ private generateVitestConfig;
25
+ private generateJestConfig;
26
+ private generatePlaywrightConfig;
27
+ private generateCypressConfig;
28
+ }
29
+ //# sourceMappingURL=configurer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configurer.d.ts","sourceRoot":"","sources":["../../src/testing/configurer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACH,iBAAiB,IAAI,QAAQ,GAAG,MAAM;IActC;;OAEG;IACH,gBAAgB,IAAI,YAAY,GAAG,SAAS,GAAG,MAAM;IAOrD;;OAEG;IACH,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAqCzC;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAyBxC,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,qBAAqB;CAa9B"}