@zxyycom/vibe-check 0.0.1 → 0.0.3
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/README.md +79 -75
- package/dist/esm/check/check.mjs +4 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/flag-enablement.mjs +32 -0
- package/dist/esm/check/flag-enablement.mjs.map +1 -0
- package/dist/esm/check/handoff-provider-identity.mjs +18 -0
- package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +2 -2
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- package/dist/esm/check/project-changes.mjs +2 -0
- package/dist/esm/check/project-changes.mjs.map +1 -0
- package/dist/esm/check/project-context.mjs +2 -0
- package/dist/esm/check/project-context.mjs.map +1 -0
- package/dist/esm/check-settlement/fact-validation.mjs +17 -23
- package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
- package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
- package/dist/esm/check-settlement/reason-shape.mjs +12 -0
- package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
- package/dist/esm/check-settlement/record-store.mjs +14 -17
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/check-settlement/session.mjs +8 -2
- package/dist/esm/check-settlement/session.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-data.mjs +36 -7
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
- package/dist/esm/data-boundary/closed-values.mjs +43 -3
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
- package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
- package/dist/esm/data-boundary/project-path.mjs +19 -0
- package/dist/esm/data-boundary/project-path.mjs.map +1 -0
- package/dist/esm/data-boundary/value-shapes.mjs +9 -0
- package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
- package/dist/esm/index.mjs +16 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- package/dist/esm/package-checks/check-authoring.mjs +69 -0
- package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
- package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
- package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/contract.mjs +2 -0
- package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/execution.mjs +134 -0
- package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/options.mjs +284 -0
- package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
- package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/execution.mjs +11 -20
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
- package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
- package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
- package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
- package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
- package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/git.mjs +12 -1
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/path.mjs +1 -17
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process.mjs +5 -0
- package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
- package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/local-cache-options.mjs +28 -0
- package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -27
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +10 -3
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +12 -11
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +184 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +24 -20
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +12 -16
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
- package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs +188 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
- package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
- package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs +46 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs +56 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs +109 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs +55 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +22 -9
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
- package/dist/esm/project-definition/output-defaults.mjs +18 -1
- package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
- package/dist/esm/project-definition/output-validation.mjs +15 -15
- package/dist/esm/project-definition/output-validation.mjs.map +1 -1
- package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
- package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
- package/dist/esm/project-definition/project-changes.mjs +70 -0
- package/dist/esm/project-definition/project-changes.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +132 -16
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +62 -50
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
- package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
- package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
- package/dist/esm/project-run/aggregation.mjs +42 -57
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/changes/git.mjs +161 -0
- package/dist/esm/project-run/changes/git.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +37 -9
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
- package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/messages.mjs +5 -0
- package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/plan.mjs +9 -5
- package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
- package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/preparation.mjs +172 -0
- package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +44 -139
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
- package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +34 -39
- package/dist/esm/project-run/completion/completion.mjs.map +1 -0
- package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
- package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
- package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
- package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
- package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +79 -62
- package/dist/esm/project-run/controls/validation.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
- package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidate.mjs +65 -0
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidates.mjs +26 -0
- package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +83 -0
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
- package/dist/esm/project-run/invocation/execution.mjs +98 -0
- package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
- package/dist/esm/project-run/invocation/paths.mjs +77 -0
- package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
- package/dist/esm/project-run/invocation/progress.mjs +30 -0
- package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +82 -0
- package/dist/esm/project-run/invocation/run.mjs.map +1 -0
- package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
- package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
- package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
- package/dist/esm/project-run/outputs/status.mjs +105 -0
- package/dist/esm/project-run/outputs/status.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +3 -2
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -0
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs +1 -1
- package/dist/esm/project-run/run.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +171 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
- package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +167 -121
- package/docs/changelog.md +300 -0
- package/docs/checks/duplicate-detection.md +131 -60
- package/docs/checks/file-metrics.md +68 -46
- package/docs/checks/function-metrics.md +119 -163
- package/docs/checks/json-schema-validation.md +65 -37
- package/docs/checks/json-validation.md +59 -27
- package/docs/checks/maintenance-reminders.md +68 -32
- package/docs/checks/markdown-link-validation.md +104 -56
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +153 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/cache-results.md +63 -0
- package/docs/guides/callbacks.md +93 -0
- package/docs/guides/check-dependencies.md +152 -0
- package/docs/guides/collecting-project-files.md +59 -0
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +164 -0
- package/docs/guides/finding-waivers.md +87 -0
- package/docs/guides/learned-scheduling.md +83 -0
- package/docs/guides/presenting-findings.md +54 -0
- package/docs/guides/run-outputs.md +171 -0
- package/docs/guides/scheduling.md +208 -0
- package/docs/guides/simulating-admission.md +55 -0
- package/docs/output.md +13 -21
- package/licenses/Lizard-1.24.0-MIT.txt +30 -0
- package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
- package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
- package/licenses/analyzer-translations-NOTICE.md +24 -0
- package/licenses/lizard-1.24.0-provenance.json +957 -0
- package/package.json +19 -6
- package/src/check/check.ts +382 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +2 -2
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/fact-validation.ts +29 -39
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/outcome-normalization.ts +17 -35
- package/src/check-settlement/reason-shape.ts +20 -0
- package/src/check-settlement/record-store.ts +18 -15
- package/src/check-settlement/session.ts +12 -3
- package/src/data-boundary/canonical-data.ts +36 -9
- package/src/data-boundary/canonical-json.ts +18 -1
- package/src/data-boundary/closed-values.ts +54 -5
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/data-boundary/value-shapes.ts +12 -0
- package/src/index.ts +134 -5
- package/src/machine-output/v4/atomic-publication.ts +4 -17
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
- package/src/package-checks/code-quality-findings/policy.ts +23 -0
- package/src/package-checks/command-check/command-check.ts +152 -0
- package/src/package-checks/command-check/contract.ts +168 -0
- package/src/package-checks/command-check/execution.ts +211 -0
- package/src/package-checks/command-check/options.ts +331 -0
- package/src/package-checks/command-check/transcript.ts +35 -0
- package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
- package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
- package/src/package-checks/duplicate-detection/default-check.ts +38 -7
- package/src/package-checks/duplicate-detection/execution.ts +82 -24
- package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
- package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
- package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
- package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
- package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
- package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
- package/src/package-checks/duplicate-detection/options.ts +26 -3
- package/src/package-checks/duplicate-detection/records.ts +65 -12
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +17 -20
- package/src/package-checks/file-metrics/finding-messages.ts +29 -0
- package/src/package-checks/file-metrics/options-resolution.ts +19 -52
- package/src/package-checks/file-metrics/options-validation.ts +23 -32
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +11 -23
- package/src/package-checks/file-metrics/scc/availability.ts +2 -2
- package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
- package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
- package/src/package-checks/file-metrics/scc/parser.ts +4 -4
- package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
- package/src/package-checks/function-metrics/analysis.ts +81 -21
- package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
- package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
- package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
- package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
- package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
- package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
- package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
- package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
- package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
- package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
- package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
- package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
- package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
- package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
- package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
- package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
- package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
- package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
- package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
- package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
- package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
- package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
- package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
- package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
- package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
- package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
- package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
- package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
- package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
- package/src/package-checks/function-metrics/constructor.ts +32 -9
- package/src/package-checks/function-metrics/execution.ts +94 -41
- package/src/package-checks/function-metrics/finding-messages.ts +95 -0
- package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
- package/src/package-checks/function-metrics/measurement-model.ts +15 -1
- package/src/package-checks/function-metrics/measurement.ts +223 -36
- package/src/package-checks/function-metrics/options-resolution.ts +39 -75
- package/src/package-checks/function-metrics/options-validation.ts +30 -39
- package/src/package-checks/function-metrics/options.ts +32 -13
- package/src/package-checks/function-metrics/records.ts +73 -7
- package/src/package-checks/function-metrics/target-files.ts +10 -70
- package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
- package/src/package-checks/host-environment/git.ts +13 -2
- package/src/package-checks/host-environment/path.ts +1 -20
- package/src/package-checks/host-environment/process/contract.ts +17 -9
- package/src/package-checks/host-environment/process/result.ts +48 -20
- package/src/package-checks/host-environment/process/runner.ts +8 -4
- package/src/package-checks/host-environment/process.ts +10 -0
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/final-data.ts +8 -0
- package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
- package/src/package-checks/json-schema-validation/options.ts +27 -1
- package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
- package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
- package/src/package-checks/json-validation/default-check.ts +27 -6
- package/src/package-checks/json-validation/final-data.ts +5 -0
- package/src/package-checks/json-validation/options-validation.ts +4 -18
- package/src/package-checks/json-validation/options.ts +4 -1
- package/src/package-checks/local-cache-options.ts +40 -0
- package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
- package/src/package-checks/markdown-link-validation/default-check.ts +57 -8
- package/src/package-checks/markdown-link-validation/execution.ts +51 -57
- package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
- package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
- package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
- package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
- package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
- package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
- package/src/package-checks/markdown-link-validation/options.ts +15 -1
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
- package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
- package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
- package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
- package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
- package/src/package-checks/markdown-lint/adapter.ts +167 -0
- package/src/package-checks/markdown-lint/default-check.ts +92 -0
- package/src/package-checks/markdown-lint/execution.ts +266 -0
- package/src/package-checks/markdown-lint/final-data.ts +33 -0
- package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
- package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
- package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
- package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
- package/src/package-checks/markdown-lint/options-validation.ts +50 -0
- package/src/package-checks/markdown-lint/options.ts +82 -0
- package/src/package-checks/markdown-lint/records.ts +132 -0
- package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
- package/src/package-checks/project-files/collection.ts +39 -23
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +4 -15
- package/src/package-checks/project-files/gitlink-revision.ts +5 -7
- package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
- package/src/package-checks/project-files/public-collection.ts +92 -0
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
- package/src/package-checks/secret-detection/classification.ts +30 -0
- package/src/package-checks/secret-detection/default-check.ts +73 -0
- package/src/package-checks/secret-detection/execution.ts +247 -0
- package/src/package-checks/secret-detection/final-data.ts +57 -0
- package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
- package/src/package-checks/secret-detection/input-preparation.ts +290 -0
- package/src/package-checks/secret-detection/options-resolution.ts +65 -0
- package/src/package-checks/secret-detection/options-validation.ts +27 -0
- package/src/package-checks/secret-detection/options.ts +39 -0
- package/src/package-checks/secret-detection/records.ts +77 -0
- package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/package-tools/cache/cache-json-by-key.ts +300 -0
- package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
- package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
- package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
- package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
- package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
- package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
- package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
- package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
- package/src/package-tools/learned-critical-path/strategy.ts +302 -0
- package/src/project-definition/check-tree/authoring.ts +40 -234
- package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
- package/src/project-definition/check-tree/collection-authoring.ts +13 -0
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +21 -9
- package/src/project-definition/check-tree/resolution.ts +84 -28
- package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
- package/src/project-definition/declarative-snapshot.ts +94 -0
- package/src/project-definition/output-defaults.ts +32 -1
- package/src/project-definition/output-validation.ts +15 -15
- package/src/project-definition/progress-rendering-output.ts +121 -0
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +166 -19
- package/src/project-definition/project-definition.ts +177 -67
- package/src/project-definition/resource-unit-mapping.ts +25 -0
- package/src/project-definition/scheduler-policy.ts +556 -0
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
- package/src/project-run/admission-strategy-provider/provider.ts +45 -0
- package/src/project-run/aggregation.ts +52 -70
- package/src/project-run/changes/git.ts +206 -0
- package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
- package/src/project-run/check-execution/callback.ts +52 -9
- package/src/project-run/check-execution/console-capture.ts +262 -0
- package/src/project-run/check-execution/dependencies.ts +161 -10
- package/src/project-run/check-execution/execution-finalization.ts +103 -27
- package/src/project-run/check-execution/execution-settlement.ts +99 -32
- package/src/project-run/check-execution/flag-controls.ts +146 -0
- package/src/project-run/check-execution/lifecycle.ts +29 -0
- package/src/project-run/check-execution/messages.ts +8 -0
- package/src/project-run/check-execution/plan.ts +12 -8
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/preparation.ts +309 -0
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +92 -232
- package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
- package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
- package/src/project-run/check-execution/terminal-result.ts +108 -29
- package/src/project-run/{completion.ts → completion/completion.ts} +33 -59
- package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
- package/src/project-run/completion/result-resolver.ts +60 -0
- package/src/project-run/controls/contract.ts +22 -9
- package/src/project-run/controls/outputs-override-validation.ts +83 -60
- package/src/project-run/controls/validation-result.ts +17 -6
- package/src/project-run/controls/validation.ts +110 -68
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/logger.ts +132 -207
- package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
- package/src/project-run/invocation/candidate.ts +99 -0
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +120 -0
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/paths.ts +154 -0
- package/src/project-run/invocation/progress.ts +38 -0
- package/src/project-run/invocation/run.ts +144 -0
- package/src/project-run/invocation/scheduler.ts +82 -0
- package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
- package/src/project-run/outputs/status.ts +161 -0
- package/src/project-run/progress-rendering/presentation.ts +150 -36
- package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
- package/src/project-run/progress-rendering/renderer.ts +23 -6
- package/src/project-run/project-context.ts +10 -5
- package/src/project-run/result.ts +50 -4
- package/src/project-run/run.ts +7 -6
- package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +321 -0
- package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
- package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
- package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
- package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
- package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
- package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
- package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
- package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
- package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
- package/src/project-run/task-scheduler/execution-state.ts +97 -6
- package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
- package/src/project-run/task-scheduler/graph-validation.ts +77 -31
- package/src/project-run/task-scheduler/graph.ts +111 -3
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
- package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
- package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
- package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
- package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
- package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
- package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
- package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
- package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
- package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
- package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
- package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
- package/src/project-run/task-scheduler/scheduler.ts +233 -171
- package/types/check/check.d.ts +225 -69
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/inherited-collection.d.ts +1 -1
- package/types/check/project-changes.d.ts +13 -0
- package/types/check/project-context.d.ts +10 -0
- package/types/check-settlement/facts.d.ts +1 -1
- package/types/check-settlement/reason-shape.d.ts +5 -0
- package/types/check-settlement/record-store.d.ts +2 -2
- package/types/check-settlement/session.d.ts +3 -1
- package/types/data-boundary/canonical-data.d.ts +28 -5
- package/types/data-boundary/canonical-json.d.ts +18 -1
- package/types/data-boundary/closed-values.d.ts +24 -0
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/data-boundary/value-shapes.d.ts +3 -0
- package/types/index.d.ts +40 -9
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
- package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
- package/types/package-checks/command-check/command-check.d.ts +48 -0
- package/types/package-checks/command-check/contract.d.ts +108 -0
- package/types/package-checks/command-check/execution.d.ts +7 -0
- package/types/package-checks/command-check/options.d.ts +11 -0
- package/types/package-checks/command-check/transcript.d.ts +8 -0
- package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
- package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +21 -3
- package/types/package-checks/duplicate-detection/records.d.ts +20 -3
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +5 -10
- package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
- package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
- package/types/package-checks/function-metrics/analysis.d.ts +1 -1
- package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
- package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
- package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
- package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
- package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
- package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
- package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
- package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
- package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
- package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
- package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
- package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
- package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
- package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
- package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
- package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
- package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
- package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
- package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
- package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
- package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
- package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
- package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
- package/types/package-checks/function-metrics/constructor.d.ts +6 -3
- package/types/package-checks/function-metrics/execution.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
- package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
- package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
- package/types/package-checks/function-metrics/measurement.d.ts +22 -7
- package/types/package-checks/function-metrics/options.d.ts +26 -12
- package/types/package-checks/function-metrics/records.d.ts +24 -5
- package/types/package-checks/function-metrics/target-files.d.ts +4 -3
- package/types/package-checks/host-environment/csv.d.ts +2 -0
- package/types/package-checks/host-environment/git.d.ts +3 -1
- package/types/package-checks/host-environment/path.d.ts +1 -3
- package/types/package-checks/host-environment/process/contract.d.ts +17 -9
- package/types/package-checks/host-environment/process.d.ts +5 -0
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
- package/types/package-checks/json-schema-validation/options.d.ts +33 -4
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/final-data.d.ts +5 -0
- package/types/package-checks/json-validation/options.d.ts +2 -1
- package/types/package-checks/local-cache-options.d.ts +9 -0
- package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
- package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
- package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
- package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
- package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
- package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
- package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
- package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
- package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
- package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
- package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
- package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
- package/types/package-checks/markdown-lint/execution.d.ts +24 -0
- package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
- package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
- package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
- package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-lint/options.d.ts +65 -0
- package/types/package-checks/markdown-lint/records.d.ts +39 -0
- package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
- package/types/package-checks/project-files/public-collection.d.ts +16 -0
- package/types/package-checks/secret-detection/classification.d.ts +12 -0
- package/types/package-checks/secret-detection/default-check.d.ts +14 -0
- package/types/package-checks/secret-detection/execution.d.ts +14 -0
- package/types/package-checks/secret-detection/final-data.d.ts +15 -0
- package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
- package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
- package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
- package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
- package/types/package-checks/secret-detection/options.d.ts +33 -0
- package/types/package-checks/secret-detection/records.d.ts +35 -0
- package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
- package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
- package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
- package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
- package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
- package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
- package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
- package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
- package/types/project-definition/check-tree/authoring.d.ts +13 -14
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
- package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +13 -6
- package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
- package/types/project-definition/declarative-snapshot.d.ts +10 -0
- package/types/project-definition/output-defaults.d.ts +7 -0
- package/types/project-definition/output-validation.d.ts +2 -1
- package/types/project-definition/progress-rendering-output.d.ts +41 -0
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +49 -19
- package/types/project-definition/resource-unit-mapping.d.ts +4 -0
- package/types/project-definition/scheduler-policy.d.ts +497 -0
- package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
- package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
- package/types/project-run/aggregation.d.ts +8 -6
- package/types/project-run/changes/git.d.ts +14 -0
- package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/callback.d.ts +5 -1
- package/types/project-run/check-execution/console-capture.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +4 -1
- package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
- package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
- package/types/project-run/check-execution/flag-controls.d.ts +27 -0
- package/types/project-run/check-execution/lifecycle.d.ts +24 -0
- package/types/project-run/check-execution/messages.d.ts +2 -0
- package/types/project-run/check-execution/plan.d.ts +2 -3
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/preparation.d.ts +29 -0
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
- package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
- package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
- package/types/project-run/check-execution/terminal-result.d.ts +13 -1
- package/types/project-run/{completion.d.ts → completion/completion.d.ts} +7 -5
- package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
- package/types/project-run/completion/result-resolver.d.ts +4 -0
- package/types/project-run/controls/contract.d.ts +22 -9
- package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
- package/types/project-run/controls/validation-result.d.ts +12 -4
- package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
- package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
- package/types/project-run/invocation/candidate.d.ts +12 -0
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/paths.d.ts +40 -0
- package/types/project-run/invocation/progress.d.ts +11 -0
- package/types/project-run/invocation/run.d.ts +43 -0
- package/types/project-run/invocation/scheduler.d.ts +16 -0
- package/types/project-run/outputs/configuration.d.ts +3 -0
- package/types/project-run/outputs/status.d.ts +48 -0
- package/types/project-run/progress-rendering/presentation.d.ts +12 -7
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
- package/types/project-run/progress-rendering/renderer.d.ts +11 -3
- package/types/project-run/project-context.d.ts +5 -4
- package/types/project-run/result.d.ts +38 -4
- package/types/project-run/run.d.ts +6 -5
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
- package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
- package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
- package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
- package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
- package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
- package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
- package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
- package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
- package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
- package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
- package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
- package/types/project-run/task-scheduler/graph.d.ts +15 -0
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
- package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
- package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
- package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
- package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
- package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
- package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
- package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
- package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
- package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
- package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
- package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
- package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight.mjs +0 -186
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/completion.mjs.map +0 -1
- package/dist/esm/project-run/invocation-creation.mjs +0 -111
- package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
- package/dist/esm/project-run/invocation.mjs +0 -195
- package/dist/esm/project-run/invocation.mjs.map +0 -1
- package/dist/esm/project-run/machine-publication.mjs.map +0 -1
- package/dist/esm/project-run/output-configuration.mjs.map +0 -1
- package/dist/esm/project-run/output-status.mjs +0 -43
- package/dist/esm/project-run/output-status.mjs.map +0 -1
- package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
- package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
- package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
- package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
- package/src/package-checks/host-environment/process/command.ts +0 -21
- package/src/project-run/check-execution/preflight.ts +0 -321
- package/src/project-run/invocation-creation.ts +0 -160
- package/src/project-run/invocation.ts +0 -303
- package/src/project-run/output-status.ts +0 -69
- package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
- package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
- package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
- package/types/package-checks/host-environment/process/command.d.ts +0 -7
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- package/types/project-run/check-execution/preflight.d.ts +0 -27
- package/types/project-run/invocation.d.ts +0 -34
- package/types/project-run/output-configuration.d.ts +0 -3
- package/types/project-run/output-status.d.ts +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/options-validation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/options-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n snapshotClosedArray,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport {\n isNonEmptyString,\n isNonNegativeSafeInteger,\n isPositiveSafeInteger\n} from \"../../data-boundary/value-shapes.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport { validFindingPolicy } from \"../code-quality-findings/policy.ts\";\nimport { isNormalizedProjectRelativePath } from \"../host-environment/path.ts\";\nimport type { ResolvedFileMetricsOptions } from \"./options.ts\";\n\n/** 验证 constructor 产物或普通对象组合形成的完整 file-metrics options。 */\nexport function isValidResolvedFileMetricsOptions(\n resolvedOptions: unknown\n): resolvedOptions is ResolvedFileMetricsOptions {\n const options = snapshotExactClosedRecord(resolvedOptions, [\n \"codeAreas\",\n \"findingWaivers\",\n \"scanner\"\n ]);\n return (\n options !== undefined &&\n isValidCodeAreas(options.codeAreas) &&\n isValidFindingWaivers(options.findingWaivers) &&\n isValidScanner(options.scanner)\n );\n}\n\nfunction isValidFindingWaivers(value: unknown): boolean {\n const waivers = snapshotClosedArray(value);\n if (waivers === undefined) return false;\n const identities = new Set<string>();\n for (const candidate of waivers) {\n const waiver = snapshotExactClosedRecord(candidate, [\"identity\", \"reason\"]);\n const identity =\n waiver === undefined\n ? undefined\n : snapshotExactClosedRecord(waiver.identity, [\"metric\", \"path\"]);\n if (\n waiver === undefined ||\n identity === undefined ||\n identity.metric !== \"code-lines\" ||\n !isNormalizedProjectRelativePath(identity.path) ||\n !isNonEmptyString(waiver.reason)\n ) {\n return false;\n }\n const identityKey = `${identity.metric}\\u0000${identity.path}`;\n if (identities.has(identityKey)) return false;\n identities.add(identityKey);\n }\n return true;\n}\n\nfunction isValidCodeAreas(value: unknown): boolean {\n const codeAreas = snapshotClosedRecord(value);\n if (codeAreas === undefined || Object.keys(codeAreas).length === 0) return false;\n return Object.entries(codeAreas).every(\n ([areaId, candidate]) => areaId.length > 0 && isValidCodeArea(candidate)\n );\n}\n\nfunction isValidCodeArea(value: unknown): boolean {\n const area = snapshotExactClosedRecord(value, [\"codeLines\", \"files\", \"findingPolicy\"]);\n return (\n area !== undefined &&\n validProjectFileSelection(area.files) &&\n validFindingPolicy(area.findingPolicy) &&\n isValidCodeLinePolicy(area.codeLines)\n );\n}\n\nfunction isValidCodeLinePolicy(value: unknown): boolean {\n const policy = snapshotExactClosedRecord(value, [\"lowDecisionTokenAllowance\", \"maximum\"]);\n if (policy === undefined || !isPositiveSafeInteger(policy.maximum)) return false;\n const allowance = snapshotExactClosedRecord(policy.lowDecisionTokenAllowance, [\n \"maximumCodeLines\",\n \"maximumDecisionTokens\"\n ]);\n return (\n allowance !== undefined &&\n isPositiveSafeInteger(allowance.maximumCodeLines) &&\n allowance.maximumCodeLines > policy.maximum &&\n isNonNegativeSafeInteger(allowance.maximumDecisionTokens)\n );\n}\n\nfunction isValidScanner(value: unknown): boolean {\n const scanner = snapshotExactClosedRecord(value, [\"executable\"]);\n return scanner !== undefined && isNonEmptyString(scanner.executable);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\nimport type { FindingPolicy } from \"../code-quality-findings/policy.ts\";\nimport type { FindingWaiver } from \"../../finding-waivers/reconciliation.ts\";\n\n/** `fileMetrics` 构造函数可省略的 SCC 可执行文件策略。 */\nexport interface FileMetricsScannerOptions {\n /** 省略时直接执行 `scc`;显式命令必须直接接受 adapter 拥有的 SCC 参数。 */\n readonly executable?: string;\n}\n\n/** file-metrics 区域可省略并由构造函数补齐的文件策略。 */\nexport type FileMetricsFileOptions = ProjectFileSelectionOptions;\n\n/** SCC decision-token 数较低的文件可使用的代码行宽限策略。 */\nexport interface FileMetricsLowDecisionTokenAllowanceOptions {\n /** 省略时为 `600`;必须严格大于同一区域的普通代码行上限。 */\n readonly maximumCodeLines?: number;\n /** 省略时为 `12`;decision-token measurement 不大于此值时应用宽限上限。 */\n readonly maximumDecisionTokens?: number;\n}\n\n/** 一个区域可省略的文件代码行策略。 */\nexport interface FileMetricsCodeLineOptions {\n /** 省略时为 `360`;只有严格超过此值才产生 finding。 */\n readonly maximum?: number;\n /** 省略时使用完整默认宽限策略。 */\n readonly lowDecisionTokenAllowance?: FileMetricsLowDecisionTokenAllowanceOptions;\n}\n\n/** 可独立选择文件并定义代码行与 finding policy 的 file-metrics 区域。 */\nexport interface FileMetricsCodeAreaOptions {\n /** 显式区域必须声明本字段;其中各子字段可省略并使用 package 默认值。 */\n readonly files: FileMetricsFileOptions;\n /** 省略时继承顶层 `findingPolicy`。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略时使用 package 默认代码行策略。 */\n readonly codeLines?: FileMetricsCodeLineOptions;\n}\n\n/** file-metrics 用于识别可豁免 finding 的稳定语义字段。 */\nexport interface FileMetricsFindingIdentity {\n /** file-metrics 当前只产生文件代码行 finding。 */\n readonly metric: \"code-lines\";\n /** 已 normalized 的 project-root-relative slash path;不得为绝对、含反斜杠或含 `.`/`..` 的路径。 */\n readonly path: string;\n}\n\n/** 一项 file-metrics finding 的声明式豁免;执行时仍会扫描并发布该 finding。 */\nexport type FileMetricsFindingWaiver = FindingWaiver<FileMetricsFindingIdentity>;\n\n/** `fileMetrics(options?)` 接受并补齐默认值的公开策略。 */\nexport interface FileMetricsOptions {\n /** 省略时建立默认 `project` 区域;显式映射必须非空。 */\n readonly codeAreas?: Readonly<Record<string, FileMetricsCodeAreaOptions>>;\n /** 省略时为 `non-blocking`;区域可局部覆盖。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略时没有豁免;每项以 `{ metric, path }` 精确匹配,并必须提供非空理由。 */\n readonly findingWaivers?: readonly FileMetricsFindingWaiver[];\n /** 省略时直接执行 `scc`;CLI 协议由 owning adapter 固定。 */\n readonly scanner?: FileMetricsScannerOptions;\n}\n\n/** 构造函数生成并由 Check
|
|
1
|
+
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageCheckAuthoringOptions } from \"../check-authoring.ts\";\nimport type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\nimport type { FindingPolicy } from \"../code-quality-findings/policy.ts\";\nimport type { FindingWaiver } from \"../../package-tools/finding-waivers/reconciliation.ts\";\n\n/** `fileMetrics` 构造函数可省略的 SCC 可执行文件策略。 */\nexport interface FileMetricsScannerOptions {\n /** 省略时直接执行 `scc`;显式命令必须直接接受 adapter 拥有的 SCC 参数。 */\n readonly executable?: string;\n}\n\n/** file-metrics 区域可省略并由构造函数补齐的文件策略。 */\nexport type FileMetricsFileOptions = ProjectFileSelectionOptions;\n\n/** SCC decision-token 数较低的文件可使用的代码行宽限策略。 */\nexport interface FileMetricsLowDecisionTokenAllowanceOptions {\n /** 省略时为 `600`;必须严格大于同一区域的普通代码行上限。 */\n readonly maximumCodeLines?: number;\n /** 省略时为 `12`;decision-token measurement 不大于此值时应用宽限上限。 */\n readonly maximumDecisionTokens?: number;\n}\n\n/** 一个区域可省略的文件代码行策略。 */\nexport interface FileMetricsCodeLineOptions {\n /** 省略时为 `360`;只有严格超过此值才产生 finding。 */\n readonly maximum?: number;\n /** 省略时使用完整默认宽限策略。 */\n readonly lowDecisionTokenAllowance?: FileMetricsLowDecisionTokenAllowanceOptions;\n}\n\n/** 可独立选择文件并定义代码行与 finding policy 的 file-metrics 区域。 */\nexport interface FileMetricsCodeAreaOptions {\n /** 显式区域必须声明本字段;其中各子字段可省略并使用 package 默认值。 */\n readonly files: FileMetricsFileOptions;\n /** 省略时继承顶层 `findingPolicy`。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略时使用 package 默认代码行策略。 */\n readonly codeLines?: FileMetricsCodeLineOptions;\n}\n\n/** file-metrics 用于识别可豁免 finding 的稳定语义字段。 */\nexport interface FileMetricsFindingIdentity {\n /** file-metrics 当前只产生文件代码行 finding。 */\n readonly metric: \"code-lines\";\n /** 已 normalized 的 project-root-relative slash path;不得为绝对、含反斜杠或含 `.`/`..` 的路径。 */\n readonly path: string;\n}\n\n/** 一项 file-metrics finding 的声明式豁免;执行时仍会扫描并发布该 finding。 */\nexport type FileMetricsFindingWaiver = FindingWaiver<FileMetricsFindingIdentity>;\n\n/** `fileMetrics(options?)` 接受并补齐默认值的公开策略。 */\nexport interface FileMetricsOptions<\n Id extends string = string\n> extends PackageCheckAuthoringOptions<Id> {\n /** 省略时建立默认 `project` 区域;显式映射必须非空。 */\n readonly codeAreas?: Readonly<Record<string, FileMetricsCodeAreaOptions>>;\n /** 省略时为 `non-blocking`;区域可局部覆盖。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略时没有豁免;每项以 `{ metric, path }` 精确匹配,并必须提供非空理由。 */\n readonly findingWaivers?: readonly FileMetricsFindingWaiver[];\n /** 省略时直接执行 `scc`;CLI 协议由 owning adapter 固定。 */\n readonly scanner?: FileMetricsScannerOptions;\n}\n\n/** 构造函数生成并由 Check preparation/execution 消费的完整 options。 */\nexport interface ResolvedFileMetricsOptions {\n readonly codeAreas: Readonly<Record<string, ResolvedFileMetricsCodeAreaOptions>>;\n readonly findingWaivers: readonly FileMetricsFindingWaiver[];\n readonly scanner: ResolvedFileMetricsScannerOptions;\n}\n\nexport interface ResolvedFileMetricsCodeAreaOptions {\n readonly codeLines: ResolvedFileMetricsCodeLineOptions;\n readonly files: ProjectFileSelection;\n readonly findingPolicy: FindingPolicy;\n}\n\nexport interface ResolvedFileMetricsCodeLineOptions {\n readonly lowDecisionTokenAllowance: ResolvedFileMetricsLowDecisionTokenAllowanceOptions;\n readonly maximum: number;\n}\n\nexport interface ResolvedFileMetricsLowDecisionTokenAllowanceOptions {\n readonly maximumCodeLines: number;\n readonly maximumDecisionTokens: number;\n}\n\nexport interface ResolvedFileMetricsScannerOptions {\n readonly executable: string;\n}\n"]}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
import { isBlockingFinding } from "../code-quality-findings/policy.mjs";
|
|
2
2
|
import { isNormalizedProjectRelativePath } from "../host-environment/path.mjs";
|
|
3
|
+
import { buildFindingWaiverAuditRecordData } from "../code-quality-findings/finding-waiver-evidence.mjs";
|
|
3
4
|
const FILE_CODE_LINES_METRIC = "code-lines";
|
|
4
5
|
const FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX = "/finding-waiver-audit/";
|
|
5
6
|
/** 仅为未使用和过宽 waiver 构造补充 audit Record;正常 applied waiver 由 finding Record 自己保留。 */
|
|
6
7
|
export function fileMetricsWaiverAuditRecord(audit) {
|
|
7
|
-
if (audit.status === "applied")
|
|
8
|
-
return undefined;
|
|
9
8
|
const identity = fileMetricsWaiverIdentity(audit.waiver);
|
|
10
9
|
return Object.freeze({
|
|
11
|
-
data:
|
|
12
|
-
identity,
|
|
13
|
-
kind: "finding-waiver-audit",
|
|
14
|
-
matchCount: audit.matchCount,
|
|
15
|
-
reason: audit.waiver.reason,
|
|
16
|
-
status: audit.status
|
|
17
|
-
}),
|
|
10
|
+
data: buildFindingWaiverAuditRecordData(identity, audit),
|
|
18
11
|
id: `${FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX}${identity.path}`
|
|
19
12
|
});
|
|
20
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/records.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileMetric } from \"./measurement-model.ts\";\nimport type { FileMetricsFindingIdentity, ResolvedFileMetricsCodeAreaOptions } from \"./options.ts\";\nimport { isBlockingFinding } from \"../code-quality-findings/policy.ts\";\nimport { isNormalizedProjectRelativePath } from \"../host-environment/path.ts\";\nimport type {\n FindingWaiverAudit,\n MaterializedFindingWaiver\n} from \"../../finding-waivers/reconciliation.ts\";\nimport type {\n CanonicalJsonObject,\n CanonicalJsonValue\n} from \"../../data-boundary/canonical-data.ts\";\n\nconst FILE_CODE_LINES_METRIC = \"code-lines\" as const;\nconst FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX = \"/finding-waiver-audit/\";\n\ninterface FileMetricsAreaPolicyContext {\n readonly areaIdsByPath: ReadonlyMap<string, readonly string[]>;\n readonly codeAreas: Readonly<Record<string, ResolvedFileMetricsCodeAreaOptions>>;\n}\n\ninterface EffectiveFileRecordPolicy {\n readonly areaIds: readonly string[];\n readonly blocking: boolean;\n readonly limit: number;\n}\n\n/** 一条超出文件代码行上限的 supplemental Record data。 */\nexport type FileMetricsFindingRecordData = Readonly<{\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly codeLines: number;\n readonly limit: number;\n readonly metric: \"code-lines\";\n readonly path: string;\n /** 精确匹配 waiver 时保留理由,并令该 finding 不再参与 actionable settlement。 */\n readonly waiver?: Readonly<{ readonly reason: string }>;\n}>;\n\n/** 未使用或过宽 file-metrics waiver 的 supplemental audit Record data。 */\nexport type FileMetricsFindingWaiverAuditRecordData = Readonly<{\n readonly identity: FileMetricsFindingIdentity;\n readonly kind: \"finding-waiver-audit\";\n readonly matchCount: number;\n readonly reason: string;\n readonly status: \"overmatched\" | \"unused\";\n}>;\n\n/** file-metrics 发布的 finding 或 waiver-audit supplemental Record data。 */\nexport type FileMetricsRecordData =\n | FileMetricsFindingRecordData\n | FileMetricsFindingWaiverAuditRecordData;\n\nexport interface FileRecordCandidate {\n readonly data: FileMetricsFindingRecordData;\n readonly id: string;\n}\n\n/** 仅为未使用和过宽 waiver 构造补充 audit Record;正常 applied waiver 由 finding Record 自己保留。 */\nexport function fileMetricsWaiverAuditRecord(\n audit: FindingWaiverAudit\n):\n | Readonly<{ readonly data: FileMetricsFindingWaiverAuditRecordData; readonly id: string }>\n | undefined {\n if (audit.status === \"applied\") return undefined;\n const identity = fileMetricsWaiverIdentity(audit.waiver);\n return Object.freeze({\n data: Object.freeze({\n identity,\n kind: \"finding-waiver-audit\",\n matchCount: audit.matchCount,\n reason: audit.waiver.reason,\n status: audit.status\n }),\n id: `${FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX}${identity.path}`\n });\n}\n\nexport function fileMetricsWaiverIdentity(\n waiver: MaterializedFindingWaiver\n): FileMetricsFindingIdentity {\n const identity = waiver.identity;\n if (\n !isCanonicalObject(identity) ||\n identity.metric !== \"code-lines\" ||\n typeof identity.path !== \"string\" ||\n !isNormalizedProjectRelativePath(identity.path)\n ) {\n throw new TypeError(\"fileMetrics waiver identity must retain a normalized code-lines path\");\n }\n return Object.freeze({ metric: \"code-lines\", path: identity.path });\n}\n\nfunction isCanonicalObject(value: CanonicalJsonValue): value is CanonicalJsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Converts trusted scanner metrics into area-policy-owned supplemental facts. */\nexport function buildFileRecordCandidates(\n metrics: readonly FileMetric[],\n areaPolicy: FileMetricsAreaPolicyContext\n): readonly FileRecordCandidate[] | undefined {\n const seenPaths = new Set<string>();\n const candidates: FileRecordCandidate[] = [];\n for (const metric of metrics) {\n if (!isValidUniqueFileMetric(metric, seenPaths)) return undefined;\n seenPaths.add(metric.path);\n\n const recordPolicy = effectiveFileRecordPolicy(metric, areaPolicy);\n if (recordPolicy === undefined) return undefined;\n if (metric.codeLines <= recordPolicy.limit) continue;\n candidates.push(createFileRecordCandidate(metric, recordPolicy));\n }\n candidates.sort((left, right) => compareText(left.id, right.id));\n return Object.freeze(candidates);\n}\n\nfunction isValidUniqueFileMetric(metric: FileMetric, seenPaths: ReadonlySet<string>): boolean {\n return (\n typeof metric.path === \"string\" &&\n metric.path.length > 0 &&\n Number.isSafeInteger(metric.codeLines) &&\n metric.codeLines >= 0 &&\n !seenPaths.has(metric.path)\n );\n}\n\nfunction effectiveFileRecordPolicy(\n metric: FileMetric,\n areaPolicy: FileMetricsAreaPolicyContext\n): EffectiveFileRecordPolicy | undefined {\n const areaIds = areaPolicy.areaIdsByPath.get(metric.path);\n if (areaIds === undefined || areaIds.length === 0) return undefined;\n const matchingAreas: ResolvedFileMetricsCodeAreaOptions[] = [];\n let strictestMaximum: number | undefined;\n for (const areaId of areaIds) {\n const codeArea = areaPolicy.codeAreas[areaId];\n if (codeArea === undefined) return undefined;\n matchingAreas.push(codeArea);\n const maximum = fileCodeLineMaximum(metric, codeArea);\n strictestMaximum =\n strictestMaximum === undefined ? maximum : Math.min(strictestMaximum, maximum);\n }\n return strictestMaximum === undefined\n ? undefined\n : Object.freeze({\n areaIds,\n blocking: isBlockingFinding(matchingAreas.map((area) => area.findingPolicy)),\n limit: strictestMaximum\n });\n}\n\nfunction createFileRecordCandidate(\n metric: FileMetric,\n recordPolicy: EffectiveFileRecordPolicy\n): FileRecordCandidate {\n return Object.freeze({\n id: metric.path,\n data: Object.freeze({\n blocking: recordPolicy.blocking,\n codeAreas: Object.freeze([...recordPolicy.areaIds]),\n codeLines: metric.codeLines,\n limit: recordPolicy.limit,\n metric: FILE_CODE_LINES_METRIC,\n path: metric.path\n })\n });\n}\n\nfunction fileCodeLineMaximum(metric: FileMetric, area: ResolvedFileMetricsCodeAreaOptions): number {\n const allowance = area.codeLines.lowDecisionTokenAllowance;\n const decisionTokens = metric.decisionTokens.value;\n return decisionTokens !== null && decisionTokens <= allowance.maximumDecisionTokens\n ? allowance.maximumCodeLines\n : area.codeLines.maximum;\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"records.mjs","sourceRoot":"","sources":["../../../../src/package-checks/file-metrics/records.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileMetric } from \"./measurement-model.ts\";\nimport type { FileMetricsFindingIdentity, ResolvedFileMetricsCodeAreaOptions } from \"./options.ts\";\nimport { isBlockingFinding } from \"../code-quality-findings/policy.ts\";\nimport { isNormalizedProjectRelativePath } from \"../host-environment/path.ts\";\nimport type { MaterializedFindingWaiver } from \"../../package-tools/finding-waivers/reconciliation.ts\";\nimport {\n buildFindingWaiverAuditRecordData,\n type FindingWaiverAuditRecordData,\n type FindingWaiverRecordAudit\n} from \"../code-quality-findings/finding-waiver-evidence.ts\";\nimport type {\n CanonicalJsonObject,\n CanonicalJsonValue\n} from \"../../data-boundary/canonical-data.ts\";\n\nconst FILE_CODE_LINES_METRIC = \"code-lines\" as const;\nconst FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX = \"/finding-waiver-audit/\";\n\ninterface FileMetricsAreaPolicyContext {\n readonly areaIdsByPath: ReadonlyMap<string, readonly string[]>;\n readonly codeAreas: Readonly<Record<string, ResolvedFileMetricsCodeAreaOptions>>;\n}\n\ninterface EffectiveFileRecordPolicy {\n readonly areaIds: readonly string[];\n readonly blocking: boolean;\n readonly limit: number;\n}\n\n/** 一条超出文件代码行上限的 supplemental Record data。 */\nexport type FileMetricsFindingRecordData = Readonly<{\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly codeLines: number;\n readonly limit: number;\n readonly metric: \"code-lines\";\n readonly path: string;\n /** 精确匹配 waiver 时保留理由,并令该 finding 不再参与 actionable settlement。 */\n readonly waiver?: Readonly<{ readonly reason: string }>;\n}>;\n\n/** 未使用或过宽 file-metrics waiver 的 supplemental audit Record data。 */\nexport type FileMetricsFindingWaiverAuditRecordData =\n FindingWaiverAuditRecordData<FileMetricsFindingIdentity>;\n\n/** file-metrics 发布的 finding 或 waiver-audit supplemental Record data。 */\nexport type FileMetricsRecordData =\n | FileMetricsFindingRecordData\n | FileMetricsFindingWaiverAuditRecordData;\n\nexport interface FileRecordCandidate {\n readonly data: FileMetricsFindingRecordData;\n readonly id: string;\n}\n\n/** 仅为未使用和过宽 waiver 构造补充 audit Record;正常 applied waiver 由 finding Record 自己保留。 */\nexport function fileMetricsWaiverAuditRecord(\n audit: FindingWaiverRecordAudit\n): Readonly<{ readonly data: FileMetricsFindingWaiverAuditRecordData; readonly id: string }> {\n const identity = fileMetricsWaiverIdentity(audit.waiver);\n return Object.freeze({\n data: buildFindingWaiverAuditRecordData(identity, audit),\n id: `${FINDING_WAIVER_AUDIT_RECORD_ID_PREFIX}${identity.path}`\n });\n}\n\nexport function fileMetricsWaiverIdentity(\n waiver: MaterializedFindingWaiver\n): FileMetricsFindingIdentity {\n const identity = waiver.identity;\n if (\n !isCanonicalObject(identity) ||\n identity.metric !== \"code-lines\" ||\n typeof identity.path !== \"string\" ||\n !isNormalizedProjectRelativePath(identity.path)\n ) {\n throw new TypeError(\"fileMetrics waiver identity must retain a normalized code-lines path\");\n }\n return Object.freeze({ metric: \"code-lines\", path: identity.path });\n}\n\nfunction isCanonicalObject(value: CanonicalJsonValue): value is CanonicalJsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Converts trusted scanner metrics into area-policy-owned supplemental facts. */\nexport function buildFileRecordCandidates(\n metrics: readonly FileMetric[],\n areaPolicy: FileMetricsAreaPolicyContext\n): readonly FileRecordCandidate[] | undefined {\n const seenPaths = new Set<string>();\n const candidates: FileRecordCandidate[] = [];\n for (const metric of metrics) {\n if (!isValidUniqueFileMetric(metric, seenPaths)) return undefined;\n seenPaths.add(metric.path);\n\n const recordPolicy = effectiveFileRecordPolicy(metric, areaPolicy);\n if (recordPolicy === undefined) return undefined;\n if (metric.codeLines <= recordPolicy.limit) continue;\n candidates.push(createFileRecordCandidate(metric, recordPolicy));\n }\n candidates.sort((left, right) => compareText(left.id, right.id));\n return Object.freeze(candidates);\n}\n\nfunction isValidUniqueFileMetric(metric: FileMetric, seenPaths: ReadonlySet<string>): boolean {\n return (\n typeof metric.path === \"string\" &&\n metric.path.length > 0 &&\n Number.isSafeInteger(metric.codeLines) &&\n metric.codeLines >= 0 &&\n !seenPaths.has(metric.path)\n );\n}\n\nfunction effectiveFileRecordPolicy(\n metric: FileMetric,\n areaPolicy: FileMetricsAreaPolicyContext\n): EffectiveFileRecordPolicy | undefined {\n const areaIds = areaPolicy.areaIdsByPath.get(metric.path);\n if (areaIds === undefined || areaIds.length === 0) return undefined;\n const matchingAreas: ResolvedFileMetricsCodeAreaOptions[] = [];\n let strictestMaximum: number | undefined;\n for (const areaId of areaIds) {\n const codeArea = areaPolicy.codeAreas[areaId];\n if (codeArea === undefined) return undefined;\n matchingAreas.push(codeArea);\n const maximum = fileCodeLineMaximum(metric, codeArea);\n strictestMaximum =\n strictestMaximum === undefined ? maximum : Math.min(strictestMaximum, maximum);\n }\n return strictestMaximum === undefined\n ? undefined\n : Object.freeze({\n areaIds,\n blocking: isBlockingFinding(matchingAreas.map((area) => area.findingPolicy)),\n limit: strictestMaximum\n });\n}\n\nfunction createFileRecordCandidate(\n metric: FileMetric,\n recordPolicy: EffectiveFileRecordPolicy\n): FileRecordCandidate {\n return Object.freeze({\n id: metric.path,\n data: Object.freeze({\n blocking: recordPolicy.blocking,\n codeAreas: Object.freeze([...recordPolicy.areaIds]),\n codeLines: metric.codeLines,\n limit: recordPolicy.limit,\n metric: FILE_CODE_LINES_METRIC,\n path: metric.path\n })\n });\n}\n\nfunction fileCodeLineMaximum(metric: FileMetric, area: ResolvedFileMetricsCodeAreaOptions): number {\n const allowance = area.codeLines.lowDecisionTokenAllowance;\n const decisionTokens = metric.decisionTokens.value;\n return decisionTokens !== null && decisionTokens <= allowance.maximumDecisionTokens\n ? allowance.maximumCodeLines\n : area.codeLines.maximum;\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { errorMessage } from "../../host-environment/error-message.mjs";
|
|
2
|
-
import { processFailure, runProcess } from "../../host-environment/process
|
|
2
|
+
import { processFailure, runProcess } from "../../host-environment/process.mjs";
|
|
3
3
|
import { SCC_VERSION_OUTPUT } from "./parser.mjs";
|
|
4
4
|
const SCC_VERSION_ARGUMENTS = Object.freeze(["--version"]);
|
|
5
5
|
export async function checkScc(rootDir, scanner) {
|
|
@@ -54,6 +54,6 @@ function commandOutput(commandResult) {
|
|
|
54
54
|
function processTermination(commandResult) {
|
|
55
55
|
return typeof commandResult.status === "number"
|
|
56
56
|
? `exit ${commandResult.status}`
|
|
57
|
-
: `signal ${commandResult.signal
|
|
57
|
+
: `signal ${commandResult.signal ?? "unknown"}`;
|
|
58
58
|
}
|
|
59
59
|
//# sourceMappingURL=availability.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"availability.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/availability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"availability.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/availability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAuB3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,OAA0C;IAE1C,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;YACrC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO,CAAC,UAAU;YAC3B,GAAG,EAAE,OAAO;SACb,CAAC,CAAC;QACH,OAAO,6BAA6B,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,sBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,aAAsC;IAC3E,IAAI,aAAa,CAAC,KAAK;QAAE,OAAO,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CACnB,yBAAyB,kBAAkB,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC5F,iBAAiB,CAClB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACnC,OAAO,cAAc,CACnB,YAAY,kBAAkB,UAAU,OAAO,IAAI,SAAS,GAAG,EAC/D,gBAAgB,CACjB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,IAAI;QACf,OAAO;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAY;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC9D,OAAO,cAAc,CACnB,aAAa,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,EAC7F,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAa,EACb,MAAgD;IAEhD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,IAAI;QACb,KAAK;QACL,MAAM,EAAE,oBAAoB;QAC5B,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,aAAsC;IAC3D,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,aAAsC;IAChE,OAAO,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ;QAC7C,CAAC,CAAC,QAAQ,aAAa,CAAC,MAAM,EAAE;QAChC,CAAC,CAAC,UAAU,aAAa,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { processFailure, runProcess } from \"../../host-environment/process.ts\";\nimport type { ResolvedFileMetricsScannerOptions } from \"../options.ts\";\nimport { SCC_VERSION_OUTPUT } from \"./parser.ts\";\n\nconst SCC_VERSION_ARGUMENTS = Object.freeze([\"--version\"]);\n\ntype SccAvailability = Readonly<\n | {\n readonly available: true;\n readonly error: null;\n readonly name: \"scc\";\n readonly reason: null;\n readonly source: \"configured command\";\n readonly version: string;\n }\n | {\n readonly available: false;\n readonly error: string;\n readonly name: \"scc\";\n readonly reason: \"contract-error\" | \"execution-error\" | \"tool-unavailable\";\n readonly source: \"configured command\";\n readonly version: null;\n }\n>;\n\ntype SccVersionCommandResult = Awaited<ReturnType<typeof runProcess>>;\n\nexport async function checkScc(\n rootDir: string,\n scanner: ResolvedFileMetricsScannerOptions\n): Promise<SccAvailability> {\n try {\n const commandResult = await runProcess({\n args: SCC_VERSION_ARGUMENTS,\n command: scanner.executable,\n cwd: rootDir\n });\n return availabilityFromVersionResult(commandResult);\n } catch (error: unknown) {\n return unavailableScc(`scc version error: ${errorMessage(error)}`, \"execution-error\");\n }\n}\n\nfunction availabilityFromVersionResult(commandResult: SccVersionCommandResult): SccAvailability {\n if (commandResult.error) return processErrorAvailability(commandResult.error);\n const version = commandOutput(commandResult);\n if (commandResult.status !== 0) {\n return unavailableScc(\n `scc --version failed, ${processTermination(commandResult)}${version ? `: ${version}` : \"\"}`,\n \"execution-error\"\n );\n }\n if (version !== SCC_VERSION_OUTPUT) {\n return unavailableScc(\n `expected ${SCC_VERSION_OUTPUT}, got \"${version || \"unknown\"}\"`,\n \"contract-error\"\n );\n }\n return {\n name: \"scc\",\n available: true,\n version,\n error: null,\n source: \"configured command\",\n reason: null\n };\n}\n\nfunction processErrorAvailability(error: Error): SccAvailability {\n const isMissingTool = processFailure(error).code === \"ENOENT\";\n return unavailableScc(\n isMissingTool ? `scc not installed: ${error.message}` : `scc version error: ${error.message}`,\n isMissingTool ? \"tool-unavailable\" : \"execution-error\"\n );\n}\n\nfunction unavailableScc(\n error: string,\n reason: Exclude<SccAvailability[\"reason\"], null>\n): SccAvailability {\n return {\n name: \"scc\",\n available: false,\n version: null,\n error,\n source: \"configured command\",\n reason\n };\n}\n\nfunction commandOutput(commandResult: SccVersionCommandResult): string {\n return (commandResult.stdout || \"\").trim() || (commandResult.stderr || \"\").trim();\n}\n\nfunction processTermination(commandResult: SccVersionCommandResult): string {\n return typeof commandResult.status === \"number\"\n ? `exit ${commandResult.status}`\n : `signal ${commandResult.signal ?? \"unknown\"}`;\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const TERMINAL_NUL_CODE_UNITS = 1;
|
|
2
|
+
/** SCC adapter 的私有 Windows argv 传输上限;不属于 scanner options。 */
|
|
3
|
+
export const SCC_BATCH_COMMAND_LINE_CEILING = 28_000;
|
|
4
|
+
/**
|
|
5
|
+
* 返回 Windows command-line serialization 的保守 UTF-16 code-unit 上界。
|
|
6
|
+
*
|
|
7
|
+
* 每个 argument 都按最多双倍转义并保留一对引号,arguments 之间保留一个分隔符,
|
|
8
|
+
* 最后保留 CreateProcessW 所需的终止 NUL。
|
|
9
|
+
*/
|
|
10
|
+
export function estimateSccCommandLineCodeUnits(argumentsToEstimate) {
|
|
11
|
+
return argumentsToEstimate.reduce((total, argument, index) => total + (index === 0 ? 0 : 1) + 2 * argument.length + 2, TERMINAL_NUL_CODE_UNITS);
|
|
12
|
+
}
|
|
13
|
+
/** 将已批准的 exact paths 按固定 SCC protocol 稳定地切为可传输 batches。 */
|
|
14
|
+
export function planSccBatches(executable, fixedArguments, includePaths, ceiling = SCC_BATCH_COMMAND_LINE_CEILING) {
|
|
15
|
+
const batches = [];
|
|
16
|
+
let currentBatch = [];
|
|
17
|
+
for (const includePath of includePaths) {
|
|
18
|
+
const singlePathArguments = [executable, ...fixedArguments, includePath];
|
|
19
|
+
if (estimateSccCommandLineCodeUnits(singlePathArguments) > ceiling) {
|
|
20
|
+
return {
|
|
21
|
+
ok: false,
|
|
22
|
+
error: `scc exact path cannot fit command-line ceiling ${ceiling}: ${JSON.stringify(includePath)}`
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const candidateBatch = [...currentBatch, includePath];
|
|
26
|
+
if (currentBatch.length > 0 &&
|
|
27
|
+
estimateSccCommandLineCodeUnits([executable, ...fixedArguments, ...candidateBatch]) > ceiling) {
|
|
28
|
+
batches.push(currentBatch);
|
|
29
|
+
currentBatch = [includePath];
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
currentBatch = candidateBatch;
|
|
33
|
+
}
|
|
34
|
+
if (currentBatch.length > 0)
|
|
35
|
+
batches.push(currentBatch);
|
|
36
|
+
return { ok: true, batches };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=batch-planner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-planner.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/batch-planner.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAMrD;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,mBAAsC;IACpF,OAAO,mBAAmB,CAAC,MAAM,CAC/B,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EACnF,uBAAuB,CACxB,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,cAAiC,EACjC,YAA+B,EAC/B,OAAO,GAAG,8BAA8B;IAExC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,GAAG,cAAc,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,+BAA+B,CAAC,mBAAmB,CAAC,GAAG,OAAO,EAAE,CAAC;YACnE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,kDAAkD,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;aACnG,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,IACE,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,+BAA+B,CAAC,CAAC,UAAU,EAAE,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC,CAAC,GAAG,OAAO,EAC7F,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC","sourcesContent":["const TERMINAL_NUL_CODE_UNITS = 1;\n\n/** SCC adapter 的私有 Windows argv 传输上限;不属于 scanner options。 */\nexport const SCC_BATCH_COMMAND_LINE_CEILING = 28_000;\n\nexport type SccBatchPlan =\n | { readonly batches: readonly (readonly string[])[]; readonly ok: true }\n | { readonly error: string; readonly ok: false };\n\n/**\n * 返回 Windows command-line serialization 的保守 UTF-16 code-unit 上界。\n *\n * 每个 argument 都按最多双倍转义并保留一对引号,arguments 之间保留一个分隔符,\n * 最后保留 CreateProcessW 所需的终止 NUL。\n */\nexport function estimateSccCommandLineCodeUnits(argumentsToEstimate: readonly string[]): number {\n return argumentsToEstimate.reduce(\n (total, argument, index) => total + (index === 0 ? 0 : 1) + 2 * argument.length + 2,\n TERMINAL_NUL_CODE_UNITS\n );\n}\n\n/** 将已批准的 exact paths 按固定 SCC protocol 稳定地切为可传输 batches。 */\nexport function planSccBatches(\n executable: string,\n fixedArguments: readonly string[],\n includePaths: readonly string[],\n ceiling = SCC_BATCH_COMMAND_LINE_CEILING\n): SccBatchPlan {\n const batches: string[][] = [];\n let currentBatch: string[] = [];\n\n for (const includePath of includePaths) {\n const singlePathArguments = [executable, ...fixedArguments, includePath];\n if (estimateSccCommandLineCodeUnits(singlePathArguments) > ceiling) {\n return {\n ok: false,\n error: `scc exact path cannot fit command-line ceiling ${ceiling}: ${JSON.stringify(includePath)}`\n };\n }\n\n const candidateBatch = [...currentBatch, includePath];\n if (\n currentBatch.length > 0 &&\n estimateSccCommandLineCodeUnits([executable, ...fixedArguments, ...candidateBatch]) > ceiling\n ) {\n batches.push(currentBatch);\n currentBatch = [includePath];\n continue;\n }\n currentBatch = candidateBatch;\n }\n\n if (currentBatch.length > 0) batches.push(currentBatch);\n return { ok: true, batches };\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from "../../host-environment/process.mjs";
|
|
2
|
+
export const SCC_LOGICAL_SCAN_TIMEOUT_MS = 300_000;
|
|
3
|
+
const NANOSECONDS_PER_MILLISECOND = 1000000n;
|
|
4
|
+
/** 为一次 logical SCC scan 建立共享 deadline 与 stdout/stderr 预算。 */
|
|
5
|
+
export function beginSccLogicalScanResources(startedNanoseconds, timeoutMilliseconds = SCC_LOGICAL_SCAN_TIMEOUT_MS, outputBudgetBytes = DEFAULT_PROCESS_MAX_BUFFER_BYTES) {
|
|
6
|
+
return {
|
|
7
|
+
deadlineNanoseconds: startedNanoseconds + BigInt(timeoutMilliseconds) * NANOSECONDS_PER_MILLISECOND,
|
|
8
|
+
stderrRemainingBytes: outputBudgetBytes,
|
|
9
|
+
stdoutRemainingBytes: outputBudgetBytes
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** 计算下一个 batch 可使用的完整毫秒数;deadline 到期时不再启动 process。 */
|
|
13
|
+
export function remainingSccBatchTimeoutMs(resources, nowNanoseconds) {
|
|
14
|
+
const remainingNanoseconds = resources.deadlineNanoseconds - nowNanoseconds;
|
|
15
|
+
const remainingMilliseconds = Number(remainingNanoseconds / NANOSECONDS_PER_MILLISECOND);
|
|
16
|
+
return remainingMilliseconds > 0 ? remainingMilliseconds : null;
|
|
17
|
+
}
|
|
18
|
+
/** 以两个 stream 中较小的余量限制本次 process 的 maxBuffer。 */
|
|
19
|
+
export function remainingSccBatchMaxBuffer(resources) {
|
|
20
|
+
const remainingBytes = Math.min(resources.stdoutRemainingBytes, resources.stderrRemainingBytes);
|
|
21
|
+
return remainingBytes > 0 ? remainingBytes : null;
|
|
22
|
+
}
|
|
23
|
+
/** 记录一次 process 的 UTF-8 output;任一 stream 超出完整 logical-scan 预算即失败。 */
|
|
24
|
+
export function consumeSccProcessOutput(resources, stdout, stderr) {
|
|
25
|
+
const stdoutBytes = Buffer.byteLength(stdout, "utf8");
|
|
26
|
+
const stderrBytes = Buffer.byteLength(stderr, "utf8");
|
|
27
|
+
if (stdoutBytes > resources.stdoutRemainingBytes ||
|
|
28
|
+
stderrBytes > resources.stderrRemainingBytes) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
resources.stdoutRemainingBytes -= stdoutBytes;
|
|
32
|
+
resources.stderrRemainingBytes -= stderrBytes;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=logical-scan-resources.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical-scan-resources.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/logical-scan-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAErF,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AACnD,MAAM,2BAA2B,GAAG,QAAU,CAAC;AAQ/C,6DAA6D;AAC7D,MAAM,UAAU,4BAA4B,CAC1C,kBAA0B,EAC1B,mBAAmB,GAAG,2BAA2B,EACjD,iBAAiB,GAAG,gCAAgC;IAEpD,OAAO;QACL,mBAAmB,EACjB,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,2BAA2B;QAChF,oBAAoB,EAAE,iBAAiB;QACvC,oBAAoB,EAAE,iBAAiB;KACxC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,0BAA0B,CACxC,SAAkC,EAClC,cAAsB;IAEtB,MAAM,oBAAoB,GAAG,SAAS,CAAC,mBAAmB,GAAG,cAAc,CAAC;IAC5E,MAAM,qBAAqB,GAAG,MAAM,CAAC,oBAAoB,GAAG,2BAA2B,CAAC,CAAC;IACzF,OAAO,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,0BAA0B,CAAC,SAAkC;IAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAChG,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,uBAAuB,CACrC,SAAkC,EAClC,MAAc,EACd,MAAc;IAEd,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,IACE,WAAW,GAAG,SAAS,CAAC,oBAAoB;QAC5C,WAAW,GAAG,SAAS,CAAC,oBAAoB,EAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,SAAS,CAAC,oBAAoB,IAAI,WAAW,CAAC;IAC9C,SAAS,CAAC,oBAAoB,IAAI,WAAW,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from \"../../host-environment/process.ts\";\n\nexport const SCC_LOGICAL_SCAN_TIMEOUT_MS = 300_000;\nconst NANOSECONDS_PER_MILLISECOND = 1_000_000n;\n\nexport interface SccLogicalScanResources {\n readonly deadlineNanoseconds: bigint;\n stderrRemainingBytes: number;\n stdoutRemainingBytes: number;\n}\n\n/** 为一次 logical SCC scan 建立共享 deadline 与 stdout/stderr 预算。 */\nexport function beginSccLogicalScanResources(\n startedNanoseconds: bigint,\n timeoutMilliseconds = SCC_LOGICAL_SCAN_TIMEOUT_MS,\n outputBudgetBytes = DEFAULT_PROCESS_MAX_BUFFER_BYTES\n): SccLogicalScanResources {\n return {\n deadlineNanoseconds:\n startedNanoseconds + BigInt(timeoutMilliseconds) * NANOSECONDS_PER_MILLISECOND,\n stderrRemainingBytes: outputBudgetBytes,\n stdoutRemainingBytes: outputBudgetBytes\n };\n}\n\n/** 计算下一个 batch 可使用的完整毫秒数;deadline 到期时不再启动 process。 */\nexport function remainingSccBatchTimeoutMs(\n resources: SccLogicalScanResources,\n nowNanoseconds: bigint\n): number | null {\n const remainingNanoseconds = resources.deadlineNanoseconds - nowNanoseconds;\n const remainingMilliseconds = Number(remainingNanoseconds / NANOSECONDS_PER_MILLISECOND);\n return remainingMilliseconds > 0 ? remainingMilliseconds : null;\n}\n\n/** 以两个 stream 中较小的余量限制本次 process 的 maxBuffer。 */\nexport function remainingSccBatchMaxBuffer(resources: SccLogicalScanResources): number | null {\n const remainingBytes = Math.min(resources.stdoutRemainingBytes, resources.stderrRemainingBytes);\n return remainingBytes > 0 ? remainingBytes : null;\n}\n\n/** 记录一次 process 的 UTF-8 output;任一 stream 超出完整 logical-scan 预算即失败。 */\nexport function consumeSccProcessOutput(\n resources: SccLogicalScanResources,\n stdout: string,\n stderr: string\n): boolean {\n const stdoutBytes = Buffer.byteLength(stdout, \"utf8\");\n const stderrBytes = Buffer.byteLength(stderr, \"utf8\");\n if (\n stdoutBytes > resources.stdoutRemainingBytes ||\n stderrBytes > resources.stderrRemainingBytes\n ) {\n return false;\n }\n resources.stdoutRemainingBytes -= stdoutBytes;\n resources.stderrRemainingBytes -= stderrBytes;\n return true;\n}\n"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { errorMessage } from "../../host-environment/error-message.mjs";
|
|
2
2
|
import { normalizeScannerReportedPath } from "../../project-files/reported-path.mjs";
|
|
3
|
-
import { parseCsvRows } from "
|
|
4
|
-
export const SCC_VERSION = "
|
|
3
|
+
import { parseCsvRows } from "../../host-environment/csv.mjs";
|
|
4
|
+
export const SCC_VERSION = "4.0.0";
|
|
5
5
|
export const SCC_VERSION_OUTPUT = `scc version ${SCC_VERSION}`;
|
|
6
6
|
export const SCC_BY_FILE_CSV_HEADER = "Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC";
|
|
7
7
|
/**
|
|
8
8
|
* 解析 scc CSV 输出。
|
|
9
9
|
*
|
|
10
|
-
* scc
|
|
10
|
+
* scc 4.0.0 `--no-config --by-file --format csv` 列:
|
|
11
11
|
* Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC
|
|
12
12
|
*
|
|
13
13
|
* - Lines 包含所有行(code + comments + blanks)
|
|
14
14
|
* - Code 是文件级代码行数,用于 code-line finding
|
|
15
15
|
* - Complexity 是 scc complexitychecks token 命中数,用于 low-decision-token allowance,不是函数级 CC
|
|
16
|
-
* - ULOC (Usable Lines of Code) 由
|
|
16
|
+
* - ULOC (Usable Lines of Code) 由 4.0.0 输出,但首期不进入稳定 metrics
|
|
17
17
|
*/
|
|
18
18
|
export function parseSccCSV(csv, cwd) {
|
|
19
19
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExactInputMeasurement } from \"../../project-files/exact-input-measurement.ts\";\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { normalizeScannerReportedPath } from \"../../project-files/reported-path.ts\";\nimport type { FileMetric } from \"../measurement-model.ts\";\nimport { parseCsvRows } from \"./csv.ts\";\n\nexport const SCC_VERSION = \"3.7.0\";\nexport const SCC_VERSION_OUTPUT = `scc version ${SCC_VERSION}`;\nexport const SCC_BY_FILE_CSV_HEADER =\n \"Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC\";\n\nexport type SccScanResult =\n | {\n readonly measurements: readonly ExactInputMeasurement<FileMetric>[];\n readonly ok: true;\n }\n | {\n readonly error: string;\n readonly ok: false;\n readonly reason: \"execution\" | \"invalid-result\";\n };\n\ninterface SccColumnIndexes {\n blanks: number;\n code: number;\n comments: number;\n complexity: number;\n filename: number;\n lines: number;\n provider: number;\n}\n\ninterface ParsedSccRow {\n readonly codeLines: number;\n readonly complexity: number | null;\n readonly path: string;\n}\n\ninterface SccRawRow {\n readonly blankLines: string;\n readonly codeLines: string;\n readonly commentLines: string;\n readonly complexity: string;\n readonly filename: string;\n readonly lineCount: string;\n readonly providerPath: string;\n}\n\n/**\n * 解析 scc CSV 输出。\n *\n * scc 3.7.0 `--by-file --format csv` 列:\n * Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC\n *\n * - Lines 包含所有行(code + comments + blanks)\n * - Code 是文件级代码行数,用于 code-line finding\n * - Complexity 是 scc complexitychecks token 命中数,用于 low-decision-token allowance,不是函数级 CC\n * - ULOC (Usable Lines of Code) 由 3.7.0 输出,但首期不进入稳定 metrics\n */\nexport function parseSccCSV(csv: string, cwd: string): SccScanResult {\n try {\n const rows = parseCsvRows(csv);\n const headerIndex = findSccHeaderIndex(rows);\n if (headerIndex < 0) {\n return {\n ok: false,\n error: `expected scc ${SCC_VERSION} by-file CSV header \"${SCC_BY_FILE_CSV_HEADER}\", got \"${observedSccHeader(rows)}\"`,\n reason: \"invalid-result\"\n };\n }\n\n const columns = sccColumnIndexes(rows[headerIndex] ?? []);\n const measurements = parseSccMetrics(\n rows.slice(headerIndex + 1),\n columns,\n headerIndex + 2,\n cwd\n );\n return {\n ok: true,\n measurements\n };\n } catch (error: unknown) {\n return {\n ok: false,\n error: `Failed to parse scc CSV: ${errorMessage(error)}`,\n reason: \"invalid-result\"\n };\n }\n}\n\nfunction findSccHeaderIndex(rows: string[][]): number {\n const expectedHeader = SCC_BY_FILE_CSV_HEADER.split(\",\");\n return rows.findIndex((row) => isCsvRow(row, expectedHeader));\n}\n\nfunction observedSccHeader(rows: string[][]): string {\n return rows.find((row) => row[0] === \"Language\")?.join(\",\") ?? rows[0]?.join(\",\") ?? \"\";\n}\n\nfunction sccColumnIndexes(headerColumns: string[]): SccColumnIndexes {\n return {\n provider: headerColumns.indexOf(\"Provider\"),\n filename: headerColumns.indexOf(\"Filename\"),\n lines: headerColumns.indexOf(\"Lines\"),\n code: headerColumns.indexOf(\"Code\"),\n comments: headerColumns.indexOf(\"Comments\"),\n blanks: headerColumns.indexOf(\"Blanks\"),\n complexity: headerColumns.indexOf(\"Complexity\")\n };\n}\n\nfunction parseSccMetrics(\n rows: string[][],\n columns: SccColumnIndexes,\n firstRowNumber: number,\n cwd: string\n): ExactInputMeasurement<FileMetric>[] {\n const measurements: ExactInputMeasurement<FileMetric>[] = [];\n\n for (const [index, row] of rows.entries()) {\n const measurement = parseSccFileMetric(row, columns, firstRowNumber + index, cwd);\n measurements.push(measurement);\n }\n\n measurements.sort((left, right) => compareText(left.payload.path, right.payload.path));\n return measurements;\n}\n\nfunction parseSccFileMetric(\n rowValues: string[],\n columns: SccColumnIndexes,\n rowNumber: number,\n cwd: string\n): ExactInputMeasurement<FileMetric> {\n const row = parseSccRow(rowValues, columns, rowNumber);\n const sourcePath = normalizeScannerReportedPath(row.path, cwd);\n return {\n sourcePaths: [sourcePath],\n payload: {\n path: sourcePath,\n codeLines: row.codeLines,\n decisionTokens: {\n value: row.complexity,\n source: \"scc\"\n }\n }\n };\n}\n\nfunction parseSccRow(\n rowValues: string[],\n columns: SccColumnIndexes,\n rowNumber: number\n): ParsedSccRow {\n const expectedColumnCount = SCC_BY_FILE_CSV_HEADER.split(\",\").length;\n if (rowValues.length !== expectedColumnCount) {\n throw new Error(\n `row ${rowNumber} has ${rowValues.length} columns; expected ${expectedColumnCount}`\n );\n }\n const rawRow = sccRawRow(rowValues, columns);\n if (!rawRow.filename) {\n throw new Error(`row ${rowNumber} field Filename must not be empty`);\n }\n validateSccRowCounts(rawRow, rowNumber);\n\n return {\n path: rawRow.providerPath || rawRow.filename,\n codeLines: parseRequiredInteger(rawRow.codeLines, \"Code\", rowNumber),\n complexity: parseOptionalInteger(rawRow.complexity, \"Complexity\", rowNumber)\n };\n}\n\nfunction validateSccRowCounts(row: SccRawRow, rowNumber: number): void {\n parseRequiredInteger(row.lineCount, \"Lines\", rowNumber);\n parseRequiredInteger(row.commentLines, \"Comments\", rowNumber);\n parseRequiredInteger(row.blankLines, \"Blanks\", rowNumber);\n}\n\nfunction sccRawRow(rowValues: string[], columns: SccColumnIndexes): SccRawRow {\n return {\n blankLines: sccColumnValue(rowValues, columns.blanks),\n codeLines: sccColumnValue(rowValues, columns.code),\n commentLines: sccColumnValue(rowValues, columns.comments),\n complexity: sccColumnValue(rowValues, columns.complexity),\n filename: sccColumnValue(rowValues, columns.filename),\n lineCount: sccColumnValue(rowValues, columns.lines),\n providerPath: sccColumnValue(rowValues, columns.provider)\n };\n}\n\nfunction parseRequiredInteger(value: string, field: string, rowNumber: number): number {\n if (!/^\\d+$/.test(value)) {\n throw new Error(`row ${rowNumber} field ${field} must be a non-negative integer`);\n }\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed)) {\n throw new Error(`row ${rowNumber} field ${field} exceeds the supported integer range`);\n }\n return parsed;\n}\n\nfunction parseOptionalInteger(value: string, field: string, rowNumber: number): number | null {\n return value === \"\" ? null : parseRequiredInteger(value, field, rowNumber);\n}\n\nfunction sccColumnValue(rowValues: string[], index: number): string {\n return index >= 0 ? (rowValues[index] ?? \"\") : \"\";\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction isCsvRow(row: string[], expectedValues: string[]): boolean {\n return (\n row.length === expectedValues.length &&\n row.every((value, index) => value === expectedValues[index])\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"parser.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExactInputMeasurement } from \"../../project-files/exact-input-measurement.ts\";\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { normalizeScannerReportedPath } from \"../../project-files/reported-path.ts\";\nimport type { FileMetric } from \"../measurement-model.ts\";\nimport { parseCsvRows } from \"../../host-environment/csv.ts\";\n\nexport const SCC_VERSION = \"4.0.0\";\nexport const SCC_VERSION_OUTPUT = `scc version ${SCC_VERSION}`;\nexport const SCC_BY_FILE_CSV_HEADER =\n \"Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC\";\n\nexport type SccScanResult =\n | {\n readonly measurements: readonly ExactInputMeasurement<FileMetric>[];\n readonly ok: true;\n }\n | {\n readonly error: string;\n readonly ok: false;\n readonly reason: \"execution\" | \"invalid-result\";\n };\n\ninterface SccColumnIndexes {\n blanks: number;\n code: number;\n comments: number;\n complexity: number;\n filename: number;\n lines: number;\n provider: number;\n}\n\ninterface ParsedSccRow {\n readonly codeLines: number;\n readonly complexity: number | null;\n readonly path: string;\n}\n\ninterface SccRawRow {\n readonly blankLines: string;\n readonly codeLines: string;\n readonly commentLines: string;\n readonly complexity: string;\n readonly filename: string;\n readonly lineCount: string;\n readonly providerPath: string;\n}\n\n/**\n * 解析 scc CSV 输出。\n *\n * scc 4.0.0 `--no-config --by-file --format csv` 列:\n * Language,Provider,Filename,Lines,Code,Comments,Blanks,Complexity,Bytes,ULOC\n *\n * - Lines 包含所有行(code + comments + blanks)\n * - Code 是文件级代码行数,用于 code-line finding\n * - Complexity 是 scc complexitychecks token 命中数,用于 low-decision-token allowance,不是函数级 CC\n * - ULOC (Usable Lines of Code) 由 4.0.0 输出,但首期不进入稳定 metrics\n */\nexport function parseSccCSV(csv: string, cwd: string): SccScanResult {\n try {\n const rows = parseCsvRows(csv);\n const headerIndex = findSccHeaderIndex(rows);\n if (headerIndex < 0) {\n return {\n ok: false,\n error: `expected scc ${SCC_VERSION} by-file CSV header \"${SCC_BY_FILE_CSV_HEADER}\", got \"${observedSccHeader(rows)}\"`,\n reason: \"invalid-result\"\n };\n }\n\n const columns = sccColumnIndexes(rows[headerIndex] ?? []);\n const measurements = parseSccMetrics(\n rows.slice(headerIndex + 1),\n columns,\n headerIndex + 2,\n cwd\n );\n return {\n ok: true,\n measurements\n };\n } catch (error: unknown) {\n return {\n ok: false,\n error: `Failed to parse scc CSV: ${errorMessage(error)}`,\n reason: \"invalid-result\"\n };\n }\n}\n\nfunction findSccHeaderIndex(rows: string[][]): number {\n const expectedHeader = SCC_BY_FILE_CSV_HEADER.split(\",\");\n return rows.findIndex((row) => isCsvRow(row, expectedHeader));\n}\n\nfunction observedSccHeader(rows: string[][]): string {\n return rows.find((row) => row[0] === \"Language\")?.join(\",\") ?? rows[0]?.join(\",\") ?? \"\";\n}\n\nfunction sccColumnIndexes(headerColumns: string[]): SccColumnIndexes {\n return {\n provider: headerColumns.indexOf(\"Provider\"),\n filename: headerColumns.indexOf(\"Filename\"),\n lines: headerColumns.indexOf(\"Lines\"),\n code: headerColumns.indexOf(\"Code\"),\n comments: headerColumns.indexOf(\"Comments\"),\n blanks: headerColumns.indexOf(\"Blanks\"),\n complexity: headerColumns.indexOf(\"Complexity\")\n };\n}\n\nfunction parseSccMetrics(\n rows: string[][],\n columns: SccColumnIndexes,\n firstRowNumber: number,\n cwd: string\n): ExactInputMeasurement<FileMetric>[] {\n const measurements: ExactInputMeasurement<FileMetric>[] = [];\n\n for (const [index, row] of rows.entries()) {\n const measurement = parseSccFileMetric(row, columns, firstRowNumber + index, cwd);\n measurements.push(measurement);\n }\n\n measurements.sort((left, right) => compareText(left.payload.path, right.payload.path));\n return measurements;\n}\n\nfunction parseSccFileMetric(\n rowValues: string[],\n columns: SccColumnIndexes,\n rowNumber: number,\n cwd: string\n): ExactInputMeasurement<FileMetric> {\n const row = parseSccRow(rowValues, columns, rowNumber);\n const sourcePath = normalizeScannerReportedPath(row.path, cwd);\n return {\n sourcePaths: [sourcePath],\n payload: {\n path: sourcePath,\n codeLines: row.codeLines,\n decisionTokens: {\n value: row.complexity,\n source: \"scc\"\n }\n }\n };\n}\n\nfunction parseSccRow(\n rowValues: string[],\n columns: SccColumnIndexes,\n rowNumber: number\n): ParsedSccRow {\n const expectedColumnCount = SCC_BY_FILE_CSV_HEADER.split(\",\").length;\n if (rowValues.length !== expectedColumnCount) {\n throw new Error(\n `row ${rowNumber} has ${rowValues.length} columns; expected ${expectedColumnCount}`\n );\n }\n const rawRow = sccRawRow(rowValues, columns);\n if (!rawRow.filename) {\n throw new Error(`row ${rowNumber} field Filename must not be empty`);\n }\n validateSccRowCounts(rawRow, rowNumber);\n\n return {\n path: rawRow.providerPath || rawRow.filename,\n codeLines: parseRequiredInteger(rawRow.codeLines, \"Code\", rowNumber),\n complexity: parseOptionalInteger(rawRow.complexity, \"Complexity\", rowNumber)\n };\n}\n\nfunction validateSccRowCounts(row: SccRawRow, rowNumber: number): void {\n parseRequiredInteger(row.lineCount, \"Lines\", rowNumber);\n parseRequiredInteger(row.commentLines, \"Comments\", rowNumber);\n parseRequiredInteger(row.blankLines, \"Blanks\", rowNumber);\n}\n\nfunction sccRawRow(rowValues: string[], columns: SccColumnIndexes): SccRawRow {\n return {\n blankLines: sccColumnValue(rowValues, columns.blanks),\n codeLines: sccColumnValue(rowValues, columns.code),\n commentLines: sccColumnValue(rowValues, columns.comments),\n complexity: sccColumnValue(rowValues, columns.complexity),\n filename: sccColumnValue(rowValues, columns.filename),\n lineCount: sccColumnValue(rowValues, columns.lines),\n providerPath: sccColumnValue(rowValues, columns.provider)\n };\n}\n\nfunction parseRequiredInteger(value: string, field: string, rowNumber: number): number {\n if (!/^\\d+$/.test(value)) {\n throw new Error(`row ${rowNumber} field ${field} must be a non-negative integer`);\n }\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed)) {\n throw new Error(`row ${rowNumber} field ${field} exceeds the supported integer range`);\n }\n return parsed;\n}\n\nfunction parseOptionalInteger(value: string, field: string, rowNumber: number): number | null {\n return value === \"\" ? null : parseRequiredInteger(value, field, rowNumber);\n}\n\nfunction sccColumnValue(rowValues: string[], index: number): string {\n return index >= 0 ? (rowValues[index] ?? \"\") : \"\";\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction isCsvRow(row: string[], expectedValues: string[]): boolean {\n return (\n row.length === expectedValues.length &&\n row.every((value, index) => value === expectedValues[index])\n );\n}\n"]}
|
|
@@ -4,41 +4,28 @@
|
|
|
4
4
|
* 封装 adapter-owned CLI 调用,输出 exact-path code lines 与 decision-token count。
|
|
5
5
|
*/
|
|
6
6
|
import { errorMessage } from "../../host-environment/error-message.mjs";
|
|
7
|
-
import { runProcessSync } from "../../host-environment/process
|
|
7
|
+
import { runProcessSync } from "../../host-environment/process.mjs";
|
|
8
|
+
import { acceptExactInputMeasurements } from "../../project-files/exact-input-measurement.mjs";
|
|
9
|
+
import { planSccBatches } from "./batch-planner.mjs";
|
|
10
|
+
import { beginSccLogicalScanResources, consumeSccProcessOutput, remainingSccBatchMaxBuffer, remainingSccBatchTimeoutMs } from "./logical-scan-resources.mjs";
|
|
8
11
|
import { parseSccCSV } from "./parser.mjs";
|
|
9
|
-
const SCC_BY_FILE_ARGUMENTS = Object.freeze(["--by-file", "--format", "csv"]);
|
|
10
|
-
const SCC_SCAN_TIMEOUT_MS = 300_000;
|
|
12
|
+
const SCC_BY_FILE_ARGUMENTS = Object.freeze(["--no-config", "--by-file", "--format", "csv"]);
|
|
11
13
|
export function scanWithScc({ cwd, includePaths, scanner }) {
|
|
12
14
|
try {
|
|
13
15
|
if (includePaths.length === 0)
|
|
14
16
|
return { ok: true, measurements: [] };
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
error: `scc process error: ${commandResult.error.message}`,
|
|
26
|
-
reason: "execution"
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
if (commandResult.status !== 0) {
|
|
30
|
-
const stderr = (commandResult.stderr || "").trim();
|
|
31
|
-
const stdout = (commandResult.stdout || "").trim();
|
|
32
|
-
const termination = commandResult.status === null
|
|
33
|
-
? `signal ${commandResult.signal ?? "unknown"}`
|
|
34
|
-
: `exit ${commandResult.status}`;
|
|
35
|
-
return {
|
|
36
|
-
ok: false,
|
|
37
|
-
error: `scc ${termination}: ${stderr || stdout || "no output"}`,
|
|
38
|
-
reason: "execution"
|
|
39
|
-
};
|
|
17
|
+
const batchPlan = planSccBatches(scanner.executable, SCC_BY_FILE_ARGUMENTS, includePaths);
|
|
18
|
+
if (!batchPlan.ok)
|
|
19
|
+
return { ok: false, error: batchPlan.error, reason: "execution" };
|
|
20
|
+
const logicalScanResources = beginSccLogicalScanResources(process.hrtime.bigint());
|
|
21
|
+
const measurements = [];
|
|
22
|
+
for (const batch of batchPlan.batches) {
|
|
23
|
+
const batchResult = scanSccBatch({ batch, cwd, logicalScanResources, scanner });
|
|
24
|
+
if (!batchResult.ok)
|
|
25
|
+
return batchResult;
|
|
26
|
+
measurements.push(...batchResult.measurements);
|
|
40
27
|
}
|
|
41
|
-
return
|
|
28
|
+
return mergeSccBatchMeasurements(measurements);
|
|
42
29
|
}
|
|
43
30
|
catch (error) {
|
|
44
31
|
return {
|
|
@@ -48,7 +35,93 @@ export function scanWithScc({ cwd, includePaths, scanner }) {
|
|
|
48
35
|
};
|
|
49
36
|
}
|
|
50
37
|
}
|
|
51
|
-
function
|
|
52
|
-
|
|
38
|
+
function scanSccBatch({ batch, cwd, logicalScanResources, scanner }) {
|
|
39
|
+
const remainingTimeoutMs = remainingSccBatchTimeoutMs(logicalScanResources, process.hrtime.bigint());
|
|
40
|
+
if (remainingTimeoutMs === null)
|
|
41
|
+
return expiredSccDeadline();
|
|
42
|
+
const remainingMaxBufferBytes = remainingSccBatchMaxBuffer(logicalScanResources);
|
|
43
|
+
if (remainingMaxBufferBytes === null)
|
|
44
|
+
return exhaustedSccOutputBudget();
|
|
45
|
+
const commandResult = runProcessSync({
|
|
46
|
+
args: [...SCC_BY_FILE_ARGUMENTS, ...batch],
|
|
47
|
+
command: scanner.executable,
|
|
48
|
+
cwd,
|
|
49
|
+
maxBuffer: remainingMaxBufferBytes,
|
|
50
|
+
timeout: remainingTimeoutMs
|
|
51
|
+
});
|
|
52
|
+
const processFailure = sccBatchProcessFailure(commandResult, logicalScanResources);
|
|
53
|
+
if (processFailure !== null)
|
|
54
|
+
return processFailure;
|
|
55
|
+
return parseAcceptedSccBatch(commandResult.stdout, cwd, batch);
|
|
56
|
+
}
|
|
57
|
+
function expiredSccDeadline() {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
error: "scc logical scan exceeded its shared timeout before the next batch",
|
|
61
|
+
reason: "execution"
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function exhaustedSccOutputBudget() {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
error: "scc logical scan exhausted its cumulative output budget before the next batch",
|
|
68
|
+
reason: "execution"
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function sccBatchProcessFailure(commandResult, logicalScanResources) {
|
|
72
|
+
if (!consumeSccProcessOutput(logicalScanResources, commandResult.stdout, commandResult.stderr)) {
|
|
73
|
+
return {
|
|
74
|
+
ok: false,
|
|
75
|
+
error: "scc logical scan exceeded its cumulative stdout or stderr output budget",
|
|
76
|
+
reason: "execution"
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (commandResult.error) {
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
error: `scc process error: ${commandResult.error.message}`,
|
|
83
|
+
reason: "execution"
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (commandResult.status === 0)
|
|
87
|
+
return null;
|
|
88
|
+
const output = commandResult.stderr.trim() || commandResult.stdout.trim() || "no output";
|
|
89
|
+
const termination = commandResult.status === null
|
|
90
|
+
? `signal ${commandResult.signal ?? "unknown"}`
|
|
91
|
+
: `exit ${commandResult.status}`;
|
|
92
|
+
return { ok: false, error: `scc ${termination}: ${output}`, reason: "execution" };
|
|
93
|
+
}
|
|
94
|
+
function parseAcceptedSccBatch(stdout, cwd, batch) {
|
|
95
|
+
const parsed = parseSccCSV(stdout, cwd);
|
|
96
|
+
if (!parsed.ok)
|
|
97
|
+
return parsed;
|
|
98
|
+
const acceptedMeasurements = acceptExactInputMeasurements(parsed.measurements, batch);
|
|
99
|
+
return acceptedMeasurements.ok
|
|
100
|
+
? parsed
|
|
101
|
+
: { ok: false, error: acceptedMeasurements.error, reason: "invalid-result" };
|
|
102
|
+
}
|
|
103
|
+
function mergeSccBatchMeasurements(measurements) {
|
|
104
|
+
const measuredPaths = new Set();
|
|
105
|
+
for (const measurement of measurements) {
|
|
106
|
+
if (measuredPaths.has(measurement.payload.path)) {
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
error: `scc returned duplicate measurement path ${JSON.stringify(measurement.payload.path)}`,
|
|
110
|
+
reason: "invalid-result"
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
measuredPaths.add(measurement.payload.path);
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
ok: true,
|
|
117
|
+
measurements: [...measurements].sort((left, right) => compareText(left.payload.path, right.payload.path))
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function compareText(left, right) {
|
|
121
|
+
if (left < right)
|
|
122
|
+
return -1;
|
|
123
|
+
if (left > right)
|
|
124
|
+
return 1;
|
|
125
|
+
return 0;
|
|
53
126
|
}
|
|
54
127
|
//# sourceMappingURL=scanner.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAE9D,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAQpC,MAAM,UAAU,WAAW,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAsB;IAC5E,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAErE,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAG,cAAc,CAAC;YACnC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,OAAO,CAAC,UAAU;YAC3B,GAAG;YACH,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,sBAAsB,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC1D,MAAM,EAAE,WAAW;aACpB,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,WAAW,GACf,aAAa,CAAC,MAAM,KAAK,IAAI;gBAC3B,CAAC,CAAC,UAAU,aAAa,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC/C,CAAC,CAAC,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,OAAO,WAAW,KAAK,MAAM,IAAI,MAAM,IAAI,WAAW,EAAE;gBAC/D,MAAM,EAAE,WAAW;aACpB,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,sBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE;YAClD,MAAM,EAAE,WAAW;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,YAA+B;IACnD,OAAO,CAAC,GAAG,qBAAqB,EAAE,GAAG,YAAY,CAAC,CAAC;AACrD,CAAC","sourcesContent":["/**\n * scc 文件级 code-line 指标 wrapper。\n *\n * 封装 adapter-owned CLI 调用,输出 exact-path code lines 与 decision-token count。\n */\n\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { runProcessSync } from \"../../host-environment/process/command.ts\";\nimport type { ResolvedFileMetricsScannerOptions } from \"../options.ts\";\nimport { parseSccCSV, type SccScanResult } from \"./parser.ts\";\n\nconst SCC_BY_FILE_ARGUMENTS = Object.freeze([\"--by-file\", \"--format\", \"csv\"]);\nconst SCC_SCAN_TIMEOUT_MS = 300_000;\n\ninterface ScanWithSccOptions {\n readonly cwd: string;\n readonly includePaths: readonly string[];\n readonly scanner: ResolvedFileMetricsScannerOptions;\n}\n\nexport function scanWithScc({ cwd, includePaths, scanner }: ScanWithSccOptions): SccScanResult {\n try {\n if (includePaths.length === 0) return { ok: true, measurements: [] };\n\n const scanArguments = buildSccArgs(includePaths);\n\n const commandResult = runProcessSync({\n args: scanArguments,\n command: scanner.executable,\n cwd,\n timeout: SCC_SCAN_TIMEOUT_MS\n });\n\n if (commandResult.error) {\n return {\n ok: false,\n error: `scc process error: ${commandResult.error.message}`,\n reason: \"execution\"\n };\n }\n\n if (commandResult.status !== 0) {\n const stderr = (commandResult.stderr || \"\").trim();\n const stdout = (commandResult.stdout || \"\").trim();\n const termination =\n commandResult.status === null\n ? `signal ${commandResult.signal ?? \"unknown\"}`\n : `exit ${commandResult.status}`;\n return {\n ok: false,\n error: `scc ${termination}: ${stderr || stdout || \"no output\"}`,\n reason: \"execution\"\n };\n }\n\n return parseSccCSV(commandResult.stdout || \"\", cwd);\n } catch (error: unknown) {\n return {\n ok: false,\n error: `scc adapter error: ${errorMessage(error)}`,\n reason: \"execution\"\n };\n }\n}\n\nfunction buildSccArgs(includePaths: readonly string[]): string[] {\n return [...SCC_BY_FILE_ARGUMENTS, ...includePaths];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scanner.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/file-metrics/scc/scanner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * scc 文件级 code-line 指标 wrapper。\n *\n * 封装 adapter-owned CLI 调用,输出 exact-path code lines 与 decision-token count。\n */\n\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { runProcessSync, type ProcessResult } from \"../../host-environment/process.ts\";\nimport { acceptExactInputMeasurements } from \"../../project-files/exact-input-measurement.ts\";\nimport type { ExactInputMeasurement } from \"../../project-files/exact-input-measurement.ts\";\nimport type { FileMetric } from \"../measurement-model.ts\";\nimport type { ResolvedFileMetricsScannerOptions } from \"../options.ts\";\nimport { planSccBatches } from \"./batch-planner.ts\";\nimport {\n beginSccLogicalScanResources,\n consumeSccProcessOutput,\n remainingSccBatchMaxBuffer,\n remainingSccBatchTimeoutMs,\n type SccLogicalScanResources\n} from \"./logical-scan-resources.ts\";\nimport { parseSccCSV, type SccScanResult } from \"./parser.ts\";\n\nconst SCC_BY_FILE_ARGUMENTS = Object.freeze([\"--no-config\", \"--by-file\", \"--format\", \"csv\"]);\ntype SccMeasurement = ExactInputMeasurement<FileMetric>;\n\ninterface ScanWithSccOptions {\n readonly cwd: string;\n readonly includePaths: readonly string[];\n readonly scanner: ResolvedFileMetricsScannerOptions;\n}\n\nexport function scanWithScc({ cwd, includePaths, scanner }: ScanWithSccOptions): SccScanResult {\n try {\n if (includePaths.length === 0) return { ok: true, measurements: [] };\n\n const batchPlan = planSccBatches(scanner.executable, SCC_BY_FILE_ARGUMENTS, includePaths);\n if (!batchPlan.ok) return { ok: false, error: batchPlan.error, reason: \"execution\" };\n\n const logicalScanResources = beginSccLogicalScanResources(process.hrtime.bigint());\n const measurements: SccMeasurement[] = [];\n\n for (const batch of batchPlan.batches) {\n const batchResult = scanSccBatch({ batch, cwd, logicalScanResources, scanner });\n if (!batchResult.ok) return batchResult;\n measurements.push(...batchResult.measurements);\n }\n\n return mergeSccBatchMeasurements(measurements);\n } catch (error: unknown) {\n return {\n ok: false,\n error: `scc adapter error: ${errorMessage(error)}`,\n reason: \"execution\"\n };\n }\n}\n\nfunction scanSccBatch({\n batch,\n cwd,\n logicalScanResources,\n scanner\n}: {\n readonly batch: readonly string[];\n readonly cwd: string;\n readonly logicalScanResources: SccLogicalScanResources;\n readonly scanner: ResolvedFileMetricsScannerOptions;\n}): SccScanResult {\n const remainingTimeoutMs = remainingSccBatchTimeoutMs(\n logicalScanResources,\n process.hrtime.bigint()\n );\n if (remainingTimeoutMs === null) return expiredSccDeadline();\n const remainingMaxBufferBytes = remainingSccBatchMaxBuffer(logicalScanResources);\n if (remainingMaxBufferBytes === null) return exhaustedSccOutputBudget();\n\n const commandResult = runProcessSync({\n args: [...SCC_BY_FILE_ARGUMENTS, ...batch],\n command: scanner.executable,\n cwd,\n maxBuffer: remainingMaxBufferBytes,\n timeout: remainingTimeoutMs\n });\n const processFailure = sccBatchProcessFailure(commandResult, logicalScanResources);\n if (processFailure !== null) return processFailure;\n return parseAcceptedSccBatch(commandResult.stdout, cwd, batch);\n}\n\nfunction expiredSccDeadline(): SccScanResult {\n return {\n ok: false,\n error: \"scc logical scan exceeded its shared timeout before the next batch\",\n reason: \"execution\"\n };\n}\n\nfunction exhaustedSccOutputBudget(): SccScanResult {\n return {\n ok: false,\n error: \"scc logical scan exhausted its cumulative output budget before the next batch\",\n reason: \"execution\"\n };\n}\n\nfunction sccBatchProcessFailure(\n commandResult: ProcessResult,\n logicalScanResources: SccLogicalScanResources\n): SccScanResult | null {\n if (!consumeSccProcessOutput(logicalScanResources, commandResult.stdout, commandResult.stderr)) {\n return {\n ok: false,\n error: \"scc logical scan exceeded its cumulative stdout or stderr output budget\",\n reason: \"execution\"\n };\n }\n if (commandResult.error) {\n return {\n ok: false,\n error: `scc process error: ${commandResult.error.message}`,\n reason: \"execution\"\n };\n }\n if (commandResult.status === 0) return null;\n\n const output = commandResult.stderr.trim() || commandResult.stdout.trim() || \"no output\";\n const termination =\n commandResult.status === null\n ? `signal ${commandResult.signal ?? \"unknown\"}`\n : `exit ${commandResult.status}`;\n return { ok: false, error: `scc ${termination}: ${output}`, reason: \"execution\" };\n}\n\nfunction parseAcceptedSccBatch(\n stdout: string,\n cwd: string,\n batch: readonly string[]\n): SccScanResult {\n const parsed = parseSccCSV(stdout, cwd);\n if (!parsed.ok) return parsed;\n const acceptedMeasurements = acceptExactInputMeasurements(parsed.measurements, batch);\n return acceptedMeasurements.ok\n ? parsed\n : { ok: false, error: acceptedMeasurements.error, reason: \"invalid-result\" };\n}\n\nfunction mergeSccBatchMeasurements(measurements: readonly SccMeasurement[]): SccScanResult {\n const measuredPaths = new Set<string>();\n for (const measurement of measurements) {\n if (measuredPaths.has(measurement.payload.path)) {\n return {\n ok: false,\n error: `scc returned duplicate measurement path ${JSON.stringify(measurement.payload.path)}`,\n reason: \"invalid-result\"\n };\n }\n measuredPaths.add(measurement.payload.path);\n }\n return {\n ok: true,\n measurements: [...measurements].sort((left, right) =>\n compareText(left.payload.path, right.payload.path)\n )\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|