@jmruthers/pace-core 0.6.5 → 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/CHANGELOG.md +104 -0
- package/README.md +5 -403
- package/audit-tool/00-dependencies.cjs +394 -0
- 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/core-usage-manifest.json +93 -0
- package/cursor-rules/00-standards-overview.mdc +156 -0
- package/cursor-rules/01-pace-core-compliance.mdc +586 -0
- package/cursor-rules/02-project-structure.mdc +42 -4
- package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +126 -10
- package/cursor-rules/04-code-quality.mdc +419 -0
- package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +104 -34
- package/cursor-rules/06-security-rbac.mdc +518 -0
- 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/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
- package/dist/DataTable-7PMH7XN7.js +15 -0
- package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
- package/dist/{PublicPageProvider-QTFVrL-Z.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +33 -72
- package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
- package/dist/api-Y4MQWOFW.js +4 -0
- package/dist/audit-MYQXYZFU.js +3 -0
- package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
- package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
- package/dist/{chunk-UPPMRMYG.js → chunk-5X4QLXRG.js} +73 -151
- package/dist/chunk-6F3IILHI.js +62 -0
- package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
- package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
- package/dist/{chunk-FMUCXFII.js → chunk-7ILTDCL2.js} +9 -5
- package/dist/{chunk-M43Y4SSO.js → chunk-A3W6LW53.js} +15 -13
- package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
- package/dist/{chunk-HU2C6SSC.js → chunk-BM4CQ5P3.js} +606 -559
- package/dist/chunk-C7NSAPTL.js +1 -0
- package/dist/{chunk-J36DSWQK.js → chunk-FEJLJNWA.js} +7 -41
- package/dist/{chunk-IHB5DR3H.js → chunk-FTCRZOG2.js} +188 -387
- package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
- package/dist/chunk-GHYHJTYV.js +994 -0
- package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
- package/dist/{chunk-FFQEQTNW.js → chunk-IUBRCBSY.js} +134 -45
- package/dist/{chunk-6COVEUS7.js → chunk-JGWDVX64.js} +983 -1034
- package/dist/{chunk-RGAWHO7N.js → chunk-L4XMVJKY.js} +77 -222
- package/dist/chunk-MBADTM7L.js +64 -0
- package/dist/{chunk-M7MPQISP.js → chunk-OJ4SKRSV.js} +3 -16
- package/dist/{chunk-IVOFDYWT.js → chunk-Q7Q7V5NV.js} +2109 -1604
- package/dist/{chunk-JGRYX5UX.js → chunk-S7DKJPLT.js} +29 -58
- package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
- package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
- package/dist/{chunk-NTM7ZSB6.js → chunk-VBCS3DUA.js} +261 -168
- package/dist/{chunk-EFN2EIMK.js → chunk-ZFYPMX46.js} +271 -87
- package/dist/{chunk-L4OXEN46.js → chunk-ZKAWKYT4.js} +10 -24
- package/dist/components.d.ts +7 -5
- package/dist/components.js +46 -257
- package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
- package/dist/eslint-rules/index.cjs +35 -0
- package/{src/eslint-rules/pace-core-compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +234 -235
- 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/06-security-rbac.cjs +806 -0
- package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
- package/dist/eslint-rules/rules/08-testing.cjs +94 -0
- package/dist/eslint-rules/utils/helpers.cjs +42 -0
- package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
- package/dist/hooks.d.ts +6 -6
- package/dist/hooks.js +62 -172
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +12 -11
- package/dist/index.js +67 -660
- package/dist/providers.d.ts +2 -2
- package/dist/providers.js +8 -35
- package/dist/rbac/eslint-rules.d.ts +46 -44
- package/dist/rbac/eslint-rules.js +7 -4
- package/dist/rbac/index.d.ts +109 -586
- package/dist/rbac/index.js +14 -207
- package/dist/styles/index.js +2 -12
- package/dist/theming/runtime.d.ts +14 -1
- package/dist/theming/runtime.js +3 -19
- package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
- package/dist/{types-CkbwOr4Y.d.ts → types-DXstZpNI.d.ts} +4 -17
- package/dist/types-t9H8qKRw.d.ts +55 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +7 -94
- package/dist/{usePublicRouteParams-ClnV4tnv.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +20 -20
- package/dist/utils.d.ts +24 -117
- package/dist/utils.js +54 -392
- package/docs/README.md +17 -7
- package/docs/api/README.md +4 -402
- package/docs/api/modules.md +301 -871
- package/docs/api-reference/components.md +21 -21
- package/docs/api-reference/deprecated.md +31 -6
- package/docs/api-reference/hooks.md +80 -80
- package/docs/api-reference/rpc-functions.md +78 -3
- 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/cursor-rules.md +3 -23
- package/docs/getting-started/dependencies.md +650 -0
- 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/installation-guide.md +20 -7
- package/docs/getting-started/quick-reference.md +4 -4
- package/docs/getting-started/quick-start.md +23 -12
- 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 +5 -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/MIGRATION_GUIDE.md +819 -0
- package/docs/rbac/RBAC_CONTRACT.md +724 -0
- package/docs/rbac/README.md +17 -8
- package/docs/rbac/advanced-patterns.md +6 -6
- package/docs/rbac/api-reference.md +20 -20
- package/docs/rbac/edge-functions-guide.md +376 -0
- 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 -35
- 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/1-pace-core-compliance-standards.md +986 -0
- package/docs/standards/2-project-structure-standards.md +949 -0
- package/docs/standards/3-architecture-standards.md +606 -0
- package/docs/standards/4-code-quality-standards.md +728 -0
- package/docs/standards/5-styling-standards.md +348 -0
- package/docs/standards/{07-rbac-and-rls-standard.md → 6-security-rbac-standards.md} +269 -66
- 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 +185 -57
- 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/docs/troubleshooting/organisation-context-setup.md +42 -19
- package/eslint-config-pace-core.cjs +33 -6
- package/package.json +35 -23
- package/scripts/install-cursor-rules.cjs +25 -6
- package/scripts/install-eslint-config.cjs +284 -0
- package/src/__tests__/fixtures/supabase.ts +1 -1
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +3 -3
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +13 -13
- package/src/__tests__/helpers/component-test-utils.tsx +1 -1
- package/src/__tests__/helpers/supabaseMock.ts +2 -2
- package/src/__tests__/integration/UserProfile.test.tsx +14 -14
- package/src/__tests__/public-recipe-view.test.ts +38 -9
- 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/Button/Button.tsx +5 -1
- package/src/components/Calendar/Calendar.tsx +201 -47
- package/src/components/ContextSelector/ContextSelector.tsx +106 -119
- 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/DataTableCore.tsx +186 -13
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
- package/src/components/DataTable/components/DataTableLayout.tsx +35 -21
- package/src/components/DataTable/components/EditFields.tsx +23 -3
- package/src/components/DataTable/components/EditableRow.tsx +12 -9
- 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/RowComponent.tsx +12 -0
- 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/hooks/usePermissionTracking.ts +0 -4
- package/src/components/DataTable/components/index.ts +2 -1
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
- package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
- package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
- package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
- package/src/components/DataTable/types.ts +5 -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 +10 -9
- package/src/components/Dialog/Dialog.test.tsx +128 -104
- package/src/components/Dialog/Dialog.tsx +742 -24
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
- package/src/components/FileDisplay/FileDisplay.test.tsx +4 -2
- package/src/components/FileDisplay/FileDisplay.tsx +23 -17
- package/src/components/FileUpload/FileUpload.test.tsx +52 -14
- package/src/components/FileUpload/FileUpload.tsx +112 -130
- package/src/components/Form/Form.test.tsx +6 -8
- package/src/components/Form/Form.tsx +365 -4
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
- package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +11 -15
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
- package/src/components/Progress/Progress.tsx +2 -4
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
- package/src/components/Select/Select.tsx +109 -98
- package/src/components/Select/types.ts +4 -1
- package/src/components/UserMenu/UserMenu.tsx +9 -6
- package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
- package/src/hooks/__tests__/hooks.integration.test.tsx +55 -57
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
- package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
- package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
- package/src/hooks/public/usePublicEvent.ts +67 -195
- package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
- package/src/hooks/public/usePublicEventLogo.ts +24 -14
- package/src/hooks/public/usePublicFileDisplay.ts +2 -2
- package/src/hooks/public/usePublicRouteParams.ts +5 -5
- package/src/hooks/useAppConfig.ts +28 -26
- package/src/hooks/useEventTheme.test.ts +217 -239
- package/src/hooks/useEventTheme.ts +16 -28
- package/src/hooks/useFileDisplay.ts +2 -2
- package/src/hooks/useOrganisationPermissions.ts +5 -7
- package/src/hooks/useQueryCache.ts +0 -1
- package/src/hooks/useSessionDraft.ts +380 -0
- package/src/hooks/useSessionRestoration.ts +3 -1
- package/src/icons/index.ts +27 -0
- package/src/index.ts +5 -0
- package/src/providers/OrganisationProvider.tsx +23 -14
- 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/EventServiceProvider.tsx +1 -24
- package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +13 -10
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
- package/src/rbac/adapters.tsx +7 -295
- package/src/rbac/api.test.ts +44 -56
- package/src/rbac/api.ts +10 -17
- package/src/rbac/cache-invalidation.ts +0 -1
- package/src/rbac/compliance/index.ts +10 -0
- package/src/rbac/compliance/pattern-detector.ts +553 -0
- package/src/rbac/compliance/runtime-compliance.ts +22 -0
- package/src/rbac/components/AccessDenied.tsx +150 -0
- package/src/rbac/components/NavigationGuard.tsx +12 -20
- package/src/rbac/components/PagePermissionGuard.tsx +4 -24
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
- package/src/rbac/components/index.ts +3 -41
- package/src/rbac/eslint-rules.js +1 -1
- package/src/rbac/hooks/index.ts +0 -3
- package/src/rbac/hooks/permissions/index.ts +0 -3
- package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
- package/src/rbac/hooks/usePermissions.ts +0 -3
- package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
- package/src/rbac/hooks/useResolvedScope.ts +58 -140
- package/src/rbac/hooks/useResourcePermissions.test.ts +124 -38
- package/src/rbac/hooks/useResourcePermissions.ts +139 -48
- package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
- package/src/rbac/hooks/useRoleManagement.ts +147 -19
- package/src/rbac/hooks/useSecureSupabase.ts +4 -8
- package/src/rbac/index.ts +7 -9
- package/src/rbac/utils/contextValidator.ts +9 -7
- package/src/services/AuthService.ts +130 -18
- package/src/services/EventService.ts +4 -97
- package/src/services/InactivityService.ts +16 -0
- package/src/services/OrganisationService.ts +7 -44
- package/src/services/__tests__/OrganisationService.test.ts +26 -8
- package/src/services/base/BaseService.ts +0 -3
- 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/types/database.generated.ts +4733 -3809
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
- package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
- package/src/utils/context/organisationContext.test.ts +13 -28
- package/src/utils/context/organisationContext.ts +21 -52
- package/src/utils/dynamic/dynamicUtils.ts +1 -1
- package/src/utils/file-reference/index.ts +39 -15
- package/src/utils/formatting/formatDateTime.test.ts +3 -2
- package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
- package/src/utils/index.ts +4 -1
- package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
- package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
- package/src/utils/persistence/keyDerivation.ts +304 -0
- package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
- package/src/utils/security/secureStorage.ts +5 -5
- package/src/utils/storage/README.md +1 -1
- package/src/utils/storage/helpers.ts +3 -3
- package/src/utils/supabase/createBaseClient.ts +147 -0
- package/src/utils/timezone/timezone.test.ts +1 -2
- package/src/utils/timezone/timezone.ts +1 -1
- package/src/utils/validation/csrf.ts +4 -4
- package/cursor-rules/00-pace-core-compliance.mdc +0 -331
- package/cursor-rules/01-standards-compliance.mdc +0 -244
- package/cursor-rules/04-testing-standards.mdc +0 -268
- package/cursor-rules/05-bug-reports-and-features.mdc +0 -246
- package/cursor-rules/06-code-quality.mdc +0 -309
- package/cursor-rules/07-tech-stack-compliance.mdc +0 -214
- package/cursor-rules/CHANGELOG.md +0 -119
- package/cursor-rules/README.md +0 -192
- package/dist/DataTable-AOVNCPTX.js +0 -175
- package/dist/DataTable-AOVNCPTX.js.map +0 -1
- package/dist/UnifiedAuthProvider-4SBX4LU5.js +0 -18
- package/dist/UnifiedAuthProvider-4SBX4LU5.js.map +0 -1
- package/dist/api-O6HTBX5Y.js +0 -52
- package/dist/api-O6HTBX5Y.js.map +0 -1
- package/dist/audit-V53FV5AG.js +0 -17
- package/dist/audit-V53FV5AG.js.map +0 -1
- package/dist/chunk-5DRSZLL2.js.map +0 -1
- package/dist/chunk-63FOKYGO.js.map +0 -1
- package/dist/chunk-6COVEUS7.js.map +0 -1
- package/dist/chunk-AFVQODI2.js +0 -263
- package/dist/chunk-AFVQODI2.js.map +0 -1
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-E66EQZE6.js.map +0 -1
- package/dist/chunk-EFN2EIMK.js.map +0 -1
- package/dist/chunk-FFQEQTNW.js.map +0 -1
- package/dist/chunk-FMUCXFII.js.map +0 -1
- package/dist/chunk-G37KK66H.js.map +0 -1
- package/dist/chunk-G7QEZTYQ.js +0 -2053
- package/dist/chunk-G7QEZTYQ.js.map +0 -1
- package/dist/chunk-HU2C6SSC.js.map +0 -1
- package/dist/chunk-IHB5DR3H.js.map +0 -1
- package/dist/chunk-IVOFDYWT.js.map +0 -1
- package/dist/chunk-J36DSWQK.js.map +0 -1
- package/dist/chunk-JGRYX5UX.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js +0 -1
- package/dist/chunk-KQCRWDSA.js.map +0 -1
- package/dist/chunk-L4OXEN46.js.map +0 -1
- package/dist/chunk-LMC26NLJ.js +0 -84
- package/dist/chunk-LMC26NLJ.js.map +0 -1
- package/dist/chunk-M43Y4SSO.js.map +0 -1
- package/dist/chunk-M7MPQISP.js.map +0 -1
- package/dist/chunk-NTM7ZSB6.js.map +0 -1
- package/dist/chunk-PWLANIRT.js.map +0 -1
- package/dist/chunk-QXHPKYJV.js.map +0 -1
- package/dist/chunk-RGAWHO7N.js.map +0 -1
- package/dist/chunk-UPPMRMYG.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js.map +0 -1
- package/dist/chunk-ZSAAAMVR.js.map +0 -1
- package/dist/components.js.map +0 -1
- package/dist/contextValidator-5OGXSPKS.js +0 -9
- package/dist/contextValidator-5OGXSPKS.js.map +0 -1
- package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
- package/dist/hooks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers.js.map +0 -1
- package/dist/rbac/eslint-rules.js.map +0 -1
- package/dist/rbac/index.js.map +0 -1
- package/dist/styles/index.js.map +0 -1
- package/dist/theming/runtime.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/docs/best-practices/README.md +0 -472
- package/docs/best-practices/accessibility.md +0 -601
- 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-architecture-standard.md +0 -44
- package/docs/standards/02-api-and-rpc-standard.md +0 -39
- package/docs/standards/03-component-standard.md +0 -32
- package/docs/standards/04-code-style-standard.md +0 -32
- package/docs/standards/05-security-standard.md +0 -44
- package/docs/standards/06-testing-and-docs-standard.md +0 -29
- package/docs/standards/pace-core-compliance.md +0 -432
- package/scripts/audit/core/checks/accessibility.cjs +0 -197
- package/scripts/audit/core/checks/api-usage.cjs +0 -191
- package/scripts/audit/core/checks/bundle.cjs +0 -142
- package/scripts/audit/core/checks/compliance.cjs +0 -2706
- package/scripts/audit/core/checks/config.cjs +0 -54
- package/scripts/audit/core/checks/coverage.cjs +0 -84
- package/scripts/audit/core/checks/dependencies.cjs +0 -994
- package/scripts/audit/core/checks/documentation.cjs +0 -268
- package/scripts/audit/core/checks/environment.cjs +0 -116
- package/scripts/audit/core/checks/error-handling.cjs +0 -340
- package/scripts/audit/core/checks/forms.cjs +0 -172
- package/scripts/audit/core/checks/heuristics.cjs +0 -68
- package/scripts/audit/core/checks/hooks.cjs +0 -334
- package/scripts/audit/core/checks/imports.cjs +0 -244
- package/scripts/audit/core/checks/performance.cjs +0 -325
- package/scripts/audit/core/checks/routes.cjs +0 -117
- package/scripts/audit/core/checks/state.cjs +0 -130
- package/scripts/audit/core/checks/structure.cjs +0 -65
- package/scripts/audit/core/checks/style.cjs +0 -584
- package/scripts/audit/core/checks/testing.cjs +0 -122
- package/scripts/audit/core/checks/typescript.cjs +0 -61
- package/scripts/audit/core/scanner.cjs +0 -199
- package/scripts/audit/core/utils.cjs +0 -137
- package/scripts/audit/index.cjs +0 -223
- package/scripts/audit/reporters/console.cjs +0 -151
- package/scripts/audit/reporters/json.cjs +0 -54
- package/scripts/audit/reporters/markdown.cjs +0 -124
- package/scripts/audit-consuming-app.cjs +0 -86
- package/src/components/DataTable/components/DataTableBody.tsx +0 -454
- 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/pace-core-compliance.js +0 -638
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
- package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
- package/src/rbac/components/NavigationProvider.test.tsx +0 -481
- package/src/rbac/components/NavigationProvider.tsx +0 -345
- package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
- package/src/rbac/components/PagePermissionProvider.tsx +0 -279
- package/src/rbac/components/PermissionEnforcer.tsx +0 -312
- package/src/rbac/components/RoleBasedRouter.tsx +0 -440
- package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
- package/src/rbac/components/SecureDataProvider.tsx +0 -339
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
package/scripts/audit/index.cjs
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Main Audit Entry Point
|
|
5
|
-
* @package @jmruthers/pace-core
|
|
6
|
-
* @module Audit
|
|
7
|
-
*
|
|
8
|
-
* CLI interface for running comprehensive audits
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const path = require('path');
|
|
12
|
-
const Scanner = require('./core/scanner.cjs');
|
|
13
|
-
const { findProjectRoot, getPackageInfo, getPaceCoreVersion, colors } = require('./core/utils.cjs');
|
|
14
|
-
const consoleReporter = require('./reporters/console.cjs');
|
|
15
|
-
const markdownReporter = require('./reporters/markdown.cjs');
|
|
16
|
-
const jsonReporter = require('./reporters/json.cjs');
|
|
17
|
-
|
|
18
|
-
// Import all checks
|
|
19
|
-
const complianceCheck = require('./core/checks/compliance.cjs');
|
|
20
|
-
const structureCheck = require('./core/checks/structure.cjs');
|
|
21
|
-
const configCheck = require('./core/checks/config.cjs');
|
|
22
|
-
const typescriptCheck = require('./core/checks/typescript.cjs');
|
|
23
|
-
const coverageCheck = require('./core/checks/coverage.cjs');
|
|
24
|
-
const heuristicsCheck = require('./core/checks/heuristics.cjs');
|
|
25
|
-
const importsCheck = require('./core/checks/imports.cjs');
|
|
26
|
-
const hooksCheck = require('./core/checks/hooks.cjs');
|
|
27
|
-
const performanceCheck = require('./core/checks/performance.cjs');
|
|
28
|
-
const dependenciesCheck = require('./core/checks/dependencies.cjs');
|
|
29
|
-
const errorHandlingCheck = require('./core/checks/error-handling.cjs');
|
|
30
|
-
const bundleCheck = require('./core/checks/bundle.cjs');
|
|
31
|
-
const accessibilityCheck = require('./core/checks/accessibility.cjs');
|
|
32
|
-
const styleCheck = require('./core/checks/style.cjs');
|
|
33
|
-
const stateCheck = require('./core/checks/state.cjs');
|
|
34
|
-
const apiUsageCheck = require('./core/checks/api-usage.cjs');
|
|
35
|
-
const documentationCheck = require('./core/checks/documentation.cjs');
|
|
36
|
-
const testingCheck = require('./core/checks/testing.cjs');
|
|
37
|
-
const environmentCheck = require('./core/checks/environment.cjs');
|
|
38
|
-
const routesCheck = require('./core/checks/routes.cjs');
|
|
39
|
-
const formsCheck = require('./core/checks/forms.cjs');
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Parse CLI arguments
|
|
43
|
-
*/
|
|
44
|
-
function parseArgs() {
|
|
45
|
-
const args = process.argv.slice(2);
|
|
46
|
-
const options = {
|
|
47
|
-
checks: [],
|
|
48
|
-
exclude: [],
|
|
49
|
-
reporters: ['console', 'markdown'],
|
|
50
|
-
verbose: false,
|
|
51
|
-
json: false
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
for (let i = 0; i < args.length; i++) {
|
|
55
|
-
const arg = args[i];
|
|
56
|
-
|
|
57
|
-
if (arg === '--check' || arg === '-c') {
|
|
58
|
-
options.checks.push(args[++i]);
|
|
59
|
-
} else if (arg === '--exclude' || arg === '-e') {
|
|
60
|
-
options.exclude.push(args[++i]);
|
|
61
|
-
} else if (arg === '--reporter' || arg === '-r') {
|
|
62
|
-
options.reporters = [args[++i]];
|
|
63
|
-
} else if (arg === '--verbose' || arg === '-v') {
|
|
64
|
-
options.verbose = true;
|
|
65
|
-
} else if (arg === '--json') {
|
|
66
|
-
options.json = true;
|
|
67
|
-
options.reporters = ['json'];
|
|
68
|
-
} else if (arg === '--help' || arg === '-h') {
|
|
69
|
-
printHelp();
|
|
70
|
-
process.exit(0);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return options;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Print help message
|
|
79
|
-
*/
|
|
80
|
-
function printHelp() {
|
|
81
|
-
console.log(`
|
|
82
|
-
${colors.bold}pace-core Audit Tool${colors.reset}
|
|
83
|
-
|
|
84
|
-
Usage: node audit/index.cjs [options]
|
|
85
|
-
|
|
86
|
-
Options:
|
|
87
|
-
--check, -c <name> Run specific check (can be used multiple times)
|
|
88
|
-
--exclude, -e <name> Exclude specific check (can be used multiple times)
|
|
89
|
-
--reporter, -r <name> Use specific reporter (console, markdown, json)
|
|
90
|
-
--verbose, -v Show detailed output
|
|
91
|
-
--json Output JSON only (for CI/CD)
|
|
92
|
-
--help, -h Show this help message
|
|
93
|
-
|
|
94
|
-
Available Checks:
|
|
95
|
-
- compliance pace-core compliance checks
|
|
96
|
-
- structure File structure checks
|
|
97
|
-
- config Config file checks
|
|
98
|
-
- typescript TypeScript config checks
|
|
99
|
-
- coverage Test coverage checks
|
|
100
|
-
- heuristics Code quality heuristics
|
|
101
|
-
- imports Import pattern analysis
|
|
102
|
-
- hooks React hooks compliance
|
|
103
|
-
- performance Performance anti-patterns
|
|
104
|
-
- dependencies Dependency analysis
|
|
105
|
-
- error-handling Error handling patterns
|
|
106
|
-
- bundle Bundle analysis
|
|
107
|
-
- accessibility Accessibility checks
|
|
108
|
-
- style Code style issues
|
|
109
|
-
- state State management patterns
|
|
110
|
-
- api-usage API usage patterns
|
|
111
|
-
- documentation Documentation coverage
|
|
112
|
-
- testing Testing patterns
|
|
113
|
-
- environment Environment variable usage
|
|
114
|
-
- routes Route protection
|
|
115
|
-
- forms Form validation patterns
|
|
116
|
-
|
|
117
|
-
Examples:
|
|
118
|
-
node audit/index.cjs
|
|
119
|
-
node audit/index.cjs --check compliance --check structure
|
|
120
|
-
node audit/index.cjs --exclude heuristics --reporter markdown
|
|
121
|
-
node audit/index.cjs --json
|
|
122
|
-
`);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Main function
|
|
127
|
-
*/
|
|
128
|
-
async function main() {
|
|
129
|
-
const options = parseArgs();
|
|
130
|
-
const projectRoot = findProjectRoot();
|
|
131
|
-
const packageJson = getPackageInfo(projectRoot);
|
|
132
|
-
const paceCoreVersion = getPaceCoreVersion(packageJson);
|
|
133
|
-
|
|
134
|
-
console.log(`${colors.cyan}${colors.bold}═══════════════════════════════════════════════════════════${colors.reset}`);
|
|
135
|
-
console.log(`${colors.cyan}${colors.bold} pace-core Comprehensive Audit${colors.reset}`);
|
|
136
|
-
console.log(`${colors.cyan}${colors.bold}═══════════════════════════════════════════════════════════${colors.reset}\n`);
|
|
137
|
-
console.log(`${colors.cyan}Project:${colors.reset} ${packageJson?.name || 'Unknown'}`);
|
|
138
|
-
console.log(`${colors.cyan}Root:${colors.reset} ${projectRoot}`);
|
|
139
|
-
console.log(`${colors.cyan}pace-core Version:${colors.reset} ${paceCoreVersion}\n`);
|
|
140
|
-
|
|
141
|
-
// Initialize scanner
|
|
142
|
-
const scanner = new Scanner(projectRoot);
|
|
143
|
-
|
|
144
|
-
// Register all checks
|
|
145
|
-
scanner.registerChecks([
|
|
146
|
-
complianceCheck,
|
|
147
|
-
structureCheck,
|
|
148
|
-
configCheck,
|
|
149
|
-
typescriptCheck,
|
|
150
|
-
coverageCheck,
|
|
151
|
-
heuristicsCheck,
|
|
152
|
-
importsCheck,
|
|
153
|
-
hooksCheck,
|
|
154
|
-
performanceCheck,
|
|
155
|
-
dependenciesCheck,
|
|
156
|
-
errorHandlingCheck,
|
|
157
|
-
bundleCheck,
|
|
158
|
-
accessibilityCheck,
|
|
159
|
-
styleCheck,
|
|
160
|
-
stateCheck,
|
|
161
|
-
apiUsageCheck,
|
|
162
|
-
documentationCheck,
|
|
163
|
-
testingCheck,
|
|
164
|
-
environmentCheck,
|
|
165
|
-
routesCheck,
|
|
166
|
-
formsCheck
|
|
167
|
-
]);
|
|
168
|
-
|
|
169
|
-
// Initialize scanner context
|
|
170
|
-
await scanner.initialize();
|
|
171
|
-
|
|
172
|
-
// Run checks
|
|
173
|
-
console.log(`${colors.cyan}Running checks...${colors.reset}\n`);
|
|
174
|
-
const results = await scanner.run({
|
|
175
|
-
checkNames: options.checks.length > 0 ? options.checks : null,
|
|
176
|
-
excludeChecks: options.exclude,
|
|
177
|
-
parallel: false
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
// Generate reports
|
|
181
|
-
const reportOptions = {
|
|
182
|
-
projectRoot,
|
|
183
|
-
packageJson,
|
|
184
|
-
paceCoreVersion,
|
|
185
|
-
verbose: options.verbose
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
for (const reporterName of options.reporters) {
|
|
189
|
-
try {
|
|
190
|
-
if (reporterName === 'console') {
|
|
191
|
-
consoleReporter.generateReport(results, reportOptions);
|
|
192
|
-
} else if (reporterName === 'markdown') {
|
|
193
|
-
const { filename } = markdownReporter.generateReport(results, reportOptions);
|
|
194
|
-
console.log(`${colors.green}Markdown report saved to: audit/${filename}${colors.reset}`);
|
|
195
|
-
} else if (reporterName === 'json') {
|
|
196
|
-
const outputPath = options.json ? undefined : path.join(projectRoot, 'audit', `audit-${Date.now()}.json`);
|
|
197
|
-
const jsonOutput = jsonReporter.generateReport(results, { ...reportOptions, outputPath });
|
|
198
|
-
if (options.json) {
|
|
199
|
-
console.log(jsonOutput);
|
|
200
|
-
} else {
|
|
201
|
-
console.log(`${colors.green}JSON report saved${colors.reset}`);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
} catch (error) {
|
|
205
|
-
console.error(`${colors.red}Error generating ${reporterName} report: ${error.message}${colors.reset}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Exit with appropriate code
|
|
210
|
-
const exitCode = results.summary.errors > 0 ? 1 : 0;
|
|
211
|
-
process.exit(exitCode);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Run if called directly
|
|
215
|
-
if (require.main === module) {
|
|
216
|
-
main().catch(error => {
|
|
217
|
-
console.error(`${colors.red}Error: ${error.message}${colors.reset}`);
|
|
218
|
-
console.error(error.stack);
|
|
219
|
-
process.exit(1);
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
module.exports = { main };
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Console Reporter
|
|
5
|
-
* @package @jmruthers/pace-core
|
|
6
|
-
* @module Audit/Reporters/Console
|
|
7
|
-
*
|
|
8
|
-
* Formats audit results for terminal output with color coding
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const { colors } = require('../core/utils.cjs');
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Format check results for console output
|
|
15
|
-
*/
|
|
16
|
-
function formatCheckResult(checkName, result) {
|
|
17
|
-
const { issues = [], warnings = [], suggestions = [] } = result;
|
|
18
|
-
const total = issues.length + warnings.length + suggestions.length;
|
|
19
|
-
|
|
20
|
-
if (total === 0) {
|
|
21
|
-
return `${colors.green}✓${colors.reset} ${checkName}: No issues found`;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const parts = [];
|
|
25
|
-
if (issues.length > 0) {
|
|
26
|
-
parts.push(`${colors.red}${issues.length} error${issues.length !== 1 ? 's' : ''}${colors.reset}`);
|
|
27
|
-
}
|
|
28
|
-
if (warnings.length > 0) {
|
|
29
|
-
parts.push(`${colors.yellow}${warnings.length} warning${warnings.length !== 1 ? 's' : ''}${colors.reset}`);
|
|
30
|
-
}
|
|
31
|
-
if (suggestions.length > 0) {
|
|
32
|
-
parts.push(`${colors.blue}${suggestions.length} suggestion${suggestions.length !== 1 ? 's' : ''}${colors.reset}`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return `${colors.red}✗${colors.reset} ${checkName}: ${parts.join(', ')}`;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Format a single issue/warning/suggestion for console
|
|
40
|
-
*/
|
|
41
|
-
function formatItem(item, type) {
|
|
42
|
-
const icon = type === 'issue' ? `${colors.red}•${colors.reset}` :
|
|
43
|
-
type === 'warning' ? `${colors.yellow}⚠${colors.reset}` :
|
|
44
|
-
`${colors.blue}💡${colors.reset}`;
|
|
45
|
-
|
|
46
|
-
const fileInfo = item.line ? `${colors.yellow}${item.file}:${item.line}${colors.reset}` : `${colors.yellow}${item.file}${colors.reset}`;
|
|
47
|
-
|
|
48
|
-
let output = ` ${icon} ${fileInfo}\n`;
|
|
49
|
-
output += ` ${item.message || item.type}\n`;
|
|
50
|
-
|
|
51
|
-
if (item.recommendation) {
|
|
52
|
-
output += ` ${colors.green}Recommendation:${colors.reset} ${item.recommendation}\n`;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return output + '\n';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Generate console report
|
|
60
|
-
*/
|
|
61
|
-
function generateReport(results, options = {}) {
|
|
62
|
-
const { verbose = false } = options;
|
|
63
|
-
|
|
64
|
-
console.log(`\n${colors.bold}${colors.cyan}═══════════════════════════════════════════════════════════${colors.reset}`);
|
|
65
|
-
console.log(`${colors.bold}${colors.cyan} pace-core Audit Report${colors.reset}`);
|
|
66
|
-
console.log(`${colors.bold}${colors.cyan}═══════════════════════════════════════════════════════════${colors.reset}\n`);
|
|
67
|
-
|
|
68
|
-
// Summary
|
|
69
|
-
const summary = results.summary || {};
|
|
70
|
-
console.log(`${colors.bold}Summary:${colors.reset}`);
|
|
71
|
-
console.log(` ${colors.red}Errors:${colors.reset} ${summary.errors || 0}`);
|
|
72
|
-
console.log(` ${colors.yellow}Warnings:${colors.reset} ${summary.warnings || 0}`);
|
|
73
|
-
console.log(` ${colors.blue}Suggestions:${colors.reset} ${summary.suggestions || 0}`);
|
|
74
|
-
console.log(` ${colors.green}Passed:${colors.reset} ${summary.passed || 0}`);
|
|
75
|
-
console.log(` ${colors.cyan}Total Checks:${colors.reset} ${summary.total || 0}\n`);
|
|
76
|
-
|
|
77
|
-
// Check results
|
|
78
|
-
if (results.checks) {
|
|
79
|
-
console.log(`${colors.bold}Check Results:${colors.reset}\n`);
|
|
80
|
-
Object.entries(results.checks).forEach(([checkName, result]) => {
|
|
81
|
-
console.log(formatCheckResult(checkName, result));
|
|
82
|
-
|
|
83
|
-
if (verbose && (result.issues?.length > 0 || result.warnings?.length > 0 || result.suggestions?.length > 0)) {
|
|
84
|
-
if (result.issues?.length > 0) {
|
|
85
|
-
console.log(`\n ${colors.red}${colors.bold}Errors:${colors.reset}\n`);
|
|
86
|
-
result.issues.forEach(issue => {
|
|
87
|
-
console.log(formatItem(issue, 'issue'));
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (result.warnings?.length > 0) {
|
|
92
|
-
console.log(` ${colors.yellow}${colors.bold}Warnings:${colors.reset}\n`);
|
|
93
|
-
result.warnings.forEach(warning => {
|
|
94
|
-
console.log(formatItem(warning, 'warning'));
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (result.suggestions?.length > 0) {
|
|
99
|
-
console.log(` ${colors.blue}${colors.bold}Suggestions:${colors.reset}\n`);
|
|
100
|
-
result.suggestions.forEach(suggestion => {
|
|
101
|
-
console.log(formatItem(suggestion, 'suggestion'));
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Compliance violations (if present)
|
|
109
|
-
if (results.checks?.compliance?.violations) {
|
|
110
|
-
const violations = results.checks.compliance.violations;
|
|
111
|
-
console.log(`\n${colors.bold}${colors.cyan}Compliance Details:${colors.reset}\n`);
|
|
112
|
-
|
|
113
|
-
// Format compliance violations similar to original report
|
|
114
|
-
formatComplianceViolations(violations);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
console.log('');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Format compliance violations for console (similar to original format)
|
|
122
|
-
*/
|
|
123
|
-
function formatComplianceViolations(violations) {
|
|
124
|
-
const totalRestricted = violations.restrictedImports?.length || 0;
|
|
125
|
-
const totalDuplicates =
|
|
126
|
-
(violations.duplicateComponents?.length || 0) +
|
|
127
|
-
(violations.duplicateHooks?.length || 0) +
|
|
128
|
-
(violations.duplicateUtils?.length || 0);
|
|
129
|
-
|
|
130
|
-
if (totalRestricted > 0) {
|
|
131
|
-
console.log(`${colors.red}${colors.bold}❌ Restricted Imports: ${totalRestricted}${colors.reset}\n`);
|
|
132
|
-
violations.restrictedImports.forEach(({ module, reason, file, line }) => {
|
|
133
|
-
console.log(` ${colors.red}•${colors.reset} ${colors.yellow}${file}:${line}${colors.reset}`);
|
|
134
|
-
console.log(` Import: ${colors.cyan}${module}${colors.reset}`);
|
|
135
|
-
console.log(` ${colors.yellow}Reason:${colors.reset} ${reason}\n`);
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
if (totalDuplicates > 0) {
|
|
140
|
-
console.log(`${colors.red}${colors.bold}❌ Duplicates: ${totalDuplicates}${colors.reset}\n`);
|
|
141
|
-
// Format duplicates...
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Format other violation types...
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
module.exports = {
|
|
148
|
-
generateReport,
|
|
149
|
-
formatCheckResult,
|
|
150
|
-
formatItem
|
|
151
|
-
};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* JSON Reporter
|
|
5
|
-
* @package @jmruthers/pace-core
|
|
6
|
-
* @module Audit/Reporters/JSON
|
|
7
|
-
*
|
|
8
|
-
* Generates machine-readable JSON reports for CI/CD integration
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const fs = require('fs');
|
|
12
|
-
const path = require('path');
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Generate JSON report from audit results
|
|
16
|
-
*/
|
|
17
|
-
function generateReport(results, options = {}) {
|
|
18
|
-
const { projectRoot, outputPath } = options;
|
|
19
|
-
|
|
20
|
-
// Create simplified JSON structure
|
|
21
|
-
const jsonReport = {
|
|
22
|
-
timestamp: new Date().toISOString(),
|
|
23
|
-
summary: results.summary || {},
|
|
24
|
-
checks: {},
|
|
25
|
-
metadata: results.metadata || {}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Format check results
|
|
29
|
-
if (results.checks) {
|
|
30
|
-
Object.entries(results.checks).forEach(([checkName, result]) => {
|
|
31
|
-
jsonReport.checks[checkName] = {
|
|
32
|
-
name: checkName,
|
|
33
|
-
status: result.status || 'completed',
|
|
34
|
-
duration: result.duration || 0,
|
|
35
|
-
issues: result.issues || [],
|
|
36
|
-
warnings: result.warnings || [],
|
|
37
|
-
suggestions: result.suggestions || []
|
|
38
|
-
};
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Write to file or return
|
|
43
|
-
if (outputPath) {
|
|
44
|
-
fs.writeFileSync(outputPath, JSON.stringify(jsonReport, null, 2), 'utf8');
|
|
45
|
-
return { reportPath: outputPath };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Return JSON string for stdout
|
|
49
|
-
return JSON.stringify(jsonReport, null, 2);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
module.exports = {
|
|
53
|
-
generateReport
|
|
54
|
-
};
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Markdown Reporter
|
|
5
|
-
* @package @jmruthers/pace-core
|
|
6
|
-
* @module Audit/Reporters/Markdown
|
|
7
|
-
*
|
|
8
|
-
* Generates timestamped markdown reports
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const fs = require('fs');
|
|
12
|
-
const path = require('path');
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Generate markdown report from audit results
|
|
16
|
-
*/
|
|
17
|
-
function generateReport(results, options = {}) {
|
|
18
|
-
const { projectRoot, packageJson, paceCoreVersion } = options;
|
|
19
|
-
const timestamp = new Date();
|
|
20
|
-
|
|
21
|
-
// Format: yyyymmddhhmmss
|
|
22
|
-
const timestampStr = timestamp.toISOString().replace(/[-:]/g, '').replace(/\..+/, '').replace('T', '');
|
|
23
|
-
const filename = `audit-${timestampStr}.md`;
|
|
24
|
-
const auditDir = path.join(projectRoot, 'audit');
|
|
25
|
-
|
|
26
|
-
// Create audit directory if it doesn't exist
|
|
27
|
-
if (!fs.existsSync(auditDir)) {
|
|
28
|
-
fs.mkdirSync(auditDir, { recursive: true });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const reportPath = path.join(auditDir, filename);
|
|
32
|
-
|
|
33
|
-
// Generate markdown content
|
|
34
|
-
let markdown = `# pace-core Compliance Audit Report\n\n`;
|
|
35
|
-
markdown += `**Generated:** ${timestamp.toISOString()}\n`;
|
|
36
|
-
markdown += `**Project:** ${packageJson?.name || 'Unknown'}\n`;
|
|
37
|
-
markdown += `**pace-core Version:** ${paceCoreVersion || 'unknown'}\n\n`;
|
|
38
|
-
|
|
39
|
-
// Summary
|
|
40
|
-
const summary = results.summary || {};
|
|
41
|
-
markdown += `## Executive Summary\n\n`;
|
|
42
|
-
markdown += `- **Total Issues:** ${summary.errors + summary.warnings + summary.suggestions}\n`;
|
|
43
|
-
markdown += `- **Errors:** ${summary.errors || 0}\n`;
|
|
44
|
-
markdown += `- **Warnings:** ${summary.warnings || 0}\n`;
|
|
45
|
-
markdown += `- **Suggestions:** ${summary.suggestions || 0}\n`;
|
|
46
|
-
markdown += `- **Passed:** ${summary.passed || 0}\n\n`;
|
|
47
|
-
|
|
48
|
-
// Check results
|
|
49
|
-
if (results.checks) {
|
|
50
|
-
Object.entries(results.checks).forEach(([checkName, result]) => {
|
|
51
|
-
const { issues = [], warnings = [], suggestions = [] } = result;
|
|
52
|
-
|
|
53
|
-
if (issues.length === 0 && warnings.length === 0 && suggestions.length === 0) {
|
|
54
|
-
markdown += `## ${checkName}\n\n`;
|
|
55
|
-
markdown += `✅ No issues found\n\n`;
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
markdown += `## ${checkName}\n\n`;
|
|
60
|
-
|
|
61
|
-
if (issues.length > 0) {
|
|
62
|
-
markdown += `### Errors (${issues.length})\n\n`;
|
|
63
|
-
issues.forEach(issue => {
|
|
64
|
-
markdown += `- **${issue.file}${issue.line ? `:${issue.line}` : ''}**\n`;
|
|
65
|
-
markdown += ` - ${issue.message}\n`;
|
|
66
|
-
if (issue.recommendation) {
|
|
67
|
-
markdown += ` - Recommendation: ${issue.recommendation}\n`;
|
|
68
|
-
}
|
|
69
|
-
markdown += `\n`;
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (warnings.length > 0) {
|
|
74
|
-
markdown += `### Warnings (${warnings.length})\n\n`;
|
|
75
|
-
warnings.forEach(warning => {
|
|
76
|
-
markdown += `- **${warning.file}${warning.line ? `:${warning.line}` : ''}**\n`;
|
|
77
|
-
markdown += ` - ${warning.message}\n`;
|
|
78
|
-
if (warning.recommendation) {
|
|
79
|
-
markdown += ` - Recommendation: ${warning.recommendation}\n`;
|
|
80
|
-
}
|
|
81
|
-
markdown += `\n`;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (suggestions.length > 0) {
|
|
86
|
-
markdown += `### Suggestions (${suggestions.length})\n\n`;
|
|
87
|
-
suggestions.forEach(suggestion => {
|
|
88
|
-
markdown += `- **${suggestion.file}**\n`;
|
|
89
|
-
markdown += ` - ${suggestion.message}\n`;
|
|
90
|
-
if (suggestion.recommendation) {
|
|
91
|
-
markdown += ` - Recommendation: ${suggestion.recommendation}\n`;
|
|
92
|
-
}
|
|
93
|
-
markdown += `\n`;
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Compliance violations (if present)
|
|
100
|
-
if (results.checks?.compliance?.violations) {
|
|
101
|
-
markdown += formatComplianceViolations(results.checks.compliance.violations);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Write report
|
|
105
|
-
fs.writeFileSync(reportPath, markdown, 'utf8');
|
|
106
|
-
|
|
107
|
-
return { reportPath, filename };
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Format compliance violations for markdown
|
|
112
|
-
*/
|
|
113
|
-
function formatComplianceViolations(violations) {
|
|
114
|
-
let markdown = `## Compliance Violations\n\n`;
|
|
115
|
-
|
|
116
|
-
// Add violation details similar to original format
|
|
117
|
-
// This is a simplified version - can be enhanced
|
|
118
|
-
|
|
119
|
-
return markdown;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
module.exports = {
|
|
123
|
-
generateReport
|
|
124
|
-
};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Audit Script for Consuming Apps
|
|
5
|
-
* @package @jmruthers/pace-core
|
|
6
|
-
*
|
|
7
|
-
* This script allows consuming apps to run pace-core audits.
|
|
8
|
-
* It resolves the audit script path relative to the installed pace-core package
|
|
9
|
-
* and forwards all arguments to the main audit script.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const path = require('path');
|
|
13
|
-
const fs = require('fs');
|
|
14
|
-
const { spawn } = require('child_process');
|
|
15
|
-
|
|
16
|
-
// Find the pace-core package directory and audit script
|
|
17
|
-
// This script should be at: node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs
|
|
18
|
-
// The audit script should be at: node_modules/@jmruthers/pace-core/scripts/audit/index.cjs
|
|
19
|
-
|
|
20
|
-
const scriptDir = __dirname;
|
|
21
|
-
let auditScript;
|
|
22
|
-
|
|
23
|
-
// Strategy 1: If this script is in scripts/, the audit script is in scripts/audit/
|
|
24
|
-
const relativePath = path.join(scriptDir, 'audit', 'index.cjs');
|
|
25
|
-
if (fs.existsSync(relativePath)) {
|
|
26
|
-
auditScript = relativePath;
|
|
27
|
-
} else {
|
|
28
|
-
// Strategy 2: Try to resolve via package.json location
|
|
29
|
-
try {
|
|
30
|
-
const packageJsonPath = require.resolve('@jmruthers/pace-core/package.json');
|
|
31
|
-
const packageDir = path.dirname(packageJsonPath);
|
|
32
|
-
const resolvedPath = path.join(packageDir, 'scripts', 'audit', 'index.cjs');
|
|
33
|
-
if (fs.existsSync(resolvedPath)) {
|
|
34
|
-
auditScript = resolvedPath;
|
|
35
|
-
}
|
|
36
|
-
} catch (e) {
|
|
37
|
-
// Package not found via require.resolve, continue to fallback
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Strategy 3: Fallback - assume we're in scripts/ and go up one level
|
|
41
|
-
if (!auditScript) {
|
|
42
|
-
const paceCoreRoot = path.resolve(scriptDir, '..');
|
|
43
|
-
const fallbackPath = path.join(paceCoreRoot, 'scripts', 'audit', 'index.cjs');
|
|
44
|
-
if (fs.existsSync(fallbackPath)) {
|
|
45
|
-
auditScript = fallbackPath;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Verify the audit script exists
|
|
51
|
-
if (!auditScript || !fs.existsSync(auditScript)) {
|
|
52
|
-
console.error(`Error: Audit script not found.`);
|
|
53
|
-
console.error(`Searched locations:`);
|
|
54
|
-
console.error(` - ${path.join(scriptDir, 'audit', 'index.cjs')}`);
|
|
55
|
-
try {
|
|
56
|
-
const packageJsonPath = require.resolve('@jmruthers/pace-core/package.json');
|
|
57
|
-
const packageDir = path.dirname(packageJsonPath);
|
|
58
|
-
console.error(` - ${path.join(packageDir, 'scripts', 'audit', 'index.cjs')}`);
|
|
59
|
-
} catch (e) {
|
|
60
|
-
console.error(` - (Could not resolve package location)`);
|
|
61
|
-
}
|
|
62
|
-
console.error(`\nThis may indicate:`);
|
|
63
|
-
console.error(` 1. The pace-core package is not installed correctly`);
|
|
64
|
-
console.error(` 2. The package needs to be updated (npm install @jmruthers/pace-core@latest)`);
|
|
65
|
-
console.error(` 3. The scripts directory was not included in the published package`);
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Forward all command line arguments to the audit script
|
|
70
|
-
const args = process.argv.slice(2);
|
|
71
|
-
|
|
72
|
-
// Spawn the audit script with forwarded arguments
|
|
73
|
-
const child = spawn('node', [auditScript, ...args], {
|
|
74
|
-
stdio: 'inherit',
|
|
75
|
-
cwd: process.cwd() // Use the consuming app's working directory
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
child.on('error', (error) => {
|
|
79
|
-
console.error(`Error running audit script: ${error.message}`);
|
|
80
|
-
process.exit(1);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
child.on('exit', (code) => {
|
|
84
|
-
process.exit(code || 0);
|
|
85
|
-
});
|
|
86
|
-
|