@opensip-tools/fitness 1.0.4
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/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-typecheck.log +4 -0
- package/LICENSE +21 -0
- package/dist/__tests__/gate.test.d.ts +13 -0
- package/dist/__tests__/gate.test.d.ts.map +1 -0
- package/dist/__tests__/gate.test.js +422 -0
- package/dist/__tests__/gate.test.js.map +1 -0
- package/dist/__tests__/sarif.test.d.ts +2 -0
- package/dist/__tests__/sarif.test.d.ts.map +1 -0
- package/dist/__tests__/sarif.test.js +169 -0
- package/dist/__tests__/sarif.test.js.map +1 -0
- package/dist/cli/dashboard.d.ts +6 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +77 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/fit.d.ts +37 -0
- package/dist/cli/fit.d.ts.map +1 -0
- package/dist/cli/fit.js +539 -0
- package/dist/cli/fit.js.map +1 -0
- package/dist/cli/list-checks.d.ts +6 -0
- package/dist/cli/list-checks.d.ts.map +1 -0
- package/dist/cli/list-checks.js +23 -0
- package/dist/cli/list-checks.js.map +1 -0
- package/dist/cli/list-recipes.d.ts +6 -0
- package/dist/cli/list-recipes.d.ts.map +1 -0
- package/dist/cli/list-recipes.js +31 -0
- package/dist/cli/list-recipes.js.map +1 -0
- package/dist/framework/__tests__/ast-utilities.test.d.ts +2 -0
- package/dist/framework/__tests__/ast-utilities.test.d.ts.map +1 -0
- package/dist/framework/__tests__/ast-utilities.test.js +153 -0
- package/dist/framework/__tests__/ast-utilities.test.js.map +1 -0
- package/dist/framework/__tests__/check-config.test.d.ts +2 -0
- package/dist/framework/__tests__/check-config.test.d.ts.map +1 -0
- package/dist/framework/__tests__/check-config.test.js +56 -0
- package/dist/framework/__tests__/check-config.test.js.map +1 -0
- package/dist/framework/__tests__/command-executor.test.d.ts +2 -0
- package/dist/framework/__tests__/command-executor.test.d.ts.map +1 -0
- package/dist/framework/__tests__/command-executor.test.js +71 -0
- package/dist/framework/__tests__/command-executor.test.js.map +1 -0
- package/dist/framework/__tests__/content-filter-dispatch.test.d.ts +2 -0
- package/dist/framework/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
- package/dist/framework/__tests__/content-filter-dispatch.test.js +104 -0
- package/dist/framework/__tests__/content-filter-dispatch.test.js.map +1 -0
- package/dist/framework/__tests__/content-filter.test.d.ts +2 -0
- package/dist/framework/__tests__/content-filter.test.d.ts.map +1 -0
- package/dist/framework/__tests__/content-filter.test.js +126 -0
- package/dist/framework/__tests__/content-filter.test.js.map +1 -0
- package/dist/framework/__tests__/define-check.test.d.ts +2 -0
- package/dist/framework/__tests__/define-check.test.d.ts.map +1 -0
- package/dist/framework/__tests__/define-check.test.js +155 -0
- package/dist/framework/__tests__/define-check.test.js.map +1 -0
- package/dist/framework/__tests__/directive-inventory.test.d.ts +2 -0
- package/dist/framework/__tests__/directive-inventory.test.d.ts.map +1 -0
- package/dist/framework/__tests__/directive-inventory.test.js +44 -0
- package/dist/framework/__tests__/directive-inventory.test.js.map +1 -0
- package/dist/framework/__tests__/execution-context.test.d.ts +2 -0
- package/dist/framework/__tests__/execution-context.test.d.ts.map +1 -0
- package/dist/framework/__tests__/execution-context.test.js +62 -0
- package/dist/framework/__tests__/execution-context.test.js.map +1 -0
- package/dist/framework/__tests__/file-accessor.test.d.ts +2 -0
- package/dist/framework/__tests__/file-accessor.test.d.ts.map +1 -0
- package/dist/framework/__tests__/file-accessor.test.js +106 -0
- package/dist/framework/__tests__/file-accessor.test.js.map +1 -0
- package/dist/framework/__tests__/file-cache.test.d.ts +2 -0
- package/dist/framework/__tests__/file-cache.test.d.ts.map +1 -0
- package/dist/framework/__tests__/file-cache.test.js +122 -0
- package/dist/framework/__tests__/file-cache.test.js.map +1 -0
- package/dist/framework/__tests__/import-graph.test.d.ts +15 -0
- package/dist/framework/__tests__/import-graph.test.d.ts.map +1 -0
- package/dist/framework/__tests__/import-graph.test.js +164 -0
- package/dist/framework/__tests__/import-graph.test.js.map +1 -0
- package/dist/framework/__tests__/path-matcher.test.d.ts +2 -0
- package/dist/framework/__tests__/path-matcher.test.d.ts.map +1 -0
- package/dist/framework/__tests__/path-matcher.test.js +113 -0
- package/dist/framework/__tests__/path-matcher.test.js.map +1 -0
- package/dist/framework/__tests__/register-helpers.test.d.ts +2 -0
- package/dist/framework/__tests__/register-helpers.test.d.ts.map +1 -0
- package/dist/framework/__tests__/register-helpers.test.js +42 -0
- package/dist/framework/__tests__/register-helpers.test.js.map +1 -0
- package/dist/framework/__tests__/registry.test.d.ts +2 -0
- package/dist/framework/__tests__/registry.test.d.ts.map +1 -0
- package/dist/framework/__tests__/registry.test.js +208 -0
- package/dist/framework/__tests__/registry.test.js.map +1 -0
- package/dist/framework/__tests__/result-builder.test.d.ts +2 -0
- package/dist/framework/__tests__/result-builder.test.d.ts.map +1 -0
- package/dist/framework/__tests__/result-builder.test.js +153 -0
- package/dist/framework/__tests__/result-builder.test.js.map +1 -0
- package/dist/framework/__tests__/scope-resolver.test.d.ts +2 -0
- package/dist/framework/__tests__/scope-resolver.test.d.ts.map +1 -0
- package/dist/framework/__tests__/scope-resolver.test.js +140 -0
- package/dist/framework/__tests__/scope-resolver.test.js.map +1 -0
- package/dist/framework/__tests__/severity-mapping.test.d.ts +2 -0
- package/dist/framework/__tests__/severity-mapping.test.d.ts.map +1 -0
- package/dist/framework/__tests__/severity-mapping.test.js +42 -0
- package/dist/framework/__tests__/severity-mapping.test.js.map +1 -0
- package/dist/framework/__tests__/strip-literals.test.d.ts +2 -0
- package/dist/framework/__tests__/strip-literals.test.d.ts.map +1 -0
- package/dist/framework/__tests__/strip-literals.test.js +87 -0
- package/dist/framework/__tests__/strip-literals.test.js.map +1 -0
- package/dist/framework/abortable-exec.d.ts +34 -0
- package/dist/framework/abortable-exec.d.ts.map +1 -0
- package/dist/framework/abortable-exec.js +136 -0
- package/dist/framework/abortable-exec.js.map +1 -0
- package/dist/framework/ast-utilities.d.ts +41 -0
- package/dist/framework/ast-utilities.d.ts.map +1 -0
- package/dist/framework/ast-utilities.js +106 -0
- package/dist/framework/ast-utilities.js.map +1 -0
- package/dist/framework/check-config.d.ts +171 -0
- package/dist/framework/check-config.d.ts.map +1 -0
- package/dist/framework/check-config.js +114 -0
- package/dist/framework/check-config.js.map +1 -0
- package/dist/framework/check-types.d.ts +57 -0
- package/dist/framework/check-types.d.ts.map +1 -0
- package/dist/framework/check-types.js +35 -0
- package/dist/framework/check-types.js.map +1 -0
- package/dist/framework/command-executor.d.ts +25 -0
- package/dist/framework/command-executor.d.ts.map +1 -0
- package/dist/framework/command-executor.js +63 -0
- package/dist/framework/command-executor.js.map +1 -0
- package/dist/framework/constants.d.ts +9 -0
- package/dist/framework/constants.d.ts.map +1 -0
- package/dist/framework/constants.js +16 -0
- package/dist/framework/constants.js.map +1 -0
- package/dist/framework/content-filter.d.ts +33 -0
- package/dist/framework/content-filter.d.ts.map +1 -0
- package/dist/framework/content-filter.js +236 -0
- package/dist/framework/content-filter.js.map +1 -0
- package/dist/framework/define-check.d.ts +38 -0
- package/dist/framework/define-check.d.ts.map +1 -0
- package/dist/framework/define-check.js +252 -0
- package/dist/framework/define-check.js.map +1 -0
- package/dist/framework/directive-inventory.d.ts +34 -0
- package/dist/framework/directive-inventory.d.ts.map +1 -0
- package/dist/framework/directive-inventory.js +77 -0
- package/dist/framework/directive-inventory.js.map +1 -0
- package/dist/framework/directive-parsing.d.ts +20 -0
- package/dist/framework/directive-parsing.d.ts.map +1 -0
- package/dist/framework/directive-parsing.js +121 -0
- package/dist/framework/directive-parsing.js.map +1 -0
- package/dist/framework/execution-context.d.ts +95 -0
- package/dist/framework/execution-context.d.ts.map +1 -0
- package/dist/framework/execution-context.js +122 -0
- package/dist/framework/execution-context.js.map +1 -0
- package/dist/framework/file-accessor.d.ts +20 -0
- package/dist/framework/file-accessor.d.ts.map +1 -0
- package/dist/framework/file-accessor.js +122 -0
- package/dist/framework/file-accessor.js.map +1 -0
- package/dist/framework/file-cache.d.ts +70 -0
- package/dist/framework/file-cache.d.ts.map +1 -0
- package/dist/framework/file-cache.js +178 -0
- package/dist/framework/file-cache.js.map +1 -0
- package/dist/framework/file-type-filter.d.ts +11 -0
- package/dist/framework/file-type-filter.d.ts.map +1 -0
- package/dist/framework/file-type-filter.js +21 -0
- package/dist/framework/file-type-filter.js.map +1 -0
- package/dist/framework/ignore-processing.d.ts +22 -0
- package/dist/framework/ignore-processing.d.ts.map +1 -0
- package/dist/framework/ignore-processing.js +241 -0
- package/dist/framework/ignore-processing.js.map +1 -0
- package/dist/framework/import-graph.d.ts +51 -0
- package/dist/framework/import-graph.d.ts.map +1 -0
- package/dist/framework/import-graph.js +216 -0
- package/dist/framework/import-graph.js.map +1 -0
- package/dist/framework/memory-profiler.d.ts +53 -0
- package/dist/framework/memory-profiler.d.ts.map +1 -0
- package/dist/framework/memory-profiler.js +92 -0
- package/dist/framework/memory-profiler.js.map +1 -0
- package/dist/framework/parse-cache.d.ts +23 -0
- package/dist/framework/parse-cache.d.ts.map +1 -0
- package/dist/framework/parse-cache.js +37 -0
- package/dist/framework/parse-cache.js.map +1 -0
- package/dist/framework/path-matcher.d.ts +86 -0
- package/dist/framework/path-matcher.d.ts.map +1 -0
- package/dist/framework/path-matcher.js +138 -0
- package/dist/framework/path-matcher.js.map +1 -0
- package/dist/framework/register-helpers.d.ts +10 -0
- package/dist/framework/register-helpers.d.ts.map +1 -0
- package/dist/framework/register-helpers.js +17 -0
- package/dist/framework/register-helpers.js.map +1 -0
- package/dist/framework/registry.d.ts +41 -0
- package/dist/framework/registry.d.ts.map +1 -0
- package/dist/framework/registry.js +103 -0
- package/dist/framework/registry.js.map +1 -0
- package/dist/framework/result-builder.d.ts +74 -0
- package/dist/framework/result-builder.d.ts.map +1 -0
- package/dist/framework/result-builder.js +154 -0
- package/dist/framework/result-builder.js.map +1 -0
- package/dist/framework/scope-resolver.d.ts +23 -0
- package/dist/framework/scope-resolver.d.ts.map +1 -0
- package/dist/framework/scope-resolver.js +201 -0
- package/dist/framework/scope-resolver.js.map +1 -0
- package/dist/framework/severity-mapping.d.ts +13 -0
- package/dist/framework/severity-mapping.d.ts.map +1 -0
- package/dist/framework/severity-mapping.js +51 -0
- package/dist/framework/severity-mapping.js.map +1 -0
- package/dist/framework/strip-literals.d.ts +48 -0
- package/dist/framework/strip-literals.d.ts.map +1 -0
- package/dist/framework/strip-literals.js +188 -0
- package/dist/framework/strip-literals.js.map +1 -0
- package/dist/gate.d.ts +74 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +257 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/__tests__/check-package-discovery.test.d.ts +2 -0
- package/dist/plugins/__tests__/check-package-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/check-package-discovery.test.js +170 -0
- package/dist/plugins/__tests__/check-package-discovery.test.js.map +1 -0
- package/dist/plugins/__tests__/lang-domain.test.d.ts +2 -0
- package/dist/plugins/__tests__/lang-domain.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/lang-domain.test.js +171 -0
- package/dist/plugins/__tests__/lang-domain.test.js.map +1 -0
- package/dist/plugins/__tests__/loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/loader.test.js +194 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/check-package-discovery.d.ts +73 -0
- package/dist/plugins/check-package-discovery.d.ts.map +1 -0
- package/dist/plugins/check-package-discovery.js +212 -0
- package/dist/plugins/check-package-discovery.js.map +1 -0
- package/dist/plugins/loader.d.ts +31 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +290 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +23 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +9 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/recipes/__tests__/built-in-recipes.test.d.ts +2 -0
- package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/built-in-recipes.test.js +93 -0
- package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
- package/dist/recipes/__tests__/check-config.test.d.ts +5 -0
- package/dist/recipes/__tests__/check-config.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/check-config.test.js +37 -0
- package/dist/recipes/__tests__/check-config.test.js.map +1 -0
- package/dist/recipes/__tests__/check-resolution.test.d.ts +2 -0
- package/dist/recipes/__tests__/check-resolution.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/check-resolution.test.js +135 -0
- package/dist/recipes/__tests__/check-resolution.test.js.map +1 -0
- package/dist/recipes/__tests__/registry.test.d.ts +2 -0
- package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/registry.test.js +97 -0
- package/dist/recipes/__tests__/registry.test.js.map +1 -0
- package/dist/recipes/__tests__/retry.test.d.ts +2 -0
- package/dist/recipes/__tests__/retry.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/retry.test.js +75 -0
- package/dist/recipes/__tests__/retry.test.js.map +1 -0
- package/dist/recipes/__tests__/service.test.d.ts +11 -0
- package/dist/recipes/__tests__/service.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/service.test.js +482 -0
- package/dist/recipes/__tests__/service.test.js.map +1 -0
- package/dist/recipes/built-in-recipes.d.ts +14 -0
- package/dist/recipes/built-in-recipes.d.ts.map +1 -0
- package/dist/recipes/built-in-recipes.js +247 -0
- package/dist/recipes/built-in-recipes.js.map +1 -0
- package/dist/recipes/check-config.d.ts +40 -0
- package/dist/recipes/check-config.d.ts.map +1 -0
- package/dist/recipes/check-config.js +61 -0
- package/dist/recipes/check-config.js.map +1 -0
- package/dist/recipes/check-resolution.d.ts +21 -0
- package/dist/recipes/check-resolution.d.ts.map +1 -0
- package/dist/recipes/check-resolution.js +121 -0
- package/dist/recipes/check-resolution.js.map +1 -0
- package/dist/recipes/check-result-processor.d.ts +51 -0
- package/dist/recipes/check-result-processor.d.ts.map +1 -0
- package/dist/recipes/check-result-processor.js +158 -0
- package/dist/recipes/check-result-processor.js.map +1 -0
- package/dist/recipes/parallel-execution.d.ts +33 -0
- package/dist/recipes/parallel-execution.d.ts.map +1 -0
- package/dist/recipes/parallel-execution.js +142 -0
- package/dist/recipes/parallel-execution.js.map +1 -0
- package/dist/recipes/registry.d.ts +81 -0
- package/dist/recipes/registry.d.ts.map +1 -0
- package/dist/recipes/registry.js +131 -0
- package/dist/recipes/registry.js.map +1 -0
- package/dist/recipes/retry.d.ts +25 -0
- package/dist/recipes/retry.d.ts.map +1 -0
- package/dist/recipes/retry.js +44 -0
- package/dist/recipes/retry.js.map +1 -0
- package/dist/recipes/sequential-execution.d.ts +10 -0
- package/dist/recipes/sequential-execution.d.ts.map +1 -0
- package/dist/recipes/sequential-execution.js +122 -0
- package/dist/recipes/sequential-execution.js.map +1 -0
- package/dist/recipes/service-types.d.ts +84 -0
- package/dist/recipes/service-types.d.ts.map +1 -0
- package/dist/recipes/service-types.js +8 -0
- package/dist/recipes/service-types.js.map +1 -0
- package/dist/recipes/service.d.ts +71 -0
- package/dist/recipes/service.d.ts.map +1 -0
- package/dist/recipes/service.js +331 -0
- package/dist/recipes/service.js.map +1 -0
- package/dist/recipes/types.d.ts +154 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +54 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/sarif.d.ts +34 -0
- package/dist/sarif.d.ts.map +1 -0
- package/dist/sarif.js +192 -0
- package/dist/sarif.js.map +1 -0
- package/dist/signalers/__tests__/loader.test.d.ts +2 -0
- package/dist/signalers/__tests__/loader.test.d.ts.map +1 -0
- package/dist/signalers/__tests__/loader.test.js +74 -0
- package/dist/signalers/__tests__/loader.test.js.map +1 -0
- package/dist/signalers/index.d.ts +8 -0
- package/dist/signalers/index.d.ts.map +1 -0
- package/dist/signalers/index.js +9 -0
- package/dist/signalers/index.js.map +1 -0
- package/dist/signalers/loader.d.ts +24 -0
- package/dist/signalers/loader.d.ts.map +1 -0
- package/dist/signalers/loader.js +108 -0
- package/dist/signalers/loader.js.map +1 -0
- package/dist/signalers/schema.d.ts +288 -0
- package/dist/signalers/schema.d.ts.map +1 -0
- package/dist/signalers/schema.js +99 -0
- package/dist/signalers/schema.js.map +1 -0
- package/dist/signalers/types.d.ts +13 -0
- package/dist/signalers/types.d.ts.map +1 -0
- package/dist/signalers/types.js +5 -0
- package/dist/signalers/types.js.map +1 -0
- package/dist/targets/__tests__/loader.test.d.ts +2 -0
- package/dist/targets/__tests__/loader.test.d.ts.map +1 -0
- package/dist/targets/__tests__/loader.test.js +127 -0
- package/dist/targets/__tests__/loader.test.js.map +1 -0
- package/dist/targets/__tests__/resolver.test.d.ts +2 -0
- package/dist/targets/__tests__/resolver.test.d.ts.map +1 -0
- package/dist/targets/__tests__/resolver.test.js +54 -0
- package/dist/targets/__tests__/resolver.test.js.map +1 -0
- package/dist/targets/__tests__/target-registry.test.d.ts +2 -0
- package/dist/targets/__tests__/target-registry.test.d.ts.map +1 -0
- package/dist/targets/__tests__/target-registry.test.js +89 -0
- package/dist/targets/__tests__/target-registry.test.js.map +1 -0
- package/dist/targets/index.d.ts +10 -0
- package/dist/targets/index.d.ts.map +1 -0
- package/dist/targets/index.js +12 -0
- package/dist/targets/index.js.map +1 -0
- package/dist/targets/loader.d.ts +19 -0
- package/dist/targets/loader.d.ts.map +1 -0
- package/dist/targets/loader.js +159 -0
- package/dist/targets/loader.js.map +1 -0
- package/dist/targets/resolver.d.ts +19 -0
- package/dist/targets/resolver.d.ts.map +1 -0
- package/dist/targets/resolver.js +37 -0
- package/dist/targets/resolver.js.map +1 -0
- package/dist/targets/target-registry.d.ts +61 -0
- package/dist/targets/target-registry.d.ts.map +1 -0
- package/dist/targets/target-registry.js +93 -0
- package/dist/targets/target-registry.js.map +1 -0
- package/dist/targets/types.d.ts +85 -0
- package/dist/targets/types.d.ts.map +1 -0
- package/dist/targets/types.js +5 -0
- package/dist/targets/types.js.map +1 -0
- package/dist/tool.d.ts +17 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +282 -0
- package/dist/tool.js.map +1 -0
- package/dist/types/findings.d.ts +117 -0
- package/dist/types/findings.d.ts.map +1 -0
- package/dist/types/findings.js +93 -0
- package/dist/types/findings.js.map +1 -0
- package/dist/types/severity.d.ts +15 -0
- package/dist/types/severity.d.ts.map +1 -0
- package/dist/types/severity.js +36 -0
- package/dist/types/severity.js.map +1 -0
- package/package.json +45 -0
- package/src/__tests__/gate.test.ts +537 -0
- package/src/__tests__/sarif.test.ts +201 -0
- package/src/cli/dashboard.ts +93 -0
- package/src/cli/fit.ts +612 -0
- package/src/cli/list-checks.ts +32 -0
- package/src/cli/list-recipes.ts +38 -0
- package/src/framework/__tests__/ast-utilities.test.ts +157 -0
- package/src/framework/__tests__/check-config.test.ts +65 -0
- package/src/framework/__tests__/command-executor.test.ts +79 -0
- package/src/framework/__tests__/content-filter-dispatch.test.ts +132 -0
- package/src/framework/__tests__/content-filter.test.ts +136 -0
- package/src/framework/__tests__/define-check.test.ts +180 -0
- package/src/framework/__tests__/directive-inventory.test.ts +53 -0
- package/src/framework/__tests__/execution-context.test.ts +80 -0
- package/src/framework/__tests__/file-accessor.test.ts +121 -0
- package/src/framework/__tests__/file-cache.test.ts +142 -0
- package/src/framework/__tests__/import-graph.test.ts +282 -0
- package/src/framework/__tests__/path-matcher.test.ts +130 -0
- package/src/framework/__tests__/register-helpers.test.ts +51 -0
- package/src/framework/__tests__/registry.test.ts +243 -0
- package/src/framework/__tests__/result-builder.test.ts +178 -0
- package/src/framework/__tests__/scope-resolver.test.ts +208 -0
- package/src/framework/__tests__/severity-mapping.test.ts +50 -0
- package/src/framework/__tests__/strip-literals.test.ts +109 -0
- package/src/framework/abortable-exec.ts +177 -0
- package/src/framework/ast-utilities.ts +112 -0
- package/src/framework/check-config.ts +339 -0
- package/src/framework/check-types.ts +77 -0
- package/src/framework/command-executor.ts +100 -0
- package/src/framework/constants.ts +16 -0
- package/src/framework/content-filter.ts +288 -0
- package/src/framework/define-check.ts +336 -0
- package/src/framework/directive-inventory.ts +110 -0
- package/src/framework/directive-parsing.ts +152 -0
- package/src/framework/execution-context.ts +247 -0
- package/src/framework/file-accessor.ts +171 -0
- package/src/framework/file-cache.ts +220 -0
- package/src/framework/file-type-filter.ts +25 -0
- package/src/framework/ignore-processing.ts +350 -0
- package/src/framework/import-graph.ts +280 -0
- package/src/framework/memory-profiler.ts +145 -0
- package/src/framework/parse-cache.ts +38 -0
- package/src/framework/path-matcher.ts +191 -0
- package/src/framework/register-helpers.ts +20 -0
- package/src/framework/registry.ts +125 -0
- package/src/framework/result-builder.ts +225 -0
- package/src/framework/scope-resolver.ts +262 -0
- package/src/framework/severity-mapping.ts +56 -0
- package/src/framework/strip-literals.ts +200 -0
- package/src/gate.ts +337 -0
- package/src/index.ts +110 -0
- package/src/plugins/__tests__/check-package-discovery.test.ts +204 -0
- package/src/plugins/__tests__/lang-domain.test.ts +198 -0
- package/src/plugins/__tests__/loader.test.ts +226 -0
- package/src/plugins/check-package-discovery.ts +242 -0
- package/src/plugins/loader.ts +327 -0
- package/src/plugins/types.ts +25 -0
- package/src/recipes/__tests__/built-in-recipes.test.ts +107 -0
- package/src/recipes/__tests__/check-config.test.ts +51 -0
- package/src/recipes/__tests__/check-resolution.test.ts +185 -0
- package/src/recipes/__tests__/registry.test.ts +115 -0
- package/src/recipes/__tests__/retry.test.ts +83 -0
- package/src/recipes/__tests__/service.test.ts +572 -0
- package/src/recipes/built-in-recipes.ts +273 -0
- package/src/recipes/check-config.ts +64 -0
- package/src/recipes/check-resolution.ts +169 -0
- package/src/recipes/check-result-processor.ts +258 -0
- package/src/recipes/parallel-execution.ts +220 -0
- package/src/recipes/registry.ts +192 -0
- package/src/recipes/retry.ts +69 -0
- package/src/recipes/sequential-execution.ts +139 -0
- package/src/recipes/service-types.ts +105 -0
- package/src/recipes/service.ts +400 -0
- package/src/recipes/types.ts +247 -0
- package/src/sarif.ts +232 -0
- package/src/signalers/__tests__/loader.test.ts +99 -0
- package/src/signalers/index.ts +9 -0
- package/src/signalers/loader.ts +141 -0
- package/src/signalers/schema.ts +117 -0
- package/src/signalers/types.ts +15 -0
- package/src/targets/__tests__/loader.test.ts +170 -0
- package/src/targets/__tests__/resolver.test.ts +74 -0
- package/src/targets/__tests__/target-registry.test.ts +103 -0
- package/src/targets/index.ts +13 -0
- package/src/targets/loader.ts +214 -0
- package/src/targets/resolver.ts +44 -0
- package/src/targets/target-registry.ts +111 -0
- package/src/targets/types.ts +89 -0
- package/src/tool.ts +302 -0
- package/src/types/findings.ts +239 -0
- package/src/types/severity.ts +39 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +33 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// @fitness-ignore-file error-handling-suite -- catch blocks delegate errors through established patterns
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Retry logic for fitness check execution
|
|
4
|
+
*
|
|
5
|
+
* Provides exponential backoff retry wrapper for transient check failures.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { CheckAbortedError } from '../framework/execution-context.js'
|
|
9
|
+
|
|
10
|
+
const BACKOFF_DELAYS_MS = [1000, 2000] as const
|
|
11
|
+
|
|
12
|
+
/** Configuration for retry behavior */
|
|
13
|
+
export interface RetryOptions {
|
|
14
|
+
readonly enabled: boolean
|
|
15
|
+
readonly maxRetries: number
|
|
16
|
+
readonly checkId: string
|
|
17
|
+
readonly checkSlug: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Result of a retry-wrapped function execution */
|
|
21
|
+
export interface RetryResult<T> {
|
|
22
|
+
readonly result: T | undefined
|
|
23
|
+
readonly lastError: unknown
|
|
24
|
+
readonly retryCount: number
|
|
25
|
+
readonly wasRetried: boolean
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function backoff(attempt: number): Promise<void> {
|
|
29
|
+
const delay = BACKOFF_DELAYS_MS[attempt] ?? BACKOFF_DELAYS_MS.at(-1) ?? 2000
|
|
30
|
+
return new Promise((resolve) => setTimeout(resolve, delay))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Execute a function with retry logic.
|
|
35
|
+
* Only retries when the function throws. CheckAbortedError is never retried.
|
|
36
|
+
*/
|
|
37
|
+
export async function executeWithRetry<T>(
|
|
38
|
+
fn: () => Promise<T>,
|
|
39
|
+
options: RetryOptions,
|
|
40
|
+
): Promise<RetryResult<T>> {
|
|
41
|
+
try {
|
|
42
|
+
const result = await fn()
|
|
43
|
+
return { result, lastError: undefined, retryCount: 0, wasRetried: false }
|
|
44
|
+
} catch (firstError) {
|
|
45
|
+
if (firstError instanceof CheckAbortedError) {
|
|
46
|
+
return { result: undefined, lastError: firstError, retryCount: 0, wasRetried: false }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!options.enabled || options.maxRetries <= 0) {
|
|
50
|
+
return { result: undefined, lastError: firstError, retryCount: 0, wasRetried: false }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let lastError: unknown = firstError
|
|
54
|
+
|
|
55
|
+
for (let attempt = 0; attempt < options.maxRetries; attempt++) {
|
|
56
|
+
// @fitness-ignore-next-line performance-anti-patterns -- sequential retry with backoff is inherently serial
|
|
57
|
+
await backoff(attempt)
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const result = await fn()
|
|
61
|
+
return { result, lastError: undefined, retryCount: attempt + 1, wasRetried: true }
|
|
62
|
+
} catch (retryError) {
|
|
63
|
+
lastError = retryError
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return { result: undefined, lastError, retryCount: options.maxRetries, wasRetried: true }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sequential execution engine for fitness recipe checks
|
|
3
|
+
*
|
|
4
|
+
* Runs fitness checks one at a time with per-check timeouts,
|
|
5
|
+
* abort support, and retry logic.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { TimeoutError } from '@opensip-tools/core'
|
|
9
|
+
|
|
10
|
+
import { memoryProfiler } from '../framework/memory-profiler.js'
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
processSuccessResult,
|
|
14
|
+
processErrorResult,
|
|
15
|
+
type ProcessorContext,
|
|
16
|
+
} from './check-result-processor.js'
|
|
17
|
+
import { executeWithRetry } from './retry.js'
|
|
18
|
+
|
|
19
|
+
import type { ExecutionOptions, ExecutionServiceContext } from './parallel-execution.js'
|
|
20
|
+
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// SEQUENTIAL EXECUTION
|
|
23
|
+
// =============================================================================
|
|
24
|
+
|
|
25
|
+
/** Execute fitness checks sequentially with per-check timeouts and retry support */
|
|
26
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Inherent complexity: sequential check execution with per-check timeouts, abort signal handling, file matching, error recovery, and progress callbacks
|
|
27
|
+
export async function executeSequential(ctx: ExecutionServiceContext, opts: ExecutionOptions): Promise<void> {
|
|
28
|
+
const { checks, cwd, recipe, checkTargetFiles, globalExcludes } = opts
|
|
29
|
+
const { session, callbacks, abortController } = ctx
|
|
30
|
+
const recipeTimeout = recipe.execution.timeout ?? 30_000
|
|
31
|
+
const totalChecks = checks.length
|
|
32
|
+
|
|
33
|
+
const processorCtx: ProcessorContext = { session, callbacks, recipe, includeViolations: ctx.includeViolations ?? false }
|
|
34
|
+
|
|
35
|
+
// @fitness-ignore-next-line file-length-limits -- Sequential check execution loop: orchestrates check lifecycle (start, run, retry, complete) callbacks
|
|
36
|
+
for (const [i, check] of checks.entries()) {
|
|
37
|
+
if (abortController?.signal.aborted) break
|
|
38
|
+
|
|
39
|
+
if (!check) continue
|
|
40
|
+
|
|
41
|
+
const checkId = check.config.id
|
|
42
|
+
const checkSlug = check.config.slug
|
|
43
|
+
const timeout = check.config.timeout ?? recipeTimeout
|
|
44
|
+
|
|
45
|
+
void callbacks.onCheckStart?.(checkSlug, i + 1, totalChecks)
|
|
46
|
+
|
|
47
|
+
const checkAbortController = new AbortController()
|
|
48
|
+
const memoryBeforeMB = memoryProfiler.recordCheckStart()
|
|
49
|
+
const startTime = Date.now()
|
|
50
|
+
let timedOut = false
|
|
51
|
+
|
|
52
|
+
const timeoutId = setTimeout(() => {
|
|
53
|
+
timedOut = true
|
|
54
|
+
checkAbortController.abort()
|
|
55
|
+
}, timeout)
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const retryResult = await executeWithRetry(
|
|
59
|
+
() => {
|
|
60
|
+
const targetFiles = checkTargetFiles?.get(check.config.slug)
|
|
61
|
+
return check.run(cwd, {
|
|
62
|
+
signal: checkAbortController.signal,
|
|
63
|
+
...(targetFiles ? { targetFiles } : {}),
|
|
64
|
+
...(globalExcludes ? { globalExcludes } : {}),
|
|
65
|
+
})
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
enabled: recipe.execution.retryOnFailure ?? false,
|
|
69
|
+
maxRetries: recipe.execution.maxRetries ?? 2,
|
|
70
|
+
checkId,
|
|
71
|
+
checkSlug,
|
|
72
|
+
},
|
|
73
|
+
)
|
|
74
|
+
clearTimeout(timeoutId)
|
|
75
|
+
|
|
76
|
+
if (checkAbortController.signal.aborted) {
|
|
77
|
+
const durationMs = Date.now() - startTime
|
|
78
|
+
const output = processErrorResult(processorCtx, {
|
|
79
|
+
checkId,
|
|
80
|
+
checkSlug,
|
|
81
|
+
checkIndex: i + 1,
|
|
82
|
+
totalChecks,
|
|
83
|
+
error: new TimeoutError(`Check ${checkId} timed out after ${timeout}ms`, timeout),
|
|
84
|
+
durationMs,
|
|
85
|
+
memoryBeforeMB,
|
|
86
|
+
timedOut: true,
|
|
87
|
+
timeoutMs: timeout,
|
|
88
|
+
})
|
|
89
|
+
if (output.shouldStop) break
|
|
90
|
+
continue
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (retryResult.result === undefined) {
|
|
94
|
+
const durationMs = Date.now() - startTime
|
|
95
|
+
const output = processErrorResult(processorCtx, {
|
|
96
|
+
checkId,
|
|
97
|
+
checkSlug,
|
|
98
|
+
checkIndex: i + 1,
|
|
99
|
+
totalChecks,
|
|
100
|
+
error: retryResult.lastError,
|
|
101
|
+
durationMs,
|
|
102
|
+
memoryBeforeMB,
|
|
103
|
+
timedOut: false,
|
|
104
|
+
})
|
|
105
|
+
if (output.shouldStop) break
|
|
106
|
+
continue
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const durationMs = Date.now() - startTime
|
|
110
|
+
const output = processSuccessResult(processorCtx, {
|
|
111
|
+
checkId,
|
|
112
|
+
checkSlug,
|
|
113
|
+
tags: check.config.tags ?? [],
|
|
114
|
+
checkIndex: i + 1,
|
|
115
|
+
totalChecks,
|
|
116
|
+
result: retryResult.result,
|
|
117
|
+
durationMs,
|
|
118
|
+
memoryBeforeMB,
|
|
119
|
+
})
|
|
120
|
+
if (output.shouldStop) break
|
|
121
|
+
} catch (error) {
|
|
122
|
+
clearTimeout(timeoutId)
|
|
123
|
+
const durationMs = Date.now() - startTime
|
|
124
|
+
const isTimeout = timedOut || checkAbortController.signal.aborted
|
|
125
|
+
const output = processErrorResult(processorCtx, {
|
|
126
|
+
checkId,
|
|
127
|
+
checkSlug,
|
|
128
|
+
checkIndex: i + 1,
|
|
129
|
+
totalChecks,
|
|
130
|
+
error,
|
|
131
|
+
durationMs,
|
|
132
|
+
memoryBeforeMB,
|
|
133
|
+
timedOut: isTimeout,
|
|
134
|
+
...(isTimeout ? { timeoutMs: timeout } : {}),
|
|
135
|
+
})
|
|
136
|
+
if (output.shouldStop) break
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service-layer type definitions for fitness recipe execution
|
|
3
|
+
*
|
|
4
|
+
* Defines the configuration, session state, and callback types
|
|
5
|
+
* used by FitnessRecipeService and its execution engines.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { FitnessRecipeRegistry } from './registry.js'
|
|
9
|
+
import type {
|
|
10
|
+
FitnessRecipe,
|
|
11
|
+
FitnessRecipeResult,
|
|
12
|
+
RecipeCheckResult,
|
|
13
|
+
IgnoresByType,
|
|
14
|
+
} from './types.js'
|
|
15
|
+
import type { DirectiveEntry } from '../framework/directive-inventory.js'
|
|
16
|
+
import type { CheckMemoryProfile } from '../framework/memory-profiler.js'
|
|
17
|
+
import type { CheckRegistry } from '../framework/registry.js'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// CHECK SUMMARY (used for callbacks)
|
|
22
|
+
// =============================================================================
|
|
23
|
+
|
|
24
|
+
/** Summary of a single check execution for callback reporting */
|
|
25
|
+
export interface CheckSummary {
|
|
26
|
+
readonly checkId: string
|
|
27
|
+
readonly checkSlug: string
|
|
28
|
+
readonly passed: boolean
|
|
29
|
+
readonly errors: number
|
|
30
|
+
readonly warnings: number
|
|
31
|
+
readonly durationMs: number
|
|
32
|
+
readonly filesScanned: number
|
|
33
|
+
readonly ignoredCount: number
|
|
34
|
+
readonly memoryProfile: CheckMemoryProfile
|
|
35
|
+
readonly timedOut?: boolean
|
|
36
|
+
readonly errorMessage?: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// SERVICE CALLBACKS
|
|
41
|
+
// =============================================================================
|
|
42
|
+
|
|
43
|
+
/** Callbacks invoked during recipe execution for progress and errors */
|
|
44
|
+
export interface FitnessRecipeServiceCallbacks {
|
|
45
|
+
onCheckStart?: (checkSlug: string, index: number, total: number) => void
|
|
46
|
+
onCheckComplete?: (checkSlug: string, summary: CheckSummary, index: number, total: number) => void
|
|
47
|
+
onError?: (checkSlug: string, error: Error) => void
|
|
48
|
+
onMemoryWarning?: (checkId: string, profile: CheckMemoryProfile) => void
|
|
49
|
+
onComplete?: (result: FitnessRecipeResult) => void
|
|
50
|
+
/** Called before execution with all registered checks for catalog sync. */
|
|
51
|
+
onCatalogSync?: (entries: { id: string; slug: string; tags: readonly string[]; description: string }[]) => void
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// =============================================================================
|
|
55
|
+
// SERVICE CONFIGURATION
|
|
56
|
+
// =============================================================================
|
|
57
|
+
|
|
58
|
+
/** Configuration for the fitness recipe service */
|
|
59
|
+
export interface FitnessRecipeServiceConfig {
|
|
60
|
+
cwd?: string
|
|
61
|
+
prewarmCache?: boolean
|
|
62
|
+
prewarmPatterns?: string[]
|
|
63
|
+
callbacks?: FitnessRecipeServiceCallbacks
|
|
64
|
+
/** Per-check pre-resolved file paths from target overrides. Map of check slug → absolute file paths. */
|
|
65
|
+
checkTargetFiles?: ReadonlyMap<string, readonly string[]>
|
|
66
|
+
/** Optional check registry (defaults to defaultRegistry). */
|
|
67
|
+
checkRegistry?: CheckRegistry
|
|
68
|
+
/** Optional recipe registry (defaults to defaultRecipeRegistry). */
|
|
69
|
+
recipeRegistry?: FitnessRecipeRegistry
|
|
70
|
+
/** Check slugs disabled via opensip.config.yml — these checks are skipped unless force-included by a recipe. */
|
|
71
|
+
disabledChecks?: readonly string[]
|
|
72
|
+
/** When true, carry violation details on RecipeCheckResult. */
|
|
73
|
+
includeViolations?: boolean
|
|
74
|
+
/**
|
|
75
|
+
* Run-wide file exclusion patterns from `opensip-tools.config.yml`'s
|
|
76
|
+
* top-level `globalExcludes`. Threaded into each check's RunOptions
|
|
77
|
+
* so the matchFiles() fallback honors them — without this, scope-empty
|
|
78
|
+
* checks scan every prewarmed file. Should be the same array passed
|
|
79
|
+
* to `loadTargetsConfig`.
|
|
80
|
+
*/
|
|
81
|
+
globalExcludes?: readonly string[]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// =============================================================================
|
|
85
|
+
// SESSION STATE
|
|
86
|
+
// =============================================================================
|
|
87
|
+
|
|
88
|
+
/** Mutable session state tracking progress during a recipe execution */
|
|
89
|
+
export interface FitnessRecipeSession {
|
|
90
|
+
readonly sessionId: string
|
|
91
|
+
readonly recipe: FitnessRecipe
|
|
92
|
+
readonly startedAt: Date
|
|
93
|
+
status: 'running' | 'completed' | 'failed'
|
|
94
|
+
totalChecks: number
|
|
95
|
+
completedChecks: number
|
|
96
|
+
passedChecks: number
|
|
97
|
+
failedChecks: number
|
|
98
|
+
totalErrors: number
|
|
99
|
+
totalWarnings: number
|
|
100
|
+
totalIgnored: number
|
|
101
|
+
ignoresByTag: Map<string, number>
|
|
102
|
+
checkResults: RecipeCheckResult[]
|
|
103
|
+
ignoreCounts?: IgnoresByType | undefined
|
|
104
|
+
directives: DirectiveEntry[]
|
|
105
|
+
}
|