@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-cache-options.mjs","sourceRoot":"","sources":["../../../src/package-checks/local-cache-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAO3C,MAAM,UAAU,gCAAgC,CAAC,KAAc;IAC7D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,uBAAuB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,CAAC,CAAC;IACpD,IACE,uBAAuB,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAEnC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,EAAE,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3E,OAAO,CACL,OAAO,EAAE,OAAO,KAAK,IAAI;QACzB,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QACrC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAC9B,CAAC;AACJ,CAAC","sourcesContent":["import { isAbsolute } from \"node:path\";\n\nimport {\n hasExactPlainRecordKeys,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../data-boundary/closed-values.ts\";\n\n/** Shared closed grammar for an explicitly owned, deletable local cache directory. */\nexport type LocalCacheOptions =\n | Readonly<{ readonly enabled: false }>\n | Readonly<{ readonly enabled: true; readonly directory: string }>;\n\nexport function resolveOptionalLocalCacheOptions(value: unknown): LocalCacheOptions | undefined {\n if (value === undefined) return Object.freeze({ enabled: false as const });\n const cache = snapshotClosedRecord(value);\n if (cache === undefined) return undefined;\n if (hasExactPlainRecordKeys(cache, [\"enabled\"]) && cache.enabled === false)\n return Object.freeze({ enabled: false as const });\n if (\n hasExactPlainRecordKeys(cache, [\"enabled\", \"directory\"]) &&\n cache.enabled === true &&\n typeof cache.directory === \"string\"\n )\n return Object.freeze({ enabled: true as const, directory: cache.directory });\n return undefined;\n}\n\nexport function validLocalCacheOptions(value: unknown): value is LocalCacheOptions {\n const disabled = snapshotExactClosedRecord(value, [\"enabled\"]);\n if (disabled?.enabled === false) return true;\n const enabled = snapshotExactClosedRecord(value, [\"enabled\", \"directory\"]);\n return (\n enabled?.enabled === true &&\n typeof enabled.directory === \"string\" &&\n enabled.directory.length > 0 &&\n !enabled.directory.includes(\"\\0\") &&\n isAbsolute(enabled.directory)\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/final-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport {\n exactFinalDataRecord,\n finalDataArray,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\nconst EMPTY_EXCEEDED: readonly [] = Object.freeze([]);\n\nconst FULL_COMMIT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;\nconst REMINDER_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\n/** 单条维护提醒无法测量时使用的稳定 reason code。 */\nexport const MAINTENANCE_REMINDER_UNAVAILABLE_REASON = Object.freeze({\n baseCommitUnavailable: \"base-commit-unavailable\",\n baseNotFirstParentAncestor: \"base-not-first-parent-ancestor\",\n firstParentHistoryInvalid: \"first-parent-history-invalid\",\n firstParentHistoryUnavailable: \"first-parent-history-unavailable\",\n headInvalid: \"head-invalid\",\n headUnavailable: \"head-unavailable\",\n numstatInvalid: \"numstat-invalid\",\n numstatUnavailable: \"numstat-unavailable\"\n} as const);\n\nexport type MaintenanceReminderMode = \"advisory\" | \"enforcing\";\n\n/** 单条维护提醒无法测量时保留在 final data 中的稳定 reason。 */\nexport type MaintenanceReminderUnavailableReason =\n (typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON)[keyof typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON];\n\nconst MAINTENANCE_REMINDER_UNAVAILABLE_REASONS: readonly MaintenanceReminderUnavailableReason[] =\n Object.freeze(Object.values(MAINTENANCE_REMINDER_UNAVAILABLE_REASON));\n\n/** 判断 unknown value 是否为维护提醒的稳定局部 ID。 */\nexport function isMaintenanceReminderId(value: unknown): value is string {\n return typeof value === \"string\" && REMINDER_ID.test(value);\n}\n\n/** 判断 unknown value 是否为 Git 的完整 SHA-1 或 SHA-256 commit ID。 */\nexport function isMaintenanceCommitId(value: unknown): value is string {\n return typeof value === \"string\" && FULL_COMMIT_ID.test(value);\n}\n\nexport type MeasuredMaintenanceReminderAssessment = Readonly<{\n readonly assessment: \"clear\" | \"due\";\n readonly baseCommit: string;\n readonly changedLines: number;\n readonly commitCount: number;\n readonly exceeded: readonly (\"commits\" | \"changed-lines\")[];\n readonly headCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n}>;\n\nexport type UnavailableMaintenanceReminderAssessment = Readonly<{\n readonly assessment: \"unavailable\";\n readonly baseCommit: string;\n readonly changedLines: null;\n readonly commitCount: null;\n readonly exceeded: readonly [];\n readonly headCommit: string | null;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n readonly reason: MaintenanceReminderUnavailableReason;\n}>;\n\n/** 单条维护提醒的 measured 或 unavailable discriminated assessment。 */\nexport type MaintenanceReminderAssessment =\n | MeasuredMaintenanceReminderAssessment\n | UnavailableMaintenanceReminderAssessment;\n\n/** `maintenance-reminders` 在 passed/failed outcome 中发布的主数据。 */\nexport interface MaintenanceRemindersFinalData {\n readonly entries: readonly MaintenanceReminderAssessment[];\n}\n\n/** 验证 discriminated entry assessments 并脱离 canonical final data。 */\nexport function parseMaintenanceRemindersData(data: unknown): MaintenanceRemindersFinalData {\n const value = exactFinalDataRecord(data, [\"entries\"], \"maintenanceReminders\");\n const entries = finalDataArray(value.entries, \"maintenanceReminders\");\n const parsedEntries: MaintenanceReminderAssessment[] = [];\n const ids = new Set<string>();\n for (const entry of entries) {\n const parsed = parseAssessment(entry);\n if (ids.has(parsed.id)) throw invalidFinalData(\"maintenanceReminders\");\n ids.add(parsed.id);\n parsedEntries.push(parsed);\n }\n return Object.freeze({ entries: Object.freeze(parsedEntries) });\n}\n\nfunction parseAssessment(value: unknown): MaintenanceReminderAssessment {\n const record = assessmentRecord(value);\n const identity = assessmentIdentity(record);\n if (record.assessment === \"unavailable\") {\n return parseUnavailableAssessment(record, identity);\n }\n return parseMeasuredAssessment(record, identity);\n}\n\nfunction assessmentRecord(value: unknown): Readonly<Record<string, unknown>> {\n return exactFinalDataRecord(\n value,\n valueAssessment(value) === \"unavailable\"\n ? unavailableAssessmentKeys()\n : measuredAssessmentKeys(),\n \"maintenanceReminders\"\n );\n}\n\nfunction unavailableAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\",\n \"reason\"\n ];\n}\n\nfunction measuredAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\"\n ];\n}\n\nfunction assessmentIdentity(record: Readonly<Record<string, unknown>>): Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n}> {\n const id = isMaintenanceReminderId(record.id) ? record.id : undefined;\n const mode = record.mode === \"advisory\" || record.mode === \"enforcing\" ? record.mode : undefined;\n const baseCommit = isMaintenanceCommitId(record.baseCommit) ? record.baseCommit : undefined;\n if (id === undefined || mode === undefined || baseCommit === undefined)\n throw invalidFinalData(\"maintenanceReminders\");\n return { baseCommit, id, mode };\n}\n\nfunction parseMeasuredAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): MeasuredMaintenanceReminderAssessment {\n if (record.assessment !== \"clear\" && record.assessment !== \"due\")\n throw invalidFinalData(\"maintenanceReminders\");\n const commitCount = nonNegativeSafeInteger(record.commitCount);\n const changedLines = nonNegativeSafeInteger(record.changedLines);\n const headCommit = isMaintenanceCommitId(record.headCommit) ? record.headCommit : undefined;\n const exceeded = parseExceeded(record.exceeded);\n if (\n commitCount === undefined ||\n changedLines === undefined ||\n headCommit === undefined ||\n exceeded === undefined ||\n (record.assessment === \"clear\" ? exceeded.length !== 0 : exceeded.length === 0)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: record.assessment,\n baseCommit: identity.baseCommit,\n changedLines,\n commitCount,\n exceeded,\n headCommit,\n id: identity.id,\n mode: identity.mode\n });\n}\n\nfunction parseUnavailableAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): UnavailableMaintenanceReminderAssessment {\n const exceeded = finalDataArray(record.exceeded, \"maintenanceReminders\");\n const headCommit = record.headCommit;\n if (\n record.changedLines !== null ||\n record.commitCount !== null ||\n exceeded.length !== 0 ||\n (headCommit !== null && !isMaintenanceCommitId(headCommit)) ||\n !isUnavailableReason(record.reason)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: \"unavailable\",\n baseCommit: identity.baseCommit,\n changedLines: null,\n commitCount: null,\n exceeded: EMPTY_EXCEEDED,\n headCommit,\n id: identity.id,\n mode: identity.mode,\n reason: record.reason\n });\n}\n\nfunction valueAssessment(value: unknown): unknown {\n return snapshotClosedRecord(value)?.assessment;\n}\n\nfunction parseExceeded(value: unknown): readonly (\"commits\" | \"changed-lines\")[] | undefined {\n const entries = finalDataArray(value, \"maintenanceReminders\");\n const exceeded: (\"commits\" | \"changed-lines\")[] = [];\n const uniqueEntries = new Set<string>();\n for (const entry of entries) {\n if ((entry !== \"commits\" && entry !== \"changed-lines\") || uniqueEntries.has(entry)) {\n return undefined;\n }\n uniqueEntries.add(entry);\n exceeded.push(entry);\n }\n return Object.freeze(exceeded);\n}\n\nfunction isUnavailableReason(value: unknown): value is MaintenanceReminderUnavailableReason {\n return MAINTENANCE_REMINDER_UNAVAILABLE_REASONS.some((reason) => reason === value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/final-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport {\n exactFinalDataRecord,\n finalDataArray,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\nconst EMPTY_EXCEEDED: readonly [] = Object.freeze([]);\n\nconst FULL_COMMIT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;\nconst REMINDER_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\n/** 单条维护提醒无法测量时使用的稳定 reason code。 */\nexport const MAINTENANCE_REMINDER_UNAVAILABLE_REASON = Object.freeze({\n baseCommitUnavailable: \"base-commit-unavailable\",\n baseNotFirstParentAncestor: \"base-not-first-parent-ancestor\",\n firstParentHistoryInvalid: \"first-parent-history-invalid\",\n firstParentHistoryUnavailable: \"first-parent-history-unavailable\",\n headInvalid: \"head-invalid\",\n headUnavailable: \"head-unavailable\",\n numstatInvalid: \"numstat-invalid\",\n numstatUnavailable: \"numstat-unavailable\"\n} as const);\n\nexport type MaintenanceReminderMode = \"advisory\" | \"enforcing\";\n\n/** 单条维护提醒无法测量时保留在 final data 中的稳定 reason。 */\nexport type MaintenanceReminderUnavailableReason =\n (typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON)[keyof typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON];\n\nconst MAINTENANCE_REMINDER_UNAVAILABLE_REASONS: readonly MaintenanceReminderUnavailableReason[] =\n Object.freeze(Object.values(MAINTENANCE_REMINDER_UNAVAILABLE_REASON));\n\n/** 判断 unknown value 是否为维护提醒的稳定局部 ID。 */\nexport function isMaintenanceReminderId(value: unknown): value is string {\n return typeof value === \"string\" && REMINDER_ID.test(value);\n}\n\n/** 判断 unknown value 是否为 Git 的完整 SHA-1 或 SHA-256 commit ID。 */\nexport function isMaintenanceCommitId(value: unknown): value is string {\n return typeof value === \"string\" && FULL_COMMIT_ID.test(value);\n}\n\nexport type MeasuredMaintenanceReminderAssessment = Readonly<{\n /** 未超过任何阈值时为 clear;至少严格超过一个阈值时为 due。 */\n readonly assessment: \"clear\" | \"due\";\n /** reminder 配置锁定的完整基线 commit ID。 */\n readonly baseCommit: string;\n /** first-parent 区间内 numstat additions 与 deletions 的总和。 */\n readonly changedLines: number;\n /** 从 HEAD 沿 first-parent 到 baseCommit 的 commit 数。 */\n readonly commitCount: number;\n /** 实际值严格超过配置上限的维度;clear assessment 时为空。 */\n readonly exceeded: readonly (\"commits\" | \"changed-lines\")[];\n /** 测量时 HEAD 的完整 commit ID。 */\n readonly headCommit: string;\n /** Definition 中该 reminder 的稳定局部 ID。 */\n readonly id: string;\n /** due 或 unavailable 是否阻断 Check 的配置模式。 */\n readonly mode: MaintenanceReminderMode;\n}>;\n\nexport type UnavailableMaintenanceReminderAssessment = Readonly<{\n /** 表示该 reminder 未能形成计数测量。 */\n readonly assessment: \"unavailable\";\n /** reminder 配置锁定的完整基线 commit ID。 */\n readonly baseCommit: string;\n /** unavailable assessment 不发布 partial changed-line count。 */\n readonly changedLines: null;\n /** unavailable assessment 不发布 partial commit count。 */\n readonly commitCount: null;\n /** unavailable assessment 不判定任何阈值已超过。 */\n readonly exceeded: readonly [];\n /** 已成功解析时的完整 HEAD commit ID;解析 HEAD 失败时为 null。 */\n readonly headCommit: string | null;\n /** Definition 中该 reminder 的稳定局部 ID。 */\n readonly id: string;\n /** due 或 unavailable 是否阻断 Check 的配置模式。 */\n readonly mode: MaintenanceReminderMode;\n /** 未能测量的稳定机器可读原因。 */\n readonly reason: MaintenanceReminderUnavailableReason;\n}>;\n\n/** 单条维护提醒的 measured 或 unavailable discriminated assessment。 */\nexport type MaintenanceReminderAssessment =\n | MeasuredMaintenanceReminderAssessment\n | UnavailableMaintenanceReminderAssessment;\n\n/** `maintenance-reminders` 在 passed/failed outcome 中发布的主数据。 */\nexport interface MaintenanceRemindersFinalData {\n /** 每个已配置 reminder 的唯一 assessment,按 Definition 顺序发布。 */\n readonly entries: readonly MaintenanceReminderAssessment[];\n}\n\n/** 验证 discriminated entry assessments 并脱离 canonical final data。 */\nexport function parseMaintenanceRemindersData(data: unknown): MaintenanceRemindersFinalData {\n const value = exactFinalDataRecord(data, [\"entries\"], \"maintenanceReminders\");\n const entries = finalDataArray(value.entries, \"maintenanceReminders\");\n const parsedEntries: MaintenanceReminderAssessment[] = [];\n const ids = new Set<string>();\n for (const entry of entries) {\n const parsed = parseAssessment(entry);\n if (ids.has(parsed.id)) throw invalidFinalData(\"maintenanceReminders\");\n ids.add(parsed.id);\n parsedEntries.push(parsed);\n }\n return Object.freeze({ entries: Object.freeze(parsedEntries) });\n}\n\nfunction parseAssessment(value: unknown): MaintenanceReminderAssessment {\n const record = assessmentRecord(value);\n const identity = assessmentIdentity(record);\n if (record.assessment === \"unavailable\") {\n return parseUnavailableAssessment(record, identity);\n }\n return parseMeasuredAssessment(record, identity);\n}\n\nfunction assessmentRecord(value: unknown): Readonly<Record<string, unknown>> {\n return exactFinalDataRecord(\n value,\n valueAssessment(value) === \"unavailable\"\n ? unavailableAssessmentKeys()\n : measuredAssessmentKeys(),\n \"maintenanceReminders\"\n );\n}\n\nfunction unavailableAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\",\n \"reason\"\n ];\n}\n\nfunction measuredAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\"\n ];\n}\n\nfunction assessmentIdentity(record: Readonly<Record<string, unknown>>): Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n}> {\n const id = isMaintenanceReminderId(record.id) ? record.id : undefined;\n const mode = record.mode === \"advisory\" || record.mode === \"enforcing\" ? record.mode : undefined;\n const baseCommit = isMaintenanceCommitId(record.baseCommit) ? record.baseCommit : undefined;\n if (id === undefined || mode === undefined || baseCommit === undefined)\n throw invalidFinalData(\"maintenanceReminders\");\n return { baseCommit, id, mode };\n}\n\nfunction parseMeasuredAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): MeasuredMaintenanceReminderAssessment {\n if (record.assessment !== \"clear\" && record.assessment !== \"due\")\n throw invalidFinalData(\"maintenanceReminders\");\n const commitCount = nonNegativeSafeInteger(record.commitCount);\n const changedLines = nonNegativeSafeInteger(record.changedLines);\n const headCommit = isMaintenanceCommitId(record.headCommit) ? record.headCommit : undefined;\n const exceeded = parseExceeded(record.exceeded);\n if (\n commitCount === undefined ||\n changedLines === undefined ||\n headCommit === undefined ||\n exceeded === undefined ||\n (record.assessment === \"clear\" ? exceeded.length !== 0 : exceeded.length === 0)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: record.assessment,\n baseCommit: identity.baseCommit,\n changedLines,\n commitCount,\n exceeded,\n headCommit,\n id: identity.id,\n mode: identity.mode\n });\n}\n\nfunction parseUnavailableAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): UnavailableMaintenanceReminderAssessment {\n const exceeded = finalDataArray(record.exceeded, \"maintenanceReminders\");\n const headCommit = record.headCommit;\n if (\n record.changedLines !== null ||\n record.commitCount !== null ||\n exceeded.length !== 0 ||\n (headCommit !== null && !isMaintenanceCommitId(headCommit)) ||\n !isUnavailableReason(record.reason)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: \"unavailable\",\n baseCommit: identity.baseCommit,\n changedLines: null,\n commitCount: null,\n exceeded: EMPTY_EXCEEDED,\n headCommit,\n id: identity.id,\n mode: identity.mode,\n reason: record.reason\n });\n}\n\nfunction valueAssessment(value: unknown): unknown {\n return snapshotClosedRecord(value)?.assessment;\n}\n\nfunction parseExceeded(value: unknown): readonly (\"commits\" | \"changed-lines\")[] | undefined {\n const entries = finalDataArray(value, \"maintenanceReminders\");\n const exceeded: (\"commits\" | \"changed-lines\")[] = [];\n const uniqueEntries = new Set<string>();\n for (const entry of entries) {\n if ((entry !== \"commits\" && entry !== \"changed-lines\") || uniqueEntries.has(entry)) {\n return undefined;\n }\n uniqueEntries.add(entry);\n exceeded.push(entry);\n }\n return Object.freeze(exceeded);\n}\n\nfunction isUnavailableReason(value: unknown): value is MaintenanceReminderUnavailableReason {\n return MAINTENANCE_REMINDER_UNAVAILABLE_REASONS.some((reason) => reason === value);\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineCheck } from "../../check/check.mjs";
|
|
2
|
+
import { resolvePackageCheckAuthoringInput } from "../check-authoring.mjs";
|
|
2
3
|
import { MAINTENANCE_REMINDER_UNAVAILABLE_REASON, parseMaintenanceRemindersData } from "./final-data.mjs";
|
|
3
4
|
import { runGit } from "./maintenance-support.mjs";
|
|
4
5
|
import { exactRecord, validEntries, validGit } from "./options-validation.mjs";
|
|
@@ -11,51 +12,26 @@ const WHOLE_CHECK_UNAVAILABLE_CODE = Object.freeze({
|
|
|
11
12
|
executionCancelled: "execution-cancelled",
|
|
12
13
|
internalFailure: "maintenance-reminders-internal-failure"
|
|
13
14
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* },
|
|
30
|
-
* {
|
|
31
|
-
* id: "optimization-audit",
|
|
32
|
-
* baseCommit: "89abcdef0123456789abcdef0123456789abcdef",
|
|
33
|
-
* limits: { commits: 80 },
|
|
34
|
-
* message: "Audit optimization quality before this becomes older.",
|
|
35
|
-
* mode: "enforcing"
|
|
36
|
-
* }
|
|
37
|
-
* ]);
|
|
38
|
-
*
|
|
39
|
-
* const definition = defineConfig({
|
|
40
|
-
* checks: [maintenance],
|
|
41
|
-
* outputs: {
|
|
42
|
-
* diagnosticLogging: { enabled: false },
|
|
43
|
-
* machinePublication: { enabled: false },
|
|
44
|
-
* progressRendering: { enabled: false }
|
|
45
|
-
* }
|
|
46
|
-
* });
|
|
47
|
-
*
|
|
48
|
-
* const result = await run(definition);
|
|
49
|
-
* if (result.kind !== "completed") throw new Error(`Run did not complete: ${result.kind}`);
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export function maintenanceReminders(entries) {
|
|
15
|
+
export function maintenanceReminders(input) {
|
|
16
|
+
if (isMaintenanceReminderEntries(input)) {
|
|
17
|
+
return createMaintenanceRemindersCheck({
|
|
18
|
+
checkId: MAINTENANCE_REMINDERS_CHECK_ID,
|
|
19
|
+
displayName: "Maintenance reminders",
|
|
20
|
+
omitQuietPassedRow: true
|
|
21
|
+
}, input);
|
|
22
|
+
}
|
|
23
|
+
const resolvedInput = resolveMaintenanceRemindersInput(input);
|
|
24
|
+
if (resolvedInput === undefined) {
|
|
25
|
+
throw new TypeError("maintenanceReminders input must be entries or a closed { entries, checkId?, displayName?, enabledByFlags?, checks?, dependsOn?, observes?, maxParallel?, admissionPriority?, mutex?, resourceClaims?, omitQuietPassedRow? } object");
|
|
26
|
+
}
|
|
27
|
+
return createMaintenanceRemindersCheck(resolvedInput.definition, resolvedInput.entries);
|
|
28
|
+
}
|
|
29
|
+
function createMaintenanceRemindersCheck(definition, entries) {
|
|
53
30
|
return defineCheck({
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
execution: executeMaintenanceReminders,
|
|
31
|
+
...definition,
|
|
32
|
+
execute: executeMaintenanceReminders,
|
|
57
33
|
parseData: parseMaintenanceRemindersData,
|
|
58
|
-
|
|
34
|
+
prepare: (options) => validMaintenanceReminderOptions(options)
|
|
59
35
|
? { status: "success", preparedOptions: options }
|
|
60
36
|
: {
|
|
61
37
|
status: "failure",
|
|
@@ -72,9 +48,25 @@ export function maintenanceReminders(entries) {
|
|
|
72
48
|
options: {
|
|
73
49
|
entries,
|
|
74
50
|
git: { executable: "git" }
|
|
75
|
-
}
|
|
76
|
-
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function isMaintenanceReminderEntries(input) {
|
|
55
|
+
return Array.isArray(input);
|
|
56
|
+
}
|
|
57
|
+
function resolveMaintenanceRemindersInput(input) {
|
|
58
|
+
const resolved = resolvePackageCheckAuthoringInput(input, ["entries"], {
|
|
59
|
+
checkId: MAINTENANCE_REMINDERS_CHECK_ID,
|
|
60
|
+
displayName: "Maintenance reminders",
|
|
61
|
+
omitQuietPassedRow: true
|
|
77
62
|
});
|
|
63
|
+
if (resolved === undefined)
|
|
64
|
+
return undefined;
|
|
65
|
+
const entries = resolved.domainOptions.entries;
|
|
66
|
+
if (!Array.isArray(entries))
|
|
67
|
+
return undefined;
|
|
68
|
+
const reminderEntries = entries;
|
|
69
|
+
return Object.freeze({ definition: resolved.definition, entries: reminderEntries });
|
|
78
70
|
}
|
|
79
71
|
/** 在普通对象组合后验证完整的选项形状。 */
|
|
80
72
|
export function validMaintenanceReminderOptions(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-reminders.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-reminders.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineCheck,\n type CheckExecutionContext,\n type CheckResult,\n type TypedCheckWithOptions\n} from \"../../check/check.ts\";\nimport {\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON,\n parseMaintenanceRemindersData,\n type MaintenanceReminderAssessment,\n type MaintenanceRemindersFinalData\n} from \"./final-data.ts\";\nimport { runGit } from \"./maintenance-support.ts\";\nimport { exactRecord, validEntries, validGit } from \"./options-validation.ts\";\nimport {\n completedResult,\n reminderEvaluation,\n unavailableAssessment,\n unavailableHistory,\n unavailableResult\n} from \"./assessment-results.ts\";\nimport { measureReminder, parseCommitId, parseFirstParentHistory } from \"./measurement.ts\";\n\nexport const MAINTENANCE_REMINDERS_CHECK_ID = \"maintenance-reminders\";\n\nconst MAINTENANCE_REMINDER_OPTION_KEYS: readonly string[] = [\"entries\", \"git\"];\nconst WHOLE_CHECK_UNAVAILABLE_CODE = Object.freeze({\n invalidOptions: \"invalid-options\",\n executionCancelled: \"execution-cancelled\",\n internalFailure: \"maintenance-reminders-internal-failure\"\n});\n\n/** 一项维护提醒的项目政策输入。 */\nexport interface MaintenanceReminder {\n /** 在同一次构造函数调用中唯一的小写短横线命名局部标识。 */\n readonly id: string;\n /** 维护者在完成真实复核后手动推进的不可变完整 Git commit ID。 */\n readonly baseCommit: string;\n /** 超过任一已配置上限时触发该提醒。 */\n readonly limits: Readonly<{\n /** 从基线到 `HEAD` 的 `first-parent` 提交数上限。 */\n readonly commits?: number;\n /** 从基线到 `HEAD` 的累计 Git `numstat` 增加行加删除行上限。 */\n readonly changedLines?: number;\n }>;\n /** 到期或无法评估时展示给人的非空提醒正文。 */\n readonly message: string;\n /** 省略时只提示;`enforcing` 会使到期或不可测量的条目令所属 Check 失败。 */\n readonly mode?: \"advisory\" | \"enforcing\";\n}\n\n/** `maintenanceReminders` 生成且完全由 Check 持有的选项。 */\nexport interface MaintenanceReminderOptions {\n /** 保留作者声明顺序的提醒政策条目。 */\n readonly entries: readonly MaintenanceReminder[];\n /** 执行已提交历史测量的 Git 可执行文件。 */\n readonly git: Readonly<{\n readonly executable: string;\n }>;\n}\n\n/** `maintenance-reminders` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type MaintenanceRemindersUnavailableCode =\n (typeof WHOLE_CHECK_UNAVAILABLE_CODE)[keyof typeof WHOLE_CHECK_UNAVAILABLE_CODE];\nexport type FirstParentHistoryUnavailableReason =\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable;\n\nexport type ReminderEvaluation = Readonly<{\n readonly assessment: MaintenanceReminderAssessment;\n readonly message: string;\n}>;\n\nexport type GitCommandResult =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"failed\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly stdout: string }>;\n\nexport type FirstParentHistory = Readonly<{\n readonly commits: readonly string[];\n readonly headCommit: string;\n}>;\n\nexport type FirstParentHistoryResolution =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"unavailable\"; readonly reason: FirstParentHistoryUnavailableReason }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: FirstParentHistory }>;\n\nexport type ReminderMeasurement =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: ReminderEvaluation }>;\n\n/**\n * 创建一个固定 ID 的普通 Check,并在其局部最终数据中评估多条维护提醒。\n *\n * @remarks 构造函数只接收项目无法可靠推断的提醒政策;它补齐 Git 可执行文件、身份、可见性和直接执行逻辑。返回值仍是普通 Check,可按现有原生对象组合规则替换完整 `options` 分支。\n * @example 创建一个单一 Check 的维护提醒\n * ```ts\n * import { defineConfig, maintenanceReminders, run } from \"@zxyycom/vibe-check\";\n *\n * // 下列 baseCommit 都是示例占位值;实际使用时,每条都必须替换为该提醒最近一次真实复核对应的完整 commit ID。\n * const maintenance = maintenanceReminders([\n * {\n * id: \"documentation-review\",\n * baseCommit: \"0123456789abcdef0123456789abcdef01234567\",\n * limits: { commits: 40, changedLines: 2_000 },\n * message: \"Review the documentation structure after this body of change.\"\n * },\n * {\n * id: \"optimization-audit\",\n * baseCommit: \"89abcdef0123456789abcdef0123456789abcdef\",\n * limits: { commits: 80 },\n * message: \"Audit optimization quality before this becomes older.\",\n * mode: \"enforcing\"\n * }\n * ]);\n *\n * const definition = defineConfig({\n * checks: [maintenance],\n * outputs: {\n * diagnosticLogging: { enabled: false },\n * machinePublication: { enabled: false },\n * progressRendering: { enabled: false }\n * }\n * });\n *\n * const result = await run(definition);\n * if (result.kind !== \"completed\") throw new Error(`Run did not complete: ${result.kind}`);\n * ```\n */\nexport function maintenanceReminders(\n entries: readonly MaintenanceReminder[]\n): TypedCheckWithOptions<\n typeof MAINTENANCE_REMINDERS_CHECK_ID,\n MaintenanceReminderOptions,\n typeof parseMaintenanceRemindersData\n> {\n return defineCheck({\n checkId: MAINTENANCE_REMINDERS_CHECK_ID,\n displayName: \"Maintenance reminders\",\n execution: executeMaintenanceReminders,\n parseData: parseMaintenanceRemindersData,\n preflight: (options) =>\n validMaintenanceReminderOptions(options)\n ? { status: \"success\", preparedOptions: options }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options.\"\n }\n ]\n },\n options: {\n entries,\n git: { executable: \"git\" }\n },\n visibility: \"attention\"\n });\n}\n\n/** 在普通对象组合后验证完整的选项形状。 */\nexport function validMaintenanceReminderOptions(\n value: unknown\n): value is MaintenanceReminderOptions {\n const options = exactRecord(value, MAINTENANCE_REMINDER_OPTION_KEYS);\n return options !== undefined && validEntries(options.entries) && validGit(options.git);\n}\n\nasync function executeMaintenanceReminders(\n context: CheckExecutionContext<MaintenanceReminderOptions>\n): Promise<CheckResult<MaintenanceRemindersFinalData>> {\n if (!validMaintenanceReminderOptions(context.options))\n return unavailableResult(\"invalid-options\");\n if (context.signal.aborted)\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n\n try {\n const history = await resolveFirstParentHistory({\n executable: context.options.git.executable,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (history.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n\n if (history.kind === \"unavailable\") {\n return completedResult(\n context.options.entries.map((entry) =>\n reminderEvaluation(entry, unavailableAssessment(entry, null, history.reason))\n )\n );\n }\n\n const evaluations: ReminderEvaluation[] = [];\n for (const entry of context.options.entries) {\n const measurement = await measureReminder({\n entry,\n executable: context.options.git.executable,\n history: history.value,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (measurement.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n evaluations.push(measurement.value);\n }\n return completedResult(evaluations);\n } catch {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.internalFailure);\n }\n}\n\nasync function resolveFirstParentHistory(input: {\n readonly executable: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<FirstParentHistoryResolution> {\n const head = await runGit({\n args: [\"rev-parse\", \"--verify\", \"HEAD^{commit}\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (head.kind === \"cancelled\") return head;\n if (head.kind === \"failed\")\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable);\n\n const headCommit = parseCommitId(head.stdout);\n if (headCommit === null)\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid);\n\n const history = await runGit({\n args: [\"rev-list\", \"--first-parent\", \"HEAD\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (history.kind === \"cancelled\") return history;\n if (history.kind === \"failed\") {\n return unavailableHistory(\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n );\n }\n\n const firstParentHistory = parseFirstParentHistory(history.stdout, headCommit);\n if (firstParentHistory === undefined) {\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid);\n }\n\n return {\n kind: \"succeeded\",\n value: firstParentHistory\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"maintenance-reminders.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-reminders.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineCheck,\n type CheckExecutionContext,\n type CheckResult,\n type TypedCheckWithOptions\n} from \"../../check/check.ts\";\nimport {\n resolvePackageCheckAuthoringInput,\n type PackageCheckAuthoringOptions,\n type PackageCheckIdentityInput\n} from \"../check-authoring.ts\";\nimport {\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON,\n parseMaintenanceRemindersData,\n type MaintenanceReminderAssessment,\n type MaintenanceRemindersFinalData\n} from \"./final-data.ts\";\nimport { runGit } from \"./maintenance-support.ts\";\nimport { exactRecord, validEntries, validGit } from \"./options-validation.ts\";\nimport {\n completedResult,\n reminderEvaluation,\n unavailableAssessment,\n unavailableHistory,\n unavailableResult\n} from \"./assessment-results.ts\";\nimport { measureReminder, parseCommitId, parseFirstParentHistory } from \"./measurement.ts\";\n\nexport const MAINTENANCE_REMINDERS_CHECK_ID = \"maintenance-reminders\";\n\nconst MAINTENANCE_REMINDER_OPTION_KEYS: readonly string[] = [\"entries\", \"git\"];\nconst WHOLE_CHECK_UNAVAILABLE_CODE = Object.freeze({\n invalidOptions: \"invalid-options\",\n executionCancelled: \"execution-cancelled\",\n internalFailure: \"maintenance-reminders-internal-failure\"\n});\n\n/** 一项维护提醒的项目政策输入。 */\nexport interface MaintenanceReminder {\n /** 在同一次构造函数调用中唯一的小写短横线命名局部标识。 */\n readonly id: string;\n /** 维护者在完成真实复核后手动推进的不可变完整 Git commit ID。 */\n readonly baseCommit: string;\n /** 超过任一已配置上限时触发该提醒。 */\n readonly limits: Readonly<{\n /** 从基线到 `HEAD` 的 `first-parent` 提交数上限。 */\n readonly commits?: number;\n /** 从基线到 `HEAD` 的累计 Git `numstat` 增加行加删除行上限。 */\n readonly changedLines?: number;\n }>;\n /** 到期或无法评估时展示给人的非空提醒正文。 */\n readonly message: string;\n /** 省略时只提示;`enforcing` 会使到期或不可测量的条目令所属 Check 失败。 */\n readonly mode?: \"advisory\" | \"enforcing\";\n}\n\n/** `maintenanceReminders` 生成且完全由 Check 持有的选项。 */\nexport interface MaintenanceReminderOptions {\n /** 保留作者声明顺序的提醒政策条目。 */\n readonly entries: readonly MaintenanceReminder[];\n /** 执行已提交历史测量的 Git 可执行文件。 */\n readonly git: Readonly<{\n readonly executable: string;\n }>;\n}\n\n/** `maintenanceReminders` 的对象式构造输入,组合提醒政策与项目 Check 声明。 */\nexport interface MaintenanceRemindersInput<\n Id extends string = string\n> extends PackageCheckAuthoringOptions<Id> {\n /** 保留作者声明顺序的提醒政策条目。 */\n readonly entries: readonly MaintenanceReminder[];\n}\n\n/** `maintenance-reminders` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type MaintenanceRemindersUnavailableCode =\n (typeof WHOLE_CHECK_UNAVAILABLE_CODE)[keyof typeof WHOLE_CHECK_UNAVAILABLE_CODE];\nexport type FirstParentHistoryUnavailableReason =\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable;\n\nexport type ReminderEvaluation = Readonly<{\n readonly assessment: MaintenanceReminderAssessment;\n readonly message: string;\n}>;\n\nexport type GitCommandResult =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"failed\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly stdout: string }>;\n\nexport type FirstParentHistory = Readonly<{\n readonly commits: readonly string[];\n readonly headCommit: string;\n}>;\n\nexport type FirstParentHistoryResolution =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"unavailable\"; readonly reason: FirstParentHistoryUnavailableReason }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: FirstParentHistory }>;\n\nexport type ReminderMeasurement =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: ReminderEvaluation }>;\n\n/**\n * 创建一个维护提醒普通 Check,并在其局部最终数据中评估多条维护提醒。\n *\n * @remarks 传入 entries 数组会保留默认 identity;对象输入可同时声明项目 Check 字段。构造函数补齐 Git 可执行文件、默认展示和直接执行逻辑,返回值仍是普通 Check,可按现有原生对象组合规则替换完整 `options` 分支。\n * @example 创建一个单一 Check 的维护提醒\n * ```ts\n * import { defineConfig, maintenanceReminders, run } from \"@zxyycom/vibe-check\";\n *\n * // 下列 baseCommit 都是示例占位值;实际使用时,每条都必须替换为该提醒最近一次真实复核对应的完整 commit ID。\n * const maintenance = maintenanceReminders([\n * {\n * id: \"documentation-review\",\n * baseCommit: \"0123456789abcdef0123456789abcdef01234567\",\n * limits: { commits: 40, changedLines: 2_000 },\n * message: \"Review the documentation structure after this body of change.\"\n * },\n * {\n * id: \"optimization-audit\",\n * baseCommit: \"89abcdef0123456789abcdef0123456789abcdef\",\n * limits: { commits: 80 },\n * message: \"Audit optimization quality before this becomes older.\",\n * mode: \"enforcing\"\n * }\n * ]);\n *\n * const definition = defineConfig({\n * checks: [maintenance],\n * outputs: {\n * diagnosticLogging: { enabled: false },\n * machinePublication: { enabled: false },\n * progressRendering: { enabled: false }\n * }\n * });\n *\n * const result = await run(definition);\n * if (result.kind !== \"completed\") throw new Error(`Run did not complete: ${result.kind}`);\n * ```\n */\nexport function maintenanceReminders(\n entries: readonly MaintenanceReminder[]\n): TypedCheckWithOptions<\n typeof MAINTENANCE_REMINDERS_CHECK_ID,\n MaintenanceReminderOptions,\n typeof parseMaintenanceRemindersData\n>;\nexport function maintenanceReminders(\n input: MaintenanceRemindersInput<typeof MAINTENANCE_REMINDERS_CHECK_ID>\n): TypedCheckWithOptions<\n typeof MAINTENANCE_REMINDERS_CHECK_ID,\n MaintenanceReminderOptions,\n typeof parseMaintenanceRemindersData\n>;\nexport function maintenanceReminders<const Id extends string>(\n input: MaintenanceRemindersInput<Id> & PackageCheckIdentityInput<Id>\n): TypedCheckWithOptions<Id, MaintenanceReminderOptions, typeof parseMaintenanceRemindersData>;\nexport function maintenanceReminders(\n input: MaintenanceRemindersInput\n): TypedCheckWithOptions<string, MaintenanceReminderOptions, typeof parseMaintenanceRemindersData>;\nexport function maintenanceReminders(\n input: readonly MaintenanceReminder[] | MaintenanceRemindersInput\n): TypedCheckWithOptions<string, MaintenanceReminderOptions, typeof parseMaintenanceRemindersData> {\n if (isMaintenanceReminderEntries(input)) {\n return createMaintenanceRemindersCheck(\n {\n checkId: MAINTENANCE_REMINDERS_CHECK_ID,\n displayName: \"Maintenance reminders\",\n omitQuietPassedRow: true\n },\n input\n );\n }\n const resolvedInput = resolveMaintenanceRemindersInput(input);\n if (resolvedInput === undefined) {\n throw new TypeError(\n \"maintenanceReminders input must be entries or a closed { entries, checkId?, displayName?, enabledByFlags?, checks?, dependsOn?, observes?, maxParallel?, admissionPriority?, mutex?, resourceClaims?, omitQuietPassedRow? } object\"\n );\n }\n return createMaintenanceRemindersCheck(resolvedInput.definition, resolvedInput.entries);\n}\n\ntype PackageCheckDefinition<Id extends string> = NonNullable<\n ReturnType<typeof resolvePackageCheckAuthoringInput<Id>>\n>[\"definition\"];\n\nfunction createMaintenanceRemindersCheck<Id extends string>(\n definition: PackageCheckDefinition<Id>,\n entries: readonly MaintenanceReminder[]\n): TypedCheckWithOptions<Id, MaintenanceReminderOptions, typeof parseMaintenanceRemindersData> {\n return defineCheck({\n ...definition,\n execute: executeMaintenanceReminders,\n parseData: parseMaintenanceRemindersData,\n prepare: (options) =>\n validMaintenanceReminderOptions(options)\n ? { status: \"success\", preparedOptions: options }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options.\"\n }\n ]\n },\n options: {\n entries,\n git: { executable: \"git\" }\n }\n });\n}\n\nfunction isMaintenanceReminderEntries(\n input: readonly MaintenanceReminder[] | MaintenanceRemindersInput\n): input is readonly MaintenanceReminder[] {\n return Array.isArray(input);\n}\n\nfunction resolveMaintenanceRemindersInput<Id extends string>(\n input: MaintenanceRemindersInput<Id>\n):\n | Readonly<{\n readonly definition: PackageCheckDefinition<Id>;\n readonly entries: readonly MaintenanceReminder[];\n }>\n | undefined {\n const resolved = resolvePackageCheckAuthoringInput(input, [\"entries\"], {\n checkId: MAINTENANCE_REMINDERS_CHECK_ID,\n displayName: \"Maintenance reminders\",\n omitQuietPassedRow: true\n });\n if (resolved === undefined) return undefined;\n const entries = resolved.domainOptions.entries;\n if (!Array.isArray(entries)) return undefined;\n const reminderEntries: readonly MaintenanceReminder[] = entries;\n return Object.freeze({ definition: resolved.definition, entries: reminderEntries });\n}\n\n/** 在普通对象组合后验证完整的选项形状。 */\nexport function validMaintenanceReminderOptions(\n value: unknown\n): value is MaintenanceReminderOptions {\n const options = exactRecord(value, MAINTENANCE_REMINDER_OPTION_KEYS);\n return options !== undefined && validEntries(options.entries) && validGit(options.git);\n}\n\nasync function executeMaintenanceReminders(\n context: CheckExecutionContext<MaintenanceReminderOptions>\n): Promise<CheckResult<MaintenanceRemindersFinalData>> {\n if (!validMaintenanceReminderOptions(context.options))\n return unavailableResult(\"invalid-options\");\n if (context.signal.aborted)\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n\n try {\n const history = await resolveFirstParentHistory({\n executable: context.options.git.executable,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (history.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n\n if (history.kind === \"unavailable\") {\n return completedResult(\n context.options.entries.map((entry) =>\n reminderEvaluation(entry, unavailableAssessment(entry, null, history.reason))\n )\n );\n }\n\n const evaluations: ReminderEvaluation[] = [];\n for (const entry of context.options.entries) {\n const measurement = await measureReminder({\n entry,\n executable: context.options.git.executable,\n history: history.value,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (measurement.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n evaluations.push(measurement.value);\n }\n return completedResult(evaluations);\n } catch {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.internalFailure);\n }\n}\n\nasync function resolveFirstParentHistory(input: {\n readonly executable: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<FirstParentHistoryResolution> {\n const head = await runGit({\n args: [\"rev-parse\", \"--verify\", \"HEAD^{commit}\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (head.kind === \"cancelled\") return head;\n if (head.kind === \"failed\")\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable);\n\n const headCommit = parseCommitId(head.stdout);\n if (headCommit === null)\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid);\n\n const history = await runGit({\n args: [\"rev-list\", \"--first-parent\", \"HEAD\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (history.kind === \"cancelled\") return history;\n if (history.kind === \"failed\") {\n return unavailableHistory(\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n );\n }\n\n const firstParentHistory = parseFirstParentHistory(history.stdout, headCommit);\n if (firstParentHistory === undefined) {\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid);\n }\n\n return {\n kind: \"succeeded\",\n value: firstParentHistory\n };\n}\n"]}
|
|
@@ -41,7 +41,9 @@ export async function runGit(input) {
|
|
|
41
41
|
}
|
|
42
42
|
stdout += text;
|
|
43
43
|
});
|
|
44
|
-
child.once("error", () =>
|
|
44
|
+
child.once("error", () => {
|
|
45
|
+
settle(input.signal.aborted ? { kind: "cancelled" } : { kind: "failed" });
|
|
46
|
+
});
|
|
45
47
|
child.once("close", (status) => {
|
|
46
48
|
if (input.signal.aborted) {
|
|
47
49
|
settle({ kind: "cancelled" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-support.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAK5B;IACC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAEvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,KAA+B,CAAC;QAEpC,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAQ,EAAE;YAChD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;gBAC1C,GAAG,EAAE,KAAK,CAAC,WAAW;gBACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,WAAW,GAAG,oBAAoB,EAAE,CAAC;gBACvC,UAAU,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"maintenance-support.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-support.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\n\nimport type { GitCommandResult } from \"./maintenance-reminders.ts\";\n\nconst MAX_GIT_OUTPUT_BYTES = 64 * 1024 * 1024;\n\nexport async function runGit(input: {\n readonly args: readonly string[];\n readonly executable: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<GitCommandResult> {\n if (input.signal.aborted) return { kind: \"cancelled\" };\n\n return new Promise((resolve) => {\n let settled = false;\n let outputBytes = 0;\n let stdout = \"\";\n let overflowed = false;\n let child: ReturnType<typeof spawn>;\n\n const settle = (result: GitCommandResult): void => {\n if (settled) return;\n settled = true;\n input.signal.removeEventListener(\"abort\", abort);\n resolve(result);\n };\n const abort = (): void => {\n child.kill(\"SIGTERM\");\n };\n\n try {\n child = spawn(input.executable, input.args, {\n cwd: input.projectRoot,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n windowsHide: true\n });\n } catch {\n settle({ kind: \"failed\" });\n return;\n }\n\n input.signal.addEventListener(\"abort\", abort, { once: true });\n child.stdout?.on(\"data\", (chunk: Buffer | string) => {\n const text = String(chunk);\n outputBytes += Buffer.byteLength(text);\n if (outputBytes > MAX_GIT_OUTPUT_BYTES) {\n overflowed = true;\n child.kill(\"SIGTERM\");\n return;\n }\n stdout += text;\n });\n child.once(\"error\", () => {\n settle(input.signal.aborted ? { kind: \"cancelled\" } : { kind: \"failed\" });\n });\n child.once(\"close\", (status) => {\n if (input.signal.aborted) {\n settle({ kind: \"cancelled\" });\n } else if (overflowed || status !== 0) {\n settle({ kind: \"failed\" });\n } else {\n settle({ kind: \"succeeded\", stdout });\n }\n });\n });\n}\n"]}
|
|
@@ -1,41 +1,33 @@
|
|
|
1
1
|
import { defineCheck } from "../../check/check.mjs";
|
|
2
|
+
import { resolvePackageCheckAuthoringInput } from "../check-authoring.mjs";
|
|
2
3
|
import { MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION, executeMarkdownLinkValidation } from "./execution.mjs";
|
|
3
4
|
import { parseMarkdownLinkValidationData } from "./final-data.mjs";
|
|
4
5
|
import { resolveMarkdownLinkValidationOptions } from "./options-resolution.mjs";
|
|
5
6
|
import { validMarkdownLinkValidationOptions } from "./options-validation.mjs";
|
|
6
|
-
/**
|
|
7
|
-
* 使用可省略的 source、target 与 work-limit policy 构造离线 Markdown 引用 Check。
|
|
8
|
-
*
|
|
9
|
-
* @param options - 省略字段由 package 补齐;files 数组是完整替换值,limits fields 可分别省略。
|
|
10
|
-
* @returns 固定 `markdown-link-validation` identity、完整冻结 options、parser 与执行逻辑。
|
|
11
|
-
* @throws {TypeError} input 含未知字段、非法 target policy 或非法 work limit 时抛出。
|
|
12
|
-
* @example 离线 Markdown 本地链接完整性
|
|
13
|
-
* ```ts
|
|
14
|
-
* import { defineConfig, markdownLinkValidation, run } from "@zxyycom/vibe-check";
|
|
15
|
-
*
|
|
16
|
-
* const definition = defineConfig({
|
|
17
|
-
* checks: [markdownLinkValidation()],
|
|
18
|
-
* outputs: {
|
|
19
|
-
* diagnosticLogging: { enabled: false },
|
|
20
|
-
* machinePublication: { enabled: false },
|
|
21
|
-
* progressRendering: { enabled: false }
|
|
22
|
-
* }
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* const result = await run(definition);
|
|
26
|
-
* if (result.kind !== "completed") throw new Error(`Run did not complete: ${result.kind}`);
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
7
|
export function markdownLinkValidation(options = {}) {
|
|
30
|
-
const
|
|
8
|
+
const input = resolvePackageCheckAuthoringInput(options, [
|
|
9
|
+
"files",
|
|
10
|
+
"findingPolicy",
|
|
11
|
+
"requireExistingTargets",
|
|
12
|
+
"validateSameDocumentAnchors",
|
|
13
|
+
"validateCrossDocumentAnchors",
|
|
14
|
+
"rootExternalTargetMode",
|
|
15
|
+
"requireNonEmptyDirectories",
|
|
16
|
+
"limits",
|
|
17
|
+
"cache"
|
|
18
|
+
], MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION);
|
|
19
|
+
if (input === undefined) {
|
|
20
|
+
throw new TypeError("markdownLinkValidation options must match the documented closed policy");
|
|
21
|
+
}
|
|
22
|
+
const resolvedOptions = resolveMarkdownLinkValidationOptions(input.domainOptions);
|
|
31
23
|
if (resolvedOptions === undefined) {
|
|
32
24
|
throw new TypeError("markdownLinkValidation options must match the documented closed policy");
|
|
33
25
|
}
|
|
34
26
|
return defineCheck({
|
|
35
|
-
...
|
|
36
|
-
|
|
27
|
+
...input.definition,
|
|
28
|
+
execute: executeMarkdownLinkValidation,
|
|
37
29
|
parseData: parseMarkdownLinkValidationData,
|
|
38
|
-
|
|
30
|
+
prepare: (preparedOptions) => validMarkdownLinkValidationOptions(preparedOptions)
|
|
39
31
|
? { status: "success", preparedOptions }
|
|
40
32
|
: {
|
|
41
33
|
status: "failure",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/markdown-link-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAKlE,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/markdown-link-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,iCAAiC,EAElC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAKlE,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAoD7E,MAAM,UAAU,sBAAsB,CACpC,OAAO,GAAkC,EAAE;IAM3C,MAAM,KAAK,GAAG,iCAAiC,CAC7C,OAAO,EACP;QACE,OAAO;QACP,eAAe;QACf,wBAAwB;QACxB,6BAA6B;QAC7B,8BAA8B;QAC9B,wBAAwB;QACxB,4BAA4B;QAC5B,QAAQ;QACR,OAAO;KACR,EACD,yCAAyC,CAC1C,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,wEAAwE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,eAAe,GAAG,oCAAoC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,wEAAwE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,UAAU;QACnB,OAAO,EAAE,6BAA6B;QACtC,SAAS,EAAE,+BAA+B;QAC1C,OAAO,EAAE,CAAC,eAAe,EAAE,EAAE,CAC3B,kCAAkC,CAAC,eAAe,CAAC;YACjD,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YACxC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,+IAA+I;qBAClJ;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport {\n resolvePackageCheckAuthoringInput,\n type PackageCheckIdentityInput\n} from \"../check-authoring.ts\";\nimport {\n MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION,\n executeMarkdownLinkValidation\n} from \"./execution.ts\";\nimport { parseMarkdownLinkValidationData } from \"./final-data.ts\";\nimport type {\n MarkdownLinkValidationOptions,\n ResolvedMarkdownLinkValidationOptions\n} from \"./options.ts\";\nimport { resolveMarkdownLinkValidationOptions } from \"./options-resolution.ts\";\nimport { validMarkdownLinkValidationOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的 source、target 与 work-limit policy 构造离线 Markdown 引用 Check。\n *\n * @param options - 省略字段由 package 补齐;files 数组是完整替换值,limits fields 可分别省略;cache 省略时关闭,启用时由调用方提供 absolute、可信且可删除的 directory,其中本 Check 只维护一个 source-derived JSONL local state;调用方负责容量和删除,cache 不可用不改变 Check 结果。\n * @returns 固定 `markdown-link-validation` identity、完整冻结 options、parser 与执行逻辑。\n * @throws {TypeError} input 含未知字段、非法 target policy、cache branch/directory 或非法 work limit 时抛出。\n * @example 离线 Markdown 本地链接完整性\n * ```ts\n * import { defineConfig, markdownLinkValidation, run } from \"@zxyycom/vibe-check\";\n *\n * // 此调用方自有目录是 absolute、可删除的,并且可能保存 source-derived parse facts。\n * const cacheDirectory = new URL(\".vibe-check/markdown-link-parse-cache\", import.meta.url).pathname;\n * const definition = defineConfig({\n * checks: [\n * markdownLinkValidation({\n * cache: { enabled: true, directory: cacheDirectory }\n * })\n * ],\n * outputs: {\n * diagnosticLogging: { enabled: false },\n * machinePublication: { enabled: false },\n * progressRendering: { enabled: false }\n * }\n * });\n *\n * const result = await run(definition);\n * if (result.kind !== \"completed\") throw new Error(`Run did not complete: ${result.kind}`);\n * ```\n */\nexport function markdownLinkValidation(\n options?: MarkdownLinkValidationOptions<\"markdown-link-validation\">\n): TypedCheckWithOptions<\n \"markdown-link-validation\",\n ResolvedMarkdownLinkValidationOptions,\n typeof parseMarkdownLinkValidationData\n>;\nexport function markdownLinkValidation<const Id extends string>(\n options: MarkdownLinkValidationOptions<Id> & PackageCheckIdentityInput<Id>\n): TypedCheckWithOptions<\n Id,\n ResolvedMarkdownLinkValidationOptions,\n typeof parseMarkdownLinkValidationData\n>;\nexport function markdownLinkValidation(\n options: MarkdownLinkValidationOptions\n): TypedCheckWithOptions<\n string,\n ResolvedMarkdownLinkValidationOptions,\n typeof parseMarkdownLinkValidationData\n>;\nexport function markdownLinkValidation(\n options: MarkdownLinkValidationOptions = {}\n): TypedCheckWithOptions<\n string,\n ResolvedMarkdownLinkValidationOptions,\n typeof parseMarkdownLinkValidationData\n> {\n const input = resolvePackageCheckAuthoringInput(\n options,\n [\n \"files\",\n \"findingPolicy\",\n \"requireExistingTargets\",\n \"validateSameDocumentAnchors\",\n \"validateCrossDocumentAnchors\",\n \"rootExternalTargetMode\",\n \"requireNonEmptyDirectories\",\n \"limits\",\n \"cache\"\n ],\n MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION\n );\n if (input === undefined) {\n throw new TypeError(\"markdownLinkValidation options must match the documented closed policy\");\n }\n const resolvedOptions = resolveMarkdownLinkValidationOptions(input.domainOptions);\n if (resolvedOptions === undefined) {\n throw new TypeError(\"markdownLinkValidation options must match the documented closed policy\");\n }\n return defineCheck({\n ...input.definition,\n execute: executeMarkdownLinkValidation,\n parseData: parseMarkdownLinkValidationData,\n prepare: (preparedOptions) =>\n validMarkdownLinkValidationOptions(preparedOptions)\n ? { status: \"success\", preparedOptions }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"markdownLinkValidation options are invalid; recreate the Check with markdownLinkValidation(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { collectProjectFiles } from "../project-files/collection.mjs";
|
|
3
3
|
import { partitionProjectFilesByEligibility } from "../project-files/input-eligibility.mjs";
|
|
4
|
+
import { appendCheckMessages } from "../../package-tools/finding-presentation/finding-presentation.mjs";
|
|
4
5
|
import { createMarkdownLocalResolver } from "./local-resolver.mjs";
|
|
6
|
+
import { markdownFindingMessages } from "./finding-messages.mjs";
|
|
5
7
|
import { buildMarkdownInputRejectedRecord, buildMarkdownLinkRecordCandidate } from "./records.mjs";
|
|
6
8
|
import { settledMarkdownTraversalResult } from "./traversal-result.mjs";
|
|
9
|
+
import { markdownLinkUnavailableMessage } from "./unavailable-reasons.mjs";
|
|
7
10
|
import { validMarkdownLinkValidationOptions } from "./options-validation.mjs";
|
|
8
11
|
export const MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION = {
|
|
9
12
|
checkId: "markdown-link-validation",
|
|
@@ -16,25 +19,35 @@ export async function executeMarkdownLinkValidation(context) {
|
|
|
16
19
|
const prepared = await prepareMarkdownTraversal(context);
|
|
17
20
|
if (prepared.kind === "result")
|
|
18
21
|
return prepared.result;
|
|
19
|
-
const {
|
|
22
|
+
const { rejectedPaths, traversal, resolver } = prepared;
|
|
20
23
|
for (const candidate of traversal.candidates) {
|
|
21
24
|
context.records.report({ id: candidate.id }, candidate.data);
|
|
22
25
|
}
|
|
23
|
-
return settledMarkdownTraversalResult({
|
|
26
|
+
return appendCheckMessages(settledMarkdownTraversalResult({
|
|
24
27
|
findingCount: traversal.candidates.length,
|
|
25
28
|
findingPolicy: context.options.findingPolicy,
|
|
26
29
|
occurrenceCount: traversal.occurrenceCount,
|
|
27
|
-
rejectedInputCount,
|
|
30
|
+
rejectedInputCount: rejectedPaths.length,
|
|
28
31
|
sourceFileCount: traversal.sourceFileCount,
|
|
29
32
|
targetReadCount: resolver.targetReadCount
|
|
30
|
-
});
|
|
33
|
+
}), markdownFindingMessages(traversal.candidates, rejectedPaths, context.options.findingPolicy === "blocking"));
|
|
31
34
|
}
|
|
32
35
|
async function prepareMarkdownTraversal(context) {
|
|
33
36
|
if (context.signal.aborted)
|
|
34
37
|
return result(unavailable("cancelled"));
|
|
35
|
-
const created = await createMarkdownLocalResolver(context.project.root, context.options.limits.maxTargetReads);
|
|
38
|
+
const created = await createMarkdownLocalResolver(context.project.root, context.options.limits.maxTargetReads, context.options.cache, context.signal);
|
|
36
39
|
if (!created.ok)
|
|
37
40
|
return result(unavailable(created.reason));
|
|
41
|
+
let prepared;
|
|
42
|
+
try {
|
|
43
|
+
prepared = await prepareCreatedMarkdownTraversal(context, created.resolver);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await created.resolver.finalize();
|
|
47
|
+
}
|
|
48
|
+
return context.signal.aborted ? result(unavailable("cancelled")) : prepared;
|
|
49
|
+
}
|
|
50
|
+
async function prepareCreatedMarkdownTraversal(context, resolver) {
|
|
38
51
|
if (context.signal.aborted)
|
|
39
52
|
return result(unavailable("cancelled"));
|
|
40
53
|
const sourceDiscovery = discoverMarkdownSourcePaths(context.project, context.options.files);
|
|
@@ -46,7 +59,7 @@ async function prepareMarkdownTraversal(context) {
|
|
|
46
59
|
return result(unavailable("cancelled"));
|
|
47
60
|
reportRejectedInputs(context, sourceDiscovery.rejectedPaths);
|
|
48
61
|
const traversal = await traverseMarkdownSources(sourceDiscovery.sourcePaths, {
|
|
49
|
-
resolver
|
|
62
|
+
resolver,
|
|
50
63
|
options: context.options,
|
|
51
64
|
signal: context.signal
|
|
52
65
|
});
|
|
@@ -58,8 +71,8 @@ async function prepareMarkdownTraversal(context) {
|
|
|
58
71
|
}
|
|
59
72
|
return Object.freeze({
|
|
60
73
|
kind: "traversal",
|
|
61
|
-
|
|
62
|
-
resolver
|
|
74
|
+
rejectedPaths: sourceDiscovery.rejectedPaths,
|
|
75
|
+
resolver,
|
|
63
76
|
traversal
|
|
64
77
|
});
|
|
65
78
|
}
|
|
@@ -112,6 +125,7 @@ async function traverseMarkdownSources(sourcePaths, run) {
|
|
|
112
125
|
const candidates = [];
|
|
113
126
|
let occurrenceCount = 0;
|
|
114
127
|
let sourceFileCount = 0;
|
|
128
|
+
// The Run's shared Scheduler owns cross-Check concurrency; this Check processes sources strictly in order.
|
|
115
129
|
for (const sourcePath of sourcePaths) {
|
|
116
130
|
const sourceValidation = await validateMarkdownSource(sourcePath, occurrenceCount, run);
|
|
117
131
|
if (sourceValidation.kind === "unavailable")
|
|
@@ -177,23 +191,12 @@ function unavailable(reason) {
|
|
|
177
191
|
status: "unavailable",
|
|
178
192
|
reason: { code: reason },
|
|
179
193
|
messages: Object.freeze([
|
|
180
|
-
Object.freeze({
|
|
194
|
+
Object.freeze({
|
|
195
|
+
code: reason,
|
|
196
|
+
level: "error",
|
|
197
|
+
message: markdownLinkUnavailableMessage(reason)
|
|
198
|
+
})
|
|
181
199
|
])
|
|
182
200
|
});
|
|
183
201
|
}
|
|
184
|
-
function unavailableMessage(reason) {
|
|
185
|
-
return UNAVAILABLE_MESSAGES[reason];
|
|
186
|
-
}
|
|
187
|
-
const UNAVAILABLE_MESSAGES = {
|
|
188
|
-
"invalid-options": "markdownLinkValidation options are invalid; recreate the Check with markdownLinkValidation(options) or restore its complete resolved options.",
|
|
189
|
-
"project-root-unavailable": "Markdown link validation could not resolve the project root; check that the path exists and is accessible.",
|
|
190
|
-
"source-unavailable": "A selected Markdown source could not be collected, read, decoded, or contained safely; check the file source and permissions.",
|
|
191
|
-
"source-too-large": "A selected Markdown source exceeds maxMarkdownBytes; narrow the file selection or raise the bounded limit.",
|
|
192
|
-
"markdown-parse-failed": "A selected Markdown source could not be parsed completely; inspect that document's Markdown syntax and encoding.",
|
|
193
|
-
"invalid-local-destination": "A local Markdown destination could not be parsed safely; inspect the affected link destination syntax.",
|
|
194
|
-
"target-unavailable": "A local Markdown target could not be probed or read safely; check the target path, permissions, size, and encoding.",
|
|
195
|
-
"occurrence-limit-exceeded": "Markdown link validation exceeded maxOccurrences; narrow the source selection or raise the bounded limit.",
|
|
196
|
-
"target-read-limit-exceeded": "Markdown link validation exceeded maxTargetReads; narrow the source selection or raise the bounded limit.",
|
|
197
|
-
cancelled: "Markdown link validation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate."
|
|
198
|
-
};
|
|
199
202
|
//# sourceMappingURL=execution.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/markdown-link-validation/execution.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EACL,2BAA2B,EAI5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAEjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAE7E,MAAM,CAAC,MAAM,yCAAyC,GAAG;IACvD,OAAO,EAAE,0BAA0B;IACnC,WAAW,EAAE,0BAA0B;CAC/B,CAAC;AAgDX,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAqE;IAErE,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;IACvD,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAE7D,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,8BAA8B,CAAC;QACpC,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM;QACzC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,kBAAkB;QAClB,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,eAAe,EAAE,QAAQ,CAAC,eAAe;KAC1C,CAAC,CAAC;AACL,CAAC;AAcD,KAAK,UAAU,wBAAwB,CACrC,OAAqE;IAErE,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,EACpB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CACtC,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,2BAA2B,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5F,IAAI,eAAe,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,IAAI,eAAe,CAAC,iBAAiB,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,eAAe,CAAC,WAAW,EAAE;QAC3E,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,MAAM,CACX,0BAA0B,CACxB,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAC7B,eAAe,CAAC,aAAa,CAAC,MAAM,CACrC,CACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,MAAM,CACX,0BAA0B,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,kBAAkB,EAAE,eAAe,CAAC,aAAa,CAAC,MAAM;QACxD,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CACb,WAAyD;IAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,2BAA2B,CAClC,OAAgF,EAChF,KAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,kCAAkC,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;QAC1F,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,UAAmB;YACzB,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,iBAAiB,EAAE,aAAa,CAAC,MAAM;YACvC,WAAW,EAAE,SAAS,CAAC,aAAa;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAqE,EACrE,KAAwB;IAExB,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,gCAAgC,CAAC,YAAY,CAAC,CAAC;QAC9D,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,WAAyD,EACzD,kBAA0B;IAE1B,IAAI,kBAAkB,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,WAAW;QACd,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,GAAG,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC;gBACZ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,SAAkB;gBACzB,OAAO,EAAE,GAAG,kBAAkB,6KAA6K;aAC5M,CAAC;SACH,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA+C;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,WAA8B,EAC9B,GAA8B;IAE9B,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QACxF,IAAI,gBAAgB,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,gBAAgB,CAAC;QAErE,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChD,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC;QACnD,eAAe,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAmB;QACzB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,eAAe;QACf,eAAe;KAChB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,UAAkB,EAClB,2BAAmC,EACnC,GAA8B;IAE9B,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAClG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,IAAI,eAAe,GAAG,2BAA2B,CAAC;IAClD,KAAK,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1F,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAClE,eAAe,IAAI,CAAC,CAAC;QACrB,IAAI,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxD,OAAO,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5C,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,sBAAsB;YAC1D,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,sBAAsB;YAC1D,0BAA0B,EAAE,GAAG,CAAC,OAAO,CAAC,0BAA0B;YAClE,2BAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,2BAA2B;YACpE,4BAA4B,EAAE,GAAG,CAAC,OAAO,CAAC,4BAA4B;YACtE,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB;SACtD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,gCAAgC,CAChD,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,eAAe,EACf,UAAU,EACV,UAAU,CACX,CAAC;QACF,IAAI,SAAS,KAAK,SAAS;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAmB;QACzB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,eAAe;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,WAAW,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAClB,MAA+C;IAE/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAgB,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;SAC9F,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+C;IACzE,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,oBAAoB,GAAsE;IAC9F,iBAAiB,EACf,+IAA+I;IACjJ,0BAA0B,EACxB,4GAA4G;IAC9G,oBAAoB,EAClB,+HAA+H;IACjI,kBAAkB,EAChB,4GAA4G;IAC9G,uBAAuB,EACrB,kHAAkH;IACpH,2BAA2B,EACzB,wGAAwG;IAC1G,oBAAoB,EAClB,qHAAqH;IACvH,2BAA2B,EACzB,2GAA2G;IAC7G,4BAA4B,EAC1B,2GAA2G;IAC7G,SAAS,EACP,mJAAmJ;CACtJ,CAAC","sourcesContent":["import path from \"node:path\";\n\nimport type { ResolvedMarkdownLinkValidationOptions } from \"./options.ts\";\nimport type { CheckExecutionContext, CheckResult } from \"../../check/check.ts\";\nimport { collectProjectFiles } from \"../project-files/collection.ts\";\nimport type { ProjectFileSelection } from \"../project-files/configuration.ts\";\nimport { partitionProjectFilesByEligibility } from \"../project-files/input-eligibility.ts\";\nimport {\n createMarkdownLocalResolver,\n type MarkdownLocalResolutionReason,\n type MarkdownLocalResolver,\n type MarkdownSourceReadFailureReason\n} from \"./local-resolver.ts\";\nimport type { MarkdownLinkValidationFinalData } from \"./final-data.ts\";\nimport {\n buildMarkdownInputRejectedRecord,\n buildMarkdownLinkRecordCandidate,\n type MarkdownLinkRecordCandidate\n} from \"./records.ts\";\nimport { settledMarkdownTraversalResult } from \"./traversal-result.ts\";\nimport { validMarkdownLinkValidationOptions } from \"./options-validation.ts\";\n\nexport const MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION = {\n checkId: \"markdown-link-validation\",\n displayName: \"Markdown link validation\"\n} as const;\n\ninterface MarkdownLinkValidationRun {\n readonly options: ResolvedMarkdownLinkValidationOptions;\n readonly resolver: MarkdownLocalResolver;\n readonly signal: AbortSignal;\n}\n\n/** `markdown-link-validation` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type MarkdownLinkValidationUnavailableReason =\n | \"invalid-options\"\n | \"cancelled\"\n | \"occurrence-limit-exceeded\"\n | \"project-root-unavailable\"\n | MarkdownLocalResolutionReason\n | MarkdownSourceReadFailureReason;\n\ntype MarkdownLinkValidationUnavailable = Readonly<{\n readonly kind: \"unavailable\";\n readonly reason: MarkdownLinkValidationUnavailableReason;\n}>;\n\ntype MarkdownSourceDiscovery =\n | Readonly<{\n readonly kind: \"complete\";\n readonly rejectedPaths: readonly string[];\n readonly selectedPathCount: number;\n readonly sourcePaths: readonly string[];\n }>\n | MarkdownLinkValidationUnavailable;\n\ntype MarkdownSourceValidation =\n | Readonly<{\n readonly kind: \"complete\";\n readonly candidates: readonly MarkdownLinkRecordCandidate[];\n readonly occurrenceCount: number;\n }>\n | MarkdownLinkValidationUnavailable;\n\ntype MarkdownLinkTraversal =\n | Readonly<{\n readonly kind: \"complete\";\n readonly candidates: readonly MarkdownLinkRecordCandidate[];\n readonly occurrenceCount: number;\n readonly sourceFileCount: number;\n }>\n | MarkdownLinkValidationUnavailable;\n\n/** 验证本 Check 选中的 Markdown source 的离线本地链接完整性。 */\nexport async function executeMarkdownLinkValidation(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>\n): Promise<CheckResult<MarkdownLinkValidationFinalData>> {\n if (!validMarkdownLinkValidationOptions(context.options)) return unavailable(\"invalid-options\");\n const prepared = await prepareMarkdownTraversal(context);\n if (prepared.kind === \"result\") return prepared.result;\n const { rejectedInputCount, traversal, resolver } = prepared;\n\n for (const candidate of traversal.candidates) {\n context.records.report({ id: candidate.id }, candidate.data);\n }\n return settledMarkdownTraversalResult({\n findingCount: traversal.candidates.length,\n findingPolicy: context.options.findingPolicy,\n occurrenceCount: traversal.occurrenceCount,\n rejectedInputCount,\n sourceFileCount: traversal.sourceFileCount,\n targetReadCount: resolver.targetReadCount\n });\n}\n\ntype PreparedMarkdownTraversal =\n | Readonly<{\n readonly kind: \"result\";\n readonly result: CheckResult<MarkdownLinkValidationFinalData>;\n }>\n | Readonly<{\n readonly kind: \"traversal\";\n readonly rejectedInputCount: number;\n readonly resolver: MarkdownLocalResolver;\n readonly traversal: Extract<MarkdownLinkTraversal, { readonly kind: \"complete\" }>;\n }>;\n\nasync function prepareMarkdownTraversal(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>\n): Promise<PreparedMarkdownTraversal> {\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n const created = await createMarkdownLocalResolver(\n context.project.root,\n context.options.limits.maxTargetReads\n );\n if (!created.ok) return result(unavailable(created.reason));\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n const sourceDiscovery = discoverMarkdownSourcePaths(context.project, context.options.files);\n if (sourceDiscovery.kind === \"unavailable\") return result(unavailable(sourceDiscovery.reason));\n if (sourceDiscovery.selectedPathCount === 0) return result(noEligibleInput());\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n reportRejectedInputs(context, sourceDiscovery.rejectedPaths);\n const traversal = await traverseMarkdownSources(sourceDiscovery.sourcePaths, {\n resolver: created.resolver,\n options: context.options,\n signal: context.signal\n });\n if (traversal.kind === \"unavailable\") {\n return result(\n appendRejectedInputMessage(\n unavailable(traversal.reason),\n sourceDiscovery.rejectedPaths.length\n )\n );\n }\n if (context.signal.aborted) {\n return result(\n appendRejectedInputMessage(unavailable(\"cancelled\"), sourceDiscovery.rejectedPaths.length)\n );\n }\n return Object.freeze({\n kind: \"traversal\",\n rejectedInputCount: sourceDiscovery.rejectedPaths.length,\n resolver: created.resolver,\n traversal\n });\n}\n\nfunction result(\n checkResult: CheckResult<MarkdownLinkValidationFinalData>\n): PreparedMarkdownTraversal {\n return Object.freeze({ kind: \"result\", result: checkResult });\n}\n\nfunction noEligibleInput(): CheckResult<MarkdownLinkValidationFinalData> {\n return Object.freeze({ status: \"not-applicable\", reason: { code: \"no-eligible-input\" } });\n}\n\nfunction discoverMarkdownSourcePaths(\n project: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>[\"project\"],\n files: ProjectFileSelection\n): MarkdownSourceDiscovery {\n try {\n const selectedPaths = collectProjectFiles(project.root, files);\n const partition = partitionProjectFilesByEligibility(selectedPaths, isMarkdownSourcePath);\n return Object.freeze({\n kind: \"complete\" as const,\n rejectedPaths: partition.rejectedPaths,\n selectedPathCount: selectedPaths.length,\n sourcePaths: partition.acceptedPaths\n });\n } catch {\n return unavailableValidation(\"source-unavailable\");\n }\n}\n\nfunction reportRejectedInputs(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>,\n paths: readonly string[]\n): void {\n for (const selectedPath of paths) {\n const record = buildMarkdownInputRejectedRecord(selectedPath);\n context.records.report({ id: record.id }, record.data);\n }\n}\n\nfunction appendRejectedInputMessage(\n checkResult: CheckResult<MarkdownLinkValidationFinalData>,\n rejectedInputCount: number\n): CheckResult<MarkdownLinkValidationFinalData> {\n if (rejectedInputCount === 0) return checkResult;\n return Object.freeze({\n ...checkResult,\n messages: Object.freeze([\n ...(checkResult.messages ?? []),\n Object.freeze({\n code: \"input-rejected\",\n level: \"warning\" as const,\n message: `${rejectedInputCount} selected markdownLinkValidation input file(s) were rejected because only .md/.markdown paths are supported; inspect this Check's Records and narrow files.include/exclude.`\n })\n ])\n });\n}\n\nfunction unavailableValidation(\n reason: MarkdownLinkValidationUnavailableReason\n): MarkdownLinkValidationUnavailable {\n return Object.freeze({ kind: \"unavailable\", reason });\n}\n\nasync function traverseMarkdownSources(\n sourcePaths: readonly string[],\n run: MarkdownLinkValidationRun\n): Promise<MarkdownLinkTraversal> {\n const candidates: MarkdownLinkRecordCandidate[] = [];\n let occurrenceCount = 0;\n let sourceFileCount = 0;\n\n for (const sourcePath of sourcePaths) {\n const sourceValidation = await validateMarkdownSource(sourcePath, occurrenceCount, run);\n if (sourceValidation.kind === \"unavailable\") return sourceValidation;\n\n candidates.push(...sourceValidation.candidates);\n occurrenceCount = sourceValidation.occurrenceCount;\n sourceFileCount += 1;\n }\n\n return Object.freeze({\n kind: \"complete\" as const,\n candidates: Object.freeze(candidates),\n occurrenceCount,\n sourceFileCount\n });\n}\n\nasync function validateMarkdownSource(\n sourcePath: string,\n occurrenceCountBeforeSource: number,\n run: MarkdownLinkValidationRun\n): Promise<MarkdownSourceValidation> {\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n const sourceRead = await run.resolver.readSource(sourcePath, run.options.limits.maxMarkdownBytes);\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n if (!sourceRead.ok) return unavailableValidation(sourceRead.reason);\n\n const candidates: MarkdownLinkRecordCandidate[] = [];\n let occurrenceCount = occurrenceCountBeforeSource;\n for (const [occurrenceIndex, occurrence] of sourceRead.source.facts.occurrences.entries()) {\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n occurrenceCount += 1;\n if (occurrenceCount > run.options.limits.maxOccurrences) {\n return unavailableValidation(\"occurrence-limit-exceeded\");\n }\n\n const resolution = await run.resolver.resolve({\n source: sourceRead.source,\n rawDestination: occurrence.rawDestination,\n rootExternalTargetMode: run.options.rootExternalTargetMode,\n requireExistingTargets: run.options.requireExistingTargets,\n requireNonEmptyDirectories: run.options.requireNonEmptyDirectories,\n validateSameDocumentAnchors: run.options.validateSameDocumentAnchors,\n validateCrossDocumentAnchors: run.options.validateCrossDocumentAnchors,\n maxMarkdownBytes: run.options.limits.maxMarkdownBytes\n });\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n if (resolution.kind === \"unavailable\") return unavailableValidation(resolution.reason);\n const candidate = buildMarkdownLinkRecordCandidate(\n sourceRead.source.path,\n occurrenceIndex,\n occurrence,\n resolution\n );\n if (candidate !== undefined) candidates.push(candidate);\n }\n\n return Object.freeze({\n kind: \"complete\" as const,\n candidates: Object.freeze(candidates),\n occurrenceCount\n });\n}\n\nfunction isMarkdownSourcePath(filePath: string): boolean {\n const extension = path.extname(filePath).toLowerCase();\n return extension === \".md\" || extension === \".markdown\";\n}\n\nfunction unavailable(\n reason: MarkdownLinkValidationUnavailableReason\n): CheckResult<MarkdownLinkValidationFinalData> {\n return Object.freeze({\n status: \"unavailable\",\n reason: { code: reason },\n messages: Object.freeze([\n Object.freeze({ code: reason, level: \"error\" as const, message: unavailableMessage(reason) })\n ])\n });\n}\n\nfunction unavailableMessage(reason: MarkdownLinkValidationUnavailableReason): string {\n return UNAVAILABLE_MESSAGES[reason];\n}\n\nconst UNAVAILABLE_MESSAGES: Readonly<Record<MarkdownLinkValidationUnavailableReason, string>> = {\n \"invalid-options\":\n \"markdownLinkValidation options are invalid; recreate the Check with markdownLinkValidation(options) or restore its complete resolved options.\",\n \"project-root-unavailable\":\n \"Markdown link validation could not resolve the project root; check that the path exists and is accessible.\",\n \"source-unavailable\":\n \"A selected Markdown source could not be collected, read, decoded, or contained safely; check the file source and permissions.\",\n \"source-too-large\":\n \"A selected Markdown source exceeds maxMarkdownBytes; narrow the file selection or raise the bounded limit.\",\n \"markdown-parse-failed\":\n \"A selected Markdown source could not be parsed completely; inspect that document's Markdown syntax and encoding.\",\n \"invalid-local-destination\":\n \"A local Markdown destination could not be parsed safely; inspect the affected link destination syntax.\",\n \"target-unavailable\":\n \"A local Markdown target could not be probed or read safely; check the target path, permissions, size, and encoding.\",\n \"occurrence-limit-exceeded\":\n \"Markdown link validation exceeded maxOccurrences; narrow the source selection or raise the bounded limit.\",\n \"target-read-limit-exceeded\":\n \"Markdown link validation exceeded maxTargetReads; narrow the source selection or raise the bounded limit.\",\n cancelled:\n \"Markdown link validation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.\"\n};\n"]}
|
|
1
|
+
{"version":3,"file":"execution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/markdown-link-validation/execution.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\n\nimport type { ResolvedMarkdownLinkValidationOptions } from \"./options.ts\";\nimport type { CheckExecutionContext, CheckResult } from \"../../check/check.ts\";\nimport { collectProjectFiles } from \"../project-files/collection.ts\";\nimport type { ProjectFileSelection } from \"../project-files/configuration.ts\";\nimport { partitionProjectFilesByEligibility } from \"../project-files/input-eligibility.ts\";\nimport { appendCheckMessages } from \"../../package-tools/finding-presentation/finding-presentation.ts\";\nimport { createMarkdownLocalResolver, type MarkdownLocalResolver } from \"./local-resolver.ts\";\nimport type { MarkdownLinkValidationFinalData } from \"./final-data.ts\";\nimport { markdownFindingMessages } from \"./finding-messages.ts\";\nimport {\n buildMarkdownInputRejectedRecord,\n buildMarkdownLinkRecordCandidate,\n type MarkdownLinkRecordCandidate\n} from \"./records.ts\";\nimport { settledMarkdownTraversalResult } from \"./traversal-result.ts\";\nimport {\n markdownLinkUnavailableMessage,\n type MarkdownLinkValidationUnavailableReason\n} from \"./unavailable-reasons.ts\";\nimport { validMarkdownLinkValidationOptions } from \"./options-validation.ts\";\n\nexport type { MarkdownLinkValidationUnavailableReason } from \"./unavailable-reasons.ts\";\n\nexport const MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION = {\n checkId: \"markdown-link-validation\",\n displayName: \"Markdown link validation\"\n} as const;\n\ninterface MarkdownLinkValidationRun {\n readonly options: ResolvedMarkdownLinkValidationOptions;\n readonly resolver: MarkdownLocalResolver;\n readonly signal: AbortSignal;\n}\n\ntype MarkdownLinkValidationUnavailable = Readonly<{\n readonly kind: \"unavailable\";\n readonly reason: MarkdownLinkValidationUnavailableReason;\n}>;\n\ntype MarkdownSourceDiscovery =\n | Readonly<{\n readonly kind: \"complete\";\n readonly rejectedPaths: readonly string[];\n readonly selectedPathCount: number;\n readonly sourcePaths: readonly string[];\n }>\n | MarkdownLinkValidationUnavailable;\n\ntype MarkdownSourceValidation =\n | Readonly<{\n readonly kind: \"complete\";\n readonly candidates: readonly MarkdownLinkRecordCandidate[];\n readonly occurrenceCount: number;\n }>\n | MarkdownLinkValidationUnavailable;\n\ntype MarkdownLinkTraversal =\n | Readonly<{\n readonly kind: \"complete\";\n readonly candidates: readonly MarkdownLinkRecordCandidate[];\n readonly occurrenceCount: number;\n readonly sourceFileCount: number;\n }>\n | MarkdownLinkValidationUnavailable;\n\n/** 验证本 Check 选中的 Markdown source 的离线本地链接完整性。 */\nexport async function executeMarkdownLinkValidation(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>\n): Promise<CheckResult<MarkdownLinkValidationFinalData>> {\n if (!validMarkdownLinkValidationOptions(context.options)) return unavailable(\"invalid-options\");\n const prepared = await prepareMarkdownTraversal(context);\n if (prepared.kind === \"result\") return prepared.result;\n const { rejectedPaths, traversal, resolver } = prepared;\n\n for (const candidate of traversal.candidates) {\n context.records.report({ id: candidate.id }, candidate.data);\n }\n return appendCheckMessages(\n settledMarkdownTraversalResult({\n findingCount: traversal.candidates.length,\n findingPolicy: context.options.findingPolicy,\n occurrenceCount: traversal.occurrenceCount,\n rejectedInputCount: rejectedPaths.length,\n sourceFileCount: traversal.sourceFileCount,\n targetReadCount: resolver.targetReadCount\n }),\n markdownFindingMessages(\n traversal.candidates,\n rejectedPaths,\n context.options.findingPolicy === \"blocking\"\n )\n );\n}\n\ntype PreparedMarkdownTraversal =\n | Readonly<{\n readonly kind: \"result\";\n readonly result: CheckResult<MarkdownLinkValidationFinalData>;\n }>\n | Readonly<{\n readonly kind: \"traversal\";\n readonly rejectedPaths: readonly string[];\n readonly resolver: MarkdownLocalResolver;\n readonly traversal: Extract<MarkdownLinkTraversal, { readonly kind: \"complete\" }>;\n }>;\n\nasync function prepareMarkdownTraversal(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>\n): Promise<PreparedMarkdownTraversal> {\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n const created = await createMarkdownLocalResolver(\n context.project.root,\n context.options.limits.maxTargetReads,\n context.options.cache,\n context.signal\n );\n if (!created.ok) return result(unavailable(created.reason));\n let prepared: PreparedMarkdownTraversal;\n try {\n prepared = await prepareCreatedMarkdownTraversal(context, created.resolver);\n } finally {\n await created.resolver.finalize();\n }\n return context.signal.aborted ? result(unavailable(\"cancelled\")) : prepared;\n}\n\nasync function prepareCreatedMarkdownTraversal(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>,\n resolver: MarkdownLocalResolver\n): Promise<PreparedMarkdownTraversal> {\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n const sourceDiscovery = discoverMarkdownSourcePaths(context.project, context.options.files);\n if (sourceDiscovery.kind === \"unavailable\") return result(unavailable(sourceDiscovery.reason));\n if (sourceDiscovery.selectedPathCount === 0) return result(noEligibleInput());\n if (context.signal.aborted) return result(unavailable(\"cancelled\"));\n reportRejectedInputs(context, sourceDiscovery.rejectedPaths);\n const traversal = await traverseMarkdownSources(sourceDiscovery.sourcePaths, {\n resolver,\n options: context.options,\n signal: context.signal\n });\n if (traversal.kind === \"unavailable\") {\n return result(\n appendRejectedInputMessage(\n unavailable(traversal.reason),\n sourceDiscovery.rejectedPaths.length\n )\n );\n }\n if (context.signal.aborted) {\n return result(\n appendRejectedInputMessage(unavailable(\"cancelled\"), sourceDiscovery.rejectedPaths.length)\n );\n }\n return Object.freeze({\n kind: \"traversal\",\n rejectedPaths: sourceDiscovery.rejectedPaths,\n resolver,\n traversal\n });\n}\n\nfunction result(\n checkResult: CheckResult<MarkdownLinkValidationFinalData>\n): PreparedMarkdownTraversal {\n return Object.freeze({ kind: \"result\", result: checkResult });\n}\n\nfunction noEligibleInput(): CheckResult<MarkdownLinkValidationFinalData> {\n return Object.freeze({ status: \"not-applicable\", reason: { code: \"no-eligible-input\" } });\n}\n\nfunction discoverMarkdownSourcePaths(\n project: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>[\"project\"],\n files: ProjectFileSelection\n): MarkdownSourceDiscovery {\n try {\n const selectedPaths = collectProjectFiles(project.root, files);\n const partition = partitionProjectFilesByEligibility(selectedPaths, isMarkdownSourcePath);\n return Object.freeze({\n kind: \"complete\" as const,\n rejectedPaths: partition.rejectedPaths,\n selectedPathCount: selectedPaths.length,\n sourcePaths: partition.acceptedPaths\n });\n } catch {\n return unavailableValidation(\"source-unavailable\");\n }\n}\n\nfunction reportRejectedInputs(\n context: CheckExecutionContext<ResolvedMarkdownLinkValidationOptions>,\n paths: readonly string[]\n): void {\n for (const selectedPath of paths) {\n const record = buildMarkdownInputRejectedRecord(selectedPath);\n context.records.report({ id: record.id }, record.data);\n }\n}\n\nfunction appendRejectedInputMessage(\n checkResult: CheckResult<MarkdownLinkValidationFinalData>,\n rejectedInputCount: number\n): CheckResult<MarkdownLinkValidationFinalData> {\n if (rejectedInputCount === 0) return checkResult;\n return Object.freeze({\n ...checkResult,\n messages: Object.freeze([\n ...(checkResult.messages ?? []),\n Object.freeze({\n code: \"input-rejected\",\n level: \"warning\" as const,\n message: `${rejectedInputCount} selected markdownLinkValidation input file(s) were rejected because only .md/.markdown paths are supported; inspect this Check's Records and narrow files.include/exclude.`\n })\n ])\n });\n}\n\nfunction unavailableValidation(\n reason: MarkdownLinkValidationUnavailableReason\n): MarkdownLinkValidationUnavailable {\n return Object.freeze({ kind: \"unavailable\", reason });\n}\n\nasync function traverseMarkdownSources(\n sourcePaths: readonly string[],\n run: MarkdownLinkValidationRun\n): Promise<MarkdownLinkTraversal> {\n const candidates: MarkdownLinkRecordCandidate[] = [];\n let occurrenceCount = 0;\n let sourceFileCount = 0;\n\n // The Run's shared Scheduler owns cross-Check concurrency; this Check processes sources strictly in order.\n for (const sourcePath of sourcePaths) {\n const sourceValidation = await validateMarkdownSource(sourcePath, occurrenceCount, run);\n if (sourceValidation.kind === \"unavailable\") return sourceValidation;\n\n candidates.push(...sourceValidation.candidates);\n occurrenceCount = sourceValidation.occurrenceCount;\n sourceFileCount += 1;\n }\n\n return Object.freeze({\n kind: \"complete\" as const,\n candidates: Object.freeze(candidates),\n occurrenceCount,\n sourceFileCount\n });\n}\n\nasync function validateMarkdownSource(\n sourcePath: string,\n occurrenceCountBeforeSource: number,\n run: MarkdownLinkValidationRun\n): Promise<MarkdownSourceValidation> {\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n const sourceRead = await run.resolver.readSource(sourcePath, run.options.limits.maxMarkdownBytes);\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n if (!sourceRead.ok) return unavailableValidation(sourceRead.reason);\n\n const candidates: MarkdownLinkRecordCandidate[] = [];\n let occurrenceCount = occurrenceCountBeforeSource;\n for (const [occurrenceIndex, occurrence] of sourceRead.source.facts.occurrences.entries()) {\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n occurrenceCount += 1;\n if (occurrenceCount > run.options.limits.maxOccurrences) {\n return unavailableValidation(\"occurrence-limit-exceeded\");\n }\n\n const resolution = await run.resolver.resolve({\n source: sourceRead.source,\n rawDestination: occurrence.rawDestination,\n rootExternalTargetMode: run.options.rootExternalTargetMode,\n requireExistingTargets: run.options.requireExistingTargets,\n requireNonEmptyDirectories: run.options.requireNonEmptyDirectories,\n validateSameDocumentAnchors: run.options.validateSameDocumentAnchors,\n validateCrossDocumentAnchors: run.options.validateCrossDocumentAnchors,\n maxMarkdownBytes: run.options.limits.maxMarkdownBytes\n });\n if (run.signal.aborted) return unavailableValidation(\"cancelled\");\n if (resolution.kind === \"unavailable\") return unavailableValidation(resolution.reason);\n const candidate = buildMarkdownLinkRecordCandidate(\n sourceRead.source.path,\n occurrenceIndex,\n occurrence,\n resolution\n );\n if (candidate !== undefined) candidates.push(candidate);\n }\n\n return Object.freeze({\n kind: \"complete\" as const,\n candidates: Object.freeze(candidates),\n occurrenceCount\n });\n}\n\nfunction isMarkdownSourcePath(filePath: string): boolean {\n const extension = path.extname(filePath).toLowerCase();\n return extension === \".md\" || extension === \".markdown\";\n}\n\nfunction unavailable(\n reason: MarkdownLinkValidationUnavailableReason\n): CheckResult<MarkdownLinkValidationFinalData> {\n return Object.freeze({\n status: \"unavailable\",\n reason: { code: reason },\n messages: Object.freeze([\n Object.freeze({\n code: reason,\n level: \"error\" as const,\n message: markdownLinkUnavailableMessage(reason)\n })\n ])\n });\n}\n"]}
|