driftdetect-detectors 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accessibility/alt-text.d.ts +63 -0
- package/dist/accessibility/alt-text.d.ts.map +1 -0
- package/dist/accessibility/alt-text.js +100 -0
- package/dist/accessibility/alt-text.js.map +1 -0
- package/dist/accessibility/aria-roles.d.ts +65 -0
- package/dist/accessibility/aria-roles.d.ts.map +1 -0
- package/dist/accessibility/aria-roles.js +87 -0
- package/dist/accessibility/aria-roles.js.map +1 -0
- package/dist/accessibility/focus-management.d.ts +62 -0
- package/dist/accessibility/focus-management.d.ts.map +1 -0
- package/dist/accessibility/focus-management.js +88 -0
- package/dist/accessibility/focus-management.js.map +1 -0
- package/dist/accessibility/heading-hierarchy.d.ts +66 -0
- package/dist/accessibility/heading-hierarchy.d.ts.map +1 -0
- package/dist/accessibility/heading-hierarchy.js +94 -0
- package/dist/accessibility/heading-hierarchy.js.map +1 -0
- package/dist/accessibility/index.d.ts +25 -0
- package/dist/accessibility/index.d.ts.map +1 -0
- package/dist/accessibility/index.js +21 -0
- package/dist/accessibility/index.js.map +1 -0
- package/dist/accessibility/keyboard-nav.d.ts +63 -0
- package/dist/accessibility/keyboard-nav.d.ts.map +1 -0
- package/dist/accessibility/keyboard-nav.js +86 -0
- package/dist/accessibility/keyboard-nav.js.map +1 -0
- package/dist/accessibility/semantic-html.d.ts +76 -0
- package/dist/accessibility/semantic-html.d.ts.map +1 -0
- package/dist/accessibility/semantic-html.js +204 -0
- package/dist/accessibility/semantic-html.js.map +1 -0
- package/dist/api/client-patterns.d.ts +121 -0
- package/dist/api/client-patterns.d.ts.map +1 -0
- package/dist/api/client-patterns.js +478 -0
- package/dist/api/client-patterns.js.map +1 -0
- package/dist/api/error-format.d.ts +140 -0
- package/dist/api/error-format.d.ts.map +1 -0
- package/dist/api/error-format.js +614 -0
- package/dist/api/error-format.js.map +1 -0
- package/dist/api/http-methods.d.ts +255 -0
- package/dist/api/http-methods.d.ts.map +1 -0
- package/dist/api/http-methods.js +890 -0
- package/dist/api/http-methods.js.map +1 -0
- package/dist/api/index.d.ts +16 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +37 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/pagination.d.ts +133 -0
- package/dist/api/pagination.d.ts.map +1 -0
- package/dist/api/pagination.js +521 -0
- package/dist/api/pagination.js.map +1 -0
- package/dist/api/response-envelope.d.ts +261 -0
- package/dist/api/response-envelope.d.ts.map +1 -0
- package/dist/api/response-envelope.js +1050 -0
- package/dist/api/response-envelope.js.map +1 -0
- package/dist/api/retry-patterns.d.ts +117 -0
- package/dist/api/retry-patterns.d.ts.map +1 -0
- package/dist/api/retry-patterns.js +480 -0
- package/dist/api/retry-patterns.js.map +1 -0
- package/dist/api/route-structure.d.ts +128 -0
- package/dist/api/route-structure.d.ts.map +1 -0
- package/dist/api/route-structure.js +738 -0
- package/dist/api/route-structure.js.map +1 -0
- package/dist/auth/audit-logging.d.ts +80 -0
- package/dist/auth/audit-logging.d.ts.map +1 -0
- package/dist/auth/audit-logging.js +370 -0
- package/dist/auth/audit-logging.js.map +1 -0
- package/dist/auth/index.d.ts +33 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +49 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware-usage.d.ts +65 -0
- package/dist/auth/middleware-usage.d.ts.map +1 -0
- package/dist/auth/middleware-usage.js +192 -0
- package/dist/auth/middleware-usage.js.map +1 -0
- package/dist/auth/permission-checks.d.ts +60 -0
- package/dist/auth/permission-checks.d.ts.map +1 -0
- package/dist/auth/permission-checks.js +159 -0
- package/dist/auth/permission-checks.js.map +1 -0
- package/dist/auth/rbac-patterns.d.ts +68 -0
- package/dist/auth/rbac-patterns.d.ts.map +1 -0
- package/dist/auth/rbac-patterns.js +143 -0
- package/dist/auth/rbac-patterns.js.map +1 -0
- package/dist/auth/resource-ownership.d.ts +77 -0
- package/dist/auth/resource-ownership.d.ts.map +1 -0
- package/dist/auth/resource-ownership.js +324 -0
- package/dist/auth/resource-ownership.js.map +1 -0
- package/dist/auth/token-handling.d.ts +64 -0
- package/dist/auth/token-handling.d.ts.map +1 -0
- package/dist/auth/token-handling.js +151 -0
- package/dist/auth/token-handling.js.map +1 -0
- package/dist/base/ast-detector.d.ts +421 -0
- package/dist/base/ast-detector.d.ts.map +1 -0
- package/dist/base/ast-detector.js +699 -0
- package/dist/base/ast-detector.js.map +1 -0
- package/dist/base/base-detector.d.ts +366 -0
- package/dist/base/base-detector.d.ts.map +1 -0
- package/dist/base/base-detector.js +170 -0
- package/dist/base/base-detector.js.map +1 -0
- package/dist/base/index.d.ts +12 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +17 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/regex-detector.d.ts +421 -0
- package/dist/base/regex-detector.d.ts.map +1 -0
- package/dist/base/regex-detector.js +537 -0
- package/dist/base/regex-detector.js.map +1 -0
- package/dist/base/structural-detector.d.ts +424 -0
- package/dist/base/structural-detector.d.ts.map +1 -0
- package/dist/base/structural-detector.js +731 -0
- package/dist/base/structural-detector.js.map +1 -0
- package/dist/base/types.d.ts +53 -0
- package/dist/base/types.d.ts.map +1 -0
- package/dist/base/types.js +5 -0
- package/dist/base/types.js.map +1 -0
- package/dist/components/component-structure.d.ts +163 -0
- package/dist/components/component-structure.d.ts.map +1 -0
- package/dist/components/component-structure.js +500 -0
- package/dist/components/component-structure.js.map +1 -0
- package/dist/components/composition.d.ts +287 -0
- package/dist/components/composition.d.ts.map +1 -0
- package/dist/components/composition.js +1123 -0
- package/dist/components/composition.js.map +1 -0
- package/dist/components/duplicate-detection.d.ts +251 -0
- package/dist/components/duplicate-detection.d.ts.map +1 -0
- package/dist/components/duplicate-detection.js +804 -0
- package/dist/components/duplicate-detection.js.map +1 -0
- package/dist/components/index.d.ts +16 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +51 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/near-duplicate.d.ts +402 -0
- package/dist/components/near-duplicate.d.ts.map +1 -0
- package/dist/components/near-duplicate.js +1090 -0
- package/dist/components/near-duplicate.js.map +1 -0
- package/dist/components/props-patterns.d.ts +194 -0
- package/dist/components/props-patterns.d.ts.map +1 -0
- package/dist/components/props-patterns.js +795 -0
- package/dist/components/props-patterns.js.map +1 -0
- package/dist/components/ref-forwarding.d.ts +250 -0
- package/dist/components/ref-forwarding.d.ts.map +1 -0
- package/dist/components/ref-forwarding.js +832 -0
- package/dist/components/ref-forwarding.js.map +1 -0
- package/dist/components/state-patterns.d.ts +291 -0
- package/dist/components/state-patterns.d.ts.map +1 -0
- package/dist/components/state-patterns.js +970 -0
- package/dist/components/state-patterns.js.map +1 -0
- package/dist/config/config-validation.d.ts +74 -0
- package/dist/config/config-validation.d.ts.map +1 -0
- package/dist/config/config-validation.js +446 -0
- package/dist/config/config-validation.js.map +1 -0
- package/dist/config/default-values.d.ts +72 -0
- package/dist/config/default-values.d.ts.map +1 -0
- package/dist/config/default-values.js +386 -0
- package/dist/config/default-values.js.map +1 -0
- package/dist/config/env-naming.d.ts +73 -0
- package/dist/config/env-naming.d.ts.map +1 -0
- package/dist/config/env-naming.js +429 -0
- package/dist/config/env-naming.js.map +1 -0
- package/dist/config/environment-detection.d.ts +72 -0
- package/dist/config/environment-detection.d.ts.map +1 -0
- package/dist/config/environment-detection.js +400 -0
- package/dist/config/environment-detection.js.map +1 -0
- package/dist/config/feature-flags.d.ts +72 -0
- package/dist/config/feature-flags.d.ts.map +1 -0
- package/dist/config/feature-flags.js +384 -0
- package/dist/config/feature-flags.js.map +1 -0
- package/dist/config/index.d.ts +27 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +43 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/required-optional.d.ts +71 -0
- package/dist/config/required-optional.d.ts.map +1 -0
- package/dist/config/required-optional.js +344 -0
- package/dist/config/required-optional.js.map +1 -0
- package/dist/data-access/connection-pooling.d.ts +63 -0
- package/dist/data-access/connection-pooling.d.ts.map +1 -0
- package/dist/data-access/connection-pooling.js +297 -0
- package/dist/data-access/connection-pooling.js.map +1 -0
- package/dist/data-access/dto-patterns.d.ts +64 -0
- package/dist/data-access/dto-patterns.d.ts.map +1 -0
- package/dist/data-access/dto-patterns.js +291 -0
- package/dist/data-access/dto-patterns.js.map +1 -0
- package/dist/data-access/index.d.ts +31 -0
- package/dist/data-access/index.d.ts.map +1 -0
- package/dist/data-access/index.js +49 -0
- package/dist/data-access/index.js.map +1 -0
- package/dist/data-access/n-plus-one.d.ts +60 -0
- package/dist/data-access/n-plus-one.d.ts.map +1 -0
- package/dist/data-access/n-plus-one.js +264 -0
- package/dist/data-access/n-plus-one.js.map +1 -0
- package/dist/data-access/query-patterns.d.ts +64 -0
- package/dist/data-access/query-patterns.d.ts.map +1 -0
- package/dist/data-access/query-patterns.js +314 -0
- package/dist/data-access/query-patterns.js.map +1 -0
- package/dist/data-access/repository-pattern.d.ts +62 -0
- package/dist/data-access/repository-pattern.d.ts.map +1 -0
- package/dist/data-access/repository-pattern.js +257 -0
- package/dist/data-access/repository-pattern.js.map +1 -0
- package/dist/data-access/transaction-patterns.d.ts +61 -0
- package/dist/data-access/transaction-patterns.d.ts.map +1 -0
- package/dist/data-access/transaction-patterns.js +277 -0
- package/dist/data-access/transaction-patterns.js.map +1 -0
- package/dist/data-access/validation-patterns.d.ts +62 -0
- package/dist/data-access/validation-patterns.d.ts.map +1 -0
- package/dist/data-access/validation-patterns.js +301 -0
- package/dist/data-access/validation-patterns.js.map +1 -0
- package/dist/documentation/deprecation.d.ts +62 -0
- package/dist/documentation/deprecation.d.ts.map +1 -0
- package/dist/documentation/deprecation.js +83 -0
- package/dist/documentation/deprecation.js.map +1 -0
- package/dist/documentation/example-code.d.ts +64 -0
- package/dist/documentation/example-code.d.ts.map +1 -0
- package/dist/documentation/example-code.js +79 -0
- package/dist/documentation/example-code.js.map +1 -0
- package/dist/documentation/index.d.ts +22 -0
- package/dist/documentation/index.d.ts.map +1 -0
- package/dist/documentation/index.js +19 -0
- package/dist/documentation/index.js.map +1 -0
- package/dist/documentation/jsdoc-patterns.d.ts +72 -0
- package/dist/documentation/jsdoc-patterns.d.ts.map +1 -0
- package/dist/documentation/jsdoc-patterns.js +92 -0
- package/dist/documentation/jsdoc-patterns.js.map +1 -0
- package/dist/documentation/readme-structure.d.ts +67 -0
- package/dist/documentation/readme-structure.d.ts.map +1 -0
- package/dist/documentation/readme-structure.js +76 -0
- package/dist/documentation/readme-structure.js.map +1 -0
- package/dist/documentation/todo-patterns.d.ts +67 -0
- package/dist/documentation/todo-patterns.d.ts.map +1 -0
- package/dist/documentation/todo-patterns.js +73 -0
- package/dist/documentation/todo-patterns.js.map +1 -0
- package/dist/errors/async-errors.d.ts +72 -0
- package/dist/errors/async-errors.d.ts.map +1 -0
- package/dist/errors/async-errors.js +214 -0
- package/dist/errors/async-errors.js.map +1 -0
- package/dist/errors/circuit-breaker.d.ts +53 -0
- package/dist/errors/circuit-breaker.d.ts.map +1 -0
- package/dist/errors/circuit-breaker.js +241 -0
- package/dist/errors/circuit-breaker.js.map +1 -0
- package/dist/errors/error-codes.d.ts +73 -0
- package/dist/errors/error-codes.d.ts.map +1 -0
- package/dist/errors/error-codes.js +211 -0
- package/dist/errors/error-codes.js.map +1 -0
- package/dist/errors/error-logging.d.ts +73 -0
- package/dist/errors/error-logging.d.ts.map +1 -0
- package/dist/errors/error-logging.js +256 -0
- package/dist/errors/error-logging.js.map +1 -0
- package/dist/errors/error-propagation.d.ts +73 -0
- package/dist/errors/error-propagation.d.ts.map +1 -0
- package/dist/errors/error-propagation.js +244 -0
- package/dist/errors/error-propagation.js.map +1 -0
- package/dist/errors/exception-hierarchy.d.ts +75 -0
- package/dist/errors/exception-hierarchy.d.ts.map +1 -0
- package/dist/errors/exception-hierarchy.js +259 -0
- package/dist/errors/exception-hierarchy.js.map +1 -0
- package/dist/errors/index.d.ts +31 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +49 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/try-catch-placement.d.ts +73 -0
- package/dist/errors/try-catch-placement.d.ts.map +1 -0
- package/dist/errors/try-catch-placement.js +214 -0
- package/dist/errors/try-catch-placement.js.map +1 -0
- package/dist/index.d.ts +221 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +245 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/context-fields.d.ts +48 -0
- package/dist/logging/context-fields.d.ts.map +1 -0
- package/dist/logging/context-fields.js +160 -0
- package/dist/logging/context-fields.js.map +1 -0
- package/dist/logging/correlation-ids.d.ts +44 -0
- package/dist/logging/correlation-ids.d.ts.map +1 -0
- package/dist/logging/correlation-ids.js +144 -0
- package/dist/logging/correlation-ids.js.map +1 -0
- package/dist/logging/health-checks.d.ts +45 -0
- package/dist/logging/health-checks.d.ts.map +1 -0
- package/dist/logging/health-checks.js +165 -0
- package/dist/logging/health-checks.js.map +1 -0
- package/dist/logging/index.d.ts +31 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +49 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/log-levels.d.ts +46 -0
- package/dist/logging/log-levels.d.ts.map +1 -0
- package/dist/logging/log-levels.js +178 -0
- package/dist/logging/log-levels.js.map +1 -0
- package/dist/logging/metric-naming.d.ts +46 -0
- package/dist/logging/metric-naming.d.ts.map +1 -0
- package/dist/logging/metric-naming.js +157 -0
- package/dist/logging/metric-naming.js.map +1 -0
- package/dist/logging/pii-redaction.d.ts +44 -0
- package/dist/logging/pii-redaction.d.ts.map +1 -0
- package/dist/logging/pii-redaction.js +166 -0
- package/dist/logging/pii-redaction.js.map +1 -0
- package/dist/logging/structured-format.d.ts +53 -0
- package/dist/logging/structured-format.d.ts.map +1 -0
- package/dist/logging/structured-format.js +235 -0
- package/dist/logging/structured-format.js.map +1 -0
- package/dist/performance/bundle-size.d.ts +79 -0
- package/dist/performance/bundle-size.d.ts.map +1 -0
- package/dist/performance/bundle-size.js +276 -0
- package/dist/performance/bundle-size.js.map +1 -0
- package/dist/performance/caching-patterns.d.ts +78 -0
- package/dist/performance/caching-patterns.d.ts.map +1 -0
- package/dist/performance/caching-patterns.js +257 -0
- package/dist/performance/caching-patterns.js.map +1 -0
- package/dist/performance/code-splitting.d.ts +86 -0
- package/dist/performance/code-splitting.d.ts.map +1 -0
- package/dist/performance/code-splitting.js +447 -0
- package/dist/performance/code-splitting.js.map +1 -0
- package/dist/performance/debounce-throttle.d.ts +75 -0
- package/dist/performance/debounce-throttle.d.ts.map +1 -0
- package/dist/performance/debounce-throttle.js +232 -0
- package/dist/performance/debounce-throttle.js.map +1 -0
- package/dist/performance/index.d.ts +28 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +39 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/performance/lazy-loading.d.ts +75 -0
- package/dist/performance/lazy-loading.d.ts.map +1 -0
- package/dist/performance/lazy-loading.js +233 -0
- package/dist/performance/lazy-loading.js.map +1 -0
- package/dist/performance/memoization.d.ts +75 -0
- package/dist/performance/memoization.d.ts.map +1 -0
- package/dist/performance/memoization.js +251 -0
- package/dist/performance/memoization.js.map +1 -0
- package/dist/registry/detector-registry.d.ts +266 -0
- package/dist/registry/detector-registry.d.ts.map +1 -0
- package/dist/registry/detector-registry.js +526 -0
- package/dist/registry/detector-registry.js.map +1 -0
- package/dist/registry/index.d.ts +10 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +10 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/loader.d.ts +232 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +419 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/types.d.ts +111 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +19 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/security/csp-headers.d.ts +78 -0
- package/dist/security/csp-headers.d.ts.map +1 -0
- package/dist/security/csp-headers.js +401 -0
- package/dist/security/csp-headers.js.map +1 -0
- package/dist/security/csrf-protection.d.ts +72 -0
- package/dist/security/csrf-protection.d.ts.map +1 -0
- package/dist/security/csrf-protection.js +344 -0
- package/dist/security/csrf-protection.js.map +1 -0
- package/dist/security/index.d.ts +30 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +48 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-sanitization.d.ts +74 -0
- package/dist/security/input-sanitization.d.ts.map +1 -0
- package/dist/security/input-sanitization.js +373 -0
- package/dist/security/input-sanitization.js.map +1 -0
- package/dist/security/rate-limiting.d.ts +81 -0
- package/dist/security/rate-limiting.d.ts.map +1 -0
- package/dist/security/rate-limiting.js +535 -0
- package/dist/security/rate-limiting.js.map +1 -0
- package/dist/security/secret-management.d.ts +83 -0
- package/dist/security/secret-management.d.ts.map +1 -0
- package/dist/security/secret-management.js +547 -0
- package/dist/security/secret-management.js.map +1 -0
- package/dist/security/sql-injection.d.ts +76 -0
- package/dist/security/sql-injection.d.ts.map +1 -0
- package/dist/security/sql-injection.js +383 -0
- package/dist/security/sql-injection.js.map +1 -0
- package/dist/security/xss-prevention.d.ts +80 -0
- package/dist/security/xss-prevention.d.ts.map +1 -0
- package/dist/security/xss-prevention.js +416 -0
- package/dist/security/xss-prevention.js.map +1 -0
- package/dist/structural/barrel-exports.d.ts +178 -0
- package/dist/structural/barrel-exports.d.ts.map +1 -0
- package/dist/structural/barrel-exports.js +553 -0
- package/dist/structural/barrel-exports.js.map +1 -0
- package/dist/structural/circular-deps.d.ts +140 -0
- package/dist/structural/circular-deps.d.ts.map +1 -0
- package/dist/structural/circular-deps.js +422 -0
- package/dist/structural/circular-deps.js.map +1 -0
- package/dist/structural/co-location.d.ts +202 -0
- package/dist/structural/co-location.d.ts.map +1 -0
- package/dist/structural/co-location.js +640 -0
- package/dist/structural/co-location.js.map +1 -0
- package/dist/structural/directory-structure.d.ts +151 -0
- package/dist/structural/directory-structure.d.ts.map +1 -0
- package/dist/structural/directory-structure.js +457 -0
- package/dist/structural/directory-structure.js.map +1 -0
- package/dist/structural/file-naming.d.ts +61 -0
- package/dist/structural/file-naming.d.ts.map +1 -0
- package/dist/structural/file-naming.js +231 -0
- package/dist/structural/file-naming.js.map +1 -0
- package/dist/structural/import-ordering.d.ts +212 -0
- package/dist/structural/import-ordering.d.ts.map +1 -0
- package/dist/structural/import-ordering.js +821 -0
- package/dist/structural/import-ordering.js.map +1 -0
- package/dist/structural/index.d.ts +23 -0
- package/dist/structural/index.d.ts.map +1 -0
- package/dist/structural/index.js +26 -0
- package/dist/structural/index.js.map +1 -0
- package/dist/structural/module-boundaries.d.ts +164 -0
- package/dist/structural/module-boundaries.d.ts.map +1 -0
- package/dist/structural/module-boundaries.js +616 -0
- package/dist/structural/module-boundaries.js.map +1 -0
- package/dist/structural/package-boundaries.d.ts +182 -0
- package/dist/structural/package-boundaries.d.ts.map +1 -0
- package/dist/structural/package-boundaries.js +602 -0
- package/dist/structural/package-boundaries.js.map +1 -0
- package/dist/styling/class-naming.d.ts +263 -0
- package/dist/styling/class-naming.d.ts.map +1 -0
- package/dist/styling/class-naming.js +892 -0
- package/dist/styling/class-naming.js.map +1 -0
- package/dist/styling/color-usage.d.ts +213 -0
- package/dist/styling/color-usage.d.ts.map +1 -0
- package/dist/styling/color-usage.js +732 -0
- package/dist/styling/color-usage.js.map +1 -0
- package/dist/styling/design-tokens.d.ts +212 -0
- package/dist/styling/design-tokens.d.ts.map +1 -0
- package/dist/styling/design-tokens.js +748 -0
- package/dist/styling/design-tokens.js.map +1 -0
- package/dist/styling/index.d.ts +16 -0
- package/dist/styling/index.d.ts.map +1 -0
- package/dist/styling/index.js +56 -0
- package/dist/styling/index.js.map +1 -0
- package/dist/styling/responsive.d.ts +304 -0
- package/dist/styling/responsive.d.ts.map +1 -0
- package/dist/styling/responsive.js +888 -0
- package/dist/styling/responsive.js.map +1 -0
- package/dist/styling/spacing-scale.d.ts +248 -0
- package/dist/styling/spacing-scale.d.ts.map +1 -0
- package/dist/styling/spacing-scale.js +865 -0
- package/dist/styling/spacing-scale.js.map +1 -0
- package/dist/styling/tailwind-patterns.d.ts +305 -0
- package/dist/styling/tailwind-patterns.d.ts.map +1 -0
- package/dist/styling/tailwind-patterns.js +1181 -0
- package/dist/styling/tailwind-patterns.js.map +1 -0
- package/dist/styling/typography.d.ts +281 -0
- package/dist/styling/typography.d.ts.map +1 -0
- package/dist/styling/typography.js +1004 -0
- package/dist/styling/typography.js.map +1 -0
- package/dist/styling/z-index-scale.d.ts +270 -0
- package/dist/styling/z-index-scale.d.ts.map +1 -0
- package/dist/styling/z-index-scale.js +714 -0
- package/dist/styling/z-index-scale.js.map +1 -0
- package/dist/testing/co-location.d.ts +42 -0
- package/dist/testing/co-location.d.ts.map +1 -0
- package/dist/testing/co-location.js +134 -0
- package/dist/testing/co-location.js.map +1 -0
- package/dist/testing/describe-naming.d.ts +47 -0
- package/dist/testing/describe-naming.d.ts.map +1 -0
- package/dist/testing/describe-naming.js +150 -0
- package/dist/testing/describe-naming.js.map +1 -0
- package/dist/testing/file-naming.d.ts +44 -0
- package/dist/testing/file-naming.d.ts.map +1 -0
- package/dist/testing/file-naming.js +131 -0
- package/dist/testing/file-naming.js.map +1 -0
- package/dist/testing/fixture-patterns.d.ts +52 -0
- package/dist/testing/fixture-patterns.d.ts.map +1 -0
- package/dist/testing/fixture-patterns.js +228 -0
- package/dist/testing/fixture-patterns.js.map +1 -0
- package/dist/testing/index.d.ts +31 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +49 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-patterns.d.ts +53 -0
- package/dist/testing/mock-patterns.d.ts.map +1 -0
- package/dist/testing/mock-patterns.js +264 -0
- package/dist/testing/mock-patterns.js.map +1 -0
- package/dist/testing/setup-teardown.d.ts +55 -0
- package/dist/testing/setup-teardown.d.ts.map +1 -0
- package/dist/testing/setup-teardown.js +262 -0
- package/dist/testing/setup-teardown.js.map +1 -0
- package/dist/testing/test-structure.d.ts +51 -0
- package/dist/testing/test-structure.d.ts.map +1 -0
- package/dist/testing/test-structure.js +225 -0
- package/dist/testing/test-structure.js.map +1 -0
- package/dist/types/any-usage.d.ts +99 -0
- package/dist/types/any-usage.d.ts.map +1 -0
- package/dist/types/any-usage.js +641 -0
- package/dist/types/any-usage.js.map +1 -0
- package/dist/types/file-location.d.ts +76 -0
- package/dist/types/file-location.d.ts.map +1 -0
- package/dist/types/file-location.js +395 -0
- package/dist/types/file-location.js.map +1 -0
- package/dist/types/generic-patterns.d.ts +97 -0
- package/dist/types/generic-patterns.d.ts.map +1 -0
- package/dist/types/generic-patterns.js +615 -0
- package/dist/types/generic-patterns.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +43 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/interface-vs-type.d.ts +81 -0
- package/dist/types/interface-vs-type.d.ts.map +1 -0
- package/dist/types/interface-vs-type.js +440 -0
- package/dist/types/interface-vs-type.js.map +1 -0
- package/dist/types/naming-conventions.d.ts +84 -0
- package/dist/types/naming-conventions.d.ts.map +1 -0
- package/dist/types/naming-conventions.js +455 -0
- package/dist/types/naming-conventions.js.map +1 -0
- package/dist/types/type-assertions.d.ts +98 -0
- package/dist/types/type-assertions.d.ts.map +1 -0
- package/dist/types/type-assertions.js +639 -0
- package/dist/types/type-assertions.js.map +1 -0
- package/dist/types/utility-types.d.ts +110 -0
- package/dist/types/utility-types.d.ts.map +1 -0
- package/dist/types/utility-types.js +547 -0
- package/dist/types/utility-types.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Codes Detector - Error code pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects error code patterns including:
|
|
5
|
+
* - ErrorCode enum definitions
|
|
6
|
+
* - Error code constants
|
|
7
|
+
* - Error code usage in error objects
|
|
8
|
+
* - Error code naming conventions
|
|
9
|
+
*
|
|
10
|
+
* Flags violations:
|
|
11
|
+
* - Missing error codes in error objects
|
|
12
|
+
* - Inconsistent error code naming
|
|
13
|
+
* - Magic string error codes
|
|
14
|
+
*
|
|
15
|
+
* @requirements 12.2 - Error code patterns
|
|
16
|
+
*/
|
|
17
|
+
import type { Language } from 'driftdetect-core';
|
|
18
|
+
import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
|
|
19
|
+
export type ErrorCodePatternType = 'error-code-enum' | 'error-code-const' | 'error-code-usage' | 'error-code-type';
|
|
20
|
+
export type ErrorCodeViolationType = 'missing-error-code' | 'magic-string-code' | 'inconsistent-naming';
|
|
21
|
+
export interface ErrorCodePatternInfo {
|
|
22
|
+
type: ErrorCodePatternType;
|
|
23
|
+
file: string;
|
|
24
|
+
line: number;
|
|
25
|
+
column: number;
|
|
26
|
+
matchedText: string;
|
|
27
|
+
codeName?: string | undefined;
|
|
28
|
+
codeValue?: string | undefined;
|
|
29
|
+
context?: string | undefined;
|
|
30
|
+
}
|
|
31
|
+
export interface ErrorCodeViolationInfo {
|
|
32
|
+
type: ErrorCodeViolationType;
|
|
33
|
+
file: string;
|
|
34
|
+
line: number;
|
|
35
|
+
column: number;
|
|
36
|
+
endLine: number;
|
|
37
|
+
endColumn: number;
|
|
38
|
+
value: string;
|
|
39
|
+
issue: string;
|
|
40
|
+
suggestedFix?: string;
|
|
41
|
+
lineContent: string;
|
|
42
|
+
}
|
|
43
|
+
export interface ErrorCodeAnalysis {
|
|
44
|
+
patterns: ErrorCodePatternInfo[];
|
|
45
|
+
violations: ErrorCodeViolationInfo[];
|
|
46
|
+
hasErrorCodeEnum: boolean;
|
|
47
|
+
errorCodes: string[];
|
|
48
|
+
confidence: number;
|
|
49
|
+
}
|
|
50
|
+
export declare const ERROR_CODE_ENUM_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
51
|
+
export declare const ERROR_CODE_CONST_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
52
|
+
export declare const ERROR_CODE_USAGE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
53
|
+
export declare const ERROR_CODE_TYPE_PATTERNS: readonly [RegExp, RegExp];
|
|
54
|
+
export declare const MAGIC_STRING_CODE_PATTERNS: readonly [RegExp, RegExp];
|
|
55
|
+
export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
|
|
56
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
57
|
+
export declare function detectErrorCodeEnums(content: string, file: string): ErrorCodePatternInfo[];
|
|
58
|
+
export declare function detectErrorCodeConstants(content: string, file: string): ErrorCodePatternInfo[];
|
|
59
|
+
export declare function detectErrorCodeUsage(content: string, file: string): ErrorCodePatternInfo[];
|
|
60
|
+
export declare function detectMagicStringViolations(patterns: ErrorCodePatternInfo[], content: string, file: string): ErrorCodeViolationInfo[];
|
|
61
|
+
export declare function analyzeErrorCodes(content: string, file: string): ErrorCodeAnalysis;
|
|
62
|
+
export declare class ErrorCodesDetector extends RegexDetector {
|
|
63
|
+
readonly id = "errors/error-codes";
|
|
64
|
+
readonly name = "Error Codes Detector";
|
|
65
|
+
readonly description = "Detects error code patterns and usage";
|
|
66
|
+
readonly category = "errors";
|
|
67
|
+
readonly subcategory = "codes";
|
|
68
|
+
readonly supportedLanguages: Language[];
|
|
69
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
70
|
+
generateQuickFix(): null;
|
|
71
|
+
}
|
|
72
|
+
export declare function createErrorCodesDetector(): ErrorCodesDetector;
|
|
73
|
+
//# sourceMappingURL=error-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Codes Detector - Error code pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects error code patterns including:
|
|
5
|
+
* - ErrorCode enum definitions
|
|
6
|
+
* - Error code constants
|
|
7
|
+
* - Error code usage in error objects
|
|
8
|
+
* - Error code naming conventions
|
|
9
|
+
*
|
|
10
|
+
* Flags violations:
|
|
11
|
+
* - Missing error codes in error objects
|
|
12
|
+
* - Inconsistent error code naming
|
|
13
|
+
* - Magic string error codes
|
|
14
|
+
*
|
|
15
|
+
* @requirements 12.2 - Error code patterns
|
|
16
|
+
*/
|
|
17
|
+
import { RegexDetector } from '../base/index.js';
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Constants
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export const ERROR_CODE_ENUM_PATTERNS = [
|
|
22
|
+
/enum\s+ErrorCode\s*\{/gi,
|
|
23
|
+
/enum\s+ErrorCodes\s*\{/gi,
|
|
24
|
+
/const\s+ErrorCode\s*=\s*\{/gi,
|
|
25
|
+
/const\s+ErrorCodes\s*=\s*\{/gi,
|
|
26
|
+
];
|
|
27
|
+
export const ERROR_CODE_CONST_PATTERNS = [
|
|
28
|
+
/(?:const|let|var)\s+([A-Z_]+_ERROR)\s*=/gi,
|
|
29
|
+
/(?:const|let|var)\s+(ERR_[A-Z_]+)\s*=/gi,
|
|
30
|
+
/(?:const|let|var)\s+([A-Z_]+_CODE)\s*=/gi,
|
|
31
|
+
];
|
|
32
|
+
export const ERROR_CODE_USAGE_PATTERNS = [
|
|
33
|
+
/code\s*:\s*ErrorCode\.\w+/gi,
|
|
34
|
+
/code\s*:\s*ErrorCodes\.\w+/gi,
|
|
35
|
+
/errorCode\s*:\s*\w+/gi,
|
|
36
|
+
/\.code\s*=\s*ErrorCode\.\w+/gi,
|
|
37
|
+
];
|
|
38
|
+
export const ERROR_CODE_TYPE_PATTERNS = [
|
|
39
|
+
/type\s+ErrorCode\s*=/gi,
|
|
40
|
+
/interface\s+\w*Error\w*\s*\{[^}]*code\s*:/gi,
|
|
41
|
+
];
|
|
42
|
+
export const MAGIC_STRING_CODE_PATTERNS = [
|
|
43
|
+
/code\s*:\s*['"`][A-Z_]+['"`]/gi,
|
|
44
|
+
/errorCode\s*:\s*['"`][A-Z_]+['"`]/gi,
|
|
45
|
+
];
|
|
46
|
+
export const EXCLUDED_FILE_PATTERNS = [
|
|
47
|
+
/\.test\.[jt]sx?$/,
|
|
48
|
+
/\.spec\.[jt]sx?$/,
|
|
49
|
+
/node_modules\//,
|
|
50
|
+
/\.d\.ts$/,
|
|
51
|
+
];
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// Helper Functions
|
|
54
|
+
// ============================================================================
|
|
55
|
+
export function shouldExcludeFile(filePath) {
|
|
56
|
+
return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
|
|
57
|
+
}
|
|
58
|
+
function isInsideComment(content, index) {
|
|
59
|
+
const before = content.slice(0, index);
|
|
60
|
+
const lastNewline = before.lastIndexOf('\n');
|
|
61
|
+
const line = before.slice(lastNewline + 1);
|
|
62
|
+
if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
|
|
63
|
+
return true;
|
|
64
|
+
return before.lastIndexOf('/*') > before.lastIndexOf('*/');
|
|
65
|
+
}
|
|
66
|
+
function getPosition(content, index) {
|
|
67
|
+
const before = content.slice(0, index);
|
|
68
|
+
return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Detection Functions
|
|
72
|
+
// ============================================================================
|
|
73
|
+
export function detectErrorCodeEnums(content, file) {
|
|
74
|
+
const results = [];
|
|
75
|
+
const lines = content.split('\n');
|
|
76
|
+
for (const pattern of ERROR_CODE_ENUM_PATTERNS) {
|
|
77
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
78
|
+
let match;
|
|
79
|
+
while ((match = regex.exec(content)) !== null) {
|
|
80
|
+
if (isInsideComment(content, match.index))
|
|
81
|
+
continue;
|
|
82
|
+
const { line, column } = getPosition(content, match.index);
|
|
83
|
+
results.push({
|
|
84
|
+
type: 'error-code-enum',
|
|
85
|
+
file, line, column,
|
|
86
|
+
matchedText: match[0],
|
|
87
|
+
context: lines[line - 1] || '',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return results;
|
|
92
|
+
}
|
|
93
|
+
export function detectErrorCodeConstants(content, file) {
|
|
94
|
+
const results = [];
|
|
95
|
+
const lines = content.split('\n');
|
|
96
|
+
for (const pattern of ERROR_CODE_CONST_PATTERNS) {
|
|
97
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
98
|
+
let match;
|
|
99
|
+
while ((match = regex.exec(content)) !== null) {
|
|
100
|
+
if (isInsideComment(content, match.index))
|
|
101
|
+
continue;
|
|
102
|
+
const { line, column } = getPosition(content, match.index);
|
|
103
|
+
results.push({
|
|
104
|
+
type: 'error-code-const',
|
|
105
|
+
file, line, column,
|
|
106
|
+
matchedText: match[0],
|
|
107
|
+
codeName: match[1],
|
|
108
|
+
context: lines[line - 1] || '',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return results;
|
|
113
|
+
}
|
|
114
|
+
export function detectErrorCodeUsage(content, file) {
|
|
115
|
+
const results = [];
|
|
116
|
+
const lines = content.split('\n');
|
|
117
|
+
for (const pattern of ERROR_CODE_USAGE_PATTERNS) {
|
|
118
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
119
|
+
let match;
|
|
120
|
+
while ((match = regex.exec(content)) !== null) {
|
|
121
|
+
if (isInsideComment(content, match.index))
|
|
122
|
+
continue;
|
|
123
|
+
const { line, column } = getPosition(content, match.index);
|
|
124
|
+
results.push({
|
|
125
|
+
type: 'error-code-usage',
|
|
126
|
+
file, line, column,
|
|
127
|
+
matchedText: match[0],
|
|
128
|
+
context: lines[line - 1] || '',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return results;
|
|
133
|
+
}
|
|
134
|
+
export function detectMagicStringViolations(patterns, content, file) {
|
|
135
|
+
const violations = [];
|
|
136
|
+
const lines = content.split('\n');
|
|
137
|
+
const hasErrorCodeEnum = patterns.some(p => p.type === 'error-code-enum');
|
|
138
|
+
// Only flag magic strings if there's an ErrorCode enum
|
|
139
|
+
if (!hasErrorCodeEnum)
|
|
140
|
+
return violations;
|
|
141
|
+
for (const pattern of MAGIC_STRING_CODE_PATTERNS) {
|
|
142
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
143
|
+
let match;
|
|
144
|
+
while ((match = regex.exec(content)) !== null) {
|
|
145
|
+
if (isInsideComment(content, match.index))
|
|
146
|
+
continue;
|
|
147
|
+
const { line, column } = getPosition(content, match.index);
|
|
148
|
+
violations.push({
|
|
149
|
+
type: 'magic-string-code',
|
|
150
|
+
file, line, column,
|
|
151
|
+
endLine: line,
|
|
152
|
+
endColumn: column + match[0].length,
|
|
153
|
+
value: match[0],
|
|
154
|
+
issue: 'Using magic string instead of ErrorCode enum',
|
|
155
|
+
suggestedFix: 'Use ErrorCode enum value instead of string literal',
|
|
156
|
+
lineContent: lines[line - 1] || '',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return violations;
|
|
161
|
+
}
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// Main Analysis Function
|
|
164
|
+
// ============================================================================
|
|
165
|
+
export function analyzeErrorCodes(content, file) {
|
|
166
|
+
if (shouldExcludeFile(file)) {
|
|
167
|
+
return { patterns: [], violations: [], hasErrorCodeEnum: false, errorCodes: [], confidence: 1.0 };
|
|
168
|
+
}
|
|
169
|
+
const enums = detectErrorCodeEnums(content, file);
|
|
170
|
+
const constants = detectErrorCodeConstants(content, file);
|
|
171
|
+
const usage = detectErrorCodeUsage(content, file);
|
|
172
|
+
const allPatterns = [...enums, ...constants, ...usage];
|
|
173
|
+
const violations = detectMagicStringViolations(allPatterns, content, file);
|
|
174
|
+
const errorCodes = constants
|
|
175
|
+
.filter(p => p.codeName)
|
|
176
|
+
.map(p => p.codeName)
|
|
177
|
+
.filter((v, i, a) => a.indexOf(v) === i);
|
|
178
|
+
const confidence = allPatterns.length > 0 ? Math.max(0.5, 1 - violations.length * 0.1) : 1.0;
|
|
179
|
+
return {
|
|
180
|
+
patterns: allPatterns,
|
|
181
|
+
violations,
|
|
182
|
+
hasErrorCodeEnum: enums.length > 0,
|
|
183
|
+
errorCodes,
|
|
184
|
+
confidence,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// ============================================================================
|
|
188
|
+
// Detector Class
|
|
189
|
+
// ============================================================================
|
|
190
|
+
export class ErrorCodesDetector extends RegexDetector {
|
|
191
|
+
id = 'errors/error-codes';
|
|
192
|
+
name = 'Error Codes Detector';
|
|
193
|
+
description = 'Detects error code patterns and usage';
|
|
194
|
+
category = 'errors';
|
|
195
|
+
subcategory = 'codes';
|
|
196
|
+
supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
197
|
+
async detect(context) {
|
|
198
|
+
const { content, file } = context;
|
|
199
|
+
if (shouldExcludeFile(file))
|
|
200
|
+
return this.createEmptyResult();
|
|
201
|
+
const analysis = analyzeErrorCodes(content, file);
|
|
202
|
+
return this.createResult([], [], analysis.confidence);
|
|
203
|
+
}
|
|
204
|
+
generateQuickFix() {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export function createErrorCodesDetector() {
|
|
209
|
+
return new ErrorCodesDetector();
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=error-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Logging Detector - Error logging pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects error logging patterns including:
|
|
5
|
+
* - Logger usage for errors
|
|
6
|
+
* - Error context logging
|
|
7
|
+
* - Stack trace logging
|
|
8
|
+
* - Structured error logging
|
|
9
|
+
*
|
|
10
|
+
* Flags violations:
|
|
11
|
+
* - Console.log for errors
|
|
12
|
+
* - Missing error context
|
|
13
|
+
* - Inconsistent logging
|
|
14
|
+
*
|
|
15
|
+
* @requirements 12.7 - Error logging patterns
|
|
16
|
+
*/
|
|
17
|
+
import type { Language } from 'driftdetect-core';
|
|
18
|
+
import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
|
|
19
|
+
export type ErrorLoggingPatternType = 'logger-error' | 'structured-log' | 'context-log' | 'stack-trace-log';
|
|
20
|
+
export type ErrorLoggingViolationType = 'console-error' | 'missing-context' | 'inconsistent-logging';
|
|
21
|
+
export interface ErrorLoggingPatternInfo {
|
|
22
|
+
type: ErrorLoggingPatternType;
|
|
23
|
+
file: string;
|
|
24
|
+
line: number;
|
|
25
|
+
column: number;
|
|
26
|
+
matchedText: string;
|
|
27
|
+
loggerName?: string | undefined;
|
|
28
|
+
context?: string | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface ErrorLoggingViolationInfo {
|
|
31
|
+
type: ErrorLoggingViolationType;
|
|
32
|
+
file: string;
|
|
33
|
+
line: number;
|
|
34
|
+
column: number;
|
|
35
|
+
endLine: number;
|
|
36
|
+
endColumn: number;
|
|
37
|
+
value: string;
|
|
38
|
+
issue: string;
|
|
39
|
+
suggestedFix?: string;
|
|
40
|
+
lineContent: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ErrorLoggingAnalysis {
|
|
43
|
+
patterns: ErrorLoggingPatternInfo[];
|
|
44
|
+
violations: ErrorLoggingViolationInfo[];
|
|
45
|
+
hasStructuredLogging: boolean;
|
|
46
|
+
usesLogger: boolean;
|
|
47
|
+
confidence: number;
|
|
48
|
+
}
|
|
49
|
+
export declare const LOGGER_ERROR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
50
|
+
export declare const STRUCTURED_LOG_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
51
|
+
export declare const CONTEXT_LOG_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
52
|
+
export declare const STACK_TRACE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
53
|
+
export declare const CONSOLE_ERROR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
54
|
+
export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
|
|
55
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
56
|
+
export declare function detectLoggerError(content: string, file: string): ErrorLoggingPatternInfo[];
|
|
57
|
+
export declare function detectStructuredLogging(content: string, file: string): ErrorLoggingPatternInfo[];
|
|
58
|
+
export declare function detectContextLogging(content: string, file: string): ErrorLoggingPatternInfo[];
|
|
59
|
+
export declare function detectStackTraceLogging(content: string, file: string): ErrorLoggingPatternInfo[];
|
|
60
|
+
export declare function detectConsoleErrorViolations(patterns: ErrorLoggingPatternInfo[], content: string, file: string): ErrorLoggingViolationInfo[];
|
|
61
|
+
export declare function analyzeErrorLogging(content: string, file: string): ErrorLoggingAnalysis;
|
|
62
|
+
export declare class ErrorLoggingDetector extends RegexDetector {
|
|
63
|
+
readonly id = "errors/error-logging";
|
|
64
|
+
readonly name = "Error Logging Detector";
|
|
65
|
+
readonly description = "Detects error logging patterns";
|
|
66
|
+
readonly category = "errors";
|
|
67
|
+
readonly subcategory = "logging";
|
|
68
|
+
readonly supportedLanguages: Language[];
|
|
69
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
70
|
+
generateQuickFix(): null;
|
|
71
|
+
}
|
|
72
|
+
export declare function createErrorLoggingDetector(): ErrorLoggingDetector;
|
|
73
|
+
//# sourceMappingURL=error-logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-logging.d.ts","sourceRoot":"","sources":["../../src/errors/error-logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Logging Detector - Error logging pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects error logging patterns including:
|
|
5
|
+
* - Logger usage for errors
|
|
6
|
+
* - Error context logging
|
|
7
|
+
* - Stack trace logging
|
|
8
|
+
* - Structured error logging
|
|
9
|
+
*
|
|
10
|
+
* Flags violations:
|
|
11
|
+
* - Console.log for errors
|
|
12
|
+
* - Missing error context
|
|
13
|
+
* - Inconsistent logging
|
|
14
|
+
*
|
|
15
|
+
* @requirements 12.7 - Error logging patterns
|
|
16
|
+
*/
|
|
17
|
+
import { RegexDetector } from '../base/index.js';
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Constants
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export const LOGGER_ERROR_PATTERNS = [
|
|
22
|
+
// JavaScript/TypeScript
|
|
23
|
+
/logger\.error\s*\(/gi,
|
|
24
|
+
/log\.error\s*\(/gi,
|
|
25
|
+
/logging\.error\s*\(/gi,
|
|
26
|
+
/winston\.error\s*\(/gi,
|
|
27
|
+
/pino\.error\s*\(/gi,
|
|
28
|
+
// Python
|
|
29
|
+
/logger\.exception\s*\(/gi,
|
|
30
|
+
/self\.logger\.error\s*\(/gi,
|
|
31
|
+
/self\._logger\.error\s*\(/gi,
|
|
32
|
+
];
|
|
33
|
+
export const STRUCTURED_LOG_PATTERNS = [
|
|
34
|
+
// JavaScript/TypeScript
|
|
35
|
+
/logger\.error\s*\(\s*\{/gi,
|
|
36
|
+
/log\.error\s*\(\s*\{/gi,
|
|
37
|
+
/error\s*:\s*\{[^}]*message/gi,
|
|
38
|
+
/logError\s*\(\s*\{/gi,
|
|
39
|
+
// Python - extra dict
|
|
40
|
+
/logger\.error\s*\([^)]+,\s*extra\s*=/gi,
|
|
41
|
+
/logger\.exception\s*\([^)]+,\s*extra\s*=/gi,
|
|
42
|
+
];
|
|
43
|
+
export const CONTEXT_LOG_PATTERNS = [
|
|
44
|
+
// JavaScript/TypeScript
|
|
45
|
+
/logger\.error\s*\([^)]*,\s*\{/gi,
|
|
46
|
+
/log\.error\s*\([^)]*,\s*\{/gi,
|
|
47
|
+
/error\s*,\s*\{\s*context/gi,
|
|
48
|
+
/error\s*,\s*\{\s*metadata/gi,
|
|
49
|
+
// Python
|
|
50
|
+
/exc_info\s*=\s*True/gi,
|
|
51
|
+
/stack_info\s*=\s*True/gi,
|
|
52
|
+
];
|
|
53
|
+
export const STACK_TRACE_PATTERNS = [
|
|
54
|
+
// JavaScript/TypeScript
|
|
55
|
+
/\.stack\b/gi,
|
|
56
|
+
/stackTrace/gi,
|
|
57
|
+
/Error\.captureStackTrace/gi,
|
|
58
|
+
/error\.stack/gi,
|
|
59
|
+
// Python
|
|
60
|
+
/traceback\.format_exc/gi,
|
|
61
|
+
/traceback\.print_exc/gi,
|
|
62
|
+
/sys\.exc_info/gi,
|
|
63
|
+
/__traceback__/gi,
|
|
64
|
+
];
|
|
65
|
+
export const CONSOLE_ERROR_PATTERNS = [
|
|
66
|
+
// JavaScript/TypeScript
|
|
67
|
+
/console\.error\s*\(/gi,
|
|
68
|
+
/console\.log\s*\([^)]*error/gi,
|
|
69
|
+
/console\.warn\s*\([^)]*error/gi,
|
|
70
|
+
// Python - print for errors (anti-pattern)
|
|
71
|
+
/print\s*\([^)]*[Ee]rror/gi,
|
|
72
|
+
/print\s*\([^)]*[Ee]xception/gi,
|
|
73
|
+
];
|
|
74
|
+
export const EXCLUDED_FILE_PATTERNS = [
|
|
75
|
+
/\.test\.[jt]sx?$/,
|
|
76
|
+
/\.spec\.[jt]sx?$/,
|
|
77
|
+
/node_modules\//,
|
|
78
|
+
/\.d\.ts$/,
|
|
79
|
+
];
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// Helper Functions
|
|
82
|
+
// ============================================================================
|
|
83
|
+
export function shouldExcludeFile(filePath) {
|
|
84
|
+
return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
|
|
85
|
+
}
|
|
86
|
+
function isInsideComment(content, index) {
|
|
87
|
+
const before = content.slice(0, index);
|
|
88
|
+
const lastNewline = before.lastIndexOf('\n');
|
|
89
|
+
const line = before.slice(lastNewline + 1);
|
|
90
|
+
if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
|
|
91
|
+
return true;
|
|
92
|
+
return before.lastIndexOf('/*') > before.lastIndexOf('*/');
|
|
93
|
+
}
|
|
94
|
+
function getPosition(content, index) {
|
|
95
|
+
const before = content.slice(0, index);
|
|
96
|
+
return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
|
|
97
|
+
}
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Detection Functions
|
|
100
|
+
// ============================================================================
|
|
101
|
+
export function detectLoggerError(content, file) {
|
|
102
|
+
const results = [];
|
|
103
|
+
const lines = content.split('\n');
|
|
104
|
+
for (const pattern of LOGGER_ERROR_PATTERNS) {
|
|
105
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
106
|
+
let match;
|
|
107
|
+
while ((match = regex.exec(content)) !== null) {
|
|
108
|
+
if (isInsideComment(content, match.index))
|
|
109
|
+
continue;
|
|
110
|
+
const { line, column } = getPosition(content, match.index);
|
|
111
|
+
results.push({
|
|
112
|
+
type: 'logger-error',
|
|
113
|
+
file, line, column,
|
|
114
|
+
matchedText: match[0],
|
|
115
|
+
loggerName: match[0].split('.')[0],
|
|
116
|
+
context: lines[line - 1] || '',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
export function detectStructuredLogging(content, file) {
|
|
123
|
+
const results = [];
|
|
124
|
+
const lines = content.split('\n');
|
|
125
|
+
for (const pattern of STRUCTURED_LOG_PATTERNS) {
|
|
126
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
127
|
+
let match;
|
|
128
|
+
while ((match = regex.exec(content)) !== null) {
|
|
129
|
+
if (isInsideComment(content, match.index))
|
|
130
|
+
continue;
|
|
131
|
+
const { line, column } = getPosition(content, match.index);
|
|
132
|
+
results.push({
|
|
133
|
+
type: 'structured-log',
|
|
134
|
+
file, line, column,
|
|
135
|
+
matchedText: match[0],
|
|
136
|
+
context: lines[line - 1] || '',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return results;
|
|
141
|
+
}
|
|
142
|
+
export function detectContextLogging(content, file) {
|
|
143
|
+
const results = [];
|
|
144
|
+
const lines = content.split('\n');
|
|
145
|
+
for (const pattern of CONTEXT_LOG_PATTERNS) {
|
|
146
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
147
|
+
let match;
|
|
148
|
+
while ((match = regex.exec(content)) !== null) {
|
|
149
|
+
if (isInsideComment(content, match.index))
|
|
150
|
+
continue;
|
|
151
|
+
const { line, column } = getPosition(content, match.index);
|
|
152
|
+
results.push({
|
|
153
|
+
type: 'context-log',
|
|
154
|
+
file, line, column,
|
|
155
|
+
matchedText: match[0],
|
|
156
|
+
context: lines[line - 1] || '',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return results;
|
|
161
|
+
}
|
|
162
|
+
export function detectStackTraceLogging(content, file) {
|
|
163
|
+
const results = [];
|
|
164
|
+
const lines = content.split('\n');
|
|
165
|
+
for (const pattern of STACK_TRACE_PATTERNS) {
|
|
166
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
167
|
+
let match;
|
|
168
|
+
while ((match = regex.exec(content)) !== null) {
|
|
169
|
+
if (isInsideComment(content, match.index))
|
|
170
|
+
continue;
|
|
171
|
+
const { line, column } = getPosition(content, match.index);
|
|
172
|
+
results.push({
|
|
173
|
+
type: 'stack-trace-log',
|
|
174
|
+
file, line, column,
|
|
175
|
+
matchedText: match[0],
|
|
176
|
+
context: lines[line - 1] || '',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
export function detectConsoleErrorViolations(patterns, content, file) {
|
|
183
|
+
const violations = [];
|
|
184
|
+
const lines = content.split('\n');
|
|
185
|
+
const usesLogger = patterns.some(p => p.type === 'logger-error');
|
|
186
|
+
// Only flag console.error if there's a logger being used
|
|
187
|
+
if (!usesLogger)
|
|
188
|
+
return violations;
|
|
189
|
+
for (const pattern of CONSOLE_ERROR_PATTERNS) {
|
|
190
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
191
|
+
let match;
|
|
192
|
+
while ((match = regex.exec(content)) !== null) {
|
|
193
|
+
if (isInsideComment(content, match.index))
|
|
194
|
+
continue;
|
|
195
|
+
const { line, column } = getPosition(content, match.index);
|
|
196
|
+
violations.push({
|
|
197
|
+
type: 'console-error',
|
|
198
|
+
file, line, column,
|
|
199
|
+
endLine: line,
|
|
200
|
+
endColumn: column + match[0].length,
|
|
201
|
+
value: match[0],
|
|
202
|
+
issue: 'Using console for error logging instead of logger',
|
|
203
|
+
suggestedFix: 'Use logger.error() for consistent error logging',
|
|
204
|
+
lineContent: lines[line - 1] || '',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return violations;
|
|
209
|
+
}
|
|
210
|
+
// ============================================================================
|
|
211
|
+
// Main Analysis Function
|
|
212
|
+
// ============================================================================
|
|
213
|
+
export function analyzeErrorLogging(content, file) {
|
|
214
|
+
if (shouldExcludeFile(file)) {
|
|
215
|
+
return { patterns: [], violations: [], hasStructuredLogging: false, usesLogger: false, confidence: 1.0 };
|
|
216
|
+
}
|
|
217
|
+
const loggerError = detectLoggerError(content, file);
|
|
218
|
+
const structured = detectStructuredLogging(content, file);
|
|
219
|
+
const contextLog = detectContextLogging(content, file);
|
|
220
|
+
const stackTrace = detectStackTraceLogging(content, file);
|
|
221
|
+
const allPatterns = [...loggerError, ...structured, ...contextLog, ...stackTrace];
|
|
222
|
+
const violations = detectConsoleErrorViolations(allPatterns, content, file);
|
|
223
|
+
const confidence = allPatterns.length > 0 ? Math.max(0.5, 1 - violations.length * 0.1) : 1.0;
|
|
224
|
+
return {
|
|
225
|
+
patterns: allPatterns,
|
|
226
|
+
violations,
|
|
227
|
+
hasStructuredLogging: structured.length > 0,
|
|
228
|
+
usesLogger: loggerError.length > 0,
|
|
229
|
+
confidence,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// ============================================================================
|
|
233
|
+
// Detector Class
|
|
234
|
+
// ============================================================================
|
|
235
|
+
export class ErrorLoggingDetector extends RegexDetector {
|
|
236
|
+
id = 'errors/error-logging';
|
|
237
|
+
name = 'Error Logging Detector';
|
|
238
|
+
description = 'Detects error logging patterns';
|
|
239
|
+
category = 'errors';
|
|
240
|
+
subcategory = 'logging';
|
|
241
|
+
supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
242
|
+
async detect(context) {
|
|
243
|
+
const { content, file } = context;
|
|
244
|
+
if (shouldExcludeFile(file))
|
|
245
|
+
return this.createEmptyResult();
|
|
246
|
+
const analysis = analyzeErrorLogging(content, file);
|
|
247
|
+
return this.createResult([], [], analysis.confidence);
|
|
248
|
+
}
|
|
249
|
+
generateQuickFix() {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
export function createErrorLoggingDetector() {
|
|
254
|
+
return new ErrorLoggingDetector();
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=error-logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-logging.js","sourceRoot":"","sources":["../../src/errors/error-logging.ts"],"names":[],"mappings":"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"}
|