@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,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview PathMatcher - Strategy pattern for file matching
|
|
3
|
+
*
|
|
4
|
+
* Provides glob-based file matching with include/exclude patterns.
|
|
5
|
+
* Supports lazy evaluation and composition.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { glob } from 'glob';
|
|
9
|
+
import { minimatch } from 'minimatch';
|
|
10
|
+
/**
|
|
11
|
+
* Strategy for matching files based on glob patterns.
|
|
12
|
+
* Supports both custom patterns and composition.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const matcher = PathMatcher.create({
|
|
17
|
+
* cwd: '/path/to/repo',
|
|
18
|
+
* include: ['src/**\/*.ts'],
|
|
19
|
+
* exclude: ['**\/__tests__/**'],
|
|
20
|
+
* });
|
|
21
|
+
* const files = await matcher.files();
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class PathMatcher {
|
|
25
|
+
options;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a PathMatcher from options.
|
|
31
|
+
*/
|
|
32
|
+
static create(options) {
|
|
33
|
+
return new PathMatcher(options);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get all matching files.
|
|
37
|
+
* @returns Array of absolute file paths matching the patterns
|
|
38
|
+
*/
|
|
39
|
+
async files() {
|
|
40
|
+
const result = await this.match();
|
|
41
|
+
return result.files;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get detailed match result including timing.
|
|
45
|
+
*/
|
|
46
|
+
async match() {
|
|
47
|
+
const start = Date.now();
|
|
48
|
+
const allExcludes = [...this.options.exclude, ...(this.options.additionalExcludes ?? [])];
|
|
49
|
+
// Run glob for all include patterns
|
|
50
|
+
const matchedSets = await Promise.all(this.options.include.map((pattern) => glob(pattern, {
|
|
51
|
+
cwd: this.options.cwd,
|
|
52
|
+
absolute: true,
|
|
53
|
+
nodir: true,
|
|
54
|
+
ignore: allExcludes,
|
|
55
|
+
})));
|
|
56
|
+
// Combine and deduplicate results
|
|
57
|
+
const allMatched = new Set();
|
|
58
|
+
for (const matches of matchedSets) {
|
|
59
|
+
for (const file of matches) {
|
|
60
|
+
allMatched.add(path.normalize(file));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const files = [...allMatched].sort();
|
|
64
|
+
const durationMs = Date.now() - start;
|
|
65
|
+
return {
|
|
66
|
+
files,
|
|
67
|
+
excluded: [],
|
|
68
|
+
durationMs,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if a file matches the patterns.
|
|
73
|
+
* @param filePath - Absolute path to check
|
|
74
|
+
* @returns True if file matches include patterns and is not excluded
|
|
75
|
+
*/
|
|
76
|
+
matches(filePath) {
|
|
77
|
+
const relativePath = path.relative(this.options.cwd, filePath);
|
|
78
|
+
const matchesInclude = this.options.include.some((pattern) => minimatch(relativePath, pattern, { dot: true }));
|
|
79
|
+
if (!matchesInclude) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const allExcludes = [...this.options.exclude, ...(this.options.additionalExcludes ?? [])];
|
|
83
|
+
const matchesExclude = allExcludes.some((pattern) => minimatch(relativePath, pattern, { dot: true }));
|
|
84
|
+
return !matchesExclude;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a new PathMatcher with additional exclusions.
|
|
88
|
+
*/
|
|
89
|
+
withExcludes(additionalExcludes) {
|
|
90
|
+
return new PathMatcher({
|
|
91
|
+
...this.options,
|
|
92
|
+
additionalExcludes: [...(this.options.additionalExcludes ?? []), ...additionalExcludes],
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a new PathMatcher that only includes TypeScript files.
|
|
97
|
+
*/
|
|
98
|
+
typescriptOnly() {
|
|
99
|
+
return new PathMatcher({
|
|
100
|
+
...this.options,
|
|
101
|
+
include: this.options.include.map((pattern) => {
|
|
102
|
+
if (pattern.endsWith('/*') || pattern.endsWith('/**/*')) {
|
|
103
|
+
const base = pattern.replace(/\/\*+$/, '');
|
|
104
|
+
return `${base}/**/*.{ts,tsx}`;
|
|
105
|
+
}
|
|
106
|
+
if (!pattern.includes('.')) {
|
|
107
|
+
return `${pattern}/**/*.{ts,tsx}`;
|
|
108
|
+
}
|
|
109
|
+
return pattern;
|
|
110
|
+
}),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a new PathMatcher that excludes test files.
|
|
115
|
+
*/
|
|
116
|
+
noTests() {
|
|
117
|
+
return this.withExcludes([
|
|
118
|
+
'**/__tests__/**',
|
|
119
|
+
'**/*.test.ts',
|
|
120
|
+
'**/*.test.tsx',
|
|
121
|
+
'**/*.spec.ts',
|
|
122
|
+
'**/*.spec.tsx',
|
|
123
|
+
]);
|
|
124
|
+
}
|
|
125
|
+
/** Get the current working directory. */
|
|
126
|
+
get cwd() {
|
|
127
|
+
return this.options.cwd;
|
|
128
|
+
}
|
|
129
|
+
/** Get the include patterns. */
|
|
130
|
+
get includePatterns() {
|
|
131
|
+
return this.options.include;
|
|
132
|
+
}
|
|
133
|
+
/** Get the exclude patterns. */
|
|
134
|
+
get excludePatterns() {
|
|
135
|
+
return [...this.options.exclude, ...(this.options.additionalExcludes ?? [])];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=path-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-matcher.js","sourceRoot":"","sources":["../../src/framework/path-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Helper for registering checks with a namespace
|
|
3
|
+
*/
|
|
4
|
+
import type { Check } from './check-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Register an array of checks with a namespace into the current scope's
|
|
7
|
+
* check registry.
|
|
8
|
+
* @returns The number of checks registered.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerChecks(checks: Check[], namespace: string): number;
|
|
11
|
+
//# sourceMappingURL=register-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-helpers.d.ts","sourceRoot":"","sources":["../../src/framework/register-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQzE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Helper for registering checks with a namespace
|
|
3
|
+
*/
|
|
4
|
+
import { currentCheckRegistry } from './scope-registry.js';
|
|
5
|
+
/**
|
|
6
|
+
* Register an array of checks with a namespace into the current scope's
|
|
7
|
+
* check registry.
|
|
8
|
+
* @returns The number of checks registered.
|
|
9
|
+
*/
|
|
10
|
+
export function registerChecks(checks, namespace) {
|
|
11
|
+
const registry = currentCheckRegistry();
|
|
12
|
+
let count = 0;
|
|
13
|
+
for (const check of checks) {
|
|
14
|
+
registry.register(check, namespace);
|
|
15
|
+
count++;
|
|
16
|
+
}
|
|
17
|
+
return count;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=register-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-helpers.js","sourceRoot":"","sources":["../../src/framework/register-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAI3D;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe,EAAE,SAAiB;IAC/D,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpC,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check registry — central registration and discovery.
|
|
3
|
+
*
|
|
4
|
+
* Supports namespaced slugs: checks are stored as `namespace:slug` when
|
|
5
|
+
* a namespace is provided. Bare slug lookups resolve via a reverse index,
|
|
6
|
+
* with a warning logged on ambiguity.
|
|
7
|
+
*
|
|
8
|
+
* Built on the kernel's unified `Registry<T>` with
|
|
9
|
+
* `duplicatePolicy: 'silent-skip'` — re-importing the same check is a
|
|
10
|
+
* no-op (the historical behaviour the file's previous incarnation
|
|
11
|
+
* documented). The `bareSlugIndex` (slug → list of namespaced keys)
|
|
12
|
+
* lives alongside the base because it's a domain-specific lookup
|
|
13
|
+
* structure not in the base's shape.
|
|
14
|
+
*/
|
|
15
|
+
import type { Check } from './check-types.js';
|
|
16
|
+
/** Registry of fitness checks, indexed by namespaced key with a bare-slug reverse index. */
|
|
17
|
+
export declare class CheckRegistry {
|
|
18
|
+
private readonly inner;
|
|
19
|
+
/** Reverse index: bare slug → list of namespaced keys */
|
|
20
|
+
private readonly bareSlugIndex;
|
|
21
|
+
register(check: Check, namespace?: string): void;
|
|
22
|
+
/** Get a check by slug. Supports both namespaced and bare slugs. */
|
|
23
|
+
get(slug: string): Check;
|
|
24
|
+
/** Check whether a slug is registered (namespaced or bare). */
|
|
25
|
+
has(slug: string): boolean;
|
|
26
|
+
/** Get a check by slug, or `undefined` if not registered (non-throwing {@link get}). */
|
|
27
|
+
find(slug: string): Check | undefined;
|
|
28
|
+
list(): Check[];
|
|
29
|
+
/** Get the namespace a check was registered under. Returns undefined for bare slugs. */
|
|
30
|
+
getNamespace(bareSlug: string): string | undefined;
|
|
31
|
+
listEnabled(): Check[];
|
|
32
|
+
byTag(tag: string): Check[];
|
|
33
|
+
/** Get a check by slug, returning undefined if not found. */
|
|
34
|
+
getBySlug(slug: string): Check | undefined;
|
|
35
|
+
/** Return all registered keys (namespaced where applicable). */
|
|
36
|
+
listSlugs(): string[];
|
|
37
|
+
/** Return all checks with a given bare slug across all namespaces. */
|
|
38
|
+
listByBareSlug(bareSlug: string): Check[];
|
|
39
|
+
get size(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a slug to a Check.
|
|
42
|
+
* - If slug contains ':', exact lookup.
|
|
43
|
+
* - If bare slug, use reverse index. Single match → return.
|
|
44
|
+
* Multiple candidates → throw NotFoundError listing them (ambiguity is
|
|
45
|
+
* now a hard failure rather than load-order-dependent silent choice of [0]).
|
|
46
|
+
* Use listByBareSlug() when enumeration of all is desired.
|
|
47
|
+
*/
|
|
48
|
+
private resolve;
|
|
49
|
+
}
|
|
50
|
+
export { type Check } from './check-types.js';
|
|
51
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/framework/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAS9C,4FAA4F;AAC5F,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAInB;IACH,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBhD,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAexB,+DAA+D;IAC/D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,wFAAwF;IACxF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIrC,IAAI,IAAI,KAAK,EAAE;IAIf,wFAAwF;IACxF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQlD,WAAW,IAAI,KAAK,EAAE;IAItB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE;IAI3B,6DAA6D;IAC7D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI1C,gEAAgE;IAChE,SAAS,IAAI,MAAM,EAAE;IAIrB,sEAAsE;IACtE,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAKzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;CA4BhB;AAED,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check registry — central registration and discovery.
|
|
3
|
+
*
|
|
4
|
+
* Supports namespaced slugs: checks are stored as `namespace:slug` when
|
|
5
|
+
* a namespace is provided. Bare slug lookups resolve via a reverse index,
|
|
6
|
+
* with a warning logged on ambiguity.
|
|
7
|
+
*
|
|
8
|
+
* Built on the kernel's unified `Registry<T>` with
|
|
9
|
+
* `duplicatePolicy: 'silent-skip'` — re-importing the same check is a
|
|
10
|
+
* no-op (the historical behaviour the file's previous incarnation
|
|
11
|
+
* documented). The `bareSlugIndex` (slug → list of namespaced keys)
|
|
12
|
+
* lives alongside the base because it's a domain-specific lookup
|
|
13
|
+
* structure not in the base's shape.
|
|
14
|
+
*/
|
|
15
|
+
import { NotFoundError, Registry, logger } from '@opensip-cli/core';
|
|
16
|
+
/** Registry of fitness checks, indexed by namespaced key with a bare-slug reverse index. */
|
|
17
|
+
export class CheckRegistry {
|
|
18
|
+
inner = new Registry({
|
|
19
|
+
module: 'fitness:checks',
|
|
20
|
+
duplicatePolicy: 'silent-skip',
|
|
21
|
+
evtPrefix: 'check.registry',
|
|
22
|
+
});
|
|
23
|
+
/** Reverse index: bare slug → list of namespaced keys */
|
|
24
|
+
bareSlugIndex = new Map();
|
|
25
|
+
register(check, namespace) {
|
|
26
|
+
const bareSlug = check.config.slug;
|
|
27
|
+
const key = namespace ? `${namespace}:${bareSlug}` : bareSlug;
|
|
28
|
+
if (this.inner.has(key)) {
|
|
29
|
+
// Silently skip duplicate — same check imported multiple times.
|
|
30
|
+
// Inner's silent-skip policy would do this anyway; we short-circuit
|
|
31
|
+
// here to avoid the redundant index update.
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.inner.register({ id: key, name: key, check, tags: check.config.tags });
|
|
35
|
+
// Update bare slug index
|
|
36
|
+
const existing = this.bareSlugIndex.get(bareSlug) ?? [];
|
|
37
|
+
existing.push(key);
|
|
38
|
+
this.bareSlugIndex.set(bareSlug, existing);
|
|
39
|
+
}
|
|
40
|
+
/** Get a check by slug. Supports both namespaced and bare slugs. */
|
|
41
|
+
get(slug) {
|
|
42
|
+
const check = this.resolve(slug);
|
|
43
|
+
if (!check) {
|
|
44
|
+
const cands = slug.includes(':') ? [] : (this.bareSlugIndex.get(slug) ?? []);
|
|
45
|
+
if (cands.length > 1) {
|
|
46
|
+
throw new NotFoundError(`Check slug '${slug}' is ambiguous (${cands.length} matches: ${cands.join(', ')}). ` +
|
|
47
|
+
`Use a namespaced form (e.g. 'namespace:${slug}') or listByBareSlug().`);
|
|
48
|
+
}
|
|
49
|
+
throw new NotFoundError(`Check not found: ${slug}`);
|
|
50
|
+
}
|
|
51
|
+
return check;
|
|
52
|
+
}
|
|
53
|
+
/** Check whether a slug is registered (namespaced or bare). */
|
|
54
|
+
has(slug) {
|
|
55
|
+
return this.resolve(slug) !== undefined;
|
|
56
|
+
}
|
|
57
|
+
/** Get a check by slug, or `undefined` if not registered (non-throwing {@link get}). */
|
|
58
|
+
find(slug) {
|
|
59
|
+
return this.resolve(slug);
|
|
60
|
+
}
|
|
61
|
+
list() {
|
|
62
|
+
return this.inner.getAll().map((r) => r.check);
|
|
63
|
+
}
|
|
64
|
+
/** Get the namespace a check was registered under. Returns undefined for bare slugs. */
|
|
65
|
+
getNamespace(bareSlug) {
|
|
66
|
+
const keys = this.bareSlugIndex.get(bareSlug);
|
|
67
|
+
if (!keys || keys.length === 0)
|
|
68
|
+
return undefined;
|
|
69
|
+
const key = keys[0];
|
|
70
|
+
const colonIdx = key.indexOf(':');
|
|
71
|
+
return colonIdx === -1 ? undefined : key.slice(0, colonIdx);
|
|
72
|
+
}
|
|
73
|
+
listEnabled() {
|
|
74
|
+
return this.list().filter((c) => !c.config.disabled);
|
|
75
|
+
}
|
|
76
|
+
byTag(tag) {
|
|
77
|
+
return this.listEnabled().filter((c) => c.config.tags?.includes(tag));
|
|
78
|
+
}
|
|
79
|
+
/** Get a check by slug, returning undefined if not found. */
|
|
80
|
+
getBySlug(slug) {
|
|
81
|
+
return this.resolve(slug);
|
|
82
|
+
}
|
|
83
|
+
/** Return all registered keys (namespaced where applicable). */
|
|
84
|
+
listSlugs() {
|
|
85
|
+
return this.inner.getAll().map((r) => r.id);
|
|
86
|
+
}
|
|
87
|
+
/** Return all checks with a given bare slug across all namespaces. */
|
|
88
|
+
listByBareSlug(bareSlug) {
|
|
89
|
+
const keys = this.bareSlugIndex.get(bareSlug) ?? [];
|
|
90
|
+
return keys.map((k) => this.inner.getById(k)?.check).filter((c) => c !== undefined);
|
|
91
|
+
}
|
|
92
|
+
get size() {
|
|
93
|
+
return this.inner.size;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolve a slug to a Check.
|
|
97
|
+
* - If slug contains ':', exact lookup.
|
|
98
|
+
* - If bare slug, use reverse index. Single match → return.
|
|
99
|
+
* Multiple candidates → throw NotFoundError listing them (ambiguity is
|
|
100
|
+
* now a hard failure rather than load-order-dependent silent choice of [0]).
|
|
101
|
+
* Use listByBareSlug() when enumeration of all is desired.
|
|
102
|
+
*/
|
|
103
|
+
resolve(slug) {
|
|
104
|
+
// Exact match (namespaced or bare)
|
|
105
|
+
const exact = this.inner.getById(slug);
|
|
106
|
+
if (exact)
|
|
107
|
+
return exact.check;
|
|
108
|
+
// If it contains ':', it was a namespaced lookup that didn't match
|
|
109
|
+
if (slug.includes(':'))
|
|
110
|
+
return undefined;
|
|
111
|
+
// Bare slug → reverse index
|
|
112
|
+
const candidates = this.bareSlugIndex.get(slug);
|
|
113
|
+
if (!candidates || candidates.length === 0)
|
|
114
|
+
return undefined;
|
|
115
|
+
if (candidates.length > 1) {
|
|
116
|
+
// Hard failure on ambiguity — prevents non-deterministic "which check won?"
|
|
117
|
+
// behaviour across pack load order or plugin discovery. Callers that want
|
|
118
|
+
// the full list can use listByBareSlug().
|
|
119
|
+
logger.warn({
|
|
120
|
+
evt: 'check.registry.ambiguous',
|
|
121
|
+
module: 'fitness:checks',
|
|
122
|
+
bareSlug: slug,
|
|
123
|
+
candidates,
|
|
124
|
+
msg: `Ambiguous bare slug '${slug}' matches ${candidates.length} checks (namespaced); refusing bare lookup`,
|
|
125
|
+
});
|
|
126
|
+
return undefined; // get() will turn this into a NotFoundError with the slug
|
|
127
|
+
}
|
|
128
|
+
return this.inner.getById(candidates[0])?.check;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/framework/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ResultBuilder - Builder pattern for check results
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent API for constructing check results with signals,
|
|
5
|
+
* metadata, and display information.
|
|
6
|
+
*/
|
|
7
|
+
import type { CheckResult, ItemType } from '../types/findings.js';
|
|
8
|
+
import type { Signal } from '@opensip-cli/core';
|
|
9
|
+
/**
|
|
10
|
+
* Options for building results.
|
|
11
|
+
*/
|
|
12
|
+
export interface ResultBuilderOptions {
|
|
13
|
+
/** Check ID */
|
|
14
|
+
readonly checkId: string;
|
|
15
|
+
/** Item type for display (files, modules, etc.) */
|
|
16
|
+
readonly itemType: ItemType;
|
|
17
|
+
/** Custom unit label (overrides itemType) */
|
|
18
|
+
readonly unit?: string | undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builder for constructing check results.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const result = ResultBuilder.create({ checkId: 'my-check', itemType: 'files' })
|
|
26
|
+
* .totalItems(100)
|
|
27
|
+
* .addSignal(signal1)
|
|
28
|
+
* .build();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class ResultBuilder {
|
|
32
|
+
private readonly options;
|
|
33
|
+
private _totalItems;
|
|
34
|
+
private readonly _signals;
|
|
35
|
+
private _ignoredCount;
|
|
36
|
+
private _durationMs?;
|
|
37
|
+
private _filesScanned?;
|
|
38
|
+
private _extra?;
|
|
39
|
+
private constructor();
|
|
40
|
+
static create(options: ResultBuilderOptions): ResultBuilder;
|
|
41
|
+
totalItems(count: number): this;
|
|
42
|
+
filesScanned(count: number): this;
|
|
43
|
+
addSignal(signal: Signal): this;
|
|
44
|
+
addSignals(signals: readonly Signal[]): this;
|
|
45
|
+
ignoredCount(count: number): this;
|
|
46
|
+
incrementIgnored(by?: number): this;
|
|
47
|
+
duration(ms: number): this;
|
|
48
|
+
extra(data: Record<string, unknown>): this;
|
|
49
|
+
build(): CheckResult;
|
|
50
|
+
buildError(message: string, error?: Error): CheckResult;
|
|
51
|
+
private buildInfo;
|
|
52
|
+
private getUniqueFileCount;
|
|
53
|
+
get signalCount(): number;
|
|
54
|
+
get errorCount(): number;
|
|
55
|
+
get warningCount(): number;
|
|
56
|
+
get hasSignals(): boolean;
|
|
57
|
+
get willPass(): boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract a code snippet with context lines around a target line.
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractSnippet(content: string, line: number, contextLines?: number): {
|
|
63
|
+
snippet: string;
|
|
64
|
+
contextLines: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Get line number from content string and character index.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getLineNumber(content: string, index: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* Check if a file path matches API file patterns.
|
|
72
|
+
*/
|
|
73
|
+
export declare function isAPIFile(filePath: string): boolean;
|
|
74
|
+
//# sourceMappingURL=result-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-builder.d.ts","sourceRoot":"","sources":["../../src/framework/result-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAa,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe;IACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IAQJ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAC,CAA0B;IAEzC,OAAO;IAEP,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAI3D,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAQ5C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,gBAAgB,CAAC,EAAE,SAAI,GAAG,IAAI;IAK9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK1B,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK1C,KAAK,IAAI,WAAW;IAqCpB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW;IAIvD,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,kBAAkB;IAK1B,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,SAAI,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAO3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAOD;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAInD"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ResultBuilder - Builder pattern for check results
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent API for constructing check results with signals,
|
|
5
|
+
* metadata, and display information.
|
|
6
|
+
*/
|
|
7
|
+
import { CheckInfoFactory, createResultWithSignals, createErrorResult, getItemTypeLabel, } from '../types/findings.js';
|
|
8
|
+
import { countErrors, countWarnings } from '../types/severity.js';
|
|
9
|
+
/**
|
|
10
|
+
* Builder for constructing check results.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const result = ResultBuilder.create({ checkId: 'my-check', itemType: 'files' })
|
|
15
|
+
* .totalItems(100)
|
|
16
|
+
* .addSignal(signal1)
|
|
17
|
+
* .build();
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class ResultBuilder {
|
|
21
|
+
options;
|
|
22
|
+
_totalItems = 0;
|
|
23
|
+
_signals = [];
|
|
24
|
+
_ignoredCount = 0;
|
|
25
|
+
_durationMs;
|
|
26
|
+
_filesScanned;
|
|
27
|
+
_extra;
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.options = options;
|
|
30
|
+
}
|
|
31
|
+
static create(options) {
|
|
32
|
+
return new ResultBuilder(options);
|
|
33
|
+
}
|
|
34
|
+
totalItems(count) {
|
|
35
|
+
this._totalItems = count;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
filesScanned(count) {
|
|
39
|
+
this._filesScanned = count;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
addSignal(signal) {
|
|
43
|
+
this._signals.push(signal);
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
addSignals(signals) {
|
|
47
|
+
if (signals.length === 0) {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
this._signals.push(...signals);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
ignoredCount(count) {
|
|
54
|
+
this._ignoredCount = count;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
incrementIgnored(by = 1) {
|
|
58
|
+
this._ignoredCount += by;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
duration(ms) {
|
|
62
|
+
this._durationMs = ms;
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
extra(data) {
|
|
66
|
+
this._extra = { ...this._extra, ...data };
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
build() {
|
|
70
|
+
const unit = this.options.unit ?? this.options.itemType;
|
|
71
|
+
const errors = countErrors(this._signals);
|
|
72
|
+
const warnings = countWarnings(this._signals);
|
|
73
|
+
const info = this.buildInfo(errors, warnings, unit);
|
|
74
|
+
const buildOptions = {};
|
|
75
|
+
if (this._ignoredCount > 0) {
|
|
76
|
+
buildOptions.ignoredCount = this._ignoredCount;
|
|
77
|
+
}
|
|
78
|
+
if (this._durationMs !== undefined) {
|
|
79
|
+
buildOptions.durationMs = this._durationMs;
|
|
80
|
+
}
|
|
81
|
+
if (this._filesScanned !== undefined) {
|
|
82
|
+
buildOptions.filesScanned = this._filesScanned;
|
|
83
|
+
}
|
|
84
|
+
buildOptions.itemType = this.options.itemType;
|
|
85
|
+
if (this._extra !== undefined) {
|
|
86
|
+
buildOptions.extra = this._extra;
|
|
87
|
+
}
|
|
88
|
+
return createResultWithSignals(info, this._signals, this._totalItems, Object.keys(buildOptions).length > 0 ? buildOptions : undefined);
|
|
89
|
+
}
|
|
90
|
+
buildError(message, error) {
|
|
91
|
+
return createErrorResult(message, error);
|
|
92
|
+
}
|
|
93
|
+
buildInfo(errors, warnings, unit) {
|
|
94
|
+
if (this._totalItems > 0) {
|
|
95
|
+
// Clamp to 0: analyzeAll-mode checks can surface violations against
|
|
96
|
+
// files outside the scanned set, which would otherwise produce a
|
|
97
|
+
// negative "-N/M compliant" label.
|
|
98
|
+
const compliantItems = Math.max(0, this._totalItems - this.getUniqueFileCount());
|
|
99
|
+
return CheckInfoFactory.compliance(compliantItems, this._totalItems, unit);
|
|
100
|
+
}
|
|
101
|
+
const total = errors + warnings;
|
|
102
|
+
return CheckInfoFactory.violations(total, getItemTypeLabel('violations', total));
|
|
103
|
+
}
|
|
104
|
+
getUniqueFileCount() {
|
|
105
|
+
const files = new Set(this._signals.map((s) => s.code?.file).filter(Boolean));
|
|
106
|
+
return files.size;
|
|
107
|
+
}
|
|
108
|
+
get signalCount() {
|
|
109
|
+
return this._signals.length;
|
|
110
|
+
}
|
|
111
|
+
get errorCount() {
|
|
112
|
+
return countErrors(this._signals);
|
|
113
|
+
}
|
|
114
|
+
get warningCount() {
|
|
115
|
+
return countWarnings(this._signals);
|
|
116
|
+
}
|
|
117
|
+
get hasSignals() {
|
|
118
|
+
return this._signals.length > 0;
|
|
119
|
+
}
|
|
120
|
+
get willPass() {
|
|
121
|
+
return this.errorCount === 0;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// =============================================================================
|
|
125
|
+
// SNIPPET UTILITIES
|
|
126
|
+
// =============================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Extract a code snippet with context lines around a target line.
|
|
129
|
+
*/
|
|
130
|
+
export function extractSnippet(content, line, contextLines = 2) {
|
|
131
|
+
const lines = content.split('\n');
|
|
132
|
+
const startLine = Math.max(0, line - 1 - contextLines);
|
|
133
|
+
const endLine = Math.min(lines.length, line + contextLines);
|
|
134
|
+
const snippetLines = lines.slice(startLine, endLine);
|
|
135
|
+
const snippet = snippetLines.map((l, i) => `${startLine + i + 1} | ${l}`).join('\n');
|
|
136
|
+
return { snippet, contextLines };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get line number from content string and character index.
|
|
140
|
+
*/
|
|
141
|
+
export function getLineNumber(content, index) {
|
|
142
|
+
return content.slice(0, Math.max(0, index)).split('\n').length;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Default patterns for identifying API-related files.
|
|
146
|
+
*/
|
|
147
|
+
const DEFAULT_API_FILE_PATTERNS = ['/api/', '/routes/', '-handler.ts', '.handler.ts'];
|
|
148
|
+
/**
|
|
149
|
+
* Check if a file path matches API file patterns.
|
|
150
|
+
*/
|
|
151
|
+
export function isAPIFile(filePath) {
|
|
152
|
+
return DEFAULT_API_FILE_PATTERNS.some((pattern) => pattern.startsWith('/') ? filePath.includes(pattern) : filePath.endsWith(pattern));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=result-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-builder.js","sourceRoot":"","sources":["../../src/framework/result-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBlE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IAQa;IAP7B,WAAW,GAAG,CAAC,CAAC;IACP,QAAQ,GAAa,EAAE,CAAC;IACjC,aAAa,GAAG,CAAC,CAAC;IAClB,WAAW,CAAU;IACrB,aAAa,CAAU;IACvB,MAAM,CAA2B;IAEzC,YAAqC,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAAG,CAAC;IAEtE,MAAM,CAAC,MAAM,CAAC,OAA6B;QACzC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,OAA0B;QACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,EAAE,GAAG,CAAC;QACrB,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAA6B;QACjC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEpD,MAAM,YAAY,GAMd,EAAE,CAAC;QAEP,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7C,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,CAAC;QACD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACnC,CAAC;QAED,OAAO,uBAAuB,CAC5B,IAAI,EACJ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,KAAa;QACvC,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEO,SAAS,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAY;QAC9D,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzB,oEAAoE;YACpE,iEAAiE;YACjE,mCAAmC;YACnC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACjF,OAAO,gBAAgB,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;QAChC,OAAO,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,kBAAkB;QACxB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,IAAY,EACZ,YAAY,GAAG,CAAC;IAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,YAAY,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,KAAa;IAC1D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAU,CAAC;AAE/F;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAChD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAClF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { FitnessRecipeRegistry } from '../recipes/registry.js';
|
|
23
|
+
import { CheckRegistry } from './registry.js';
|
|
24
|
+
import type { FitnessLoadState } from '../scope-augmentation.js';
|
|
25
|
+
import '../scope-augmentation.js';
|
|
26
|
+
/** Construct a fresh check registry for a single `RunScope`. */
|
|
27
|
+
export declare function createCheckRegistry(): CheckRegistry;
|
|
28
|
+
/** Construct a fresh recipe registry (built-ins pre-seeded) for a single `RunScope`. */
|
|
29
|
+
export declare function createRecipeRegistry(): FitnessRecipeRegistry;
|
|
30
|
+
/** Construct a fresh, empty `ensureChecksLoaded` lifecycle slot for a `RunScope`. */
|
|
31
|
+
export declare function createFitnessLoadState(): FitnessLoadState;
|
|
32
|
+
/** Read the current scope's check registry. */
|
|
33
|
+
export declare function currentCheckRegistry(): CheckRegistry;
|
|
34
|
+
/** Read the current scope's recipe registry. */
|
|
35
|
+
export declare function currentRecipeRegistry(): FitnessRecipeRegistry;
|
|
36
|
+
/** Read the current scope's `ensureChecksLoaded` lifecycle state. */
|
|
37
|
+
export declare function currentFitnessLoadState(): FitnessLoadState;
|
|
38
|
+
//# sourceMappingURL=scope-registry.d.ts.map
|