@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.
- package/README.md +19 -15
- package/dist/features/definitions/api.d.ts +3 -0
- package/dist/features/definitions/api.d.ts.map +1 -0
- package/dist/features/definitions/api.js +20 -0
- package/dist/features/definitions/api.js.map +1 -0
- package/dist/features/definitions/ci.d.ts +3 -0
- package/dist/features/definitions/ci.d.ts.map +1 -0
- package/dist/features/definitions/ci.js +25 -0
- package/dist/features/definitions/ci.js.map +1 -0
- package/dist/features/definitions/core.d.ts +3 -0
- package/dist/features/definitions/core.d.ts.map +1 -0
- package/dist/features/definitions/core.js +76 -0
- package/dist/features/definitions/core.js.map +1 -0
- package/dist/features/definitions/devtools.d.ts +3 -0
- package/dist/features/definitions/devtools.d.ts.map +1 -0
- package/dist/features/definitions/devtools.js +53 -0
- package/dist/features/definitions/devtools.js.map +1 -0
- package/dist/features/definitions/forms.d.ts +3 -0
- package/dist/features/definitions/forms.d.ts.map +1 -0
- package/dist/features/definitions/forms.js +32 -0
- package/dist/features/definitions/forms.js.map +1 -0
- package/dist/features/definitions/i18n.d.ts +3 -0
- package/dist/features/definitions/i18n.d.ts.map +1 -0
- package/dist/features/definitions/i18n.js +50 -0
- package/dist/features/definitions/i18n.js.map +1 -0
- package/dist/features/definitions/index.d.ts +15 -0
- package/dist/features/definitions/index.d.ts.map +1 -0
- package/dist/features/definitions/index.js +15 -0
- package/dist/features/definitions/index.js.map +1 -0
- package/dist/features/definitions/mobile.d.ts +3 -0
- package/dist/features/definitions/mobile.d.ts.map +1 -0
- package/dist/features/definitions/mobile.js +19 -0
- package/dist/features/definitions/mobile.js.map +1 -0
- package/dist/features/definitions/observability.d.ts +3 -0
- package/dist/features/definitions/observability.d.ts.map +1 -0
- package/dist/features/definitions/observability.js +21 -0
- package/dist/features/definitions/observability.js.map +1 -0
- package/dist/features/definitions/performance.d.ts +3 -0
- package/dist/features/definitions/performance.d.ts.map +1 -0
- package/dist/features/definitions/performance.js +28 -0
- package/dist/features/definitions/performance.js.map +1 -0
- package/dist/features/definitions/routing.d.ts +3 -0
- package/dist/features/definitions/routing.d.ts.map +1 -0
- package/dist/features/definitions/routing.js +25 -0
- package/dist/features/definitions/routing.js.map +1 -0
- package/dist/features/definitions/state.d.ts +3 -0
- package/dist/features/definitions/state.d.ts.map +1 -0
- package/dist/features/definitions/state.js +27 -0
- package/dist/features/definitions/state.js.map +1 -0
- package/dist/features/definitions/testing.d.ts +3 -0
- package/dist/features/definitions/testing.d.ts.map +1 -0
- package/dist/features/definitions/testing.js +56 -0
- package/dist/features/definitions/testing.js.map +1 -0
- package/dist/features/definitions/theming.d.ts +3 -0
- package/dist/features/definitions/theming.d.ts.map +1 -0
- package/dist/features/definitions/theming.js +26 -0
- package/dist/features/definitions/theming.js.map +1 -0
- package/dist/features/definitions/ui.d.ts +3 -0
- package/dist/features/definitions/ui.d.ts.map +1 -0
- package/dist/features/definitions/ui.js +44 -0
- package/dist/features/definitions/ui.js.map +1 -0
- package/dist/features/index.d.ts +3 -2
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +2 -1
- package/dist/features/index.js.map +1 -1
- package/dist/features/registry.d.ts +3 -9
- package/dist/features/registry.d.ts.map +1 -1
- package/dist/features/registry.js +3 -554
- package/dist/features/registry.js.map +1 -1
- package/dist/features/types.d.ts +11 -9
- package/dist/features/types.d.ts.map +1 -1
- package/dist/features/types.js +24 -1
- package/dist/features/types.js.map +1 -1
- package/dist/server.d.ts +2 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +22 -56
- package/dist/server.js.map +1 -1
- package/dist/server.test.d.ts +2 -0
- package/dist/server.test.d.ts.map +1 -0
- package/dist/server.test.js +14 -0
- package/dist/server.test.js.map +1 -0
- package/dist/tools/get-example.test.d.ts +5 -0
- package/dist/tools/get-example.test.d.ts.map +1 -0
- package/dist/tools/get-example.test.js +63 -0
- package/dist/tools/get-example.test.js.map +1 -0
- package/dist/tools/get-features.d.ts +0 -5
- package/dist/tools/get-features.d.ts.map +1 -1
- package/dist/tools/get-features.js +0 -2
- package/dist/tools/get-features.js.map +1 -1
- package/dist/tools/get-features.test.d.ts +5 -0
- package/dist/tools/get-features.test.d.ts.map +1 -0
- package/dist/tools/get-features.test.js +45 -0
- package/dist/tools/get-features.test.js.map +1 -0
- package/dist/tools/get-scaffold.d.ts +2 -2
- package/dist/tools/get-scaffold.test.d.ts +5 -0
- package/dist/tools/get-scaffold.test.d.ts.map +1 -0
- package/dist/tools/get-scaffold.test.js +194 -0
- package/dist/tools/get-scaffold.test.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +9 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +29 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +23 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils/cache.d.ts +21 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +45 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/docs.test.d.ts +5 -0
- package/dist/utils/docs.test.d.ts.map +1 -0
- package/dist/utils/docs.test.js +37 -0
- package/dist/utils/docs.test.js.map +1 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +19 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/examples/api-patterns.d.ts +3 -0
- package/dist/utils/examples/api-patterns.d.ts.map +1 -0
- package/dist/utils/examples/api-patterns.js +19 -0
- package/dist/utils/examples/api-patterns.js.map +1 -0
- package/dist/utils/examples/component-patterns.d.ts +3 -0
- package/dist/utils/examples/component-patterns.d.ts.map +1 -0
- package/dist/utils/examples/component-patterns.js +71 -0
- package/dist/utils/examples/component-patterns.js.map +1 -0
- package/dist/utils/examples/context-patterns.d.ts +3 -0
- package/dist/utils/examples/context-patterns.d.ts.map +1 -0
- package/dist/utils/examples/context-patterns.js +32 -0
- package/dist/utils/examples/context-patterns.js.map +1 -0
- package/dist/utils/examples/hook-patterns.d.ts +3 -0
- package/dist/utils/examples/hook-patterns.d.ts.map +1 -0
- package/dist/utils/examples/hook-patterns.js +55 -0
- package/dist/utils/examples/hook-patterns.js.map +1 -0
- package/dist/utils/examples/i18n-patterns.d.ts +3 -0
- package/dist/utils/examples/i18n-patterns.d.ts.map +1 -0
- package/dist/utils/examples/i18n-patterns.js +43 -0
- package/dist/utils/examples/i18n-patterns.js.map +1 -0
- package/dist/utils/examples/index.d.ts +12 -0
- package/dist/utils/examples/index.d.ts.map +1 -0
- package/dist/utils/examples/index.js +69 -0
- package/dist/utils/examples/index.js.map +1 -0
- package/dist/utils/examples/mobile-patterns.d.ts +3 -0
- package/dist/utils/examples/mobile-patterns.d.ts.map +1 -0
- package/dist/utils/examples/mobile-patterns.js +38 -0
- package/dist/utils/examples/mobile-patterns.js.map +1 -0
- package/dist/utils/examples/page-patterns.d.ts +3 -0
- package/dist/utils/examples/page-patterns.d.ts.map +1 -0
- package/dist/utils/examples/page-patterns.js +34 -0
- package/dist/utils/examples/page-patterns.js.map +1 -0
- package/dist/utils/examples/store-patterns.d.ts +3 -0
- package/dist/utils/examples/store-patterns.d.ts.map +1 -0
- package/dist/utils/examples/store-patterns.js +40 -0
- package/dist/utils/examples/store-patterns.js.map +1 -0
- package/dist/utils/examples/test-patterns.d.ts +3 -0
- package/dist/utils/examples/test-patterns.d.ts.map +1 -0
- package/dist/utils/examples/test-patterns.js +58 -0
- package/dist/utils/examples/test-patterns.js.map +1 -0
- package/dist/utils/examples/types.d.ts +17 -0
- package/dist/utils/examples/types.d.ts.map +1 -0
- package/dist/utils/examples/types.js +2 -0
- package/dist/utils/examples/types.js.map +1 -0
- package/dist/utils/examples/utility-patterns.d.ts +3 -0
- package/dist/utils/examples/utility-patterns.d.ts.map +1 -0
- package/dist/utils/examples/utility-patterns.js +77 -0
- package/dist/utils/examples/utility-patterns.js.map +1 -0
- package/dist/utils/index.d.ts +5 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/paths.d.ts +6 -25
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +11 -40
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/paths.test.d.ts +2 -0
- package/dist/utils/paths.test.d.ts.map +1 -0
- package/dist/utils/paths.test.js +17 -0
- package/dist/utils/paths.test.js.map +1 -0
- package/dist/utils/scaffold/commands.d.ts +11 -0
- package/dist/utils/scaffold/commands.d.ts.map +1 -0
- package/dist/utils/scaffold/commands.js +22 -0
- package/dist/utils/scaffold/commands.js.map +1 -0
- package/dist/utils/scaffold/compute.d.ts +18 -0
- package/dist/utils/scaffold/compute.d.ts.map +1 -0
- package/dist/utils/scaffold/compute.js +78 -0
- package/dist/utils/scaffold/compute.js.map +1 -0
- package/dist/utils/scaffold/dependencies.d.ts +32 -0
- package/dist/utils/scaffold/dependencies.d.ts.map +1 -0
- package/dist/utils/scaffold/dependencies.js +107 -0
- package/dist/utils/scaffold/dependencies.js.map +1 -0
- package/dist/utils/scaffold/file-structure.d.ts +23 -0
- package/dist/utils/scaffold/file-structure.d.ts.map +1 -0
- package/dist/utils/scaffold/file-structure.js +62 -0
- package/dist/utils/scaffold/file-structure.js.map +1 -0
- package/dist/utils/scaffold/generators.d.ts +17 -0
- package/dist/utils/scaffold/generators.d.ts.map +1 -0
- package/dist/utils/{scaffold.js → scaffold/generators.js} +6 -254
- package/dist/utils/scaffold/generators.js.map +1 -0
- package/dist/utils/scaffold/index.d.ts +11 -0
- package/dist/utils/scaffold/index.d.ts.map +1 -0
- package/dist/utils/scaffold/index.js +11 -0
- package/dist/utils/scaffold/index.js.map +1 -0
- package/package.json +1 -1
- package/templates/.github/workflows/release.yml +1 -1
- package/templates/e2e/tests/home.spec.ts +2 -2
- package/templates/e2e/tests/language.spec.ts +7 -3
- package/dist/utils/examples.d.ts +0 -27
- package/dist/utils/examples.d.ts.map +0 -1
- package/dist/utils/examples.js +0 -438
- package/dist/utils/examples.js.map +0 -1
- package/dist/utils/scaffold.d.ts +0 -59
- package/dist/utils/scaffold.d.ts.map +0 -1
- package/dist/utils/scaffold.js.map +0 -1
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ Or point directly to the built file:
|
|
|
103
103
|
|
|
104
104
|
## Available Features
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
14 feature modules that can be combined:
|
|
107
107
|
|
|
108
108
|
| Feature | Description | Required |
|
|
109
109
|
| --------------- | --------------------------------------------- | -------- |
|
|
@@ -349,10 +349,9 @@ The server supports two modes:
|
|
|
349
349
|
- Templates copied at publish time via `npm run bundle`
|
|
350
350
|
|
|
351
351
|
```typescript
|
|
352
|
-
// Automatically detects which mode
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
: MONOREPO_ROOT; // development mode
|
|
352
|
+
// Automatically detects which mode via .bundled marker file
|
|
353
|
+
export const isPublishedMode = existsSync(BUNDLE_MARKER);
|
|
354
|
+
export const CONTENT_ROOT = isPublishedMode ? BUNDLED_PATH : MONOREPO_ROOT;
|
|
356
355
|
```
|
|
357
356
|
|
|
358
357
|
</details>
|
|
@@ -378,26 +377,31 @@ npm publish
|
|
|
378
377
|
<details>
|
|
379
378
|
<summary>Adding a New Feature</summary>
|
|
380
379
|
|
|
381
|
-
1. **
|
|
380
|
+
1. **Create feature file** in `src/features/definitions/my-feature.ts`:
|
|
382
381
|
|
|
383
382
|
```typescript
|
|
384
|
-
|
|
383
|
+
import type { Feature } from '../types.js';
|
|
384
|
+
|
|
385
|
+
export const myFeature: Feature = {
|
|
385
386
|
name: 'My Feature',
|
|
386
387
|
description: 'Description shown to users',
|
|
387
388
|
required: false,
|
|
388
389
|
includes: ['Thing 1', 'Thing 2'],
|
|
389
|
-
|
|
390
|
-
|
|
390
|
+
dependencyNames: ['some-package'],
|
|
391
|
+
devDependencyNames: ['some-dev-package'],
|
|
391
392
|
files: ['src/lib/myFeature.ts'],
|
|
392
393
|
patterns: ['my-feature-pattern'],
|
|
393
394
|
scripts: { 'my-script': 'some-command' },
|
|
394
|
-
configFiles: ['my-feature.config.js'],
|
|
395
395
|
};
|
|
396
396
|
```
|
|
397
397
|
|
|
398
|
-
2. **
|
|
398
|
+
2. **Export from** `src/features/definitions/index.ts`
|
|
399
399
|
|
|
400
|
-
|
|
400
|
+
3. **Add to** `src/features/registry.ts` FEATURES object
|
|
401
|
+
|
|
402
|
+
4. **Add patterns** in `src/utils/examples/utility-patterns.ts` (or appropriate category):
|
|
403
|
+
|
|
404
|
+
```
|
|
401
405
|
'my-feature-pattern': {
|
|
402
406
|
file: 'src/lib/myFeature.ts',
|
|
403
407
|
description: 'My feature implementation',
|
|
@@ -405,9 +409,9 @@ const myFeature: Feature = {
|
|
|
405
409
|
},
|
|
406
410
|
```
|
|
407
411
|
|
|
408
|
-
|
|
412
|
+
5. **Create actual files** in react-spa-scaffold's `src/`
|
|
409
413
|
|
|
410
|
-
|
|
414
|
+
6. **Rebuild**: `npm run build`
|
|
411
415
|
|
|
412
416
|
</details>
|
|
413
417
|
|
|
@@ -416,7 +420,7 @@ const myFeature: Feature = {
|
|
|
416
420
|
|
|
417
421
|
1. **Add to** `src/resources/docs.ts`:
|
|
418
422
|
|
|
419
|
-
```
|
|
423
|
+
```
|
|
420
424
|
'docs://my-topic': {
|
|
421
425
|
files: ['docs/MY_TOPIC.md'],
|
|
422
426
|
name: 'My Topic',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,GAAG,EAAE,OAkBjB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const api = {
|
|
2
|
+
name: 'API',
|
|
3
|
+
description: 'TanStack Query + typed API client',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'TanStack Query v5',
|
|
7
|
+
'QueryProvider with optimized defaults (staleTime, gcTime, retry)',
|
|
8
|
+
'Typed API client with methods (get/post/put/patch/delete)',
|
|
9
|
+
'ApiClientError class with status and code',
|
|
10
|
+
'Request timeout handling',
|
|
11
|
+
'Example useExampleQuery hook',
|
|
12
|
+
'API types (Todo, PaginatedResponse, etc.)',
|
|
13
|
+
],
|
|
14
|
+
dependencyNames: ['@tanstack/react-query'],
|
|
15
|
+
files: ['src/lib/api.ts', 'src/contexts/queryContext.tsx', 'src/hooks/useExampleQuery.ts', 'src/types/api.ts'],
|
|
16
|
+
testFiles: ['src/lib/api.test.ts', 'src/hooks/useExampleQuery.test.tsx'],
|
|
17
|
+
patterns: ['query-provider', 'use-query-hook', 'api-client'],
|
|
18
|
+
scripts: {},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/features/definitions/api.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAY;IAC1B,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,mCAAmC;IAChD,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,mBAAmB;QACnB,kEAAkE;QAClE,2DAA2D;QAC3D,2CAA2C;QAC3C,0BAA0B;QAC1B,8BAA8B;QAC9B,2CAA2C;KAC5C;IACD,eAAe,EAAE,CAAC,uBAAuB,CAAC;IAC1C,KAAK,EAAE,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,kBAAkB,CAAC;IAC9G,SAAS,EAAE,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;IACxE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC;IAC5D,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/ci.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,EAAE,EAAE,OAuBhB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const ci = {
|
|
2
|
+
name: 'CI/CD',
|
|
3
|
+
description: 'GitHub Actions + Performance Testing + Dependabot',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'GitHub Actions CI workflow',
|
|
7
|
+
'Parallel jobs: lint, typecheck, security audit, build, unit tests, e2e tests, performance tests',
|
|
8
|
+
'Performance testing with react-performance-tracking (React Profiler, Lighthouse, Web Vitals)',
|
|
9
|
+
'Dependabot with grouped updates by category',
|
|
10
|
+
'PR template',
|
|
11
|
+
'Artifact uploads (dist, coverage, performance reports)',
|
|
12
|
+
'Dependency caching for faster builds',
|
|
13
|
+
'Custom setup-node-deps action',
|
|
14
|
+
],
|
|
15
|
+
files: [
|
|
16
|
+
'.github/workflows/ci.yml',
|
|
17
|
+
'.github/actions/setup-node-deps/action.yml',
|
|
18
|
+
'.github/dependabot.yml',
|
|
19
|
+
'.github/PULL_REQUEST_TEMPLATE.md',
|
|
20
|
+
],
|
|
21
|
+
patterns: [],
|
|
22
|
+
scripts: {},
|
|
23
|
+
configFiles: [],
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=ci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/features/definitions/ci.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAY;IACzB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,mDAAmD;IAChE,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,4BAA4B;QAC5B,iGAAiG;QACjG,8FAA8F;QAC9F,6CAA6C;QAC7C,aAAa;QACb,wDAAwD;QACxD,sCAAsC;QACtC,+BAA+B;KAChC;IACD,KAAK,EAAE;QACL,0BAA0B;QAC1B,4CAA4C;QAC5C,wBAAwB;QACxB,kCAAkC;KACnC;IACD,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,IAAI,EAAE,OA0ElB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export const core = {
|
|
2
|
+
name: 'Core',
|
|
3
|
+
description: 'React 19 + TypeScript + Vite 7 + Tailwind CSS v4',
|
|
4
|
+
required: true,
|
|
5
|
+
includes: [
|
|
6
|
+
'React 19 with TypeScript (~5.9.0)',
|
|
7
|
+
'Vite 7 build system',
|
|
8
|
+
'Tailwind CSS v4 with Vite plugin',
|
|
9
|
+
'Inter variable font (@fontsource-variable/inter)',
|
|
10
|
+
'Environment validation with Zod (src/lib/env.ts)',
|
|
11
|
+
'cn() class merge utility (clsx + tailwind-merge)',
|
|
12
|
+
'Basic SEO component (React 19 native head hoisting)',
|
|
13
|
+
'App configuration (src/lib/config.ts)',
|
|
14
|
+
'Type definitions',
|
|
15
|
+
'ErrorBoundary component with reset functionality',
|
|
16
|
+
],
|
|
17
|
+
dependencyNames: ['@fontsource-variable/inter', 'clsx', 'react', 'react-dom', 'tailwind-merge', 'zod'],
|
|
18
|
+
devDependencyNames: [
|
|
19
|
+
'@tailwindcss/vite',
|
|
20
|
+
'@types/node',
|
|
21
|
+
'@types/react',
|
|
22
|
+
'@types/react-dom',
|
|
23
|
+
'@vitejs/plugin-react',
|
|
24
|
+
'@react-spa-scaffold/tsconfig',
|
|
25
|
+
'tailwindcss',
|
|
26
|
+
'typescript',
|
|
27
|
+
'vite',
|
|
28
|
+
],
|
|
29
|
+
files: [
|
|
30
|
+
'src/main.tsx',
|
|
31
|
+
'src/App.tsx',
|
|
32
|
+
'src/index.css',
|
|
33
|
+
'src/vite-env.d.ts',
|
|
34
|
+
'src/lib/config.ts',
|
|
35
|
+
'src/lib/env.ts',
|
|
36
|
+
'src/lib/utils.ts',
|
|
37
|
+
'src/lib/index.ts',
|
|
38
|
+
'src/types/index.ts',
|
|
39
|
+
'src/hooks/index.ts',
|
|
40
|
+
'src/components/shared/SEO/SEO.tsx',
|
|
41
|
+
'src/components/shared/SEO/index.ts',
|
|
42
|
+
'src/components/shared/ErrorBoundary/ErrorBoundary.tsx',
|
|
43
|
+
'src/components/shared/ErrorBoundary/index.ts',
|
|
44
|
+
'src/components/shared/index.ts',
|
|
45
|
+
'index.html',
|
|
46
|
+
'vite.config.ts',
|
|
47
|
+
'tsconfig.json',
|
|
48
|
+
'tsconfig.app.json',
|
|
49
|
+
'tsconfig.node.json',
|
|
50
|
+
'.env.example',
|
|
51
|
+
'.gitignore',
|
|
52
|
+
'public/favicon.svg',
|
|
53
|
+
],
|
|
54
|
+
testFiles: [
|
|
55
|
+
'src/lib/utils.test.ts',
|
|
56
|
+
'src/components/shared/SEO/SEO.test.tsx',
|
|
57
|
+
'src/components/shared/ErrorBoundary/ErrorBoundary.test.tsx',
|
|
58
|
+
'e2e/tests/home.spec.ts',
|
|
59
|
+
],
|
|
60
|
+
patterns: ['component-shared', 'hook-effect', 'error-boundary', 'seo-component'],
|
|
61
|
+
scripts: {
|
|
62
|
+
dev: 'vite',
|
|
63
|
+
build: 'tsc -b && vite build',
|
|
64
|
+
preview: 'vite preview',
|
|
65
|
+
typecheck: 'tsc --noEmit',
|
|
66
|
+
},
|
|
67
|
+
configFiles: [
|
|
68
|
+
'vite.config.ts',
|
|
69
|
+
'tsconfig.json',
|
|
70
|
+
'tsconfig.app.json',
|
|
71
|
+
'tsconfig.node.json',
|
|
72
|
+
'.gitignore',
|
|
73
|
+
'src/index.css',
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/features/definitions/core.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAY;IAC3B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,kDAAkD;IAC/D,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE;QACR,mCAAmC;QACnC,qBAAqB;QACrB,kCAAkC;QAClC,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,qDAAqD;QACrD,uCAAuC;QACvC,kBAAkB;QAClB,kDAAkD;KACnD;IACD,eAAe,EAAE,CAAC,4BAA4B,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,CAAC;IACtG,kBAAkB,EAAE;QAClB,mBAAmB;QACnB,aAAa;QACb,cAAc;QACd,kBAAkB;QAClB,sBAAsB;QACtB,8BAA8B;QAC9B,aAAa;QACb,YAAY;QACZ,MAAM;KACP;IACD,KAAK,EAAE;QACL,cAAc;QACd,aAAa;QACb,eAAe;QACf,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB;QACpB,mCAAmC;QACnC,oCAAoC;QACpC,uDAAuD;QACvD,8CAA8C;QAC9C,gCAAgC;QAChC,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,mBAAmB;QACnB,oBAAoB;QACpB,cAAc;QACd,YAAY;QACZ,oBAAoB;KACrB;IACD,SAAS,EAAE;QACT,uBAAuB;QACvB,wCAAwC;QACxC,4DAA4D;QAC5D,wBAAwB;KACzB;IACD,QAAQ,EAAE,CAAC,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,CAAC;IAChF,OAAO,EAAE;QACP,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,cAAc;KAC1B;IACD,WAAW,EAAE;QACX,gBAAgB;QAChB,eAAe;QACf,mBAAmB;QACnB,oBAAoB;QACpB,YAAY;QACZ,eAAe;KAChB;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/devtools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,QAAQ,EAAE,OAmDtB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const devtools = {
|
|
2
|
+
name: 'Developer Tooling',
|
|
3
|
+
description: 'ESLint + Prettier + Husky + Commitlint (using @react-spa-scaffold shared configs)',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'@react-spa-scaffold/eslint-config (React + TypeScript + LinguiJS)',
|
|
7
|
+
'@react-spa-scaffold/prettier-config (with Tailwind plugin)',
|
|
8
|
+
'ESLint with TypeScript and React Hooks plugins',
|
|
9
|
+
'eslint-plugin-react-refresh for HMR',
|
|
10
|
+
'Prettier with Tailwind CSS plugin',
|
|
11
|
+
'Husky for git hooks',
|
|
12
|
+
'lint-staged for pre-commit linting',
|
|
13
|
+
'Commitlint for conventional commits',
|
|
14
|
+
'.nvmrc for Node.js version (22)',
|
|
15
|
+
'Pre-commit hook: typecheck + lint-staged',
|
|
16
|
+
'Commit-msg hook: commitlint',
|
|
17
|
+
],
|
|
18
|
+
devDependencyNames: [
|
|
19
|
+
'@commitlint/config-conventional',
|
|
20
|
+
'@eslint/js',
|
|
21
|
+
'@react-spa-scaffold/eslint-config',
|
|
22
|
+
'@react-spa-scaffold/prettier-config',
|
|
23
|
+
'commitlint',
|
|
24
|
+
'eslint',
|
|
25
|
+
'eslint-config-prettier',
|
|
26
|
+
'eslint-plugin-lingui',
|
|
27
|
+
'eslint-plugin-react-hooks',
|
|
28
|
+
'eslint-plugin-react-refresh',
|
|
29
|
+
'husky',
|
|
30
|
+
'lint-staged',
|
|
31
|
+
'prettier',
|
|
32
|
+
'prettier-plugin-tailwindcss',
|
|
33
|
+
'typescript-eslint',
|
|
34
|
+
],
|
|
35
|
+
files: [
|
|
36
|
+
'eslint.config.js',
|
|
37
|
+
'prettier.config.js',
|
|
38
|
+
'commitlint.config.js',
|
|
39
|
+
'.husky/pre-commit',
|
|
40
|
+
'.husky/commit-msg',
|
|
41
|
+
'.nvmrc',
|
|
42
|
+
],
|
|
43
|
+
patterns: [],
|
|
44
|
+
scripts: {
|
|
45
|
+
lint: 'eslint .',
|
|
46
|
+
'lint:fix': 'eslint . --fix',
|
|
47
|
+
format: 'prettier --write .',
|
|
48
|
+
'format:check': 'prettier --check .',
|
|
49
|
+
prepare: 'husky',
|
|
50
|
+
},
|
|
51
|
+
configFiles: ['eslint.config.js', 'prettier.config.js', 'commitlint.config.js'],
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=devtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../../src/features/definitions/devtools.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mFAAmF;IAChG,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,mEAAmE;QACnE,4DAA4D;QAC5D,gDAAgD;QAChD,qCAAqC;QACrC,mCAAmC;QACnC,qBAAqB;QACrB,oCAAoC;QACpC,qCAAqC;QACrC,iCAAiC;QACjC,0CAA0C;QAC1C,6BAA6B;KAC9B;IACD,kBAAkB,EAAE;QAClB,iCAAiC;QACjC,YAAY;QACZ,mCAAmC;QACnC,qCAAqC;QACrC,YAAY;QACZ,QAAQ;QACR,wBAAwB;QACxB,sBAAsB;QACtB,2BAA2B;QAC3B,6BAA6B;QAC7B,OAAO;QACP,aAAa;QACb,UAAU;QACV,6BAA6B;QAC7B,mBAAmB;KACpB;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,oBAAoB;QACpB,sBAAsB;QACtB,mBAAmB;QACnB,mBAAmB;QACnB,QAAQ;KACT;IACD,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;QACP,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,gBAAgB;QAC5B,MAAM,EAAE,oBAAoB;QAC5B,cAAc,EAAE,oBAAoB;QACpC,OAAO,EAAE,OAAO;KACjB;IACD,WAAW,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;CAChF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/forms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,KAAK,EAAE,OA8BnB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const forms = {
|
|
2
|
+
name: 'Form Handling',
|
|
3
|
+
description: 'React Hook Form + Zod validation + working demo form',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'React Hook Form with Zod validation',
|
|
7
|
+
'@hookform/resolvers for schema integration',
|
|
8
|
+
'RegisterForm component with validation demo (displayed on HomePage)',
|
|
9
|
+
'Form error components (FieldErrorMessage, FormErrorSummary, RootFormError)',
|
|
10
|
+
'useRegisterForm custom hook pattern',
|
|
11
|
+
'Zod schema with refine() for cross-field validation',
|
|
12
|
+
],
|
|
13
|
+
dependencyNames: ['@hookform/resolvers', 'react-hook-form'],
|
|
14
|
+
files: [
|
|
15
|
+
'src/lib/validations.ts',
|
|
16
|
+
'src/hooks/useRegisterForm.ts',
|
|
17
|
+
'src/components/ui/form-error.tsx',
|
|
18
|
+
'src/components/ui/input.tsx',
|
|
19
|
+
'src/components/ui/label.tsx',
|
|
20
|
+
'src/components/ui/card.tsx',
|
|
21
|
+
'src/components/shared/RegisterForm/RegisterForm.tsx',
|
|
22
|
+
'src/components/shared/RegisterForm/index.ts',
|
|
23
|
+
],
|
|
24
|
+
testFiles: [
|
|
25
|
+
'src/lib/validations.test.ts',
|
|
26
|
+
'src/hooks/useRegisterForm.test.tsx',
|
|
27
|
+
'src/components/shared/RegisterForm/RegisterForm.test.tsx',
|
|
28
|
+
],
|
|
29
|
+
patterns: ['zod-schema', 'hook-form', 'form-error-component', 'register-form'],
|
|
30
|
+
scripts: {},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../src/features/definitions/forms.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,sDAAsD;IACnE,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,qCAAqC;QACrC,4CAA4C;QAC5C,qEAAqE;QACrE,4EAA4E;QAC5E,qCAAqC;QACrC,qDAAqD;KACtD;IACD,eAAe,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;IAC3D,KAAK,EAAE;QACL,wBAAwB;QACxB,8BAA8B;QAC9B,kCAAkC;QAClC,6BAA6B;QAC7B,6BAA6B;QAC7B,4BAA4B;QAC5B,qDAAqD;QACrD,6CAA6C;KAC9C;IACD,SAAS,EAAE;QACT,6BAA6B;QAC7B,oCAAoC;QACpC,0DAA0D;KAC3D;IACD,QAAQ,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,eAAe,CAAC;IAC9E,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,IAAI,EAAE,OAgDlB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export const i18n = {
|
|
2
|
+
name: 'Internationalization',
|
|
3
|
+
description: 'LinguiJS with dynamic loading and language detection',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'LinguiJS (core + react + macro)',
|
|
7
|
+
'Trans component for JSX text',
|
|
8
|
+
't() function for programmatic text',
|
|
9
|
+
'Dynamic catalog loading (code splitting per locale)',
|
|
10
|
+
'Browser language detection',
|
|
11
|
+
'Language switcher component',
|
|
12
|
+
'ESLint rule for translator comments (enforced)',
|
|
13
|
+
'Locale files (.po format) for en, es, de',
|
|
14
|
+
'Vite plugin for compilation',
|
|
15
|
+
'useLanguage hook',
|
|
16
|
+
],
|
|
17
|
+
dependencyNames: ['@lingui/core', '@lingui/react'],
|
|
18
|
+
devDependencyNames: [
|
|
19
|
+
'@lingui/babel-plugin-lingui-macro',
|
|
20
|
+
'@lingui/cli',
|
|
21
|
+
'@lingui/vite-plugin',
|
|
22
|
+
'babel-plugin-macros',
|
|
23
|
+
'eslint-plugin-lingui',
|
|
24
|
+
],
|
|
25
|
+
files: [
|
|
26
|
+
'src/i18n/config.ts',
|
|
27
|
+
'src/i18n/detectLanguage.ts',
|
|
28
|
+
'src/i18n/loadCatalog.ts',
|
|
29
|
+
'src/i18n/index.ts',
|
|
30
|
+
'src/locales/en.po',
|
|
31
|
+
'src/locales/es.po',
|
|
32
|
+
'src/locales/de.po',
|
|
33
|
+
'src/hooks/useLanguage.ts',
|
|
34
|
+
'src/components/shared/LanguageSwitcher/LanguageSwitcher.tsx',
|
|
35
|
+
'src/components/shared/LanguageSwitcher/index.ts',
|
|
36
|
+
'lingui.config.js',
|
|
37
|
+
],
|
|
38
|
+
testFiles: [
|
|
39
|
+
'src/i18n/detectLanguage.test.ts',
|
|
40
|
+
'src/i18n/loadCatalog.test.ts',
|
|
41
|
+
'src/hooks/useLanguage.test.tsx',
|
|
42
|
+
'src/components/shared/LanguageSwitcher/LanguageSwitcher.test.tsx',
|
|
43
|
+
'e2e/tests/language.spec.ts',
|
|
44
|
+
],
|
|
45
|
+
patterns: ['i18n-index', 'trans-component', 't-function', 'language-switcher', 'use-language-hook'],
|
|
46
|
+
scripts: {
|
|
47
|
+
'i18n:extract': 'lingui extract',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/features/definitions/i18n.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAY;IAC3B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,sDAAsD;IACnE,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,iCAAiC;QACjC,8BAA8B;QAC9B,oCAAoC;QACpC,qDAAqD;QACrD,4BAA4B;QAC5B,6BAA6B;QAC7B,gDAAgD;QAChD,0CAA0C;QAC1C,6BAA6B;QAC7B,kBAAkB;KACnB;IACD,eAAe,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IAClD,kBAAkB,EAAE;QAClB,mCAAmC;QACnC,aAAa;QACb,qBAAqB;QACrB,qBAAqB;QACrB,sBAAsB;KACvB;IACD,KAAK,EAAE;QACL,oBAAoB;QACpB,4BAA4B;QAC5B,yBAAyB;QACzB,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB;QACnB,0BAA0B;QAC1B,6DAA6D;QAC7D,iDAAiD;QACjD,kBAAkB;KACnB;IACD,SAAS,EAAE;QACT,iCAAiC;QACjC,8BAA8B;QAC9B,gCAAgC;QAChC,kEAAkE;QAClE,4BAA4B;KAC7B;IACD,QAAQ,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,CAAC;IACnG,OAAO,EAAE;QACP,cAAc,EAAE,gBAAgB;KACjC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { core } from './core.js';
|
|
2
|
+
export { mobile } from './mobile.js';
|
|
3
|
+
export { routing } from './routing.js';
|
|
4
|
+
export { ui } from './ui.js';
|
|
5
|
+
export { forms } from './forms.js';
|
|
6
|
+
export { state } from './state.js';
|
|
7
|
+
export { api } from './api.js';
|
|
8
|
+
export { i18n } from './i18n.js';
|
|
9
|
+
export { testing } from './testing.js';
|
|
10
|
+
export { performance } from './performance.js';
|
|
11
|
+
export { devtools } from './devtools.js';
|
|
12
|
+
export { ci } from './ci.js';
|
|
13
|
+
export { observability } from './observability.js';
|
|
14
|
+
export { theming } from './theming.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { core } from './core.js';
|
|
2
|
+
export { mobile } from './mobile.js';
|
|
3
|
+
export { routing } from './routing.js';
|
|
4
|
+
export { ui } from './ui.js';
|
|
5
|
+
export { forms } from './forms.js';
|
|
6
|
+
export { state } from './state.js';
|
|
7
|
+
export { api } from './api.js';
|
|
8
|
+
export { i18n } from './i18n.js';
|
|
9
|
+
export { testing } from './testing.js';
|
|
10
|
+
export { performance } from './performance.js';
|
|
11
|
+
export { devtools } from './devtools.js';
|
|
12
|
+
export { ci } from './ci.js';
|
|
13
|
+
export { observability } from './observability.js';
|
|
14
|
+
export { theming } from './theming.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/mobile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,MAAM,EAAE,OAiBpB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const mobile = {
|
|
2
|
+
name: 'Mobile Support',
|
|
3
|
+
description: 'Responsive design utilities with viewport detection, breakpoints, and touch-aware sizing',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'MobileProvider context for viewport detection',
|
|
7
|
+
'useMobileContext hook (isMobile, isTablet, isDesktop, width)',
|
|
8
|
+
'useMediaQuery hook with BREAKPOINTS constants (sm, md, lg, xl)',
|
|
9
|
+
'useIsMobile and useIsDesktop convenience hooks',
|
|
10
|
+
'useTouchSizes hook for touch-aware component sizing',
|
|
11
|
+
'requestAnimationFrame-debounced resize handling',
|
|
12
|
+
'SSR-safe viewport detection with fallbacks',
|
|
13
|
+
],
|
|
14
|
+
files: ['src/contexts/mobileContext.tsx', 'src/hooks/useMediaQuery.ts', 'src/hooks/useTouchSizes.ts'],
|
|
15
|
+
testFiles: ['src/contexts/mobileContext.test.tsx', 'src/hooks/useMediaQuery.test.ts'],
|
|
16
|
+
patterns: ['mobile-context', 'use-media-query', 'use-touch-sizes'],
|
|
17
|
+
scripts: {},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../../src/features/definitions/mobile.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0FAA0F;IACvG,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,+CAA+C;QAC/C,8DAA8D;QAC9D,gEAAgE;QAChE,gDAAgD;QAChD,qDAAqD;QACrD,iDAAiD;QACjD,4CAA4C;KAC7C;IACD,KAAK,EAAE,CAAC,gCAAgC,EAAE,4BAA4B,EAAE,4BAA4B,CAAC;IACrG,SAAS,EAAE,CAAC,qCAAqC,EAAE,iCAAiC,CAAC;IACrF,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;IAClE,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,aAAa,EAAE,OAmB3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const observability = {
|
|
2
|
+
name: 'Observability',
|
|
3
|
+
description: 'Sentry error tracking with source maps (opt-out via VITE_SENTRY_ENABLED=false)',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'Sentry React SDK (@sentry/react)',
|
|
7
|
+
'Lazy-loaded Sentry initialization (non-blocking)',
|
|
8
|
+
'Browser tracing integration',
|
|
9
|
+
'Global error handlers (window.onerror, unhandledrejection)',
|
|
10
|
+
'ErrorBoundary integration with Sentry reporting',
|
|
11
|
+
'Source map upload via Vite plugin (CI/CD)',
|
|
12
|
+
'VITE_SENTRY_ENABLED flag for opt-out',
|
|
13
|
+
'SENTRY_CONFIG in lib/config.ts',
|
|
14
|
+
],
|
|
15
|
+
dependencyNames: ['@sentry/react'],
|
|
16
|
+
devDependencyNames: ['@sentry/vite-plugin'],
|
|
17
|
+
files: ['src/lib/config.ts'],
|
|
18
|
+
patterns: ['main-entry', 'lib-config'],
|
|
19
|
+
scripts: {},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/features/definitions/observability.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,gFAAgF;IAC7F,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,kCAAkC;QAClC,kDAAkD;QAClD,6BAA6B;QAC7B,4DAA4D;QAC5D,iDAAiD;QACjD,2CAA2C;QAC3C,sCAAsC;QACtC,gCAAgC;KACjC;IACD,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,kBAAkB,EAAE,CAAC,qBAAqB,CAAC;IAC3C,KAAK,EAAE,CAAC,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACtC,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/performance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,WAAW,EAAE,OA0BzB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const performance = {
|
|
2
|
+
name: 'Performance Testing',
|
|
3
|
+
description: 'React Profiler + Lighthouse + Web Vitals via react-performance-tracking',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'react-performance-tracking for unified performance testing',
|
|
7
|
+
'React Profiler metrics (render duration, re-renders)',
|
|
8
|
+
'Lighthouse audits (performance, accessibility, best practices)',
|
|
9
|
+
'Core Web Vitals (LCP, INP, CLS)',
|
|
10
|
+
'FPS monitoring (Chromium only)',
|
|
11
|
+
'PerformanceProviderWrapper with lazy loading (zero prod overhead)',
|
|
12
|
+
'Safe usePerformance hook (never throws)',
|
|
13
|
+
'Separate Playwright project for performance tests',
|
|
14
|
+
'CI-optimized Chrome flags (--no-sandbox)',
|
|
15
|
+
],
|
|
16
|
+
dependencyNames: ['react-performance-tracking'],
|
|
17
|
+
devDependencyNames: ['chrome-launcher', 'lighthouse'],
|
|
18
|
+
files: ['src/contexts/performanceContext.tsx', 'e2e/performance/setup.ts'],
|
|
19
|
+
testFiles: ['e2e/performance/home.spec.ts', 'src/contexts/performanceContext.test.tsx'],
|
|
20
|
+
patterns: ['performance-context', 'performance-e2e', 'profiler-wrapper'],
|
|
21
|
+
scripts: {
|
|
22
|
+
'e2e:perf': 'PERF_TEST=true playwright test --project=performance',
|
|
23
|
+
'e2e:perf:ui': 'PERF_TEST=true playwright test --project=performance --ui',
|
|
24
|
+
'e2e:all': 'PERF_TEST=true playwright test',
|
|
25
|
+
},
|
|
26
|
+
configFiles: [],
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../src/features/definitions/performance.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,yEAAyE;IACtF,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,4DAA4D;QAC5D,sDAAsD;QACtD,gEAAgE;QAChE,iCAAiC;QACjC,gCAAgC;QAChC,mEAAmE;QACnE,yCAAyC;QACzC,mDAAmD;QACnD,0CAA0C;KAC3C;IACD,eAAe,EAAE,CAAC,4BAA4B,CAAC;IAC/C,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;IACrD,KAAK,EAAE,CAAC,qCAAqC,EAAE,0BAA0B,CAAC;IAC1E,SAAS,EAAE,CAAC,8BAA8B,EAAE,0CAA0C,CAAC;IACvF,QAAQ,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IACxE,OAAO,EAAE;QACP,UAAU,EAAE,sDAAsD;QAClE,aAAa,EAAE,2DAA2D;QAC1E,SAAS,EAAE,gCAAgC;KAC5C;IACD,WAAW,EAAE,EAAE;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,OAAO,EAAE,OAuBrB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const routing = {
|
|
2
|
+
name: 'Routing',
|
|
3
|
+
description: 'React Router 7 with lazy loading and route constants',
|
|
4
|
+
required: false,
|
|
5
|
+
includes: [
|
|
6
|
+
'React Router 7',
|
|
7
|
+
'Lazy-loaded pages with React.lazy()',
|
|
8
|
+
'Route constants with TypeScript types (generated based on features)',
|
|
9
|
+
'404 Not Found page',
|
|
10
|
+
'App.tsx with Suspense fallback',
|
|
11
|
+
'PageLoading component for transitions',
|
|
12
|
+
],
|
|
13
|
+
dependencyNames: ['react-router'],
|
|
14
|
+
files: [
|
|
15
|
+
'src/pages/Home.tsx',
|
|
16
|
+
'src/pages/NotFound.tsx',
|
|
17
|
+
'src/pages/index.ts',
|
|
18
|
+
'src/components/ui/loading.tsx',
|
|
19
|
+
'src/components/ui/visually-hidden.tsx',
|
|
20
|
+
],
|
|
21
|
+
testFiles: ['e2e/tests/navigation.spec.ts'],
|
|
22
|
+
patterns: ['lazy-page', 'route-constants', 'page-component'],
|
|
23
|
+
scripts: {},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/features/definitions/routing.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sDAAsD;IACnE,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE;QACR,gBAAgB;QAChB,qCAAqC;QACrC,qEAAqE;QACrE,oBAAoB;QACpB,gCAAgC;QAChC,uCAAuC;KACxC;IACD,eAAe,EAAE,CAAC,cAAc,CAAC;IACjC,KAAK,EAAE;QACL,oBAAoB;QACpB,wBAAwB;QACxB,oBAAoB;QACpB,+BAA+B;QAC/B,uCAAuC;KACxC;IACD,SAAS,EAAE,CAAC,8BAA8B,CAAC;IAC3C,QAAQ,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;IAC5D,OAAO,EAAE,EAAE;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/features/definitions/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,KAAK,EAAE,OAyBnB,CAAC"}
|