@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,438 @@
|
|
|
1
|
+
// @fitness-ignore-file file-length-limit -- Complex module with tightly coupled logic; splitting would fragment cohesive functionality
|
|
2
|
+
// @fitness-ignore-file eslint-backend -- Fitness framework orchestrator; ESLint rule variations between fitness runner and IDE are expected
|
|
3
|
+
// @fitness-ignore-file detached-promises -- clearParseCache is explicitly voided; surrounding sync calls (fileCache.clear, abort) are flagged by heuristic
|
|
4
|
+
/**
|
|
5
|
+
* @fileoverview Central orchestrator for fitness recipe execution
|
|
6
|
+
*
|
|
7
|
+
* FitnessRecipeService resolves checks, manages session lifecycle,
|
|
8
|
+
* coordinates parallel/sequential execution, and builds results.
|
|
9
|
+
*/
|
|
10
|
+
import { passRate } from '@opensip-cli/contracts';
|
|
11
|
+
import { logger, ConfigurationError, NotFoundError, SystemError, generateId, initParseCache, clearParseCache, RunScope, currentScope, runWithScope, } from '@opensip-cli/core';
|
|
12
|
+
import { FileCache, DEFAULT_PREWARM_PATTERNS } from '../framework/file-cache.js';
|
|
13
|
+
import { currentCheckRegistry, currentRecipeRegistry } from '../framework/scope-registry.js';
|
|
14
|
+
import { setCurrentRecipeCheckConfig, clearCurrentRecipeCheckConfig } from './check-config.js';
|
|
15
|
+
import { resolveChecks, validateCheckReferences } from './check-resolution.js';
|
|
16
|
+
import { executeParallel, } from './parallel-execution.js';
|
|
17
|
+
import { executeSequential } from './sequential-execution.js';
|
|
18
|
+
import { DEFAULT_MAX_PARALLEL, } from './types.js';
|
|
19
|
+
const MODULE_FITNESS_RECIPES = 'fitness:recipes';
|
|
20
|
+
/** Default success threshold percentage when none is configured. */
|
|
21
|
+
const DEFAULT_SUCCESS_THRESHOLD_PERCENT = 85;
|
|
22
|
+
/**
|
|
23
|
+
* Compute prewarm glob patterns from the resolved checks' fileTypes.
|
|
24
|
+
* If any check is universal (no fileTypes), falls back to DEFAULT_PREWARM_PATTERNS.
|
|
25
|
+
*/
|
|
26
|
+
function computePrewarmPatterns(checks) {
|
|
27
|
+
const extensions = new Set();
|
|
28
|
+
for (const check of checks) {
|
|
29
|
+
const ft = check.config.fileTypes;
|
|
30
|
+
if (!ft || ft.length === 0) {
|
|
31
|
+
// Universal check — need all file types
|
|
32
|
+
return DEFAULT_PREWARM_PATTERNS;
|
|
33
|
+
}
|
|
34
|
+
for (const ext of ft) {
|
|
35
|
+
extensions.add(ext);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return [...extensions].sort().map((ext) => `**/*.${ext}`);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Central orchestrator for fitness check execution.
|
|
42
|
+
*/
|
|
43
|
+
export class FitnessRecipeService {
|
|
44
|
+
config;
|
|
45
|
+
checkRegistry;
|
|
46
|
+
recipeRegistry;
|
|
47
|
+
fileCache;
|
|
48
|
+
activeSession = null;
|
|
49
|
+
abortController;
|
|
50
|
+
constructor(config) {
|
|
51
|
+
this.config = config ?? {};
|
|
52
|
+
// Default to the current scope's registries (the production path: a fit
|
|
53
|
+
// run executes inside the pre-action-hook's RunScope). An explicit
|
|
54
|
+
// `checkRegistry`/`recipeRegistry` in config overrides — tests and
|
|
55
|
+
// programmatic callers can inject their own without a scope.
|
|
56
|
+
this.checkRegistry = config?.checkRegistry ?? currentCheckRegistry();
|
|
57
|
+
this.recipeRegistry = config?.recipeRegistry ?? currentRecipeRegistry();
|
|
58
|
+
// Per-service FileCache instance for SaaS concurrent RunScope isolation.
|
|
59
|
+
// Global singleton is for tests / non-service paths; each service gets its
|
|
60
|
+
// own so prewarm/clear in one run does not affect another.
|
|
61
|
+
this.fileCache = config?.fileCache ?? new FileCache();
|
|
62
|
+
}
|
|
63
|
+
get session() {
|
|
64
|
+
if (!this.activeSession) {
|
|
65
|
+
throw new SystemError('No active session', {
|
|
66
|
+
code: 'SYSTEM.FITNESS.NO_SESSION',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return this.activeSession;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Execute a fitness recipe by name or recipe object.
|
|
73
|
+
*
|
|
74
|
+
* Resolves checks, prewarms the file cache, runs checks in parallel or sequential mode,
|
|
75
|
+
* then builds and returns a {@link FitnessRecipeResult}. Only one session can be active
|
|
76
|
+
* at a time — call {@link abort} to cancel a running session.
|
|
77
|
+
*
|
|
78
|
+
* @param recipeOrName - A recipe name (looked up in the recipe registry) or a FitnessRecipe object.
|
|
79
|
+
* @returns The result of the recipe execution including per-check results and summary.
|
|
80
|
+
* @throws {SystemError} If a session is already in progress.
|
|
81
|
+
* @throws {NotFoundError} If the recipe name is not found in the registry.
|
|
82
|
+
*/
|
|
83
|
+
// @fitness-ignore-next-line result-pattern-consistency -- return type is FitnessRecipeResult (not Result<T,E>); throw is appropriate for precondition failures
|
|
84
|
+
async start(recipeOrName) {
|
|
85
|
+
if (this.activeSession) {
|
|
86
|
+
throw new SystemError('Recipe execution already in progress', {
|
|
87
|
+
code: 'SYSTEM.FITNESS.SESSION_IN_PROGRESS',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const recipe = typeof recipeOrName === 'string' ? this.getRecipe(recipeOrName) : recipeOrName;
|
|
91
|
+
if (!recipe) {
|
|
92
|
+
const identifier = typeof recipeOrName === 'string' ? recipeOrName : recipeOrName.name;
|
|
93
|
+
// @fitness-ignore-next-line result-pattern-consistency -- internal method, exceptions propagate to CLI boundary
|
|
94
|
+
throw new NotFoundError(`Recipe not found: ${identifier}`, {
|
|
95
|
+
code: 'RESOURCE.NOT_FOUND.RECIPE',
|
|
96
|
+
metadata: { entity: 'recipe', identifier },
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return this.executeRecipe(recipe);
|
|
100
|
+
}
|
|
101
|
+
async executeRecipe(recipe) {
|
|
102
|
+
// Two paths: if we're already inside a `runWithScope`, project the
|
|
103
|
+
// recipe-config slot onto the existing scope and run inline. Otherwise
|
|
104
|
+
// construct an ad-hoc scope and enter `runWithScope` so the dynamic
|
|
105
|
+
// extent of the recipe-execution body (including every check's
|
|
106
|
+
// `getCheckConfig(slug)` lookup) sees the recipe's per-check config.
|
|
107
|
+
const existing = currentScope();
|
|
108
|
+
if (existing) {
|
|
109
|
+
return this.executeRecipeInScope(recipe, existing);
|
|
110
|
+
}
|
|
111
|
+
// No ambient scope (programmatic / ad-hoc API use): construct one, but own
|
|
112
|
+
// its lifecycle — dispose() frees the per-run parseCache + recipe config so
|
|
113
|
+
// an ad-hoc execution does not leak per-run state (esp. in long-lived hosts).
|
|
114
|
+
const adhoc = new RunScope();
|
|
115
|
+
try {
|
|
116
|
+
return await runWithScope(adhoc, () => this.executeRecipeInScope(recipe, adhoc));
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
adhoc.dispose();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async executeRecipeInScope(recipe, recipeScope) {
|
|
123
|
+
const sessionId = this.generateSessionId();
|
|
124
|
+
this.activeSession = this.createSession(sessionId, recipe);
|
|
125
|
+
this.abortController = new AbortController();
|
|
126
|
+
logger.info('Starting recipe session', {
|
|
127
|
+
evt: 'fitness.recipe.session.start',
|
|
128
|
+
module: MODULE_FITNESS_RECIPES,
|
|
129
|
+
sessionId,
|
|
130
|
+
recipeName: recipe.name,
|
|
131
|
+
});
|
|
132
|
+
// Run-level lifecycle event on the per-run DiagnosticsBus (north-star §5.10).
|
|
133
|
+
// The host emits COMMAND-level lifecycle; only the recipe engine knows its
|
|
134
|
+
// INTERNAL lifecycle (which recipe ran, how many checks passed/failed), so the
|
|
135
|
+
// fit run contributes `start`/`complete` events here. Emitted before any early
|
|
136
|
+
// return (e.g. an empty recipe) so every run surfaces at least one event on
|
|
137
|
+
// the `--json` CommandOutcome via `scope.diagnostics.snapshot()`.
|
|
138
|
+
recipeScope.diagnostics.event('execute', 'debug', 'recipe session started', {
|
|
139
|
+
recipe: recipe.name,
|
|
140
|
+
});
|
|
141
|
+
// Project the recipe's per-check config into the current scope's
|
|
142
|
+
// recipe-config slot so individual checks can read their slice via
|
|
143
|
+
// getCheckConfig<T>(slug). Cleared in the `finally` below.
|
|
144
|
+
setCurrentRecipeCheckConfig(recipeScope, recipe.checks.config);
|
|
145
|
+
try {
|
|
146
|
+
const cwd = this.config.cwd ?? process.cwd();
|
|
147
|
+
const checks = this.resolveAndFilterChecks(recipe);
|
|
148
|
+
this.activeSession.totalChecks = checks.length;
|
|
149
|
+
if (checks.length === 0) {
|
|
150
|
+
return this.buildResult();
|
|
151
|
+
}
|
|
152
|
+
await this.prepareExecution(checks, cwd);
|
|
153
|
+
// Execute
|
|
154
|
+
const execOpts = {
|
|
155
|
+
checks,
|
|
156
|
+
cwd,
|
|
157
|
+
recipe,
|
|
158
|
+
checkTargetFiles: this.config.checkTargetFiles,
|
|
159
|
+
...(this.config.globalExcludes ? { globalExcludes: this.config.globalExcludes } : {}),
|
|
160
|
+
fileCache: this.fileCache,
|
|
161
|
+
};
|
|
162
|
+
const execCtx = {
|
|
163
|
+
session: this.activeSession,
|
|
164
|
+
callbacks: this.callbacks,
|
|
165
|
+
abortController: this.abortController,
|
|
166
|
+
includeViolations: this.config.includeViolations ?? false,
|
|
167
|
+
};
|
|
168
|
+
// Deliberate two-mode dispatch (see audit 2026-05-23 F5): when a
|
|
169
|
+
// 3rd mode lands, tabularize. Both executors share the exact
|
|
170
|
+
// `(ctx, opts) =>
|
|
171
|
+
// Promise<void>` shape, so the moment a third mode (e.g.
|
|
172
|
+
// 'staged' for incremental fit, 'isolated' for sandbox-per-check)
|
|
173
|
+
// is added, swap this ternary for a `Map<ExecutionMode, Executor>`
|
|
174
|
+
// lookup and let the compiler enforce exhaustiveness. The
|
|
175
|
+
// two-mode ternary is small enough that the table is premature
|
|
176
|
+
// today (audit 2026-05-23 F5).
|
|
177
|
+
await (recipe.execution.mode === 'parallel'
|
|
178
|
+
? executeParallel(execCtx, execOpts)
|
|
179
|
+
: executeSequential(execCtx, execOpts));
|
|
180
|
+
this.activeSession.directives = this.collectAppliedDirectives();
|
|
181
|
+
this.activeSession.status = 'completed';
|
|
182
|
+
const result = this.buildResult();
|
|
183
|
+
logger.info('Recipe session completed', {
|
|
184
|
+
evt: 'fitness.recipe.session.complete',
|
|
185
|
+
module: MODULE_FITNESS_RECIPES,
|
|
186
|
+
sessionId,
|
|
187
|
+
recipeName: recipe.name,
|
|
188
|
+
passed: result.summary.passedChecks,
|
|
189
|
+
failed: result.summary.failedChecks,
|
|
190
|
+
durationMs: result.durationMs,
|
|
191
|
+
});
|
|
192
|
+
recipeScope.diagnostics.event('execute', 'debug', 'recipe session completed', {
|
|
193
|
+
recipe: recipe.name,
|
|
194
|
+
passed: result.summary.passedChecks,
|
|
195
|
+
failed: result.summary.failedChecks,
|
|
196
|
+
});
|
|
197
|
+
void this.callbacks.onComplete?.(result);
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
logger.error('Recipe session failed', {
|
|
202
|
+
evt: 'fitness.recipe.session.error',
|
|
203
|
+
module: MODULE_FITNESS_RECIPES,
|
|
204
|
+
sessionId,
|
|
205
|
+
recipeName: recipe.name,
|
|
206
|
+
err: error instanceof Error ? error : undefined,
|
|
207
|
+
});
|
|
208
|
+
if (this.activeSession) {
|
|
209
|
+
this.activeSession.status = 'failed';
|
|
210
|
+
}
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
clearCurrentRecipeCheckConfig(recipeScope);
|
|
215
|
+
void clearParseCache();
|
|
216
|
+
this.fileCache.clear();
|
|
217
|
+
this.abortController?.abort();
|
|
218
|
+
delete this.abortController;
|
|
219
|
+
this.activeSession = null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
collectAppliedDirectives() {
|
|
223
|
+
const result = [];
|
|
224
|
+
const session = this.activeSession;
|
|
225
|
+
if (!session)
|
|
226
|
+
return result;
|
|
227
|
+
for (const cr of session.checkResults) {
|
|
228
|
+
if (cr.appliedDirectives) {
|
|
229
|
+
for (const directive of cr.appliedDirectives) {
|
|
230
|
+
result.push(directive);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
createSession(sessionId, recipe) {
|
|
237
|
+
return {
|
|
238
|
+
sessionId,
|
|
239
|
+
recipe,
|
|
240
|
+
startedAt: new Date(),
|
|
241
|
+
status: 'running',
|
|
242
|
+
totalChecks: 0,
|
|
243
|
+
completedChecks: 0,
|
|
244
|
+
passedChecks: 0,
|
|
245
|
+
failedChecks: 0,
|
|
246
|
+
totalErrors: 0,
|
|
247
|
+
totalWarnings: 0,
|
|
248
|
+
totalIgnored: 0,
|
|
249
|
+
ignoresByTag: new Map(),
|
|
250
|
+
checkResults: [],
|
|
251
|
+
directives: [],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
resolveAndFilterChecks(recipe) {
|
|
255
|
+
const checkSlugs = resolveChecks(recipe.checks, this.checkRegistry);
|
|
256
|
+
let missingExplicitChecks = [];
|
|
257
|
+
// Validate explicit references
|
|
258
|
+
if (recipe.checks.type === 'explicit') {
|
|
259
|
+
const allSlugs = this.checkRegistry.listSlugs();
|
|
260
|
+
const { missing } = validateCheckReferences(recipe.checks.checkIds, [...allSlugs]);
|
|
261
|
+
missingExplicitChecks = missing;
|
|
262
|
+
if (missing.length > 0) {
|
|
263
|
+
logger.warn(`Recipe references ${missing.length} unknown check(s)`, {
|
|
264
|
+
evt: 'fitness.recipe.checks.missing',
|
|
265
|
+
module: MODULE_FITNESS_RECIPES,
|
|
266
|
+
missing,
|
|
267
|
+
recipeName: recipe.name,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const configDisabled = new Set(this.config.disabledChecks);
|
|
272
|
+
const includeDisabledSet = new Set(recipe.includeDisabled);
|
|
273
|
+
const checks = [];
|
|
274
|
+
// Warn about unknown slugs in disabledChecks config
|
|
275
|
+
if (configDisabled.size > 0) {
|
|
276
|
+
const allSlugs = new Set(this.checkRegistry.listSlugs());
|
|
277
|
+
const unknownDisabled = [...configDisabled].filter((s) => !allSlugs.has(s));
|
|
278
|
+
if (unknownDisabled.length > 0) {
|
|
279
|
+
logger.warn(`disabledChecks references ${unknownDisabled.length} unknown slug(s)`, {
|
|
280
|
+
evt: 'fitness.recipe.disabled.unknown',
|
|
281
|
+
module: MODULE_FITNESS_RECIPES,
|
|
282
|
+
unknownDisabled,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
for (const slug of checkSlugs) {
|
|
287
|
+
const check = this.checkRegistry.getBySlug(slug);
|
|
288
|
+
if (!check)
|
|
289
|
+
continue;
|
|
290
|
+
const bareSlug = slug.includes(':') ? slug.split(':').pop() : slug;
|
|
291
|
+
const isDisabled = (check.config.disabled ?? false) ||
|
|
292
|
+
configDisabled.has(slug) ||
|
|
293
|
+
configDisabled.has(bareSlug);
|
|
294
|
+
const isForceIncluded = includeDisabledSet.has(slug) || includeDisabledSet.has(bareSlug);
|
|
295
|
+
if (!isDisabled || isForceIncluded) {
|
|
296
|
+
checks.push(check);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (recipe.name === 'cli-adhoc' && recipe.checks.type === 'explicit' && checks.length === 0) {
|
|
300
|
+
const requested = missingExplicitChecks[0] ?? recipe.checks.checkIds[0] ?? '(unknown)';
|
|
301
|
+
throw new ConfigurationError(`Unknown check '${requested}'.`, {
|
|
302
|
+
code: 'CONFIG.UNKNOWN_CHECK',
|
|
303
|
+
metadata: { check: requested },
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
return checks;
|
|
307
|
+
}
|
|
308
|
+
async prepareExecution(checks, cwd) {
|
|
309
|
+
// Sync check catalog for dashboard visibility
|
|
310
|
+
if (this.callbacks.onCatalogSync) {
|
|
311
|
+
const entries = this.checkRegistry.list().map((c) => ({
|
|
312
|
+
id: c.config.id,
|
|
313
|
+
slug: c.config.slug,
|
|
314
|
+
tags: c.config.tags,
|
|
315
|
+
description: c.config.description,
|
|
316
|
+
}));
|
|
317
|
+
void this.callbacks.onCatalogSync(entries);
|
|
318
|
+
}
|
|
319
|
+
// Prewarm file cache with only the extensions needed by resolved checks
|
|
320
|
+
if (this.config.prewarmCache !== false) {
|
|
321
|
+
const patterns = this.config.prewarmPatterns ?? computePrewarmPatterns(checks);
|
|
322
|
+
await this.fileCache.prewarm(cwd, patterns);
|
|
323
|
+
}
|
|
324
|
+
// Initialize shared AST parse cache for cross-check deduplication
|
|
325
|
+
void initParseCache();
|
|
326
|
+
}
|
|
327
|
+
buildResult() {
|
|
328
|
+
const session = this.session;
|
|
329
|
+
const completedAt = new Date();
|
|
330
|
+
const summary = {
|
|
331
|
+
totalChecks: session.totalChecks,
|
|
332
|
+
passedChecks: session.passedChecks,
|
|
333
|
+
failedChecks: session.failedChecks,
|
|
334
|
+
skippedChecks: session.totalChecks - session.completedChecks,
|
|
335
|
+
erroredChecks: session.checkResults.filter((r) => r.error !== undefined).length,
|
|
336
|
+
totalViolations: session.checkResults.reduce((sum, r) => sum + r.violationCount, 0),
|
|
337
|
+
totalErrors: session.totalErrors,
|
|
338
|
+
totalWarnings: session.totalWarnings,
|
|
339
|
+
totalIgnored: session.totalIgnored,
|
|
340
|
+
};
|
|
341
|
+
const score = passRate({
|
|
342
|
+
total: session.totalChecks,
|
|
343
|
+
passed: session.passedChecks,
|
|
344
|
+
});
|
|
345
|
+
const result = {
|
|
346
|
+
recipeId: session.recipe.id,
|
|
347
|
+
recipeName: session.recipe.name,
|
|
348
|
+
sessionId: session.sessionId,
|
|
349
|
+
success: score >= (session.recipe.execution.successThreshold ?? DEFAULT_SUCCESS_THRESHOLD_PERCENT) &&
|
|
350
|
+
session.status === 'completed',
|
|
351
|
+
startedAt: session.startedAt,
|
|
352
|
+
completedAt,
|
|
353
|
+
durationMs: completedAt.getTime() - session.startedAt.getTime(),
|
|
354
|
+
checkResults: session.checkResults,
|
|
355
|
+
summary,
|
|
356
|
+
};
|
|
357
|
+
return {
|
|
358
|
+
...result,
|
|
359
|
+
...(session.ignoreCounts ? { ignoreCounts: session.ignoreCounts } : {}),
|
|
360
|
+
...(session.directives.length > 0 ? { directives: session.directives } : {}),
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Convert CLI arguments to an ad-hoc FitnessRecipe.
|
|
365
|
+
*/
|
|
366
|
+
static createAdHocRecipe(args) {
|
|
367
|
+
let checks;
|
|
368
|
+
let includeDisabled;
|
|
369
|
+
if (args.check) {
|
|
370
|
+
if (args.check.includes('*') || args.check.includes('?')) {
|
|
371
|
+
checks = { type: 'pattern', include: [args.check] };
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
checks = { type: 'explicit', checkIds: [args.check] };
|
|
375
|
+
includeDisabled = [args.check];
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else if (args.tagFilters?.length) {
|
|
379
|
+
checks = { type: 'tags', include: args.tagFilters };
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
checks = { type: 'all', exclude: [] };
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
id: 'RCP_cli-adhoc',
|
|
386
|
+
name: 'cli-adhoc',
|
|
387
|
+
displayName: 'CLI Ad-Hoc',
|
|
388
|
+
description: 'Dynamically created recipe from CLI arguments',
|
|
389
|
+
checks,
|
|
390
|
+
execution: {
|
|
391
|
+
mode: args.parallel === false ? 'sequential' : 'parallel',
|
|
392
|
+
stopOnFirstFailure: false,
|
|
393
|
+
timeout: args.timeout ?? 30_000,
|
|
394
|
+
maxParallel: args.maxParallel ?? DEFAULT_MAX_PARALLEL,
|
|
395
|
+
retryOnFailure: args.retry,
|
|
396
|
+
maxRetries: args.maxRetries ?? 2,
|
|
397
|
+
successThreshold: args.successThreshold,
|
|
398
|
+
},
|
|
399
|
+
reporting: {
|
|
400
|
+
format: (() => {
|
|
401
|
+
if (!args.json)
|
|
402
|
+
return 'table';
|
|
403
|
+
return args.unified ? 'unified' : 'json';
|
|
404
|
+
})(),
|
|
405
|
+
verbose: args.verbose ?? false,
|
|
406
|
+
},
|
|
407
|
+
...(includeDisabled ? { includeDisabled } : {}),
|
|
408
|
+
...(args.file ? { fileFilter: args.file } : {}),
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/** Get the currently active session, or null if no recipe is running. */
|
|
412
|
+
getActiveSession() {
|
|
413
|
+
return this.activeSession;
|
|
414
|
+
}
|
|
415
|
+
/** Abort the currently running recipe execution. No-op if no session is active. */
|
|
416
|
+
abort() {
|
|
417
|
+
this.abortController?.abort();
|
|
418
|
+
}
|
|
419
|
+
/** List all available recipes from the recipe registry. */
|
|
420
|
+
listRecipes() {
|
|
421
|
+
return this.recipeRegistry.getAllRecipes();
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Look up a recipe by name or ID.
|
|
425
|
+
* @param nameOrId - The recipe name or full recipe ID (e.g. "default" or "RCP_default").
|
|
426
|
+
* @returns The recipe if found, undefined otherwise.
|
|
427
|
+
*/
|
|
428
|
+
getRecipe(nameOrId) {
|
|
429
|
+
return this.recipeRegistry.loadRecipe(nameOrId);
|
|
430
|
+
}
|
|
431
|
+
generateSessionId() {
|
|
432
|
+
return generateId('SES');
|
|
433
|
+
}
|
|
434
|
+
get callbacks() {
|
|
435
|
+
return this.config.callbacks ?? {};
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/recipes/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Core types for fitness recipes
|
|
3
|
+
*
|
|
4
|
+
* Defines FitnessRecipe, CheckSelector, RecipeCheckResult, and related
|
|
5
|
+
* types used throughout the recipe execution system.
|
|
6
|
+
*/
|
|
7
|
+
import type { DirectiveEntry } from '../framework/directive-inventory.js';
|
|
8
|
+
import type { RecipeUnitConfigMap } from '@opensip-cli/core';
|
|
9
|
+
/**
|
|
10
|
+
* Per-check configuration map.
|
|
11
|
+
*
|
|
12
|
+
* Keys are check slugs; values are check-specific config objects whose shape
|
|
13
|
+
* is declared by the consuming check. The recipe service projects this map
|
|
14
|
+
* into module-level state before execution so each check can read its slice
|
|
15
|
+
* via `getCheckConfig<T>(slug)`. See `check-config.ts`.
|
|
16
|
+
*/
|
|
17
|
+
export type RecipeCheckConfigMap = RecipeUnitConfigMap;
|
|
18
|
+
/** Selector that specifies checks by explicit slug list */
|
|
19
|
+
interface ExplicitCheckSelector {
|
|
20
|
+
readonly type: 'explicit';
|
|
21
|
+
readonly checkIds: readonly string[];
|
|
22
|
+
readonly config?: RecipeCheckConfigMap;
|
|
23
|
+
}
|
|
24
|
+
/** Selector that matches checks via glob patterns */
|
|
25
|
+
interface PatternCheckSelector {
|
|
26
|
+
readonly type: 'pattern';
|
|
27
|
+
readonly include: readonly string[];
|
|
28
|
+
readonly exclude?: readonly string[];
|
|
29
|
+
readonly config?: RecipeCheckConfigMap;
|
|
30
|
+
}
|
|
31
|
+
/** Selector that includes all checks with specified tags */
|
|
32
|
+
interface TagsCheckSelector {
|
|
33
|
+
readonly type: 'tags';
|
|
34
|
+
readonly include: readonly string[];
|
|
35
|
+
readonly exclude?: readonly string[];
|
|
36
|
+
readonly config?: RecipeCheckConfigMap;
|
|
37
|
+
}
|
|
38
|
+
/** Selector that includes all checks with optional exclusions */
|
|
39
|
+
interface AllCheckSelector {
|
|
40
|
+
readonly type: 'all';
|
|
41
|
+
readonly exclude?: readonly string[];
|
|
42
|
+
readonly config?: RecipeCheckConfigMap;
|
|
43
|
+
}
|
|
44
|
+
/** Union of all check selector types used by recipes */
|
|
45
|
+
export type CheckSelector = ExplicitCheckSelector | PatternCheckSelector | TagsCheckSelector | AllCheckSelector;
|
|
46
|
+
/** Execution configuration for a fitness recipe */
|
|
47
|
+
interface FitnessExecutionOptions {
|
|
48
|
+
readonly mode: 'parallel' | 'sequential';
|
|
49
|
+
readonly stopOnFirstFailure: boolean;
|
|
50
|
+
readonly timeout?: number;
|
|
51
|
+
readonly maxParallel?: number;
|
|
52
|
+
readonly retryOnFailure?: boolean;
|
|
53
|
+
readonly maxRetries?: number;
|
|
54
|
+
readonly successThreshold?: number;
|
|
55
|
+
}
|
|
56
|
+
/** Reporting output configuration for a fitness recipe */
|
|
57
|
+
interface FitnessReportingOptions {
|
|
58
|
+
readonly format: 'table' | 'json' | 'unified';
|
|
59
|
+
readonly verbose: boolean;
|
|
60
|
+
readonly outputPath?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Complete recipe definition: checks, execution, and reporting */
|
|
63
|
+
export interface FitnessRecipe {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly name: string;
|
|
66
|
+
readonly displayName: string;
|
|
67
|
+
readonly description: string;
|
|
68
|
+
readonly checks: CheckSelector;
|
|
69
|
+
readonly execution: FitnessExecutionOptions;
|
|
70
|
+
readonly reporting: FitnessReportingOptions;
|
|
71
|
+
readonly tags?: readonly string[];
|
|
72
|
+
readonly includeDisabled?: readonly string[];
|
|
73
|
+
readonly fileFilter?: string;
|
|
74
|
+
}
|
|
75
|
+
/** A single violation detail from a fitness check. */
|
|
76
|
+
interface RecipeViolation {
|
|
77
|
+
readonly file: string;
|
|
78
|
+
readonly line: number;
|
|
79
|
+
readonly column?: number;
|
|
80
|
+
readonly message: string;
|
|
81
|
+
readonly severity: 'error' | 'warning';
|
|
82
|
+
readonly suggestion?: string;
|
|
83
|
+
}
|
|
84
|
+
/** Result of a single check within a recipe execution */
|
|
85
|
+
export interface RecipeCheckResult {
|
|
86
|
+
readonly checkId: string;
|
|
87
|
+
readonly checkSlug: string;
|
|
88
|
+
readonly passed: boolean;
|
|
89
|
+
readonly violationCount: number;
|
|
90
|
+
readonly errorCount: number;
|
|
91
|
+
readonly warningCount: number;
|
|
92
|
+
readonly ignoredCount: number;
|
|
93
|
+
readonly durationMs: number;
|
|
94
|
+
readonly totalItems?: number | undefined;
|
|
95
|
+
readonly itemType?: string | undefined;
|
|
96
|
+
readonly skipped: boolean;
|
|
97
|
+
readonly skipReason?: string;
|
|
98
|
+
readonly error?: string;
|
|
99
|
+
readonly timedOut?: boolean;
|
|
100
|
+
appliedDirectives?: readonly DirectiveEntry[] | undefined;
|
|
101
|
+
/** Violation details. Populated when includeViolations is true. */
|
|
102
|
+
readonly violations?: readonly RecipeViolation[];
|
|
103
|
+
}
|
|
104
|
+
/** Aggregated summary of a complete recipe run */
|
|
105
|
+
export interface RecipeRunSummary {
|
|
106
|
+
readonly totalChecks: number;
|
|
107
|
+
readonly passedChecks: number;
|
|
108
|
+
readonly failedChecks: number;
|
|
109
|
+
readonly skippedChecks: number;
|
|
110
|
+
readonly erroredChecks: number;
|
|
111
|
+
readonly totalViolations: number;
|
|
112
|
+
readonly totalErrors: number;
|
|
113
|
+
readonly totalWarnings: number;
|
|
114
|
+
readonly totalIgnored: number;
|
|
115
|
+
}
|
|
116
|
+
/** Ignore directive counts by type. */
|
|
117
|
+
export interface IgnoresByType {
|
|
118
|
+
file: number;
|
|
119
|
+
line: number;
|
|
120
|
+
block: number;
|
|
121
|
+
total: number;
|
|
122
|
+
}
|
|
123
|
+
/** Complete result of a recipe execution including all check results and summary */
|
|
124
|
+
export interface FitnessRecipeResult {
|
|
125
|
+
readonly recipeId: string;
|
|
126
|
+
readonly recipeName: string;
|
|
127
|
+
readonly sessionId: string;
|
|
128
|
+
readonly success: boolean;
|
|
129
|
+
readonly startedAt: Date;
|
|
130
|
+
readonly completedAt: Date;
|
|
131
|
+
readonly durationMs: number;
|
|
132
|
+
readonly checkResults: readonly RecipeCheckResult[];
|
|
133
|
+
readonly summary: RecipeRunSummary;
|
|
134
|
+
readonly ignoreCounts?: IgnoresByType | undefined;
|
|
135
|
+
readonly directives?: readonly DirectiveEntry[] | undefined;
|
|
136
|
+
}
|
|
137
|
+
/** Input definition used by defineRecipe() to create a FitnessRecipe */
|
|
138
|
+
export interface FitnessRecipeDefinition {
|
|
139
|
+
readonly name: string;
|
|
140
|
+
readonly displayName: string;
|
|
141
|
+
readonly description: string;
|
|
142
|
+
readonly checks: CheckSelector;
|
|
143
|
+
readonly execution?: Partial<FitnessExecutionOptions>;
|
|
144
|
+
readonly reporting?: Partial<FitnessReportingOptions>;
|
|
145
|
+
readonly tags?: readonly string[];
|
|
146
|
+
readonly includeDisabled?: readonly string[];
|
|
147
|
+
}
|
|
148
|
+
/** Default maximum parallelism based on available CPU cores */
|
|
149
|
+
export declare const DEFAULT_MAX_PARALLEL: number;
|
|
150
|
+
/** Return the effective max parallelism for a recipe, falling back to the system default */
|
|
151
|
+
export declare function getEffectiveMaxParallel(recipe: FitnessRecipe): number;
|
|
152
|
+
/** Create a frozen FitnessRecipe from a definition, applying defaults for missing options */
|
|
153
|
+
export declare function defineRecipe(definition: FitnessRecipeDefinition): FitnessRecipe;
|
|
154
|
+
export {};
|
|
155
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recipes/types.ts"],"names":[],"mappings":"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"}
|