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,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry type definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines detector metadata types for the detector registry system.
|
|
5
|
+
* These types are used to describe and categorize detectors.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 6.1 - THE Detector_System SHALL define a BaseDetector interface that all detectors implement
|
|
8
|
+
*/
|
|
9
|
+
import type { PatternCategory, Language } from 'driftdetect-core';
|
|
10
|
+
/**
|
|
11
|
+
* Detection methods supported by the detector system
|
|
12
|
+
*
|
|
13
|
+
* - ast: AST-based detection using parsed syntax trees
|
|
14
|
+
* - regex: Regular expression-based text pattern matching
|
|
15
|
+
* - semantic: Semantic analysis using type information and symbol resolution
|
|
16
|
+
* - structural: File/directory structure analysis
|
|
17
|
+
* - custom: Custom detection logic
|
|
18
|
+
*
|
|
19
|
+
* @requirements 6.4 - THE Detector_System SHALL support detection methods: ast, regex, semantic, structural, and custom
|
|
20
|
+
*/
|
|
21
|
+
export type DetectionMethod = 'ast' | 'regex' | 'semantic' | 'structural' | 'custom';
|
|
22
|
+
/**
|
|
23
|
+
* Array of all valid detection methods for validation
|
|
24
|
+
*/
|
|
25
|
+
export declare const DETECTION_METHODS: DetectionMethod[];
|
|
26
|
+
/**
|
|
27
|
+
* Detector metadata interface
|
|
28
|
+
*
|
|
29
|
+
* Contains all metadata about a detector including its identity,
|
|
30
|
+
* categorization, and capabilities. This interface is used by the
|
|
31
|
+
* registry to manage and query detectors.
|
|
32
|
+
*
|
|
33
|
+
* @requirements 6.1 - THE Detector_System SHALL define a BaseDetector interface that all detectors implement
|
|
34
|
+
* @requirements 6.3 - THE Detector SHALL declare its category, supported languages, and detection method
|
|
35
|
+
*/
|
|
36
|
+
export interface DetectorInfo {
|
|
37
|
+
/** Unique detector identifier (e.g., 'structural/file-naming') */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Detector category matching PatternCategory from driftdetect-core */
|
|
40
|
+
category: PatternCategory;
|
|
41
|
+
/** Detector subcategory for more specific classification (e.g., 'naming-conventions') */
|
|
42
|
+
subcategory: string;
|
|
43
|
+
/** Human-readable name for display (e.g., 'File Naming Convention Detector') */
|
|
44
|
+
name: string;
|
|
45
|
+
/** Detailed description of what the detector does */
|
|
46
|
+
description: string;
|
|
47
|
+
/** Languages this detector supports */
|
|
48
|
+
supportedLanguages: Language[];
|
|
49
|
+
/** How this detector performs detection */
|
|
50
|
+
detectionMethod: DetectionMethod;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Detector registration options
|
|
54
|
+
*
|
|
55
|
+
* Options that can be provided when registering a detector
|
|
56
|
+
*/
|
|
57
|
+
export interface DetectorRegistrationOptions {
|
|
58
|
+
/** Whether to override an existing detector with the same ID */
|
|
59
|
+
override?: boolean;
|
|
60
|
+
/** Priority for this detector (higher = runs first when multiple detectors match) */
|
|
61
|
+
priority?: number;
|
|
62
|
+
/** Whether this detector is enabled by default */
|
|
63
|
+
enabled?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Registered detector entry in the registry
|
|
67
|
+
*
|
|
68
|
+
* Contains the detector info plus registration metadata
|
|
69
|
+
*/
|
|
70
|
+
export interface RegisteredDetector {
|
|
71
|
+
/** Detector metadata */
|
|
72
|
+
info: DetectorInfo;
|
|
73
|
+
/** Registration priority (default: 0) */
|
|
74
|
+
priority: number;
|
|
75
|
+
/** Whether the detector is enabled */
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
/** Timestamp when the detector was registered */
|
|
78
|
+
registeredAt: Date;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Query options for finding detectors in the registry
|
|
82
|
+
*/
|
|
83
|
+
export interface DetectorQuery {
|
|
84
|
+
/** Filter by category */
|
|
85
|
+
category?: PatternCategory;
|
|
86
|
+
/** Filter by subcategory */
|
|
87
|
+
subcategory?: string;
|
|
88
|
+
/** Filter by supported language */
|
|
89
|
+
language?: Language;
|
|
90
|
+
/** Filter by detection method */
|
|
91
|
+
detectionMethod?: DetectionMethod;
|
|
92
|
+
/** Filter by enabled status */
|
|
93
|
+
enabled?: boolean;
|
|
94
|
+
/** Only return detectors with IDs matching this pattern */
|
|
95
|
+
idPattern?: string | RegExp;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Result of a detector query
|
|
99
|
+
*/
|
|
100
|
+
export interface DetectorQueryResult {
|
|
101
|
+
/** Matching detectors */
|
|
102
|
+
detectors: RegisteredDetector[];
|
|
103
|
+
/** Total count of matching detectors */
|
|
104
|
+
count: number;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Re-export PatternCategory and Language from driftdetect-core for convenience
|
|
108
|
+
* so consumers don't need to import from multiple packages
|
|
109
|
+
*/
|
|
110
|
+
export type { PatternCategory, Language } from 'driftdetect-core';
|
|
111
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMlE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAM9C,CAAC;AAMF;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IAEX,uEAAuE;IACvE,QAAQ,EAAE,eAAe,CAAC;IAE1B,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IAEpB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IAEb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAE/B,2CAA2C;IAC3C,eAAe,EAAE,eAAe,CAAC;CAClC;AAMD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,IAAI,EAAE,YAAY,CAAC;IAEnB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IAEjB,iDAAiD;IACjD,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,iCAAiC;IACjC,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAEhC,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;GAGG;AACH,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry type definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines detector metadata types for the detector registry system.
|
|
5
|
+
* These types are used to describe and categorize detectors.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 6.1 - THE Detector_System SHALL define a BaseDetector interface that all detectors implement
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Array of all valid detection methods for validation
|
|
11
|
+
*/
|
|
12
|
+
export const DETECTION_METHODS = [
|
|
13
|
+
'ast',
|
|
14
|
+
'regex',
|
|
15
|
+
'semantic',
|
|
16
|
+
'structural',
|
|
17
|
+
'custom',
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,KAAK;IACL,OAAO;IACP,UAAU;IACV,YAAY;IACZ,QAAQ;CACT,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSP Headers Detector - Content Security Policy pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects CSP patterns including:
|
|
5
|
+
* - CSP header configuration
|
|
6
|
+
* - CSP meta tags
|
|
7
|
+
* - Helmet CSP middleware
|
|
8
|
+
* - Nonce and hash usage
|
|
9
|
+
* - Directive patterns
|
|
10
|
+
*
|
|
11
|
+
* @requirements 16.5 - CSP header patterns
|
|
12
|
+
*/
|
|
13
|
+
import type { Violation, QuickFix, PatternCategory, Language } from 'driftdetect-core';
|
|
14
|
+
import { RegexDetector } from '../base/regex-detector.js';
|
|
15
|
+
import type { DetectionContext, DetectionResult } from '../base/base-detector.js';
|
|
16
|
+
export type CSPHeaderPatternType = 'csp-header' | 'csp-meta' | 'helmet-csp' | 'csp-nonce' | 'csp-hash' | 'csp-directive' | 'report-uri';
|
|
17
|
+
export type CSPViolationType = 'unsafe-inline' | 'unsafe-eval' | 'wildcard-source' | 'missing-csp';
|
|
18
|
+
export interface CSPHeaderPatternInfo {
|
|
19
|
+
type: CSPHeaderPatternType;
|
|
20
|
+
file: string;
|
|
21
|
+
line: number;
|
|
22
|
+
column: number;
|
|
23
|
+
matchedText: string;
|
|
24
|
+
directive?: string | undefined;
|
|
25
|
+
context?: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface CSPViolationInfo {
|
|
28
|
+
type: CSPViolationType;
|
|
29
|
+
file: string;
|
|
30
|
+
line: number;
|
|
31
|
+
column: number;
|
|
32
|
+
matchedText: string;
|
|
33
|
+
issue: string;
|
|
34
|
+
suggestedFix?: string | undefined;
|
|
35
|
+
severity: 'high' | 'medium' | 'low';
|
|
36
|
+
}
|
|
37
|
+
export interface CSPHeaderAnalysis {
|
|
38
|
+
patterns: CSPHeaderPatternInfo[];
|
|
39
|
+
violations: CSPViolationInfo[];
|
|
40
|
+
hasCSP: boolean;
|
|
41
|
+
usesNonce: boolean;
|
|
42
|
+
usesHash: boolean;
|
|
43
|
+
confidence: number;
|
|
44
|
+
}
|
|
45
|
+
export declare const CSP_HEADER_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
46
|
+
export declare const CSP_META_PATTERNS: readonly [RegExp, RegExp];
|
|
47
|
+
export declare const HELMET_CSP_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
48
|
+
export declare const CSP_NONCE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
49
|
+
export declare const CSP_HASH_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
50
|
+
export declare const CSP_DIRECTIVE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
|
|
51
|
+
export declare const REPORT_URI_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
|
|
52
|
+
export declare const UNSAFE_INLINE_PATTERNS: readonly [RegExp, RegExp];
|
|
53
|
+
export declare const UNSAFE_EVAL_PATTERNS: readonly [RegExp, RegExp];
|
|
54
|
+
export declare const WILDCARD_SOURCE_PATTERNS: readonly [RegExp, RegExp, RegExp];
|
|
55
|
+
export declare function shouldExcludeFile(filePath: string): boolean;
|
|
56
|
+
export declare function detectCSPHeaders(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
57
|
+
export declare function detectCSPMeta(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
58
|
+
export declare function detectHelmetCSP(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
59
|
+
export declare function detectCSPNonce(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
60
|
+
export declare function detectCSPHash(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
61
|
+
export declare function detectCSPDirectives(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
62
|
+
export declare function detectReportURI(content: string, filePath: string): CSPHeaderPatternInfo[];
|
|
63
|
+
export declare function detectUnsafeInlineViolations(content: string, filePath: string): CSPViolationInfo[];
|
|
64
|
+
export declare function detectUnsafeEvalViolations(content: string, filePath: string): CSPViolationInfo[];
|
|
65
|
+
export declare function detectWildcardSourceViolations(content: string, filePath: string): CSPViolationInfo[];
|
|
66
|
+
export declare function analyzeCSPHeaders(content: string, filePath: string): CSPHeaderAnalysis;
|
|
67
|
+
export declare class CSPHeadersDetector extends RegexDetector {
|
|
68
|
+
readonly id = "security/csp-headers";
|
|
69
|
+
readonly name = "CSP Headers Detector";
|
|
70
|
+
readonly description = "Detects Content Security Policy patterns and identifies potential weaknesses";
|
|
71
|
+
readonly category: PatternCategory;
|
|
72
|
+
readonly subcategory = "csp-headers";
|
|
73
|
+
readonly supportedLanguages: Language[];
|
|
74
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
75
|
+
generateQuickFix(_violation: Violation): QuickFix | null;
|
|
76
|
+
}
|
|
77
|
+
export declare function createCSPHeadersDetector(): CSPHeadersDetector;
|
|
78
|
+
//# sourceMappingURL=csp-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp-headers.d.ts","sourceRoot":"","sources":["../../src/security/csp-headers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSP Headers Detector - Content Security Policy pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Detects CSP patterns including:
|
|
5
|
+
* - CSP header configuration
|
|
6
|
+
* - CSP meta tags
|
|
7
|
+
* - Helmet CSP middleware
|
|
8
|
+
* - Nonce and hash usage
|
|
9
|
+
* - Directive patterns
|
|
10
|
+
*
|
|
11
|
+
* @requirements 16.5 - CSP header patterns
|
|
12
|
+
*/
|
|
13
|
+
import { RegexDetector } from '../base/regex-detector.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Constants
|
|
16
|
+
// ============================================================================
|
|
17
|
+
export const CSP_HEADER_PATTERNS = [
|
|
18
|
+
/Content-Security-Policy/gi,
|
|
19
|
+
/contentSecurityPolicy/gi,
|
|
20
|
+
/['"`]Content-Security-Policy['"`]\s*[=:]/gi,
|
|
21
|
+
/res\.setHeader\s*\(\s*['"`]Content-Security-Policy['"`]/gi,
|
|
22
|
+
/response\.headers\s*\[\s*['"`]Content-Security-Policy['"`]\s*\]/gi,
|
|
23
|
+
];
|
|
24
|
+
export const CSP_META_PATTERNS = [
|
|
25
|
+
/<meta[^>]*http-equiv\s*=\s*['"`]Content-Security-Policy['"`]/gi,
|
|
26
|
+
/httpEquiv\s*[=:]\s*['"`]Content-Security-Policy['"`]/gi,
|
|
27
|
+
];
|
|
28
|
+
export const HELMET_CSP_PATTERNS = [
|
|
29
|
+
/helmet\.contentSecurityPolicy\s*\(/gi,
|
|
30
|
+
/helmet\s*\(\s*\{[^}]*contentSecurityPolicy/gi,
|
|
31
|
+
/contentSecurityPolicy\s*:\s*\{/gi,
|
|
32
|
+
/import.*helmet/gi,
|
|
33
|
+
/require\s*\(\s*['"`]helmet['"`]\s*\)/gi,
|
|
34
|
+
];
|
|
35
|
+
export const CSP_NONCE_PATTERNS = [
|
|
36
|
+
/nonce-[a-zA-Z0-9+/=]+/gi,
|
|
37
|
+
/'nonce-/gi,
|
|
38
|
+
/nonce\s*[=:]\s*['"`][^'"`]+['"`]/gi,
|
|
39
|
+
/generateNonce\s*\(/gi,
|
|
40
|
+
/cspNonce/gi,
|
|
41
|
+
];
|
|
42
|
+
export const CSP_HASH_PATTERNS = [
|
|
43
|
+
/sha256-[a-zA-Z0-9+/=]+/gi,
|
|
44
|
+
/sha384-[a-zA-Z0-9+/=]+/gi,
|
|
45
|
+
/sha512-[a-zA-Z0-9+/=]+/gi,
|
|
46
|
+
/'sha256-/gi,
|
|
47
|
+
/'sha384-/gi,
|
|
48
|
+
/'sha512-/gi,
|
|
49
|
+
];
|
|
50
|
+
export const CSP_DIRECTIVE_PATTERNS = [
|
|
51
|
+
/default-src\s+/gi,
|
|
52
|
+
/script-src\s+/gi,
|
|
53
|
+
/style-src\s+/gi,
|
|
54
|
+
/img-src\s+/gi,
|
|
55
|
+
/font-src\s+/gi,
|
|
56
|
+
/connect-src\s+/gi,
|
|
57
|
+
/frame-src\s+/gi,
|
|
58
|
+
/object-src\s+/gi,
|
|
59
|
+
/media-src\s+/gi,
|
|
60
|
+
/child-src\s+/gi,
|
|
61
|
+
/worker-src\s+/gi,
|
|
62
|
+
/frame-ancestors\s+/gi,
|
|
63
|
+
/form-action\s+/gi,
|
|
64
|
+
/base-uri\s+/gi,
|
|
65
|
+
/upgrade-insecure-requests/gi,
|
|
66
|
+
/block-all-mixed-content/gi,
|
|
67
|
+
];
|
|
68
|
+
export const REPORT_URI_PATTERNS = [
|
|
69
|
+
/report-uri\s+/gi,
|
|
70
|
+
/report-to\s+/gi,
|
|
71
|
+
/reportUri\s*[=:]/gi,
|
|
72
|
+
/reportTo\s*[=:]/gi,
|
|
73
|
+
];
|
|
74
|
+
export const UNSAFE_INLINE_PATTERNS = [
|
|
75
|
+
/'unsafe-inline'/gi,
|
|
76
|
+
/unsafe-inline/gi,
|
|
77
|
+
];
|
|
78
|
+
export const UNSAFE_EVAL_PATTERNS = [
|
|
79
|
+
/'unsafe-eval'/gi,
|
|
80
|
+
/unsafe-eval/gi,
|
|
81
|
+
];
|
|
82
|
+
export const WILDCARD_SOURCE_PATTERNS = [
|
|
83
|
+
/\*\s*;/gi,
|
|
84
|
+
/['"`]\*['"`]/gi,
|
|
85
|
+
/src\s*[=:]\s*\*/gi,
|
|
86
|
+
];
|
|
87
|
+
// ============================================================================
|
|
88
|
+
// Analysis Functions
|
|
89
|
+
// ============================================================================
|
|
90
|
+
export function shouldExcludeFile(filePath) {
|
|
91
|
+
const excludePatterns = [
|
|
92
|
+
/\.test\.[jt]sx?$/,
|
|
93
|
+
/\.spec\.[jt]sx?$/,
|
|
94
|
+
/__tests__\//,
|
|
95
|
+
/\.d\.ts$/,
|
|
96
|
+
/node_modules\//,
|
|
97
|
+
/\.min\.[jt]s$/,
|
|
98
|
+
];
|
|
99
|
+
return excludePatterns.some((p) => p.test(filePath));
|
|
100
|
+
}
|
|
101
|
+
export function detectCSPHeaders(content, filePath) {
|
|
102
|
+
const results = [];
|
|
103
|
+
const lines = content.split('\n');
|
|
104
|
+
for (let i = 0; i < lines.length; i++) {
|
|
105
|
+
const line = lines[i];
|
|
106
|
+
for (const pattern of CSP_HEADER_PATTERNS) {
|
|
107
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
108
|
+
let match;
|
|
109
|
+
while ((match = regex.exec(line)) !== null) {
|
|
110
|
+
results.push({
|
|
111
|
+
type: 'csp-header',
|
|
112
|
+
file: filePath,
|
|
113
|
+
line: i + 1,
|
|
114
|
+
column: match.index + 1,
|
|
115
|
+
matchedText: match[0],
|
|
116
|
+
context: line.trim(),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return results;
|
|
122
|
+
}
|
|
123
|
+
export function detectCSPMeta(content, filePath) {
|
|
124
|
+
const results = [];
|
|
125
|
+
const lines = content.split('\n');
|
|
126
|
+
for (let i = 0; i < lines.length; i++) {
|
|
127
|
+
const line = lines[i];
|
|
128
|
+
for (const pattern of CSP_META_PATTERNS) {
|
|
129
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
130
|
+
let match;
|
|
131
|
+
while ((match = regex.exec(line)) !== null) {
|
|
132
|
+
results.push({
|
|
133
|
+
type: 'csp-meta',
|
|
134
|
+
file: filePath,
|
|
135
|
+
line: i + 1,
|
|
136
|
+
column: match.index + 1,
|
|
137
|
+
matchedText: match[0],
|
|
138
|
+
context: line.trim(),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
export function detectHelmetCSP(content, filePath) {
|
|
146
|
+
const results = [];
|
|
147
|
+
const lines = content.split('\n');
|
|
148
|
+
for (let i = 0; i < lines.length; i++) {
|
|
149
|
+
const line = lines[i];
|
|
150
|
+
for (const pattern of HELMET_CSP_PATTERNS) {
|
|
151
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
152
|
+
let match;
|
|
153
|
+
while ((match = regex.exec(line)) !== null) {
|
|
154
|
+
results.push({
|
|
155
|
+
type: 'helmet-csp',
|
|
156
|
+
file: filePath,
|
|
157
|
+
line: i + 1,
|
|
158
|
+
column: match.index + 1,
|
|
159
|
+
matchedText: match[0],
|
|
160
|
+
context: line.trim(),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return results;
|
|
166
|
+
}
|
|
167
|
+
export function detectCSPNonce(content, filePath) {
|
|
168
|
+
const results = [];
|
|
169
|
+
const lines = content.split('\n');
|
|
170
|
+
for (let i = 0; i < lines.length; i++) {
|
|
171
|
+
const line = lines[i];
|
|
172
|
+
for (const pattern of CSP_NONCE_PATTERNS) {
|
|
173
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
174
|
+
let match;
|
|
175
|
+
while ((match = regex.exec(line)) !== null) {
|
|
176
|
+
results.push({
|
|
177
|
+
type: 'csp-nonce',
|
|
178
|
+
file: filePath,
|
|
179
|
+
line: i + 1,
|
|
180
|
+
column: match.index + 1,
|
|
181
|
+
matchedText: match[0],
|
|
182
|
+
context: line.trim(),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
188
|
+
}
|
|
189
|
+
export function detectCSPHash(content, filePath) {
|
|
190
|
+
const results = [];
|
|
191
|
+
const lines = content.split('\n');
|
|
192
|
+
for (let i = 0; i < lines.length; i++) {
|
|
193
|
+
const line = lines[i];
|
|
194
|
+
for (const pattern of CSP_HASH_PATTERNS) {
|
|
195
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
196
|
+
let match;
|
|
197
|
+
while ((match = regex.exec(line)) !== null) {
|
|
198
|
+
results.push({
|
|
199
|
+
type: 'csp-hash',
|
|
200
|
+
file: filePath,
|
|
201
|
+
line: i + 1,
|
|
202
|
+
column: match.index + 1,
|
|
203
|
+
matchedText: match[0],
|
|
204
|
+
context: line.trim(),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return results;
|
|
210
|
+
}
|
|
211
|
+
export function detectCSPDirectives(content, filePath) {
|
|
212
|
+
const results = [];
|
|
213
|
+
const lines = content.split('\n');
|
|
214
|
+
for (let i = 0; i < lines.length; i++) {
|
|
215
|
+
const line = lines[i];
|
|
216
|
+
for (const pattern of CSP_DIRECTIVE_PATTERNS) {
|
|
217
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
218
|
+
let match;
|
|
219
|
+
while ((match = regex.exec(line)) !== null) {
|
|
220
|
+
results.push({
|
|
221
|
+
type: 'csp-directive',
|
|
222
|
+
file: filePath,
|
|
223
|
+
line: i + 1,
|
|
224
|
+
column: match.index + 1,
|
|
225
|
+
matchedText: match[0],
|
|
226
|
+
directive: match[0].trim(),
|
|
227
|
+
context: line.trim(),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return results;
|
|
233
|
+
}
|
|
234
|
+
export function detectReportURI(content, filePath) {
|
|
235
|
+
const results = [];
|
|
236
|
+
const lines = content.split('\n');
|
|
237
|
+
for (let i = 0; i < lines.length; i++) {
|
|
238
|
+
const line = lines[i];
|
|
239
|
+
for (const pattern of REPORT_URI_PATTERNS) {
|
|
240
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
241
|
+
let match;
|
|
242
|
+
while ((match = regex.exec(line)) !== null) {
|
|
243
|
+
results.push({
|
|
244
|
+
type: 'report-uri',
|
|
245
|
+
file: filePath,
|
|
246
|
+
line: i + 1,
|
|
247
|
+
column: match.index + 1,
|
|
248
|
+
matchedText: match[0],
|
|
249
|
+
context: line.trim(),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return results;
|
|
255
|
+
}
|
|
256
|
+
export function detectUnsafeInlineViolations(content, filePath) {
|
|
257
|
+
const results = [];
|
|
258
|
+
const lines = content.split('\n');
|
|
259
|
+
for (let i = 0; i < lines.length; i++) {
|
|
260
|
+
const line = lines[i];
|
|
261
|
+
for (const pattern of UNSAFE_INLINE_PATTERNS) {
|
|
262
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
263
|
+
let match;
|
|
264
|
+
while ((match = regex.exec(line)) !== null) {
|
|
265
|
+
results.push({
|
|
266
|
+
type: 'unsafe-inline',
|
|
267
|
+
file: filePath,
|
|
268
|
+
line: i + 1,
|
|
269
|
+
column: match.index + 1,
|
|
270
|
+
matchedText: match[0],
|
|
271
|
+
issue: 'unsafe-inline in CSP weakens XSS protection',
|
|
272
|
+
suggestedFix: 'Use nonces or hashes instead of unsafe-inline',
|
|
273
|
+
severity: 'medium',
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return results;
|
|
279
|
+
}
|
|
280
|
+
export function detectUnsafeEvalViolations(content, filePath) {
|
|
281
|
+
const results = [];
|
|
282
|
+
const lines = content.split('\n');
|
|
283
|
+
for (let i = 0; i < lines.length; i++) {
|
|
284
|
+
const line = lines[i];
|
|
285
|
+
for (const pattern of UNSAFE_EVAL_PATTERNS) {
|
|
286
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
287
|
+
let match;
|
|
288
|
+
while ((match = regex.exec(line)) !== null) {
|
|
289
|
+
results.push({
|
|
290
|
+
type: 'unsafe-eval',
|
|
291
|
+
file: filePath,
|
|
292
|
+
line: i + 1,
|
|
293
|
+
column: match.index + 1,
|
|
294
|
+
matchedText: match[0],
|
|
295
|
+
issue: 'unsafe-eval in CSP allows eval() and similar functions',
|
|
296
|
+
suggestedFix: 'Remove unsafe-eval and refactor code to avoid eval',
|
|
297
|
+
severity: 'high',
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return results;
|
|
303
|
+
}
|
|
304
|
+
export function detectWildcardSourceViolations(content, filePath) {
|
|
305
|
+
const results = [];
|
|
306
|
+
const lines = content.split('\n');
|
|
307
|
+
for (let i = 0; i < lines.length; i++) {
|
|
308
|
+
const line = lines[i];
|
|
309
|
+
for (const pattern of WILDCARD_SOURCE_PATTERNS) {
|
|
310
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
311
|
+
let match;
|
|
312
|
+
while ((match = regex.exec(line)) !== null) {
|
|
313
|
+
results.push({
|
|
314
|
+
type: 'wildcard-source',
|
|
315
|
+
file: filePath,
|
|
316
|
+
line: i + 1,
|
|
317
|
+
column: match.index + 1,
|
|
318
|
+
matchedText: match[0],
|
|
319
|
+
issue: 'Wildcard source in CSP allows loading from any origin',
|
|
320
|
+
suggestedFix: 'Specify explicit allowed origins instead of wildcard',
|
|
321
|
+
severity: 'medium',
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return results;
|
|
327
|
+
}
|
|
328
|
+
export function analyzeCSPHeaders(content, filePath) {
|
|
329
|
+
if (shouldExcludeFile(filePath)) {
|
|
330
|
+
return {
|
|
331
|
+
patterns: [],
|
|
332
|
+
violations: [],
|
|
333
|
+
hasCSP: false,
|
|
334
|
+
usesNonce: false,
|
|
335
|
+
usesHash: false,
|
|
336
|
+
confidence: 1.0,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
const patterns = [
|
|
340
|
+
...detectCSPHeaders(content, filePath),
|
|
341
|
+
...detectCSPMeta(content, filePath),
|
|
342
|
+
...detectHelmetCSP(content, filePath),
|
|
343
|
+
...detectCSPNonce(content, filePath),
|
|
344
|
+
...detectCSPHash(content, filePath),
|
|
345
|
+
...detectCSPDirectives(content, filePath),
|
|
346
|
+
...detectReportURI(content, filePath),
|
|
347
|
+
];
|
|
348
|
+
const violations = [
|
|
349
|
+
...detectUnsafeInlineViolations(content, filePath),
|
|
350
|
+
...detectUnsafeEvalViolations(content, filePath),
|
|
351
|
+
...detectWildcardSourceViolations(content, filePath),
|
|
352
|
+
];
|
|
353
|
+
const hasCSP = patterns.some((p) => p.type === 'csp-header' || p.type === 'csp-meta' || p.type === 'helmet-csp');
|
|
354
|
+
const usesNonce = patterns.some((p) => p.type === 'csp-nonce');
|
|
355
|
+
const usesHash = patterns.some((p) => p.type === 'csp-hash');
|
|
356
|
+
const confidence = hasCSP ? (usesNonce || usesHash ? 0.95 : 0.85) : 0.7;
|
|
357
|
+
return {
|
|
358
|
+
patterns,
|
|
359
|
+
violations,
|
|
360
|
+
hasCSP,
|
|
361
|
+
usesNonce,
|
|
362
|
+
usesHash,
|
|
363
|
+
confidence,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
// ============================================================================
|
|
367
|
+
// Detector Class
|
|
368
|
+
// ============================================================================
|
|
369
|
+
export class CSPHeadersDetector extends RegexDetector {
|
|
370
|
+
id = 'security/csp-headers';
|
|
371
|
+
name = 'CSP Headers Detector';
|
|
372
|
+
description = 'Detects Content Security Policy patterns and identifies potential weaknesses';
|
|
373
|
+
category = 'security';
|
|
374
|
+
subcategory = 'csp-headers';
|
|
375
|
+
supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
376
|
+
async detect(context) {
|
|
377
|
+
if (!this.supportsLanguage(context.language)) {
|
|
378
|
+
return this.createEmptyResult();
|
|
379
|
+
}
|
|
380
|
+
const analysis = analyzeCSPHeaders(context.content, context.file);
|
|
381
|
+
if (analysis.patterns.length === 0 && analysis.violations.length === 0) {
|
|
382
|
+
return this.createEmptyResult();
|
|
383
|
+
}
|
|
384
|
+
return this.createResult([], [], analysis.confidence, {
|
|
385
|
+
custom: {
|
|
386
|
+
patterns: analysis.patterns,
|
|
387
|
+
violations: analysis.violations,
|
|
388
|
+
hasCSP: analysis.hasCSP,
|
|
389
|
+
usesNonce: analysis.usesNonce,
|
|
390
|
+
usesHash: analysis.usesHash,
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
generateQuickFix(_violation) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
export function createCSPHeadersDetector() {
|
|
399
|
+
return new CSPHeadersDetector();
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=csp-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp-headers.js","sourceRoot":"","sources":["../../src/security/csp-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAoD1D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,2BAA2B;IAC3B,yBAAyB;IACzB,4CAA4C;IAC5C,2DAA2D;IAC3D,mEAAmE;CAC3D,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gEAAgE;IAChE,wDAAwD;CAChD,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,sCAAsC;IACtC,8CAA8C;IAC9C,kCAAkC;IAClC,kBAAkB;IAClB,wCAAwC;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,yBAAyB;IACzB,WAAW;IACX,oCAAoC;IACpC,sBAAsB;IACtB,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,YAAY;IACZ,YAAY;IACZ,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,kBAAkB;IAClB,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,eAAe;IACf,6BAA6B;IAC7B,2BAA2B;CACnB,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB;IACjB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,mBAAmB;IACnB,iBAAiB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB;IACjB,eAAe;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU;IACV,gBAAgB;IAChB,mBAAmB;CACX,CAAC;AAEX,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,eAAe,GAAG;QACtB,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,UAAU;QACV,gBAAgB;QAChB,eAAe;KAChB,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,6CAA6C;oBACpD,YAAY,EAAE,+CAA+C;oBAC7D,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,wDAAwD;oBAC/D,YAAY,EAAE,oDAAoD;oBAClE,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,wBAAwB,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,uDAAuD;oBAC9D,YAAY,EAAE,sDAAsD;oBACpE,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,QAAgB;IAEhB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA2B;QACvC,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC;QACtC,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnC,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;QACpC,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnC,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;KACtC,CAAC;IAEF,MAAM,UAAU,GAAuB;QACrC,GAAG,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC;QAClD,GAAG,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC;QAChD,GAAG,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CAAC;KACrD,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CACnF,CAAC;IACF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAExE,OAAO;QACL,QAAQ;QACR,UAAU;QACV,MAAM;QACN,SAAS;QACT,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAC1C,EAAE,GAAG,sBAAsB,CAAC;IAC5B,IAAI,GAAG,sBAAsB,CAAC;IAC9B,WAAW,GAClB,8EAA8E,CAAC;IACxE,QAAQ,GAAoB,UAAU,CAAC;IACvC,WAAW,GAAG,aAAa,CAAC;IAC5B,kBAAkB,GAAe,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEjF,KAAK,CAAC,MAAM,CAAC,OAAyB;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAElE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE;YACpD,MAAM,EAAE;gBACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,UAAqB;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|