@jmruthers/pace-core 0.6.6 → 0.6.7
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/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +12 -13
- package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
- package/audit-tool/audits/02-project-structure.cjs +255 -0
- package/audit-tool/audits/03-architecture.cjs +196 -0
- package/audit-tool/audits/04-code-quality.cjs +149 -0
- package/audit-tool/audits/05-styling.cjs +224 -0
- package/audit-tool/audits/06-security-rbac.cjs +544 -0
- package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
- package/audit-tool/audits/08-testing-documentation.cjs +202 -0
- package/audit-tool/audits/09-operations.cjs +208 -0
- package/audit-tool/index.cjs +291 -0
- package/audit-tool/utils/code-utils.cjs +218 -0
- package/audit-tool/utils/file-utils.cjs +230 -0
- package/audit-tool/utils/report-utils.cjs +241 -0
- package/cursor-rules/00-standards-overview.mdc +156 -0
- package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
- package/cursor-rules/02-project-structure.mdc +37 -5
- package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
- package/cursor-rules/04-code-quality.mdc +419 -0
- package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
- package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
- package/cursor-rules/07-api-tech-stack.mdc +377 -0
- package/cursor-rules/08-testing-documentation.mdc +324 -0
- package/cursor-rules/09-operations.mdc +365 -0
- package/dist/DataTable-7PMH7XN7.js +15 -0
- package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
- package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +26 -16
- package/dist/{chunk-FENMYN2U.js → chunk-5X4QLXRG.js} +1 -3
- package/dist/{chunk-4T7OBVTU.js → chunk-6F3IILHI.js} +1 -1
- package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
- package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
- package/dist/{chunk-7TYHROIV.js → chunk-BM4CQ5P3.js} +50 -8
- package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
- package/dist/{chunk-OHIK3MIO.js → chunk-GHYHJTYV.js} +2 -2
- package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
- package/dist/{chunk-LAZMKTTF.js → chunk-JGWDVX64.js} +281 -347
- package/dist/{chunk-MAGBIDNS.js → chunk-L4XMVJKY.js} +2 -2
- package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
- package/dist/{chunk-ZS5VO5JB.js → chunk-Q7Q7V5NV.js} +406 -451
- package/dist/{chunk-3O3WHILE.js → chunk-VBCS3DUA.js} +236 -60
- package/dist/{chunk-BVP2BCJF.js → chunk-ZKAWKYT4.js} +8 -8
- package/dist/components.d.ts +5 -4
- package/dist/components.js +27 -32
- package/dist/eslint-rules/index.cjs +22 -9
- package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
- package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
- package/dist/eslint-rules/rules/05-styling.cjs +61 -0
- package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +26 -10
- package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
- package/dist/eslint-rules/rules/08-testing.cjs +94 -0
- package/dist/hooks.d.ts +5 -5
- package/dist/hooks.js +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +18 -17
- package/dist/rbac/index.js +6 -6
- package/dist/theming/runtime.d.ts +14 -1
- package/dist/theming/runtime.js +1 -1
- package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
- package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +8 -8
- package/docs/README.md +1 -1
- package/docs/api/modules.md +47 -31
- package/docs/api-reference/components.md +18 -20
- package/docs/api-reference/hooks.md +80 -80
- package/docs/api-reference/types.md +1 -1
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +1 -1
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +6 -6
- package/docs/core-concepts/permissions.md +6 -6
- package/docs/documentation-index.md +12 -18
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +4 -4
- package/docs/getting-started/examples/full-featured-app.md +1 -1
- package/docs/getting-started/faq.md +2 -2
- package/docs/getting-started/quick-reference.md +4 -4
- package/docs/implementation-guides/authentication.md +15 -15
- package/docs/implementation-guides/component-styling.md +1 -1
- package/docs/implementation-guides/data-tables.md +126 -33
- package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
- package/docs/implementation-guides/dynamic-colors.md +3 -3
- package/docs/implementation-guides/file-upload-storage.md +2 -2
- package/docs/implementation-guides/hierarchical-datatable.md +40 -60
- package/docs/implementation-guides/inactivity-tracking.md +3 -3
- package/docs/implementation-guides/large-datasets.md +3 -2
- package/docs/implementation-guides/organisation-security.md +2 -2
- package/docs/implementation-guides/performance.md +2 -2
- package/docs/implementation-guides/permission-enforcement.md +1 -1
- package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
- package/docs/migration/V0.4.0_rbac-migration.md +6 -6
- package/docs/rbac/README.md +5 -5
- package/docs/rbac/advanced-patterns.md +6 -6
- package/docs/rbac/api-reference.md +20 -20
- package/docs/rbac/event-based-apps.md +3 -3
- package/docs/rbac/examples.md +41 -41
- package/docs/rbac/getting-started.md +37 -37
- package/docs/rbac/performance.md +1 -1
- package/docs/rbac/quick-start.md +52 -52
- package/docs/rbac/secure-client-protection.md +1 -1
- package/docs/rbac/troubleshooting.md +1 -1
- package/docs/security/README.md +5 -5
- package/docs/standards/0-standards-overview.md +220 -0
- package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +204 -185
- package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
- package/docs/standards/3-architecture-standards.md +606 -0
- package/docs/standards/4-code-quality-standards.md +728 -0
- package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
- package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
- package/docs/standards/7-api-tech-stack-standards.md +662 -0
- package/docs/standards/8-testing-documentation-standards.md +401 -0
- package/docs/standards/9-operations-standards.md +1102 -0
- package/docs/standards/README.md +203 -104
- package/docs/troubleshooting/README.md +4 -4
- package/docs/troubleshooting/common-issues.md +2 -2
- package/docs/troubleshooting/debugging.md +9 -9
- package/docs/troubleshooting/migration.md +4 -4
- package/eslint-config-pace-core.cjs +21 -10
- package/package.json +6 -5
- package/scripts/install-cursor-rules.cjs +11 -243
- package/scripts/install-eslint-config.cjs +284 -0
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +10 -10
- package/src/__tests__/integration/UserProfile.test.tsx +14 -14
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
- package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
- package/src/__tests__/templates/component.test.template.tsx +18 -15
- package/src/components/Calendar/Calendar.tsx +201 -47
- package/src/components/ContextSelector/ContextSelector.tsx +137 -153
- package/src/components/DataTable/AUDIT_REPORT.md +293 -0
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
- package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
- package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
- package/src/components/DataTable/components/EditableRow.tsx +5 -7
- package/src/components/DataTable/components/EmptyState.tsx +10 -9
- package/src/components/DataTable/components/FilterRow.tsx +2 -4
- package/src/components/DataTable/components/ImportModal.tsx +124 -126
- package/src/components/DataTable/components/LoadingState.tsx +5 -6
- package/src/components/DataTable/components/SortIndicator.tsx +50 -0
- package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
- package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
- package/src/components/DataTable/components/index.ts +2 -1
- package/src/components/DataTable/types.ts +0 -18
- package/src/components/DataTable/utils/a11yUtils.ts +17 -0
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
- package/src/components/DateTimeField/DateTimeField.tsx +7 -8
- package/src/components/Dialog/Dialog.test.tsx +1 -0
- package/src/components/Dialog/Dialog.tsx +25 -8
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
- package/src/components/FileUpload/FileUpload.test.tsx +52 -14
- package/src/components/FileUpload/FileUpload.tsx +112 -130
- package/src/components/Progress/Progress.tsx +2 -4
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
- package/src/components/Select/Select.tsx +86 -77
- package/src/components/Select/types.ts +3 -0
- package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
- package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
- package/src/hooks/public/usePublicEvent.ts +5 -5
- package/src/hooks/public/usePublicEventLogo.ts +5 -5
- package/src/hooks/public/usePublicFileDisplay.ts +2 -2
- package/src/hooks/public/usePublicRouteParams.ts +5 -5
- package/src/hooks/useAppConfig.ts +2 -2
- package/src/hooks/useEventTheme.test.ts +7 -7
- package/src/hooks/useEventTheme.ts +1 -4
- package/src/hooks/useFileDisplay.ts +2 -2
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
- package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
- package/src/providers/__tests__/EventProvider.test.tsx +61 -61
- package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
- package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
- package/src/styles/core.css +7 -0
- package/src/theming/__tests__/parseEventColours.test.ts +9 -3
- package/src/theming/parseEventColours.ts +22 -10
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
- package/src/utils/storage/README.md +1 -1
- package/cursor-rules/01-standards-compliance.mdc +0 -285
- package/cursor-rules/04-testing-standards.mdc +0 -270
- package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
- package/cursor-rules/06-code-quality.mdc +0 -311
- package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
- package/cursor-rules/10-error-handling-patterns.mdc +0 -179
- package/cursor-rules/11-performance-optimization.mdc +0 -169
- package/cursor-rules/12-ci-cd-integration.mdc +0 -150
- package/dist/DataTable-LRJL4IRV.js +0 -15
- package/dist/eslint-rules/rules/compliance.cjs +0 -348
- package/dist/eslint-rules/rules/components.cjs +0 -113
- package/dist/eslint-rules/rules/imports.cjs +0 -102
- package/docs/best-practices/README.md +0 -472
- package/docs/best-practices/accessibility.md +0 -604
- package/docs/best-practices/common-patterns.md +0 -516
- package/docs/best-practices/deployment.md +0 -1103
- package/docs/best-practices/performance.md +0 -1328
- package/docs/best-practices/security.md +0 -940
- package/docs/best-practices/testing.md +0 -1034
- package/docs/rbac/compliance/compliance-guide.md +0 -544
- package/docs/standards/01-standards-compliance.md +0 -188
- package/docs/standards/03-solid-principles.md +0 -39
- package/docs/standards/04-testing-standards.md +0 -36
- package/docs/standards/05-bug-reports-and-features.md +0 -27
- package/docs/standards/06-code-quality.md +0 -34
- package/docs/standards/07-tech-stack-compliance.md +0 -30
- package/docs/standards/10-error-handling-patterns.md +0 -401
- package/docs/standards/11-performance-optimization.md +0 -348
- package/docs/standards/12-ci-cd-integration.md +0 -370
- package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
- package/scripts/audit/audit-compliance.cjs +0 -1295
- package/scripts/audit/audit-components.cjs +0 -260
- package/scripts/audit/audit-rbac.cjs +0 -954
- package/scripts/audit/audit-standards.cjs +0 -1268
- package/scripts/audit/index.cjs +0 -1927
- package/src/components/DataTable/components/DataTableBody.tsx +0 -478
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
- package/src/components/DataTable/components/ExpandButton.tsx +0 -113
- package/src/components/DataTable/components/GroupHeader.tsx +0 -54
- package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
- package/src/components/DataTable/core/DataTableContext.tsx +0 -216
- package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
- package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
- package/src/components/DataTable/utils/debugTools.ts +0 -514
- package/src/eslint-rules/index.cjs +0 -22
- package/src/eslint-rules/rules/components.cjs +0 -113
- package/src/eslint-rules/rules/imports.cjs +0 -102
- package/src/eslint-rules/rules/rbac.cjs +0 -790
- package/src/eslint-rules/utils/helpers.cjs +0 -42
- package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# pace-core Compliance
|
|
1
|
+
# pace-core Compliance Standards
|
|
2
2
|
|
|
3
|
-
**🤖 Cursor Rule**: See [
|
|
3
|
+
**🤖 Cursor Rule**: See [01-pace-core-compliance.mdc](../../cursor-rules/01-pace-core-compliance.mdc) for AI-optimized directives that automatically enforce these standards.
|
|
4
4
|
|
|
5
5
|
This guide explains how to enforce pace-core usage patterns in consuming apps to ensure consistent design, reduce duplication, and maintain high code quality.
|
|
6
6
|
|
|
@@ -8,8 +8,8 @@ This guide explains how to enforce pace-core usage patterns in consuming apps to
|
|
|
8
8
|
|
|
9
9
|
pace-core provides a comprehensive enforcement system that includes:
|
|
10
10
|
|
|
11
|
-
1. **ESLint Rules** - Real-time linting during development (
|
|
12
|
-
2. **
|
|
11
|
+
1. **ESLint Rules** - Real-time linting during development (organized by standards: 01, 04, 05, 06, 07, 08)
|
|
12
|
+
2. **Audit Tool** - Comprehensive system-level analysis organized by standards (01-09)
|
|
13
13
|
3. **ESLint Config Preset** - Easy setup for consuming apps
|
|
14
14
|
4. **Cursor Rules Integration** - AI-assisted enforcement via Cursor IDE
|
|
15
15
|
|
|
@@ -63,16 +63,17 @@ npm install @jmruthers/pace-core
|
|
|
63
63
|
|
|
64
64
|
### Step 2: Setup ESLint (Recommended)
|
|
65
65
|
|
|
66
|
-
**
|
|
66
|
+
**Automated Setup (Easiest)**
|
|
67
67
|
|
|
68
|
-
Use the installation script to set up
|
|
68
|
+
Use the installation script to set up ESLint:
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
|
|
71
|
+
npm run setup:eslint
|
|
72
|
+
# or
|
|
73
|
+
node node_modules/@jmruthers/pace-core/scripts/install-eslint-config.cjs
|
|
72
74
|
```
|
|
73
75
|
|
|
74
76
|
This script will:
|
|
75
|
-
- ✅ Install Cursor rules to `.cursor/rules/`
|
|
76
77
|
- ✅ Configure ESLint to use pace-core rules
|
|
77
78
|
- ✅ Create `eslint.config.js` if it doesn't exist
|
|
78
79
|
- ✅ Add pace-core config to existing ESLint config
|
|
@@ -80,8 +81,6 @@ This script will:
|
|
|
80
81
|
|
|
81
82
|
**Options:**
|
|
82
83
|
- `--force` - Force update even if already configured
|
|
83
|
-
- `--skip-cursor` - Skip Cursor rules installation
|
|
84
|
-
- `--skip-eslint` - Skip ESLint config setup
|
|
85
84
|
|
|
86
85
|
**Option B: Manual Setup**
|
|
87
86
|
|
|
@@ -134,7 +133,27 @@ export default [
|
|
|
134
133
|
|
|
135
134
|
### Step 3: Setup Cursor Rules (Optional but Recommended)
|
|
136
135
|
|
|
137
|
-
|
|
136
|
+
**Automated Setup (Easiest)**
|
|
137
|
+
|
|
138
|
+
Use the installation script to set up Cursor rules:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm run setup:cursor-rules
|
|
142
|
+
# or
|
|
143
|
+
node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
This script will:
|
|
147
|
+
- ✅ Install Cursor rules to `.cursor/rules/`
|
|
148
|
+
- ✅ Create backups before updating existing rules
|
|
149
|
+
- ✅ Automatically update pace-core rules when they change
|
|
150
|
+
|
|
151
|
+
**Options:**
|
|
152
|
+
- `--force` - Force update even if already configured
|
|
153
|
+
|
|
154
|
+
**Manual Setup (Alternative)**
|
|
155
|
+
|
|
156
|
+
To manually enable AI-assisted enforcement in Cursor IDE, copy the pace-core cursor rules to your project:
|
|
138
157
|
|
|
139
158
|
```bash
|
|
140
159
|
# Create .cursor/rules directory if it doesn't exist
|
|
@@ -144,7 +163,7 @@ mkdir -p .cursor/rules
|
|
|
144
163
|
cp node_modules/@jmruthers/pace-core/cursor-rules/*.mdc .cursor/rules/
|
|
145
164
|
```
|
|
146
165
|
|
|
147
|
-
Or manually create `.cursor/rules/
|
|
166
|
+
Or manually create `.cursor/rules/01-pace-core-compliance.mdc` and reference the pace-core rules:
|
|
148
167
|
|
|
149
168
|
```markdown
|
|
150
169
|
---
|
|
@@ -155,7 +174,7 @@ alwaysApply: false
|
|
|
155
174
|
|
|
156
175
|
# pace-core Compliance
|
|
157
176
|
|
|
158
|
-
**📚 Full Documentation**: See [pace-core compliance docs](node_modules/@jmruthers/pace-core/docs/standards/
|
|
177
|
+
**📚 Full Documentation**: See [pace-core compliance docs](node_modules/@jmruthers/pace-core/docs/standards/1-pace-core-compliance-standards.md)
|
|
159
178
|
|
|
160
179
|
**🔧 ESLint Setup**: Ensure ESLint is configured with `@jmruthers/pace-core/eslint-config`
|
|
161
180
|
|
|
@@ -179,63 +198,32 @@ See the full documentation for complete rules and examples.
|
|
|
179
198
|
- Works alongside ESLint for comprehensive enforcement
|
|
180
199
|
- Provides explanations and examples in real-time
|
|
181
200
|
|
|
182
|
-
|
|
201
|
+
## ESLint Rules
|
|
183
202
|
|
|
184
|
-
|
|
203
|
+
pace-core provides ESLint rules organized by standards (01, 04, 05, 06, 07, 08). Rules are organized to match the 10-file standards structure:
|
|
185
204
|
|
|
186
|
-
**
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
export default [
|
|
194
|
-
{
|
|
195
|
-
plugins: {
|
|
196
|
-
'pace-core-compliance': {
|
|
197
|
-
rules: paceCoreRules
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
rules: {
|
|
201
|
-
'pace-core-compliance/no-restricted-imports': 'error',
|
|
202
|
-
'pace-core-compliance/prefer-pace-core-components': 'warn',
|
|
203
|
-
'pace-core-compliance/prefer-pace-core-hooks': 'warn',
|
|
204
|
-
'pace-core-compliance/prefer-pace-core-utils': 'warn',
|
|
205
|
-
'pace-core-compliance/no-local-component-duplication': 'error'
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
];
|
|
209
|
-
```
|
|
205
|
+
- **Standard 1 (pace-core Compliance)**: 6 rules
|
|
206
|
+
- **Standard 4 (Code Quality)**: 3 rules
|
|
207
|
+
- **Standard 5 (Styling)**: 1 rule
|
|
208
|
+
- **Standard 6 (Security & RBAC)**: 8 rules
|
|
209
|
+
- **Standard 7 (API & Tech Stack)**: 3 rules
|
|
210
|
+
- **Standard 8 (Testing)**: 1 rule
|
|
210
211
|
|
|
211
|
-
**
|
|
212
|
-
```javascript
|
|
213
|
-
// eslint.config.cjs
|
|
214
|
-
const paceCoreRules = require('@jmruthers/pace-core/eslint-rules').rules;
|
|
212
|
+
**Total: 22 rules** organized across 6 standards files.
|
|
215
213
|
|
|
216
|
-
|
|
217
|
-
{
|
|
218
|
-
plugins: {
|
|
219
|
-
'pace-core-compliance': {
|
|
220
|
-
rules: paceCoreRules
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
rules: {
|
|
224
|
-
'pace-core-compliance/no-restricted-imports': 'error',
|
|
225
|
-
'pace-core-compliance/prefer-pace-core-components': 'warn',
|
|
226
|
-
'pace-core-compliance/prefer-pace-core-hooks': 'warn',
|
|
227
|
-
'pace-core-compliance/prefer-pace-core-utils': 'warn',
|
|
228
|
-
'pace-core-compliance/no-local-component-duplication': 'error'
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
];
|
|
232
|
-
```
|
|
214
|
+
### Rule Organization
|
|
233
215
|
|
|
234
|
-
|
|
216
|
+
Rules are organized in `packages/core/eslint-rules/rules/`:
|
|
217
|
+
- `01-pace-core-compliance.cjs` - pace-core usage patterns
|
|
218
|
+
- `04-code-quality.cjs` - Naming conventions, component/type naming
|
|
219
|
+
- `05-styling.cjs` - Inline styles
|
|
220
|
+
- `06-security-rbac.cjs` - Security and RBAC patterns
|
|
221
|
+
- `07-api-tech-stack.cjs` - RPC naming, React 19+, import.meta.env
|
|
222
|
+
- `08-testing.cjs` - Test file naming
|
|
235
223
|
|
|
236
|
-
|
|
224
|
+
### Detailed Rule Descriptions
|
|
237
225
|
|
|
238
|
-
|
|
226
|
+
#### Import Rules
|
|
239
227
|
|
|
240
228
|
#### no-restricted-imports
|
|
241
229
|
|
|
@@ -603,25 +591,6 @@ The script generates a color-coded terminal report showing:
|
|
|
603
591
|
- 💡 **Suggestions** - Recommendations for improvement
|
|
604
592
|
- ✅ **Summary** - Overall compliance status
|
|
605
593
|
|
|
606
|
-
Example output:
|
|
607
|
-
```
|
|
608
|
-
═══════════════════════════════════════════════════════════
|
|
609
|
-
pace-core Compliance Report
|
|
610
|
-
═══════════════════════════════════════════════════════════
|
|
611
|
-
|
|
612
|
-
❌ Restricted Imports Found: 3
|
|
613
|
-
|
|
614
|
-
• src/components/CustomDialog.tsx:5
|
|
615
|
-
Import: @radix-ui/react-dialog
|
|
616
|
-
Reason: Use Dialog component from pace-core instead
|
|
617
|
-
|
|
618
|
-
Summary:
|
|
619
|
-
Total Issues: 3
|
|
620
|
-
- Restricted Imports: 3
|
|
621
|
-
- Duplicate Components/Hooks/Utils: 0
|
|
622
|
-
- Suggestions: 0
|
|
623
|
-
```
|
|
624
|
-
|
|
625
594
|
## Best Practices
|
|
626
595
|
|
|
627
596
|
### 1. Always Import from pace-core
|
|
@@ -683,116 +652,93 @@ Before creating a new component, check if pace-core already provides it:
|
|
|
683
652
|
2. Check `core-usage-manifest.json` for available components
|
|
684
653
|
3. Search pace-core exports
|
|
685
654
|
|
|
686
|
-
##
|
|
687
|
-
|
|
688
|
-
### ESLint Rules Not Working
|
|
689
|
-
|
|
690
|
-
1. **Verify plugin is loaded**: Check that the config is imported correctly:
|
|
691
|
-
```javascript
|
|
692
|
-
// In your eslint.config.js, add temporarily:
|
|
693
|
-
import paceCoreConfig from '@jmruthers/pace-core/eslint-config';
|
|
694
|
-
console.log('Config:', paceCoreConfig);
|
|
695
|
-
console.log('Has plugins:', paceCoreConfig[0]?.plugins);
|
|
696
|
-
```
|
|
697
|
-
|
|
698
|
-
2. **Check rule names**: Rules must be prefixed with `pace-core-compliance/`
|
|
699
|
-
|
|
700
|
-
3. **Verify manifest exists**: Rules load from `core-usage-manifest.json` in the pace-core package
|
|
701
|
-
|
|
702
|
-
4. **CommonJS/ES Module issues**: If you're using ES modules and rules aren't loading:
|
|
703
|
-
- Ensure you're using the config preset (Option 1) which handles this automatically
|
|
704
|
-
- Or use `createRequire` when importing rules directly (Option 2)
|
|
705
|
-
|
|
706
|
-
5. **Verify rules are available**: Check that the rules file exists:
|
|
707
|
-
```bash
|
|
708
|
-
ls node_modules/@jmruthers/pace-core/dist/eslint-rules/index.cjs
|
|
709
|
-
```
|
|
710
|
-
|
|
711
|
-
6. **Check rule count**: Verify all 15 rules are loaded:
|
|
712
|
-
```bash
|
|
713
|
-
node -e "const rules = require('@jmruthers/pace-core/eslint-rules'); console.log('Rules:', Object.keys(rules.rules).length);"
|
|
714
|
-
```
|
|
715
|
-
Should output: `Rules: 15`
|
|
716
|
-
|
|
717
|
-
### Static Analysis Script Errors
|
|
718
|
-
|
|
719
|
-
1. **Manifest not found**: Ensure `core-usage-manifest.json` exists in pace-core package
|
|
720
|
-
2. **No files scanned**: Check that you're running from the project root
|
|
721
|
-
3. **Permission errors**: Ensure script has read access to source files
|
|
722
|
-
|
|
723
|
-
### False Positives
|
|
724
|
-
|
|
725
|
-
If you encounter false positives:
|
|
726
|
-
|
|
727
|
-
1. **Component name conflicts**: If you have a legitimate reason to create a local component with a pace-core name, consider:
|
|
728
|
-
- Renaming your component
|
|
729
|
-
- Using a namespace/prefix
|
|
730
|
-
- Documenting why pace-core doesn't meet your needs
|
|
655
|
+
## MUST: Provider Nesting Order
|
|
731
656
|
|
|
732
|
-
|
|
657
|
+
**⚠️ CRITICAL: Provider nesting order matters!** Incorrect nesting causes React context errors.
|
|
733
658
|
|
|
734
|
-
|
|
659
|
+
**MUST** nest providers in this exact order (outermost to innermost):
|
|
735
660
|
|
|
736
|
-
|
|
661
|
+
1. `QueryClientProvider` (outermost)
|
|
662
|
+
2. `BrowserRouter`
|
|
663
|
+
3. `UnifiedAuthProvider`
|
|
664
|
+
4. `OrganisationProvider`
|
|
665
|
+
5. `App` (innermost)
|
|
737
666
|
|
|
738
|
-
```
|
|
739
|
-
|
|
740
|
-
|
|
667
|
+
```tsx
|
|
668
|
+
// ✅ CORRECT: main.tsx
|
|
669
|
+
import { BrowserRouter } from 'react-router-dom';
|
|
670
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
671
|
+
import { UnifiedAuthProvider, OrganisationProvider } from '@jmruthers/pace-core';
|
|
672
|
+
import { createClient } from '@supabase/supabase-js';
|
|
741
673
|
|
|
742
|
-
|
|
674
|
+
const queryClient = new QueryClient();
|
|
675
|
+
const supabase = createClient(
|
|
676
|
+
import.meta.env.VITE_SUPABASE_URL,
|
|
677
|
+
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
|
678
|
+
);
|
|
743
679
|
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
680
|
+
createRoot(document.getElementById("root")!).render(
|
|
681
|
+
<QueryClientProvider client={queryClient}>
|
|
682
|
+
<BrowserRouter>
|
|
683
|
+
<UnifiedAuthProvider supabaseClient={supabase} appName="YourApp">
|
|
684
|
+
<OrganisationProvider>
|
|
685
|
+
<App />
|
|
686
|
+
</OrganisationProvider>
|
|
687
|
+
</UnifiedAuthProvider>
|
|
688
|
+
</BrowserRouter>
|
|
689
|
+
</QueryClientProvider>
|
|
690
|
+
);
|
|
753
691
|
```
|
|
754
692
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
1. **Check ESLint can load the config**:
|
|
760
|
-
```bash
|
|
761
|
-
npx eslint --print-config src/App.tsx
|
|
762
|
-
```
|
|
763
|
-
Look for `pace-core-compliance` in the plugins section.
|
|
764
|
-
|
|
765
|
-
2. **Test with a violation**: Create a test file that imports a restricted library:
|
|
766
|
-
```typescript
|
|
767
|
-
// test-violation.ts
|
|
768
|
-
import { Dialog } from '@radix-ui/react-dialog'; // Should trigger error
|
|
769
|
-
```
|
|
770
|
-
Run ESLint and verify it reports the violation.
|
|
693
|
+
**Common mistakes to avoid:**
|
|
694
|
+
- ❌ `BrowserRouter` inside `UnifiedAuthProvider` (causes Router context errors)
|
|
695
|
+
- ❌ `UnifiedAuthProvider` wrapping `BrowserRouter` (causes context errors)
|
|
696
|
+
- ❌ Missing `BrowserRouter` (causes `useNavigate` errors)
|
|
771
697
|
|
|
772
|
-
|
|
773
|
-
```bash
|
|
774
|
-
npm run check:pace-core
|
|
775
|
-
```
|
|
698
|
+
## MUST: Vite Configuration
|
|
776
699
|
|
|
777
|
-
|
|
700
|
+
**⚠️ CRITICAL: Vite configuration prevents React context mismatches!**
|
|
778
701
|
|
|
779
|
-
|
|
780
|
-
- **Issues**: Report false positives or rule issues
|
|
781
|
-
- **Manifest**: Check `core-usage-manifest.json` for available exports
|
|
782
|
-
- **ESLint Config**: The config file is at `@jmruthers/pace-core/eslint-config` (CommonJS)
|
|
783
|
-
- **ESLint Rules**: The rules are at `@jmruthers/pace-core/eslint-rules` (CommonJS)
|
|
702
|
+
**MUST** configure Vite to exclude `@jmruthers/pace-core` and `react-router-dom` from pre-bundling:
|
|
784
703
|
|
|
785
|
-
|
|
704
|
+
```typescript
|
|
705
|
+
// vite.config.ts
|
|
706
|
+
import { defineConfig } from 'vite';
|
|
707
|
+
import react from '@vitejs/plugin-react';
|
|
708
|
+
import path from 'path';
|
|
709
|
+
|
|
710
|
+
export default defineConfig({
|
|
711
|
+
plugins: [react()],
|
|
712
|
+
resolve: {
|
|
713
|
+
alias: {
|
|
714
|
+
'@': path.resolve(__dirname, './src'),
|
|
715
|
+
},
|
|
716
|
+
// CRITICAL: Dedupe React dependencies
|
|
717
|
+
dedupe: ['react', 'react-dom', 'react-router-dom'],
|
|
718
|
+
},
|
|
719
|
+
optimizeDeps: {
|
|
720
|
+
include: [
|
|
721
|
+
'react',
|
|
722
|
+
'react-dom',
|
|
723
|
+
'react/jsx-runtime',
|
|
724
|
+
],
|
|
725
|
+
// CRITICAL: Exclude pace-core to prevent React context mismatches
|
|
726
|
+
exclude: ['@jmruthers/pace-core', 'react-router-dom'],
|
|
727
|
+
},
|
|
728
|
+
});
|
|
729
|
+
```
|
|
786
730
|
|
|
787
|
-
|
|
731
|
+
**Why this matters:**
|
|
732
|
+
- Pre-bundling `@jmruthers/pace-core` creates separate React instances
|
|
733
|
+
- This causes "useUnifiedAuth must be used within a UnifiedAuthProvider" errors
|
|
734
|
+
- Excluding it ensures pace-core uses the same React instance as your app
|
|
735
|
+
- `react-router-dom` must also be excluded and deduped to prevent Router context errors
|
|
788
736
|
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
- **Manifest**: `node_modules/@jmruthers/pace-core/core-usage-manifest.json`
|
|
795
|
-
- **Cursor Rules**: `node_modules/@jmruthers/pace-core/cursor-rules/*.mdc`
|
|
737
|
+
**If you encounter context errors:**
|
|
738
|
+
1. Verify `@jmruthers/pace-core` is in `optimizeDeps.exclude`
|
|
739
|
+
2. Verify `react-router-dom` is in both `resolve.dedupe` and `optimizeDeps.exclude`
|
|
740
|
+
3. Clear Vite cache: `rm -rf node_modules/.vite`
|
|
741
|
+
4. Restart dev server
|
|
796
742
|
|
|
797
743
|
## MUST: Use Secure Supabase Client
|
|
798
744
|
|
|
@@ -906,7 +852,23 @@ function useSecureSupabase(
|
|
|
906
852
|
|
|
907
853
|
**NO OTHER EXCEPTIONS ARE PERMITTED** - All other uses of `createClient()` are security violations and MUST be fixed.
|
|
908
854
|
|
|
909
|
-
### Detection / Audit
|
|
855
|
+
### Detection / Audit Tool
|
|
856
|
+
|
|
857
|
+
The audit tool (`npm run audit:pace-core`) performs comprehensive system-level analysis organized by standards:
|
|
858
|
+
|
|
859
|
+
- **Standard 1 (pace-core Compliance)**: Provider nesting, core styles import, RBAC setup, Vite aliases, secure Supabase client location, Cursor rules, ESLint config
|
|
860
|
+
- **Standard 2 (Project Structure)**: Directory structure, config files, import paths, test colocation, Supabase structure
|
|
861
|
+
- **Standard 3 (Architecture)**: Component boundaries, ApiResult usage
|
|
862
|
+
- **Standard 4 (Code Quality)**: TypeScript config, test coverage config
|
|
863
|
+
- **Standard 5 (Styling)**: app.css structure, Tailwind v4 config
|
|
864
|
+
- **Standard 6 (Security & RBAC)**: RLS policies, PagePermissionGuard coverage, Edge Functions RBAC
|
|
865
|
+
- **Standard 7 (API & Tech Stack)**: RPC naming in SQL, tech stack versions, Vite config
|
|
866
|
+
- **Standard 8 (Testing & Documentation)**: Test timeout config, testing tools, test structure
|
|
867
|
+
- **Standard 9 (Operations)**: Error handling patterns, CI/CD config, error boundaries
|
|
868
|
+
|
|
869
|
+
**Reference**: See [packages/core/audit-tool/](../../audit-tool/) for audit tool implementation.
|
|
870
|
+
|
|
871
|
+
### Detection / Audit (Legacy)
|
|
910
872
|
|
|
911
873
|
- `rg "createClient\(" src` must return **exactly ONE match** in the file that creates the base client for `UnifiedAuthProvider`.
|
|
912
874
|
- That file MUST be one of: `main.tsx`, `App.tsx`, or `lib/supabase.ts` (or `.jsx`/`.js` equivalents).
|
|
@@ -938,8 +900,10 @@ If you encounter a situation where a rule seems to conflict with a legitimate re
|
|
|
938
900
|
**Example of proper documentation:**
|
|
939
901
|
```tsx
|
|
940
902
|
// @pace-core-compliance-exception: Legacy integration requires direct Supabase client
|
|
941
|
-
//
|
|
942
|
-
//
|
|
903
|
+
// Reason: Third-party service requires unauthenticated client for initial handshake
|
|
904
|
+
// Migration plan: Migrate to useSecureSupabase() when legacy system is updated (Q2 2025)
|
|
905
|
+
// Tracking issue: https://github.com/your-org/pace-core/issues/123
|
|
906
|
+
// Expected removal date: Q2 2025
|
|
943
907
|
const legacyClient = createClient(...);
|
|
944
908
|
```
|
|
945
909
|
|
|
@@ -958,10 +922,65 @@ During audits, documented exceptions will be:
|
|
|
958
922
|
|
|
959
923
|
**Invalid exceptions** (undocumented, unnecessary, or security-related) will be flagged as violations requiring remediation.
|
|
960
924
|
|
|
925
|
+
## Troubleshooting
|
|
926
|
+
|
|
927
|
+
### ESLint Rules Not Working
|
|
928
|
+
|
|
929
|
+
1. **Verify plugin is loaded**: Check that the config is imported correctly
|
|
930
|
+
2. **Check rule names**: Rules must be prefixed with `pace-core-compliance/`
|
|
931
|
+
3. **Verify manifest exists**: Rules load from `core-usage-manifest.json` in the pace-core package
|
|
932
|
+
4. **CommonJS/ES Module issues**: If you're using ES modules and rules aren't loading, ensure you're using the config preset which handles this automatically
|
|
933
|
+
5. **Verify rules are available**: Check that the rules file exists
|
|
934
|
+
6. **Check rule count**: Verify all 15 rules are loaded
|
|
935
|
+
|
|
936
|
+
### Static Analysis Script Errors
|
|
937
|
+
|
|
938
|
+
1. **Manifest not found**: Ensure `core-usage-manifest.json` exists in pace-core package
|
|
939
|
+
2. **No files scanned**: Check that you're running from the project root
|
|
940
|
+
3. **Permission errors**: Ensure script has read access to source files
|
|
941
|
+
|
|
942
|
+
### False Positives
|
|
943
|
+
|
|
944
|
+
If you encounter false positives:
|
|
945
|
+
|
|
946
|
+
1. **Component name conflicts**: If you have a legitimate reason to create a local component with a pace-core name, consider:
|
|
947
|
+
- Renaming your component
|
|
948
|
+
- Using a namespace/prefix
|
|
949
|
+
- Documenting why pace-core doesn't meet your needs
|
|
950
|
+
|
|
951
|
+
2. **Hook/Util patterns**: The pattern matching may flag similar names. Review the suggestion and decide if migration makes sense.
|
|
952
|
+
|
|
953
|
+
## Verification
|
|
954
|
+
|
|
955
|
+
After setting up the ESLint config, verify it's working:
|
|
956
|
+
|
|
957
|
+
1. **Check ESLint can load the config**:
|
|
958
|
+
```bash
|
|
959
|
+
npx eslint --print-config src/App.tsx
|
|
960
|
+
```
|
|
961
|
+
Look for `pace-core-compliance` in the plugins section.
|
|
962
|
+
|
|
963
|
+
2. **Test with a violation**: Create a test file that imports a restricted library:
|
|
964
|
+
```typescript
|
|
965
|
+
// test-violation.ts
|
|
966
|
+
import { Dialog } from '@radix-ui/react-dialog'; // Should trigger error
|
|
967
|
+
```
|
|
968
|
+
Run ESLint and verify it reports the violation.
|
|
969
|
+
|
|
970
|
+
3. **Run static analysis**: Use the compliance script to get a full report:
|
|
971
|
+
```bash
|
|
972
|
+
npm run check:pace-core
|
|
973
|
+
```
|
|
974
|
+
|
|
961
975
|
## Related Documentation
|
|
962
976
|
|
|
963
|
-
- [
|
|
964
|
-
- [
|
|
965
|
-
- [
|
|
966
|
-
- [
|
|
977
|
+
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|
|
978
|
+
- [Project Structure](./2-project-structure-standards.md) - Project structure and organization
|
|
979
|
+
- [Security & RBAC](./6-security-rbac-standards.md) - RBAC and security standards
|
|
980
|
+
- [API & Tech Stack](./7-api-tech-stack-standards.md) - API and tech stack standards
|
|
981
|
+
|
|
982
|
+
---
|
|
967
983
|
|
|
984
|
+
**Last Updated:** 2025-01-28
|
|
985
|
+
**Version:** 2.0.0
|
|
986
|
+
**Applies to:** All consuming apps using `@jmruthers/pace-core`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Project Structure
|
|
1
|
+
# Project Structure Standards
|
|
2
2
|
|
|
3
3
|
**🤖 Cursor Rule**: See [02-project-structure.mdc](../../cursor-rules/02-project-structure.mdc) for AI-optimized directives that automatically enforce this structure.
|
|
4
4
|
|
|
@@ -37,8 +37,8 @@ Every consuming app **MUST** follow this base structure:
|
|
|
37
37
|
your-app/
|
|
38
38
|
├── .cursor/
|
|
39
39
|
│ └── rules/ # Cursor rules (pace-core + local)
|
|
40
|
-
│ ├── 00-
|
|
41
|
-
│ ├── 01-
|
|
40
|
+
│ ├── 00-standards-overview.mdc
|
|
41
|
+
│ ├── 01-pace-core-compliance.mdc
|
|
42
42
|
│ ├── 02-project-structure.mdc
|
|
43
43
|
│ └── [local-rules].mdc
|
|
44
44
|
│
|
|
@@ -79,7 +79,7 @@ your-app/
|
|
|
79
79
|
│ │
|
|
80
80
|
│ ├── App.tsx # Main app component
|
|
81
81
|
│ ├── main.tsx # Application entry point
|
|
82
|
-
│ └── app.css # Global styles (MUST follow
|
|
82
|
+
│ └── app.css # Global styles (MUST follow 5-styling-standards.md)
|
|
83
83
|
│
|
|
84
84
|
├── supabase/ # Supabase configuration
|
|
85
85
|
│ ├── migrations/ # Database migrations
|
|
@@ -762,12 +762,6 @@ your-app/
|
|
|
762
762
|
find src -type f -name "*.tsx" -exec sed -i '' 's|from.*EventCard|from "@/components/events/EventCard"|g' {} +
|
|
763
763
|
```
|
|
764
764
|
|
|
765
|
-
Or use a script:
|
|
766
|
-
```typescript
|
|
767
|
-
// scripts/update-imports.ts
|
|
768
|
-
// Update imports programmatically
|
|
769
|
-
```
|
|
770
|
-
|
|
771
765
|
#### Phase 4: Cleanup
|
|
772
766
|
|
|
773
767
|
1. **Remove Duplicate pace-core Components**
|
|
@@ -796,7 +790,6 @@ your-app/
|
|
|
796
790
|
```bash
|
|
797
791
|
# Check pace-core compliance
|
|
798
792
|
node node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs
|
|
799
|
-
|
|
800
793
|
```
|
|
801
794
|
|
|
802
795
|
3. **Verify Build**
|
|
@@ -849,26 +842,6 @@ your-app/
|
|
|
849
842
|
- Ensure path aliases work in test environment
|
|
850
843
|
- Update test setup files
|
|
851
844
|
|
|
852
|
-
### Migration Tools
|
|
853
|
-
|
|
854
|
-
**Automated Import Updates:**
|
|
855
|
-
```bash
|
|
856
|
-
# Using jscodeshift (if available)
|
|
857
|
-
npx jscodeshift -t transform-imports src/
|
|
858
|
-
```
|
|
859
|
-
|
|
860
|
-
**Manual Find-and-Replace:**
|
|
861
|
-
```bash
|
|
862
|
-
# Update specific import patterns
|
|
863
|
-
find src -type f -name "*.tsx" -exec sed -i '' 's|old/path|new/path|g' {} +
|
|
864
|
-
```
|
|
865
|
-
|
|
866
|
-
**TypeScript Compiler:**
|
|
867
|
-
```bash
|
|
868
|
-
# Check for import errors
|
|
869
|
-
npx tsc --noEmit
|
|
870
|
-
```
|
|
871
|
-
|
|
872
845
|
---
|
|
873
846
|
|
|
874
847
|
## Structure Checklist
|
|
@@ -960,26 +933,17 @@ import { Button } from '@jmruthers/pace-core';
|
|
|
960
933
|
|
|
961
934
|
---
|
|
962
935
|
|
|
963
|
-
## Getting Help
|
|
964
|
-
|
|
965
|
-
- **Documentation**: See [pace-core documentation](../../README.md)
|
|
966
|
-
- **Standards**: Review other standards in this directory
|
|
967
|
-
- **Cursor Rules**: Check `.cursor/rules/` for automated enforcement
|
|
968
|
-
|
|
969
|
-
---
|
|
970
|
-
|
|
971
936
|
## Related Documentation
|
|
972
937
|
|
|
973
|
-
- [
|
|
974
|
-
- [
|
|
975
|
-
- [
|
|
976
|
-
- [
|
|
977
|
-
- [
|
|
978
|
-
- [
|
|
938
|
+
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|
|
939
|
+
- [pace-core Compliance](./1-pace-core-compliance-standards.md) - pace-core usage patterns
|
|
940
|
+
- [Styling Standards](./5-styling-standards.md) - **CRITICAL: Required CSS configuration**
|
|
941
|
+
- [Code Quality](./4-code-quality-standards.md) - Code style and TypeScript standards
|
|
942
|
+
- [API & Tech Stack](./7-api-tech-stack-standards.md) - Tech stack requirements
|
|
943
|
+
- [Architecture](./3-architecture-standards.md) - Architecture principles
|
|
979
944
|
|
|
980
945
|
---
|
|
981
946
|
|
|
982
947
|
**Last Updated:** 2025-01-28
|
|
983
|
-
**Version:**
|
|
948
|
+
**Version:** 2.0.0
|
|
984
949
|
**Applies to:** All consuming apps using `@jmruthers/pace-core`
|
|
985
|
-
|