@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 @@
|
|
|
1
|
+
{"version":3,"file":"check-types.d.ts","sourceRoot":"","sources":["../../src/framework/check-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAIjE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAClD,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAA;CAClD;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAatD;AAED,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Core type definitions for fitness checks
|
|
3
|
+
*
|
|
4
|
+
* Check interface is the return type of defineCheck.
|
|
5
|
+
* CheckConfig represents the internal configuration structure.
|
|
6
|
+
* CheckResult carries Signal[].
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Type guard: is this value a Check object?
|
|
10
|
+
*
|
|
11
|
+
* Checks for the shape of a Check object:
|
|
12
|
+
* - Has a `config` property that is an object
|
|
13
|
+
* - config has an `id` property that is a string
|
|
14
|
+
* - config has a `slug` property that is a string
|
|
15
|
+
* - config has an `execute` property that is a function
|
|
16
|
+
* - Has a `run` property that is a function
|
|
17
|
+
*/
|
|
18
|
+
export function isCheck(value) {
|
|
19
|
+
if (value === null || typeof value !== 'object')
|
|
20
|
+
return false;
|
|
21
|
+
const obj = value;
|
|
22
|
+
if (!obj.config || typeof obj.config !== 'object')
|
|
23
|
+
return false;
|
|
24
|
+
const config = obj.config;
|
|
25
|
+
if (typeof config.id !== 'string')
|
|
26
|
+
return false;
|
|
27
|
+
if (typeof config.slug !== 'string')
|
|
28
|
+
return false;
|
|
29
|
+
if (typeof config.execute !== 'function')
|
|
30
|
+
return false;
|
|
31
|
+
if (typeof obj.run !== 'function')
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=check-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-types.js","sourceRoot":"","sources":["../../src/framework/check-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6CH;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE7D,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE/D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiC,CAAA;IACpD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IACtD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IAE/C,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Command executor for external tool checks
|
|
3
|
+
*
|
|
4
|
+
* Executes external commands (eslint, prettier, etc.) with abort
|
|
5
|
+
* and timeout support, then parses output into violations.
|
|
6
|
+
*/
|
|
7
|
+
import type { CheckViolation, CommandConfig } from './check-config.js';
|
|
8
|
+
/** Options for executing an external command. */
|
|
9
|
+
export interface CommandExecutorOptions {
|
|
10
|
+
readonly cwd: string;
|
|
11
|
+
readonly signal?: AbortSignal | undefined;
|
|
12
|
+
readonly timeout?: number | undefined;
|
|
13
|
+
}
|
|
14
|
+
/** Result of executing an external command, including parsed violations. */
|
|
15
|
+
export interface CommandExecutionResult {
|
|
16
|
+
readonly violations: CheckViolation[];
|
|
17
|
+
readonly aborted: boolean;
|
|
18
|
+
readonly exitCode: number | null;
|
|
19
|
+
readonly error?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute an external command and parse its output into violations.
|
|
23
|
+
*/
|
|
24
|
+
export declare function executeCommand(config: CommandConfig, files: readonly string[], options: CommandExecutorOptions): Promise<CommandExecutionResult>;
|
|
25
|
+
//# sourceMappingURL=command-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../src/framework/command-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAMtE,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAuDjC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Command executor for external tool checks
|
|
3
|
+
*
|
|
4
|
+
* Executes external commands (eslint, prettier, etc.) with abort
|
|
5
|
+
* and timeout support, then parses output into violations.
|
|
6
|
+
*/
|
|
7
|
+
import { execAbortable } from './abortable-exec.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// EXECUTOR
|
|
10
|
+
// =============================================================================
|
|
11
|
+
const DEFAULT_EXPECTED_EXIT_CODES = [0, 1];
|
|
12
|
+
/**
|
|
13
|
+
* Execute an external command and parse its output into violations.
|
|
14
|
+
*/
|
|
15
|
+
export async function executeCommand(config, files, options) {
|
|
16
|
+
const { cwd, signal, timeout } = options;
|
|
17
|
+
const args = typeof config.args === 'function' ? config.args(files) : config.args;
|
|
18
|
+
const command = [config.bin, ...args];
|
|
19
|
+
const execOptions = { cwd, signal, timeout };
|
|
20
|
+
let result;
|
|
21
|
+
try {
|
|
22
|
+
result = await execAbortable(command, execOptions);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
// ENOENT = tool not installed (spawn fails before the process starts)
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
if (message.includes('ENOENT') || message.includes('not found')) {
|
|
28
|
+
return {
|
|
29
|
+
violations: [],
|
|
30
|
+
aborted: false,
|
|
31
|
+
exitCode: null,
|
|
32
|
+
error: `${config.bin} is not installed. Install it to enable this check.`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
if (result.aborted) {
|
|
38
|
+
return { violations: [], aborted: true, exitCode: result.exitCode };
|
|
39
|
+
}
|
|
40
|
+
// Exit code 127 = command not found (shell mode)
|
|
41
|
+
if (result.exitCode === 127) {
|
|
42
|
+
return {
|
|
43
|
+
violations: [],
|
|
44
|
+
aborted: false,
|
|
45
|
+
exitCode: 127,
|
|
46
|
+
error: `${config.bin} is not installed. Install it to enable this check.`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const expectedCodes = config.expectedExitCodes ?? DEFAULT_EXPECTED_EXIT_CODES;
|
|
50
|
+
if (result.exitCode !== null && !expectedCodes.includes(result.exitCode)) {
|
|
51
|
+
return {
|
|
52
|
+
violations: [],
|
|
53
|
+
aborted: false,
|
|
54
|
+
exitCode: result.exitCode,
|
|
55
|
+
error: `Command exited with unexpected code ${result.exitCode}. ` +
|
|
56
|
+
`Expected one of: ${expectedCodes.join(', ')}. ` +
|
|
57
|
+
`stderr: ${result.stderr.slice(0, 500)}${result.stderr.length > 500 ? ' [truncated]' : ''}`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const violations = config.parseOutput(result.stdout, result.stderr, result.exitCode ?? 0, files, cwd);
|
|
61
|
+
return { violations, aborted: false, exitCode: result.exitCode };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=command-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/framework/command-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared constants for the fitness framework
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Standard exclusion patterns for file matching across the framework.
|
|
6
|
+
* Used by execution context, directive inventory, and file cache.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_EXCLUSION_PATTERNS: readonly ["**/node_modules/**", "**/dist/**", "**/.git/**", "**/coverage/**", "**/*.tsbuildinfo"];
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/framework/constants.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B,mGAM7B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// @fitness-ignore-file project-readme-existence -- internal module, not a package root
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Shared constants for the fitness framework
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Standard exclusion patterns for file matching across the framework.
|
|
7
|
+
* Used by execution context, directive inventory, and file cache.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_EXCLUSION_PATTERNS = [
|
|
10
|
+
'**/node_modules/**',
|
|
11
|
+
'**/dist/**',
|
|
12
|
+
'**/.git/**',
|
|
13
|
+
'**/coverage/**',
|
|
14
|
+
'**/*.tsbuildinfo',
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/framework/constants.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF;;GAEG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;CACV,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview TypeScript scanner-based content filtering
|
|
3
|
+
*
|
|
4
|
+
* Uses the TypeScript scanner (not full AST parser) to identify string literal
|
|
5
|
+
* and comment regions. String content is replaced with spaces of equal length,
|
|
6
|
+
* preserving line/column positions for accurate violation reporting.
|
|
7
|
+
*/
|
|
8
|
+
/** Content processed by the TypeScript scanner with string/comment region tracking */
|
|
9
|
+
export interface FilteredContent {
|
|
10
|
+
/** Content with string literals replaced by whitespace of equal length */
|
|
11
|
+
readonly code: string;
|
|
12
|
+
/**
|
|
13
|
+
* Content with both string literals AND comments replaced by whitespace
|
|
14
|
+
* of equal length. Use when a check pattern-matches identifiers via regex
|
|
15
|
+
* and would otherwise false-positive on banned-call references that
|
|
16
|
+
* appear in JSDoc / line / block comments documenting the rule
|
|
17
|
+
* (e.g. ``"Replace getDatabase() with the constructor StoreDeps"`` inside
|
|
18
|
+
* a doc string).
|
|
19
|
+
*/
|
|
20
|
+
readonly codeNoComments: string;
|
|
21
|
+
/** Original content (unchanged) */
|
|
22
|
+
readonly raw: string;
|
|
23
|
+
/** Set of line numbers (1-based) that are entirely inside comments */
|
|
24
|
+
readonly commentLines: ReadonlySet<number>;
|
|
25
|
+
/** Check if a (1-based line, 0-based column) position is inside a string literal */
|
|
26
|
+
readonly isInString: (line: number, column: number) => boolean;
|
|
27
|
+
/** Check if a (1-based line, 0-based column) position is inside a comment */
|
|
28
|
+
readonly isInComment: (line: number, column: number) => boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Clear the filter cache (call between runs or on memory pressure) */
|
|
31
|
+
export declare function clearFilterCache(): void;
|
|
32
|
+
export declare function filterContent(content: string): FilteredContent;
|
|
33
|
+
//# sourceMappingURL=content-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-filter.d.ts","sourceRoot":"","sources":["../../src/framework/content-filter.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAUH,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1C,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9D,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;CAChE;AA+GD,uEAAuE;AACvE,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA0B9D"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// @fitness-ignore-file file-length-limits -- framework/content-filter complexity requires single-file cohesion
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview TypeScript scanner-based content filtering
|
|
4
|
+
*
|
|
5
|
+
* Uses the TypeScript scanner (not full AST parser) to identify string literal
|
|
6
|
+
* and comment regions. String content is replaced with spaces of equal length,
|
|
7
|
+
* preserving line/column positions for accurate violation reporting.
|
|
8
|
+
*/
|
|
9
|
+
import { logger } from '@opensip-tools/core';
|
|
10
|
+
import ts from 'typescript';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// HELPERS
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/** Build an array of byte offsets where each line starts. */
|
|
15
|
+
function buildLineStarts(content) {
|
|
16
|
+
const lineStarts = [0];
|
|
17
|
+
// eslint-disable-next-line unicorn/no-for-loop -- offset-bearing scan: stores UTF-16 indexes
|
|
18
|
+
for (let i = 0; i < content.length; i++) {
|
|
19
|
+
if (content[i] === '\n')
|
|
20
|
+
lineStarts.push(i + 1);
|
|
21
|
+
}
|
|
22
|
+
return lineStarts;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build a set of 1-based line numbers from a list of regions.
|
|
26
|
+
* A line is included if any part of it falls within a region.
|
|
27
|
+
*/
|
|
28
|
+
function linesToSet(content, regions) {
|
|
29
|
+
if (regions.length === 0)
|
|
30
|
+
return new Set();
|
|
31
|
+
const lineStarts = buildLineStarts(content);
|
|
32
|
+
const result = new Set();
|
|
33
|
+
for (const region of regions) {
|
|
34
|
+
for (let lineIdx = 0; lineIdx < lineStarts.length; lineIdx++) {
|
|
35
|
+
const lineStart = lineStarts[lineIdx];
|
|
36
|
+
const lineEnd = lineIdx + 1 < lineStarts.length ? lineStarts[lineIdx + 1] - 1 : content.length;
|
|
37
|
+
if (lineStart > region.end)
|
|
38
|
+
break;
|
|
39
|
+
if (lineEnd >= region.start) {
|
|
40
|
+
result.add(lineIdx + 1); // 1-based
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a (1-based line, 0-based column) offset falls within any region.
|
|
48
|
+
*/
|
|
49
|
+
function isInRegions(content, regions, line, column) {
|
|
50
|
+
if (regions.length === 0)
|
|
51
|
+
return false;
|
|
52
|
+
// Convert line/column to byte offset
|
|
53
|
+
let currentLine = 1;
|
|
54
|
+
let lineStart = 0;
|
|
55
|
+
// eslint-disable-next-line unicorn/no-for-loop -- offset-bearing scan: captures UTF-16 line start
|
|
56
|
+
for (let i = 0; i < content.length; i++) {
|
|
57
|
+
if (currentLine === line) {
|
|
58
|
+
lineStart = i;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
if (content[i] === '\n')
|
|
62
|
+
currentLine++;
|
|
63
|
+
}
|
|
64
|
+
if (currentLine !== line)
|
|
65
|
+
return false;
|
|
66
|
+
const offset = lineStart + column;
|
|
67
|
+
for (const region of regions) {
|
|
68
|
+
if (offset >= region.start && offset < region.end)
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Replace characters in the given range with spaces, preserving newlines.
|
|
75
|
+
* Records the range as a string region.
|
|
76
|
+
*/
|
|
77
|
+
function replaceCharsInRange(chars, start, end, stringRegions) {
|
|
78
|
+
stringRegions.push({ start, end });
|
|
79
|
+
for (let i = start; i < end; i++) {
|
|
80
|
+
if (chars[i] !== '\n')
|
|
81
|
+
chars[i] = ' ';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// =============================================================================
|
|
85
|
+
// MAIN
|
|
86
|
+
// =============================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Scan content using TypeScript's scanner to identify string and comment regions.
|
|
89
|
+
*
|
|
90
|
+
* String literals are replaced with spaces of equal length, preserving
|
|
91
|
+
* line/column positions. Comments are tracked but not removed (directives
|
|
92
|
+
* live in comments and must be preserved).
|
|
93
|
+
*/
|
|
94
|
+
// Module-level cache to avoid re-running the TS scanner on the same content.
|
|
95
|
+
// Bounded by an idle timer (10 min, matching parse-cache.ts) so long-lived
|
|
96
|
+
// embedders don't accumulate cached filter results across runs forever. The
|
|
97
|
+
// timer resets each time filterContent runs, so an active session never
|
|
98
|
+
// loses its cache.
|
|
99
|
+
const FILTER_CACHE_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
100
|
+
const filterCache = new Map();
|
|
101
|
+
let filterCacheIdleTimer = null;
|
|
102
|
+
function scheduleFilterCacheClear() {
|
|
103
|
+
if (filterCacheIdleTimer)
|
|
104
|
+
clearTimeout(filterCacheIdleTimer);
|
|
105
|
+
filterCacheIdleTimer = setTimeout(() => {
|
|
106
|
+
filterCache.clear();
|
|
107
|
+
filterCacheIdleTimer = null;
|
|
108
|
+
}, FILTER_CACHE_IDLE_TIMEOUT_MS);
|
|
109
|
+
filterCacheIdleTimer.unref();
|
|
110
|
+
}
|
|
111
|
+
/** Clear the filter cache (call between runs or on memory pressure) */
|
|
112
|
+
export function clearFilterCache() {
|
|
113
|
+
filterCache.clear();
|
|
114
|
+
if (filterCacheIdleTimer) {
|
|
115
|
+
clearTimeout(filterCacheIdleTimer);
|
|
116
|
+
filterCacheIdleTimer = null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function filterContent(content) {
|
|
120
|
+
const cached = filterCache.get(content);
|
|
121
|
+
if (cached) {
|
|
122
|
+
scheduleFilterCacheClear();
|
|
123
|
+
return cached;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const result = filterContentImpl(content);
|
|
127
|
+
filterCache.set(content, result);
|
|
128
|
+
scheduleFilterCacheClear();
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Graceful degradation — return raw content if scanner fails
|
|
133
|
+
logger.debug('Content filter fell back to raw content', { evt: 'fitness.content_filter.fallback', module: 'fitness:framework' });
|
|
134
|
+
const fallback = {
|
|
135
|
+
code: content,
|
|
136
|
+
codeNoComments: content,
|
|
137
|
+
raw: content,
|
|
138
|
+
commentLines: new Set(),
|
|
139
|
+
isInString: () => false,
|
|
140
|
+
isInComment: () => false,
|
|
141
|
+
};
|
|
142
|
+
filterCache.set(content, fallback);
|
|
143
|
+
return fallback;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- TS scanner driver: token-by-token loop with per-kind handling; flatter shape would scatter token classification
|
|
147
|
+
function filterContentImpl(content) {
|
|
148
|
+
const scanner = ts.createScanner(ts.ScriptTarget.Latest, false, ts.LanguageVariant.Standard, content);
|
|
149
|
+
const stringRegions = [];
|
|
150
|
+
const commentRegions = [];
|
|
151
|
+
const chars = [...content];
|
|
152
|
+
// Depth counter, not a boolean — a `${ `inner` }` construct nests two templates
|
|
153
|
+
// and each `}` that closes a template-expression must be rescanned. A plain
|
|
154
|
+
// boolean flipped off by the inner TemplateTail would leave the outer unrescanned
|
|
155
|
+
// and desync the scanner for the rest of the file (which silently wipes real
|
|
156
|
+
// code to whitespace). Incremented at TemplateHead, decremented at TemplateTail.
|
|
157
|
+
let templateDepth = 0;
|
|
158
|
+
while (true) {
|
|
159
|
+
let token = scanner.scan();
|
|
160
|
+
// @fitness-ignore-next-line unsafe-secret-comparison -- comparing TypeScript SyntaxKind enum, not a secret
|
|
161
|
+
if (token === ts.SyntaxKind.EndOfFileToken)
|
|
162
|
+
break;
|
|
163
|
+
// After a CloseBraceToken inside ANY template expression, rescan to get TemplateMiddle/TemplateTail
|
|
164
|
+
// @fitness-ignore-next-line unsafe-secret-comparison -- comparing TypeScript SyntaxKind enum, not a secret
|
|
165
|
+
if (token === ts.SyntaxKind.CloseBraceToken && templateDepth > 0) {
|
|
166
|
+
token = scanner.reScanTemplateToken(false);
|
|
167
|
+
}
|
|
168
|
+
const start = scanner.getTokenStart();
|
|
169
|
+
const end = scanner.getTokenEnd();
|
|
170
|
+
switch (token) {
|
|
171
|
+
case ts.SyntaxKind.StringLiteral:
|
|
172
|
+
case ts.SyntaxKind.NoSubstitutionTemplateLiteral: {
|
|
173
|
+
// Replace content inside quotes/backticks (keep delimiters)
|
|
174
|
+
replaceCharsInRange(chars, start + 1, end - 1, stringRegions);
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case ts.SyntaxKind.TemplateHead: {
|
|
178
|
+
// `text ${ — replace text between ` and ${
|
|
179
|
+
templateDepth++;
|
|
180
|
+
replaceCharsInRange(chars, start + 1, end - 2, stringRegions);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case ts.SyntaxKind.TemplateMiddle: {
|
|
184
|
+
// }text ${ — replace text between } and ${
|
|
185
|
+
replaceCharsInRange(chars, start + 1, end - 2, stringRegions);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case ts.SyntaxKind.TemplateTail: {
|
|
189
|
+
// }text` — replace text between } and `
|
|
190
|
+
templateDepth--;
|
|
191
|
+
replaceCharsInRange(chars, start + 1, end - 1, stringRegions);
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case ts.SyntaxKind.SingleLineCommentTrivia:
|
|
195
|
+
case ts.SyntaxKind.MultiLineCommentTrivia: {
|
|
196
|
+
// Track comment regions but don't modify content
|
|
197
|
+
commentRegions.push({ start, end });
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
// RegularExpressionLiteral — leave unchanged, regex is code
|
|
201
|
+
default: {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const code = chars.join('');
|
|
207
|
+
const commentLines = linesToSet(content, commentRegions);
|
|
208
|
+
// Compute `codeNoComments` by additionally replacing comment regions
|
|
209
|
+
// with whitespace. Done as a second pass on a fresh array so `code`
|
|
210
|
+
// (strings-stripped only) and `codeNoComments` (strings + comments
|
|
211
|
+
// stripped) remain available — most checks want one or the other,
|
|
212
|
+
// not both.
|
|
213
|
+
const charsNoComments = [...content];
|
|
214
|
+
for (const region of stringRegions) {
|
|
215
|
+
for (let i = region.start; i < region.end; i++) {
|
|
216
|
+
if (charsNoComments[i] !== '\n')
|
|
217
|
+
charsNoComments[i] = ' ';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
for (const region of commentRegions) {
|
|
221
|
+
for (let i = region.start; i < region.end; i++) {
|
|
222
|
+
if (charsNoComments[i] !== '\n')
|
|
223
|
+
charsNoComments[i] = ' ';
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const codeNoComments = charsNoComments.join('');
|
|
227
|
+
return {
|
|
228
|
+
code,
|
|
229
|
+
codeNoComments,
|
|
230
|
+
raw: content,
|
|
231
|
+
commentLines,
|
|
232
|
+
isInString: (line, column) => isInRegions(content, stringRegions, line, column),
|
|
233
|
+
isInComment: (line, column) => isInRegions(content, commentRegions, line, column),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=content-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-filter.js","sourceRoot":"","sources":["../../src/framework/content-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview defineCheck - Unified check definition API
|
|
3
|
+
*
|
|
4
|
+
* The main API for creating fitness checks. Supports three modes:
|
|
5
|
+
* - analyze: Per-file analysis with content and path
|
|
6
|
+
* - analyzeAll: Multi-file analysis with lazy loading FileAccessor
|
|
7
|
+
* - command: External tool execution with output parsing
|
|
8
|
+
*
|
|
9
|
+
* Check authors return CheckViolation[]. The framework converts each
|
|
10
|
+
* CheckViolation into a universal Signal via createSignal().
|
|
11
|
+
*/
|
|
12
|
+
import type { UnifiedCheckConfig } from './check-config.js';
|
|
13
|
+
import type { Check } from './check-types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Define a fitness check using the unified API.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* export const noConsoleLog = defineCheck({
|
|
20
|
+
* id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
|
|
21
|
+
* slug: 'no-console-log',
|
|
22
|
+
* category: 'quality',
|
|
23
|
+
* description: 'Disallow console.log in production code',
|
|
24
|
+
* analyze: (content, filePath) => {
|
|
25
|
+
* const violations: CheckViolation[] = [];
|
|
26
|
+
* content.split('\n').forEach((line, idx) => {
|
|
27
|
+
* if (line.includes('console.log')) {
|
|
28
|
+
* violations.push({ line: idx + 1, message: 'No console.log', severity: 'error' });
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
* return violations;
|
|
32
|
+
* },
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
* @throws {ValidationError} When the check config is invalid
|
|
36
|
+
*/
|
|
37
|
+
export declare function defineCheck(config: UnifiedCheckConfig): Check;
|
|
38
|
+
//# sourceMappingURL=define-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-check.d.ts","sourceRoot":"","sources":["../../src/framework/define-check.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAsBH,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAyJ7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,KAAK,CAyF7D"}
|