@opensip-cli/fitness 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/baseline-plane.test.d.ts +12 -0
- package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
- package/dist/__tests__/baseline-plane.test.js +63 -0
- package/dist/__tests__/baseline-plane.test.js.map +1 -0
- package/dist/__tests__/check-utils.test.d.ts +10 -0
- package/dist/__tests__/check-utils.test.d.ts.map +1 -0
- package/dist/__tests__/check-utils.test.js +193 -0
- package/dist/__tests__/check-utils.test.js.map +1 -0
- package/dist/__tests__/fingerprint-parity.test.d.ts +14 -0
- package/dist/__tests__/fingerprint-parity.test.d.ts.map +1 -0
- package/dist/__tests__/fingerprint-parity.test.js +59 -0
- package/dist/__tests__/fingerprint-parity.test.js.map +1 -0
- package/dist/__tests__/fit-execute-opts.test.d.ts +15 -0
- package/dist/__tests__/fit-execute-opts.test.d.ts.map +1 -0
- package/dist/__tests__/fit-execute-opts.test.js +124 -0
- package/dist/__tests__/fit-execute-opts.test.js.map +1 -0
- package/dist/__tests__/public-api.test.d.ts +19 -0
- package/dist/__tests__/public-api.test.d.ts.map +1 -0
- package/dist/__tests__/public-api.test.js +85 -0
- package/dist/__tests__/public-api.test.js.map +1 -0
- package/dist/__tests__/tool.test.d.ts +10 -0
- package/dist/__tests__/tool.test.d.ts.map +1 -0
- package/dist/__tests__/tool.test.js +57 -0
- package/dist/__tests__/tool.test.js.map +1 -0
- package/dist/baseline-strategy.d.ts +21 -0
- package/dist/baseline-strategy.d.ts.map +1 -0
- package/dist/baseline-strategy.js +21 -0
- package/dist/baseline-strategy.js.map +1 -0
- package/dist/check-utils/display.d.ts +52 -0
- package/dist/check-utils/display.d.ts.map +1 -0
- package/dist/check-utils/display.js +66 -0
- package/dist/check-utils/display.js.map +1 -0
- package/dist/check-utils/index.d.ts +17 -0
- package/dist/check-utils/index.d.ts.map +1 -0
- package/dist/check-utils/index.js +13 -0
- package/dist/check-utils/index.js.map +1 -0
- package/dist/check-utils/path-matching.d.ts +40 -0
- package/dist/check-utils/path-matching.d.ts.map +1 -0
- package/dist/check-utils/path-matching.js +38 -0
- package/dist/check-utils/path-matching.js.map +1 -0
- package/dist/check-utils/source-analysis.d.ts +36 -0
- package/dist/check-utils/source-analysis.d.ts.map +1 -0
- package/dist/check-utils/source-analysis.js +44 -0
- package/dist/check-utils/source-analysis.js.map +1 -0
- package/dist/check-utils/test-helpers.d.ts +57 -0
- package/dist/check-utils/test-helpers.d.ts.map +1 -0
- package/dist/check-utils/test-helpers.js +71 -0
- package/dist/check-utils/test-helpers.js.map +1 -0
- package/dist/cli/__tests__/fit-gate-mode.test.d.ts +14 -0
- package/dist/cli/__tests__/fit-gate-mode.test.d.ts.map +1 -0
- package/dist/cli/__tests__/fit-gate-mode.test.js +110 -0
- package/dist/cli/__tests__/fit-gate-mode.test.js.map +1 -0
- package/dist/cli/__tests__/fit-modes-live.test.d.ts +13 -0
- package/dist/cli/__tests__/fit-modes-live.test.d.ts.map +1 -0
- package/dist/cli/__tests__/fit-modes-live.test.js +182 -0
- package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -0
- package/dist/cli/__tests__/report-data.test.d.ts +12 -0
- package/dist/cli/__tests__/report-data.test.d.ts.map +1 -0
- package/dist/cli/__tests__/report-data.test.js +113 -0
- package/dist/cli/__tests__/report-data.test.js.map +1 -0
- package/dist/cli/fit/__tests__/display-fold.test.d.ts +8 -0
- package/dist/cli/fit/__tests__/display-fold.test.d.ts.map +1 -0
- package/dist/cli/fit/__tests__/display-fold.test.js +87 -0
- package/dist/cli/fit/__tests__/display-fold.test.js.map +1 -0
- package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts +16 -0
- package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts.map +1 -0
- package/dist/cli/fit/__tests__/gate-resolved-config.test.js +62 -0
- package/dist/cli/fit/__tests__/gate-resolved-config.test.js.map +1 -0
- package/dist/cli/fit/check-loader.d.ts +37 -0
- package/dist/cli/fit/check-loader.d.ts.map +1 -0
- package/dist/cli/fit/check-loader.js +154 -0
- package/dist/cli/fit/check-loader.js.map +1 -0
- package/dist/cli/fit/config-loader.d.ts +55 -0
- package/dist/cli/fit/config-loader.d.ts.map +1 -0
- package/dist/cli/fit/config-loader.js +107 -0
- package/dist/cli/fit/config-loader.js.map +1 -0
- package/dist/cli/fit/display-registry.d.ts +19 -0
- package/dist/cli/fit/display-registry.d.ts.map +1 -0
- package/dist/cli/fit/display-registry.js +33 -0
- package/dist/cli/fit/display-registry.js.map +1 -0
- package/dist/cli/fit/envelope-view.d.ts +49 -0
- package/dist/cli/fit/envelope-view.d.ts.map +1 -0
- package/dist/cli/fit/envelope-view.js +85 -0
- package/dist/cli/fit/envelope-view.js.map +1 -0
- package/dist/cli/fit/fit-aux-command-specs.d.ts +35 -0
- package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -0
- package/dist/cli/fit/fit-aux-command-specs.js +110 -0
- package/dist/cli/fit/fit-aux-command-specs.js.map +1 -0
- package/dist/cli/fit/fit-command-spec.d.ts +24 -0
- package/dist/cli/fit/fit-command-spec.d.ts.map +1 -0
- package/dist/cli/fit/fit-command-spec.js +131 -0
- package/dist/cli/fit/fit-command-spec.js.map +1 -0
- package/dist/cli/fit/gate-compare-render.d.ts +13 -0
- package/dist/cli/fit/gate-compare-render.d.ts.map +1 -0
- package/dist/cli/fit/gate-compare-render.js +87 -0
- package/dist/cli/fit/gate-compare-render.js.map +1 -0
- package/dist/cli/fit/recipe-selector.d.ts +53 -0
- package/dist/cli/fit/recipe-selector.d.ts.map +1 -0
- package/dist/cli/fit/recipe-selector.js +106 -0
- package/dist/cli/fit/recipe-selector.js.map +1 -0
- package/dist/cli/fit/recipe-selector.test.d.ts +2 -0
- package/dist/cli/fit/recipe-selector.test.d.ts.map +1 -0
- package/dist/cli/fit/recipe-selector.test.js +69 -0
- package/dist/cli/fit/recipe-selector.test.js.map +1 -0
- package/dist/cli/fit/resolved-fitness-config.d.ts +48 -0
- package/dist/cli/fit/resolved-fitness-config.d.ts.map +1 -0
- package/dist/cli/fit/resolved-fitness-config.js +46 -0
- package/dist/cli/fit/resolved-fitness-config.js.map +1 -0
- package/dist/cli/fit/result-builders.d.ts +91 -0
- package/dist/cli/fit/result-builders.d.ts.map +1 -0
- package/dist/cli/fit/result-builders.js +206 -0
- package/dist/cli/fit/result-builders.js.map +1 -0
- package/dist/cli/fit-list.d.ts +7 -0
- package/dist/cli/fit-list.d.ts.map +1 -0
- package/dist/cli/fit-list.js +24 -0
- package/dist/cli/fit-list.js.map +1 -0
- package/dist/cli/fit-modes.d.ts +42 -0
- package/dist/cli/fit-modes.d.ts.map +1 -0
- package/dist/cli/fit-modes.js +322 -0
- package/dist/cli/fit-modes.js.map +1 -0
- package/dist/cli/fit-recipes.d.ts +7 -0
- package/dist/cli/fit-recipes.d.ts.map +1 -0
- package/dist/cli/fit-recipes.js +34 -0
- package/dist/cli/fit-recipes.js.map +1 -0
- package/dist/cli/fit-runner-views.d.ts +33 -0
- package/dist/cli/fit-runner-views.d.ts.map +1 -0
- package/dist/cli/fit-runner-views.js +92 -0
- package/dist/cli/fit-runner-views.js.map +1 -0
- package/dist/cli/fit-runner.d.ts +44 -0
- package/dist/cli/fit-runner.d.ts.map +1 -0
- package/dist/cli/fit-runner.js +250 -0
- package/dist/cli/fit-runner.js.map +1 -0
- package/dist/cli/fit-worker.d.ts +26 -0
- package/dist/cli/fit-worker.d.ts.map +1 -0
- package/dist/cli/fit-worker.js +67 -0
- package/dist/cli/fit-worker.js.map +1 -0
- package/dist/cli/fit.d.ts +74 -0
- package/dist/cli/fit.d.ts.map +1 -0
- package/dist/cli/fit.js +149 -0
- package/dist/cli/fit.js.map +1 -0
- package/dist/cli/report-data.d.ts +44 -0
- package/dist/cli/report-data.d.ts.map +1 -0
- package/dist/cli/report-data.js +89 -0
- package/dist/cli/report-data.js.map +1 -0
- package/dist/config/__tests__/fitness-config-schema.test.d.ts +6 -0
- package/dist/config/__tests__/fitness-config-schema.test.d.ts.map +1 -0
- package/dist/config/__tests__/fitness-config-schema.test.js +37 -0
- package/dist/config/__tests__/fitness-config-schema.test.js.map +1 -0
- package/dist/config/fitness-config-schema.d.ts +48 -0
- package/dist/config/fitness-config-schema.d.ts.map +1 -0
- package/dist/config/fitness-config-schema.js +62 -0
- package/dist/config/fitness-config-schema.js.map +1 -0
- package/dist/framework/__tests__/abortable-exec.test.d.ts +9 -0
- package/dist/framework/__tests__/abortable-exec.test.d.ts.map +1 -0
- package/dist/framework/__tests__/abortable-exec.test.js +102 -0
- package/dist/framework/__tests__/abortable-exec.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__/check-types.test.d.ts +2 -0
- package/dist/framework/__tests__/check-types.test.d.ts.map +1 -0
- package/dist/framework/__tests__/check-types.test.js +76 -0
- package/dist/framework/__tests__/check-types.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 +110 -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 +122 -0
- package/dist/framework/__tests__/content-filter-dispatch.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 +402 -0
- package/dist/framework/__tests__/define-check.test.js.map +1 -0
- package/dist/framework/__tests__/define-regex-list-check.test.d.ts +15 -0
- package/dist/framework/__tests__/define-regex-list-check.test.d.ts.map +1 -0
- package/dist/framework/__tests__/define-regex-list-check.test.js +299 -0
- package/dist/framework/__tests__/define-regex-list-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 +111 -0
- package/dist/framework/__tests__/directive-inventory.test.js.map +1 -0
- package/dist/framework/__tests__/directive-parsing.test.d.ts +13 -0
- package/dist/framework/__tests__/directive-parsing.test.d.ts.map +1 -0
- package/dist/framework/__tests__/directive-parsing.test.js +86 -0
- package/dist/framework/__tests__/directive-parsing.test.js.map +1 -0
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts +2 -0
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts.map +1 -0
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js +56 -0
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.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 +140 -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__/file-type-filter.test.d.ts +9 -0
- package/dist/framework/__tests__/file-type-filter.test.d.ts.map +1 -0
- package/dist/framework/__tests__/file-type-filter.test.js +39 -0
- package/dist/framework/__tests__/file-type-filter.test.js.map +1 -0
- package/dist/framework/__tests__/ignore-processing.test.d.ts +11 -0
- package/dist/framework/__tests__/ignore-processing.test.d.ts.map +1 -0
- package/dist/framework/__tests__/ignore-processing.test.js +175 -0
- package/dist/framework/__tests__/ignore-processing.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__/memory-profiler.test.d.ts +9 -0
- package/dist/framework/__tests__/memory-profiler.test.d.ts.map +1 -0
- package/dist/framework/__tests__/memory-profiler.test.js +108 -0
- package/dist/framework/__tests__/memory-profiler.test.js.map +1 -0
- package/dist/framework/__tests__/parse-cache.test.d.ts +9 -0
- package/dist/framework/__tests__/parse-cache.test.d.ts.map +1 -0
- package/dist/framework/__tests__/parse-cache.test.js +51 -0
- package/dist/framework/__tests__/parse-cache.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 +51 -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 +211 -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-registry.test.d.ts +8 -0
- package/dist/framework/__tests__/scope-registry.test.d.ts.map +1 -0
- package/dist/framework/__tests__/scope-registry.test.js +156 -0
- package/dist/framework/__tests__/scope-registry.test.js.map +1 -0
- package/dist/framework/__tests__/scope-resolver.golden.test.d.ts +2 -0
- package/dist/framework/__tests__/scope-resolver.golden.test.d.ts.map +1 -0
- package/dist/framework/__tests__/scope-resolver.golden.test.js +105 -0
- package/dist/framework/__tests__/scope-resolver.golden.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 +150 -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 +74 -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 +143 -0
- package/dist/framework/abortable-exec.js.map +1 -0
- package/dist/framework/check-config.d.ts +175 -0
- package/dist/framework/check-config.d.ts.map +1 -0
- package/dist/framework/check-config.js +115 -0
- package/dist/framework/check-config.js.map +1 -0
- package/dist/framework/check-types.d.ts +82 -0
- package/dist/framework/check-types.d.ts.map +1 -0
- package/dist/framework/check-types.js +63 -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/comment-openers.d.ts +11 -0
- package/dist/framework/comment-openers.d.ts.map +1 -0
- package/dist/framework/comment-openers.js +11 -0
- package/dist/framework/comment-openers.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/define-check.d.ts +38 -0
- package/dist/framework/define-check.d.ts.map +1 -0
- package/dist/framework/define-check.js +296 -0
- package/dist/framework/define-check.js.map +1 -0
- package/dist/framework/define-regex-list-check.d.ts +160 -0
- package/dist/framework/define-regex-list-check.d.ts.map +1 -0
- package/dist/framework/define-regex-list-check.js +177 -0
- package/dist/framework/define-regex-list-check.js.map +1 -0
- package/dist/framework/directive-inventory.d.ts +37 -0
- package/dist/framework/directive-inventory.d.ts.map +1 -0
- package/dist/framework/directive-inventory.js +82 -0
- package/dist/framework/directive-inventory.js.map +1 -0
- package/dist/framework/directive-parsing.d.ts +23 -0
- package/dist/framework/directive-parsing.d.ts.map +1 -0
- package/dist/framework/directive-parsing.js +39 -0
- package/dist/framework/directive-parsing.js.map +1 -0
- package/dist/framework/execution-context.d.ts +98 -0
- package/dist/framework/execution-context.d.ts.map +1 -0
- package/dist/framework/execution-context.js +145 -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 +199 -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 +36 -0
- package/dist/framework/ignore-processing.d.ts.map +1 -0
- package/dist/framework/ignore-processing.js +172 -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 +217 -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 +24 -0
- package/dist/framework/parse-cache.d.ts.map +1 -0
- package/dist/framework/parse-cache.js +41 -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 +11 -0
- package/dist/framework/register-helpers.d.ts.map +1 -0
- package/dist/framework/register-helpers.js +19 -0
- package/dist/framework/register-helpers.js.map +1 -0
- package/dist/framework/registry.d.ts +51 -0
- package/dist/framework/registry.d.ts.map +1 -0
- package/dist/framework/registry.js +131 -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-registry.d.ts +38 -0
- package/dist/framework/scope-registry.d.ts.map +1 -0
- package/dist/framework/scope-registry.js +77 -0
- package/dist/framework/scope-registry.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 +102 -0
- package/dist/framework/scope-resolver.js.map +1 -0
- package/dist/framework/severity-mapping.d.ts +17 -0
- package/dist/framework/severity-mapping.d.ts.map +1 -0
- package/dist/framework/severity-mapping.js +71 -0
- package/dist/framework/severity-mapping.js.map +1 -0
- package/dist/framework/strip-literals.d.ts +73 -0
- package/dist/framework/strip-literals.d.ts.map +1 -0
- package/dist/framework/strip-literals.js +213 -0
- package/dist/framework/strip-literals.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +17 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +17 -0
- package/dist/internal.js.map +1 -0
- package/dist/persistence/session-payload.d.ts +68 -0
- package/dist/persistence/session-payload.d.ts.map +1 -0
- package/dist/persistence/session-payload.js +78 -0
- package/dist/persistence/session-payload.js.map +1 -0
- package/dist/persistence/session-payload.test.d.ts +11 -0
- package/dist/persistence/session-payload.test.d.ts.map +1 -0
- package/dist/persistence/session-payload.test.js +80 -0
- package/dist/persistence/session-payload.test.js.map +1 -0
- package/dist/persistence/session-replay.d.ts +14 -0
- package/dist/persistence/session-replay.d.ts.map +1 -0
- package/dist/persistence/session-replay.js +85 -0
- package/dist/persistence/session-replay.js.map +1 -0
- package/dist/persistence/session-replay.test.d.ts +10 -0
- package/dist/persistence/session-replay.test.d.ts.map +1 -0
- package/dist/persistence/session-replay.test.js +171 -0
- package/dist/persistence/session-replay.test.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 +48 -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 +192 -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 +271 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/check-package-discovery.d.ts +19 -0
- package/dist/plugins/check-package-discovery.d.ts.map +1 -0
- package/dist/plugins/check-package-discovery.js +34 -0
- package/dist/plugins/check-package-discovery.js.map +1 -0
- package/dist/plugins/loader.d.ts +32 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +198 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +29 -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 +12 -0
- package/dist/recipes/__tests__/check-config.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/check-config.test.js +90 -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 +160 -0
- package/dist/recipes/__tests__/check-resolution.test.js.map +1 -0
- package/dist/recipes/__tests__/execution-branches.test.d.ts +10 -0
- package/dist/recipes/__tests__/execution-branches.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/execution-branches.test.js +612 -0
- package/dist/recipes/__tests__/execution-branches.test.js.map +1 -0
- package/dist/recipes/__tests__/execution-paths.test.d.ts +10 -0
- package/dist/recipes/__tests__/execution-paths.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/execution-paths.test.js +280 -0
- package/dist/recipes/__tests__/execution-paths.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 +89 -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__/run-one-check.test.d.ts +14 -0
- package/dist/recipes/__tests__/run-one-check.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/run-one-check.test.js +182 -0
- package/dist/recipes/__tests__/run-one-check.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 +572 -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 +241 -0
- package/dist/recipes/built-in-recipes.js.map +1 -0
- package/dist/recipes/check-config.d.ts +56 -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 +36 -0
- package/dist/recipes/check-resolution.d.ts.map +1 -0
- package/dist/recipes/check-resolution.js +81 -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 +197 -0
- package/dist/recipes/check-result-processor.js.map +1 -0
- package/dist/recipes/parallel-execution.d.ts +38 -0
- package/dist/recipes/parallel-execution.d.ts.map +1 -0
- package/dist/recipes/parallel-execution.js +61 -0
- package/dist/recipes/parallel-execution.js.map +1 -0
- package/dist/recipes/registry.d.ts +47 -0
- package/dist/recipes/registry.d.ts.map +1 -0
- package/dist/recipes/registry.js +70 -0
- package/dist/recipes/registry.js.map +1 -0
- package/dist/recipes/retry.d.ts +29 -0
- package/dist/recipes/retry.d.ts.map +1 -0
- package/dist/recipes/retry.js +23 -0
- package/dist/recipes/retry.js.map +1 -0
- package/dist/recipes/run-one-check.d.ts +59 -0
- package/dist/recipes/run-one-check.d.ts.map +1 -0
- package/dist/recipes/run-one-check.js +174 -0
- package/dist/recipes/run-one-check.js.map +1 -0
- package/dist/recipes/sequential-execution.d.ts +12 -0
- package/dist/recipes/sequential-execution.d.ts.map +1 -0
- package/dist/recipes/sequential-execution.js +48 -0
- package/dist/recipes/sequential-execution.js.map +1 -0
- package/dist/recipes/service-types.d.ts +87 -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 +73 -0
- package/dist/recipes/service.d.ts.map +1 -0
- package/dist/recipes/service.js +438 -0
- package/dist/recipes/service.js.map +1 -0
- package/dist/recipes/types.d.ts +155 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +56 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/scaffold/config-block.d.ts +17 -0
- package/dist/scaffold/config-block.d.ts.map +1 -0
- package/dist/scaffold/config-block.js +30 -0
- package/dist/scaffold/config-block.js.map +1 -0
- package/dist/scaffold/examples.d.ts +30 -0
- package/dist/scaffold/examples.d.ts.map +1 -0
- package/dist/scaffold/examples.js +129 -0
- package/dist/scaffold/examples.js.map +1 -0
- package/dist/scope-augmentation.d.ts +77 -0
- package/dist/scope-augmentation.d.ts.map +1 -0
- package/dist/scope-augmentation.js +31 -0
- package/dist/scope-augmentation.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 +141 -0
- package/dist/signalers/__tests__/loader.test.js.map +1 -0
- package/dist/signalers/__tests__/violation-to-signal.test.d.ts +2 -0
- package/dist/signalers/__tests__/violation-to-signal.test.d.ts.map +1 -0
- package/dist/signalers/__tests__/violation-to-signal.test.js +59 -0
- package/dist/signalers/__tests__/violation-to-signal.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 +30 -0
- package/dist/signalers/loader.d.ts.map +1 -0
- package/dist/signalers/loader.js +120 -0
- package/dist/signalers/loader.js.map +1 -0
- package/dist/signalers/schema.d.ts +60 -0
- package/dist/signalers/schema.d.ts.map +1 -0
- package/dist/signalers/schema.js +74 -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/signalers/violation-to-signal.d.ts +38 -0
- package/dist/signalers/violation-to-signal.d.ts.map +1 -0
- package/dist/signalers/violation-to-signal.js +43 -0
- package/dist/signalers/violation-to-signal.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 +190 -0
- package/dist/targets/__tests__/loader.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 +182 -0
- package/dist/targets/__tests__/target-registry.test.js.map +1 -0
- package/dist/targets/index.d.ts +18 -0
- package/dist/targets/index.d.ts.map +1 -0
- package/dist/targets/index.js +21 -0
- package/dist/targets/index.js.map +1 -0
- package/dist/targets/loader.d.ts +27 -0
- package/dist/targets/loader.d.ts.map +1 -0
- package/dist/targets/loader.js +178 -0
- package/dist/targets/loader.js.map +1 -0
- package/dist/targets/target-registry.d.ts +41 -0
- package/dist/targets/target-registry.d.ts.map +1 -0
- package/dist/targets/target-registry.js +71 -0
- package/dist/targets/target-registry.js.map +1 -0
- package/dist/targets/types.d.ts +14 -0
- package/dist/targets/types.d.ts.map +1 -0
- package/dist/targets/types.js +14 -0
- package/dist/targets/types.js.map +1 -0
- package/dist/tool.d.ts +61 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +260 -0
- package/dist/tool.js.map +1 -0
- package/dist/types/findings.d.ts +113 -0
- package/dist/types/findings.d.ts.map +1 -0
- package/dist/types/findings.js +89 -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 +33 -0
- package/dist/types/severity.js.map +1 -0
- package/package.json +137 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-registry.d.ts","sourceRoot":"","sources":["../../src/framework/scope-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAIlF,OAAO,0BAA0B,CAAC;AAElC,gEAAgE;AAChE,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,IAAI,qBAAqB,CAE5D;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAgCD,+CAA+C;AAC/C,wBAAgB,oBAAoB,IAAI,aAAa,CAEpD;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,IAAI,qBAAqB,CAE7D;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,IAAI,gBAAgB,CAE1D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Scope-owned fitness registries — the simulation pattern.
|
|
3
|
+
*
|
|
4
|
+
* Each `RunScope` owns its own check + recipe registries (D7 — tool
|
|
5
|
+
* subscopes via module augmentation). The fitness tool's
|
|
6
|
+
* `contributeScope` hook constructs fresh registries per CLI invocation
|
|
7
|
+
* and attaches them to `scope.fitness.{checks,recipes}`. The module-level
|
|
8
|
+
* singletons (`defaultRegistry` / `defaultRecipeRegistry`) are gone —
|
|
9
|
+
* consumers read via `currentCheckRegistry()` / `currentRecipeRegistry()`,
|
|
10
|
+
* which route through the scope-bound instances and throw outside a scope.
|
|
11
|
+
*
|
|
12
|
+
* Public API (mirrors simulation's `createScenarioRegistry` /
|
|
13
|
+
* `currentScenarioRegistry`):
|
|
14
|
+
* - `createCheckRegistry()` — factory used by `contributeScope`.
|
|
15
|
+
* - `createRecipeRegistry()` — factory used by `contributeScope`.
|
|
16
|
+
* - `createFitnessLoadState()`— fresh `ensureChecksLoaded` lifecycle slot.
|
|
17
|
+
* - `currentCheckRegistry()` — reads `scope.fitness.checks`; throws
|
|
18
|
+
* outside a scope / when the subscope is absent.
|
|
19
|
+
* - `currentRecipeRegistry()` — reads `scope.fitness.recipes`; same throws.
|
|
20
|
+
* - `currentFitnessLoadState()` — reads `scope.fitness.load`; same throws.
|
|
21
|
+
*/
|
|
22
|
+
import { currentScope } from '@opensip-cli/core';
|
|
23
|
+
import { FitnessRecipeRegistry } from '../recipes/registry.js';
|
|
24
|
+
import { CheckRegistry } from './registry.js';
|
|
25
|
+
// Side-effect import: ensures the `ScopeContribution.fitness` augmentation is
|
|
26
|
+
// loaded so `scope.fitness` is the correctly-typed slot at every read site.
|
|
27
|
+
import '../scope-augmentation.js';
|
|
28
|
+
/** Construct a fresh check registry for a single `RunScope`. */
|
|
29
|
+
export function createCheckRegistry() {
|
|
30
|
+
return new CheckRegistry();
|
|
31
|
+
}
|
|
32
|
+
/** Construct a fresh recipe registry (built-ins pre-seeded) for a single `RunScope`. */
|
|
33
|
+
export function createRecipeRegistry() {
|
|
34
|
+
return new FitnessRecipeRegistry();
|
|
35
|
+
}
|
|
36
|
+
/** Construct a fresh, empty `ensureChecksLoaded` lifecycle slot for a `RunScope`. */
|
|
37
|
+
export function createFitnessLoadState() {
|
|
38
|
+
return { loadedFor: null, pluginLoadErrors: [], loadWarnings: [] };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Read the current scope's fitness subscope. Throws when no scope is
|
|
42
|
+
* active or when the fitness subscope is missing — both indicate the
|
|
43
|
+
* caller is running outside the CLI's pre-action-hook (or the test
|
|
44
|
+
* fixture forgot to construct + enter a scope).
|
|
45
|
+
*
|
|
46
|
+
* @throws {Error} When called outside `runWithScope(...)`, or when the
|
|
47
|
+
* active scope has no fitness subscope.
|
|
48
|
+
*/
|
|
49
|
+
function currentFitnessSubscope() {
|
|
50
|
+
const scope = currentScope();
|
|
51
|
+
if (!scope) {
|
|
52
|
+
throw new Error('fitness: scope read attempted outside a RunScope. ' +
|
|
53
|
+
'Wrap the call site in runWithScope (production: pre-action-hook handles ' +
|
|
54
|
+
'this; tests: use makeTestScope + fitnessTool.contributeScope or construct ' +
|
|
55
|
+
'the registries directly).');
|
|
56
|
+
}
|
|
57
|
+
if (!scope.fitness) {
|
|
58
|
+
throw new Error('fitness: scope.fitness is missing. The fitness tool must be ' +
|
|
59
|
+
'registered and its contributeScope hook must run before check/recipe reads. ' +
|
|
60
|
+
'(production: bootstrap registers fitnessTool; tests: call ' +
|
|
61
|
+
'fitnessTool.contributeScope() after makeTestScope.)');
|
|
62
|
+
}
|
|
63
|
+
return scope.fitness;
|
|
64
|
+
}
|
|
65
|
+
/** Read the current scope's check registry. */
|
|
66
|
+
export function currentCheckRegistry() {
|
|
67
|
+
return currentFitnessSubscope().checks;
|
|
68
|
+
}
|
|
69
|
+
/** Read the current scope's recipe registry. */
|
|
70
|
+
export function currentRecipeRegistry() {
|
|
71
|
+
return currentFitnessSubscope().recipes;
|
|
72
|
+
}
|
|
73
|
+
/** Read the current scope's `ensureChecksLoaded` lifecycle state. */
|
|
74
|
+
export function currentFitnessLoadState() {
|
|
75
|
+
return currentFitnessSubscope().load;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=scope-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-registry.js","sourceRoot":"","sources":["../../src/framework/scope-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,8EAA8E;AAC9E,4EAA4E;AAC5E,OAAO,0BAA0B,CAAC;AAElC,gEAAgE;AAChE,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,qBAAqB,EAAE,CAAC;AACrC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,sBAAsB;IACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB;IAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oDAAoD;YAClD,0EAA0E;YAC1E,4EAA4E;YAC5E,2BAA2B,CAC9B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,8EAA8E;YAC9E,4DAA4D;YAC5D,qDAAqD,CACxD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB;IAClC,OAAO,sBAAsB,EAAE,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,qBAAqB;IACnC,OAAO,sBAAsB,EAAE,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,uBAAuB;IACrC,OAAO,sBAAsB,EAAE,CAAC,IAAI,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Scope-based file resolution for fitness checks
|
|
3
|
+
*
|
|
4
|
+
* Checks declare intent (languages + concerns), targets declare reality
|
|
5
|
+
* (languages + concerns + globs), and this module resolves the match.
|
|
6
|
+
*
|
|
7
|
+
* Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
|
|
8
|
+
* Per-check resolution is a pure in-memory lookup — no redundant I/O.
|
|
9
|
+
*/
|
|
10
|
+
import type { CheckScope } from './check-config.js';
|
|
11
|
+
import type { TargetRegistry } from '../targets/target-registry.js';
|
|
12
|
+
import type { TargetsConfig } from '../targets/types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Build the complete check-to-files map for all checks with scopes or overrides.
|
|
15
|
+
*
|
|
16
|
+
* All targets are globbed once upfront. Per-check resolution is a pure
|
|
17
|
+
* in-memory lookup against the pre-resolved file lists.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildScopeBasedFileMap(checks: readonly {
|
|
20
|
+
slug: string;
|
|
21
|
+
scope?: CheckScope;
|
|
22
|
+
}[], registry: TargetRegistry, config: TargetsConfig, rootDir: string): Map<string, readonly string[]>;
|
|
23
|
+
//# sourceMappingURL=scope-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolver.d.ts","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAuHzD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,EAAE,EACvD,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAgBhC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Scope-based file resolution for fitness checks
|
|
3
|
+
*
|
|
4
|
+
* Checks declare intent (languages + concerns), targets declare reality
|
|
5
|
+
* (languages + concerns + globs), and this module resolves the match.
|
|
6
|
+
*
|
|
7
|
+
* Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
|
|
8
|
+
* Per-check resolution is a pure in-memory lookup — no redundant I/O.
|
|
9
|
+
*/
|
|
10
|
+
import { currentScope } from '@opensip-cli/core';
|
|
11
|
+
import { applyGlobalExcludes, preResolveAllTargets, resolveTargets } from '@opensip-cli/targeting';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Pre-resolved target file cache
|
|
14
|
+
// =============================================================================
|
|
15
|
+
//
|
|
16
|
+
// The generic glob mechanics — `preResolveAllTargets` (deduped multi-target
|
|
17
|
+
// glob pass), `resolveTargets` (single-pass include/exclude expansion), and
|
|
18
|
+
// `applyGlobalExcludes` — now live ONCE in `@opensip-cli/targeting` (ADR-0037,
|
|
19
|
+
// Phase 0) and are imported above. Fitness keeps only the check-domain
|
|
20
|
+
// resolution below (`unionTargetFiles`, the 3-tier `resolveFilesForCheck`, and
|
|
21
|
+
// `buildScopeBasedFileMap`).
|
|
22
|
+
/**
|
|
23
|
+
* Look up pre-resolved files for a set of target names, union and deduplicate.
|
|
24
|
+
*/
|
|
25
|
+
function unionTargetFiles(targetNames, resolvedTargets) {
|
|
26
|
+
if (targetNames.length === 1) {
|
|
27
|
+
return [...(resolvedTargets.get(targetNames[0]) ?? [])];
|
|
28
|
+
}
|
|
29
|
+
const files = new Set();
|
|
30
|
+
for (const name of targetNames) {
|
|
31
|
+
const targetFiles = resolvedTargets.get(name);
|
|
32
|
+
if (targetFiles) {
|
|
33
|
+
for (const f of targetFiles)
|
|
34
|
+
files.add(f);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return [...files].sort();
|
|
38
|
+
}
|
|
39
|
+
function resolveFilesForCheck(slug, scope, ctx) {
|
|
40
|
+
const { registry, config, rootDir, resolvedTargets } = ctx;
|
|
41
|
+
const { globalExcludes, checkOverrides } = config;
|
|
42
|
+
// When resolvedTargets is provided, globalExcludes are pre-applied — skip re-filtering
|
|
43
|
+
const maybeApplyExcludes = (files) => resolvedTargets ? files : applyGlobalExcludes(files, rootDir, globalExcludes);
|
|
44
|
+
// Use pre-resolved cache when available, otherwise fall back to direct glob
|
|
45
|
+
const lookupFiles = (targetRef) => {
|
|
46
|
+
const names = typeof targetRef === 'string' ? [targetRef] : targetRef;
|
|
47
|
+
if (resolvedTargets) {
|
|
48
|
+
return unionTargetFiles(names, resolvedTargets);
|
|
49
|
+
}
|
|
50
|
+
// Fallback: resolve directly via the substrate single-pass resolver
|
|
51
|
+
// (single-check mode without precomputed cache).
|
|
52
|
+
const targets = names
|
|
53
|
+
.map((name) => registry.getByName(name))
|
|
54
|
+
.filter((t) => t !== undefined);
|
|
55
|
+
return [...resolveTargets(targets, rootDir, globalExcludes)];
|
|
56
|
+
};
|
|
57
|
+
// 1. Check overrides take priority (for marketplace/third-party checks)
|
|
58
|
+
const override = checkOverrides[slug];
|
|
59
|
+
if (override) {
|
|
60
|
+
return maybeApplyExcludes(lookupFiles(override));
|
|
61
|
+
}
|
|
62
|
+
// 2. Scope-based matching
|
|
63
|
+
if (scope && (scope.languages.length > 0 || scope.concerns.length > 0)) {
|
|
64
|
+
// Re-canonicalize the check-declared languages at *execution* time against
|
|
65
|
+
// the current per-run LanguageRegistry. This makes `defineCheck` timing
|
|
66
|
+
// irrelevant: checks defined at module load (before any scope or language
|
|
67
|
+
// adapters are registered) still match correctly once a real RunScope with
|
|
68
|
+
// registered adapters is active. The TargetRegistry.findByScope also
|
|
69
|
+
// canonicalizes defensively, but doing it at the resolver call site makes
|
|
70
|
+
// the "always canonicalize at match time" contract explicit and local.
|
|
71
|
+
const liveScopeLangs = scope.languages.map((l) => currentScope()?.languages.canonicalize(l) ?? l.toLowerCase());
|
|
72
|
+
const matchedTargets = registry.findByScope(liveScopeLangs, scope.concerns);
|
|
73
|
+
if (matchedTargets.length === 0) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const names = matchedTargets.map((t) => t.config.name);
|
|
77
|
+
return maybeApplyExcludes(lookupFiles(names));
|
|
78
|
+
}
|
|
79
|
+
// 3. No scope, no override — undefined signals "use file cache fallback"
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build the complete check-to-files map for all checks with scopes or overrides.
|
|
84
|
+
*
|
|
85
|
+
* All targets are globbed once upfront. Per-check resolution is a pure
|
|
86
|
+
* in-memory lookup against the pre-resolved file lists.
|
|
87
|
+
*/
|
|
88
|
+
export function buildScopeBasedFileMap(checks, registry, config, rootDir) {
|
|
89
|
+
// Pre-resolve all targets once — deduplicated glob pass across all targets.
|
|
90
|
+
// GlobalExcludes are applied during pre-resolution so per-check lookups are pure in-memory.
|
|
91
|
+
const resolvedTargets = preResolveAllTargets(registry, config.globalExcludes, rootDir);
|
|
92
|
+
const ctx = { registry, config, rootDir, resolvedTargets };
|
|
93
|
+
const result = new Map();
|
|
94
|
+
for (const check of checks) {
|
|
95
|
+
const files = resolveFilesForCheck(check.slug, check.scope, ctx);
|
|
96
|
+
if (files !== undefined) {
|
|
97
|
+
result.set(check.slug, files);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=scope-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolver.js","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared severity and category mapping for fitness checks
|
|
3
|
+
*
|
|
4
|
+
* Maps FindingSeverity to SignalSeverity and check category strings
|
|
5
|
+
* to SignalCategory. Used by defineCheck and PatternDetector.
|
|
6
|
+
*/
|
|
7
|
+
import type { FindingSeverity } from '../types/findings.js';
|
|
8
|
+
import type { SignalSeverity, SignalCategory } from '@opensip-cli/core';
|
|
9
|
+
/**
|
|
10
|
+
* Map FindingSeverity to SignalSeverity. Release 2.13.0 (§5.9): delegates to the
|
|
11
|
+
* central `SeverityPolicy` (one author→wire home), byte-identical
|
|
12
|
+
* (`error → high`, `warning → medium`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function mapFindingSeverity(severity: FindingSeverity): SignalSeverity;
|
|
15
|
+
/** Map check tags to SignalCategory (first matching tag wins) */
|
|
16
|
+
export declare function mapTagsToSignalCategory(tags: readonly string[]): SignalCategory;
|
|
17
|
+
//# sourceMappingURL=severity-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity-mapping.d.ts","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAE5E;AAiDD,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAO/E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// @fitness-ignore-file project-readme-existence -- internal module, not a package root
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Shared severity and category mapping for fitness checks
|
|
4
|
+
*
|
|
5
|
+
* Maps FindingSeverity to SignalSeverity and check category strings
|
|
6
|
+
* to SignalCategory. Used by defineCheck and PatternDetector.
|
|
7
|
+
*/
|
|
8
|
+
import { SeverityPolicy, logger } from '@opensip-cli/core';
|
|
9
|
+
/**
|
|
10
|
+
* Map FindingSeverity to SignalSeverity. Release 2.13.0 (§5.9): delegates to the
|
|
11
|
+
* central `SeverityPolicy` (one author→wire home), byte-identical
|
|
12
|
+
* (`error → high`, `warning → medium`).
|
|
13
|
+
*/
|
|
14
|
+
export function mapFindingSeverity(severity) {
|
|
15
|
+
return SeverityPolicy.liftAuthorSeverity(severity);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Tag → category lookup table. Frozen to make accidental mutation
|
|
19
|
+
* impossible. The original 7-arm switch translated literally into this
|
|
20
|
+
* record; ordering of categories doesn't matter (the iteration walks
|
|
21
|
+
* the input tag list, not the table).
|
|
22
|
+
*
|
|
23
|
+
* The `quality` → `warning` mapping mirrors the pre-table fallback:
|
|
24
|
+
* "this is a low-severity quality concern, surface it as a warning."
|
|
25
|
+
*/
|
|
26
|
+
const TAG_TO_CATEGORY = Object.freeze({
|
|
27
|
+
security: 'security',
|
|
28
|
+
performance: 'performance',
|
|
29
|
+
architecture: 'architecture',
|
|
30
|
+
quality: 'warning',
|
|
31
|
+
resilience: 'resilience',
|
|
32
|
+
testing: 'testing',
|
|
33
|
+
documentation: 'documentation',
|
|
34
|
+
});
|
|
35
|
+
const KNOWN_CATEGORY_TAGS = new Set(Object.keys(TAG_TO_CATEGORY));
|
|
36
|
+
/**
|
|
37
|
+
* Tags we have already warned about. Avoids spamming the warn channel
|
|
38
|
+
* for the same misspelled tag on every check that carries it. Cleared
|
|
39
|
+
* implicitly on process restart.
|
|
40
|
+
*/
|
|
41
|
+
const warnedUnknownTagSets = new Set();
|
|
42
|
+
function maybeWarnUnknownTags(tags) {
|
|
43
|
+
if (tags.length === 0)
|
|
44
|
+
return;
|
|
45
|
+
const hasKnown = tags.some((tag) => KNOWN_CATEGORY_TAGS.has(tag));
|
|
46
|
+
if (hasKnown)
|
|
47
|
+
return;
|
|
48
|
+
const sorted = [...tags].sort();
|
|
49
|
+
const key = sorted.join(',');
|
|
50
|
+
if (warnedUnknownTagSets.has(key))
|
|
51
|
+
return;
|
|
52
|
+
warnedUnknownTagSets.add(key);
|
|
53
|
+
logger.warn({
|
|
54
|
+
evt: 'fitness.severity_mapping.unknown_tags',
|
|
55
|
+
module: 'fitness:framework',
|
|
56
|
+
msg: 'check tags do not include any known signal category — falling back to "warning"',
|
|
57
|
+
tags: sorted,
|
|
58
|
+
knownCategoryTags: [...KNOWN_CATEGORY_TAGS].sort(),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** Map check tags to SignalCategory (first matching tag wins) */
|
|
62
|
+
export function mapTagsToSignalCategory(tags) {
|
|
63
|
+
for (const tag of tags) {
|
|
64
|
+
const category = TAG_TO_CATEGORY[tag];
|
|
65
|
+
if (category !== undefined)
|
|
66
|
+
return category;
|
|
67
|
+
}
|
|
68
|
+
maybeWarnUnknownTags(tags);
|
|
69
|
+
return 'warning';
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=severity-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity-mapping.js","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,OAAO,cAAc,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,eAAe,GAA6C,MAAM,CAAC,MAAM,CAAC;IAC9E,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAElE;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE/C,SAAS,oBAAoB,CAAC,IAAuB;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,uCAAuC;QAC5C,MAAM,EAAE,mBAAmB;QAC3B,GAAG,EAAE,iFAAiF;QACtF,IAAI,EAAE,MAAM;QACZ,iBAAiB,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,IAAI,EAAE;KACnD,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,IAAuB;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;IAC9C,CAAC;IACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared utilities for stripping string literal and comment
|
|
3
|
+
* content from source code. Used by fitness checks to avoid false positives
|
|
4
|
+
* from patterns appearing inside string literals or comments.
|
|
5
|
+
*
|
|
6
|
+
* Canonical rationale for the two-stripper split
|
|
7
|
+
* ----------------------------------------------
|
|
8
|
+
* Fitness ships two complementary content-stripping families and this is
|
|
9
|
+
* the canonical place that explains why both exist (audit 2026-05-23 F9):
|
|
10
|
+
*
|
|
11
|
+
* 1. **This module** — regex-based, **language-agnostic**, no AST
|
|
12
|
+
* dependency. Used by checks that scan Python/Go/Java/C++/universal
|
|
13
|
+
* text where a real parser would be overkill (or unavailable). Trades
|
|
14
|
+
* off precision: edge cases like nested template literals or escaped
|
|
15
|
+
* quotes inside comments are best-effort.
|
|
16
|
+
*
|
|
17
|
+
* 2. **`filterContent` in `@opensip-cli/lang-typescript`** — uses the
|
|
18
|
+
* real TypeScript scanner, position-preserving (string content is
|
|
19
|
+
* replaced with whitespace of equal length so line/column numbers
|
|
20
|
+
* survive). Cached. Used exclusively by TS-aware checks where the
|
|
21
|
+
* precision matters.
|
|
22
|
+
*
|
|
23
|
+
* The dispatch boundary is `applyContentFilter` in
|
|
24
|
+
* `@opensip-cli/core/languages/content-filter-dispatch.ts` — checks
|
|
25
|
+
* declare a `contentFilter` mode (`'strip-strings'`,
|
|
26
|
+
* `'strip-strings-and-comments'`, `'raw'`) and the language adapter for
|
|
27
|
+
* the file's extension routes to the right family. New strippers plug in
|
|
28
|
+
* by implementing the `LanguageAdapter` contract; nothing in the check
|
|
29
|
+
* layer needs to change.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Strip string literal contents from a single line.
|
|
33
|
+
* Replaces content inside '...', "...", and `...` with empty strings.
|
|
34
|
+
* Used by checks for per-line pattern matching to avoid false positives
|
|
35
|
+
* from patterns appearing inside string literals.
|
|
36
|
+
*/
|
|
37
|
+
export declare function stripStringLiterals(line: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Strip string literals and single-line comments from full file content.
|
|
40
|
+
* Used by checks for quick-filter gates to avoid matching keywords
|
|
41
|
+
* that only appear in documentation strings or comments.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Check if a position in a line is inside a string literal.
|
|
45
|
+
* Scans characters before the match position for unescaped quotes/backticks.
|
|
46
|
+
* Used by checks to avoid false positives from suggestion/description text.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isInsideStringLiteral(line: string, matchIndex: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Strip string literals and single-line comments from full file content.
|
|
51
|
+
* Used by checks for quick-filter gates to avoid matching keywords
|
|
52
|
+
* that only appear in documentation strings or comments.
|
|
53
|
+
*/
|
|
54
|
+
export declare function stripStringsAndComments(content: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Strip strings, single-line comments, AND block comments while preserving
|
|
57
|
+
* BOTH character positions and line numbers. Each stripped character is
|
|
58
|
+
* replaced with a space (non-newline) so the output has identical length
|
|
59
|
+
* and line offsets to the input. Use this when downstream processing
|
|
60
|
+
* needs to map a match index back to a line number in the ORIGINAL
|
|
61
|
+
* source — `stripStringsAndComments` collapses string literals to empty
|
|
62
|
+
* pairs, which shifts indexes and breaks `getLineNumber(content, idx)`.
|
|
63
|
+
*
|
|
64
|
+
* Strips:
|
|
65
|
+
* - Single-quoted, double-quoted, and template-literal string contents
|
|
66
|
+
* - Single-line `// ...` comments (to end of line)
|
|
67
|
+
* - Block `/* ... *\/` comments (including JSDoc `/** ... *\/`)
|
|
68
|
+
*
|
|
69
|
+
* Preserves: newlines, total character count, character positions of
|
|
70
|
+
* code OUTSIDE these regions.
|
|
71
|
+
*/
|
|
72
|
+
export declare function stripStringsAndCommentsPreservingPositions(content: string): string;
|
|
73
|
+
//# sourceMappingURL=strip-literals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-literals.d.ts","sourceRoot":"","sources":["../../src/framework/strip-literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAOD;;;;GAIG;AACH;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAyB/E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,0CAA0C,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuGlF"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared utilities for stripping string literal and comment
|
|
3
|
+
* content from source code. Used by fitness checks to avoid false positives
|
|
4
|
+
* from patterns appearing inside string literals or comments.
|
|
5
|
+
*
|
|
6
|
+
* Canonical rationale for the two-stripper split
|
|
7
|
+
* ----------------------------------------------
|
|
8
|
+
* Fitness ships two complementary content-stripping families and this is
|
|
9
|
+
* the canonical place that explains why both exist (audit 2026-05-23 F9):
|
|
10
|
+
*
|
|
11
|
+
* 1. **This module** — regex-based, **language-agnostic**, no AST
|
|
12
|
+
* dependency. Used by checks that scan Python/Go/Java/C++/universal
|
|
13
|
+
* text where a real parser would be overkill (or unavailable). Trades
|
|
14
|
+
* off precision: edge cases like nested template literals or escaped
|
|
15
|
+
* quotes inside comments are best-effort.
|
|
16
|
+
*
|
|
17
|
+
* 2. **`filterContent` in `@opensip-cli/lang-typescript`** — uses the
|
|
18
|
+
* real TypeScript scanner, position-preserving (string content is
|
|
19
|
+
* replaced with whitespace of equal length so line/column numbers
|
|
20
|
+
* survive). Cached. Used exclusively by TS-aware checks where the
|
|
21
|
+
* precision matters.
|
|
22
|
+
*
|
|
23
|
+
* The dispatch boundary is `applyContentFilter` in
|
|
24
|
+
* `@opensip-cli/core/languages/content-filter-dispatch.ts` — checks
|
|
25
|
+
* declare a `contentFilter` mode (`'strip-strings'`,
|
|
26
|
+
* `'strip-strings-and-comments'`, `'raw'`) and the language adapter for
|
|
27
|
+
* the file's extension routes to the right family. New strippers plug in
|
|
28
|
+
* by implementing the `LanguageAdapter` contract; nothing in the check
|
|
29
|
+
* layer needs to change.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Strip string literal contents from a single line.
|
|
33
|
+
* Replaces content inside '...', "...", and `...` with empty strings.
|
|
34
|
+
* Used by checks for per-line pattern matching to avoid false positives
|
|
35
|
+
* from patterns appearing inside string literals.
|
|
36
|
+
*/
|
|
37
|
+
export function stripStringLiterals(line) {
|
|
38
|
+
return line
|
|
39
|
+
.replaceAll(/'(?:[^'\\]|\\.)*'/g, "''")
|
|
40
|
+
.replaceAll(/"(?:[^"\\]|\\.)*"/g, '""')
|
|
41
|
+
.replaceAll(/`(?:[^`\\]|\\.)*`/gs, '``');
|
|
42
|
+
}
|
|
43
|
+
/** Shared regex patterns for string literal replacement */
|
|
44
|
+
const SINGLE_QUOTE_RE = /'(?:[^'\\]|\\.)*'/g;
|
|
45
|
+
const DOUBLE_QUOTE_RE = /"(?:[^"\\]|\\.)*"/g;
|
|
46
|
+
const BACKTICK_RE = /`(?:[^`\\]|\\.)*`/gs;
|
|
47
|
+
/**
|
|
48
|
+
* Strip string literals and single-line comments from full file content.
|
|
49
|
+
* Used by checks for quick-filter gates to avoid matching keywords
|
|
50
|
+
* that only appear in documentation strings or comments.
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* Check if a position in a line is inside a string literal.
|
|
54
|
+
* Scans characters before the match position for unescaped quotes/backticks.
|
|
55
|
+
* Used by checks to avoid false positives from suggestion/description text.
|
|
56
|
+
*/
|
|
57
|
+
export function isInsideStringLiteral(line, matchIndex) {
|
|
58
|
+
let inSingle = false;
|
|
59
|
+
let inDouble = false;
|
|
60
|
+
let inTemplate = false;
|
|
61
|
+
let escaped = false;
|
|
62
|
+
for (let i = 0; i < matchIndex; i++) {
|
|
63
|
+
const ch = line[i];
|
|
64
|
+
if (escaped) {
|
|
65
|
+
escaped = false;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (ch === '\\' && (inSingle || inDouble || inTemplate)) {
|
|
69
|
+
escaped = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (ch === "'" && !inDouble && !inTemplate)
|
|
73
|
+
inSingle = !inSingle;
|
|
74
|
+
else if (ch === '"' && !inSingle && !inTemplate)
|
|
75
|
+
inDouble = !inDouble;
|
|
76
|
+
else if (ch === '`' && !inSingle && !inDouble)
|
|
77
|
+
inTemplate = !inTemplate;
|
|
78
|
+
}
|
|
79
|
+
return inSingle || inDouble || inTemplate;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Strip string literals and single-line comments from full file content.
|
|
83
|
+
* Used by checks for quick-filter gates to avoid matching keywords
|
|
84
|
+
* that only appear in documentation strings or comments.
|
|
85
|
+
*/
|
|
86
|
+
export function stripStringsAndComments(content) {
|
|
87
|
+
// Strip string literals first
|
|
88
|
+
let result = content
|
|
89
|
+
.replaceAll(SINGLE_QUOTE_RE, "''")
|
|
90
|
+
.replaceAll(DOUBLE_QUOTE_RE, '""')
|
|
91
|
+
.replaceAll(BACKTICK_RE, '``');
|
|
92
|
+
// Strip single-line comments (after string stripping to avoid matching // inside strings)
|
|
93
|
+
// eslint-disable-next-line sonarjs/slow-regex -- .*$ anchored to line end; linear scan
|
|
94
|
+
result = result.replaceAll(/\/\/.*$/gm, '');
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Strip strings, single-line comments, AND block comments while preserving
|
|
99
|
+
* BOTH character positions and line numbers. Each stripped character is
|
|
100
|
+
* replaced with a space (non-newline) so the output has identical length
|
|
101
|
+
* and line offsets to the input. Use this when downstream processing
|
|
102
|
+
* needs to map a match index back to a line number in the ORIGINAL
|
|
103
|
+
* source — `stripStringsAndComments` collapses string literals to empty
|
|
104
|
+
* pairs, which shifts indexes and breaks `getLineNumber(content, idx)`.
|
|
105
|
+
*
|
|
106
|
+
* Strips:
|
|
107
|
+
* - Single-quoted, double-quoted, and template-literal string contents
|
|
108
|
+
* - Single-line `// ...` comments (to end of line)
|
|
109
|
+
* - Block `/* ... *\/` comments (including JSDoc `/** ... *\/`)
|
|
110
|
+
*
|
|
111
|
+
* Preserves: newlines, total character count, character positions of
|
|
112
|
+
* code OUTSIDE these regions.
|
|
113
|
+
*/
|
|
114
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- token-state-machine: single-pass tokenizer, branches reflect quote/comment state
|
|
115
|
+
export function stripStringsAndCommentsPreservingPositions(content) {
|
|
116
|
+
const out = [];
|
|
117
|
+
let i = 0;
|
|
118
|
+
let inSingle = false;
|
|
119
|
+
let inDouble = false;
|
|
120
|
+
let inTemplate = false;
|
|
121
|
+
let inLineComment = false;
|
|
122
|
+
let inBlockComment = false;
|
|
123
|
+
let escaped = false;
|
|
124
|
+
while (i < content.length) {
|
|
125
|
+
const ch = content[i];
|
|
126
|
+
const next = content[i + 1];
|
|
127
|
+
// Inside any string: blank out chars (preserve newlines) until terminator.
|
|
128
|
+
if (inSingle || inDouble || inTemplate) {
|
|
129
|
+
if (escaped) {
|
|
130
|
+
out.push(ch === '\n' ? '\n' : ' ');
|
|
131
|
+
escaped = false;
|
|
132
|
+
i++;
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (ch === '\\') {
|
|
136
|
+
out.push(' ');
|
|
137
|
+
escaped = true;
|
|
138
|
+
i++;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if ((ch === "'" && inSingle) || (ch === '"' && inDouble) || (ch === '`' && inTemplate)) {
|
|
142
|
+
// Keep terminator for symmetry — replace with space too. The
|
|
143
|
+
// string itself is gone; outer code doesn't care about the quote.
|
|
144
|
+
out.push(' ');
|
|
145
|
+
inSingle = inDouble = inTemplate = false;
|
|
146
|
+
i++;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
out.push(ch === '\n' ? '\n' : ' ');
|
|
150
|
+
i++;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// Inside line comment: blank to end of line.
|
|
154
|
+
if (inLineComment) {
|
|
155
|
+
if (ch === '\n') {
|
|
156
|
+
inLineComment = false;
|
|
157
|
+
out.push('\n');
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
out.push(' ');
|
|
161
|
+
}
|
|
162
|
+
i++;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Inside block comment: blank until `*/`.
|
|
166
|
+
if (inBlockComment) {
|
|
167
|
+
if (ch === '*' && next === '/') {
|
|
168
|
+
out.push(' ');
|
|
169
|
+
inBlockComment = false;
|
|
170
|
+
i += 2;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
out.push(ch === '\n' ? '\n' : ' ');
|
|
174
|
+
i++;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Outside any region: detect openers.
|
|
178
|
+
if (ch === '/' && next === '/') {
|
|
179
|
+
out.push(' ');
|
|
180
|
+
inLineComment = true;
|
|
181
|
+
i += 2;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (ch === '/' && next === '*') {
|
|
185
|
+
out.push(' ');
|
|
186
|
+
inBlockComment = true;
|
|
187
|
+
i += 2;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (ch === "'") {
|
|
191
|
+
out.push(' ');
|
|
192
|
+
inSingle = true;
|
|
193
|
+
i++;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (ch === '"') {
|
|
197
|
+
out.push(' ');
|
|
198
|
+
inDouble = true;
|
|
199
|
+
i++;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (ch === '`') {
|
|
203
|
+
out.push(' ');
|
|
204
|
+
inTemplate = true;
|
|
205
|
+
i++;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
out.push(ch);
|
|
209
|
+
i++;
|
|
210
|
+
}
|
|
211
|
+
return out.join('');
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=strip-literals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-literals.js","sourceRoot":"","sources":["../../src/framework/strip-literals.ts"],"names":[],"mappings":"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"}
|