@react-spa-scaffold/mcp 1.1.1 → 1.1.3

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 (71) hide show
  1. package/README.md +2 -1
  2. package/dist/features/index.d.ts +0 -1
  3. package/dist/features/index.d.ts.map +1 -1
  4. package/dist/features/index.js +0 -1
  5. package/dist/features/index.js.map +1 -1
  6. package/dist/features/registry.d.ts +4 -0
  7. package/dist/features/registry.d.ts.map +1 -1
  8. package/dist/features/registry.js +144 -113
  9. package/dist/features/registry.js.map +1 -1
  10. package/dist/features/types.d.ts +12 -2
  11. package/dist/features/types.d.ts.map +1 -1
  12. package/dist/tools/get-example.d.ts.map +1 -1
  13. package/dist/tools/get-example.js +3 -2
  14. package/dist/tools/get-example.js.map +1 -1
  15. package/dist/tools/get-features.d.ts.map +1 -1
  16. package/dist/tools/get-features.js +2 -1
  17. package/dist/tools/get-features.js.map +1 -1
  18. package/dist/tools/get-scaffold.d.ts.map +1 -1
  19. package/dist/tools/get-scaffold.js +12 -64
  20. package/dist/tools/get-scaffold.js.map +1 -1
  21. package/dist/utils/examples.d.ts.map +1 -1
  22. package/dist/utils/examples.js +40 -4
  23. package/dist/utils/examples.js.map +1 -1
  24. package/dist/utils/scaffold.d.ts +9 -5
  25. package/dist/utils/scaffold.d.ts.map +1 -1
  26. package/dist/utils/scaffold.js +81 -17
  27. package/dist/utils/scaffold.js.map +1 -1
  28. package/package.json +1 -1
  29. package/templates/.github/actions/setup-node-deps/action.yml +1 -0
  30. package/templates/.github/workflows/ci.yml +35 -63
  31. package/templates/.github/workflows/release.yml +37 -0
  32. package/templates/CLAUDE.md +5 -3
  33. package/templates/docs/ARCHITECTURE.md +0 -1
  34. package/templates/docs/COMPONENT_GUIDELINES.md +1 -1
  35. package/templates/docs/E2E_TESTING.md +22 -7
  36. package/templates/docs/TESTING.md +2 -14
  37. package/templates/docs/WORKFLOW.md +5 -5
  38. package/templates/e2e/performance/home.spec.ts +94 -0
  39. package/templates/e2e/performance/setup.ts +9 -0
  40. package/templates/e2e/tests/home.spec.ts +2 -2
  41. package/templates/gitignore +1 -1
  42. package/templates/package.json +18 -7
  43. package/templates/playwright.config.ts +15 -3
  44. package/templates/src/contexts/performanceContext.test.tsx +51 -0
  45. package/templates/src/contexts/performanceContext.tsx +64 -0
  46. package/templates/src/main.tsx +5 -2
  47. package/templates/src/pages/Home.tsx +38 -33
  48. package/templates/src/test/providers.tsx +5 -1
  49. package/templates/vitest.config.ts +1 -1
  50. package/templates/lighthouse-budget.json +0 -17
  51. package/templates/lighthouserc.json +0 -23
  52. /package/templates/{tests/unit/components → src/components/layout}/Header.test.tsx +0 -0
  53. /package/templates/{tests/unit/components → src/components/shared/ErrorBoundary}/ErrorBoundary.test.tsx +0 -0
  54. /package/templates/{tests/unit/components → src/components/shared/LanguageSwitcher}/LanguageSwitcher.test.tsx +0 -0
  55. /package/templates/{tests/unit/components → src/components/shared/RegisterForm}/RegisterForm.test.tsx +0 -0
  56. /package/templates/{tests/unit/components → src/components/shared/SEO}/SEO.test.tsx +0 -0
  57. /package/templates/{tests/unit/components → src/components/shared/ThemeToggle}/ThemeToggle.test.tsx +0 -0
  58. /package/templates/{tests/unit/components/Loading.test.tsx → src/components/ui/loading.test.tsx} +0 -0
  59. /package/templates/{tests/unit → src}/contexts/mobileContext.test.tsx +0 -0
  60. /package/templates/{tests/unit → src}/hooks/useExampleQuery.test.tsx +0 -0
  61. /package/templates/{tests/unit → src}/hooks/useLanguage.test.tsx +0 -0
  62. /package/templates/{tests/unit → src}/hooks/useMediaQuery.test.ts +0 -0
  63. /package/templates/{tests/unit → src}/hooks/useRegisterForm.test.tsx +0 -0
  64. /package/templates/{tests/unit → src}/hooks/useThemeEffect.test.ts +0 -0
  65. /package/templates/{tests/unit → src}/i18n/detectLanguage.test.ts +0 -0
  66. /package/templates/{tests/unit → src}/i18n/loadCatalog.test.ts +0 -0
  67. /package/templates/{tests/unit → src}/lib/api.test.ts +0 -0
  68. /package/templates/{tests/unit → src}/lib/storage.test.ts +0 -0
  69. /package/templates/{tests/unit → src}/lib/utils.test.ts +0 -0
  70. /package/templates/{tests/unit → src}/lib/validations.test.ts +0 -0
  71. /package/templates/{tests/unit → src}/stores/preferencesStore.test.ts +0 -0
