driftdetect-detectors 0.2.1 → 0.3.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/api/laravel/api-semantic.d.ts +26 -0
- package/dist/api/laravel/api-semantic.d.ts.map +1 -0
- package/dist/api/laravel/api-semantic.js +115 -0
- package/dist/api/laravel/api-semantic.js.map +1 -0
- package/dist/async/laravel/async-semantic.d.ts +26 -0
- package/dist/async/laravel/async-semantic.d.ts.map +1 -0
- package/dist/async/laravel/async-semantic.js +118 -0
- package/dist/async/laravel/async-semantic.js.map +1 -0
- package/dist/auth/aspnet/authorize-attribute-detector.d.ts +82 -0
- package/dist/auth/aspnet/authorize-attribute-detector.d.ts.map +1 -0
- package/dist/auth/aspnet/authorize-attribute-detector.js +261 -0
- package/dist/auth/aspnet/authorize-attribute-detector.js.map +1 -0
- package/dist/auth/aspnet/authorize-attribute-semantic.d.ts +41 -0
- package/dist/auth/aspnet/authorize-attribute-semantic.d.ts.map +1 -0
- package/dist/auth/aspnet/authorize-attribute-semantic.js +159 -0
- package/dist/auth/aspnet/authorize-attribute-semantic.js.map +1 -0
- package/dist/auth/aspnet/identity-patterns-detector.d.ts +57 -0
- package/dist/auth/aspnet/identity-patterns-detector.d.ts.map +1 -0
- package/dist/auth/aspnet/identity-patterns-detector.js +205 -0
- package/dist/auth/aspnet/identity-patterns-detector.js.map +1 -0
- package/dist/auth/aspnet/identity-patterns-semantic.d.ts +42 -0
- package/dist/auth/aspnet/identity-patterns-semantic.d.ts.map +1 -0
- package/dist/auth/aspnet/identity-patterns-semantic.js +178 -0
- package/dist/auth/aspnet/identity-patterns-semantic.js.map +1 -0
- package/dist/auth/aspnet/index.d.ts +22 -0
- package/dist/auth/aspnet/index.d.ts.map +1 -0
- package/dist/auth/aspnet/index.js +28 -0
- package/dist/auth/aspnet/index.js.map +1 -0
- package/dist/auth/aspnet/jwt-patterns-detector.d.ts +55 -0
- package/dist/auth/aspnet/jwt-patterns-detector.d.ts.map +1 -0
- package/dist/auth/aspnet/jwt-patterns-detector.js +251 -0
- package/dist/auth/aspnet/jwt-patterns-detector.js.map +1 -0
- package/dist/auth/aspnet/jwt-patterns-semantic.d.ts +41 -0
- package/dist/auth/aspnet/jwt-patterns-semantic.d.ts.map +1 -0
- package/dist/auth/aspnet/jwt-patterns-semantic.js +186 -0
- package/dist/auth/aspnet/jwt-patterns-semantic.js.map +1 -0
- package/dist/auth/aspnet/policy-handlers-detector.d.ts +52 -0
- package/dist/auth/aspnet/policy-handlers-detector.d.ts.map +1 -0
- package/dist/auth/aspnet/policy-handlers-detector.js +159 -0
- package/dist/auth/aspnet/policy-handlers-detector.js.map +1 -0
- package/dist/auth/aspnet/policy-handlers-semantic.d.ts +41 -0
- package/dist/auth/aspnet/policy-handlers-semantic.d.ts.map +1 -0
- package/dist/auth/aspnet/policy-handlers-semantic.js +180 -0
- package/dist/auth/aspnet/policy-handlers-semantic.js.map +1 -0
- package/dist/auth/aspnet/resource-authorization-detector.d.ts +51 -0
- package/dist/auth/aspnet/resource-authorization-detector.d.ts.map +1 -0
- package/dist/auth/aspnet/resource-authorization-detector.js +147 -0
- package/dist/auth/aspnet/resource-authorization-detector.js.map +1 -0
- package/dist/auth/aspnet/resource-authorization-semantic.d.ts +40 -0
- package/dist/auth/aspnet/resource-authorization-semantic.d.ts.map +1 -0
- package/dist/auth/aspnet/resource-authorization-semantic.js +172 -0
- package/dist/auth/aspnet/resource-authorization-semantic.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/laravel/auth-detector.d.ts +64 -0
- package/dist/auth/laravel/auth-detector.d.ts.map +1 -0
- package/dist/auth/laravel/auth-detector.js +203 -0
- package/dist/auth/laravel/auth-detector.js.map +1 -0
- package/dist/auth/laravel/auth-semantic.d.ts +41 -0
- package/dist/auth/laravel/auth-semantic.d.ts.map +1 -0
- package/dist/auth/laravel/auth-semantic.js +187 -0
- package/dist/auth/laravel/auth-semantic.js.map +1 -0
- package/dist/auth/laravel/extractors/gate-extractor.d.ts +58 -0
- package/dist/auth/laravel/extractors/gate-extractor.d.ts.map +1 -0
- package/dist/auth/laravel/extractors/gate-extractor.js +284 -0
- package/dist/auth/laravel/extractors/gate-extractor.js.map +1 -0
- package/dist/auth/laravel/extractors/index.d.ts +9 -0
- package/dist/auth/laravel/extractors/index.d.ts.map +1 -0
- package/dist/auth/laravel/extractors/index.js +9 -0
- package/dist/auth/laravel/extractors/index.js.map +1 -0
- package/dist/auth/laravel/extractors/middleware-extractor.d.ts +66 -0
- package/dist/auth/laravel/extractors/middleware-extractor.d.ts.map +1 -0
- package/dist/auth/laravel/extractors/middleware-extractor.js +341 -0
- package/dist/auth/laravel/extractors/middleware-extractor.js.map +1 -0
- package/dist/auth/laravel/extractors/policy-extractor.d.ts +70 -0
- package/dist/auth/laravel/extractors/policy-extractor.d.ts.map +1 -0
- package/dist/auth/laravel/extractors/policy-extractor.js +288 -0
- package/dist/auth/laravel/extractors/policy-extractor.js.map +1 -0
- package/dist/auth/laravel/index.d.ts +9 -0
- package/dist/auth/laravel/index.d.ts.map +1 -0
- package/dist/auth/laravel/index.js +12 -0
- package/dist/auth/laravel/index.js.map +1 -0
- package/dist/auth/laravel/types.d.ts +285 -0
- package/dist/auth/laravel/types.d.ts.map +1 -0
- package/dist/auth/laravel/types.js +45 -0
- package/dist/auth/laravel/types.js.map +1 -0
- package/dist/base/semantic-detector.d.ts.map +1 -1
- package/dist/base/semantic-detector.js +15 -9
- package/dist/base/semantic-detector.js.map +1 -1
- package/dist/config/aspnet/index.d.ts +6 -0
- package/dist/config/aspnet/index.d.ts.map +1 -0
- package/dist/config/aspnet/index.js +9 -0
- package/dist/config/aspnet/index.js.map +1 -0
- package/dist/config/aspnet/options-pattern-detector.d.ts +42 -0
- package/dist/config/aspnet/options-pattern-detector.d.ts.map +1 -0
- package/dist/config/aspnet/options-pattern-detector.js +90 -0
- package/dist/config/aspnet/options-pattern-detector.js.map +1 -0
- package/dist/config/aspnet/options-pattern-semantic.d.ts +44 -0
- package/dist/config/aspnet/options-pattern-semantic.d.ts.map +1 -0
- package/dist/config/aspnet/options-pattern-semantic.js +182 -0
- package/dist/config/aspnet/options-pattern-semantic.js.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/laravel/config-detector.d.ts +26 -0
- package/dist/config/laravel/config-detector.d.ts.map +1 -0
- package/dist/config/laravel/config-detector.js +44 -0
- package/dist/config/laravel/config-detector.js.map +1 -0
- package/dist/config/laravel/config-semantic.d.ts +27 -0
- package/dist/config/laravel/config-semantic.d.ts.map +1 -0
- package/dist/config/laravel/config-semantic.js +130 -0
- package/dist/config/laravel/config-semantic.js.map +1 -0
- package/dist/config/laravel/extractors/env-extractor.d.ts +16 -0
- package/dist/config/laravel/extractors/env-extractor.d.ts.map +1 -0
- package/dist/config/laravel/extractors/env-extractor.js +41 -0
- package/dist/config/laravel/extractors/env-extractor.js.map +1 -0
- package/dist/config/laravel/extractors/index.d.ts +7 -0
- package/dist/config/laravel/extractors/index.d.ts.map +1 -0
- package/dist/config/laravel/extractors/index.js +7 -0
- package/dist/config/laravel/extractors/index.js.map +1 -0
- package/dist/config/laravel/index.d.ts +9 -0
- package/dist/config/laravel/index.d.ts.map +1 -0
- package/dist/config/laravel/index.js +9 -0
- package/dist/config/laravel/index.js.map +1 -0
- package/dist/config/laravel/types.d.ts +23 -0
- package/dist/config/laravel/types.d.ts.map +1 -0
- package/dist/config/laravel/types.js +7 -0
- package/dist/config/laravel/types.js.map +1 -0
- package/dist/contracts/aspnet/aspnet-endpoint-detector.d.ts +68 -0
- package/dist/contracts/aspnet/aspnet-endpoint-detector.d.ts.map +1 -0
- package/dist/contracts/aspnet/aspnet-endpoint-detector.js +481 -0
- package/dist/contracts/aspnet/aspnet-endpoint-detector.js.map +1 -0
- package/dist/contracts/aspnet/index.d.ts +6 -0
- package/dist/contracts/aspnet/index.d.ts.map +1 -0
- package/dist/contracts/aspnet/index.js +6 -0
- package/dist/contracts/aspnet/index.js.map +1 -0
- package/dist/contracts/aspnet/types.d.ts +137 -0
- package/dist/contracts/aspnet/types.d.ts.map +1 -0
- package/dist/contracts/aspnet/types.js +5 -0
- package/dist/contracts/aspnet/types.js.map +1 -0
- package/dist/contracts/backend-endpoint-detector.d.ts +8 -1
- package/dist/contracts/backend-endpoint-detector.d.ts.map +1 -1
- package/dist/contracts/backend-endpoint-detector.js +79 -4
- package/dist/contracts/backend-endpoint-detector.js.map +1 -1
- package/dist/contracts/django/django-endpoint-detector.d.ts +81 -0
- package/dist/contracts/django/django-endpoint-detector.d.ts.map +1 -0
- package/dist/contracts/django/django-endpoint-detector.js +291 -0
- package/dist/contracts/django/django-endpoint-detector.js.map +1 -0
- package/dist/contracts/django/index.d.ts +14 -0
- package/dist/contracts/django/index.d.ts.map +1 -0
- package/dist/contracts/django/index.js +19 -0
- package/dist/contracts/django/index.js.map +1 -0
- package/dist/contracts/django/serializer-extractor.d.ts +87 -0
- package/dist/contracts/django/serializer-extractor.d.ts.map +1 -0
- package/dist/contracts/django/serializer-extractor.js +393 -0
- package/dist/contracts/django/serializer-extractor.js.map +1 -0
- package/dist/contracts/django/types.d.ts +245 -0
- package/dist/contracts/django/types.d.ts.map +1 -0
- package/dist/contracts/django/types.js +83 -0
- package/dist/contracts/django/types.js.map +1 -0
- package/dist/contracts/django/url-extractor.d.ts +80 -0
- package/dist/contracts/django/url-extractor.d.ts.map +1 -0
- package/dist/contracts/django/url-extractor.js +303 -0
- package/dist/contracts/django/url-extractor.js.map +1 -0
- package/dist/contracts/django/viewset-extractor.d.ts +95 -0
- package/dist/contracts/django/viewset-extractor.d.ts.map +1 -0
- package/dist/contracts/django/viewset-extractor.js +405 -0
- package/dist/contracts/django/viewset-extractor.js.map +1 -0
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +10 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/laravel/extractors/controller-extractor.d.ts +97 -0
- package/dist/contracts/laravel/extractors/controller-extractor.d.ts.map +1 -0
- package/dist/contracts/laravel/extractors/controller-extractor.js +316 -0
- package/dist/contracts/laravel/extractors/controller-extractor.js.map +1 -0
- package/dist/contracts/laravel/extractors/form-request-extractor.d.ts +61 -0
- package/dist/contracts/laravel/extractors/form-request-extractor.d.ts.map +1 -0
- package/dist/contracts/laravel/extractors/form-request-extractor.js +200 -0
- package/dist/contracts/laravel/extractors/form-request-extractor.js.map +1 -0
- package/dist/contracts/laravel/extractors/index.d.ts +14 -0
- package/dist/contracts/laravel/extractors/index.d.ts.map +1 -0
- package/dist/contracts/laravel/extractors/index.js +14 -0
- package/dist/contracts/laravel/extractors/index.js.map +1 -0
- package/dist/contracts/laravel/extractors/resource-extractor.d.ts +61 -0
- package/dist/contracts/laravel/extractors/resource-extractor.d.ts.map +1 -0
- package/dist/contracts/laravel/extractors/resource-extractor.js +254 -0
- package/dist/contracts/laravel/extractors/resource-extractor.js.map +1 -0
- package/dist/contracts/laravel/extractors/route-extractor.d.ts +87 -0
- package/dist/contracts/laravel/extractors/route-extractor.d.ts.map +1 -0
- package/dist/contracts/laravel/extractors/route-extractor.js +364 -0
- package/dist/contracts/laravel/extractors/route-extractor.js.map +1 -0
- package/dist/contracts/laravel/index.d.ts +12 -0
- package/dist/contracts/laravel/index.d.ts.map +1 -0
- package/dist/contracts/laravel/index.js +15 -0
- package/dist/contracts/laravel/index.js.map +1 -0
- package/dist/contracts/laravel/laravel-endpoint-detector.d.ts +78 -0
- package/dist/contracts/laravel/laravel-endpoint-detector.d.ts.map +1 -0
- package/dist/contracts/laravel/laravel-endpoint-detector.js +278 -0
- package/dist/contracts/laravel/laravel-endpoint-detector.js.map +1 -0
- package/dist/contracts/laravel/types.d.ts +284 -0
- package/dist/contracts/laravel/types.d.ts.map +1 -0
- package/dist/contracts/laravel/types.js +89 -0
- package/dist/contracts/laravel/types.js.map +1 -0
- package/dist/contracts/spring/dto-extractor.d.ts +97 -0
- package/dist/contracts/spring/dto-extractor.d.ts.map +1 -0
- package/dist/contracts/spring/dto-extractor.js +427 -0
- package/dist/contracts/spring/dto-extractor.js.map +1 -0
- package/dist/contracts/spring/index.d.ts +12 -0
- package/dist/contracts/spring/index.d.ts.map +1 -0
- package/dist/contracts/spring/index.js +15 -0
- package/dist/contracts/spring/index.js.map +1 -0
- package/dist/contracts/spring/spring-endpoint-detector.d.ts +136 -0
- package/dist/contracts/spring/spring-endpoint-detector.d.ts.map +1 -0
- package/dist/contracts/spring/spring-endpoint-detector.js +664 -0
- package/dist/contracts/spring/spring-endpoint-detector.js.map +1 -0
- package/dist/contracts/spring/types.d.ts +174 -0
- package/dist/contracts/spring/types.d.ts.map +1 -0
- package/dist/contracts/spring/types.js +52 -0
- package/dist/contracts/spring/types.js.map +1 -0
- package/dist/contracts/types.d.ts +1 -0
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/data-access/aspnet/efcore-patterns-detector.d.ts +60 -0
- package/dist/data-access/aspnet/efcore-patterns-detector.d.ts.map +1 -0
- package/dist/data-access/aspnet/efcore-patterns-detector.js +230 -0
- package/dist/data-access/aspnet/efcore-patterns-detector.js.map +1 -0
- package/dist/data-access/aspnet/efcore-patterns-semantic.d.ts +46 -0
- package/dist/data-access/aspnet/efcore-patterns-semantic.d.ts.map +1 -0
- package/dist/data-access/aspnet/efcore-patterns-semantic.js +176 -0
- package/dist/data-access/aspnet/efcore-patterns-semantic.js.map +1 -0
- package/dist/data-access/aspnet/index.d.ts +16 -0
- package/dist/data-access/aspnet/index.d.ts.map +1 -0
- package/dist/data-access/aspnet/index.js +22 -0
- package/dist/data-access/aspnet/index.js.map +1 -0
- package/dist/data-access/aspnet/repository-pattern-detector.d.ts +56 -0
- package/dist/data-access/aspnet/repository-pattern-detector.d.ts.map +1 -0
- package/dist/data-access/aspnet/repository-pattern-detector.js +203 -0
- package/dist/data-access/aspnet/repository-pattern-detector.js.map +1 -0
- package/dist/data-access/aspnet/repository-pattern-semantic.d.ts +44 -0
- package/dist/data-access/aspnet/repository-pattern-semantic.d.ts.map +1 -0
- package/dist/data-access/aspnet/repository-pattern-semantic.js +187 -0
- package/dist/data-access/aspnet/repository-pattern-semantic.js.map +1 -0
- package/dist/data-access/boundaries/index.d.ts +12 -0
- package/dist/data-access/boundaries/index.d.ts.map +1 -0
- package/dist/data-access/boundaries/index.js +12 -0
- package/dist/data-access/boundaries/index.js.map +1 -0
- package/dist/data-access/boundaries/orm-model-detector.d.ts +24 -0
- package/dist/data-access/boundaries/orm-model-detector.d.ts.map +1 -0
- package/dist/data-access/boundaries/orm-model-detector.js +91 -0
- package/dist/data-access/boundaries/orm-model-detector.js.map +1 -0
- package/dist/data-access/boundaries/query-access-detector.d.ts +24 -0
- package/dist/data-access/boundaries/query-access-detector.d.ts.map +1 -0
- package/dist/data-access/boundaries/query-access-detector.js +92 -0
- package/dist/data-access/boundaries/query-access-detector.js.map +1 -0
- package/dist/data-access/boundaries/sensitive-field-detector.d.ts +24 -0
- package/dist/data-access/boundaries/sensitive-field-detector.d.ts.map +1 -0
- package/dist/data-access/boundaries/sensitive-field-detector.js +98 -0
- package/dist/data-access/boundaries/sensitive-field-detector.js.map +1 -0
- package/dist/data-access/index.d.ts +11 -0
- package/dist/data-access/index.d.ts.map +1 -1
- package/dist/data-access/index.js +30 -0
- package/dist/data-access/index.js.map +1 -1
- package/dist/data-access/laravel/eloquent-detector.d.ts +50 -0
- package/dist/data-access/laravel/eloquent-detector.d.ts.map +1 -0
- package/dist/data-access/laravel/eloquent-detector.js +88 -0
- package/dist/data-access/laravel/eloquent-detector.js.map +1 -0
- package/dist/data-access/laravel/eloquent-semantic.d.ts +27 -0
- package/dist/data-access/laravel/eloquent-semantic.d.ts.map +1 -0
- package/dist/data-access/laravel/eloquent-semantic.js +142 -0
- package/dist/data-access/laravel/eloquent-semantic.js.map +1 -0
- package/dist/data-access/laravel/extractors/eloquent-model-extractor.d.ts +102 -0
- package/dist/data-access/laravel/extractors/eloquent-model-extractor.d.ts.map +1 -0
- package/dist/data-access/laravel/extractors/eloquent-model-extractor.js +439 -0
- package/dist/data-access/laravel/extractors/eloquent-model-extractor.js.map +1 -0
- package/dist/data-access/laravel/extractors/index.d.ts +11 -0
- package/dist/data-access/laravel/extractors/index.d.ts.map +1 -0
- package/dist/data-access/laravel/extractors/index.js +10 -0
- package/dist/data-access/laravel/extractors/index.js.map +1 -0
- package/dist/data-access/laravel/extractors/query-builder-extractor.d.ts +62 -0
- package/dist/data-access/laravel/extractors/query-builder-extractor.d.ts.map +1 -0
- package/dist/data-access/laravel/extractors/query-builder-extractor.js +306 -0
- package/dist/data-access/laravel/extractors/query-builder-extractor.js.map +1 -0
- package/dist/data-access/laravel/extractors/relationship-extractor.d.ts +47 -0
- package/dist/data-access/laravel/extractors/relationship-extractor.d.ts.map +1 -0
- package/dist/data-access/laravel/extractors/relationship-extractor.js +165 -0
- package/dist/data-access/laravel/extractors/relationship-extractor.js.map +1 -0
- package/dist/data-access/laravel/extractors/scope-extractor.d.ts +73 -0
- package/dist/data-access/laravel/extractors/scope-extractor.d.ts.map +1 -0
- package/dist/data-access/laravel/extractors/scope-extractor.js +155 -0
- package/dist/data-access/laravel/extractors/scope-extractor.js.map +1 -0
- package/dist/data-access/laravel/index.d.ts +9 -0
- package/dist/data-access/laravel/index.d.ts.map +1 -0
- package/dist/data-access/laravel/index.js +12 -0
- package/dist/data-access/laravel/index.js.map +1 -0
- package/dist/data-access/laravel/transaction-semantic.d.ts +26 -0
- package/dist/data-access/laravel/transaction-semantic.d.ts.map +1 -0
- package/dist/data-access/laravel/transaction-semantic.js +106 -0
- package/dist/data-access/laravel/transaction-semantic.js.map +1 -0
- package/dist/data-access/laravel/types.d.ts +244 -0
- package/dist/data-access/laravel/types.d.ts.map +1 -0
- package/dist/data-access/laravel/types.js +63 -0
- package/dist/data-access/laravel/types.js.map +1 -0
- package/dist/documentation/aspnet/index.d.ts +6 -0
- package/dist/documentation/aspnet/index.d.ts.map +1 -0
- package/dist/documentation/aspnet/index.js +6 -0
- package/dist/documentation/aspnet/index.js.map +1 -0
- package/dist/documentation/aspnet/xml-documentation-detector.d.ts +44 -0
- package/dist/documentation/aspnet/xml-documentation-detector.d.ts.map +1 -0
- package/dist/documentation/aspnet/xml-documentation-detector.js +107 -0
- package/dist/documentation/aspnet/xml-documentation-detector.js.map +1 -0
- package/dist/documentation/aspnet/xml-documentation-semantic.d.ts +38 -0
- package/dist/documentation/aspnet/xml-documentation-semantic.d.ts.map +1 -0
- package/dist/documentation/aspnet/xml-documentation-semantic.js +120 -0
- package/dist/documentation/aspnet/xml-documentation-semantic.js.map +1 -0
- package/dist/documentation/index.d.ts +1 -0
- package/dist/documentation/index.d.ts.map +1 -1
- package/dist/documentation/index.js +4 -0
- package/dist/documentation/index.js.map +1 -1
- package/dist/errors/aspnet/exception-patterns-detector.d.ts +57 -0
- package/dist/errors/aspnet/exception-patterns-detector.d.ts.map +1 -0
- package/dist/errors/aspnet/exception-patterns-detector.js +213 -0
- package/dist/errors/aspnet/exception-patterns-detector.js.map +1 -0
- package/dist/errors/aspnet/exception-patterns-semantic.d.ts +41 -0
- package/dist/errors/aspnet/exception-patterns-semantic.d.ts.map +1 -0
- package/dist/errors/aspnet/exception-patterns-semantic.js +186 -0
- package/dist/errors/aspnet/exception-patterns-semantic.js.map +1 -0
- package/dist/errors/aspnet/index.d.ts +10 -0
- package/dist/errors/aspnet/index.d.ts.map +1 -0
- package/dist/errors/aspnet/index.js +16 -0
- package/dist/errors/aspnet/index.js.map +1 -0
- package/dist/errors/aspnet/result-pattern-detector.d.ts +53 -0
- package/dist/errors/aspnet/result-pattern-detector.d.ts.map +1 -0
- package/dist/errors/aspnet/result-pattern-detector.js +168 -0
- package/dist/errors/aspnet/result-pattern-detector.js.map +1 -0
- package/dist/errors/aspnet/result-pattern-semantic.d.ts +42 -0
- package/dist/errors/aspnet/result-pattern-semantic.d.ts.map +1 -0
- package/dist/errors/aspnet/result-pattern-semantic.js +196 -0
- package/dist/errors/aspnet/result-pattern-semantic.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +8 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/laravel/errors-semantic.d.ts +32 -0
- package/dist/errors/laravel/errors-semantic.d.ts.map +1 -0
- package/dist/errors/laravel/errors-semantic.js +171 -0
- package/dist/errors/laravel/errors-semantic.js.map +1 -0
- package/dist/errors/laravel/exception-detector.d.ts +29 -0
- package/dist/errors/laravel/exception-detector.d.ts.map +1 -0
- package/dist/errors/laravel/exception-detector.js +59 -0
- package/dist/errors/laravel/exception-detector.js.map +1 -0
- package/dist/errors/laravel/extractors/custom-exception-extractor.d.ts +62 -0
- package/dist/errors/laravel/extractors/custom-exception-extractor.d.ts.map +1 -0
- package/dist/errors/laravel/extractors/custom-exception-extractor.js +312 -0
- package/dist/errors/laravel/extractors/custom-exception-extractor.js.map +1 -0
- package/dist/errors/laravel/extractors/exception-handler-extractor.d.ts +62 -0
- package/dist/errors/laravel/extractors/exception-handler-extractor.d.ts.map +1 -0
- package/dist/errors/laravel/extractors/exception-handler-extractor.js +280 -0
- package/dist/errors/laravel/extractors/exception-handler-extractor.js.map +1 -0
- package/dist/errors/laravel/extractors/index.d.ts +8 -0
- package/dist/errors/laravel/extractors/index.d.ts.map +1 -0
- package/dist/errors/laravel/extractors/index.js +8 -0
- package/dist/errors/laravel/extractors/index.js.map +1 -0
- package/dist/errors/laravel/index.d.ts +9 -0
- package/dist/errors/laravel/index.d.ts.map +1 -0
- package/dist/errors/laravel/index.js +12 -0
- package/dist/errors/laravel/index.js.map +1 -0
- package/dist/errors/laravel/types.d.ts +207 -0
- package/dist/errors/laravel/types.d.ts.map +1 -0
- package/dist/errors/laravel/types.js +41 -0
- package/dist/errors/laravel/types.js.map +1 -0
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -3
- package/dist/index.js.map +1 -1
- package/dist/laravel/index.d.ts +25 -0
- package/dist/laravel/index.d.ts.map +1 -0
- package/dist/laravel/index.js +55 -0
- package/dist/laravel/index.js.map +1 -0
- package/dist/logging/aspnet/ilogger-patterns-detector.d.ts +61 -0
- package/dist/logging/aspnet/ilogger-patterns-detector.d.ts.map +1 -0
- package/dist/logging/aspnet/ilogger-patterns-detector.js +191 -0
- package/dist/logging/aspnet/ilogger-patterns-detector.js.map +1 -0
- package/dist/logging/aspnet/ilogger-patterns-semantic.d.ts +41 -0
- package/dist/logging/aspnet/ilogger-patterns-semantic.d.ts.map +1 -0
- package/dist/logging/aspnet/ilogger-patterns-semantic.js +196 -0
- package/dist/logging/aspnet/ilogger-patterns-semantic.js.map +1 -0
- package/dist/logging/aspnet/index.d.ts +8 -0
- package/dist/logging/aspnet/index.d.ts.map +1 -0
- package/dist/logging/aspnet/index.js +14 -0
- package/dist/logging/aspnet/index.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +6 -0
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/laravel/extractors/channel-extractor.d.ts +46 -0
- package/dist/logging/laravel/extractors/channel-extractor.d.ts.map +1 -0
- package/dist/logging/laravel/extractors/channel-extractor.js +188 -0
- package/dist/logging/laravel/extractors/channel-extractor.js.map +1 -0
- package/dist/logging/laravel/extractors/index.d.ts +8 -0
- package/dist/logging/laravel/extractors/index.d.ts.map +1 -0
- package/dist/logging/laravel/extractors/index.js +8 -0
- package/dist/logging/laravel/extractors/index.js.map +1 -0
- package/dist/logging/laravel/extractors/log-facade-extractor.d.ts +42 -0
- package/dist/logging/laravel/extractors/log-facade-extractor.d.ts.map +1 -0
- package/dist/logging/laravel/extractors/log-facade-extractor.js +182 -0
- package/dist/logging/laravel/extractors/log-facade-extractor.js.map +1 -0
- package/dist/logging/laravel/index.d.ts +9 -0
- package/dist/logging/laravel/index.d.ts.map +1 -0
- package/dist/logging/laravel/index.js +12 -0
- package/dist/logging/laravel/index.js.map +1 -0
- package/dist/logging/laravel/logging-detector.d.ts +30 -0
- package/dist/logging/laravel/logging-detector.d.ts.map +1 -0
- package/dist/logging/laravel/logging-detector.js +81 -0
- package/dist/logging/laravel/logging-detector.js.map +1 -0
- package/dist/logging/laravel/logging-semantic.d.ts +26 -0
- package/dist/logging/laravel/logging-semantic.d.ts.map +1 -0
- package/dist/logging/laravel/logging-semantic.js +115 -0
- package/dist/logging/laravel/logging-semantic.js.map +1 -0
- package/dist/logging/laravel/types.d.ts +142 -0
- package/dist/logging/laravel/types.d.ts.map +1 -0
- package/dist/logging/laravel/types.js +55 -0
- package/dist/logging/laravel/types.js.map +1 -0
- package/dist/performance/aspnet/async-patterns-detector.d.ts +43 -0
- package/dist/performance/aspnet/async-patterns-detector.d.ts.map +1 -0
- package/dist/performance/aspnet/async-patterns-detector.js +110 -0
- package/dist/performance/aspnet/async-patterns-detector.js.map +1 -0
- package/dist/performance/aspnet/async-patterns-semantic.d.ts +39 -0
- package/dist/performance/aspnet/async-patterns-semantic.d.ts.map +1 -0
- package/dist/performance/aspnet/async-patterns-semantic.js +147 -0
- package/dist/performance/aspnet/async-patterns-semantic.js.map +1 -0
- package/dist/performance/aspnet/index.d.ts +6 -0
- package/dist/performance/aspnet/index.d.ts.map +1 -0
- package/dist/performance/aspnet/index.js +6 -0
- package/dist/performance/aspnet/index.js.map +1 -0
- package/dist/performance/index.d.ts +1 -0
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/performance/index.js +4 -0
- package/dist/performance/index.js.map +1 -1
- package/dist/performance/laravel/extractors/cache-extractor.d.ts +15 -0
- package/dist/performance/laravel/extractors/cache-extractor.d.ts.map +1 -0
- package/dist/performance/laravel/extractors/cache-extractor.js +43 -0
- package/dist/performance/laravel/extractors/cache-extractor.js.map +1 -0
- package/dist/performance/laravel/extractors/eager-loading-extractor.d.ts +97 -0
- package/dist/performance/laravel/extractors/eager-loading-extractor.d.ts.map +1 -0
- package/dist/performance/laravel/extractors/eager-loading-extractor.js +236 -0
- package/dist/performance/laravel/extractors/eager-loading-extractor.js.map +1 -0
- package/dist/performance/laravel/extractors/index.d.ts +11 -0
- package/dist/performance/laravel/extractors/index.d.ts.map +1 -0
- package/dist/performance/laravel/extractors/index.js +9 -0
- package/dist/performance/laravel/extractors/index.js.map +1 -0
- package/dist/performance/laravel/extractors/queue-extractor.d.ts +78 -0
- package/dist/performance/laravel/extractors/queue-extractor.d.ts.map +1 -0
- package/dist/performance/laravel/extractors/queue-extractor.js +252 -0
- package/dist/performance/laravel/extractors/queue-extractor.js.map +1 -0
- package/dist/performance/laravel/index.d.ts +9 -0
- package/dist/performance/laravel/index.d.ts.map +1 -0
- package/dist/performance/laravel/index.js +9 -0
- package/dist/performance/laravel/index.js.map +1 -0
- package/dist/performance/laravel/performance-detector.d.ts +26 -0
- package/dist/performance/laravel/performance-detector.d.ts.map +1 -0
- package/dist/performance/laravel/performance-detector.js +45 -0
- package/dist/performance/laravel/performance-detector.js.map +1 -0
- package/dist/performance/laravel/performance-semantic.d.ts +27 -0
- package/dist/performance/laravel/performance-semantic.d.ts.map +1 -0
- package/dist/performance/laravel/performance-semantic.js +141 -0
- package/dist/performance/laravel/performance-semantic.js.map +1 -0
- package/dist/performance/laravel/types.d.ts +34 -0
- package/dist/performance/laravel/types.d.ts.map +1 -0
- package/dist/performance/laravel/types.js +7 -0
- package/dist/performance/laravel/types.js.map +1 -0
- package/dist/php/attribute-extractor.d.ts +88 -0
- package/dist/php/attribute-extractor.d.ts.map +1 -0
- package/dist/php/attribute-extractor.js +293 -0
- package/dist/php/attribute-extractor.js.map +1 -0
- package/dist/php/class-extractor.d.ts +75 -0
- package/dist/php/class-extractor.d.ts.map +1 -0
- package/dist/php/class-extractor.js +298 -0
- package/dist/php/class-extractor.js.map +1 -0
- package/dist/php/docblock-extractor.d.ts +84 -0
- package/dist/php/docblock-extractor.d.ts.map +1 -0
- package/dist/php/docblock-extractor.js +278 -0
- package/dist/php/docblock-extractor.js.map +1 -0
- package/dist/php/index.d.ts +15 -0
- package/dist/php/index.d.ts.map +1 -0
- package/dist/php/index.js +17 -0
- package/dist/php/index.js.map +1 -0
- package/dist/php/method-extractor.d.ts +80 -0
- package/dist/php/method-extractor.d.ts.map +1 -0
- package/dist/php/method-extractor.js +282 -0
- package/dist/php/method-extractor.js.map +1 -0
- package/dist/php/types.d.ts +433 -0
- package/dist/php/types.d.ts.map +1 -0
- package/dist/php/types.js +38 -0
- package/dist/php/types.js.map +1 -0
- package/dist/security/aspnet/index.d.ts +8 -0
- package/dist/security/aspnet/index.d.ts.map +1 -0
- package/dist/security/aspnet/index.js +8 -0
- package/dist/security/aspnet/index.js.map +1 -0
- package/dist/security/aspnet/input-validation-detector.d.ts +54 -0
- package/dist/security/aspnet/input-validation-detector.d.ts.map +1 -0
- package/dist/security/aspnet/input-validation-detector.js +194 -0
- package/dist/security/aspnet/input-validation-detector.js.map +1 -0
- package/dist/security/aspnet/input-validation-semantic.d.ts +38 -0
- package/dist/security/aspnet/input-validation-semantic.d.ts.map +1 -0
- package/dist/security/aspnet/input-validation-semantic.js +161 -0
- package/dist/security/aspnet/input-validation-semantic.js.map +1 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +4 -0
- package/dist/security/index.js.map +1 -1
- package/dist/security/laravel/extractors/csrf-extractor.d.ts +15 -0
- package/dist/security/laravel/extractors/csrf-extractor.d.ts.map +1 -0
- package/dist/security/laravel/extractors/csrf-extractor.js +55 -0
- package/dist/security/laravel/extractors/csrf-extractor.js.map +1 -0
- package/dist/security/laravel/extractors/index.d.ts +11 -0
- package/dist/security/laravel/extractors/index.d.ts.map +1 -0
- package/dist/security/laravel/extractors/index.js +9 -0
- package/dist/security/laravel/extractors/index.js.map +1 -0
- package/dist/security/laravel/extractors/mass-assignment-extractor.d.ts +73 -0
- package/dist/security/laravel/extractors/mass-assignment-extractor.d.ts.map +1 -0
- package/dist/security/laravel/extractors/mass-assignment-extractor.js +231 -0
- package/dist/security/laravel/extractors/mass-assignment-extractor.js.map +1 -0
- package/dist/security/laravel/extractors/xss-extractor.d.ts +69 -0
- package/dist/security/laravel/extractors/xss-extractor.d.ts.map +1 -0
- package/dist/security/laravel/extractors/xss-extractor.js +173 -0
- package/dist/security/laravel/extractors/xss-extractor.js.map +1 -0
- package/dist/security/laravel/index.d.ts +9 -0
- package/dist/security/laravel/index.d.ts.map +1 -0
- package/dist/security/laravel/index.js +9 -0
- package/dist/security/laravel/index.js.map +1 -0
- package/dist/security/laravel/security-detector.d.ts +28 -0
- package/dist/security/laravel/security-detector.d.ts.map +1 -0
- package/dist/security/laravel/security-detector.js +63 -0
- package/dist/security/laravel/security-detector.js.map +1 -0
- package/dist/security/laravel/security-semantic.d.ts +28 -0
- package/dist/security/laravel/security-semantic.d.ts.map +1 -0
- package/dist/security/laravel/security-semantic.js +140 -0
- package/dist/security/laravel/security-semantic.js.map +1 -0
- package/dist/security/laravel/types.d.ts +31 -0
- package/dist/security/laravel/types.d.ts.map +1 -0
- package/dist/security/laravel/types.js +7 -0
- package/dist/security/laravel/types.js.map +1 -0
- package/dist/spring/api-learning.d.ts +37 -0
- package/dist/spring/api-learning.d.ts.map +1 -0
- package/dist/spring/api-learning.js +142 -0
- package/dist/spring/api-learning.js.map +1 -0
- package/dist/spring/api-semantic.d.ts +26 -0
- package/dist/spring/api-semantic.d.ts.map +1 -0
- package/dist/spring/api-semantic.js +74 -0
- package/dist/spring/api-semantic.js.map +1 -0
- package/dist/spring/async-learning.d.ts +40 -0
- package/dist/spring/async-learning.d.ts.map +1 -0
- package/dist/spring/async-learning.js +193 -0
- package/dist/spring/async-learning.js.map +1 -0
- package/dist/spring/async-semantic.d.ts +26 -0
- package/dist/spring/async-semantic.d.ts.map +1 -0
- package/dist/spring/async-semantic.js +86 -0
- package/dist/spring/async-semantic.js.map +1 -0
- package/dist/spring/auth-learning.d.ts +37 -0
- package/dist/spring/auth-learning.d.ts.map +1 -0
- package/dist/spring/auth-learning.js +173 -0
- package/dist/spring/auth-learning.js.map +1 -0
- package/dist/spring/auth-semantic.d.ts +26 -0
- package/dist/spring/auth-semantic.d.ts.map +1 -0
- package/dist/spring/auth-semantic.js +97 -0
- package/dist/spring/auth-semantic.js.map +1 -0
- package/dist/spring/config-learning.d.ts +37 -0
- package/dist/spring/config-learning.d.ts.map +1 -0
- package/dist/spring/config-learning.js +153 -0
- package/dist/spring/config-learning.js.map +1 -0
- package/dist/spring/config-semantic.d.ts +26 -0
- package/dist/spring/config-semantic.d.ts.map +1 -0
- package/dist/spring/config-semantic.js +78 -0
- package/dist/spring/config-semantic.js.map +1 -0
- package/dist/spring/data-learning.d.ts +38 -0
- package/dist/spring/data-learning.d.ts.map +1 -0
- package/dist/spring/data-learning.js +187 -0
- package/dist/spring/data-learning.js.map +1 -0
- package/dist/spring/data-semantic.d.ts +26 -0
- package/dist/spring/data-semantic.d.ts.map +1 -0
- package/dist/spring/data-semantic.js +81 -0
- package/dist/spring/data-semantic.js.map +1 -0
- package/dist/spring/di-learning.d.ts +37 -0
- package/dist/spring/di-learning.d.ts.map +1 -0
- package/dist/spring/di-learning.js +160 -0
- package/dist/spring/di-learning.js.map +1 -0
- package/dist/spring/di-semantic.d.ts +27 -0
- package/dist/spring/di-semantic.d.ts.map +1 -0
- package/dist/spring/di-semantic.js +75 -0
- package/dist/spring/di-semantic.js.map +1 -0
- package/dist/spring/errors-learning.d.ts +40 -0
- package/dist/spring/errors-learning.d.ts.map +1 -0
- package/dist/spring/errors-learning.js +191 -0
- package/dist/spring/errors-learning.js.map +1 -0
- package/dist/spring/errors-semantic.d.ts +26 -0
- package/dist/spring/errors-semantic.d.ts.map +1 -0
- package/dist/spring/errors-semantic.js +90 -0
- package/dist/spring/errors-semantic.js.map +1 -0
- package/dist/spring/index.d.ts +93 -0
- package/dist/spring/index.d.ts.map +1 -0
- package/dist/spring/index.js +183 -0
- package/dist/spring/index.js.map +1 -0
- package/dist/spring/keywords.d.ts +85 -0
- package/dist/spring/keywords.d.ts.map +1 -0
- package/dist/spring/keywords.js +282 -0
- package/dist/spring/keywords.js.map +1 -0
- package/dist/spring/logging-learning.d.ts +40 -0
- package/dist/spring/logging-learning.d.ts.map +1 -0
- package/dist/spring/logging-learning.js +209 -0
- package/dist/spring/logging-learning.js.map +1 -0
- package/dist/spring/logging-semantic.d.ts +26 -0
- package/dist/spring/logging-semantic.d.ts.map +1 -0
- package/dist/spring/logging-semantic.js +93 -0
- package/dist/spring/logging-semantic.js.map +1 -0
- package/dist/spring/structural-learning.d.ts +36 -0
- package/dist/spring/structural-learning.d.ts.map +1 -0
- package/dist/spring/structural-learning.js +137 -0
- package/dist/spring/structural-learning.js.map +1 -0
- package/dist/spring/structural-semantic.d.ts +26 -0
- package/dist/spring/structural-semantic.d.ts.map +1 -0
- package/dist/spring/structural-semantic.js +74 -0
- package/dist/spring/structural-semantic.js.map +1 -0
- package/dist/spring/testing-learning.d.ts +41 -0
- package/dist/spring/testing-learning.d.ts.map +1 -0
- package/dist/spring/testing-learning.js +187 -0
- package/dist/spring/testing-learning.js.map +1 -0
- package/dist/spring/testing-semantic.d.ts +26 -0
- package/dist/spring/testing-semantic.d.ts.map +1 -0
- package/dist/spring/testing-semantic.js +105 -0
- package/dist/spring/testing-semantic.js.map +1 -0
- package/dist/spring/transaction-learning.d.ts +41 -0
- package/dist/spring/transaction-learning.d.ts.map +1 -0
- package/dist/spring/transaction-learning.js +165 -0
- package/dist/spring/transaction-learning.js.map +1 -0
- package/dist/spring/transaction-semantic.d.ts +26 -0
- package/dist/spring/transaction-semantic.d.ts.map +1 -0
- package/dist/spring/transaction-semantic.js +80 -0
- package/dist/spring/transaction-semantic.js.map +1 -0
- package/dist/spring/validation-learning.d.ts +40 -0
- package/dist/spring/validation-learning.d.ts.map +1 -0
- package/dist/spring/validation-learning.js +147 -0
- package/dist/spring/validation-learning.js.map +1 -0
- package/dist/spring/validation-semantic.d.ts +26 -0
- package/dist/spring/validation-semantic.d.ts.map +1 -0
- package/dist/spring/validation-semantic.js +92 -0
- package/dist/spring/validation-semantic.js.map +1 -0
- package/dist/structural/aspnet/di-registration-detector.d.ts +43 -0
- package/dist/structural/aspnet/di-registration-detector.d.ts.map +1 -0
- package/dist/structural/aspnet/di-registration-detector.js +101 -0
- package/dist/structural/aspnet/di-registration-detector.js.map +1 -0
- package/dist/structural/aspnet/di-registration-semantic.d.ts +39 -0
- package/dist/structural/aspnet/di-registration-semantic.d.ts.map +1 -0
- package/dist/structural/aspnet/di-registration-semantic.js +156 -0
- package/dist/structural/aspnet/di-registration-semantic.js.map +1 -0
- package/dist/structural/aspnet/index.d.ts +6 -0
- package/dist/structural/aspnet/index.d.ts.map +1 -0
- package/dist/structural/aspnet/index.js +6 -0
- package/dist/structural/aspnet/index.js.map +1 -0
- package/dist/structural/index.d.ts +1 -0
- package/dist/structural/index.d.ts.map +1 -1
- package/dist/structural/index.js +4 -0
- package/dist/structural/index.js.map +1 -1
- package/dist/structural/laravel/di-detector.d.ts +26 -0
- package/dist/structural/laravel/di-detector.d.ts.map +1 -0
- package/dist/structural/laravel/di-detector.js +45 -0
- package/dist/structural/laravel/di-detector.js.map +1 -0
- package/dist/structural/laravel/extractors/container-binding-extractor.d.ts +88 -0
- package/dist/structural/laravel/extractors/container-binding-extractor.d.ts.map +1 -0
- package/dist/structural/laravel/extractors/container-binding-extractor.js +175 -0
- package/dist/structural/laravel/extractors/container-binding-extractor.js.map +1 -0
- package/dist/structural/laravel/extractors/facade-extractor.d.ts +75 -0
- package/dist/structural/laravel/extractors/facade-extractor.d.ts.map +1 -0
- package/dist/structural/laravel/extractors/facade-extractor.js +167 -0
- package/dist/structural/laravel/extractors/facade-extractor.js.map +1 -0
- package/dist/structural/laravel/extractors/index.d.ts +11 -0
- package/dist/structural/laravel/extractors/index.d.ts.map +1 -0
- package/dist/structural/laravel/extractors/index.js +9 -0
- package/dist/structural/laravel/extractors/index.js.map +1 -0
- package/dist/structural/laravel/extractors/service-provider-extractor.d.ts +21 -0
- package/dist/structural/laravel/extractors/service-provider-extractor.d.ts.map +1 -0
- package/dist/structural/laravel/extractors/service-provider-extractor.js +98 -0
- package/dist/structural/laravel/extractors/service-provider-extractor.js.map +1 -0
- package/dist/structural/laravel/index.d.ts +9 -0
- package/dist/structural/laravel/index.d.ts.map +1 -0
- package/dist/structural/laravel/index.js +9 -0
- package/dist/structural/laravel/index.js.map +1 -0
- package/dist/structural/laravel/structural-semantic.d.ts +27 -0
- package/dist/structural/laravel/structural-semantic.d.ts.map +1 -0
- package/dist/structural/laravel/structural-semantic.js +125 -0
- package/dist/structural/laravel/structural-semantic.js.map +1 -0
- package/dist/structural/laravel/types.d.ts +37 -0
- package/dist/structural/laravel/types.d.ts.map +1 -0
- package/dist/structural/laravel/types.js +9 -0
- package/dist/structural/laravel/types.js.map +1 -0
- package/dist/styling/design-tokens.d.ts.map +1 -1
- package/dist/styling/design-tokens.js +2 -1
- package/dist/styling/design-tokens.js.map +1 -1
- package/dist/testing/aspnet/index.d.ts +8 -0
- package/dist/testing/aspnet/index.d.ts.map +1 -0
- package/dist/testing/aspnet/index.js +8 -0
- package/dist/testing/aspnet/index.js.map +1 -0
- package/dist/testing/aspnet/xunit-patterns-detector.d.ts +57 -0
- package/dist/testing/aspnet/xunit-patterns-detector.d.ts.map +1 -0
- package/dist/testing/aspnet/xunit-patterns-detector.js +210 -0
- package/dist/testing/aspnet/xunit-patterns-detector.js.map +1 -0
- package/dist/testing/aspnet/xunit-patterns-semantic.d.ts +38 -0
- package/dist/testing/aspnet/xunit-patterns-semantic.d.ts.map +1 -0
- package/dist/testing/aspnet/xunit-patterns-semantic.js +154 -0
- package/dist/testing/aspnet/xunit-patterns-semantic.js.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/laravel/extractors/factory-extractor.d.ts +55 -0
- package/dist/testing/laravel/extractors/factory-extractor.d.ts.map +1 -0
- package/dist/testing/laravel/extractors/factory-extractor.js +197 -0
- package/dist/testing/laravel/extractors/factory-extractor.js.map +1 -0
- package/dist/testing/laravel/extractors/index.d.ts +9 -0
- package/dist/testing/laravel/extractors/index.d.ts.map +1 -0
- package/dist/testing/laravel/extractors/index.js +9 -0
- package/dist/testing/laravel/extractors/index.js.map +1 -0
- package/dist/testing/laravel/extractors/mock-extractor.d.ts +62 -0
- package/dist/testing/laravel/extractors/mock-extractor.d.ts.map +1 -0
- package/dist/testing/laravel/extractors/mock-extractor.js +305 -0
- package/dist/testing/laravel/extractors/mock-extractor.js.map +1 -0
- package/dist/testing/laravel/extractors/test-case-extractor.d.ts +23 -0
- package/dist/testing/laravel/extractors/test-case-extractor.d.ts.map +1 -0
- package/dist/testing/laravel/extractors/test-case-extractor.js +143 -0
- package/dist/testing/laravel/extractors/test-case-extractor.js.map +1 -0
- package/dist/testing/laravel/index.d.ts +9 -0
- package/dist/testing/laravel/index.d.ts.map +1 -0
- package/dist/testing/laravel/index.js +9 -0
- package/dist/testing/laravel/index.js.map +1 -0
- package/dist/testing/laravel/testing-detector.d.ts +28 -0
- package/dist/testing/laravel/testing-detector.d.ts.map +1 -0
- package/dist/testing/laravel/testing-detector.js +52 -0
- package/dist/testing/laravel/testing-detector.js.map +1 -0
- package/dist/testing/laravel/testing-semantic.d.ts +27 -0
- package/dist/testing/laravel/testing-semantic.d.ts.map +1 -0
- package/dist/testing/laravel/testing-semantic.js +130 -0
- package/dist/testing/laravel/testing-semantic.js.map +1 -0
- package/dist/testing/laravel/types.d.ts +163 -0
- package/dist/testing/laravel/types.d.ts.map +1 -0
- package/dist/testing/laravel/types.js +47 -0
- package/dist/testing/laravel/types.js.map +1 -0
- package/dist/types/aspnet/index.d.ts +6 -0
- package/dist/types/aspnet/index.d.ts.map +1 -0
- package/dist/types/aspnet/index.js +6 -0
- package/dist/types/aspnet/index.js.map +1 -0
- package/dist/types/aspnet/record-patterns-detector.d.ts +43 -0
- package/dist/types/aspnet/record-patterns-detector.d.ts.map +1 -0
- package/dist/types/aspnet/record-patterns-detector.js +95 -0
- package/dist/types/aspnet/record-patterns-detector.js.map +1 -0
- package/dist/types/aspnet/record-patterns-semantic.d.ts +38 -0
- package/dist/types/aspnet/record-patterns-semantic.d.ts.map +1 -0
- package/dist/types/aspnet/record-patterns-semantic.js +145 -0
- package/dist/types/aspnet/record-patterns-semantic.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/validation/laravel/validation-semantic.d.ts +26 -0
- package/dist/validation/laravel/validation-semantic.d.ts.map +1 -0
- package/dist/validation/laravel/validation-semantic.js +118 -0
- package/dist/validation/laravel/validation-semantic.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel API Patterns Detector - SEMANTIC VERSION
|
|
3
|
+
*
|
|
4
|
+
* Learns API patterns from your Laravel codebase:
|
|
5
|
+
* - Controller patterns (resource, invokable, API)
|
|
6
|
+
* - Route patterns (RESTful, API versioning)
|
|
7
|
+
* - Response patterns (JSON, Resources, Collections)
|
|
8
|
+
* - Request handling patterns
|
|
9
|
+
*/
|
|
10
|
+
import type { Violation, Language } from 'driftdetect-core';
|
|
11
|
+
import { SemanticDetector, type SemanticMatch, type UsagePattern } from '../../base/semantic-detector.js';
|
|
12
|
+
export declare class LaravelAPISemanticDetector extends SemanticDetector {
|
|
13
|
+
readonly id = "api/laravel-api-semantic";
|
|
14
|
+
readonly name = "Laravel API Patterns Detector";
|
|
15
|
+
readonly description = "Learns API patterns from your Laravel codebase";
|
|
16
|
+
readonly category: "api";
|
|
17
|
+
readonly subcategory = "laravel";
|
|
18
|
+
readonly supportedLanguages: Language[];
|
|
19
|
+
constructor();
|
|
20
|
+
protected getSemanticKeywords(): string[];
|
|
21
|
+
protected getSemanticCategory(): string;
|
|
22
|
+
protected isRelevantMatch(match: SemanticMatch): boolean;
|
|
23
|
+
protected createPatternViolation(match: SemanticMatch, dominantPattern: UsagePattern): Violation;
|
|
24
|
+
}
|
|
25
|
+
export declare function createLaravelAPISemanticDetector(): LaravelAPISemanticDetector;
|
|
26
|
+
//# sourceMappingURL=api-semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-semantic.d.ts","sourceRoot":"","sources":["../../../src/api/laravel/api-semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAezC,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,QAAQ,CAAC,EAAE,8BAA8B;IACzC,QAAQ,CAAC,IAAI,mCAAmC;IAChD,QAAQ,CAAC,WAAW,oDAAoD;IACxE,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,WAAW,aAAa;IAEjC,SAAkB,kBAAkB,EAAE,QAAQ,EAAE,CAAW;;IAY3D,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAkCzC,SAAS,CAAC,mBAAmB,IAAI,MAAM;cAKpB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IA6BjE,SAAS,CAAC,sBAAsB,CAC9B,KAAK,EAAE,aAAa,EACpB,eAAe,EAAE,YAAY,GAC5B,SAAS;CAoBb;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel API Patterns Detector - SEMANTIC VERSION
|
|
3
|
+
*
|
|
4
|
+
* Learns API patterns from your Laravel codebase:
|
|
5
|
+
* - Controller patterns (resource, invokable, API)
|
|
6
|
+
* - Route patterns (RESTful, API versioning)
|
|
7
|
+
* - Response patterns (JSON, Resources, Collections)
|
|
8
|
+
* - Request handling patterns
|
|
9
|
+
*/
|
|
10
|
+
import { SemanticDetector, } from '../../base/semantic-detector.js';
|
|
11
|
+
const API_FILE_PATTERNS = [
|
|
12
|
+
/controllers\//i, /routes\//i, /resources\//i,
|
|
13
|
+
/api\.php$/i, /requests\//i,
|
|
14
|
+
];
|
|
15
|
+
const API_CONTEXT_KEYWORDS = [
|
|
16
|
+
'illuminate\\routing', 'illuminate\\http',
|
|
17
|
+
'route::', 'response()', 'request()',
|
|
18
|
+
'jsonresource', 'resourcecollection',
|
|
19
|
+
'apiresource', 'controller',
|
|
20
|
+
];
|
|
21
|
+
export class LaravelAPISemanticDetector extends SemanticDetector {
|
|
22
|
+
id = 'api/laravel-api-semantic';
|
|
23
|
+
name = 'Laravel API Patterns Detector';
|
|
24
|
+
description = 'Learns API patterns from your Laravel codebase';
|
|
25
|
+
category = 'api';
|
|
26
|
+
subcategory = 'laravel';
|
|
27
|
+
supportedLanguages = ['php'];
|
|
28
|
+
constructor() {
|
|
29
|
+
super({
|
|
30
|
+
minOccurrences: 2,
|
|
31
|
+
dominanceThreshold: 0.3,
|
|
32
|
+
minFiles: 1,
|
|
33
|
+
includeComments: false,
|
|
34
|
+
includeStrings: false,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
getSemanticKeywords() {
|
|
38
|
+
return [
|
|
39
|
+
// Controllers
|
|
40
|
+
'Controller', 'ResourceController', 'ApiController',
|
|
41
|
+
'index', 'show', 'store', 'update', 'destroy',
|
|
42
|
+
'__invoke', 'callAction',
|
|
43
|
+
// Routes
|
|
44
|
+
'Route', 'get', 'post', 'put', 'patch', 'delete', 'options',
|
|
45
|
+
'resource', 'apiResource', 'singleton',
|
|
46
|
+
'prefix', 'middleware', 'name', 'group',
|
|
47
|
+
'where', 'whereNumber', 'whereAlpha', 'whereUuid',
|
|
48
|
+
// Responses
|
|
49
|
+
'response', 'json', 'jsonResponse', 'download', 'file', 'redirect',
|
|
50
|
+
'JsonResource', 'ResourceCollection', 'AnonymousResourceCollection',
|
|
51
|
+
'toArray', 'with', 'additional', 'wrap',
|
|
52
|
+
// Requests
|
|
53
|
+
'Request', 'FormRequest', 'input', 'query', 'all', 'only', 'except',
|
|
54
|
+
'validated', 'validate', 'rules', 'authorize',
|
|
55
|
+
'has', 'filled', 'missing', 'whenHas', 'whenFilled',
|
|
56
|
+
// API versioning
|
|
57
|
+
'v1', 'v2', 'api', 'version',
|
|
58
|
+
// Rate limiting
|
|
59
|
+
'throttle', 'RateLimiter',
|
|
60
|
+
// Sanctum/Passport
|
|
61
|
+
'sanctum', 'passport', 'token', 'abilities',
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
getSemanticCategory() {
|
|
65
|
+
return 'api';
|
|
66
|
+
}
|
|
67
|
+
isRelevantMatch(match) {
|
|
68
|
+
const { file, lineContent, surroundingContext, keyword } = match;
|
|
69
|
+
const contextLower = surroundingContext.toLowerCase();
|
|
70
|
+
const highConfidenceKeywords = [
|
|
71
|
+
'Controller', 'Route', 'JsonResource', 'ResourceCollection',
|
|
72
|
+
'FormRequest', 'apiResource', 'sanctum', 'passport',
|
|
73
|
+
];
|
|
74
|
+
if (highConfidenceKeywords.includes(keyword)) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
if (/^\s*\/\//.test(lineContent) || /^\s*\/\*/.test(lineContent)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const ambiguousKeywords = ['get', 'post', 'put', 'delete', 'index', 'show', 'store', 'update'];
|
|
81
|
+
if (ambiguousKeywords.includes(keyword.toLowerCase())) {
|
|
82
|
+
const hasContext = API_CONTEXT_KEYWORDS.some(k => contextLower.includes(k));
|
|
83
|
+
if (!hasContext) {
|
|
84
|
+
const inApiFile = API_FILE_PATTERNS.some(p => p.test(file));
|
|
85
|
+
if (!inApiFile)
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
createPatternViolation(match, dominantPattern) {
|
|
92
|
+
return {
|
|
93
|
+
id: `${this.id}-${match.file}-${match.line}-${match.column}`,
|
|
94
|
+
patternId: this.id,
|
|
95
|
+
severity: 'warning',
|
|
96
|
+
file: match.file,
|
|
97
|
+
range: {
|
|
98
|
+
start: { line: match.line - 1, character: match.column - 1 },
|
|
99
|
+
end: { line: match.line - 1, character: match.column + match.matchedText.length - 1 },
|
|
100
|
+
},
|
|
101
|
+
message: `Inconsistent API pattern: using '${match.contextType}' but project primarily uses '${dominantPattern.contextType}'`,
|
|
102
|
+
expected: dominantPattern.contextType,
|
|
103
|
+
actual: match.contextType,
|
|
104
|
+
explanation: `Your Laravel project uses '${dominantPattern.contextType}' for API patterns in ${dominantPattern.percentage.toFixed(0)}% of cases.`,
|
|
105
|
+
aiExplainAvailable: true,
|
|
106
|
+
aiFixAvailable: true,
|
|
107
|
+
firstSeen: new Date(),
|
|
108
|
+
occurrences: 1,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function createLaravelAPISemanticDetector() {
|
|
113
|
+
return new LaravelAPISemanticDetector();
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=api-semantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-semantic.js","sourceRoot":"","sources":["../../../src/api/laravel/api-semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel Async Patterns Detector - SEMANTIC VERSION
|
|
3
|
+
*
|
|
4
|
+
* Learns async patterns from your Laravel codebase:
|
|
5
|
+
* - Job patterns (dispatch, queues)
|
|
6
|
+
* - Event patterns (listeners, subscribers)
|
|
7
|
+
* - Broadcasting patterns
|
|
8
|
+
* - Scheduled tasks
|
|
9
|
+
*/
|
|
10
|
+
import type { Violation, Language } from 'driftdetect-core';
|
|
11
|
+
import { SemanticDetector, type SemanticMatch, type UsagePattern } from '../../base/semantic-detector.js';
|
|
12
|
+
export declare class LaravelAsyncSemanticDetector extends SemanticDetector {
|
|
13
|
+
readonly id = "async/laravel-async-semantic";
|
|
14
|
+
readonly name = "Laravel Async Patterns Detector";
|
|
15
|
+
readonly description = "Learns async patterns (jobs, events, queues) from your Laravel codebase";
|
|
16
|
+
readonly category: "performance";
|
|
17
|
+
readonly subcategory = "laravel";
|
|
18
|
+
readonly supportedLanguages: Language[];
|
|
19
|
+
constructor();
|
|
20
|
+
protected getSemanticKeywords(): string[];
|
|
21
|
+
protected getSemanticCategory(): string;
|
|
22
|
+
protected isRelevantMatch(match: SemanticMatch): boolean;
|
|
23
|
+
protected createPatternViolation(match: SemanticMatch, dominantPattern: UsagePattern): Violation;
|
|
24
|
+
}
|
|
25
|
+
export declare function createLaravelAsyncSemanticDetector(): LaravelAsyncSemanticDetector;
|
|
26
|
+
//# sourceMappingURL=async-semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-semantic.d.ts","sourceRoot":"","sources":["../../../src/async/laravel/async-semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAiBzC,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,QAAQ,CAAC,EAAE,kCAAkC;IAC7C,QAAQ,CAAC,IAAI,qCAAqC;IAClD,QAAQ,CAAC,WAAW,6EAA6E;IACjG,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,WAAW,aAAa;IAEjC,SAAkB,kBAAkB,EAAE,QAAQ,EAAE,CAAW;;IAY3D,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAiCzC,SAAS,CAAC,mBAAmB,IAAI,MAAM;cAKpB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IA8BjE,SAAS,CAAC,sBAAsB,CAC9B,KAAK,EAAE,aAAa,EACpB,eAAe,EAAE,YAAY,GAC5B,SAAS;CAoBb;AAED,wBAAgB,kCAAkC,IAAI,4BAA4B,CAEjF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laravel Async Patterns Detector - SEMANTIC VERSION
|
|
3
|
+
*
|
|
4
|
+
* Learns async patterns from your Laravel codebase:
|
|
5
|
+
* - Job patterns (dispatch, queues)
|
|
6
|
+
* - Event patterns (listeners, subscribers)
|
|
7
|
+
* - Broadcasting patterns
|
|
8
|
+
* - Scheduled tasks
|
|
9
|
+
*/
|
|
10
|
+
import { SemanticDetector, } from '../../base/semantic-detector.js';
|
|
11
|
+
const ASYNC_FILE_PATTERNS = [
|
|
12
|
+
/jobs\//i, /events\//i, /listeners\//i,
|
|
13
|
+
/subscribers\//i, /broadcasting\//i,
|
|
14
|
+
/console\/kernel/i,
|
|
15
|
+
];
|
|
16
|
+
const ASYNC_CONTEXT_KEYWORDS = [
|
|
17
|
+
'illuminate\\contracts\\queue',
|
|
18
|
+
'illuminate\\bus\\queueable',
|
|
19
|
+
'illuminate\\queue\\interactswithqueue',
|
|
20
|
+
'shouldqueue', 'dispatchable', 'queueable',
|
|
21
|
+
'dispatch(', 'event(', 'broadcast(',
|
|
22
|
+
];
|
|
23
|
+
export class LaravelAsyncSemanticDetector extends SemanticDetector {
|
|
24
|
+
id = 'async/laravel-async-semantic';
|
|
25
|
+
name = 'Laravel Async Patterns Detector';
|
|
26
|
+
description = 'Learns async patterns (jobs, events, queues) from your Laravel codebase';
|
|
27
|
+
category = 'performance';
|
|
28
|
+
subcategory = 'laravel';
|
|
29
|
+
supportedLanguages = ['php'];
|
|
30
|
+
constructor() {
|
|
31
|
+
super({
|
|
32
|
+
minOccurrences: 2,
|
|
33
|
+
dominanceThreshold: 0.3,
|
|
34
|
+
minFiles: 1,
|
|
35
|
+
includeComments: false,
|
|
36
|
+
includeStrings: false,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getSemanticKeywords() {
|
|
40
|
+
return [
|
|
41
|
+
// Jobs
|
|
42
|
+
'Job', 'ShouldQueue', 'Dispatchable', 'Queueable', 'InteractsWithQueue',
|
|
43
|
+
'SerializesModels', 'dispatch', 'dispatchSync', 'dispatchNow',
|
|
44
|
+
'dispatchAfterResponse', 'handle', 'failed', 'retryUntil',
|
|
45
|
+
'tries', 'timeout', 'backoff', 'maxExceptions',
|
|
46
|
+
'onQueue', 'onConnection', 'delay', 'afterCommit',
|
|
47
|
+
// Batches
|
|
48
|
+
'Bus', 'batch', 'chain', 'Batch', 'PendingBatch',
|
|
49
|
+
'allowFailures', 'then', 'catch', 'finally',
|
|
50
|
+
// Events
|
|
51
|
+
'Event', 'event', 'Listener', 'listen', 'subscribe',
|
|
52
|
+
'ShouldBroadcast', 'ShouldBroadcastNow', 'broadcastOn',
|
|
53
|
+
'broadcastAs', 'broadcastWith', 'broadcastWhen',
|
|
54
|
+
// Broadcasting
|
|
55
|
+
'broadcast', 'Channel', 'PrivateChannel', 'PresenceChannel',
|
|
56
|
+
'Pusher', 'Echo', 'whisper', 'here', 'joining', 'leaving',
|
|
57
|
+
// Scheduling
|
|
58
|
+
'schedule', 'command', 'call', 'job', 'exec',
|
|
59
|
+
'everyMinute', 'hourly', 'daily', 'weekly', 'monthly',
|
|
60
|
+
'cron', 'timezone', 'withoutOverlapping', 'runInBackground',
|
|
61
|
+
// Notifications
|
|
62
|
+
'Notification', 'notify', 'notifyNow', 'Notifiable',
|
|
63
|
+
'via', 'toMail', 'toDatabase', 'toArray', 'toBroadcast',
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
getSemanticCategory() {
|
|
67
|
+
return 'async';
|
|
68
|
+
}
|
|
69
|
+
isRelevantMatch(match) {
|
|
70
|
+
const { file, lineContent, surroundingContext, keyword } = match;
|
|
71
|
+
const contextLower = surroundingContext.toLowerCase();
|
|
72
|
+
const highConfidenceKeywords = [
|
|
73
|
+
'Job', 'ShouldQueue', 'Dispatchable', 'dispatch',
|
|
74
|
+
'Event', 'Listener', 'ShouldBroadcast', 'broadcast',
|
|
75
|
+
'Notification', 'schedule', 'Bus', 'batch',
|
|
76
|
+
];
|
|
77
|
+
if (highConfidenceKeywords.includes(keyword)) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
if (/^\s*\/\//.test(lineContent) || /^\s*\/\*/.test(lineContent)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const ambiguousKeywords = ['handle', 'event', 'listen', 'call', 'job'];
|
|
84
|
+
if (ambiguousKeywords.includes(keyword.toLowerCase())) {
|
|
85
|
+
const hasContext = ASYNC_CONTEXT_KEYWORDS.some(k => contextLower.includes(k));
|
|
86
|
+
if (!hasContext) {
|
|
87
|
+
const inAsyncFile = ASYNC_FILE_PATTERNS.some(p => p.test(file));
|
|
88
|
+
if (!inAsyncFile)
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
createPatternViolation(match, dominantPattern) {
|
|
95
|
+
return {
|
|
96
|
+
id: `${this.id}-${match.file}-${match.line}-${match.column}`,
|
|
97
|
+
patternId: this.id,
|
|
98
|
+
severity: 'warning',
|
|
99
|
+
file: match.file,
|
|
100
|
+
range: {
|
|
101
|
+
start: { line: match.line - 1, character: match.column - 1 },
|
|
102
|
+
end: { line: match.line - 1, character: match.column + match.matchedText.length - 1 },
|
|
103
|
+
},
|
|
104
|
+
message: `Inconsistent async pattern: using '${match.contextType}' but project primarily uses '${dominantPattern.contextType}'`,
|
|
105
|
+
expected: dominantPattern.contextType,
|
|
106
|
+
actual: match.contextType,
|
|
107
|
+
explanation: `Your Laravel project uses '${dominantPattern.contextType}' for async patterns in ${dominantPattern.percentage.toFixed(0)}% of cases.`,
|
|
108
|
+
aiExplainAvailable: true,
|
|
109
|
+
aiFixAvailable: true,
|
|
110
|
+
firstSeen: new Date(),
|
|
111
|
+
occurrences: 1,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function createLaravelAsyncSemanticDetector() {
|
|
116
|
+
return new LaravelAsyncSemanticDetector();
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=async-semantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-semantic.js","sourceRoot":"","sources":["../../../src/async/laravel/async-semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ASP.NET Core Authorize Attribute Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects authorization patterns in ASP.NET Core applications:
|
|
5
|
+
* - [Authorize] attribute usage
|
|
6
|
+
* - [Authorize(Roles = "...")] role-based authorization
|
|
7
|
+
* - [Authorize(Policy = "...")] policy-based authorization
|
|
8
|
+
* - [AllowAnonymous] exceptions
|
|
9
|
+
* - Authorization at controller vs action level
|
|
10
|
+
*/
|
|
11
|
+
import type { Language } from 'driftdetect-core';
|
|
12
|
+
import type { DetectionContext, DetectionResult } from '../../base/base-detector.js';
|
|
13
|
+
import { BaseDetector } from '../../base/base-detector.js';
|
|
14
|
+
export interface AuthorizeAttributeInfo {
|
|
15
|
+
/** Type of authorization */
|
|
16
|
+
type: 'authorize' | 'allow-anonymous' | 'authorize-roles' | 'authorize-policy';
|
|
17
|
+
/** Roles if specified */
|
|
18
|
+
roles: string[];
|
|
19
|
+
/** Policy name if specified */
|
|
20
|
+
policy: string | null;
|
|
21
|
+
/** Authentication schemes if specified */
|
|
22
|
+
authenticationSchemes: string[];
|
|
23
|
+
/** Whether this is at controller level */
|
|
24
|
+
isControllerLevel: boolean;
|
|
25
|
+
/** The target (controller name or action name) */
|
|
26
|
+
target: string;
|
|
27
|
+
/** Line number */
|
|
28
|
+
line: number;
|
|
29
|
+
/** File path */
|
|
30
|
+
file: string;
|
|
31
|
+
}
|
|
32
|
+
export interface AuthorizationAnalysis {
|
|
33
|
+
/** All authorization attributes found */
|
|
34
|
+
attributes: AuthorizeAttributeInfo[];
|
|
35
|
+
/** Controllers with authorization */
|
|
36
|
+
authorizedControllers: string[];
|
|
37
|
+
/** Actions with authorization */
|
|
38
|
+
authorizedActions: string[];
|
|
39
|
+
/** Actions with AllowAnonymous */
|
|
40
|
+
anonymousActions: string[];
|
|
41
|
+
/** Unique roles used */
|
|
42
|
+
roles: string[];
|
|
43
|
+
/** Unique policies used */
|
|
44
|
+
policies: string[];
|
|
45
|
+
/** Whether authorization is consistent */
|
|
46
|
+
isConsistent: boolean;
|
|
47
|
+
/** Confidence score */
|
|
48
|
+
confidence: number;
|
|
49
|
+
}
|
|
50
|
+
export declare class AuthorizeAttributeDetector extends BaseDetector {
|
|
51
|
+
readonly id = "auth/aspnet-authorize-attribute";
|
|
52
|
+
readonly category: "auth";
|
|
53
|
+
readonly subcategory = "authorization";
|
|
54
|
+
readonly name = "ASP.NET Authorize Attribute Detector";
|
|
55
|
+
readonly description = "Detects [Authorize] and [AllowAnonymous] attribute patterns in ASP.NET Core";
|
|
56
|
+
readonly supportedLanguages: Language[];
|
|
57
|
+
readonly detectionMethod: "regex";
|
|
58
|
+
detect(context: DetectionContext): Promise<DetectionResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Check if file is relevant for authorization detection
|
|
61
|
+
*/
|
|
62
|
+
private isRelevantFile;
|
|
63
|
+
/**
|
|
64
|
+
* Analyze authorization patterns in the file
|
|
65
|
+
*/
|
|
66
|
+
analyzeAuthorization(content: string, file: string): AuthorizationAnalysis;
|
|
67
|
+
/**
|
|
68
|
+
* Parse [Authorize(...)] arguments
|
|
69
|
+
*/
|
|
70
|
+
private parseAuthorizeArgs;
|
|
71
|
+
/**
|
|
72
|
+
* Check if authorization patterns are consistent
|
|
73
|
+
*/
|
|
74
|
+
private checkConsistency;
|
|
75
|
+
/**
|
|
76
|
+
* Detect potential authorization violations
|
|
77
|
+
*/
|
|
78
|
+
private detectViolations;
|
|
79
|
+
generateQuickFix(): null;
|
|
80
|
+
}
|
|
81
|
+
export declare function createAuthorizeAttributeDetector(): AuthorizeAttributeDetector;
|
|
82
|
+
//# sourceMappingURL=authorize-attribute-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize-attribute-detector.d.ts","sourceRoot":"","sources":["../../../src/auth/aspnet/authorize-attribute-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAA2B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM3D,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,IAAI,EAAE,WAAW,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IAC/E,yBAAyB;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0CAA0C;IAC1C,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,0CAA0C;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,qCAAqC;IACrC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iCAAiC;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,0BAA2B,SAAQ,YAAY;IAC1D,QAAQ,CAAC,EAAE,qCAAqC;IAChD,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,IAAI,0CAA0C;IACvD,QAAQ,CAAC,WAAW,iFAAiF;IACrG,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAc;IACrD,QAAQ,CAAC,eAAe,EAAG,OAAO,CAAU;IAEtC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoCjE;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAoH1E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4CxB,gBAAgB,IAAI,IAAI;CAGzB;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ASP.NET Core Authorize Attribute Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects authorization patterns in ASP.NET Core applications:
|
|
5
|
+
* - [Authorize] attribute usage
|
|
6
|
+
* - [Authorize(Roles = "...")] role-based authorization
|
|
7
|
+
* - [Authorize(Policy = "...")] policy-based authorization
|
|
8
|
+
* - [AllowAnonymous] exceptions
|
|
9
|
+
* - Authorization at controller vs action level
|
|
10
|
+
*/
|
|
11
|
+
import { BaseDetector } from '../../base/base-detector.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Detector Implementation
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export class AuthorizeAttributeDetector extends BaseDetector {
|
|
16
|
+
id = 'auth/aspnet-authorize-attribute';
|
|
17
|
+
category = 'auth';
|
|
18
|
+
subcategory = 'authorization';
|
|
19
|
+
name = 'ASP.NET Authorize Attribute Detector';
|
|
20
|
+
description = 'Detects [Authorize] and [AllowAnonymous] attribute patterns in ASP.NET Core';
|
|
21
|
+
supportedLanguages = ['csharp'];
|
|
22
|
+
detectionMethod = 'regex';
|
|
23
|
+
async detect(context) {
|
|
24
|
+
const { content, file } = context;
|
|
25
|
+
// Only process C# files that look like controllers or have auth attributes
|
|
26
|
+
if (!this.isRelevantFile(content)) {
|
|
27
|
+
return this.createEmptyResult();
|
|
28
|
+
}
|
|
29
|
+
const analysis = this.analyzeAuthorization(content, file);
|
|
30
|
+
const patterns = [];
|
|
31
|
+
const violations = [];
|
|
32
|
+
// Create pattern matches for each authorization attribute
|
|
33
|
+
for (const attr of analysis.attributes) {
|
|
34
|
+
patterns.push({
|
|
35
|
+
patternId: `${this.id}/${attr.type}`,
|
|
36
|
+
location: {
|
|
37
|
+
file: attr.file,
|
|
38
|
+
line: attr.line,
|
|
39
|
+
column: 1,
|
|
40
|
+
},
|
|
41
|
+
confidence: analysis.confidence,
|
|
42
|
+
isOutlier: false,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Check for potential issues
|
|
46
|
+
violations.push(...this.detectViolations(analysis, file));
|
|
47
|
+
return this.createResult(patterns, violations, analysis.confidence, {
|
|
48
|
+
custom: {
|
|
49
|
+
authorizationAnalysis: analysis,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if file is relevant for authorization detection
|
|
55
|
+
*/
|
|
56
|
+
isRelevantFile(content) {
|
|
57
|
+
return (content.includes('[Authorize') ||
|
|
58
|
+
content.includes('[AllowAnonymous]') ||
|
|
59
|
+
content.includes('ControllerBase') ||
|
|
60
|
+
content.includes(': Controller'));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Analyze authorization patterns in the file
|
|
64
|
+
*/
|
|
65
|
+
analyzeAuthorization(content, file) {
|
|
66
|
+
const attributes = [];
|
|
67
|
+
const authorizedControllers = [];
|
|
68
|
+
const authorizedActions = [];
|
|
69
|
+
const anonymousActions = [];
|
|
70
|
+
const roles = new Set();
|
|
71
|
+
const policies = new Set();
|
|
72
|
+
const lines = content.split('\n');
|
|
73
|
+
let currentController = null;
|
|
74
|
+
let pendingAttributes = [];
|
|
75
|
+
for (let i = 0; i < lines.length; i++) {
|
|
76
|
+
const line = lines[i] || '';
|
|
77
|
+
const lineNum = i + 1;
|
|
78
|
+
// Detect [Authorize] attributes
|
|
79
|
+
const authorizeMatch = line.match(/\[Authorize(?:\s*\(([^)]*)\))?\]/);
|
|
80
|
+
if (authorizeMatch) {
|
|
81
|
+
const args = authorizeMatch[1] || '';
|
|
82
|
+
const attrInfo = this.parseAuthorizeArgs(args);
|
|
83
|
+
// Add roles and policies to sets
|
|
84
|
+
attrInfo.roles.forEach(r => roles.add(r));
|
|
85
|
+
if (attrInfo.policy)
|
|
86
|
+
policies.add(attrInfo.policy);
|
|
87
|
+
pendingAttributes.push({
|
|
88
|
+
type: attrInfo.roles.length > 0 ? 'authorize-roles' :
|
|
89
|
+
attrInfo.policy ? 'authorize-policy' : 'authorize',
|
|
90
|
+
roles: attrInfo.roles,
|
|
91
|
+
policy: attrInfo.policy,
|
|
92
|
+
schemes: attrInfo.schemes,
|
|
93
|
+
line: lineNum,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Detect [AllowAnonymous]
|
|
97
|
+
if (line.includes('[AllowAnonymous]')) {
|
|
98
|
+
pendingAttributes.push({
|
|
99
|
+
type: 'allow-anonymous',
|
|
100
|
+
roles: [],
|
|
101
|
+
policy: null,
|
|
102
|
+
schemes: [],
|
|
103
|
+
line: lineNum,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Detect controller class
|
|
107
|
+
const controllerMatch = line.match(/public\s+class\s+(\w+Controller)\s*:/);
|
|
108
|
+
if (controllerMatch && controllerMatch[1]) {
|
|
109
|
+
currentController = controllerMatch[1];
|
|
110
|
+
// Apply pending attributes to controller
|
|
111
|
+
for (const attr of pendingAttributes) {
|
|
112
|
+
attributes.push({
|
|
113
|
+
type: attr.type,
|
|
114
|
+
roles: attr.roles,
|
|
115
|
+
policy: attr.policy,
|
|
116
|
+
authenticationSchemes: attr.schemes,
|
|
117
|
+
isControllerLevel: true,
|
|
118
|
+
target: currentController,
|
|
119
|
+
line: attr.line,
|
|
120
|
+
file,
|
|
121
|
+
});
|
|
122
|
+
if (attr.type !== 'allow-anonymous') {
|
|
123
|
+
authorizedControllers.push(currentController);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
pendingAttributes = [];
|
|
127
|
+
}
|
|
128
|
+
// Detect action methods
|
|
129
|
+
const actionMatch = line.match(/public\s+(?:async\s+)?(?:Task<)?(?:ActionResult|IActionResult|[\w<>]+)\s+(\w+)\s*\(/);
|
|
130
|
+
if (actionMatch && actionMatch[1] && currentController) {
|
|
131
|
+
const actionName = actionMatch[1];
|
|
132
|
+
// Apply pending attributes to action
|
|
133
|
+
for (const attr of pendingAttributes) {
|
|
134
|
+
attributes.push({
|
|
135
|
+
type: attr.type,
|
|
136
|
+
roles: attr.roles,
|
|
137
|
+
policy: attr.policy,
|
|
138
|
+
authenticationSchemes: attr.schemes,
|
|
139
|
+
isControllerLevel: false,
|
|
140
|
+
target: actionName,
|
|
141
|
+
line: attr.line,
|
|
142
|
+
file,
|
|
143
|
+
});
|
|
144
|
+
if (attr.type === 'allow-anonymous') {
|
|
145
|
+
anonymousActions.push(`${currentController}.${actionName}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
authorizedActions.push(`${currentController}.${actionName}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
pendingAttributes = [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Calculate consistency
|
|
155
|
+
const isConsistent = this.checkConsistency(attributes);
|
|
156
|
+
const confidence = attributes.length > 0 ? 0.9 : 0;
|
|
157
|
+
return {
|
|
158
|
+
attributes,
|
|
159
|
+
authorizedControllers: [...new Set(authorizedControllers)],
|
|
160
|
+
authorizedActions: [...new Set(authorizedActions)],
|
|
161
|
+
anonymousActions: [...new Set(anonymousActions)],
|
|
162
|
+
roles: Array.from(roles),
|
|
163
|
+
policies: Array.from(policies),
|
|
164
|
+
isConsistent,
|
|
165
|
+
confidence,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Parse [Authorize(...)] arguments
|
|
170
|
+
*/
|
|
171
|
+
parseAuthorizeArgs(args) {
|
|
172
|
+
const roles = [];
|
|
173
|
+
let policy = null;
|
|
174
|
+
const schemes = [];
|
|
175
|
+
if (!args)
|
|
176
|
+
return { roles, policy, schemes };
|
|
177
|
+
// Extract Roles
|
|
178
|
+
const rolesMatch = args.match(/Roles\s*=\s*["']([^"']+)["']/);
|
|
179
|
+
if (rolesMatch && rolesMatch[1]) {
|
|
180
|
+
roles.push(...rolesMatch[1].split(',').map(r => r.trim()));
|
|
181
|
+
}
|
|
182
|
+
// Extract Policy
|
|
183
|
+
const policyMatch = args.match(/Policy\s*=\s*["']([^"']+)["']/);
|
|
184
|
+
if (policyMatch && policyMatch[1]) {
|
|
185
|
+
policy = policyMatch[1];
|
|
186
|
+
}
|
|
187
|
+
// Extract AuthenticationSchemes
|
|
188
|
+
const schemesMatch = args.match(/AuthenticationSchemes\s*=\s*["']([^"']+)["']/);
|
|
189
|
+
if (schemesMatch && schemesMatch[1]) {
|
|
190
|
+
schemes.push(...schemesMatch[1].split(',').map(s => s.trim()));
|
|
191
|
+
}
|
|
192
|
+
return { roles, policy, schemes };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if authorization patterns are consistent
|
|
196
|
+
*/
|
|
197
|
+
checkConsistency(attributes) {
|
|
198
|
+
if (attributes.length < 2)
|
|
199
|
+
return true;
|
|
200
|
+
// Check if mixing roles and policies inconsistently
|
|
201
|
+
const hasRoles = attributes.some(a => a.roles.length > 0);
|
|
202
|
+
const hasPolicies = attributes.some(a => a.policy !== null);
|
|
203
|
+
// Mixing roles and policies is fine in ASP.NET Core
|
|
204
|
+
// Consider inconsistent only if there's a clear anti-pattern
|
|
205
|
+
// For now, having both is acceptable
|
|
206
|
+
if (hasRoles && hasPolicies) {
|
|
207
|
+
// Both approaches used - this is actually fine in ASP.NET Core
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Detect potential authorization violations
|
|
214
|
+
*/
|
|
215
|
+
detectViolations(analysis, file) {
|
|
216
|
+
const violations = [];
|
|
217
|
+
// Check for controllers without any authorization
|
|
218
|
+
const controllerAttrs = analysis.attributes.filter(a => a.isControllerLevel);
|
|
219
|
+
const actionAttrs = analysis.attributes.filter(a => !a.isControllerLevel);
|
|
220
|
+
// If some actions have auth but controller doesn't, might be inconsistent
|
|
221
|
+
if (controllerAttrs.length === 0 && actionAttrs.length > 0) {
|
|
222
|
+
// Check if all actions have auth or if some are missing
|
|
223
|
+
// This is informational, not necessarily a violation
|
|
224
|
+
}
|
|
225
|
+
// Check for [AllowAnonymous] on sensitive-looking endpoints
|
|
226
|
+
for (const attr of analysis.attributes) {
|
|
227
|
+
if (attr.type === 'allow-anonymous') {
|
|
228
|
+
const target = attr.target.toLowerCase();
|
|
229
|
+
if (target.includes('admin') || target.includes('delete') || target.includes('update')) {
|
|
230
|
+
violations.push({
|
|
231
|
+
id: `${this.id}-${file}-${attr.line}-sensitive-anonymous`,
|
|
232
|
+
patternId: this.id,
|
|
233
|
+
severity: 'warning',
|
|
234
|
+
file,
|
|
235
|
+
range: {
|
|
236
|
+
start: { line: attr.line - 1, character: 0 },
|
|
237
|
+
end: { line: attr.line - 1, character: 100 },
|
|
238
|
+
},
|
|
239
|
+
message: `[AllowAnonymous] on potentially sensitive endpoint: ${attr.target}`,
|
|
240
|
+
expected: '[Authorize]',
|
|
241
|
+
actual: '[AllowAnonymous]',
|
|
242
|
+
explanation: `The endpoint '${attr.target}' appears to be sensitive based on its name, ` +
|
|
243
|
+
`but is marked as [AllowAnonymous]. Consider if this is intentional.`,
|
|
244
|
+
aiExplainAvailable: true,
|
|
245
|
+
aiFixAvailable: false,
|
|
246
|
+
firstSeen: new Date(),
|
|
247
|
+
occurrences: 1,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return violations;
|
|
253
|
+
}
|
|
254
|
+
generateQuickFix() {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
export function createAuthorizeAttributeDetector() {
|
|
259
|
+
return new AuthorizeAttributeDetector();
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=authorize-attribute-detector.js.map
|