@empline/preflight 1.1.11 → 1.1.13
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/dist/checks/consolidated/auth-storage-state.d.ts +3 -0
- package/dist/checks/consolidated/auth-storage-state.d.ts.map +1 -0
- package/dist/checks/consolidated/auth-storage-state.js +146 -0
- package/dist/checks/consolidated/auth-storage-state.js.map +1 -0
- package/dist/checks/consolidated/business.d.ts +50 -0
- package/dist/checks/consolidated/business.d.ts.map +1 -0
- package/dist/checks/consolidated/business.js +252 -0
- package/dist/checks/consolidated/business.js.map +1 -0
- package/dist/checks/consolidated/caching-strategy.d.ts +104 -0
- package/dist/checks/consolidated/caching-strategy.d.ts.map +1 -0
- package/dist/checks/consolidated/caching-strategy.js +725 -0
- package/dist/checks/consolidated/caching-strategy.js.map +1 -0
- package/dist/checks/consolidated/code-quality.d.ts +83 -0
- package/dist/checks/consolidated/code-quality.d.ts.map +1 -0
- package/dist/checks/consolidated/code-quality.js +445 -0
- package/dist/checks/consolidated/code-quality.js.map +1 -0
- package/dist/checks/consolidated/console-statements.d.ts +32 -0
- package/dist/checks/consolidated/console-statements.d.ts.map +1 -0
- package/dist/checks/consolidated/console-statements.js +304 -0
- package/dist/checks/consolidated/console-statements.js.map +1 -0
- package/dist/checks/consolidated/css-advanced-validation.d.ts +24 -0
- package/dist/checks/consolidated/css-advanced-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-advanced-validation.js +415 -0
- package/dist/checks/consolidated/css-advanced-validation.js.map +1 -0
- package/dist/checks/consolidated/css-organization.d.ts +14 -0
- package/dist/checks/consolidated/css-organization.d.ts.map +1 -0
- package/dist/checks/consolidated/css-organization.js +432 -0
- package/dist/checks/consolidated/css-organization.js.map +1 -0
- package/dist/checks/consolidated/css-runtime-validation.d.ts +22 -0
- package/dist/checks/consolidated/css-runtime-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-runtime-validation.js +330 -0
- package/dist/checks/consolidated/css-runtime-validation.js.map +1 -0
- package/dist/checks/consolidated/css-variable-validation.d.ts +17 -0
- package/dist/checks/consolidated/css-variable-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-variable-validation.js +412 -0
- package/dist/checks/consolidated/css-variable-validation.js.map +1 -0
- package/dist/checks/consolidated/dark-mode-consistency.d.ts +23 -0
- package/dist/checks/consolidated/dark-mode-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/dark-mode-consistency.js +291 -0
- package/dist/checks/consolidated/dark-mode-consistency.js.map +1 -0
- package/dist/checks/consolidated/database.d.ts +95 -0
- package/dist/checks/consolidated/database.d.ts.map +1 -0
- package/dist/checks/consolidated/database.js +427 -0
- package/dist/checks/consolidated/database.js.map +1 -0
- package/dist/checks/consolidated/e2e-checks.d.ts +52 -0
- package/dist/checks/consolidated/e2e-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-checks.js +157 -0
- package/dist/checks/consolidated/e2e-checks.js.map +1 -0
- package/dist/checks/consolidated/e2e-regression-coverage.d.ts +14 -0
- package/dist/checks/consolidated/e2e-regression-coverage.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-regression-coverage.js +151 -0
- package/dist/checks/consolidated/e2e-regression-coverage.js.map +1 -0
- package/dist/checks/consolidated/e2e-validation.d.ts +137 -0
- package/dist/checks/consolidated/e2e-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-validation.js +1001 -0
- package/dist/checks/consolidated/e2e-validation.js.map +1 -0
- package/dist/checks/consolidated/enterprise-baseline.d.ts +9 -0
- package/dist/checks/consolidated/enterprise-baseline.d.ts.map +1 -0
- package/dist/checks/consolidated/enterprise-baseline.js +277 -0
- package/dist/checks/consolidated/enterprise-baseline.js.map +1 -0
- package/dist/checks/consolidated/generate-pageload-config.d.ts +6 -0
- package/dist/checks/consolidated/generate-pageload-config.d.ts.map +1 -0
- package/dist/checks/consolidated/generate-pageload-config.js +161 -0
- package/dist/checks/consolidated/generate-pageload-config.js.map +1 -0
- package/dist/checks/consolidated/hardened-checks.d.ts +276 -0
- package/dist/checks/consolidated/hardened-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/hardened-checks.js +3056 -0
- package/dist/checks/consolidated/hardened-checks.js.map +1 -0
- package/dist/checks/consolidated/homepage-ux.d.ts +12 -0
- package/dist/checks/consolidated/homepage-ux.d.ts.map +1 -0
- package/dist/checks/consolidated/homepage-ux.js +242 -0
- package/dist/checks/consolidated/homepage-ux.js.map +1 -0
- package/dist/checks/consolidated/images.d.ts +76 -0
- package/dist/checks/consolidated/images.d.ts.map +1 -0
- package/dist/checks/consolidated/images.js +311 -0
- package/dist/checks/consolidated/images.js.map +1 -0
- package/dist/checks/consolidated/import-cycles.d.ts +63 -0
- package/dist/checks/consolidated/import-cycles.d.ts.map +1 -0
- package/dist/checks/consolidated/import-cycles.js +291 -0
- package/dist/checks/consolidated/import-cycles.js.map +1 -0
- package/dist/checks/consolidated/imports.d.ts +112 -0
- package/dist/checks/consolidated/imports.d.ts.map +1 -0
- package/dist/checks/consolidated/imports.js +977 -0
- package/dist/checks/consolidated/imports.js.map +1 -0
- package/dist/checks/consolidated/inline-style-conflicts.d.ts +21 -0
- package/dist/checks/consolidated/inline-style-conflicts.d.ts.map +1 -0
- package/dist/checks/consolidated/inline-style-conflicts.js +300 -0
- package/dist/checks/consolidated/inline-style-conflicts.js.map +1 -0
- package/dist/checks/consolidated/lib-organization.d.ts +12 -0
- package/dist/checks/consolidated/lib-organization.d.ts.map +1 -0
- package/dist/checks/consolidated/lib-organization.js +419 -0
- package/dist/checks/consolidated/lib-organization.js.map +1 -0
- package/dist/checks/consolidated/n-plus-one.d.ts +63 -0
- package/dist/checks/consolidated/n-plus-one.d.ts.map +1 -0
- package/dist/checks/consolidated/n-plus-one.js +331 -0
- package/dist/checks/consolidated/n-plus-one.js.map +1 -0
- package/dist/checks/consolidated/nextjs.d.ts +51 -0
- package/dist/checks/consolidated/nextjs.d.ts.map +1 -0
- package/dist/checks/consolidated/nextjs.js +205 -0
- package/dist/checks/consolidated/nextjs.js.map +1 -0
- package/dist/checks/consolidated/organization.d.ts +54 -0
- package/dist/checks/consolidated/organization.d.ts.map +1 -0
- package/dist/checks/consolidated/organization.js +158 -0
- package/dist/checks/consolidated/organization.js.map +1 -0
- package/dist/checks/consolidated/pageload.d.ts +12 -0
- package/dist/checks/consolidated/pageload.d.ts.map +1 -0
- package/dist/checks/consolidated/pageload.js +138 -0
- package/dist/checks/consolidated/pageload.js.map +1 -0
- package/dist/checks/consolidated/performance.d.ts +112 -0
- package/dist/checks/consolidated/performance.d.ts.map +1 -0
- package/dist/checks/consolidated/performance.js +1546 -0
- package/dist/checks/consolidated/performance.js.map +1 -0
- package/dist/checks/consolidated/quality.d.ts +52 -0
- package/dist/checks/consolidated/quality.d.ts.map +1 -0
- package/dist/checks/consolidated/quality.js +253 -0
- package/dist/checks/consolidated/quality.js.map +1 -0
- package/dist/checks/consolidated/react.d.ts +48 -0
- package/dist/checks/consolidated/react.d.ts.map +1 -0
- package/dist/checks/consolidated/react.js +203 -0
- package/dist/checks/consolidated/react.js.map +1 -0
- package/dist/checks/consolidated/regression-hygiene.d.ts +17 -0
- package/dist/checks/consolidated/regression-hygiene.d.ts.map +1 -0
- package/dist/checks/consolidated/regression-hygiene.js +242 -0
- package/dist/checks/consolidated/regression-hygiene.js.map +1 -0
- package/dist/checks/consolidated/regression.d.ts +20 -0
- package/dist/checks/consolidated/regression.d.ts.map +1 -0
- package/dist/checks/consolidated/regression.js +121 -0
- package/dist/checks/consolidated/regression.js.map +1 -0
- package/dist/checks/consolidated/runtime.d.ts +53 -0
- package/dist/checks/consolidated/runtime.d.ts.map +1 -0
- package/dist/checks/consolidated/runtime.js +160 -0
- package/dist/checks/consolidated/runtime.js.map +1 -0
- package/dist/checks/consolidated/script-performance.d.ts +17 -0
- package/dist/checks/consolidated/script-performance.d.ts.map +1 -0
- package/dist/checks/consolidated/script-performance.js +137 -0
- package/dist/checks/consolidated/script-performance.js.map +1 -0
- package/dist/checks/consolidated/security.d.ts +78 -0
- package/dist/checks/consolidated/security.d.ts.map +1 -0
- package/dist/checks/consolidated/security.js +404 -0
- package/dist/checks/consolidated/security.js.map +1 -0
- package/dist/checks/consolidated/seo.d.ts +31 -0
- package/dist/checks/consolidated/seo.d.ts.map +1 -0
- package/dist/checks/consolidated/seo.js +1438 -0
- package/dist/checks/consolidated/seo.js.map +1 -0
- package/dist/checks/consolidated/sx-prop-deprecation.d.ts +22 -0
- package/dist/checks/consolidated/sx-prop-deprecation.d.ts.map +1 -0
- package/dist/checks/consolidated/sx-prop-deprecation.js +280 -0
- package/dist/checks/consolidated/sx-prop-deprecation.js.map +1 -0
- package/dist/checks/consolidated/tailwind-class-validation.d.ts +25 -0
- package/dist/checks/consolidated/tailwind-class-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/tailwind-class-validation.js +533 -0
- package/dist/checks/consolidated/tailwind-class-validation.js.map +1 -0
- package/dist/checks/consolidated/testing.d.ts +54 -0
- package/dist/checks/consolidated/testing.d.ts.map +1 -0
- package/dist/checks/consolidated/testing.js +163 -0
- package/dist/checks/consolidated/testing.js.map +1 -0
- package/dist/checks/consolidated/typescript.d.ts +3 -0
- package/dist/checks/consolidated/typescript.d.ts.map +1 -0
- package/dist/checks/consolidated/typescript.js +31 -0
- package/dist/checks/consolidated/typescript.js.map +1 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.d.ts +104 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.js +689 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.js.map +1 -0
- package/dist/checks/consolidated/ui-accessibility.d.ts +121 -0
- package/dist/checks/consolidated/ui-accessibility.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-accessibility.js +776 -0
- package/dist/checks/consolidated/ui-accessibility.js.map +1 -0
- package/dist/checks/consolidated/ui-advanced-spacing.d.ts +142 -0
- package/dist/checks/consolidated/ui-advanced-spacing.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-advanced-spacing.js +1220 -0
- package/dist/checks/consolidated/ui-advanced-spacing.js.map +1 -0
- package/dist/checks/consolidated/ui-animation-duration.d.ts +108 -0
- package/dist/checks/consolidated/ui-animation-duration.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-animation-duration.js +531 -0
- package/dist/checks/consolidated/ui-animation-duration.js.map +1 -0
- package/dist/checks/consolidated/ui-border-radius.d.ts +90 -0
- package/dist/checks/consolidated/ui-border-radius.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-border-radius.js +519 -0
- package/dist/checks/consolidated/ui-border-radius.js.map +1 -0
- package/dist/checks/consolidated/ui-buttons.d.ts +32 -0
- package/dist/checks/consolidated/ui-buttons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-buttons.js +481 -0
- package/dist/checks/consolidated/ui-buttons.js.map +1 -0
- package/dist/checks/consolidated/ui-cards.d.ts +29 -0
- package/dist/checks/consolidated/ui-cards.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-cards.js +504 -0
- package/dist/checks/consolidated/ui-cards.js.map +1 -0
- package/dist/checks/consolidated/ui-checks.d.ts +48 -0
- package/dist/checks/consolidated/ui-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-checks.js +264 -0
- package/dist/checks/consolidated/ui-checks.js.map +1 -0
- package/dist/checks/consolidated/ui-cleanup.d.ts +81 -0
- package/dist/checks/consolidated/ui-cleanup.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-cleanup.js +650 -0
- package/dist/checks/consolidated/ui-cleanup.js.map +1 -0
- package/dist/checks/consolidated/ui-components.d.ts +255 -0
- package/dist/checks/consolidated/ui-components.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-components.js +2008 -0
- package/dist/checks/consolidated/ui-components.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-advanced.d.ts +130 -0
- package/dist/checks/consolidated/ui-consistency-advanced.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-advanced.js +982 -0
- package/dist/checks/consolidated/ui-consistency-advanced.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.d.ts +30 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.js +1018 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-extended.d.ts +26 -0
- package/dist/checks/consolidated/ui-consistency-extended.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-extended.js +606 -0
- package/dist/checks/consolidated/ui-consistency-extended.js.map +1 -0
- package/dist/checks/consolidated/ui-data-display.d.ts +103 -0
- package/dist/checks/consolidated/ui-data-display.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-data-display.js +740 -0
- package/dist/checks/consolidated/ui-data-display.js.map +1 -0
- package/dist/checks/consolidated/ui-deprecated.d.ts +22 -0
- package/dist/checks/consolidated/ui-deprecated.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-deprecated.js +336 -0
- package/dist/checks/consolidated/ui-deprecated.js.map +1 -0
- package/dist/checks/consolidated/ui-empty-null-states.d.ts +90 -0
- package/dist/checks/consolidated/ui-empty-null-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-empty-null-states.js +511 -0
- package/dist/checks/consolidated/ui-empty-null-states.js.map +1 -0
- package/dist/checks/consolidated/ui-error-states.d.ts +99 -0
- package/dist/checks/consolidated/ui-error-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-error-states.js +694 -0
- package/dist/checks/consolidated/ui-error-states.js.map +1 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.d.ts +90 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.js +596 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.js.map +1 -0
- package/dist/checks/consolidated/ui-forms.d.ts +32 -0
- package/dist/checks/consolidated/ui-forms.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-forms.js +568 -0
- package/dist/checks/consolidated/ui-forms.js.map +1 -0
- package/dist/checks/consolidated/ui-gradient-shadow.d.ts +90 -0
- package/dist/checks/consolidated/ui-gradient-shadow.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-gradient-shadow.js +568 -0
- package/dist/checks/consolidated/ui-gradient-shadow.js.map +1 -0
- package/dist/checks/consolidated/ui-grid-responsive.d.ts +27 -0
- package/dist/checks/consolidated/ui-grid-responsive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-grid-responsive.js +441 -0
- package/dist/checks/consolidated/ui-grid-responsive.js.map +1 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.d.ts +104 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.js +514 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.js.map +1 -0
- package/dist/checks/consolidated/ui-iconography.d.ts +90 -0
- package/dist/checks/consolidated/ui-iconography.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-iconography.js +565 -0
- package/dist/checks/consolidated/ui-iconography.js.map +1 -0
- package/dist/checks/consolidated/ui-interactive-states.d.ts +240 -0
- package/dist/checks/consolidated/ui-interactive-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-interactive-states.js +2474 -0
- package/dist/checks/consolidated/ui-interactive-states.js.map +1 -0
- package/dist/checks/consolidated/ui-layout.d.ts +256 -0
- package/dist/checks/consolidated/ui-layout.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-layout.js +1371 -0
- package/dist/checks/consolidated/ui-layout.js.map +1 -0
- package/dist/checks/consolidated/ui-loading-skeletons.d.ts +11 -0
- package/dist/checks/consolidated/ui-loading-skeletons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-loading-skeletons.js +145 -0
- package/dist/checks/consolidated/ui-loading-skeletons.js.map +1 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.d.ts +9 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.js +125 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.js.map +1 -0
- package/dist/checks/consolidated/ui-media.d.ts +74 -0
- package/dist/checks/consolidated/ui-media.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-media.js +408 -0
- package/dist/checks/consolidated/ui-media.js.map +1 -0
- package/dist/checks/consolidated/ui-micro-interactions.d.ts +107 -0
- package/dist/checks/consolidated/ui-micro-interactions.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-micro-interactions.js +825 -0
- package/dist/checks/consolidated/ui-micro-interactions.js.map +1 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.d.ts +114 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.js +566 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.js.map +1 -0
- package/dist/checks/consolidated/ui-mobile-ux.d.ts +251 -0
- package/dist/checks/consolidated/ui-mobile-ux.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-mobile-ux.js +2212 -0
- package/dist/checks/consolidated/ui-mobile-ux.js.map +1 -0
- package/dist/checks/consolidated/ui-motion-accessibility.d.ts +93 -0
- package/dist/checks/consolidated/ui-motion-accessibility.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-motion-accessibility.js +450 -0
- package/dist/checks/consolidated/ui-motion-accessibility.js.map +1 -0
- package/dist/checks/consolidated/ui-navigation.d.ts +85 -0
- package/dist/checks/consolidated/ui-navigation.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-navigation.js +673 -0
- package/dist/checks/consolidated/ui-navigation.js.map +1 -0
- package/dist/checks/consolidated/ui-patterns.d.ts +174 -0
- package/dist/checks/consolidated/ui-patterns.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-patterns.js +1532 -0
- package/dist/checks/consolidated/ui-patterns.js.map +1 -0
- package/dist/checks/consolidated/ui-responsive.d.ts +89 -0
- package/dist/checks/consolidated/ui-responsive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-responsive.js +588 -0
- package/dist/checks/consolidated/ui-responsive.js.map +1 -0
- package/dist/checks/consolidated/ui-spacing-standards.d.ts +43 -0
- package/dist/checks/consolidated/ui-spacing-standards.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-spacing-standards.js +874 -0
- package/dist/checks/consolidated/ui-spacing-standards.js.map +1 -0
- package/dist/checks/consolidated/ui-spacing.d.ts +751 -0
- package/dist/checks/consolidated/ui-spacing.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-spacing.js +4996 -0
- package/dist/checks/consolidated/ui-spacing.js.map +1 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.d.ts +70 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.js +429 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.js.map +1 -0
- package/dist/checks/consolidated/ui-standards-enforcement.d.ts +100 -0
- package/dist/checks/consolidated/ui-standards-enforcement.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-standards-enforcement.js +935 -0
- package/dist/checks/consolidated/ui-standards-enforcement.js.map +1 -0
- package/dist/checks/consolidated/ui-state-consistency.d.ts +90 -0
- package/dist/checks/consolidated/ui-state-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-state-consistency.js +659 -0
- package/dist/checks/consolidated/ui-state-consistency.js.map +1 -0
- package/dist/checks/consolidated/ui-style-validation.d.ts +74 -0
- package/dist/checks/consolidated/ui-style-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-style-validation.js +403 -0
- package/dist/checks/consolidated/ui-style-validation.js.map +1 -0
- package/dist/checks/consolidated/ui-tokens.d.ts +110 -0
- package/dist/checks/consolidated/ui-tokens.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-tokens.js +990 -0
- package/dist/checks/consolidated/ui-tokens.js.map +1 -0
- package/dist/checks/consolidated/ui-typography.d.ts +77 -0
- package/dist/checks/consolidated/ui-typography.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-typography.js +416 -0
- package/dist/checks/consolidated/ui-typography.js.map +1 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.d.ts +90 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.js +562 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.js.map +1 -0
- package/dist/checks/consolidated/woocommerce.d.ts +50 -0
- package/dist/checks/consolidated/woocommerce.d.ts.map +1 -0
- package/dist/checks/consolidated/woocommerce.js +198 -0
- package/dist/checks/consolidated/woocommerce.js.map +1 -0
- package/dist/checks/core/api-route-protection.d.ts +2 -0
- package/dist/checks/core/api-route-protection.d.ts.map +1 -0
- package/dist/checks/core/api-route-protection.js +101 -0
- package/dist/checks/core/api-route-protection.js.map +1 -0
- package/dist/checks/core/critical.d.ts +8 -0
- package/dist/checks/core/critical.d.ts.map +1 -0
- package/dist/checks/core/critical.js +200 -0
- package/dist/checks/core/critical.js.map +1 -0
- package/dist/checks/core/database.d.ts +8 -0
- package/dist/checks/core/database.d.ts.map +1 -0
- package/dist/checks/core/database.js +699 -0
- package/dist/checks/core/database.js.map +1 -0
- package/dist/checks/core/development.d.ts +8 -0
- package/dist/checks/core/development.d.ts.map +1 -0
- package/dist/checks/core/development.js +417 -0
- package/dist/checks/core/development.js.map +1 -0
- package/dist/checks/core/hydration-mismatch-check.d.ts +38 -0
- package/dist/checks/core/hydration-mismatch-check.d.ts.map +1 -0
- package/dist/checks/core/hydration-mismatch-check.js +411 -0
- package/dist/checks/core/hydration-mismatch-check.js.map +1 -0
- package/dist/checks/core/performance.d.ts +8 -0
- package/dist/checks/core/performance.d.ts.map +1 -0
- package/dist/checks/core/performance.js +474 -0
- package/dist/checks/core/performance.js.map +1 -0
- package/dist/checks/core/security.d.ts +8 -0
- package/dist/checks/core/security.d.ts.map +1 -0
- package/dist/checks/core/security.js +275 -0
- package/dist/checks/core/security.js.map +1 -0
- package/dist/checks/core/standardized-error-handling.d.ts +43 -0
- package/dist/checks/core/standardized-error-handling.d.ts.map +1 -0
- package/dist/checks/core/standardized-error-handling.js +384 -0
- package/dist/checks/core/standardized-error-handling.js.map +1 -0
- package/dist/checks/core/supercatch.d.ts +8 -0
- package/dist/checks/core/supercatch.d.ts.map +1 -0
- package/dist/checks/core/supercatch.js +750 -0
- package/dist/checks/core/supercatch.js.map +1 -0
- package/dist/checks/core/suppression-check.d.ts +2 -0
- package/dist/checks/core/suppression-check.d.ts.map +1 -0
- package/dist/checks/core/suppression-check.js +129 -0
- package/dist/checks/core/suppression-check.js.map +1 -0
- package/dist/checks/core/ui-quality.d.ts +8 -0
- package/dist/checks/core/ui-quality.d.ts.map +1 -0
- package/dist/checks/core/ui-quality.js +1736 -0
- package/dist/checks/core/ui-quality.js.map +1 -0
- package/dist/checks/core/unused-assets-check.d.ts +2 -0
- package/dist/checks/core/unused-assets-check.d.ts.map +1 -0
- package/dist/checks/core/unused-assets-check.js +112 -0
- package/dist/checks/core/unused-assets-check.js.map +1 -0
- package/dist/checks/core/use-status-ssr-safety.d.ts +34 -0
- package/dist/checks/core/use-status-ssr-safety.d.ts.map +1 -0
- package/dist/checks/core/use-status-ssr-safety.js +283 -0
- package/dist/checks/core/use-status-ssr-safety.js.map +1 -0
- package/dist/checks/email/email-flow-validation.d.ts +23 -0
- package/dist/checks/email/email-flow-validation.d.ts.map +1 -0
- package/dist/checks/email/email-flow-validation.js +468 -0
- package/dist/checks/email/email-flow-validation.js.map +1 -0
- package/dist/checks/email/email-template-db-verification.d.ts +20 -0
- package/dist/checks/email/email-template-db-verification.d.ts.map +1 -0
- package/dist/checks/email/email-template-db-verification.js +46 -0
- package/dist/checks/email/email-template-db-verification.js.map +1 -0
- package/dist/checks/email/email-template-validation.d.ts +24 -0
- package/dist/checks/email/email-template-validation.d.ts.map +1 -0
- package/dist/checks/email/email-template-validation.js +688 -0
- package/dist/checks/email/email-template-validation.js.map +1 -0
- package/dist/checks/jsx/comment-placement.d.ts +45 -0
- package/dist/checks/jsx/comment-placement.d.ts.map +1 -0
- package/dist/checks/jsx/comment-placement.js +316 -0
- package/dist/checks/jsx/comment-placement.js.map +1 -0
- package/dist/checks/specialized/admin-layout-check.d.ts +19 -0
- package/dist/checks/specialized/admin-layout-check.d.ts.map +1 -0
- package/dist/checks/specialized/admin-layout-check.js +166 -0
- package/dist/checks/specialized/admin-layout-check.js.map +1 -0
- package/dist/checks/specialized/client-server-separation.d.ts +14 -0
- package/dist/checks/specialized/client-server-separation.d.ts.map +1 -0
- package/dist/checks/specialized/client-server-separation.js +197 -0
- package/dist/checks/specialized/client-server-separation.js.map +1 -0
- package/dist/checks/specialized/cost-optimization.d.ts +18 -0
- package/dist/checks/specialized/cost-optimization.d.ts.map +1 -0
- package/dist/checks/specialized/cost-optimization.js +78 -0
- package/dist/checks/specialized/cost-optimization.js.map +1 -0
- package/dist/checks/specialized/database-migration-sync.d.ts +21 -0
- package/dist/checks/specialized/database-migration-sync.d.ts.map +1 -0
- package/dist/checks/specialized/database-migration-sync.js +150 -0
- package/dist/checks/specialized/database-migration-sync.js.map +1 -0
- package/dist/checks/specialized/database-model-validation.d.ts +15 -0
- package/dist/checks/specialized/database-model-validation.d.ts.map +1 -0
- package/dist/checks/specialized/database-model-validation.js +35 -0
- package/dist/checks/specialized/database-model-validation.js.map +1 -0
- package/dist/checks/specialized/database-schema-migrations-diff.d.ts +27 -0
- package/dist/checks/specialized/database-schema-migrations-diff.d.ts.map +1 -0
- package/dist/checks/specialized/database-schema-migrations-diff.js +177 -0
- package/dist/checks/specialized/database-schema-migrations-diff.js.map +1 -0
- package/dist/checks/specialized/database-schema-sync.d.ts +23 -0
- package/dist/checks/specialized/database-schema-sync.d.ts.map +1 -0
- package/dist/checks/specialized/database-schema-sync.js +77 -0
- package/dist/checks/specialized/database-schema-sync.js.map +1 -0
- package/dist/checks/specialized/decimal-serialization.d.ts +24 -0
- package/dist/checks/specialized/decimal-serialization.d.ts.map +1 -0
- package/dist/checks/specialized/decimal-serialization.js +400 -0
- package/dist/checks/specialized/decimal-serialization.js.map +1 -0
- package/dist/checks/specialized/detect-router-issues.d.ts +14 -0
- package/dist/checks/specialized/detect-router-issues.d.ts.map +1 -0
- package/dist/checks/specialized/detect-router-issues.js +96 -0
- package/dist/checks/specialized/detect-router-issues.js.map +1 -0
- package/dist/checks/specialized/enum-validation.d.ts +15 -0
- package/dist/checks/specialized/enum-validation.d.ts.map +1 -0
- package/dist/checks/specialized/enum-validation.js +35 -0
- package/dist/checks/specialized/enum-validation.js.map +1 -0
- package/dist/checks/specialized/hash-collision.d.ts +18 -0
- package/dist/checks/specialized/hash-collision.d.ts.map +1 -0
- package/dist/checks/specialized/hash-collision.js +78 -0
- package/dist/checks/specialized/hash-collision.js.map +1 -0
- package/dist/checks/specialized/id-generation-enforcement.d.ts +16 -0
- package/dist/checks/specialized/id-generation-enforcement.d.ts.map +1 -0
- package/dist/checks/specialized/id-generation-enforcement.js +307 -0
- package/dist/checks/specialized/id-generation-enforcement.js.map +1 -0
- package/dist/checks/specialized/image-data-integrity.d.ts +15 -0
- package/dist/checks/specialized/image-data-integrity.d.ts.map +1 -0
- package/dist/checks/specialized/image-data-integrity.js +79 -0
- package/dist/checks/specialized/image-data-integrity.js.map +1 -0
- package/dist/checks/specialized/image-health.d.ts +14 -0
- package/dist/checks/specialized/image-health.d.ts.map +1 -0
- package/dist/checks/specialized/image-health.js +122 -0
- package/dist/checks/specialized/image-health.js.map +1 -0
- package/dist/checks/specialized/image-metadata-validation.d.ts +14 -0
- package/dist/checks/specialized/image-metadata-validation.d.ts.map +1 -0
- package/dist/checks/specialized/image-metadata-validation.js +95 -0
- package/dist/checks/specialized/image-metadata-validation.js.map +1 -0
- package/dist/checks/specialized/image-optimization.d.ts +16 -0
- package/dist/checks/specialized/image-optimization.d.ts.map +1 -0
- package/dist/checks/specialized/image-optimization.js +86 -0
- package/dist/checks/specialized/image-optimization.js.map +1 -0
- package/dist/checks/specialized/invalid-module-imports.d.ts +24 -0
- package/dist/checks/specialized/invalid-module-imports.d.ts.map +1 -0
- package/dist/checks/specialized/invalid-module-imports.js +209 -0
- package/dist/checks/specialized/invalid-module-imports.js.map +1 -0
- package/dist/checks/specialized/lint-validation.d.ts +26 -0
- package/dist/checks/specialized/lint-validation.d.ts.map +1 -0
- package/dist/checks/specialized/lint-validation.js +193 -0
- package/dist/checks/specialized/lint-validation.js.map +1 -0
- package/dist/checks/specialized/listing-workflow.d.ts +19 -0
- package/dist/checks/specialized/listing-workflow.d.ts.map +1 -0
- package/dist/checks/specialized/listing-workflow.js +89 -0
- package/dist/checks/specialized/listing-workflow.js.map +1 -0
- package/dist/checks/specialized/mui-imports-validation.d.ts +18 -0
- package/dist/checks/specialized/mui-imports-validation.d.ts.map +1 -0
- package/dist/checks/specialized/mui-imports-validation.js +134 -0
- package/dist/checks/specialized/mui-imports-validation.js.map +1 -0
- package/dist/checks/specialized/nextauth-v5-compliance.d.ts +16 -0
- package/dist/checks/specialized/nextauth-v5-compliance.d.ts.map +1 -0
- package/dist/checks/specialized/nextauth-v5-compliance.js +164 -0
- package/dist/checks/specialized/nextauth-v5-compliance.js.map +1 -0
- package/dist/checks/specialized/nextjs-params-check.d.ts +14 -0
- package/dist/checks/specialized/nextjs-params-check.d.ts.map +1 -0
- package/dist/checks/specialized/nextjs-params-check.js +140 -0
- package/dist/checks/specialized/nextjs-params-check.js.map +1 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.d.ts +16 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.d.ts.map +1 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.js +36 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.js.map +1 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.d.ts +22 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.d.ts.map +1 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.js +97 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.js.map +1 -0
- package/dist/checks/specialized/parameter-consistency-check.d.ts +20 -0
- package/dist/checks/specialized/parameter-consistency-check.d.ts.map +1 -0
- package/dist/checks/specialized/parameter-consistency-check.js +115 -0
- package/dist/checks/specialized/parameter-consistency-check.js.map +1 -0
- package/dist/checks/specialized/prisma-field-names-validation.d.ts +15 -0
- package/dist/checks/specialized/prisma-field-names-validation.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-field-names-validation.js +35 -0
- package/dist/checks/specialized/prisma-field-names-validation.js.map +1 -0
- package/dist/checks/specialized/prisma-null-syntax.d.ts +34 -0
- package/dist/checks/specialized/prisma-null-syntax.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-null-syntax.js +330 -0
- package/dist/checks/specialized/prisma-null-syntax.js.map +1 -0
- package/dist/checks/specialized/prisma-query-validation.d.ts +15 -0
- package/dist/checks/specialized/prisma-query-validation.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-query-validation.js +35 -0
- package/dist/checks/specialized/prisma-query-validation.js.map +1 -0
- package/dist/checks/specialized/product-type-validation.d.ts +17 -0
- package/dist/checks/specialized/product-type-validation.d.ts.map +1 -0
- package/dist/checks/specialized/product-type-validation.js +129 -0
- package/dist/checks/specialized/product-type-validation.js.map +1 -0
- package/dist/checks/specialized/responsive-image-validation.d.ts +14 -0
- package/dist/checks/specialized/responsive-image-validation.d.ts.map +1 -0
- package/dist/checks/specialized/responsive-image-validation.js +101 -0
- package/dist/checks/specialized/responsive-image-validation.js.map +1 -0
- package/dist/checks/specialized/root-cleanliness.d.ts +21 -0
- package/dist/checks/specialized/root-cleanliness.d.ts.map +1 -0
- package/dist/checks/specialized/root-cleanliness.js +251 -0
- package/dist/checks/specialized/root-cleanliness.js.map +1 -0
- package/dist/checks/specialized/rotation-detection-validation.d.ts +16 -0
- package/dist/checks/specialized/rotation-detection-validation.d.ts.map +1 -0
- package/dist/checks/specialized/rotation-detection-validation.js +113 -0
- package/dist/checks/specialized/rotation-detection-validation.js.map +1 -0
- package/dist/checks/specialized/script-organization.d.ts +17 -0
- package/dist/checks/specialized/script-organization.d.ts.map +1 -0
- package/dist/checks/specialized/script-organization.js +487 -0
- package/dist/checks/specialized/script-organization.js.map +1 -0
- package/dist/checks/specialized/shared-components-migration.d.ts +137 -0
- package/dist/checks/specialized/shared-components-migration.d.ts.map +1 -0
- package/dist/checks/specialized/shared-components-migration.js +1288 -0
- package/dist/checks/specialized/shared-components-migration.js.map +1 -0
- package/dist/checks/specialized/store-specialties-normalization.d.ts +10 -0
- package/dist/checks/specialized/store-specialties-normalization.d.ts.map +1 -0
- package/dist/checks/specialized/store-specialties-normalization.js +126 -0
- package/dist/checks/specialized/store-specialties-normalization.js.map +1 -0
- package/dist/checks/specialized/two-stage-trim-validation.d.ts +16 -0
- package/dist/checks/specialized/two-stage-trim-validation.d.ts.map +1 -0
- package/dist/checks/specialized/two-stage-trim-validation.js +115 -0
- package/dist/checks/specialized/two-stage-trim-validation.js.map +1 -0
- package/dist/checks/specialized/underscore-variable-audit.d.ts +26 -0
- package/dist/checks/specialized/underscore-variable-audit.d.ts.map +1 -0
- package/dist/checks/specialized/underscore-variable-audit.js +219 -0
- package/dist/checks/specialized/underscore-variable-audit.js.map +1 -0
- package/dist/checks/specialized/unified-badge-consistency.d.ts +16 -0
- package/dist/checks/specialized/unified-badge-consistency.d.ts.map +1 -0
- package/dist/checks/specialized/unified-badge-consistency.js +284 -0
- package/dist/checks/specialized/unified-badge-consistency.js.map +1 -0
- package/dist/checks/specialized/validate-integration-enums.d.ts +15 -0
- package/dist/checks/specialized/validate-integration-enums.d.ts.map +1 -0
- package/dist/checks/specialized/validate-integration-enums.js +131 -0
- package/dist/checks/specialized/validate-integration-enums.js.map +1 -0
- package/dist/checks/testing/action-regression.d.ts +23 -0
- package/dist/checks/testing/action-regression.d.ts.map +1 -0
- package/dist/checks/testing/action-regression.js +192 -0
- package/dist/checks/testing/action-regression.js.map +1 -0
- package/dist/checks/testing/critical-api-coverage.d.ts +21 -0
- package/dist/checks/testing/critical-api-coverage.d.ts.map +1 -0
- package/dist/checks/testing/critical-api-coverage.js +158 -0
- package/dist/checks/testing/critical-api-coverage.js.map +1 -0
- package/dist/checks/testing/data-entry-regression-required.d.ts +24 -0
- package/dist/checks/testing/data-entry-regression-required.d.ts.map +1 -0
- package/dist/checks/testing/data-entry-regression-required.js +378 -0
- package/dist/checks/testing/data-entry-regression-required.js.map +1 -0
- package/dist/checks/testing/e2e-best-practices.d.ts +24 -0
- package/dist/checks/testing/e2e-best-practices.d.ts.map +1 -0
- package/dist/checks/testing/e2e-best-practices.js +791 -0
- package/dist/checks/testing/e2e-best-practices.js.map +1 -0
- package/dist/checks/testing/e2e-flake-patterns.d.ts +26 -0
- package/dist/checks/testing/e2e-flake-patterns.d.ts.map +1 -0
- package/dist/checks/testing/e2e-flake-patterns.js +305 -0
- package/dist/checks/testing/e2e-flake-patterns.js.map +1 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.d.ts +25 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.d.ts.map +1 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.js +613 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.js.map +1 -0
- package/dist/checks/testing/e2e-slow-tests.d.ts +9 -0
- package/dist/checks/testing/e2e-slow-tests.d.ts.map +1 -0
- package/dist/checks/testing/e2e-slow-tests.js +142 -0
- package/dist/checks/testing/e2e-slow-tests.js.map +1 -0
- package/dist/checks/testing/e2e-timeouts.d.ts +9 -0
- package/dist/checks/testing/e2e-timeouts.d.ts.map +1 -0
- package/dist/checks/testing/e2e-timeouts.js +82 -0
- package/dist/checks/testing/e2e-timeouts.js.map +1 -0
- package/dist/checks/testing/integration-e2e-depth.d.ts +20 -0
- package/dist/checks/testing/integration-e2e-depth.d.ts.map +1 -0
- package/dist/checks/testing/integration-e2e-depth.js +575 -0
- package/dist/checks/testing/integration-e2e-depth.js.map +1 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.d.ts +31 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.d.ts.map +1 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.js +1582 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.js.map +1 -0
- package/dist/checks/testing/playwright-mock-inventory.d.ts +24 -0
- package/dist/checks/testing/playwright-mock-inventory.d.ts.map +1 -0
- package/dist/checks/testing/playwright-mock-inventory.js +380 -0
- package/dist/checks/testing/playwright-mock-inventory.js.map +1 -0
- package/dist/checks/testing/test-coverage-threshold.d.ts +25 -0
- package/dist/checks/testing/test-coverage-threshold.d.ts.map +1 -0
- package/dist/checks/testing/test-coverage-threshold.js +166 -0
- package/dist/checks/testing/test-coverage-threshold.js.map +1 -0
- package/dist/checks/testing/test-flakiness-score.d.ts +27 -0
- package/dist/checks/testing/test-flakiness-score.d.ts.map +1 -0
- package/dist/checks/testing/test-flakiness-score.js +358 -0
- package/dist/checks/testing/test-flakiness-score.js.map +1 -0
- package/dist/checks/testing/test-patterns.d.ts +16 -0
- package/dist/checks/testing/test-patterns.d.ts.map +1 -0
- package/dist/checks/testing/test-patterns.js +156 -0
- package/dist/checks/testing/test-patterns.js.map +1 -0
- package/dist/checks/workflows/a-plus-rating-validation.d.ts +42 -0
- package/dist/checks/workflows/a-plus-rating-validation.d.ts.map +1 -0
- package/dist/checks/workflows/a-plus-rating-validation.js +527 -0
- package/dist/checks/workflows/a-plus-rating-validation.js.map +1 -0
- package/dist/checks/workflows/affected.d.ts +14 -0
- package/dist/checks/workflows/affected.d.ts.map +1 -0
- package/dist/checks/workflows/affected.js +126 -0
- package/dist/checks/workflows/affected.js.map +1 -0
- package/dist/checks/workflows/ai.d.ts +6 -0
- package/dist/checks/workflows/ai.d.ts.map +1 -0
- package/dist/checks/workflows/ai.js +42 -0
- package/dist/checks/workflows/ai.js.map +1 -0
- package/dist/checks/workflows/all.d.ts +31 -0
- package/dist/checks/workflows/all.d.ts.map +1 -0
- package/dist/checks/workflows/all.js +2688 -0
- package/dist/checks/workflows/all.js.map +1 -0
- package/dist/checks/workflows/commit.d.ts +19 -0
- package/dist/checks/workflows/commit.d.ts.map +1 -0
- package/dist/checks/workflows/commit.js +207 -0
- package/dist/checks/workflows/commit.js.map +1 -0
- package/dist/checks/workflows/critical.d.ts +9 -0
- package/dist/checks/workflows/critical.d.ts.map +1 -0
- package/dist/checks/workflows/critical.js +213 -0
- package/dist/checks/workflows/critical.js.map +1 -0
- package/dist/checks/workflows/database-id-validation.d.ts +9 -0
- package/dist/checks/workflows/database-id-validation.d.ts.map +1 -0
- package/dist/checks/workflows/database-id-validation.js +13 -0
- package/dist/checks/workflows/database-id-validation.js.map +1 -0
- package/dist/checks/workflows/deploy.d.ts +20 -0
- package/dist/checks/workflows/deploy.d.ts.map +1 -0
- package/dist/checks/workflows/deploy.js +107 -0
- package/dist/checks/workflows/deploy.js.map +1 -0
- package/dist/checks/workflows/deployment-readiness.d.ts +12 -0
- package/dist/checks/workflows/deployment-readiness.d.ts.map +1 -0
- package/dist/checks/workflows/deployment-readiness.js +403 -0
- package/dist/checks/workflows/deployment-readiness.js.map +1 -0
- package/dist/checks/workflows/dev.d.ts +19 -0
- package/dist/checks/workflows/dev.d.ts.map +1 -0
- package/dist/checks/workflows/dev.js +88 -0
- package/dist/checks/workflows/dev.js.map +1 -0
- package/dist/checks/workflows/development.d.ts +9 -0
- package/dist/checks/workflows/development.d.ts.map +1 -0
- package/dist/checks/workflows/development.js +65 -0
- package/dist/checks/workflows/development.js.map +1 -0
- package/dist/checks/workflows/enterprise.d.ts +10 -0
- package/dist/checks/workflows/enterprise.d.ts.map +1 -0
- package/dist/checks/workflows/enterprise.js +359 -0
- package/dist/checks/workflows/enterprise.js.map +1 -0
- package/dist/checks/workflows/images.d.ts +6 -0
- package/dist/checks/workflows/images.d.ts.map +1 -0
- package/dist/checks/workflows/images.js +58 -0
- package/dist/checks/workflows/images.js.map +1 -0
- package/dist/checks/workflows/naming.d.ts +19 -0
- package/dist/checks/workflows/naming.d.ts.map +1 -0
- package/dist/checks/workflows/naming.js +42 -0
- package/dist/checks/workflows/naming.js.map +1 -0
- package/dist/checks/workflows/performance.d.ts +8 -0
- package/dist/checks/workflows/performance.d.ts.map +1 -0
- package/dist/checks/workflows/performance.js +77 -0
- package/dist/checks/workflows/performance.js.map +1 -0
- package/dist/checks/workflows/pre-deploy.d.ts +6 -0
- package/dist/checks/workflows/pre-deploy.d.ts.map +1 -0
- package/dist/checks/workflows/pre-deploy.js +41 -0
- package/dist/checks/workflows/pre-deploy.js.map +1 -0
- package/dist/checks/workflows/security.d.ts +8 -0
- package/dist/checks/workflows/security.d.ts.map +1 -0
- package/dist/checks/workflows/security.js +71 -0
- package/dist/checks/workflows/security.js.map +1 -0
- package/dist/checks/workflows/supercatch.d.ts +8 -0
- package/dist/checks/workflows/supercatch.d.ts.map +1 -0
- package/dist/checks/workflows/supercatch.js +127 -0
- package/dist/checks/workflows/supercatch.js.map +1 -0
- package/dist/checks/workflows/ui-quality.d.ts +9 -0
- package/dist/checks/workflows/ui-quality.d.ts.map +1 -0
- package/dist/checks/workflows/ui-quality.js +264 -0
- package/dist/checks/workflows/ui-quality.js.map +1 -0
- package/dist/checks/workflows/ui-uniformity.d.ts +18 -0
- package/dist/checks/workflows/ui-uniformity.d.ts.map +1 -0
- package/dist/checks/workflows/ui-uniformity.js +265 -0
- package/dist/checks/workflows/ui-uniformity.js.map +1 -0
- package/dist/checks/workflows/vercel.d.ts +16 -0
- package/dist/checks/workflows/vercel.d.ts.map +1 -0
- package/dist/checks/workflows/vercel.js +173 -0
- package/dist/checks/workflows/vercel.js.map +1 -0
- package/dist/utils/validation-helpers.d.ts +43 -0
- package/dist/utils/validation-helpers.d.ts.map +1 -0
- package/dist/utils/validation-helpers.js +370 -0
- package/dist/utils/validation-helpers.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,725 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Caching Strategy Preflight (NON-BLOCKING)
|
|
5
|
+
*
|
|
6
|
+
* Validates caching patterns across the application for optimal performance.
|
|
7
|
+
* Ensures proper cache configuration, invalidation, and consistency.
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* 1. HTTP Cache Headers - API routes set appropriate Cache-Control
|
|
11
|
+
* 2. React Query/SWR Stale Time - Appropriate cache time configuration
|
|
12
|
+
* 3. Cache Key Consistency - Deterministic, stable query keys
|
|
13
|
+
* 4. Revalidation Configuration - Next.js ISR/revalidate settings
|
|
14
|
+
* 5. Cache Invalidation Patterns - Proper invalidation after mutations
|
|
15
|
+
* 6. Static Asset Caching - next.config.js headers configuration
|
|
16
|
+
* 7. Browser Storage Patterns - localStorage/sessionStorage usage
|
|
17
|
+
* 8. Memoization Patterns - useMemo/useCallback for expensive operations
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* pnpm preflight:caching-strategy # All checks
|
|
21
|
+
* pnpm preflight:caching-strategy headers # HTTP cache headers only
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.CachingStrategyModule = void 0;
|
|
58
|
+
const fs = __importStar(require("fs"));
|
|
59
|
+
const path = __importStar(require("path"));
|
|
60
|
+
const console_chars_1 = require("../../utils/console-chars");
|
|
61
|
+
const file_cache_1 = require("../../shared/file-cache");
|
|
62
|
+
class CachingStrategyModule {
|
|
63
|
+
verbose;
|
|
64
|
+
constructor(options = {}) {
|
|
65
|
+
this.verbose = options.verbose || false;
|
|
66
|
+
}
|
|
67
|
+
async getTsxFiles() {
|
|
68
|
+
return file_cache_1.fileCache.getAppAndComponentsTSX();
|
|
69
|
+
}
|
|
70
|
+
async getApiRoutes() {
|
|
71
|
+
const files = await file_cache_1.fileCache.getAppAndComponentsTSX();
|
|
72
|
+
return files.filter(f => f.includes("/api/") && (f.endsWith("route.ts") || f.endsWith("route.tsx")));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 1. HTTP Cache Headers
|
|
76
|
+
* Check API routes for appropriate Cache-Control headers
|
|
77
|
+
*/
|
|
78
|
+
async checkHttpCacheHeaders() {
|
|
79
|
+
const startTime = Date.now();
|
|
80
|
+
const issues = [];
|
|
81
|
+
const apiRoutes = await this.getApiRoutes();
|
|
82
|
+
for (const file of apiRoutes) {
|
|
83
|
+
const content = fs.readFileSync(file, "utf8");
|
|
84
|
+
const lines = content.split("\n");
|
|
85
|
+
// Skip if it's a mutation endpoint (POST, PUT, DELETE, PATCH)
|
|
86
|
+
const hasMutation = /export\s+(?:async\s+)?function\s+(?:POST|PUT|DELETE|PATCH)/i.test(content);
|
|
87
|
+
const hasGet = /export\s+(?:async\s+)?function\s+GET/i.test(content);
|
|
88
|
+
if (hasGet && !hasMutation) {
|
|
89
|
+
// Check for Cache-Control header
|
|
90
|
+
const hasCacheControl = /Cache-Control|cache-control|headers\.set\(['"']Cache/i.test(content);
|
|
91
|
+
const hasNextRevalidate = /revalidate\s*[:=]/i.test(content);
|
|
92
|
+
if (!hasCacheControl && !hasNextRevalidate) {
|
|
93
|
+
issues.push({
|
|
94
|
+
file,
|
|
95
|
+
line: 1,
|
|
96
|
+
type: "missing-cache-header",
|
|
97
|
+
severity: "info",
|
|
98
|
+
message: "GET API route missing Cache-Control header",
|
|
99
|
+
suggestion: "Add Cache-Control header: headers.set('Cache-Control', 'public, max-age=60, stale-while-revalidate=300')",
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Check for no-store on dynamic data
|
|
104
|
+
for (let i = 0; i < lines.length; i++) {
|
|
105
|
+
const line = lines[i];
|
|
106
|
+
// Detect user-specific data without no-store
|
|
107
|
+
if (/session|currentUser|user\.id|auth/i.test(line) && hasGet) {
|
|
108
|
+
const contextBlock = lines.slice(Math.max(0, i - 10), Math.min(i + 10, lines.length)).join("\n");
|
|
109
|
+
if (!/no-store|private|max-age=0/i.test(contextBlock)) {
|
|
110
|
+
issues.push({
|
|
111
|
+
file,
|
|
112
|
+
line: i + 1,
|
|
113
|
+
type: "user-data-caching",
|
|
114
|
+
severity: "warning",
|
|
115
|
+
message: "User-specific data may be cached without private/no-store directive",
|
|
116
|
+
suggestion: "Add 'Cache-Control: private, no-store' for user-specific endpoints",
|
|
117
|
+
snippet: line.trim(),
|
|
118
|
+
});
|
|
119
|
+
break; // One warning per file
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
name: "HTTP Cache Headers",
|
|
126
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
127
|
+
blocking: false,
|
|
128
|
+
issues,
|
|
129
|
+
duration: Date.now() - startTime,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 2. React Query/SWR Stale Time
|
|
134
|
+
* Check for appropriate staleTime/cacheTime configuration
|
|
135
|
+
*/
|
|
136
|
+
async checkQueryStaleTime() {
|
|
137
|
+
const startTime = Date.now();
|
|
138
|
+
const issues = [];
|
|
139
|
+
const files = await this.getTsxFiles();
|
|
140
|
+
for (const file of files) {
|
|
141
|
+
const content = fs.readFileSync(file, "utf8");
|
|
142
|
+
const lines = content.split("\n");
|
|
143
|
+
// Check for useQuery without staleTime
|
|
144
|
+
for (let i = 0; i < lines.length; i++) {
|
|
145
|
+
const line = lines[i];
|
|
146
|
+
// Detect useQuery usage
|
|
147
|
+
if (/useQuery\s*\(/.test(line) || /useQuery\s*</.test(line)) {
|
|
148
|
+
const contextBlock = lines.slice(i, Math.min(i + 15, lines.length)).join("\n");
|
|
149
|
+
// Check if staleTime is configured
|
|
150
|
+
if (!/staleTime/i.test(contextBlock)) {
|
|
151
|
+
issues.push({
|
|
152
|
+
file,
|
|
153
|
+
line: i + 1,
|
|
154
|
+
type: "missing-stale-time",
|
|
155
|
+
severity: "info",
|
|
156
|
+
message: "useQuery without explicit staleTime configuration",
|
|
157
|
+
suggestion: "Consider adding staleTime to control refetch behavior: { staleTime: 5 * 60 * 1000 }",
|
|
158
|
+
snippet: line.trim(),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// Check for staleTime: 0 (always stale)
|
|
162
|
+
if (/staleTime\s*:\s*0[,\s}]/.test(contextBlock)) {
|
|
163
|
+
issues.push({
|
|
164
|
+
file,
|
|
165
|
+
line: i + 1,
|
|
166
|
+
type: "zero-stale-time",
|
|
167
|
+
severity: "info",
|
|
168
|
+
message: "staleTime set to 0 causes unnecessary refetches",
|
|
169
|
+
suggestion: "Consider a small staleTime (e.g., 30000) unless real-time data is required",
|
|
170
|
+
snippet: line.trim(),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Check for useSWR without revalidation config
|
|
175
|
+
if (/useSWR\s*\(/.test(line)) {
|
|
176
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
177
|
+
if (!/revalidateOnFocus|revalidateOnReconnect|dedupingInterval/i.test(contextBlock)) {
|
|
178
|
+
issues.push({
|
|
179
|
+
file,
|
|
180
|
+
line: i + 1,
|
|
181
|
+
type: "swr-no-config",
|
|
182
|
+
severity: "info",
|
|
183
|
+
message: "useSWR without explicit revalidation configuration",
|
|
184
|
+
suggestion: "Consider configuring revalidateOnFocus, dedupingInterval for optimal caching",
|
|
185
|
+
snippet: line.trim(),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
name: "React Query/SWR Stale Time",
|
|
193
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
194
|
+
blocking: false,
|
|
195
|
+
issues,
|
|
196
|
+
duration: Date.now() - startTime,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 3. Cache Key Consistency
|
|
201
|
+
* Ensure query keys are deterministic and stable
|
|
202
|
+
*/
|
|
203
|
+
async checkCacheKeyConsistency() {
|
|
204
|
+
const startTime = Date.now();
|
|
205
|
+
const issues = [];
|
|
206
|
+
const files = await this.getTsxFiles();
|
|
207
|
+
for (const file of files) {
|
|
208
|
+
const content = fs.readFileSync(file, "utf8");
|
|
209
|
+
const lines = content.split("\n");
|
|
210
|
+
for (let i = 0; i < lines.length; i++) {
|
|
211
|
+
const line = lines[i];
|
|
212
|
+
// Check for non-deterministic values in query keys
|
|
213
|
+
if (/queryKey\s*[:=]/.test(line) || /\[\s*['"]/.test(line)) {
|
|
214
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
215
|
+
// Detect Date.now(), Math.random(), new Date() in keys
|
|
216
|
+
if (/Date\.now\(\)|Math\.random\(\)|new Date\(\)|uuid\(\)|crypto\.randomUUID/i.test(contextBlock)) {
|
|
217
|
+
if (/queryKey|useSWR|useQuery/i.test(contextBlock)) {
|
|
218
|
+
issues.push({
|
|
219
|
+
file,
|
|
220
|
+
line: i + 1,
|
|
221
|
+
type: "non-deterministic-key",
|
|
222
|
+
severity: "warning",
|
|
223
|
+
message: "Non-deterministic value in cache key causes cache misses",
|
|
224
|
+
suggestion: "Use stable, deterministic values for query keys",
|
|
225
|
+
snippet: line.trim(),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Check for object references in query keys (common mistake)
|
|
231
|
+
if (/queryKey\s*:\s*\[.*\{/.test(line)) {
|
|
232
|
+
const contextBlock = lines.slice(i, Math.min(i + 3, lines.length)).join("\n");
|
|
233
|
+
if (!/JSON\.stringify|\.id|\.slug/.test(contextBlock)) {
|
|
234
|
+
issues.push({
|
|
235
|
+
file,
|
|
236
|
+
line: i + 1,
|
|
237
|
+
type: "object-in-query-key",
|
|
238
|
+
severity: "info",
|
|
239
|
+
message: "Object in query key may cause unexpected cache behavior",
|
|
240
|
+
suggestion: "Ensure objects in query keys are serializable or use primitive values",
|
|
241
|
+
snippet: line.trim(),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
name: "Cache Key Consistency",
|
|
249
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
250
|
+
blocking: false,
|
|
251
|
+
issues,
|
|
252
|
+
duration: Date.now() - startTime,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 4. Revalidation Configuration
|
|
257
|
+
* Check for Next.js ISR and revalidate settings
|
|
258
|
+
*/
|
|
259
|
+
async checkRevalidationConfig() {
|
|
260
|
+
const startTime = Date.now();
|
|
261
|
+
const issues = [];
|
|
262
|
+
// Check page files for revalidate config
|
|
263
|
+
const files = await this.getTsxFiles();
|
|
264
|
+
const pageFiles = files.filter(f => f.includes("/app/") && (f.endsWith("page.tsx") || f.endsWith("page.ts")));
|
|
265
|
+
for (const file of pageFiles) {
|
|
266
|
+
const content = fs.readFileSync(file, "utf8");
|
|
267
|
+
const lines = content.split("\n");
|
|
268
|
+
// Check for fetch without revalidate
|
|
269
|
+
for (let i = 0; i < lines.length; i++) {
|
|
270
|
+
const line = lines[i];
|
|
271
|
+
if (/fetch\s*\(/.test(line)) {
|
|
272
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
273
|
+
// Check if it has next: { revalidate } or cache config
|
|
274
|
+
if (!/next\s*:\s*\{|cache\s*:|revalidate/i.test(contextBlock)) {
|
|
275
|
+
// Skip if it's a mutation (POST, PUT, etc)
|
|
276
|
+
if (!/method\s*:\s*['"](?:POST|PUT|DELETE|PATCH)/i.test(contextBlock)) {
|
|
277
|
+
issues.push({
|
|
278
|
+
file,
|
|
279
|
+
line: i + 1,
|
|
280
|
+
type: "fetch-no-revalidate",
|
|
281
|
+
severity: "info",
|
|
282
|
+
message: "fetch() without explicit cache/revalidate configuration",
|
|
283
|
+
suggestion: "Add { next: { revalidate: 60 } } for ISR or { cache: 'no-store' } for dynamic",
|
|
284
|
+
snippet: line.trim(),
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Check for exported revalidate constant
|
|
291
|
+
if (/export\s+const\s+dynamic\s*=\s*['"]force-dynamic['"]/.test(content)) {
|
|
292
|
+
if (!/export\s+const\s+revalidate/.test(content)) {
|
|
293
|
+
// This is fine - force-dynamic means no caching
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Check for very long revalidate times
|
|
298
|
+
for (const file of files) {
|
|
299
|
+
const content = fs.readFileSync(file, "utf8");
|
|
300
|
+
const lines = content.split("\n");
|
|
301
|
+
for (let i = 0; i < lines.length; i++) {
|
|
302
|
+
const line = lines[i];
|
|
303
|
+
const revalidateMatch = line.match(/revalidate\s*[:=]\s*(\d+)/);
|
|
304
|
+
if (revalidateMatch) {
|
|
305
|
+
const revalidateTime = parseInt(revalidateMatch[1], 10);
|
|
306
|
+
if (revalidateTime > 86400) {
|
|
307
|
+
issues.push({
|
|
308
|
+
file,
|
|
309
|
+
line: i + 1,
|
|
310
|
+
type: "long-revalidate",
|
|
311
|
+
severity: "info",
|
|
312
|
+
message: `Very long revalidate time (${revalidateTime}s = ${(revalidateTime / 86400).toFixed(1)} days)`,
|
|
313
|
+
suggestion: "Consider if data can really be stale for this long",
|
|
314
|
+
snippet: line.trim(),
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return {
|
|
321
|
+
name: "Revalidation Configuration",
|
|
322
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
323
|
+
blocking: false,
|
|
324
|
+
issues,
|
|
325
|
+
duration: Date.now() - startTime,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* 5. Cache Invalidation Patterns
|
|
330
|
+
* Check for proper invalidation after mutations
|
|
331
|
+
*/
|
|
332
|
+
async checkCacheInvalidation() {
|
|
333
|
+
const startTime = Date.now();
|
|
334
|
+
const issues = [];
|
|
335
|
+
const files = await this.getTsxFiles();
|
|
336
|
+
for (const file of files) {
|
|
337
|
+
const content = fs.readFileSync(file, "utf8");
|
|
338
|
+
const lines = content.split("\n");
|
|
339
|
+
// Track if file uses React Query
|
|
340
|
+
const usesReactQuery = /useQuery|useMutation|useQueryClient/.test(content);
|
|
341
|
+
const usesSWR = /useSWR|mutate\s*\(/.test(content);
|
|
342
|
+
for (let i = 0; i < lines.length; i++) {
|
|
343
|
+
const line = lines[i];
|
|
344
|
+
// Check for useMutation without onSuccess invalidation
|
|
345
|
+
if (/useMutation\s*\(/.test(line)) {
|
|
346
|
+
const contextBlock = lines.slice(i, Math.min(i + 20, lines.length)).join("\n");
|
|
347
|
+
if (!/invalidateQueries|setQueryData|refetchQueries/.test(contextBlock)) {
|
|
348
|
+
issues.push({
|
|
349
|
+
file,
|
|
350
|
+
line: i + 1,
|
|
351
|
+
type: "mutation-no-invalidation",
|
|
352
|
+
severity: "warning",
|
|
353
|
+
message: "useMutation without cache invalidation may show stale data",
|
|
354
|
+
suggestion: "Add onSuccess: () => queryClient.invalidateQueries({ queryKey: [...] })",
|
|
355
|
+
snippet: line.trim(),
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Check for fetch POST/PUT/DELETE without SWR mutate
|
|
360
|
+
if (usesSWR && /fetch\s*\(/.test(line)) {
|
|
361
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
362
|
+
if (/method\s*:\s*['"](?:POST|PUT|DELETE|PATCH)/.test(contextBlock)) {
|
|
363
|
+
// Check surrounding code for mutate call
|
|
364
|
+
const surroundingBlock = lines.slice(Math.max(0, i - 5), Math.min(i + 15, lines.length)).join("\n");
|
|
365
|
+
if (!/mutate\s*\(|revalidate/.test(surroundingBlock)) {
|
|
366
|
+
issues.push({
|
|
367
|
+
file,
|
|
368
|
+
line: i + 1,
|
|
369
|
+
type: "mutation-no-swr-invalidation",
|
|
370
|
+
severity: "info",
|
|
371
|
+
message: "Mutation without SWR mutate() may show stale data",
|
|
372
|
+
suggestion: "Call mutate() or revalidate after successful mutation",
|
|
373
|
+
snippet: line.trim(),
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Check for direct state updates that bypass cache
|
|
379
|
+
if (usesReactQuery && /setState\s*\(/.test(line)) {
|
|
380
|
+
const contextBlock = lines.slice(Math.max(0, i - 5), Math.min(i + 5, lines.length)).join("\n");
|
|
381
|
+
if (/queryKey|useQuery/.test(content) && /\.data/.test(contextBlock)) {
|
|
382
|
+
issues.push({
|
|
383
|
+
file,
|
|
384
|
+
line: i + 1,
|
|
385
|
+
type: "bypass-cache-update",
|
|
386
|
+
severity: "info",
|
|
387
|
+
message: "Direct setState may bypass React Query cache",
|
|
388
|
+
suggestion: "Consider using queryClient.setQueryData for optimistic updates",
|
|
389
|
+
snippet: line.trim(),
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return {
|
|
396
|
+
name: "Cache Invalidation Patterns",
|
|
397
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
398
|
+
blocking: false,
|
|
399
|
+
issues,
|
|
400
|
+
duration: Date.now() - startTime,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* 6. Static Asset Caching
|
|
405
|
+
* Check next.config.js for proper cache headers
|
|
406
|
+
*/
|
|
407
|
+
async checkStaticAssetCaching() {
|
|
408
|
+
const startTime = Date.now();
|
|
409
|
+
const issues = [];
|
|
410
|
+
const projectRoot = process.cwd();
|
|
411
|
+
const nextConfigPaths = [
|
|
412
|
+
path.join(projectRoot, "next.config.js"),
|
|
413
|
+
path.join(projectRoot, "next.config.mjs"),
|
|
414
|
+
path.join(projectRoot, "next.config.ts"),
|
|
415
|
+
];
|
|
416
|
+
let nextConfigPath = null;
|
|
417
|
+
for (const p of nextConfigPaths) {
|
|
418
|
+
if (fs.existsSync(p)) {
|
|
419
|
+
nextConfigPath = p;
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (nextConfigPath) {
|
|
424
|
+
const content = fs.readFileSync(nextConfigPath, "utf8");
|
|
425
|
+
const lines = content.split("\n");
|
|
426
|
+
// Check for custom headers configuration
|
|
427
|
+
if (!/headers\s*\(\s*\)|async\s+headers\s*\(/.test(content)) {
|
|
428
|
+
issues.push({
|
|
429
|
+
file: nextConfigPath,
|
|
430
|
+
line: 1,
|
|
431
|
+
type: "no-custom-headers",
|
|
432
|
+
severity: "info",
|
|
433
|
+
message: "No custom headers() configuration in next.config",
|
|
434
|
+
suggestion: "Consider adding cache headers for static assets and API routes",
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
// Check for images configuration
|
|
438
|
+
if (!/images\s*:\s*\{/.test(content)) {
|
|
439
|
+
issues.push({
|
|
440
|
+
file: nextConfigPath,
|
|
441
|
+
line: 1,
|
|
442
|
+
type: "no-image-config",
|
|
443
|
+
severity: "info",
|
|
444
|
+
message: "No images configuration for Next.js Image optimization",
|
|
445
|
+
suggestion: "Configure images.minimumCacheTTL for image caching",
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
// Check for minimumCacheTTL
|
|
450
|
+
if (!/minimumCacheTTL/.test(content)) {
|
|
451
|
+
for (let i = 0; i < lines.length; i++) {
|
|
452
|
+
if (/images\s*:/.test(lines[i])) {
|
|
453
|
+
issues.push({
|
|
454
|
+
file: nextConfigPath,
|
|
455
|
+
line: i + 1,
|
|
456
|
+
type: "no-image-cache-ttl",
|
|
457
|
+
severity: "info",
|
|
458
|
+
message: "images config without minimumCacheTTL",
|
|
459
|
+
suggestion: "Add minimumCacheTTL: 60 (seconds) to cache optimized images",
|
|
460
|
+
snippet: lines[i].trim(),
|
|
461
|
+
});
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return {
|
|
469
|
+
name: "Static Asset Caching",
|
|
470
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
471
|
+
blocking: false,
|
|
472
|
+
issues,
|
|
473
|
+
duration: Date.now() - startTime,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* 7. Browser Storage Patterns
|
|
478
|
+
* Check localStorage/sessionStorage usage patterns
|
|
479
|
+
*/
|
|
480
|
+
async checkBrowserStoragePatterns() {
|
|
481
|
+
const startTime = Date.now();
|
|
482
|
+
const issues = [];
|
|
483
|
+
const files = await this.getTsxFiles();
|
|
484
|
+
for (const file of files) {
|
|
485
|
+
const content = fs.readFileSync(file, "utf8");
|
|
486
|
+
const lines = content.split("\n");
|
|
487
|
+
for (let i = 0; i < lines.length; i++) {
|
|
488
|
+
const line = lines[i];
|
|
489
|
+
// Check for localStorage without try-catch (can fail in SSR or private mode)
|
|
490
|
+
if (/localStorage\.|sessionStorage\./.test(line)) {
|
|
491
|
+
const contextBlock = lines.slice(Math.max(0, i - 3), Math.min(i + 3, lines.length)).join("\n");
|
|
492
|
+
if (!/try\s*\{|catch\s*\(|typeof\s+window/.test(contextBlock)) {
|
|
493
|
+
issues.push({
|
|
494
|
+
file,
|
|
495
|
+
line: i + 1,
|
|
496
|
+
type: "storage-no-try-catch",
|
|
497
|
+
severity: "warning",
|
|
498
|
+
message: "localStorage/sessionStorage access without error handling",
|
|
499
|
+
suggestion: "Wrap in try-catch - storage can fail in SSR, private browsing, or when quota exceeded",
|
|
500
|
+
snippet: line.trim(),
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
// Check for storing large objects
|
|
505
|
+
if (/localStorage\.setItem|sessionStorage\.setItem/.test(line)) {
|
|
506
|
+
const contextBlock = lines.slice(i, Math.min(i + 3, lines.length)).join("\n");
|
|
507
|
+
if (/JSON\.stringify\s*\([^)]{50,}/.test(contextBlock)) {
|
|
508
|
+
issues.push({
|
|
509
|
+
file,
|
|
510
|
+
line: i + 1,
|
|
511
|
+
type: "large-storage-object",
|
|
512
|
+
severity: "info",
|
|
513
|
+
message: "Potentially large object being stored in browser storage",
|
|
514
|
+
suggestion: "Consider using IndexedDB for large data or implement storage size limits",
|
|
515
|
+
snippet: line.trim(),
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// Check for cache expiration patterns
|
|
520
|
+
if (/localStorage\.getItem/.test(line)) {
|
|
521
|
+
const functionBlock = lines.slice(Math.max(0, i - 10), Math.min(i + 10, lines.length)).join("\n");
|
|
522
|
+
if (/cache|Cache/.test(functionBlock) && !/expir|ttl|timestamp|Date\.now/i.test(functionBlock)) {
|
|
523
|
+
issues.push({
|
|
524
|
+
file,
|
|
525
|
+
line: i + 1,
|
|
526
|
+
type: "cache-no-expiration",
|
|
527
|
+
severity: "info",
|
|
528
|
+
message: "Cache read without expiration check",
|
|
529
|
+
suggestion: "Consider adding TTL/expiration to cached data",
|
|
530
|
+
snippet: line.trim(),
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
return {
|
|
537
|
+
name: "Browser Storage Patterns",
|
|
538
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
539
|
+
blocking: false,
|
|
540
|
+
issues,
|
|
541
|
+
duration: Date.now() - startTime,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* 8. Memoization Patterns
|
|
546
|
+
* Check useMemo/useCallback usage for expensive operations
|
|
547
|
+
*/
|
|
548
|
+
async checkMemoizationPatterns() {
|
|
549
|
+
const startTime = Date.now();
|
|
550
|
+
const issues = [];
|
|
551
|
+
const files = await this.getTsxFiles();
|
|
552
|
+
for (const file of files) {
|
|
553
|
+
const content = fs.readFileSync(file, "utf8");
|
|
554
|
+
const lines = content.split("\n");
|
|
555
|
+
for (let i = 0; i < lines.length; i++) {
|
|
556
|
+
const line = lines[i];
|
|
557
|
+
// Check for expensive operations without useMemo
|
|
558
|
+
if (/\.filter\s*\(.*\)\.map\s*\(|\.sort\s*\(.*\)\.filter|\.reduce\s*\(/.test(line)) {
|
|
559
|
+
const contextBlock = lines.slice(Math.max(0, i - 3), Math.min(i + 1, lines.length)).join("\n");
|
|
560
|
+
if (!/useMemo|useCallback/.test(contextBlock)) {
|
|
561
|
+
// Check if it's in render/return path
|
|
562
|
+
const beforeBlock = lines.slice(Math.max(0, i - 15), i).join("\n");
|
|
563
|
+
if (/return\s*\(|return\s*<|{\s*$/.test(beforeBlock)) {
|
|
564
|
+
issues.push({
|
|
565
|
+
file,
|
|
566
|
+
line: i + 1,
|
|
567
|
+
type: "unmemoized-computation",
|
|
568
|
+
severity: "info",
|
|
569
|
+
message: "Chained array operations in render without useMemo",
|
|
570
|
+
suggestion: "Wrap expensive computations in useMemo to prevent recalculation on every render",
|
|
571
|
+
snippet: line.trim().substring(0, 80),
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
// Check for inline object/array in dependency arrays
|
|
577
|
+
if (/useMemo\s*\(|useCallback\s*\(|useEffect\s*\(/.test(line)) {
|
|
578
|
+
const hookBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
579
|
+
const depsMatch = hookBlock.match(/\],\s*\[(.*?)\]/s);
|
|
580
|
+
if (depsMatch) {
|
|
581
|
+
const deps = depsMatch[1];
|
|
582
|
+
if (/\{.*\}|\[.*\]/.test(deps) && !/useMemo|useCallback|useRef/.test(deps)) {
|
|
583
|
+
issues.push({
|
|
584
|
+
file,
|
|
585
|
+
line: i + 1,
|
|
586
|
+
type: "inline-dep-object",
|
|
587
|
+
severity: "warning",
|
|
588
|
+
message: "Inline object/array in dependency array causes infinite re-runs",
|
|
589
|
+
suggestion: "Extract inline objects to useMemo or useRef",
|
|
590
|
+
snippet: line.trim(),
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
// Check for useMemo with empty deps but using external values
|
|
596
|
+
if (/useMemo\s*\(/.test(line)) {
|
|
597
|
+
const hookBlock = lines.slice(i, Math.min(i + 8, lines.length)).join("\n");
|
|
598
|
+
if (/\],\s*\[\s*\]\s*\)/.test(hookBlock)) {
|
|
599
|
+
// Has empty dependency array - check if it references props/state
|
|
600
|
+
if (/props\.|state\.|use[A-Z]/.test(hookBlock)) {
|
|
601
|
+
issues.push({
|
|
602
|
+
file,
|
|
603
|
+
line: i + 1,
|
|
604
|
+
type: "empty-deps-with-refs",
|
|
605
|
+
severity: "warning",
|
|
606
|
+
message: "useMemo with empty deps but referencing props/state - value will be stale",
|
|
607
|
+
suggestion: "Add referenced values to the dependency array",
|
|
608
|
+
snippet: line.trim(),
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return {
|
|
616
|
+
name: "Memoization Patterns",
|
|
617
|
+
passed: issues.filter(i => i.severity === "error").length === 0,
|
|
618
|
+
blocking: false,
|
|
619
|
+
issues,
|
|
620
|
+
duration: Date.now() - startTime,
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Run all caching strategy checks
|
|
625
|
+
*/
|
|
626
|
+
async runAll(filter) {
|
|
627
|
+
const startTime = Date.now();
|
|
628
|
+
const checkMap = {
|
|
629
|
+
headers: () => this.checkHttpCacheHeaders(),
|
|
630
|
+
staletime: () => this.checkQueryStaleTime(),
|
|
631
|
+
keys: () => this.checkCacheKeyConsistency(),
|
|
632
|
+
revalidate: () => this.checkRevalidationConfig(),
|
|
633
|
+
invalidation: () => this.checkCacheInvalidation(),
|
|
634
|
+
assets: () => this.checkStaticAssetCaching(),
|
|
635
|
+
storage: () => this.checkBrowserStoragePatterns(),
|
|
636
|
+
memo: () => this.checkMemoizationPatterns(),
|
|
637
|
+
};
|
|
638
|
+
let checksToRun;
|
|
639
|
+
if (filter && checkMap[filter]) {
|
|
640
|
+
checksToRun = [checkMap[filter]];
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
checksToRun = Object.values(checkMap);
|
|
644
|
+
}
|
|
645
|
+
const checks = [];
|
|
646
|
+
for (const check of checksToRun) {
|
|
647
|
+
checks.push(await check());
|
|
648
|
+
}
|
|
649
|
+
const summary = {
|
|
650
|
+
total: checks.length,
|
|
651
|
+
passed: checks.filter(c => c.passed).length,
|
|
652
|
+
failed: checks.filter(c => !c.passed).length,
|
|
653
|
+
errors: checks.reduce((acc, c) => acc + c.issues.filter(i => i.severity === "error").length, 0),
|
|
654
|
+
warnings: checks.reduce((acc, c) => acc + c.issues.filter(i => i.severity === "warning").length, 0),
|
|
655
|
+
};
|
|
656
|
+
return {
|
|
657
|
+
module: "Caching Strategy",
|
|
658
|
+
passed: summary.errors === 0,
|
|
659
|
+
totalDuration: Date.now() - startTime,
|
|
660
|
+
checks,
|
|
661
|
+
summary,
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
exports.CachingStrategyModule = CachingStrategyModule;
|
|
666
|
+
// CLI Entry Point
|
|
667
|
+
async function main() {
|
|
668
|
+
const args = process.argv.slice(2);
|
|
669
|
+
const filter = args.find(a => !a.startsWith("-"));
|
|
670
|
+
const verbose = args.includes("-v") || args.includes("--verbose");
|
|
671
|
+
console.log((0, console_chars_1.createDivider)());
|
|
672
|
+
console.log(`${console_chars_1.emoji.rocket} Caching Strategy Preflight`);
|
|
673
|
+
console.log((0, console_chars_1.createDivider)());
|
|
674
|
+
const module = new CachingStrategyModule({ verbose });
|
|
675
|
+
const result = await module.runAll(filter);
|
|
676
|
+
// Print results
|
|
677
|
+
for (const check of result.checks) {
|
|
678
|
+
const icon = check.passed ? console_chars_1.emoji.check : console_chars_1.emoji.warning;
|
|
679
|
+
console.log(`\n${icon} ${check.name} (${check.duration}ms)`);
|
|
680
|
+
if (check.issues.length > 0) {
|
|
681
|
+
const grouped = new Map();
|
|
682
|
+
for (const issue of check.issues) {
|
|
683
|
+
const key = issue.type;
|
|
684
|
+
if (!grouped.has(key))
|
|
685
|
+
grouped.set(key, []);
|
|
686
|
+
grouped.get(key).push(issue);
|
|
687
|
+
}
|
|
688
|
+
for (const [type, issues] of grouped) {
|
|
689
|
+
console.log(`\n ${type} (${issues.length} occurrences):`);
|
|
690
|
+
const displayIssues = verbose ? issues : issues.slice(0, 3);
|
|
691
|
+
for (const issue of displayIssues) {
|
|
692
|
+
const relPath = issue.file.replace(process.cwd(), "").replace(/\\/g, "/");
|
|
693
|
+
const severityIcon = issue.severity === "error" ? console_chars_1.emoji.error : issue.severity === "warning" ? console_chars_1.emoji.warning : console_chars_1.emoji.info;
|
|
694
|
+
console.log(` ${severityIcon} ${relPath}:${issue.line}`);
|
|
695
|
+
console.log(` ${issue.message}`);
|
|
696
|
+
if (issue.snippet) {
|
|
697
|
+
console.log(` ${console_chars_1.emoji.file} ${issue.snippet.substring(0, 60)}${issue.snippet.length > 60 ? "..." : ""}`);
|
|
698
|
+
}
|
|
699
|
+
console.log(` ${console_chars_1.emoji.hint} ${issue.suggestion}`);
|
|
700
|
+
}
|
|
701
|
+
if (!verbose && issues.length > 3) {
|
|
702
|
+
console.log(` ... and ${issues.length - 3} more (use -v to see all)`);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
// Summary
|
|
708
|
+
console.log((0, console_chars_1.createDivider)());
|
|
709
|
+
console.log(`\n${console_chars_1.emoji.chart} Summary:`);
|
|
710
|
+
console.log(` Checks: ${result.summary.passed}/${result.summary.total} passed`);
|
|
711
|
+
console.log(` Errors: ${result.summary.errors}`);
|
|
712
|
+
console.log(` Warnings: ${result.summary.warnings}`);
|
|
713
|
+
console.log(` Duration: ${result.totalDuration}ms`);
|
|
714
|
+
if (!result.passed) {
|
|
715
|
+
console.log(`\n${console_chars_1.emoji.warning} Caching strategy issues detected (non-blocking)`);
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
console.log(`\n${console_chars_1.emoji.check} All caching strategy checks passed!`);
|
|
719
|
+
}
|
|
720
|
+
console.log((0, console_chars_1.createDivider)());
|
|
721
|
+
// Non-blocking - always exit 0
|
|
722
|
+
process.exit(0);
|
|
723
|
+
}
|
|
724
|
+
main().catch(console.error);
|
|
725
|
+
//# sourceMappingURL=caching-strategy.js.map
|