package/README.md CHANGED
@@ -117,8 +117,9 @@ Or point directly to the built file:
117
117
  | `api` | TanStack Query + API client | Optional |
118
118
  | `i18n` | LinguiJS internationalization | Optional |
119
119
  | `testing` | Vitest + Playwright + MSW | Optional |
120
+ | `performance` | React Profiler + Lighthouse + Web Vitals | Optional |
120
121
  | `devtools` | ESLint + Prettier + Husky | Optional |
121
- | `ci` | GitHub Actions + Lighthouse | Optional |
122
+ | `ci` | GitHub Actions + Dependabot | Optional |
122
123
  | `observability` | Sentry error tracking | Optional |
123
124
 
124
125
  ## Tools
@@ -1,5 +1,4 @@
1
1
  export { FEATURES, FEATURE_IDS } from './registry.js';
2
2
  export type { FeatureId } from './registry.js';
3
- export { CONFIG_VERSIONS } from './versions.js';
4
3
  export type { Feature, FeatureRegistry, FeatureOption, ScaffoldOptions, ScaffoldResult } from './types.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export { FEATURES, FEATURE_IDS } from './registry.js';
2
- export { CONFIG_VERSIONS } from './versions.js';
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -1,5 +1,9 @@
1
1
  /**
2
2
  * Feature Registry - Defines all available features for react-spa-scaffold scaffolding
3
+ *
4
+ * Dependencies are specified as names only. Versions are resolved from the
5
+ * webapp-base package.json at runtime to ensure scaffolded projects always
6
+ * get up-to-date dependency versions.
3
7
  */
4
8
  import type { FeatureRegistry } from './types.js';
5
9
  export declare const FEATURES: FeatureRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/features/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,YAAY,CAAC;AAsiB3D,eAAO,MAAM,QAAQ,EAAE,eActB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,WAAW,EAA4B,CAAC,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC;AAE9E,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/features/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,YAAY,CAAC;AAkkB3D,eAAO,MAAM,QAAQ,EAAE,eAetB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,WAAW,EAA4B,CAAC,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC;AAE9E,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  /**
2
2
  * Feature Registry - Defines all available features for react-spa-scaffold scaffolding
3
+ *
4
+ * Dependencies are specified as names only. Versions are resolved from the
5
+ * webapp-base package.json at runtime to ensure scaffolded projects always
6
+ * get up-to-date dependency versions.
3
7
  */
4
- import { CONFIG_VERSIONS } from './versions.js';
5
8
  // ═══════════════════════════════════════════════════════════════════════════
6
9
  // CORE FEATURE (Always included)
7
10
  // ═══════════════════════════════════════════════════════════════════════════
@@ -21,25 +24,18 @@ const core = {
21
24
  'Type definitions',
22
25
  'ErrorBoundary component with reset functionality',
23
26
  ],
