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,602 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Boundaries Detector - Monorepo boundary violation detection
|
|
3
|
+
*
|
|
4
|
+
* Detects monorepo package boundary violations including:
|
|
5
|
+
* - Direct imports between packages that bypass the public API
|
|
6
|
+
* - Imports from packages that are not declared as dependencies
|
|
7
|
+
* - Cross-package imports that violate the dependency hierarchy
|
|
8
|
+
* - Internal module access (importing from src/ instead of package entry point)
|
|
9
|
+
*
|
|
10
|
+
* @requirements 7.8 - THE Structural_Detector SHALL detect package boundary violations in monorepos
|
|
11
|
+
*/
|
|
12
|
+
import { StructuralDetector } from '../base/index.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Common monorepo package directory patterns
|
|
18
|
+
*/
|
|
19
|
+
export const COMMON_PACKAGE_PATTERNS = [
|
|
20
|
+
'packages/*',
|
|
21
|
+
'apps/*',
|
|
22
|
+
'libs/*',
|
|
23
|
+
'modules/*',
|
|
24
|
+
'services/*',
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Patterns that indicate internal/private paths
|
|
28
|
+
*/
|
|
29
|
+
export const INTERNAL_PATH_PATTERNS = [
|
|
30
|
+
'/src/',
|
|
31
|
+
'/lib/',
|
|
32
|
+
'/dist/',
|
|
33
|
+
'/internal/',
|
|
34
|
+
'/private/',
|
|
35
|
+
'/_internal/',
|
|
36
|
+
'/_private/',
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* Default monorepo configuration
|
|
40
|
+
*/
|
|
41
|
+
export const DEFAULT_MONOREPO_CONFIG = {
|
|
42
|
+
packagePatterns: COMMON_PACKAGE_PATTERNS,
|
|
43
|
+
allowInternalImports: false,
|
|
44
|
+
};
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Helper Functions
|
|
47
|
+
// ============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Normalize a file path for consistent matching
|
|
50
|
+
*/
|
|
51
|
+
function normalizePath(path) {
|
|
52
|
+
return path.replace(/\\/g, '/');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Extract package name from an import path
|
|
56
|
+
* Handles scoped packages (@org/package) and regular packages
|
|
57
|
+
*/
|
|
58
|
+
export function extractPackageName(importPath) {
|
|
59
|
+
// Skip relative imports
|
|
60
|
+
if (importPath.startsWith('.') || importPath.startsWith('/')) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// Handle scoped packages (@org/package)
|
|
64
|
+
if (importPath.startsWith('@')) {
|
|
65
|
+
const parts = importPath.split('/');
|
|
66
|
+
if (parts.length >= 2) {
|
|
67
|
+
return `${parts[0]}/${parts[1]}`;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// Handle regular packages
|
|
72
|
+
const parts = importPath.split('/');
|
|
73
|
+
return parts[0] || null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if an import path accesses internal package paths
|
|
77
|
+
*/
|
|
78
|
+
export function isInternalImport(importPath) {
|
|
79
|
+
const normalizedPath = normalizePath(importPath);
|
|
80
|
+
// Check for common internal path patterns
|
|
81
|
+
for (const pattern of INTERNAL_PATH_PATTERNS) {
|
|
82
|
+
if (normalizedPath.includes(pattern)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Check for direct src/ access after package name
|
|
87
|
+
// e.g., driftdetect-core/src/internal or package-name/src/utils
|
|
88
|
+
const packageName = extractPackageName(importPath);
|
|
89
|
+
if (packageName) {
|
|
90
|
+
const afterPackage = importPath.slice(packageName.length);
|
|
91
|
+
if (afterPackage.startsWith('/src/') ||
|
|
92
|
+
afterPackage.startsWith('/lib/') ||
|
|
93
|
+
afterPackage.startsWith('/dist/')) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if an import bypasses the public API
|
|
101
|
+
* (imports from internal paths instead of the package entry point)
|
|
102
|
+
*/
|
|
103
|
+
export function bypassesPublicApi(importPath, packageName) {
|
|
104
|
+
// If the import is just the package name, it uses the public API
|
|
105
|
+
if (importPath === packageName) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// If the import has a subpath, check if it's accessing internal paths
|
|
109
|
+
const subpath = importPath.slice(packageName.length);
|
|
110
|
+
// Allow explicit exports like driftdetect-core/utils (if exported)
|
|
111
|
+
// But flag internal paths like driftdetect-core/src/utils
|
|
112
|
+
if (subpath.startsWith('/src/') ||
|
|
113
|
+
subpath.startsWith('/lib/') ||
|
|
114
|
+
subpath.startsWith('/dist/') ||
|
|
115
|
+
subpath.includes('/internal/') ||
|
|
116
|
+
subpath.includes('/private/')) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Detect packages in a monorepo from file paths
|
|
123
|
+
*/
|
|
124
|
+
export function detectMonorepoPackages(files, config = DEFAULT_MONOREPO_CONFIG) {
|
|
125
|
+
const packages = [];
|
|
126
|
+
const packageDirs = new Set();
|
|
127
|
+
// Find package directories based on patterns
|
|
128
|
+
for (const file of files) {
|
|
129
|
+
const normalizedFile = normalizePath(file);
|
|
130
|
+
for (const pattern of config.packagePatterns) {
|
|
131
|
+
// Extract the base directory from the pattern (e.g., 'packages' from 'packages/*')
|
|
132
|
+
const patternBase = pattern.replace('/*', '').replace('/**', '');
|
|
133
|
+
// Check if the file is under this pattern base
|
|
134
|
+
if (normalizedFile.startsWith(patternBase + '/')) {
|
|
135
|
+
// Extract the package directory name
|
|
136
|
+
const afterBase = normalizedFile.slice(patternBase.length + 1);
|
|
137
|
+
const packageDir = afterBase.split('/')[0];
|
|
138
|
+
if (packageDir) {
|
|
139
|
+
const fullPackageDir = `${patternBase}/${packageDir}`;
|
|
140
|
+
packageDirs.add(fullPackageDir);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Also detect packages from package.json files
|
|
146
|
+
for (const file of files) {
|
|
147
|
+
const normalizedFile = normalizePath(file);
|
|
148
|
+
if (normalizedFile.endsWith('/package.json') || normalizedFile === 'package.json') {
|
|
149
|
+
const dir = normalizedFile.replace('/package.json', '');
|
|
150
|
+
if (dir && dir !== '.' && dir !== 'package.json') {
|
|
151
|
+
packageDirs.add(dir);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Create PackageInfo for each detected package
|
|
156
|
+
for (const dir of packageDirs) {
|
|
157
|
+
// Derive package name from directory
|
|
158
|
+
const parts = dir.split('/');
|
|
159
|
+
const packageName = parts[parts.length - 1] || dir;
|
|
160
|
+
// Check if it's a scoped package (common in monorepos)
|
|
161
|
+
const parentDir = parts[parts.length - 2];
|
|
162
|
+
const scopedName = parentDir === 'packages' || parentDir === 'apps' || parentDir === 'libs'
|
|
163
|
+
? `@${parts[0] || 'monorepo'}/${packageName}`
|
|
164
|
+
: packageName;
|
|
165
|
+
packages.push({
|
|
166
|
+
name: scopedName,
|
|
167
|
+
path: dir,
|
|
168
|
+
dependencies: [],
|
|
169
|
+
devDependencies: [],
|
|
170
|
+
peerDependencies: [],
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return packages;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Find which package a file belongs to
|
|
177
|
+
*/
|
|
178
|
+
export function findPackageForFile(filePath, packages) {
|
|
179
|
+
const normalizedPath = normalizePath(filePath);
|
|
180
|
+
// Find the package with the longest matching path (most specific)
|
|
181
|
+
let bestMatch = null;
|
|
182
|
+
let bestMatchLength = 0;
|
|
183
|
+
for (const pkg of packages) {
|
|
184
|
+
const normalizedPkgPath = normalizePath(pkg.path);
|
|
185
|
+
if (normalizedPath.startsWith(normalizedPkgPath + '/') ||
|
|
186
|
+
normalizedPath === normalizedPkgPath) {
|
|
187
|
+
if (normalizedPkgPath.length > bestMatchLength) {
|
|
188
|
+
bestMatch = pkg;
|
|
189
|
+
bestMatchLength = normalizedPkgPath.length;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return bestMatch;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Resolve an import to determine which package it targets
|
|
197
|
+
*/
|
|
198
|
+
export function resolveImportToPackage(importSource, currentFile, packages) {
|
|
199
|
+
// Handle relative imports
|
|
200
|
+
if (importSource.startsWith('.')) {
|
|
201
|
+
const currentDir = normalizePath(currentFile).split('/').slice(0, -1).join('/');
|
|
202
|
+
const segments = importSource.split('/');
|
|
203
|
+
const pathSegments = currentDir.split('/');
|
|
204
|
+
for (const segment of segments) {
|
|
205
|
+
if (segment === '.') {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
else if (segment === '..') {
|
|
209
|
+
pathSegments.pop();
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
pathSegments.push(segment);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const resolvedPath = pathSegments.join('/');
|
|
216
|
+
return findPackageForFile(resolvedPath, packages);
|
|
217
|
+
}
|
|
218
|
+
// Handle package imports
|
|
219
|
+
const packageName = extractPackageName(importSource);
|
|
220
|
+
if (!packageName) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
// Find package by name (exact match)
|
|
224
|
+
for (const pkg of packages) {
|
|
225
|
+
if (pkg.name === packageName) {
|
|
226
|
+
return pkg;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Find package by name (ends with the package name for scoped packages)
|
|
230
|
+
for (const pkg of packages) {
|
|
231
|
+
if (pkg.name.endsWith('/' + packageName.replace('@', '').split('/').pop())) {
|
|
232
|
+
return pkg;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Try to find by directory name
|
|
236
|
+
const pkgDirName = packageName.startsWith('@')
|
|
237
|
+
? packageName.split('/').pop()
|
|
238
|
+
: packageName;
|
|
239
|
+
for (const pkg of packages) {
|
|
240
|
+
const dirName = pkg.path.split('/').pop();
|
|
241
|
+
if (dirName === pkgDirName) {
|
|
242
|
+
return pkg;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Check if a package is declared as a dependency
|
|
249
|
+
*/
|
|
250
|
+
export function isDeclaredDependency(targetPackage, sourcePackage) {
|
|
251
|
+
const allDeps = [
|
|
252
|
+
...sourcePackage.dependencies,
|
|
253
|
+
...sourcePackage.devDependencies,
|
|
254
|
+
...sourcePackage.peerDependencies,
|
|
255
|
+
];
|
|
256
|
+
return allDeps.includes(targetPackage);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Generate a suggested import path for a violation
|
|
260
|
+
*/
|
|
261
|
+
export function generateSuggestedImport(violation) {
|
|
262
|
+
switch (violation.type) {
|
|
263
|
+
case 'internal-import':
|
|
264
|
+
case 'bypass-public-api':
|
|
265
|
+
// Suggest using the package name directly
|
|
266
|
+
return violation.targetPackage;
|
|
267
|
+
case 'undeclared-dependency':
|
|
268
|
+
// Suggest adding to dependencies
|
|
269
|
+
return undefined; // No import fix, need to add dependency
|
|
270
|
+
case 'hierarchy-violation':
|
|
271
|
+
// Suggest restructuring
|
|
272
|
+
return undefined;
|
|
273
|
+
default:
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Calculate severity for a package boundary violation
|
|
279
|
+
*/
|
|
280
|
+
export function calculateViolationSeverity(type) {
|
|
281
|
+
switch (type) {
|
|
282
|
+
case 'internal-import':
|
|
283
|
+
return 'error'; // Accessing internal paths is a serious violation
|
|
284
|
+
case 'bypass-public-api':
|
|
285
|
+
return 'warning'; // Bypassing public API should be fixed
|
|
286
|
+
case 'undeclared-dependency':
|
|
287
|
+
return 'error'; // Missing dependency can cause runtime errors
|
|
288
|
+
case 'hierarchy-violation':
|
|
289
|
+
return 'warning'; // Hierarchy violations are architectural concerns
|
|
290
|
+
default:
|
|
291
|
+
return 'warning';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Analyze package boundaries for a file
|
|
296
|
+
*/
|
|
297
|
+
export function analyzePackageBoundaries(file, imports, projectFiles, config = DEFAULT_MONOREPO_CONFIG) {
|
|
298
|
+
// Detect packages in the monorepo
|
|
299
|
+
const packages = detectMonorepoPackages(projectFiles, config);
|
|
300
|
+
// Find the current file's package
|
|
301
|
+
const currentPackage = findPackageForFile(file, packages);
|
|
302
|
+
// If not in a monorepo package, return early
|
|
303
|
+
if (!currentPackage || packages.length <= 1) {
|
|
304
|
+
return {
|
|
305
|
+
isInMonorepo: packages.length > 1,
|
|
306
|
+
currentPackage,
|
|
307
|
+
packages,
|
|
308
|
+
violations: [],
|
|
309
|
+
totalCrossPackageImports: 0,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
const violations = [];
|
|
313
|
+
let crossPackageImports = 0;
|
|
314
|
+
for (const imp of imports) {
|
|
315
|
+
// Skip relative imports within the same package (unless checking internal)
|
|
316
|
+
if (imp.source.startsWith('.')) {
|
|
317
|
+
// Check if relative import goes outside current package
|
|
318
|
+
const targetPackage = resolveImportToPackage(imp.source, file, packages);
|
|
319
|
+
if (targetPackage && targetPackage.name !== currentPackage.name) {
|
|
320
|
+
crossPackageImports++;
|
|
321
|
+
// Relative import to another package - this is a violation
|
|
322
|
+
violations.push({
|
|
323
|
+
type: 'bypass-public-api',
|
|
324
|
+
importSource: imp.source,
|
|
325
|
+
targetPackage: targetPackage.name,
|
|
326
|
+
sourcePackage: currentPackage.name,
|
|
327
|
+
line: imp.line,
|
|
328
|
+
severity: 'warning',
|
|
329
|
+
description: `Relative import to package '${targetPackage.name}' bypasses the public API`,
|
|
330
|
+
suggestedImport: targetPackage.name,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
// Extract package name from import
|
|
336
|
+
const packageName = extractPackageName(imp.source);
|
|
337
|
+
if (!packageName) {
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
// Find the target package
|
|
341
|
+
const targetPackage = resolveImportToPackage(imp.source, file, packages);
|
|
342
|
+
// Skip external packages (not in monorepo)
|
|
343
|
+
if (!targetPackage) {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
// Skip same-package imports
|
|
347
|
+
if (targetPackage.name === currentPackage.name) {
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
crossPackageImports++;
|
|
351
|
+
// Check for internal import violations
|
|
352
|
+
if (isInternalImport(imp.source)) {
|
|
353
|
+
violations.push({
|
|
354
|
+
type: 'internal-import',
|
|
355
|
+
importSource: imp.source,
|
|
356
|
+
targetPackage: targetPackage.name,
|
|
357
|
+
sourcePackage: currentPackage.name,
|
|
358
|
+
line: imp.line,
|
|
359
|
+
severity: 'error',
|
|
360
|
+
description: `Import from internal path of package '${targetPackage.name}'`,
|
|
361
|
+
suggestedImport: targetPackage.name,
|
|
362
|
+
});
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
// Check for public API bypass
|
|
366
|
+
if (bypassesPublicApi(imp.source, packageName)) {
|
|
367
|
+
violations.push({
|
|
368
|
+
type: 'bypass-public-api',
|
|
369
|
+
importSource: imp.source,
|
|
370
|
+
targetPackage: targetPackage.name,
|
|
371
|
+
sourcePackage: currentPackage.name,
|
|
372
|
+
line: imp.line,
|
|
373
|
+
severity: 'warning',
|
|
374
|
+
description: `Import bypasses public API of package '${targetPackage.name}'`,
|
|
375
|
+
suggestedImport: targetPackage.name,
|
|
376
|
+
});
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
// Check for undeclared dependency (if we have dependency info)
|
|
380
|
+
if (currentPackage.dependencies.length > 0 ||
|
|
381
|
+
currentPackage.devDependencies.length > 0) {
|
|
382
|
+
if (!isDeclaredDependency(targetPackage.name, currentPackage)) {
|
|
383
|
+
violations.push({
|
|
384
|
+
type: 'undeclared-dependency',
|
|
385
|
+
importSource: imp.source,
|
|
386
|
+
targetPackage: targetPackage.name,
|
|
387
|
+
sourcePackage: currentPackage.name,
|
|
388
|
+
line: imp.line,
|
|
389
|
+
severity: 'error',
|
|
390
|
+
description: `Package '${targetPackage.name}' is not declared as a dependency`,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return {
|
|
396
|
+
isInMonorepo: true,
|
|
397
|
+
currentPackage,
|
|
398
|
+
packages,
|
|
399
|
+
violations,
|
|
400
|
+
totalCrossPackageImports: crossPackageImports,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
// ============================================================================
|
|
404
|
+
// Package Boundaries Detector Class
|
|
405
|
+
// ============================================================================
|
|
406
|
+
/**
|
|
407
|
+
* Detector for monorepo package boundary violations
|
|
408
|
+
*
|
|
409
|
+
* Identifies violations including:
|
|
410
|
+
* - Direct imports between packages that bypass the public API
|
|
411
|
+
* - Imports from packages that are not declared as dependencies
|
|
412
|
+
* - Cross-package imports that violate the dependency hierarchy
|
|
413
|
+
* - Internal module access (importing from src/ instead of package entry point)
|
|
414
|
+
*
|
|
415
|
+
* @requirements 7.8 - THE Structural_Detector SHALL detect package boundary violations in monorepos
|
|
416
|
+
*/
|
|
417
|
+
export class PackageBoundariesDetector extends StructuralDetector {
|
|
418
|
+
id = 'structural/package-boundaries';
|
|
419
|
+
category = 'structural';
|
|
420
|
+
subcategory = 'package-boundaries';
|
|
421
|
+
name = 'Package Boundaries Detector';
|
|
422
|
+
description = 'Detects monorepo package boundary violations including internal imports and undeclared dependencies';
|
|
423
|
+
supportedLanguages = [
|
|
424
|
+
'typescript',
|
|
425
|
+
'javascript',
|
|
426
|
+
];
|
|
427
|
+
/**
|
|
428
|
+
* Detect package boundary violations in the project
|
|
429
|
+
*/
|
|
430
|
+
async detect(context) {
|
|
431
|
+
const patterns = [];
|
|
432
|
+
const violations = [];
|
|
433
|
+
// Extract imports from context
|
|
434
|
+
const imports = this.extractImports(context);
|
|
435
|
+
if (imports.length === 0) {
|
|
436
|
+
return this.createResult(patterns, violations, 1.0);
|
|
437
|
+
}
|
|
438
|
+
// Analyze package boundaries
|
|
439
|
+
const analysis = analyzePackageBoundaries(context.file, imports, context.projectContext.files);
|
|
440
|
+
// If not in a monorepo, return early
|
|
441
|
+
if (!analysis.isInMonorepo) {
|
|
442
|
+
return this.createResult(patterns, violations, 1.0);
|
|
443
|
+
}
|
|
444
|
+
// Create pattern match for monorepo detection
|
|
445
|
+
patterns.push({
|
|
446
|
+
patternId: 'package-boundaries-monorepo',
|
|
447
|
+
location: { file: context.file, line: 1, column: 1 },
|
|
448
|
+
confidence: 0.9,
|
|
449
|
+
isOutlier: false,
|
|
450
|
+
});
|
|
451
|
+
// Create pattern match for current package
|
|
452
|
+
if (analysis.currentPackage) {
|
|
453
|
+
patterns.push({
|
|
454
|
+
patternId: `package-boundaries-package-${analysis.currentPackage.name.replace(/[^a-zA-Z0-9]/g, '-')}`,
|
|
455
|
+
location: { file: context.file, line: 1, column: 1 },
|
|
456
|
+
confidence: 0.9,
|
|
457
|
+
isOutlier: false,
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
// Generate violations
|
|
461
|
+
for (const violation of analysis.violations) {
|
|
462
|
+
const v = this.createBoundaryViolation(context.file, violation);
|
|
463
|
+
violations.push(v);
|
|
464
|
+
// Also create a pattern match for tracking
|
|
465
|
+
patterns.push({
|
|
466
|
+
patternId: `package-boundaries-${violation.type}`,
|
|
467
|
+
location: { file: context.file, line: violation.line, column: 1 },
|
|
468
|
+
confidence: 0.9,
|
|
469
|
+
isOutlier: true,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
// Calculate confidence based on clean imports ratio
|
|
473
|
+
const cleanRatio = analysis.totalCrossPackageImports > 0
|
|
474
|
+
? (analysis.totalCrossPackageImports - analysis.violations.length) / analysis.totalCrossPackageImports
|
|
475
|
+
: 1.0;
|
|
476
|
+
return this.createResult(patterns, violations, cleanRatio);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Generate a quick fix for package boundary violations
|
|
480
|
+
*/
|
|
481
|
+
generateQuickFix(violation) {
|
|
482
|
+
// Handle internal import violations
|
|
483
|
+
if (violation.patternId === 'structural/package-boundaries-internal-import' ||
|
|
484
|
+
violation.patternId === 'structural/package-boundaries-bypass-public-api') {
|
|
485
|
+
// Extract the suggested import from the violation
|
|
486
|
+
const suggestedImport = violation.expected?.match(/import from '([^']+)'/)?.[1];
|
|
487
|
+
if (suggestedImport) {
|
|
488
|
+
return {
|
|
489
|
+
title: `Change import to '${suggestedImport}'`,
|
|
490
|
+
kind: 'quickfix',
|
|
491
|
+
edit: {
|
|
492
|
+
changes: {},
|
|
493
|
+
documentChanges: [],
|
|
494
|
+
},
|
|
495
|
+
isPreferred: true,
|
|
496
|
+
confidence: 0.8,
|
|
497
|
+
preview: `Replace the internal import with the public API: import from '${suggestedImport}'`,
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
// Handle undeclared dependency violations
|
|
502
|
+
if (violation.patternId === 'structural/package-boundaries-undeclared-dependency') {
|
|
503
|
+
const packageName = violation.actual?.match(/from '([^']+)'/)?.[1];
|
|
504
|
+
return {
|
|
505
|
+
title: `Add '${packageName}' to dependencies`,
|
|
506
|
+
kind: 'quickfix',
|
|
507
|
+
edit: {
|
|
508
|
+
changes: {},
|
|
509
|
+
documentChanges: [],
|
|
510
|
+
},
|
|
511
|
+
isPreferred: true,
|
|
512
|
+
confidence: 0.7,
|
|
513
|
+
preview: `Add the package to your package.json dependencies`,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Extract imports from the detection context
|
|
520
|
+
*/
|
|
521
|
+
extractImports(context) {
|
|
522
|
+
const imports = [];
|
|
523
|
+
// Use imports from context if available
|
|
524
|
+
if (context.imports && context.imports.length > 0) {
|
|
525
|
+
for (const imp of context.imports) {
|
|
526
|
+
const source = imp.source ||
|
|
527
|
+
imp.module;
|
|
528
|
+
if (source) {
|
|
529
|
+
imports.push({
|
|
530
|
+
source,
|
|
531
|
+
line: imp.line || 1,
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return imports;
|
|
536
|
+
}
|
|
537
|
+
// Fall back to parsing content for imports
|
|
538
|
+
const importRegex = /^import\s+(?:(?:type\s+)?(?:\{[^}]*\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[^}]*\})?)\s+from\s+)?['"]([^'"]+)['"]/gm;
|
|
539
|
+
const lines = context.content.split('\n');
|
|
540
|
+
for (let i = 0; i < lines.length; i++) {
|
|
541
|
+
const line = lines[i];
|
|
542
|
+
const match = importRegex.exec(line);
|
|
543
|
+
if (match && match[1]) {
|
|
544
|
+
imports.push({
|
|
545
|
+
source: match[1],
|
|
546
|
+
line: i + 1,
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
importRegex.lastIndex = 0; // Reset regex state
|
|
550
|
+
}
|
|
551
|
+
return imports;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Create a violation for a package boundary issue
|
|
555
|
+
*/
|
|
556
|
+
createBoundaryViolation(file, boundaryViolation) {
|
|
557
|
+
const range = {
|
|
558
|
+
start: { line: boundaryViolation.line - 1, character: 0 },
|
|
559
|
+
end: { line: boundaryViolation.line - 1, character: 100 },
|
|
560
|
+
};
|
|
561
|
+
const violation = {
|
|
562
|
+
id: `package-boundary-${file.replace(/[^a-zA-Z0-9]/g, '-')}-${boundaryViolation.line}`,
|
|
563
|
+
patternId: `structural/package-boundaries-${boundaryViolation.type}`,
|
|
564
|
+
severity: boundaryViolation.severity,
|
|
565
|
+
file,
|
|
566
|
+
range,
|
|
567
|
+
message: boundaryViolation.description,
|
|
568
|
+
expected: boundaryViolation.suggestedImport
|
|
569
|
+
? `Use public API: import from '${boundaryViolation.suggestedImport}'`
|
|
570
|
+
: 'Use the package public API',
|
|
571
|
+
actual: `Import from '${boundaryViolation.importSource}'`,
|
|
572
|
+
aiExplainAvailable: true,
|
|
573
|
+
aiFixAvailable: boundaryViolation.type !== 'undeclared-dependency',
|
|
574
|
+
firstSeen: new Date(),
|
|
575
|
+
occurrences: 1,
|
|
576
|
+
};
|
|
577
|
+
// Add quick fix for fixable violations
|
|
578
|
+
if (boundaryViolation.suggestedImport) {
|
|
579
|
+
violation.quickFix = {
|
|
580
|
+
title: `Change import to '${boundaryViolation.suggestedImport}'`,
|
|
581
|
+
kind: 'quickfix',
|
|
582
|
+
edit: {
|
|
583
|
+
changes: {},
|
|
584
|
+
documentChanges: [],
|
|
585
|
+
},
|
|
586
|
+
isPreferred: true,
|
|
587
|
+
confidence: 0.8,
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
return violation;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
// ============================================================================
|
|
594
|
+
// Factory Function
|
|
595
|
+
// ============================================================================
|
|
596
|
+
/**
|
|
597
|
+
* Create a new PackageBoundariesDetector instance
|
|
598
|
+
*/
|
|
599
|
+
export function createPackageBoundariesDetector() {
|
|
600
|
+
return new PackageBoundariesDetector();
|
|
601
|
+
}
|
|
602
|
+
//# sourceMappingURL=package-boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-boundaries.js","sourceRoot":"","sources":["../../src/structural/package-boundaries.ts"],"names":[],"mappings":"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"}
|