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,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Usage Detector - Auth middleware pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects auth middleware patterns including Express/Koa middleware, Next.js middleware,
|
|
5
|
+
* route protection patterns, session validation, and JWT verification.
|
|
6
|
+
*
|
|
7
|
+
* Flags violations: Unprotected routes, inconsistent middleware usage, missing auth checks.
|
|
8
|
+
*
|
|
9
|
+
* @requirements 11.1 - Auth middleware patterns
|
|
10
|
+
* @requirements 11.7 - Unprotected route detection
|
|
11
|
+
*/
|
|
12
|
+
import type { Language } from 'driftdetect-core';
|
|
13
|
+
import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
|
|
14
|
+
export type AuthMiddlewareType = 'express-middleware' | 'nextjs-middleware' | 'route-guard' | 'session-check' | 'api-key-check' | 'jwt-verify';
|
|
15
|
+
export type AuthMiddlewareViolationType = 'unprotected-route' | 'inconsistent-middleware' | 'missing-auth-check';
|
|
16
|
+
export interface AuthMiddlewarePatternInfo {
|
|
17
|
+
type: AuthMiddlewareType;
|
|
18
|
+
file: string;
|
|
19
|
+
line: number;
|
|
20
|
+
column: number;
|
|
21
|
+
matchedText: string;
|
|
22
|
+
middlewareName?: string;
|
|
23
|
+
context?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AuthMiddlewareViolationInfo {
|
|
26
|
+
type: AuthMiddlewareViolationType;
|
|
27
|
+
file: string;
|
|
28
|
+
line: number;
|
|
29
|
+
column: number;
|
|
30
|
+
endLine: number;
|
|
31
|
+
endColumn: number;
|
|
32
|
+
value: string;
|
|
33
|
+
issue: string;
|
|
34
|
+
suggestedFix?: string;
|
|
35
|
+
lineContent: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AuthMiddlewareAnalysis {
|
|
38
|
+
patterns: AuthMiddlewarePatternInfo[];
|
|
39
|
+
violations: AuthMiddlewareViolationInfo[];
|
|
40
|
+
hasAuthMiddleware: boolean;
|
|
41
|
+
protectedRoutes: number;
|
|
42
|
+
unprotectedRoutes: number;
|
|
43
|
+
}
|
|
44
|
+
export declare const AUTH_MIDDLEWARE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
45
|
+
export declare const NEXTJS_MIDDLEWARE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
46
|
+
export declare const JWT_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
47
|
+
export declare const ROUTE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
48
|
+
export declare const SENSITIVE_ROUTE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
49
|
+
export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
|
|
50
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
51
|
+
export declare function detectAuthMiddleware(content: string, file: string): AuthMiddlewarePatternInfo[];
|
|
52
|
+
export declare function detectUnprotectedRoutes(content: string, file: string, hasAuth: boolean): AuthMiddlewareViolationInfo[];
|
|
53
|
+
export declare function analyzeAuthMiddleware(content: string, file: string): AuthMiddlewareAnalysis;
|
|
54
|
+
export declare class AuthMiddlewareDetector extends RegexDetector {
|
|
55
|
+
readonly id = "auth/middleware-usage";
|
|
56
|
+
readonly name = "Auth Middleware Detector";
|
|
57
|
+
readonly description = "Detects auth middleware patterns and unprotected routes";
|
|
58
|
+
readonly category = "auth";
|
|
59
|
+
readonly subcategory = "middleware";
|
|
60
|
+
readonly supportedLanguages: Language[];
|
|
61
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
62
|
+
generateQuickFix(): null;
|
|
63
|
+
}
|
|
64
|
+
export declare function createAuthMiddlewareDetector(): AuthMiddlewareDetector;
|
|
65
|
+
//# sourceMappingURL=middleware-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-usage.d.ts","sourceRoot":"","sources":["../../src/auth/middleware-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC;AAC/I,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG,yBAAyB,GAAG,oBAAoB,CAAC;AAEjH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,2BAA2B,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IACtC,UAAU,EAAE,2BAA2B,EAAE,CAAC;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAGD,eAAO,MAAM,wBAAwB,mEAU3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,mDAM7B,CAAC;AAEX,eAAO,MAAM,YAAY,2FAaf,CAAC;AAEX,eAAO,MAAM,cAAc,2CAOjB,CAAC;AAEX,eAAO,MAAM,wBAAwB,2CAK3B,CAAC;AAEX,eAAO,MAAM,sBAAsB,UAAyE,CAAC;AAE7G,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAeD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,yBAAyB,EAAE,CAkD/F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,2BAA2B,EAAE,CA8BtH;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAgB3F;AAED,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,2BAA2B;IACtC,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,WAAW,6DAA6D;IACjF,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,WAAW,gBAAgB;IACpC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAA0C;IAE3E,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAUjE,gBAAgB,IAAI,IAAI;CAGzB;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Usage Detector - Auth middleware pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects auth middleware patterns including Express/Koa middleware, Next.js middleware,
|
|
5
|
+
* route protection patterns, session validation, and JWT verification.
|
|
6
|
+
*
|
|
7
|
+
* Flags violations: Unprotected routes, inconsistent middleware usage, missing auth checks.
|
|
8
|
+
*
|
|
9
|
+
* @requirements 11.1 - Auth middleware patterns
|
|
10
|
+
* @requirements 11.7 - Unprotected route detection
|
|
11
|
+
*/
|
|
12
|
+
import { RegexDetector } from '../base/index.js';
|
|
13
|
+
// Constants (JavaScript/TypeScript + Python)
|
|
14
|
+
export const AUTH_MIDDLEWARE_PATTERNS = [
|
|
15
|
+
// JavaScript/TypeScript
|
|
16
|
+
/(?:requireAuth|isAuthenticated|authenticate|authMiddleware|withAuth|protected)\s*[,(]/gi,
|
|
17
|
+
/middleware\s*:\s*\[?[^}\]]*(?:auth|protect|guard)/gi,
|
|
18
|
+
/app\.use\s*\([^)]*(?:passport|session|jwt|auth)/gi,
|
|
19
|
+
/router\.use\s*\([^)]*(?:auth|protect|verify)/gi,
|
|
20
|
+
// Python FastAPI
|
|
21
|
+
/Depends\s*\(\s*(?:get_current_user|verify_token|auth_required)/gi,
|
|
22
|
+
/dependencies\s*=\s*\[[^\]]*(?:auth|verify|current_user)/gi,
|
|
23
|
+
/@(?:requires_auth|login_required|authenticated)/gi,
|
|
24
|
+
];
|
|
25
|
+
export const NEXTJS_MIDDLEWARE_PATTERNS = [
|
|
26
|
+
/export\s+(?:default\s+)?function\s+middleware/gi,
|
|
27
|
+
/NextResponse\.(?:redirect|rewrite)\s*\(/gi,
|
|
28
|
+
/getServerSession\s*\(/gi,
|
|
29
|
+
/getSession\s*\(/gi,
|
|
30
|
+
/withAuth\s*\(/gi,
|
|
31
|
+
];
|
|
32
|
+
export const JWT_PATTERNS = [
|
|
33
|
+
// JavaScript/TypeScript
|
|
34
|
+
/jwt\.verify\s*\(/gi,
|
|
35
|
+
/jsonwebtoken/gi,
|
|
36
|
+
/verifyToken\s*\(/gi,
|
|
37
|
+
/decodeToken\s*\(/gi,
|
|
38
|
+
/validateToken\s*\(/gi,
|
|
39
|
+
// Python
|
|
40
|
+
/jwt\.decode\s*\(/gi,
|
|
41
|
+
/PyJWT/gi,
|
|
42
|
+
/python-jose/gi,
|
|
43
|
+
/verify_token\s*\(/gi,
|
|
44
|
+
/decode_token\s*\(/gi,
|
|
45
|
+
];
|
|
46
|
+
export const ROUTE_PATTERNS = [
|
|
47
|
+
// JavaScript/TypeScript
|
|
48
|
+
/app\.(get|post|put|patch|delete)\s*\(\s*['"`][^'"`]+['"`]/gi,
|
|
49
|
+
/router\.(get|post|put|patch|delete)\s*\(\s*['"`][^'"`]+['"`]/gi,
|
|
50
|
+
/export\s+async\s+function\s+(GET|POST|PUT|PATCH|DELETE)/gi,
|
|
51
|
+
// Python FastAPI
|
|
52
|
+
/@(?:app|router)\.(get|post|put|patch|delete)\s*\(\s*['"][^'"]+['"]/gi,
|
|
53
|
+
];
|
|
54
|
+
export const SENSITIVE_ROUTE_PATTERNS = [
|
|
55
|
+
/\/api\/(?:admin|user|account|profile|settings|billing|payment)/i,
|
|
56
|
+
/\/api\/v\d+\/(?:admin|user|account)/i,
|
|
57
|
+
/\/dashboard/i,
|
|
58
|
+
/\/admin/i,
|
|
59
|
+
];
|
|
60
|
+
export const EXCLUDED_FILE_PATTERNS = [/\.test\.[jt]sx?$/, /\.spec\.[jt]sx?$/, /node_modules\//, /\.d\.ts$/];
|
|
61
|
+
export function shouldExcludeFile(filePath) {
|
|
62
|
+
return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
|
|
63
|
+
}
|
|
64
|
+
function isInsideComment(content, index) {
|
|
65
|
+
const before = content.slice(0, index);
|
|
66
|
+
const lastNewline = before.lastIndexOf('\n');
|
|
67
|
+
const line = before.slice(lastNewline + 1);
|
|
68
|
+
if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
|
|
69
|
+
return true;
|
|
70
|
+
return before.lastIndexOf('/*') > before.lastIndexOf('*/');
|
|
71
|
+
}
|
|
72
|
+
function getPosition(content, index) {
|
|
73
|
+
const before = content.slice(0, index);
|
|
74
|
+
return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
|
|
75
|
+
}
|
|
76
|
+
export function detectAuthMiddleware(content, file) {
|
|
77
|
+
const results = [];
|
|
78
|
+
const lines = content.split('\n');
|
|
79
|
+
for (const pattern of AUTH_MIDDLEWARE_PATTERNS) {
|
|
80
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
81
|
+
let match;
|
|
82
|
+
while ((match = regex.exec(content)) !== null) {
|
|
83
|
+
if (isInsideComment(content, match.index))
|
|
84
|
+
continue;
|
|
85
|
+
const { line, column } = getPosition(content, match.index);
|
|
86
|
+
results.push({
|
|
87
|
+
type: 'express-middleware',
|
|
88
|
+
file, line, column,
|
|
89
|
+
matchedText: match[0],
|
|
90
|
+
context: lines[line - 1] || '',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
for (const pattern of NEXTJS_MIDDLEWARE_PATTERNS) {
|
|
95
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
96
|
+
let match;
|
|
97
|
+
while ((match = regex.exec(content)) !== null) {
|
|
98
|
+
if (isInsideComment(content, match.index))
|
|
99
|
+
continue;
|
|
100
|
+
const { line, column } = getPosition(content, match.index);
|
|
101
|
+
results.push({
|
|
102
|
+
type: 'nextjs-middleware',
|
|
103
|
+
file, line, column,
|
|
104
|
+
matchedText: match[0],
|
|
105
|
+
context: lines[line - 1] || '',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
for (const pattern of JWT_PATTERNS) {
|
|
110
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
111
|
+
let match;
|
|
112
|
+
while ((match = regex.exec(content)) !== null) {
|
|
113
|
+
if (isInsideComment(content, match.index))
|
|
114
|
+
continue;
|
|
115
|
+
const { line, column } = getPosition(content, match.index);
|
|
116
|
+
results.push({
|
|
117
|
+
type: 'jwt-verify',
|
|
118
|
+
file, line, column,
|
|
119
|
+
matchedText: match[0],
|
|
120
|
+
context: lines[line - 1] || '',
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return results;
|
|
125
|
+
}
|
|
126
|
+
export function detectUnprotectedRoutes(content, file, hasAuth) {
|
|
127
|
+
const violations = [];
|
|
128
|
+
const lines = content.split('\n');
|
|
129
|
+
if (hasAuth)
|
|
130
|
+
return violations;
|
|
131
|
+
for (const routePattern of ROUTE_PATTERNS) {
|
|
132
|
+
const regex = new RegExp(routePattern.source, routePattern.flags);
|
|
133
|
+
let match;
|
|
134
|
+
while ((match = regex.exec(content)) !== null) {
|
|
135
|
+
if (isInsideComment(content, match.index))
|
|
136
|
+
continue;
|
|
137
|
+
const isSensitive = SENSITIVE_ROUTE_PATTERNS.some(p => p.test(match[0]));
|
|
138
|
+
if (isSensitive) {
|
|
139
|
+
const { line, column } = getPosition(content, match.index);
|
|
140
|
+
violations.push({
|
|
141
|
+
type: 'unprotected-route',
|
|
142
|
+
file, line, column,
|
|
143
|
+
endLine: line,
|
|
144
|
+
endColumn: column + match[0].length,
|
|
145
|
+
value: match[0],
|
|
146
|
+
issue: 'Sensitive route without visible auth middleware',
|
|
147
|
+
suggestedFix: 'Add authentication middleware to protect this route',
|
|
148
|
+
lineContent: lines[line - 1] || '',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return violations;
|
|
154
|
+
}
|
|
155
|
+
export function analyzeAuthMiddleware(content, file) {
|
|
156
|
+
if (shouldExcludeFile(file)) {
|
|
157
|
+
return { patterns: [], violations: [], hasAuthMiddleware: false, protectedRoutes: 0, unprotectedRoutes: 0 };
|
|
158
|
+
}
|
|
159
|
+
const patterns = detectAuthMiddleware(content, file);
|
|
160
|
+
const hasAuth = patterns.length > 0;
|
|
161
|
+
const violations = detectUnprotectedRoutes(content, file, hasAuth);
|
|
162
|
+
return {
|
|
163
|
+
patterns,
|
|
164
|
+
violations,
|
|
165
|
+
hasAuthMiddleware: hasAuth,
|
|
166
|
+
protectedRoutes: hasAuth ? patterns.length : 0,
|
|
167
|
+
unprotectedRoutes: violations.length,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export class AuthMiddlewareDetector extends RegexDetector {
|
|
171
|
+
id = 'auth/middleware-usage';
|
|
172
|
+
name = 'Auth Middleware Detector';
|
|
173
|
+
description = 'Detects auth middleware patterns and unprotected routes';
|
|
174
|
+
category = 'auth';
|
|
175
|
+
subcategory = 'middleware';
|
|
176
|
+
supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
177
|
+
async detect(context) {
|
|
178
|
+
const { content, file } = context;
|
|
179
|
+
if (shouldExcludeFile(file))
|
|
180
|
+
return this.createEmptyResult();
|
|
181
|
+
const analysis = analyzeAuthMiddleware(content, file);
|
|
182
|
+
const confidence = analysis.hasAuthMiddleware ? 0.9 : 0.7;
|
|
183
|
+
return this.createResult([], [], confidence);
|
|
184
|
+
}
|
|
185
|
+
generateQuickFix() {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function createAuthMiddlewareDetector() {
|
|
190
|
+
return new AuthMiddlewareDetector();
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=middleware-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-usage.js","sourceRoot":"","sources":["../../src/auth/middleware-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Checks Detector - Permission pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects permission checking patterns including role checks, capability checks,
|
|
5
|
+
* and authorization guards.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 11.3 - Permission check patterns
|
|
8
|
+
*/
|
|
9
|
+
import type { Language } from 'driftdetect-core';
|
|
10
|
+
import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
|
|
11
|
+
export type PermissionPatternType = 'role-check' | 'capability-check' | 'permission-guard' | 'access-control';
|
|
12
|
+
export type PermissionViolationType = 'missing-permission-check' | 'inconsistent-permissions';
|
|
13
|
+
export interface PermissionPatternInfo {
|
|
14
|
+
type: PermissionPatternType;
|
|
15
|
+
file: string;
|
|
16
|
+
line: number;
|
|
17
|
+
column: number;
|
|
18
|
+
matchedText: string;
|
|
19
|
+
context?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface PermissionViolationInfo {
|
|
22
|
+
type: PermissionViolationType;
|
|
23
|
+
file: string;
|
|
24
|
+
line: number;
|
|
25
|
+
column: number;
|
|
26
|
+
endLine: number;
|
|
27
|
+
endColumn: number;
|
|
28
|
+
value: string;
|
|
29
|
+
issue: string;
|
|
30
|
+
suggestedFix?: string;
|
|
31
|
+
lineContent: string;
|
|
32
|
+
}
|
|
33
|
+
export interface PermissionAnalysis {
|
|
34
|
+
patterns: PermissionPatternInfo[];
|
|
35
|
+
violations: PermissionViolationInfo[];
|
|
36
|
+
hasPermissionChecks: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare const PERMISSION_CHECK_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
39
|
+
export declare const AUTHORIZATION_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
40
|
+
export declare const GUARD_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
41
|
+
export declare const POLICY_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
42
|
+
export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
|
|
43
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
44
|
+
export declare function detectPermissionChecks(content: string, file: string): PermissionPatternInfo[];
|
|
45
|
+
export declare function detectAuthorizationPatterns(content: string, file: string): PermissionPatternInfo[];
|
|
46
|
+
export declare function detectGuardPatterns(content: string, file: string): PermissionPatternInfo[];
|
|
47
|
+
export declare function detectPolicyPatterns(content: string, file: string): PermissionPatternInfo[];
|
|
48
|
+
export declare function analyzePermissions(content: string, file: string): PermissionAnalysis;
|
|
49
|
+
export declare class PermissionChecksDetector extends RegexDetector {
|
|
50
|
+
readonly id = "auth/permission-checks";
|
|
51
|
+
readonly name = "Permission Checks Detector";
|
|
52
|
+
readonly description = "Detects permission checking patterns";
|
|
53
|
+
readonly category = "auth";
|
|
54
|
+
readonly subcategory = "permissions";
|
|
55
|
+
readonly supportedLanguages: Language[];
|
|
56
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
57
|
+
generateQuickFix(): null;
|
|
58
|
+
}
|
|
59
|
+
export declare function createPermissionChecksDetector(): PermissionChecksDetector;
|
|
60
|
+
//# sourceMappingURL=permission-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-checks.d.ts","sourceRoot":"","sources":["../../src/auth/permission-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AAC9G,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;AAE9F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,yBAAyB,mCAI5B,CAAC;AAEX,eAAO,MAAM,sBAAsB,mCAIzB,CAAC;AAEX,eAAO,MAAM,cAAc,mCAIjB,CAAC;AAEX,eAAO,MAAM,eAAe,mCAIlB,CAAC;AAEX,eAAO,MAAM,sBAAsB,UAAyE,CAAC;AAE7G,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAeD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAmB7F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAmBlG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAmB1F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAmB3F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAapF;AAED,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,QAAQ,CAAC,EAAE,4BAA4B;IACvC,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,WAAW,0CAA0C;IAC9D,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAA0C;IAE3E,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAQjE,gBAAgB,IAAI,IAAI;CAGzB;AAED,wBAAgB,8BAA8B,IAAI,wBAAwB,CAEzE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Checks Detector - Permission pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects permission checking patterns including role checks, capability checks,
|
|
5
|
+
* and authorization guards.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 11.3 - Permission check patterns
|
|
8
|
+
*/
|
|
9
|
+
import { RegexDetector } from '../base/index.js';
|
|
10
|
+
export const PERMISSION_CHECK_PATTERNS = [
|
|
11
|
+
/(?:hasPermission|checkPermission|canAccess|isAllowed)\s*\(/gi,
|
|
12
|
+
/(?:hasRole|checkRole|isAdmin|isModerator)\s*\(/gi,
|
|
13
|
+
/user\.(?:role|permissions|capabilities)\s*(?:\.|\.includes|\.has)/gi,
|
|
14
|
+
];
|
|
15
|
+
export const AUTHORIZATION_PATTERNS = [
|
|
16
|
+
/(?:authorize|guard|protect)\s*\(\s*['"`]\w+['"`]/gi,
|
|
17
|
+
/\.can\s*\(\s*['"`]\w+['"`]/gi,
|
|
18
|
+
/ability\.(?:can|cannot)\s*\(/gi,
|
|
19
|
+
];
|
|
20
|
+
export const GUARD_PATTERNS = [
|
|
21
|
+
/permissions\.(?:check|has|includes)\s*\(/gi,
|
|
22
|
+
/@(?:Authorize|RequirePermission|Guard)\s*\(/gi,
|
|
23
|
+
/usePermission\s*\(/gi,
|
|
24
|
+
];
|
|
25
|
+
export const POLICY_PATTERNS = [
|
|
26
|
+
/policy\.(?:check|allows|denies)\s*\(/gi,
|
|
27
|
+
/defineAbility/gi,
|
|
28
|
+
/createPolicy/gi,
|
|
29
|
+
];
|
|
30
|
+
export const EXCLUDED_FILE_PATTERNS = [/\.test\.[jt]sx?$/, /\.spec\.[jt]sx?$/, /node_modules\//, /\.d\.ts$/];
|
|
31
|
+
export function shouldExcludeFile(filePath) {
|
|
32
|
+
return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
|
|
33
|
+
}
|
|
34
|
+
function isInsideComment(content, index) {
|
|
35
|
+
const before = content.slice(0, index);
|
|
36
|
+
const lastNewline = before.lastIndexOf('\n');
|
|
37
|
+
const line = before.slice(lastNewline + 1);
|
|
38
|
+
if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
|
|
39
|
+
return true;
|
|
40
|
+
return before.lastIndexOf('/*') > before.lastIndexOf('*/');
|
|
41
|
+
}
|
|
42
|
+
function getPosition(content, index) {
|
|
43
|
+
const before = content.slice(0, index);
|
|
44
|
+
return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
|
|
45
|
+
}
|
|
46
|
+
export function detectPermissionChecks(content, file) {
|
|
47
|
+
const results = [];
|
|
48
|
+
const lines = content.split('\n');
|
|
49
|
+
for (const pattern of PERMISSION_CHECK_PATTERNS) {
|
|
50
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
51
|
+
let match;
|
|
52
|
+
while ((match = regex.exec(content)) !== null) {
|
|
53
|
+
if (isInsideComment(content, match.index))
|
|
54
|
+
continue;
|
|
55
|
+
const { line, column } = getPosition(content, match.index);
|
|
56
|
+
results.push({
|
|
57
|
+
type: match[0].toLowerCase().includes('role') ? 'role-check' : 'permission-guard',
|
|
58
|
+
file, line, column,
|
|
59
|
+
matchedText: match[0],
|
|
60
|
+
context: lines[line - 1] || '',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
export function detectAuthorizationPatterns(content, file) {
|
|
67
|
+
const results = [];
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
for (const pattern of AUTHORIZATION_PATTERNS) {
|
|
70
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
71
|
+
let match;
|
|
72
|
+
while ((match = regex.exec(content)) !== null) {
|
|
73
|
+
if (isInsideComment(content, match.index))
|
|
74
|
+
continue;
|
|
75
|
+
const { line, column } = getPosition(content, match.index);
|
|
76
|
+
results.push({
|
|
77
|
+
type: 'access-control',
|
|
78
|
+
file, line, column,
|
|
79
|
+
matchedText: match[0],
|
|
80
|
+
context: lines[line - 1] || '',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
}
|
|
86
|
+
export function detectGuardPatterns(content, file) {
|
|
87
|
+
const results = [];
|
|
88
|
+
const lines = content.split('\n');
|
|
89
|
+
for (const pattern of GUARD_PATTERNS) {
|
|
90
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
91
|
+
let match;
|
|
92
|
+
while ((match = regex.exec(content)) !== null) {
|
|
93
|
+
if (isInsideComment(content, match.index))
|
|
94
|
+
continue;
|
|
95
|
+
const { line, column } = getPosition(content, match.index);
|
|
96
|
+
results.push({
|
|
97
|
+
type: 'permission-guard',
|
|
98
|
+
file, line, column,
|
|
99
|
+
matchedText: match[0],
|
|
100
|
+
context: lines[line - 1] || '',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return results;
|
|
105
|
+
}
|
|
106
|
+
export function detectPolicyPatterns(content, file) {
|
|
107
|
+
const results = [];
|
|
108
|
+
const lines = content.split('\n');
|
|
109
|
+
for (const pattern of POLICY_PATTERNS) {
|
|
110
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
111
|
+
let match;
|
|
112
|
+
while ((match = regex.exec(content)) !== null) {
|
|
113
|
+
if (isInsideComment(content, match.index))
|
|
114
|
+
continue;
|
|
115
|
+
const { line, column } = getPosition(content, match.index);
|
|
116
|
+
results.push({
|
|
117
|
+
type: 'access-control',
|
|
118
|
+
file, line, column,
|
|
119
|
+
matchedText: match[0],
|
|
120
|
+
context: lines[line - 1] || '',
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return results;
|
|
125
|
+
}
|
|
126
|
+
export function analyzePermissions(content, file) {
|
|
127
|
+
if (shouldExcludeFile(file)) {
|
|
128
|
+
return { patterns: [], violations: [], hasPermissionChecks: false };
|
|
129
|
+
}
|
|
130
|
+
const patterns = [
|
|
131
|
+
...detectPermissionChecks(content, file),
|
|
132
|
+
...detectAuthorizationPatterns(content, file),
|
|
133
|
+
...detectGuardPatterns(content, file),
|
|
134
|
+
...detectPolicyPatterns(content, file),
|
|
135
|
+
];
|
|
136
|
+
return { patterns, violations: [], hasPermissionChecks: patterns.length > 0 };
|
|
137
|
+
}
|
|
138
|
+
export class PermissionChecksDetector extends RegexDetector {
|
|
139
|
+
id = 'auth/permission-checks';
|
|
140
|
+
name = 'Permission Checks Detector';
|
|
141
|
+
description = 'Detects permission checking patterns';
|
|
142
|
+
category = 'auth';
|
|
143
|
+
subcategory = 'permissions';
|
|
144
|
+
supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
145
|
+
async detect(context) {
|
|
146
|
+
const { content, file } = context;
|
|
147
|
+
if (shouldExcludeFile(file))
|
|
148
|
+
return this.createEmptyResult();
|
|
149
|
+
const analysis = analyzePermissions(content, file);
|
|
150
|
+
return this.createResult([], [], analysis.hasPermissionChecks ? 0.85 : 1.0);
|
|
151
|
+
}
|
|
152
|
+
generateQuickFix() {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export function createPermissionChecksDetector() {
|
|
157
|
+
return new PermissionChecksDetector();
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=permission-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-checks.js","sourceRoot":"","sources":["../../src/auth/permission-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC Patterns Detector - Role-Based Access Control pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects RBAC patterns including role definitions, role assignments,
|
|
5
|
+
* and role-based authorization.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 11.4 - RBAC patterns
|
|
8
|
+
*/
|
|
9
|
+
import type { Language } from 'driftdetect-core';
|
|
10
|
+
import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
|
|
11
|
+
export type RbacPatternType = 'role-definition' | 'role-assignment' | 'role-check' | 'role-hierarchy';
|
|
12
|
+
export type RbacViolationType = 'missing-role-check' | 'inconsistent-roles';
|
|
13
|
+
export interface RbacPatternInfo {
|
|
14
|
+
type: RbacPatternType;
|
|
15
|
+
file: string;
|
|
16
|
+
line: number;
|
|
17
|
+
column: number;
|
|
18
|
+
matchedText: string;
|
|
19
|
+
roleName?: string;
|
|
20
|
+
context?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface RbacViolationInfo {
|
|
23
|
+
type: RbacViolationType;
|
|
24
|
+
file: string;
|
|
25
|
+
line: number;
|
|
26
|
+
column: number;
|
|
27
|
+
endLine: number;
|
|
28
|
+
endColumn: number;
|
|
29
|
+
value: string;
|
|
30
|
+
issue: string;
|
|
31
|
+
suggestedFix?: string;
|
|
32
|
+
lineContent: string;
|
|
33
|
+
}
|
|
34
|
+
export interface RbacAnalysis {
|
|
35
|
+
patterns: RbacPatternInfo[];
|
|
36
|
+
violations: RbacViolationInfo[];
|
|
37
|
+
roles: string[];
|
|
38
|
+
hasRoleHierarchy: boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare const ROLE_DEFINITION_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
41
|
+
export declare const ROLE_ASSIGNMENT_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
42
|
+
export declare const ROLE_CHECK_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
43
|
+
export declare const ROLE_HIERARCHY_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
44
|
+
export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
|
|
45
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
46
|
+
export declare function detectRoleDefinitions(content: string, file: string): RbacPatternInfo[];
|
|
47
|
+
export declare function detectRoleChecks(content: string, file: string): RbacPatternInfo[];
|
|
48
|
+
export declare function detectRoleAssignments(content: string, file: string): RbacPatternInfo[];
|
|
49
|
+
export declare function detectRoleHierarchy(content: string, file: string): RbacPatternInfo[];
|
|
50
|
+
export declare function analyzeRbac(content: string, file: string): RbacAnalysis;
|
|
51
|
+
export type RBACPatternType = RbacPatternType;
|
|
52
|
+
export type RBACPatternInfo = RbacPatternInfo;
|
|
53
|
+
export type RBACAnalysis = RbacAnalysis;
|
|
54
|
+
export declare const analyzeRBACPatterns: typeof analyzeRbac;
|
|
55
|
+
export declare class RbacPatternsDetector extends RegexDetector {
|
|
56
|
+
readonly id = "auth/rbac-patterns";
|
|
57
|
+
readonly name = "RBAC Patterns Detector";
|
|
58
|
+
readonly description = "Detects Role-Based Access Control patterns";
|
|
59
|
+
readonly category = "auth";
|
|
60
|
+
readonly subcategory = "rbac";
|
|
61
|
+
readonly supportedLanguages: Language[];
|
|
62
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
63
|
+
generateQuickFix(): null;
|
|
64
|
+
}
|
|
65
|
+
export declare const RBACPatternsDetector: typeof RbacPatternsDetector;
|
|
66
|
+
export declare function createRbacPatternsDetector(): RbacPatternsDetector;
|
|
67
|
+
export declare const createRBACPatternsDetector: typeof createRbacPatternsDetector;
|
|
68
|
+
//# sourceMappingURL=rbac-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac-patterns.d.ts","sourceRoot":"","sources":["../../src/auth/rbac-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,YAAY,GAAG,gBAAgB,CAAC;AACtG,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,wBAAwB,2EAW3B,CAAC;AAEX,eAAO,MAAM,wBAAwB,mGAc3B,CAAC;AAEX,eAAO,MAAM,mBAAmB,2GAetB,CAAC;AAEX,eAAO,MAAM,uBAAuB,2CAK1B,CAAC;AAEX,eAAO,MAAM,sBAAsB,UAAwH,CAAC;AAE5J,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AA+BD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAEtF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAEpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAiBvE;AAGD,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAC9C,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AACxC,eAAO,MAAM,mBAAmB,oBAAc,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,EAAE,wBAAwB;IACnC,QAAQ,CAAC,IAAI,4BAA4B;IACzC,QAAQ,CAAC,WAAW,gDAAgD;IACpE,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAA0C;IAE3E,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAQjE,gBAAgB,IAAI,IAAI;CAGzB;AAGD,eAAO,MAAM,oBAAoB,6BAAuB,CAAC;AAEzD,wBAAgB,0BAA0B,IAAI,oBAAoB,CAEjE;AAGD,eAAO,MAAM,0BAA0B,mCAA6B,CAAC"}
|