24
- dependencies: {
25
- '@fontsource-variable/inter': '^5.2.5',
26
- clsx: '^2.1.1',
27
- react: '^19.1.0',
28
- 'react-dom': '^19.1.0',
29
- 'tailwind-merge': '^3.3.0',
30
- zod: '^3.25.64',
31
- },
32
- devDependencies: {
33
- '@tailwindcss/vite': '^4.1.17',
34
- '@types/node': '^22.15.0',
35
- '@types/react': '^19.1.8',
36
- '@types/react-dom': '^19.1.6',
37
- '@vitejs/plugin-react': '^5.1.2',
38
- '@react-spa-scaffold/tsconfig': CONFIG_VERSIONS['@react-spa-scaffold/tsconfig'],
39
- tailwindcss: '^4.1.17',
40
- typescript: '~5.9.0',
41
- vite: '^7.0.0',
42
- },
27
+ dependencyNames: ['@fontsource-variable/inter', 'clsx', 'react', 'react-dom', 'tailwind-merge', 'zod'],
28
+ devDependencyNames: [
29
+ '@tailwindcss/vite',
30
+ '@types/node',
31
+ '@types/react',
32
+ '@types/react-dom',
33
+ '@vitejs/plugin-react',
34
+ '@react-spa-scaffold/tsconfig',
35
+ 'tailwindcss',
36
+ 'typescript',
37
+ 'vite',
38
+ ],
43
39
  files: [
44
40
  'src/main.tsx',
45
41
  'src/App.tsx',
@@ -65,6 +61,12 @@ const core = {
65
61
  '.gitignore',
66
62
  'public/favicon.svg',
67
63
  ],
64
+ testFiles: [
65
+ 'src/lib/utils.test.ts',
66
+ 'src/components/shared/SEO/SEO.test.tsx',
67
+ 'src/components/shared/ErrorBoundary/ErrorBoundary.test.tsx',
68
+ 'e2e/tests/home.spec.ts',
69
+ ],
68
70
  patterns: ['component-shared', 'hook-effect', 'error-boundary', 'seo-component'],
69
71
  scripts: {
70
72
  dev: 'vite',
@@ -97,9 +99,9 @@ const mobile = {
97
99
  'requestAnimationFrame-debounced resize handling',
98
100
  'SSR-safe viewport detection with fallbacks',
99
101
  ],
100
- dependencies: {},
101
- devDependencies: {},
102
+ // No additional dependencies - pure React implementation
102
103
  files: ['src/contexts/mobileContext.tsx', 'src/hooks/useMediaQuery.ts', 'src/hooks/useTouchSizes.ts'],
104
+ testFiles: ['src/contexts/mobileContext.test.tsx', 'src/hooks/useMediaQuery.test.ts'],
103
105
  patterns: ['mobile-context', 'use-media-query', 'use-touch-sizes'],
104
106
  scripts: {},
105
107
  };
@@ -118,10 +120,7 @@ const routing = {
118
120
  'App.tsx with Suspense fallback',
119
121
  'PageLoading component for transitions',
120
122
  ],
121
- dependencies: {
122
- 'react-router': '^7.11.0',
123
- },
124
- devDependencies: {},
123
+ dependencyNames: ['react-router'],
125
124
  files: [
126
125
  // routes.ts is generated dynamically (see routesTs in scaffold output)
127
126
  'src/pages/Home.tsx',
@@ -130,6 +129,7 @@ const routing = {
130
129
  'src/components/ui/loading.tsx',
131
130
  'src/components/ui/visually-hidden.tsx',
132
131
  ],
132
+ testFiles: ['e2e/tests/navigation.spec.ts'],
133
133
  patterns: ['lazy-page', 'route-constants', 'page-component'],
134
134
  scripts: {},
135
135
  };
@@ -153,17 +153,15 @@ const ui = {
153
153
  'VisuallyHidden and SkipLink (accessibility)',
154
154
  'components.json for shadcn CLI',
155
155
  ],
156
- dependencies: {
157
- '@radix-ui/react-slot': '^1.2.3',
158
- 'class-variance-authority': '^0.7.1',
159
- 'lucide-react': '^0.562.0',
160
- 'radix-ui': '^1.4.3',
161
- sonner: '^2.0.7',
162
- 'tw-animate-css': '^1.2.9',
163
- },
164
- devDependencies: {
165
- shadcn: '^3.6.2',
166
- },
156
+ dependencyNames: [
157
+ '@radix-ui/react-slot',
158
+ 'class-variance-authority',
159
+ 'lucide-react',
160
+ 'radix-ui',
161
+ 'sonner',
162
+ 'tw-animate-css',
163
+ ],
164
+ devDependencyNames: ['shadcn'],
167
165
  files: [
168
166
  'src/components/ui/button.tsx',
169
167
  'src/components/ui/dropdown-menu.tsx',
@@ -176,6 +174,7 @@ const ui = {
176
174
  'src/components/layout/index.ts',
177
175
  'components.json',
178
176
  ],
177
+ testFiles: ['src/components/ui/loading.test.tsx', 'src/components/layout/Header.test.tsx'],
179
178
  patterns: ['component-ui', 'button-variants', 'forward-ref-component'],
180
179
  scripts: {},
181
180
  configFiles: ['components.json'],
@@ -195,12 +194,11 @@ const forms = {
195
194
  'useRegisterForm custom hook pattern',
196
195
  'Zod schema with refine() for cross-field validation',
197
196
  ],
198
- dependencies: {
199
- '@hookform/resolvers': '^5.0.1',
200
- 'react-hook-form': '^7.58.0',
197
+ dependencyNames: [
198
+ '@hookform/resolvers',
199
+ 'react-hook-form',
201
200
  // zod already in core
202
- },
203
- devDependencies: {},
201
+ ],
204
202
  files: [
205
203
  'src/lib/validations.ts',
206
204
  'src/hooks/useRegisterForm.ts',
@@ -211,6 +209,11 @@ const forms = {
211
209
  'src/components/shared/RegisterForm/RegisterForm.tsx',
212
210
  'src/components/shared/RegisterForm/index.ts',
213
211
  ],
212
+ testFiles: [
213
+ 'src/lib/validations.test.ts',
214
+ 'src/hooks/useRegisterForm.test.tsx',
215
+ 'src/components/shared/RegisterForm/RegisterForm.test.tsx',
216
+ ],
214
217
  patterns: ['zod-schema', 'hook-form', 'form-error-component', 'register-form'],
215
218
  scripts: {},
216
219
  };
@@ -231,10 +234,7 @@ const state = {
231
234
  'Example preferences store (theme)',
232
235
  'Type-safe store selectors',
233
236
  ],
234
- dependencies: {
235
- zustand: '^5.0.9',
236
- },
237
- devDependencies: {},
237
+ dependencyNames: ['zustand'],
238
238
  files: [
239
239
  'src/stores/preferencesStore.ts',
240
240
  'src/stores/index.ts',
@@ -242,6 +242,7 @@ const state = {
242
242
  'src/lib/storageKeys.ts',
243
243
  'src/types/preferences.ts',
244
244
  ],
245
+ testFiles: ['src/lib/storage.test.ts', 'src/stores/preferencesStore.test.ts'],
245
246
  patterns: ['zustand-store', 'store-persistence', 'multi-tab-sync', 'storage-utility'],
246
247
  scripts: {},
247
248
  };
@@ -261,11 +262,9 @@ const api = {
261
262
  'Example useExampleQuery hook',
262
263
  'API types (Todo, PaginatedResponse, etc.)',
263
264
  ],
264
- dependencies: {
265
- '@tanstack/react-query': '^5.81.5',
266
- },
267
- devDependencies: {},
265
+ dependencyNames: ['@tanstack/react-query'],
268
266
  files: ['src/lib/api.ts', 'src/contexts/queryContext.tsx', 'src/hooks/useExampleQuery.ts', 'src/types/api.ts'],
267
+ testFiles: ['src/lib/api.test.ts', 'src/hooks/useExampleQuery.test.tsx'],
269
268
  patterns: ['query-provider', 'use-query-hook', 'api-client'],
270
269
  scripts: {},
271
270
  };
@@ -288,17 +287,14 @@ const i18n = {
288
287
  'Vite plugin for compilation',
289
288
  'useLanguage hook',
290
289
  ],
291
- dependencies: {
292
- '@lingui/core': '^5.7.0',
293
- '@lingui/react': '^5.7.0',
294
- },
295
- devDependencies: {
296
- '@lingui/babel-plugin-lingui-macro': '^5.7.0',
297
- '@lingui/cli': '^5.7.0',
298
- '@lingui/vite-plugin': '^5.7.0',
299
- 'babel-plugin-macros': '^3.1.0',
300
- 'eslint-plugin-lingui': '^0.11.0',
301
- },
290
+ dependencyNames: ['@lingui/core', '@lingui/react'],
291
+ devDependencyNames: [
292
+ '@lingui/babel-plugin-lingui-macro',
293
+ '@lingui/cli',
294
+ '@lingui/vite-plugin',
295
+ 'babel-plugin-macros',
296
+ 'eslint-plugin-lingui',
297
+ ],
302
298
  files: [
303
299
  'src/i18n/config.ts',
304
300
  'src/i18n/detectLanguage.ts',
@@ -312,7 +308,14 @@ const i18n = {
312
308
  'src/components/shared/LanguageSwitcher/index.ts',
313
309
  'lingui.config.js',
314
310
  ],
315
- patterns: ['trans-component', 't-function', 'language-switcher', 'use-language-hook'],
311
+ testFiles: [
312
+ 'src/i18n/detectLanguage.test.ts',
313
+ 'src/i18n/loadCatalog.test.ts',
314
+ 'src/hooks/useLanguage.test.tsx',
315
+ 'src/components/shared/LanguageSwitcher/LanguageSwitcher.test.tsx',
316
+ 'e2e/tests/language.spec.ts',
317
+ ],
318
+ patterns: ['i18n-index', 'trans-component', 't-function', 'language-switcher', 'use-language-hook'],
316
319
  scripts: {
317
320
  'i18n:extract': 'lingui extract',
318
321
  },
@@ -337,17 +340,16 @@ const testing = {
337
340
  'MSW handlers for API endpoints',
338
341
  'Test fixtures for mock data',
339
342
  ],
340
- dependencies: {},
341
- devDependencies: {
342
- '@playwright/test': '^1.52.0',
343
- '@testing-library/jest-dom': '^6.6.3',
344
- '@testing-library/react': '^16.3.0',
345
- '@testing-library/user-event': '^14.6.1',
346
- '@vitest/coverage-v8': '^4.0.16',
347
- jsdom: '^27.3.0',
348
- msw: '^2.12.4',
349
- vitest: '^4.0.16',
350
- },
343
+ devDependencyNames: [
344
+ '@playwright/test',
345
+ '@testing-library/jest-dom',
346
+ '@testing-library/react',
347
+ '@testing-library/user-event',
348
+ '@vitest/coverage-v8',
349
+ 'jsdom',
350
+ 'msw',
351
+ 'vitest',
352
+ ],
351
353
  files: [
352
354
  'src/test-setup.ts',
353
355
  'src/test/mocks.ts',
@@ -359,22 +361,54 @@ const testing = {
359
361
  'src/mocks/fixtures/index.ts',
360
362
  'src/mocks/node.ts',
361
363
  'src/mocks/index.ts',
362
- 'tests/unit/',
364
+ 'e2e/fixtures/',
363
365
  'e2e/tests/',
364
366
  'vitest.config.ts',
365
367
  'playwright.config.ts',
368
+ 'docs/TESTING.md',
369
+ 'docs/E2E_TESTING.md',
366
370
  ],
367
371
  patterns: ['test-component', 'test-hook', 'test-store', 'test-utility', 'msw-handler', 'test-fixture'],
368
372
  scripts: {
369
373
  test: 'vitest run',
370
374
  'test:watch': 'vitest',
371
375
  'test:coverage': 'vitest run --coverage',
372
- e2e: 'playwright test',
373
- 'e2e:ui': 'playwright test --ui',
376
+ e2e: 'playwright test --project=functional',
377
+ 'e2e:ui': 'playwright test --project=functional --ui',
374
378
  },
375
379
  configFiles: ['vitest.config.ts', 'playwright.config.ts', 'src/test-setup.ts'],
376
380
  };
377
381
  // ═══════════════════════════════════════════════════════════════════════════
382
+ // PERFORMANCE TESTING FEATURE
383
+ // ═══════════════════════════════════════════════════════════════════════════
384
+ const performance = {
385
+ name: 'Performance Testing',
386
+ description: 'React Profiler + Lighthouse + Web Vitals via react-performance-tracking',
387
+ required: false,
388
+ includes: [
389
+ 'react-performance-tracking for unified performance testing',
390
+ 'React Profiler metrics (render duration, re-renders)',
391
+ 'Lighthouse audits (performance, accessibility, best practices)',
392
+ 'Core Web Vitals (LCP, INP, CLS)',
393
+ 'FPS monitoring (Chromium only)',
394
+ 'PerformanceProviderWrapper with lazy loading (zero prod overhead)',
395
+ 'Safe usePerformance hook (never throws)',
396
+ 'Separate Playwright project for performance tests',
397
+ 'CI-optimized Chrome flags (--no-sandbox)',
398
+ ],
399
+ dependencyNames: ['react-performance-tracking'],
400
+ devDependencyNames: ['chrome-launcher', 'lighthouse'],
401
+ files: ['src/contexts/performanceContext.tsx', 'e2e/performance/setup.ts'],
402
+ testFiles: ['e2e/performance/home.spec.ts', 'src/contexts/performanceContext.test.tsx'],
403
+ patterns: ['performance-context', 'performance-e2e', 'profiler-wrapper'],
404
+ scripts: {
405
+ 'e2e:perf': 'PERF_TEST=true playwright test --project=performance',
406
+ 'e2e:perf:ui': 'PERF_TEST=true playwright test --project=performance --ui',
407
+ 'e2e:all': 'PERF_TEST=true playwright test',
408
+ },
409
+ configFiles: [],
410
+ };
411
+ // ═══════════════════════════════════════════════════════════════════════════
378
412
  // DEVELOPER TOOLING FEATURE
379
413
  // ═══════════════════════════════════════════════════════════════════════════
380
414
  const devtools = {
@@ -394,24 +428,23 @@ const devtools = {
394
428
  'Pre-commit hook: typecheck + lint-staged',
395
429
  'Commit-msg hook: commitlint',
396
430
  ],
397
- dependencies: {},
398
- devDependencies: {
399
- '@commitlint/config-conventional': '^20.2.0',
400
- '@eslint/js': '^9.28.0',
401
- '@react-spa-scaffold/eslint-config': CONFIG_VERSIONS['@react-spa-scaffold/eslint-config'],
402
- '@react-spa-scaffold/prettier-config': CONFIG_VERSIONS['@react-spa-scaffold/prettier-config'],
403
- commitlint: '^20.2.0',
404
- eslint: '^9.28.0',
405
- 'eslint-config-prettier': '^10.1.0',
406
- 'eslint-plugin-lingui': '^0.11.0',
407
- 'eslint-plugin-react-hooks': '^5.2.0',
408
- 'eslint-plugin-react-refresh': '^0.4.20',
409
- husky: '^9.1.7',
410
- 'lint-staged': '^16.1.0',
411
- prettier: '^3.5.3',
412
- 'prettier-plugin-tailwindcss': '^0.7.2',
413
- 'typescript-eslint': '^8.33.0',
414
- },
431
+ devDependencyNames: [
432
+ '@commitlint/config-conventional',
433
+ '@eslint/js',
434
+ '@react-spa-scaffold/eslint-config',
435
+ '@react-spa-scaffold/prettier-config',
436
+ 'commitlint',
437
+ 'eslint',
438
+ 'eslint-config-prettier',
439
+ 'eslint-plugin-lingui',
440
+ 'eslint-plugin-react-hooks',
441
+ 'eslint-plugin-react-refresh',
442
+ 'husky',
443
+ 'lint-staged',
444
+ 'prettier',
445
+ 'prettier-plugin-tailwindcss',
446
+ 'typescript-eslint',
447
+ ],
415
448
  files: [
416
449
  'eslint.config.js',
417
450
  'prettier.config.js',
@@ -435,31 +468,28 @@ const devtools = {
435
468
  // ═══════════════════════════════════════════════════════════════════════════
436
469
  const ci = {
437
470
  name: 'CI/CD',
438
- description: 'GitHub Actions + Lighthouse + Dependabot',
471
+ description: 'GitHub Actions + Performance Testing + Dependabot',
439
472
  required: false,
440
473
  includes: [
441
474
  'GitHub Actions CI workflow',
442
- 'Parallel jobs: lint, typecheck, security audit, build, unit tests, e2e tests',
443
- 'Lighthouse CI with performance budgets',
475
+ 'Parallel jobs: lint, typecheck, security audit, build, unit tests, e2e tests, performance tests',
476
+ 'Performance testing with react-performance-tracking (React Profiler, Lighthouse, Web Vitals)',
444
477
  'Dependabot with grouped updates by category',
445
478
  'PR template',
446
- 'Artifact uploads (dist, coverage, lighthouse reports)',
479
+ 'Artifact uploads (dist, coverage, performance reports)',
447
480
  'Dependency caching for faster builds',
448
481
  'Custom setup-node-deps action',
449
482
  ],
450
- dependencies: {},
451
- devDependencies: {},
483
+ // No additional dependencies - CI configuration only
452
484
  files: [
453
485
  '.github/workflows/ci.yml',
454
486
  '.github/actions/setup-node-deps/action.yml',
455
487
  '.github/dependabot.yml',
456
488
  '.github/PULL_REQUEST_TEMPLATE.md',
457
- 'lighthouserc.json',
458
- 'lighthouse-budget.json',
459
489
  ],
460
490
  patterns: [],
461
491
  scripts: {},
462
- configFiles: ['lighthouserc.json', 'lighthouse-budget.json'],
492
+ configFiles: [],
463
493
  };
464
494
  // ═══════════════════════════════════════════════════════════════════════════
465
495
  // OBSERVABILITY FEATURE
@@ -478,14 +508,10 @@ const observability = {
478
508
  'VITE_SENTRY_ENABLED flag for opt-out',
479
509
  'SENTRY_CONFIG in lib/config.ts',
480
510
  ],
481
- dependencies: {
482
- '@sentry/react': '^10.32.1',
483
- },
484
- devDependencies: {
485
- '@sentry/vite-plugin': '^4.6.1',
486
- },
487
- files: [],
488
- patterns: ['sentry-init', 'error-tracking'],
511
+ dependencyNames: ['@sentry/react'],
512
+ devDependencyNames: ['@sentry/vite-plugin'],
513
+ files: ['src/lib/config.ts'],
514
+ patterns: ['main-entry', 'lib-config'],
489
515
  scripts: {},
490
516
  options: {
491
517
  enabled: {
@@ -509,13 +535,17 @@ const theming = {
509
535
  'Zustand persistence via preferencesStore',
510
536
  'Multi-tab sync via storage events',
511
537
  ],
512
- dependencies: {},
513
- devDependencies: {},
538
+ // No additional dependencies - uses state feature's Zustand
514
539
  files: [
515
540
  'src/hooks/useThemeEffect.ts',
516
541
  'src/components/shared/ThemeToggle/ThemeToggle.tsx',
517
542
  'src/components/shared/ThemeToggle/index.ts',
518
543
  ],
544
+ testFiles: [
545
+ 'src/hooks/useThemeEffect.test.ts',
546
+ 'src/components/shared/ThemeToggle/ThemeToggle.test.tsx',
547
+ 'e2e/tests/theme.spec.ts',
548
+ ],
519
549
  patterns: ['theme-toggle', 'hook-effect'],
520
550
  scripts: {},
521
551
  };
@@ -532,6 +562,7 @@ export const FEATURES = {
532
562
  api,
533
563
  i18n,
534
564
  testing,
565
+ performance,
535
566
  devtools,
536
567
  ci,
537
568
  observability,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/features/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/features/registry.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,19 @@ export interface Feature {
10
10
  description: string;
11
11
  required: boolean;
12
12
  includes: string[];
13
- dependencies?: Record<string, string>;
14
- devDependencies?: Record<string, string>;
13
+ /**
14
+ * Dependency package names - versions resolved from webapp-base package.json at runtime.
15
+ * This ensures scaffolded projects always get up-to-date dependency versions.
16
+ */
17
+ dependencyNames?: string[];
18
+ devDependencyNames?: string[];
15
19
  files: string[];
20
+ /**
21
+ * Test files associated with this feature.
22
+ * Only included in scaffold when the 'testing' feature is also selected.
23
+ * This keeps feature source files separate from test infrastructure concerns.
24
+ */
25
+ testFiles?: string[];
16
26
  patterns: string[];
17
27
  options?: Record<string, FeatureOption>;
18
28
  scripts?: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/features/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/features/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-example.d.ts","sourceRoot":"","sources":["../../src/tools/get-example.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;;;;;;;;GAoBtD;AAuBD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;CAoCpC,CAAC"}
1
+ {"version":3,"file":"get-example.d.ts","sourceRoot":"","sources":["../../src/tools/get-example.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;;;;;;;;GAoBtD;AAwBD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;CAoCpC,CAAC"}
@@ -43,8 +43,9 @@ function generateUsageHint(pattern) {
43
43
  'zustand-store': 'Place in src/stores/ with xxxStore.ts naming',
44
44
  'page-component': 'Place in src/pages/ with XxxPage named export',
45
45
  'context-provider': 'Place in src/contexts/ - export both Provider and hook',
46
- 'test-component': 'Place in tests/unit/components/ mirroring src structure',
47
- 'test-hook': 'Place in tests/unit/hooks/',
46
+ 'test-component': 'Co-locate with component: ComponentName.test.tsx next to ComponentName.tsx',
47
+ 'test-hook': 'Co-locate with hook: useXxx.test.ts next to useXxx.ts',
48
+ 'test-store': 'Co-locate with store: xxxStore.test.ts next to xxxStore.ts',
48
49
  'msw-handler': 'Place in src/mocks/handlers/',
49
50
  'zod-schema': 'Add to src/lib/validations.ts',
50
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"get-example.js","sourceRoot":"","sources":["../../src/tools/get-example.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,kBAAkB,GAAG,oBAAoB,EAA2B,CAAC;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAClC,KAAK,EAAE,+BAA+B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KACtE,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,uCAAuC,OAAO,EAAE;YACvD,IAAI,EAAE,gEAAgE;SACvE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,sDAAsD;QACtE,kBAAkB,EAAE,oEAAoE;QACxF,kBAAkB,EAAE,iCAAiC;QACrD,YAAY,EAAE,2CAA2C;QACzD,YAAY,EAAE,mDAAmD;QACjE,WAAW,EAAE,0DAA0D;QACvE,aAAa,EAAE,uCAAuC;QACtD,eAAe,EAAE,8CAA8C;QAC/D,gBAAgB,EAAE,+CAA+C;QACjE,kBAAkB,EAAE,wDAAwD;QAC5E,gBAAgB,EAAE,yDAAyD;QAC3E,WAAW,EAAE,4BAA4B;QACzC,aAAa,EAAE,8BAA8B;QAC7C,YAAY,EAAE,+BAA+B;KAC9C,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,2CAA2C,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;sCAsBuB;IACpC,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,iCAAiC;gBAC9C,IAAI,EAAE,kBAAkB;aACzB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC"}
1
+ {"version":3,"file":"get-example.js","sourceRoot":"","sources":["../../src/tools/get-example.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,kBAAkB,GAAG,oBAAoB,EAA2B,CAAC;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAClC,KAAK,EAAE,+BAA+B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KACtE,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,uCAAuC,OAAO,EAAE;YACvD,IAAI,EAAE,gEAAgE;SACvE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,sDAAsD;QACtE,kBAAkB,EAAE,oEAAoE;QACxF,kBAAkB,EAAE,iCAAiC;QACrD,YAAY,EAAE,2CAA2C;QACzD,YAAY,EAAE,mDAAmD;QACjE,WAAW,EAAE,0DAA0D;QACvE,aAAa,EAAE,uCAAuC;QACtD,eAAe,EAAE,8CAA8C;QAC/D,gBAAgB,EAAE,+CAA+C;QACjE,kBAAkB,EAAE,wDAAwD;QAC5E,gBAAgB,EAAE,4EAA4E;QAC9F,WAAW,EAAE,uDAAuD;QACpE,YAAY,EAAE,4DAA4D;QAC1E,aAAa,EAAE,8BAA8B;QAC7C,YAAY,EAAE,+BAA+B;KAC9C,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,2CAA2C,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;sCAsBuB;IACpC,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,iCAAiC;gBAC9C,IAAI,EAAE,kBAAkB;aACzB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-features.d.ts","sourceRoot":"","sources":["../../src/tools/get-features.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAa9C;AAED,eAAO,MAAM,yBAAyB;;;;;;kBAoBlB,MAAM,EAAE;;CAE3B,CAAC"}
1
+ {"version":3,"file":"get-features.d.ts","sourceRoot":"","sources":["../../src/tools/get-features.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAa9C;AAED,eAAO,MAAM,yBAAyB;;;;;;kBAqBlB,MAAM,EAAE;;CAE3B,CAAC"}
@@ -33,8 +33,9 @@ Returns a list of features that can be selected when creating a new project:
33
33
  - api: TanStack Query + API client
34
34
  - i18n: LinguiJS internationalization
35
35
  - testing: Vitest + Playwright + MSW
36
+ - performance: React Profiler + Lighthouse + Web Vitals
36
37
  - devtools: ESLint + Prettier + Husky
37
- - ci: GitHub Actions + Lighthouse
38
+ - ci: GitHub Actions + Dependabot
38
39
 
39
40
  Use this to understand available options before scaffolding a project.`,
40
41
  inputSchema: {