@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,331 @@
|
|
|
1
|
+
// @fitness-ignore-file file-length-limits -- Complex module with tightly coupled logic; splitting would fragment cohesive functionality
|
|
2
|
+
// @fitness-ignore-file eslint-backend -- Fitness framework orchestrator; ESLint rule variations between fitness runner and IDE are expected
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Central orchestrator for fitness recipe execution
|
|
5
|
+
*
|
|
6
|
+
* FitnessRecipeService resolves checks, manages session lifecycle,
|
|
7
|
+
* coordinates parallel/sequential execution, and builds results.
|
|
8
|
+
*/
|
|
9
|
+
import { logger, NotFoundError, SystemError, generateId, initParseCache, clearParseCache } from '@opensip-tools/core';
|
|
10
|
+
import { fileCache, DEFAULT_PREWARM_PATTERNS } from '../framework/file-cache.js';
|
|
11
|
+
import { defaultRegistry } from '../framework/registry.js';
|
|
12
|
+
import { setCurrentRecipeCheckConfig, clearCurrentRecipeCheckConfig } from './check-config.js';
|
|
13
|
+
import { resolveChecks, validateCheckReferences } from './check-resolution.js';
|
|
14
|
+
import { executeParallel } from './parallel-execution.js';
|
|
15
|
+
import { defaultRecipeRegistry } from './registry.js';
|
|
16
|
+
import { executeSequential } from './sequential-execution.js';
|
|
17
|
+
import { DEFAULT_MAX_PARALLEL, } from './types.js';
|
|
18
|
+
const MODULE_FITNESS_RECIPES = 'fitness:recipes';
|
|
19
|
+
/** Default success threshold percentage when none is configured. */
|
|
20
|
+
const DEFAULT_SUCCESS_THRESHOLD_PERCENT = 85;
|
|
21
|
+
/**
|
|
22
|
+
* Compute prewarm glob patterns from the resolved checks' fileTypes.
|
|
23
|
+
* If any check is universal (no fileTypes), falls back to DEFAULT_PREWARM_PATTERNS.
|
|
24
|
+
*/
|
|
25
|
+
function computePrewarmPatterns(checks) {
|
|
26
|
+
const extensions = new Set();
|
|
27
|
+
for (const check of checks) {
|
|
28
|
+
const ft = check.config.fileTypes;
|
|
29
|
+
if (!ft || ft.length === 0) {
|
|
30
|
+
// Universal check — need all file types
|
|
31
|
+
return DEFAULT_PREWARM_PATTERNS;
|
|
32
|
+
}
|
|
33
|
+
for (const ext of ft) {
|
|
34
|
+
extensions.add(ext);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return [...extensions].sort().map((ext) => `**/*.${ext}`);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Central orchestrator for fitness check execution.
|
|
41
|
+
*/
|
|
42
|
+
export class FitnessRecipeService {
|
|
43
|
+
config;
|
|
44
|
+
checkRegistry;
|
|
45
|
+
recipeRegistry;
|
|
46
|
+
activeSession = null;
|
|
47
|
+
abortController;
|
|
48
|
+
constructor(config) {
|
|
49
|
+
this.config = config ?? {};
|
|
50
|
+
this.checkRegistry = config?.checkRegistry ?? defaultRegistry;
|
|
51
|
+
this.recipeRegistry = config?.recipeRegistry ?? defaultRecipeRegistry;
|
|
52
|
+
}
|
|
53
|
+
get session() {
|
|
54
|
+
if (!this.activeSession) {
|
|
55
|
+
throw new SystemError('No active session', { code: 'SYSTEM.FITNESS.NO_SESSION' });
|
|
56
|
+
}
|
|
57
|
+
return this.activeSession;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Execute a fitness recipe by name or recipe object.
|
|
61
|
+
*
|
|
62
|
+
* Resolves checks, prewarms the file cache, runs checks in parallel or sequential mode,
|
|
63
|
+
* then builds and returns a {@link FitnessRecipeResult}. Only one session can be active
|
|
64
|
+
* at a time — call {@link abort} to cancel a running session.
|
|
65
|
+
*
|
|
66
|
+
* @param recipeOrName - A recipe name (looked up in the recipe registry) or a FitnessRecipe object.
|
|
67
|
+
* @returns The result of the recipe execution including per-check results and summary.
|
|
68
|
+
* @throws {SystemError} If a session is already in progress.
|
|
69
|
+
* @throws {NotFoundError} If the recipe name is not found in the registry.
|
|
70
|
+
*/
|
|
71
|
+
// @fitness-ignore-next-line result-pattern-consistency -- return type is FitnessRecipeResult (not Result<T,E>); throw is appropriate for precondition failures
|
|
72
|
+
async start(recipeOrName) {
|
|
73
|
+
if (this.activeSession) {
|
|
74
|
+
throw new SystemError('Recipe execution already in progress', { code: 'SYSTEM.FITNESS.SESSION_IN_PROGRESS' });
|
|
75
|
+
}
|
|
76
|
+
const recipe = typeof recipeOrName === 'string' ? this.getRecipe(recipeOrName) : recipeOrName;
|
|
77
|
+
if (!recipe) {
|
|
78
|
+
const identifier = typeof recipeOrName === 'string' ? recipeOrName : recipeOrName.name;
|
|
79
|
+
// @fitness-ignore-next-line result-pattern-consistency -- internal method, exceptions propagate to CLI boundary
|
|
80
|
+
throw new NotFoundError(`Recipe not found: ${identifier}`, { code: 'RESOURCE.NOT_FOUND.RECIPE', metadata: { entity: 'recipe', identifier } });
|
|
81
|
+
}
|
|
82
|
+
return this.executeRecipe(recipe);
|
|
83
|
+
}
|
|
84
|
+
async executeRecipe(recipe) {
|
|
85
|
+
const sessionId = this.generateSessionId();
|
|
86
|
+
this.activeSession = this.createSession(sessionId, recipe);
|
|
87
|
+
this.abortController = new AbortController();
|
|
88
|
+
logger.info('Starting recipe session', { evt: 'fitness.recipe.session.start', module: MODULE_FITNESS_RECIPES, sessionId, recipeName: recipe.name });
|
|
89
|
+
// Project the recipe's per-check config into module-level state so that
|
|
90
|
+
// individual checks can read their slice via getCheckConfig<T>(slug).
|
|
91
|
+
// Cleared in the `finally` below.
|
|
92
|
+
setCurrentRecipeCheckConfig(recipe.checks.config);
|
|
93
|
+
try {
|
|
94
|
+
const cwd = this.config.cwd ?? process.cwd();
|
|
95
|
+
const checks = this.resolveAndFilterChecks(recipe);
|
|
96
|
+
this.activeSession.totalChecks = checks.length;
|
|
97
|
+
if (checks.length === 0) {
|
|
98
|
+
return this.buildResult();
|
|
99
|
+
}
|
|
100
|
+
await this.prepareExecution(checks, cwd);
|
|
101
|
+
// Execute
|
|
102
|
+
const execOpts = {
|
|
103
|
+
checks,
|
|
104
|
+
cwd,
|
|
105
|
+
recipe,
|
|
106
|
+
checkTargetFiles: this.config.checkTargetFiles,
|
|
107
|
+
...(this.config.globalExcludes ? { globalExcludes: this.config.globalExcludes } : {}),
|
|
108
|
+
};
|
|
109
|
+
const execCtx = {
|
|
110
|
+
session: this.activeSession,
|
|
111
|
+
callbacks: this.callbacks,
|
|
112
|
+
abortController: this.abortController,
|
|
113
|
+
includeViolations: this.config.includeViolations ?? false,
|
|
114
|
+
};
|
|
115
|
+
await (recipe.execution.mode === 'parallel' ? executeParallel(execCtx, execOpts) : executeSequential(execCtx, execOpts));
|
|
116
|
+
this.activeSession.directives = this.collectAppliedDirectives();
|
|
117
|
+
this.activeSession.status = 'completed';
|
|
118
|
+
const result = this.buildResult();
|
|
119
|
+
logger.info('Recipe session completed', { evt: 'fitness.recipe.session.complete', module: MODULE_FITNESS_RECIPES, sessionId, recipeName: recipe.name, passed: result.summary.passedChecks, failed: result.summary.failedChecks, durationMs: result.durationMs });
|
|
120
|
+
void this.callbacks.onComplete?.(result);
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
logger.error('Recipe session failed', { evt: 'fitness.recipe.session.error', module: MODULE_FITNESS_RECIPES, sessionId, recipeName: recipe.name, err: error instanceof Error ? error : undefined });
|
|
125
|
+
if (this.activeSession) {
|
|
126
|
+
this.activeSession.status = 'failed';
|
|
127
|
+
}
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
clearCurrentRecipeCheckConfig();
|
|
132
|
+
void clearParseCache();
|
|
133
|
+
fileCache.clear();
|
|
134
|
+
this.abortController?.abort();
|
|
135
|
+
delete this.abortController;
|
|
136
|
+
this.activeSession = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
collectAppliedDirectives() {
|
|
140
|
+
const result = [];
|
|
141
|
+
const session = this.activeSession;
|
|
142
|
+
if (!session)
|
|
143
|
+
return result;
|
|
144
|
+
for (const cr of session.checkResults) {
|
|
145
|
+
if (cr.appliedDirectives) {
|
|
146
|
+
for (const directive of cr.appliedDirectives) {
|
|
147
|
+
result.push(directive);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
createSession(sessionId, recipe) {
|
|
154
|
+
return {
|
|
155
|
+
sessionId,
|
|
156
|
+
recipe,
|
|
157
|
+
startedAt: new Date(),
|
|
158
|
+
status: 'running',
|
|
159
|
+
totalChecks: 0,
|
|
160
|
+
completedChecks: 0,
|
|
161
|
+
passedChecks: 0,
|
|
162
|
+
failedChecks: 0,
|
|
163
|
+
totalErrors: 0,
|
|
164
|
+
totalWarnings: 0,
|
|
165
|
+
totalIgnored: 0,
|
|
166
|
+
ignoresByTag: new Map(),
|
|
167
|
+
checkResults: [],
|
|
168
|
+
directives: [],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
resolveAndFilterChecks(recipe) {
|
|
172
|
+
const checkSlugs = resolveChecks(recipe.checks, this.checkRegistry);
|
|
173
|
+
// Validate explicit references
|
|
174
|
+
if (recipe.checks.type === 'explicit') {
|
|
175
|
+
const allSlugs = this.checkRegistry.listSlugs();
|
|
176
|
+
const { missing } = validateCheckReferences(recipe.checks.checkIds, [...allSlugs]);
|
|
177
|
+
if (missing.length > 0) {
|
|
178
|
+
logger.warn(`Recipe references ${missing.length} unknown check(s)`, { evt: 'fitness.recipe.checks.missing', module: MODULE_FITNESS_RECIPES, missing, recipeName: recipe.name });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const configDisabled = new Set(this.config.disabledChecks);
|
|
182
|
+
const includeDisabledSet = new Set(recipe.includeDisabled);
|
|
183
|
+
const checks = [];
|
|
184
|
+
// Warn about unknown slugs in disabledChecks config
|
|
185
|
+
if (configDisabled.size > 0) {
|
|
186
|
+
const allSlugs = new Set(this.checkRegistry.listSlugs());
|
|
187
|
+
const unknownDisabled = [...configDisabled].filter((s) => !allSlugs.has(s));
|
|
188
|
+
if (unknownDisabled.length > 0) {
|
|
189
|
+
logger.warn(`disabledChecks references ${unknownDisabled.length} unknown slug(s)`, { evt: 'fitness.recipe.disabled.unknown', module: MODULE_FITNESS_RECIPES, unknownDisabled });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
for (const slug of checkSlugs) {
|
|
193
|
+
const check = this.checkRegistry.getBySlug(slug);
|
|
194
|
+
if (!check)
|
|
195
|
+
continue;
|
|
196
|
+
const bareSlug = slug.includes(':') ? slug.split(':').pop() : slug;
|
|
197
|
+
const isDisabled = (check.config.disabled ?? false) || configDisabled.has(slug) || configDisabled.has(bareSlug);
|
|
198
|
+
const isForceIncluded = includeDisabledSet.has(slug) || includeDisabledSet.has(bareSlug);
|
|
199
|
+
if (!isDisabled || isForceIncluded) {
|
|
200
|
+
checks.push(check);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return checks;
|
|
204
|
+
}
|
|
205
|
+
async prepareExecution(checks, cwd) {
|
|
206
|
+
// Sync check catalog for dashboard visibility
|
|
207
|
+
if (this.callbacks.onCatalogSync) {
|
|
208
|
+
const entries = this.checkRegistry.list().map((c) => ({
|
|
209
|
+
id: c.config.id,
|
|
210
|
+
slug: c.config.slug,
|
|
211
|
+
tags: c.config.tags,
|
|
212
|
+
description: c.config.description,
|
|
213
|
+
}));
|
|
214
|
+
void this.callbacks.onCatalogSync(entries);
|
|
215
|
+
}
|
|
216
|
+
// Prewarm file cache with only the extensions needed by resolved checks
|
|
217
|
+
if (this.config.prewarmCache !== false) {
|
|
218
|
+
const patterns = this.config.prewarmPatterns ?? computePrewarmPatterns(checks);
|
|
219
|
+
await fileCache.prewarm(cwd, patterns);
|
|
220
|
+
}
|
|
221
|
+
// Initialize shared AST parse cache for cross-check deduplication
|
|
222
|
+
void initParseCache();
|
|
223
|
+
}
|
|
224
|
+
buildResult() {
|
|
225
|
+
const session = this.session;
|
|
226
|
+
const completedAt = new Date();
|
|
227
|
+
const summary = {
|
|
228
|
+
totalChecks: session.totalChecks,
|
|
229
|
+
passedChecks: session.passedChecks,
|
|
230
|
+
failedChecks: session.failedChecks,
|
|
231
|
+
skippedChecks: session.totalChecks - session.completedChecks,
|
|
232
|
+
erroredChecks: session.checkResults.filter((r) => r.error !== undefined).length,
|
|
233
|
+
totalViolations: session.checkResults.reduce((sum, r) => sum + r.violationCount, 0),
|
|
234
|
+
totalErrors: session.totalErrors,
|
|
235
|
+
totalWarnings: session.totalWarnings,
|
|
236
|
+
totalIgnored: session.totalIgnored,
|
|
237
|
+
};
|
|
238
|
+
const score = session.totalChecks > 0 ? Math.round((session.passedChecks / session.totalChecks) * 100) : 100;
|
|
239
|
+
const result = {
|
|
240
|
+
recipeId: session.recipe.id,
|
|
241
|
+
recipeName: session.recipe.name,
|
|
242
|
+
sessionId: session.sessionId,
|
|
243
|
+
success: score >= (session.recipe.execution.successThreshold ?? DEFAULT_SUCCESS_THRESHOLD_PERCENT) && session.status === 'completed',
|
|
244
|
+
startedAt: session.startedAt,
|
|
245
|
+
completedAt,
|
|
246
|
+
durationMs: completedAt.getTime() - session.startedAt.getTime(),
|
|
247
|
+
checkResults: session.checkResults,
|
|
248
|
+
summary,
|
|
249
|
+
};
|
|
250
|
+
return {
|
|
251
|
+
...result,
|
|
252
|
+
...(session.ignoreCounts ? { ignoreCounts: session.ignoreCounts } : {}),
|
|
253
|
+
...(session.directives.length > 0 ? { directives: session.directives } : {}),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Convert CLI arguments to an ad-hoc FitnessRecipe.
|
|
258
|
+
*/
|
|
259
|
+
static createAdHocRecipe(args) {
|
|
260
|
+
let checks;
|
|
261
|
+
let includeDisabled;
|
|
262
|
+
if (args.check) {
|
|
263
|
+
if (args.check.includes('*') || args.check.includes('?')) {
|
|
264
|
+
checks = { type: 'pattern', include: [args.check] };
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
checks = { type: 'explicit', checkIds: [args.check] };
|
|
268
|
+
includeDisabled = [args.check];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (args.tagFilters?.length) {
|
|
272
|
+
checks = { type: 'tags', include: args.tagFilters };
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
checks = { type: 'all', exclude: [] };
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
id: 'RCP_cli-adhoc',
|
|
279
|
+
name: 'cli-adhoc',
|
|
280
|
+
displayName: 'CLI Ad-Hoc',
|
|
281
|
+
description: 'Dynamically created recipe from CLI arguments',
|
|
282
|
+
checks,
|
|
283
|
+
execution: {
|
|
284
|
+
mode: args.parallel === false ? 'sequential' : 'parallel',
|
|
285
|
+
stopOnFirstFailure: false,
|
|
286
|
+
timeout: args.timeout ?? 30_000,
|
|
287
|
+
maxParallel: args.maxParallel ?? DEFAULT_MAX_PARALLEL,
|
|
288
|
+
retryOnFailure: args.retry,
|
|
289
|
+
maxRetries: args.maxRetries ?? 2,
|
|
290
|
+
successThreshold: args.successThreshold,
|
|
291
|
+
},
|
|
292
|
+
reporting: {
|
|
293
|
+
format: (() => {
|
|
294
|
+
if (!args.json)
|
|
295
|
+
return 'table';
|
|
296
|
+
return args.unified ? 'unified' : 'json';
|
|
297
|
+
})(),
|
|
298
|
+
verbose: args.verbose ?? false,
|
|
299
|
+
},
|
|
300
|
+
...(includeDisabled ? { includeDisabled } : {}),
|
|
301
|
+
...(args.file ? { fileFilter: args.file } : {}),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
/** Get the currently active session, or null if no recipe is running. */
|
|
305
|
+
getActiveSession() {
|
|
306
|
+
return this.activeSession;
|
|
307
|
+
}
|
|
308
|
+
/** Abort the currently running recipe execution. No-op if no session is active. */
|
|
309
|
+
abort() {
|
|
310
|
+
this.abortController?.abort();
|
|
311
|
+
}
|
|
312
|
+
/** List all available recipes from the recipe registry. */
|
|
313
|
+
listRecipes() {
|
|
314
|
+
return this.recipeRegistry.getAllRecipes();
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Look up a recipe by name or ID.
|
|
318
|
+
* @param nameOrId - The recipe name or full recipe ID (e.g. "default" or "RCP_default").
|
|
319
|
+
* @returns The recipe if found, undefined otherwise.
|
|
320
|
+
*/
|
|
321
|
+
getRecipe(nameOrId) {
|
|
322
|
+
return this.recipeRegistry.loadRecipe(nameOrId);
|
|
323
|
+
}
|
|
324
|
+
generateSessionId() {
|
|
325
|
+
return generateId('SES');
|
|
326
|
+
}
|
|
327
|
+
get callbacks() {
|
|
328
|
+
return this.config.callbacks ?? {};
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/recipes/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Core types for fitness recipes
|
|
3
|
+
*
|
|
4
|
+
* Defines FitnessRecipe, CheckSelector, RecipeCheckResult, and related
|
|
5
|
+
* types used throughout the recipe execution system.
|
|
6
|
+
*/
|
|
7
|
+
import type { DirectiveEntry } from '../framework/directive-inventory.js';
|
|
8
|
+
/**
|
|
9
|
+
* Per-check configuration map.
|
|
10
|
+
*
|
|
11
|
+
* Keys are check slugs; values are check-specific config objects whose shape
|
|
12
|
+
* is declared by the consuming check. The recipe service projects this map
|
|
13
|
+
* into module-level state before execution so each check can read its slice
|
|
14
|
+
* via `getCheckConfig<T>(slug)`. See `check-config.ts`.
|
|
15
|
+
*/
|
|
16
|
+
export type RecipeCheckConfigMap = Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
17
|
+
/** Selector that specifies checks by explicit slug list */
|
|
18
|
+
interface ExplicitCheckSelector {
|
|
19
|
+
readonly type: 'explicit';
|
|
20
|
+
readonly checkIds: readonly string[];
|
|
21
|
+
readonly config?: RecipeCheckConfigMap;
|
|
22
|
+
}
|
|
23
|
+
/** Selector that matches checks via glob patterns */
|
|
24
|
+
interface PatternCheckSelector {
|
|
25
|
+
readonly type: 'pattern';
|
|
26
|
+
readonly include: readonly string[];
|
|
27
|
+
readonly exclude?: readonly string[];
|
|
28
|
+
readonly config?: RecipeCheckConfigMap;
|
|
29
|
+
}
|
|
30
|
+
/** Selector that includes all checks with specified tags */
|
|
31
|
+
interface TagsCheckSelector {
|
|
32
|
+
readonly type: 'tags';
|
|
33
|
+
readonly include: readonly string[];
|
|
34
|
+
readonly exclude?: readonly string[];
|
|
35
|
+
readonly config?: RecipeCheckConfigMap;
|
|
36
|
+
}
|
|
37
|
+
/** Selector that includes all checks with optional exclusions */
|
|
38
|
+
interface AllCheckSelector {
|
|
39
|
+
readonly type: 'all';
|
|
40
|
+
readonly exclude?: readonly string[];
|
|
41
|
+
readonly config?: RecipeCheckConfigMap;
|
|
42
|
+
}
|
|
43
|
+
/** Union of all check selector types used by recipes */
|
|
44
|
+
export type CheckSelector = ExplicitCheckSelector | PatternCheckSelector | TagsCheckSelector | AllCheckSelector;
|
|
45
|
+
/** Execution configuration for a fitness recipe */
|
|
46
|
+
interface FitnessExecutionOptions {
|
|
47
|
+
readonly mode: 'parallel' | 'sequential';
|
|
48
|
+
readonly stopOnFirstFailure: boolean;
|
|
49
|
+
readonly timeout?: number;
|
|
50
|
+
readonly maxParallel?: number;
|
|
51
|
+
readonly retryOnFailure?: boolean;
|
|
52
|
+
readonly maxRetries?: number;
|
|
53
|
+
readonly successThreshold?: number;
|
|
54
|
+
}
|
|
55
|
+
/** Reporting output configuration for a fitness recipe */
|
|
56
|
+
interface FitnessReportingOptions {
|
|
57
|
+
readonly format: 'table' | 'json' | 'unified';
|
|
58
|
+
readonly verbose: boolean;
|
|
59
|
+
readonly outputPath?: string;
|
|
60
|
+
}
|
|
61
|
+
/** Complete recipe definition: checks, execution, and reporting */
|
|
62
|
+
export interface FitnessRecipe {
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly name: string;
|
|
65
|
+
readonly displayName: string;
|
|
66
|
+
readonly description: string;
|
|
67
|
+
readonly checks: CheckSelector;
|
|
68
|
+
readonly execution: FitnessExecutionOptions;
|
|
69
|
+
readonly reporting: FitnessReportingOptions;
|
|
70
|
+
readonly tags?: readonly string[];
|
|
71
|
+
readonly includeDisabled?: readonly string[];
|
|
72
|
+
readonly fileFilter?: string;
|
|
73
|
+
}
|
|
74
|
+
/** A single violation detail from a fitness check. */
|
|
75
|
+
interface RecipeViolation {
|
|
76
|
+
readonly file: string;
|
|
77
|
+
readonly line: number;
|
|
78
|
+
readonly column?: number;
|
|
79
|
+
readonly message: string;
|
|
80
|
+
readonly severity: 'error' | 'warning';
|
|
81
|
+
readonly suggestion?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Result of a single check within a recipe execution */
|
|
84
|
+
export interface RecipeCheckResult {
|
|
85
|
+
readonly checkId: string;
|
|
86
|
+
readonly checkSlug: string;
|
|
87
|
+
readonly passed: boolean;
|
|
88
|
+
readonly violationCount: number;
|
|
89
|
+
readonly errorCount: number;
|
|
90
|
+
readonly warningCount: number;
|
|
91
|
+
readonly ignoredCount: number;
|
|
92
|
+
readonly durationMs: number;
|
|
93
|
+
readonly totalItems?: number | undefined;
|
|
94
|
+
readonly itemType?: string | undefined;
|
|
95
|
+
readonly skipped: boolean;
|
|
96
|
+
readonly skipReason?: string;
|
|
97
|
+
readonly error?: string;
|
|
98
|
+
readonly timedOut?: boolean;
|
|
99
|
+
appliedDirectives?: readonly DirectiveEntry[] | undefined;
|
|
100
|
+
/** Violation details. Populated when includeViolations is true. */
|
|
101
|
+
readonly violations?: readonly RecipeViolation[];
|
|
102
|
+
}
|
|
103
|
+
/** Aggregated summary of a complete recipe run */
|
|
104
|
+
export interface RecipeRunSummary {
|
|
105
|
+
readonly totalChecks: number;
|
|
106
|
+
readonly passedChecks: number;
|
|
107
|
+
readonly failedChecks: number;
|
|
108
|
+
readonly skippedChecks: number;
|
|
109
|
+
readonly erroredChecks: number;
|
|
110
|
+
readonly totalViolations: number;
|
|
111
|
+
readonly totalErrors: number;
|
|
112
|
+
readonly totalWarnings: number;
|
|
113
|
+
readonly totalIgnored: number;
|
|
114
|
+
}
|
|
115
|
+
/** Ignore directive counts by type. */
|
|
116
|
+
export interface IgnoresByType {
|
|
117
|
+
file: number;
|
|
118
|
+
line: number;
|
|
119
|
+
block: number;
|
|
120
|
+
total: number;
|
|
121
|
+
}
|
|
122
|
+
/** Complete result of a recipe execution including all check results and summary */
|
|
123
|
+
export interface FitnessRecipeResult {
|
|
124
|
+
readonly recipeId: string;
|
|
125
|
+
readonly recipeName: string;
|
|
126
|
+
readonly sessionId: string;
|
|
127
|
+
readonly success: boolean;
|
|
128
|
+
readonly startedAt: Date;
|
|
129
|
+
readonly completedAt: Date;
|
|
130
|
+
readonly durationMs: number;
|
|
131
|
+
readonly checkResults: readonly RecipeCheckResult[];
|
|
132
|
+
readonly summary: RecipeRunSummary;
|
|
133
|
+
readonly ignoreCounts?: IgnoresByType | undefined;
|
|
134
|
+
readonly directives?: readonly DirectiveEntry[] | undefined;
|
|
135
|
+
}
|
|
136
|
+
/** Input definition used by defineRecipe() to create a FitnessRecipe */
|
|
137
|
+
export interface FitnessRecipeDefinition {
|
|
138
|
+
readonly name: string;
|
|
139
|
+
readonly displayName: string;
|
|
140
|
+
readonly description: string;
|
|
141
|
+
readonly checks: CheckSelector;
|
|
142
|
+
readonly execution?: Partial<FitnessExecutionOptions>;
|
|
143
|
+
readonly reporting?: Partial<FitnessReportingOptions>;
|
|
144
|
+
readonly tags?: readonly string[];
|
|
145
|
+
readonly includeDisabled?: readonly string[];
|
|
146
|
+
}
|
|
147
|
+
/** Default maximum parallelism based on available CPU cores */
|
|
148
|
+
export declare const DEFAULT_MAX_PARALLEL: number;
|
|
149
|
+
/** Return the effective max parallelism for a recipe, falling back to the system default */
|
|
150
|
+
export declare function getEffectiveMaxParallel(recipe: FitnessRecipe): number;
|
|
151
|
+
/** Create a frozen FitnessRecipe from a definition, applying defaults for missing options */
|
|
152
|
+
export declare function defineRecipe(definition: FitnessRecipeDefinition): FitnessRecipe;
|
|
153
|
+
export {};
|
|
154
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recipes/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// @fitness-ignore-file module-coupling-metrics -- type definition module: exports are related interfaces/types for the recipe execution domain
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Core types for fitness recipes
|
|
4
|
+
*
|
|
5
|
+
* Defines FitnessRecipe, CheckSelector, RecipeCheckResult, and related
|
|
6
|
+
* types used throughout the recipe execution system.
|
|
7
|
+
*/
|
|
8
|
+
import os from 'node:os';
|
|
9
|
+
/** Default maximum parallelism based on available CPU cores */
|
|
10
|
+
export const DEFAULT_MAX_PARALLEL = os.availableParallelism?.() ?? os.cpus().length;
|
|
11
|
+
/** Default execution options applied when not overridden by a recipe */
|
|
12
|
+
const DEFAULT_EXECUTION_OPTIONS = {
|
|
13
|
+
mode: 'parallel',
|
|
14
|
+
stopOnFirstFailure: false,
|
|
15
|
+
timeout: 30_000,
|
|
16
|
+
maxParallel: DEFAULT_MAX_PARALLEL,
|
|
17
|
+
};
|
|
18
|
+
/** Return the effective max parallelism for a recipe, falling back to the system default */
|
|
19
|
+
export function getEffectiveMaxParallel(recipe) {
|
|
20
|
+
return recipe.execution.maxParallel ?? DEFAULT_MAX_PARALLEL;
|
|
21
|
+
}
|
|
22
|
+
/** Default reporting options applied when not overridden by a recipe */
|
|
23
|
+
const DEFAULT_REPORTING_OPTIONS = {
|
|
24
|
+
format: 'table',
|
|
25
|
+
verbose: false,
|
|
26
|
+
};
|
|
27
|
+
/** Create a frozen FitnessRecipe from a definition, applying defaults for missing options */
|
|
28
|
+
export function defineRecipe(definition) {
|
|
29
|
+
const id = `RCP_${definition.name}`;
|
|
30
|
+
const recipe = {
|
|
31
|
+
id,
|
|
32
|
+
name: definition.name,
|
|
33
|
+
displayName: definition.displayName,
|
|
34
|
+
description: definition.description,
|
|
35
|
+
checks: definition.checks,
|
|
36
|
+
execution: {
|
|
37
|
+
...DEFAULT_EXECUTION_OPTIONS,
|
|
38
|
+
...definition.execution,
|
|
39
|
+
},
|
|
40
|
+
reporting: {
|
|
41
|
+
...DEFAULT_REPORTING_OPTIONS,
|
|
42
|
+
...definition.reporting,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
if (definition.tags || definition.includeDisabled) {
|
|
46
|
+
return Object.freeze({
|
|
47
|
+
...recipe,
|
|
48
|
+
...(definition.tags ? { tags: definition.tags } : {}),
|
|
49
|
+
...(definition.includeDisabled ? { includeDisabled: definition.includeDisabled } : {}),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return Object.freeze(recipe);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recipes/types.ts"],"names":[],"mappings":"AAAA,+IAA+I;AAC/I;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAA;AA0LxB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA;AAEnF,wEAAwE;AACxE,MAAM,yBAAyB,GAA4B;IACzD,IAAI,EAAE,UAAU;IAChB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,oBAAoB;CACzB,CAAA;AAEV,4FAA4F;AAC5F,MAAM,UAAU,uBAAuB,CAAC,MAAqB;IAC3D,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,oBAAoB,CAAA;AAC7D,CAAC;AAED,wEAAwE;AACxE,MAAM,yBAAyB,GAA4B;IACzD,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,KAAK;CACN,CAAA;AAEV,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,UAAmC;IAC9D,MAAM,EAAE,GAAG,OAAO,UAAU,CAAC,IAAI,EAAE,CAAA;IAEnC,MAAM,MAAM,GAAkB;QAC5B,EAAE;QACF,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,SAAS,EAAE;YACT,GAAG,yBAAyB;YAC5B,GAAG,UAAU,CAAC,SAAS;SACxB;QACD,SAAS,EAAE;YACT,GAAG,yBAAyB;YAC5B,GAAG,UAAU,CAAC,SAAS;SACxB;KACF,CAAA;IAED,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG,MAAM;YACT,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC"}
|
package/dist/sarif.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CliOutput } from '@opensip-tools/contracts';
|
|
2
|
+
/** Result of a cloud report upload */
|
|
3
|
+
export interface ReportResult {
|
|
4
|
+
readonly url: string;
|
|
5
|
+
readonly findingCount: number;
|
|
6
|
+
readonly runCount: number;
|
|
7
|
+
readonly success: boolean;
|
|
8
|
+
readonly error?: string;
|
|
9
|
+
readonly chunksTotal?: number;
|
|
10
|
+
readonly chunksSucceeded?: number;
|
|
11
|
+
}
|
|
12
|
+
interface SarifRun {
|
|
13
|
+
tool: {
|
|
14
|
+
driver: {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
rules: {
|
|
18
|
+
id: string;
|
|
19
|
+
}[];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
results: Record<string, unknown>[];
|
|
23
|
+
}
|
|
24
|
+
/** Build a SARIF 2.1.0 log from CLI output — one run per check slug */
|
|
25
|
+
export declare function buildSarifLog(output: CliOutput): Record<string, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* Split SARIF runs into chunks of at most `maxFindings` findings each.
|
|
28
|
+
* Keeps whole runs together when possible; splits a single run across
|
|
29
|
+
* chunks only when it exceeds the limit on its own.
|
|
30
|
+
*/
|
|
31
|
+
export declare function chunkSarifRuns(runs: SarifRun[], maxFindings?: number): SarifRun[][];
|
|
32
|
+
export declare function reportToCloud(output: CliOutput, url: string, apiKey?: string): Promise<ReportResult>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=sarif.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../src/sarif.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE;QAAE,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACpC;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAExE;AA8DD;;;;GAIG;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,SAAyB,GAAG,QAAQ,EAAE,EAAE,CAyCnG;AAQD,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqF1G"}
|