@zxyycom/vibe-check 0.0.1 → 0.0.2
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 +47 -74
- package/dist/esm/cache/cache-json-by-key.mjs +189 -0
- package/dist/esm/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/finding-presentation.mjs +40 -0
- package/dist/esm/check/finding-presentation.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +1 -1
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- 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/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/closed-values.mjs +16 -0
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- 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 +9 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs +56 -0
- package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/learned-critical-path/duration-model/prediction.mjs +122 -0
- package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/learned-critical-path/duration-model/preparation.mjs +41 -0
- package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/learned-critical-path/duration-model/recording.mjs +109 -0
- package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/learned-critical-path/duration-model/storage.mjs +187 -0
- package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/learned-critical-path/selection-layers.mjs +28 -0
- package/dist/esm/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/learned-critical-path/static-decision.mjs +55 -0
- package/dist/esm/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/learned-critical-path/strategy.mjs +179 -0
- package/dist/esm/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/machine-output/v4/atomic-publication.mjs +1 -15
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- 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/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 +1 -1
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -18
- 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 +1 -1
- 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/execution.mjs +10 -17
- 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/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 +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- 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 +2 -2
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +56 -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 +24 -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 +217 -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 +100 -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 +260 -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 +402 -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 +214 -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 +79 -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 +606 -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 +23 -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 +542 -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 +62 -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 +108 -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 +2 -2
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +51 -33
- 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 +161 -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/{file-metrics/scc → 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 +1 -1
- package/dist/esm/package-checks/host-environment/git.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/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-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/maintenance-reminders/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +9 -3
- 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/options-resolution.mjs +26 -4
- 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 +24 -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 +185 -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/project-files/collection.mjs +1 -1
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +2 -10
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +1 -1
- 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-worktree-files.mjs +1 -1
- 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 +39 -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 +153 -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 +85 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +12 -172
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +171 -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/materialization.mjs +9 -1
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +45 -13
- 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 +73 -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-definition-validation.mjs +100 -16
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +52 -47
- 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 +54 -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 +7 -5
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/callback.mjs +35 -8
- 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 +21 -3
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +54 -13
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +13 -9
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +87 -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.mjs +18 -32
- package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +100 -58
- 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/{completion.mjs → completion/completion.mjs} +16 -38
- 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 +75 -11
- package/dist/esm/project-run/controls/validation.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 +61 -0
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +79 -0
- package/dist/esm/project-run/invocation/creation.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.mjs → invocation/run.mjs} +78 -92
- package/dist/esm/project-run/invocation/run.mjs.map +1 -0
- package/dist/esm/project-run/invocation/scheduler.mjs +57 -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 +112 -18
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +108 -19
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +30 -4
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +5 -2
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +1 -1
- 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.mjs +166 -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 +198 -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 +151 -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/critical-path-ranking.mjs +46 -0
- package/dist/esm/project-run/task-scheduler/critical-path-ranking.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 +207 -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 +158 -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 +89 -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 +171 -114
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +64 -137
- package/docs/changelog.md +157 -0
- package/docs/checks/duplicate-detection.md +111 -59
- package/docs/checks/file-metrics.md +46 -43
- package/docs/checks/function-metrics.md +100 -163
- package/docs/checks/json-schema-validation.md +43 -36
- package/docs/checks/json-validation.md +38 -25
- package/docs/checks/maintenance-reminders.md +41 -29
- package/docs/checks/markdown-link-validation.md +82 -54
- package/docs/checks/secret-detection.md +129 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +5 -5
- package/docs/guides/cache-results.md +63 -0
- package/docs/guides/callbacks.md +34 -0
- package/docs/guides/check-dependencies.md +121 -0
- package/docs/guides/collecting-project-files.md +59 -0
- package/docs/guides/extending-check-lifecycle.md +112 -0
- package/docs/guides/finding-waivers.md +45 -0
- package/docs/guides/learned-scheduling.md +83 -0
- package/docs/guides/presenting-findings.md +54 -0
- package/docs/guides/run-outputs.md +145 -0
- package/docs/guides/scheduling.md +208 -0
- package/docs/guides/simulating-admission.md +55 -0
- package/docs/output.md +11 -20
- 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 +18 -6
- package/src/cache/cache-json-by-key.ts +304 -0
- package/src/check/check.ts +67 -17
- package/src/check/finding-presentation.ts +67 -0
- package/src/check/inherited-collection.ts +1 -1
- package/src/check-settlement/fact-validation.ts +29 -39
- 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/closed-values.ts +29 -0
- package/src/data-boundary/value-shapes.ts +12 -0
- package/src/index.ts +70 -2
- package/src/learned-critical-path/duration-model/bounded-history.ts +108 -0
- package/src/learned-critical-path/duration-model/prediction.ts +181 -0
- package/src/learned-critical-path/duration-model/preparation.ts +77 -0
- package/src/learned-critical-path/duration-model/recording.ts +208 -0
- package/src/learned-critical-path/duration-model/storage.ts +252 -0
- package/src/learned-critical-path/selection-layers.ts +72 -0
- package/src/learned-critical-path/static-decision.ts +105 -0
- package/src/learned-critical-path/strategy.ts +299 -0
- package/src/machine-output/v4/atomic-publication.ts +1 -16
- 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/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 +1 -1
- package/src/package-checks/duplicate-detection/execution.ts +82 -22
- 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 +1 -1
- 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 +21 -1
- package/src/package-checks/duplicate-detection/records.ts +65 -12
- package/src/package-checks/file-metrics/execution.ts +16 -17
- 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/records.ts +11 -23
- package/src/package-checks/file-metrics/scc/availability.ts +1 -1
- package/src/package-checks/file-metrics/scc/parser.ts +4 -4
- package/src/package-checks/file-metrics/scc/scanner.ts +2 -2
- package/src/package-checks/function-metrics/analysis.ts +76 -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 +261 -0
- package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +27 -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 +311 -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 +107 -0
- package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +246 -0
- package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +306 -0
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +431 -0
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +234 -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 +90 -0
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +593 -0
- package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +35 -0
- package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +682 -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 +75 -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 +150 -0
- package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
- package/src/package-checks/function-metrics/constructor.ts +2 -2
- package/src/package-checks/function-metrics/execution.ts +94 -39
- 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 +221 -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 +27 -11
- 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 +2 -2
- package/src/package-checks/host-environment/process.ts +10 -0
- 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 +23 -0
- 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/maintenance-reminders/final-data.ts +18 -0
- package/src/package-checks/markdown-link-validation/default-check.ts +9 -3
- 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/options-resolution.ts +31 -3
- package/src/package-checks/markdown-link-validation/options-validation.ts +27 -19
- package/src/package-checks/markdown-link-validation/options.ts +15 -0
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +246 -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/project-files/collection.ts +1 -1
- package/src/package-checks/project-files/configuration.ts +3 -14
- package/src/package-checks/project-files/gitlink-revision.ts +1 -1
- package/src/package-checks/project-files/gitlink-worktree.ts +1 -1
- package/src/package-checks/project-files/public-collection.ts +92 -0
- package/src/package-checks/project-files/revision-worktree-files.ts +1 -1
- package/src/package-checks/secret-detection/classification.ts +30 -0
- package/src/package-checks/secret-detection/default-check.ts +50 -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 +233 -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 +36 -0
- package/src/package-checks/secret-detection/records.ts +77 -0
- package/src/package-checks/secret-detection/secretlint/adapter.ts +123 -0
- package/src/project-definition/check-tree/authoring.ts +29 -230
- package/src/project-definition/check-tree/check-fields-authoring.ts +227 -0
- package/src/project-definition/check-tree/collection-authoring.ts +13 -0
- package/src/project-definition/check-tree/materialization.ts +9 -1
- package/src/project-definition/check-tree/resolution.ts +80 -22
- package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
- package/src/project-definition/declarative-snapshot.ts +87 -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-definition-validation.ts +117 -18
- package/src/project-definition/project-definition.ts +198 -61
- package/src/project-definition/resource-unit-mapping.ts +25 -0
- package/src/project-definition/scheduler-policy.ts +553 -0
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +80 -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 +10 -5
- package/src/project-run/check-execution/callback.ts +50 -8
- package/src/project-run/check-execution/console-capture.ts +262 -0
- package/src/project-run/check-execution/dependencies.ts +43 -6
- package/src/project-run/check-execution/execution-finalization.ts +99 -25
- package/src/project-run/check-execution/execution-settlement.ts +19 -11
- package/src/project-run/check-execution/flag-controls.ts +132 -0
- package/src/project-run/check-execution/lifecycle.ts +21 -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.ts +23 -43
- package/src/project-run/check-execution/resolved-checks.ts +165 -126
- package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
- package/src/project-run/{completion.ts → completion/completion.ts} +17 -57
- 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 +25 -2
- 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 +107 -12
- 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 +86 -0
- package/src/project-run/invocation/creation.ts +116 -0
- package/src/project-run/invocation/paths.ts +154 -0
- package/src/project-run/invocation/progress.ts +38 -0
- package/src/project-run/{invocation.ts → invocation/run.ts} +125 -120
- package/src/project-run/invocation/scheduler.ts +75 -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 +118 -26
- package/src/project-run/progress-rendering/renderer-formatting.ts +166 -19
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +38 -3
- package/src/project-run/progress-rendering/renderer.ts +13 -2
- package/src/project-run/project-context.ts +3 -2
- package/src/project-run/result.ts +49 -3
- package/src/project-run/run.ts +7 -6
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +316 -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 +295 -0
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +252 -0
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +236 -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/critical-path-ranking.ts +76 -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 +261 -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 +190 -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 +124 -0
- package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +95 -0
- package/src/project-run/task-scheduler/scheduler.ts +216 -171
- package/types/cache/cache-json-by-key.d.ts +53 -0
- package/types/check/check.d.ts +62 -17
- package/types/check/finding-presentation.d.ts +25 -0
- package/types/check/inherited-collection.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/closed-values.d.ts +8 -0
- package/types/data-boundary/value-shapes.d.ts +3 -0
- package/types/index.d.ts +22 -7
- package/types/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
- package/types/learned-critical-path/duration-model/prediction.d.ts +32 -0
- package/types/learned-critical-path/duration-model/preparation.d.ts +28 -0
- package/types/learned-critical-path/duration-model/recording.d.ts +28 -0
- package/types/learned-critical-path/duration-model/storage.d.ts +12 -0
- package/types/learned-critical-path/selection-layers.d.ts +14 -0
- package/types/learned-critical-path/static-decision.d.ts +3 -0
- package/types/learned-critical-path/strategy.d.ts +35 -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/duplicate-detection/area-policy.d.ts +1 -1
- 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 +18 -1
- package/types/package-checks/duplicate-detection/records.d.ts +20 -3
- package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
- package/types/package-checks/file-metrics/records.d.ts +5 -10
- 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 +1 -1
- 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 +23 -10
- 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 +1 -1
- package/types/package-checks/host-environment/process.d.ts +5 -0
- package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
- package/types/package-checks/json-schema-validation/options.d.ts +31 -3
- package/types/package-checks/json-validation/final-data.d.ts +5 -0
- package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
- package/types/package-checks/markdown-link-validation/default-check.d.ts +9 -3
- 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 +15 -0
- 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/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 +11 -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 +32 -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/project-definition/check-tree/authoring.d.ts +11 -14
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +25 -0
- package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
- package/types/project-definition/check-tree/resolution.d.ts +8 -3
- package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
- package/types/project-definition/declarative-snapshot.d.ts +7 -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-definition.d.ts +61 -16
- 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 +1 -1
- 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 +1 -1
- package/types/project-run/check-execution/execution-finalization.d.ts +17 -7
- package/types/project-run/check-execution/execution-settlement.d.ts +5 -2
- package/types/project-run/check-execution/flag-controls.d.ts +27 -0
- package/types/project-run/check-execution/lifecycle.d.ts +20 -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.d.ts +6 -5
- package/types/project-run/check-execution/resolved-checks.d.ts +32 -38
- package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
- package/types/project-run/{completion.d.ts → completion/completion.d.ts} +4 -4
- 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 +25 -2
- 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-creation.d.ts → invocation/creation.d.ts} +3 -3
- 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 +9 -5
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +8 -0
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +6 -1
- package/types/project-run/progress-rendering/renderer.d.ts +7 -1
- package/types/project-run/project-context.d.ts +2 -1
- package/types/project-run/result.d.ts +37 -3
- package/types/project-run/run.d.ts +6 -5
- 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/critical-path-ranking.d.ts +19 -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/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 +0 -17
- 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/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.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/invocation-creation.ts +0 -160
- 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/project-run/invocation.d.ts +0 -34
- package/types/project-run/output-configuration.d.ts +0 -3
- package/types/project-run/output-status.d.ts +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\nimport type { FindingPolicy } from \"../code-quality-findings/policy.ts\";\n\n/** `functionMetrics` 构造函数可省略的文件选择策略。 */\nexport type FunctionMetricsFileOptions = ProjectFileSelectionOptions;\n\n/** `functionMetrics` 构造函数可省略的函数指标上限。 */\nexport interface FunctionMetricsLimitOptions {\n readonly codeLines?: Readonly<{\n /** 省略时为 `60`;函数 NLOC 超过此值时产生 finding。 */\n readonly maximum?: number;\n readonly lowComplexityAllowance?: Readonly<{\n /** 省略时为 `6`;复杂度小于此值时可使用较高 NLOC 上限。 */\n readonly cyclomaticComplexityBelow?: number;\n /** 省略时为 `180`;不得小于普通代码行上限。 */\n readonly maximum?: number;\n }>;\n }>;\n readonly cyclomaticComplexity?: Readonly<{\n /** 省略时为 `12`。 */\n readonly maximum?: number;\n }>;\n readonly parameters?: Readonly<{\n /** 省略时为 `6`。 */\n readonly maximum?: number;\n }>;\n}\n\n/** 可独立选择文件、指标上限和 finding policy 的 function-metrics 区域。 */\nexport interface FunctionMetricsCodeAreaOptions {\n /** 显式区域必须声明本字段;其中各子字段可省略并使用 package 默认值。 */\n readonly files: FunctionMetricsFileOptions;\n /** 省略时继承顶层 `findingPolicy`。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略的嵌套上限使用 package 默认值。 */\n readonly limits?: FunctionMetricsLimitOptions;\n}\n\n/**
|
|
1
|
+
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\nimport type { FindingPolicy } from \"../code-quality-findings/policy.ts\";\nimport type { FindingWaiver } from \"../../finding-waivers/reconciliation.ts\";\n\n/** `functionMetrics` 构造函数可省略的文件选择策略。 */\nexport type FunctionMetricsFileOptions = ProjectFileSelectionOptions;\n\n/** `functionMetrics` 构造函数可省略的函数指标上限。 */\nexport interface FunctionMetricsLimitOptions {\n readonly codeLines?: Readonly<{\n /** 省略时为 `60`;函数 NLOC 超过此值时产生 finding。 */\n readonly maximum?: number;\n readonly lowComplexityAllowance?: Readonly<{\n /** 省略时为 `6`;复杂度小于此值时可使用较高 NLOC 上限。 */\n readonly cyclomaticComplexityBelow?: number;\n /** 省略时为 `180`;不得小于普通代码行上限。 */\n readonly maximum?: number;\n }>;\n }>;\n readonly cyclomaticComplexity?: Readonly<{\n /** 省略时为 `12`。 */\n readonly maximum?: number;\n }>;\n readonly nestingDepth?: Readonly<{\n /** 省略时为 `7`。 */\n readonly maximum?: number;\n }>;\n readonly parameters?: Readonly<{\n /** 省略时为 `6`。 */\n readonly maximum?: number;\n }>;\n}\n\n/** 可独立选择文件、指标上限和 finding policy 的 function-metrics 区域。 */\nexport interface FunctionMetricsCodeAreaOptions {\n /** 显式区域必须声明本字段;其中各子字段可省略并使用 package 默认值。 */\n readonly files: FunctionMetricsFileOptions;\n /** 省略时继承顶层 `findingPolicy`。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略的嵌套上限使用 package 默认值。 */\n readonly limits?: FunctionMetricsLimitOptions;\n}\n\n/** function-metrics 可形成 Finding 的封闭 metric 名称。 */\nexport type FunctionMetricsFindingMetric =\n | \"cyclomatic-complexity\"\n | \"function-code-density\"\n | \"nesting-depth\"\n | \"parameter-count\";\n\n/** function-metrics 用于精确识别一条可豁免 metric finding 的稳定字段。 */\nexport interface FunctionMetricsFindingIdentity {\n readonly functionName: string;\n readonly metric: FunctionMetricsFindingMetric;\n /** 已 normalized 的 project-root-relative slash path。 */\n readonly path: string;\n /** 该次 finding 中函数起始位置的一基行号;位置变化会让旧 waiver 进入 unused audit。 */\n readonly startLine: number;\n}\n\n/** 一项 function-metrics metric finding 的声明式豁免。 */\nexport type FunctionMetricsFindingWaiver = FindingWaiver<FunctionMetricsFindingIdentity>;\n\n/** `functionMetrics(options?)` 接受并补齐默认值的公开策略。 */\nexport interface FunctionMetricsOptions {\n /** 省略时建立默认 `project` 区域;显式映射必须非空,且每个区域必须声明 `files`。 */\n readonly codeAreas?: Readonly<Record<string, FunctionMetricsCodeAreaOptions>>;\n /** 省略时为 `non-blocking`;区域可局部覆盖。 */\n readonly findingPolicy?: FindingPolicy;\n /** 省略时没有豁免;只匹配 normal metric finding,不匹配 input rejection。 */\n readonly findingWaivers?: readonly FunctionMetricsFindingWaiver[];\n}\n\n/** 构造函数生成并由 Check preflight/execution 消费的完整 options。 */\nexport interface ResolvedFunctionMetricsOptions {\n readonly codeAreas: Readonly<Record<string, ResolvedFunctionMetricsCodeAreaOptions>>;\n readonly findingWaivers: readonly FunctionMetricsFindingWaiver[];\n}\n\nexport interface ResolvedFunctionMetricsCodeAreaOptions {\n readonly files: ProjectFileSelection;\n readonly findingPolicy: FindingPolicy;\n readonly limits: ResolvedFunctionMetricsLimits;\n}\n\nexport interface ResolvedFunctionMetricsLimits {\n readonly codeLines: Readonly<{\n readonly maximum: number;\n readonly lowComplexityAllowance: Readonly<{\n readonly cyclomaticComplexityBelow: number;\n readonly maximum: number;\n }>;\n }>;\n readonly cyclomaticComplexity: Readonly<{ readonly maximum: number }>;\n readonly nestingDepth: Readonly<{ readonly maximum: number }>;\n readonly parameters: Readonly<{ readonly maximum: number }>;\n}\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { isStableFunctionName } from "./analysis.mjs";
|
|
2
2
|
import { isBlockingFinding } from "../code-quality-findings/policy.mjs";
|
|
3
|
+
import { buildHashedFindingWaiverAuditRecord } from "../code-quality-findings/finding-waiver-evidence.mjs";
|
|
4
|
+
import { resolveFunctionMetricsFindingIdentity } from "./finding-waiver-identity.mjs";
|
|
3
5
|
const INPUT_REJECTED_RECORD_ID_PREFIX = "/input-rejected/";
|
|
4
6
|
/** 为每个 rejected path 构造一条 area-aware、固定 non-blocking 的 Finding。 */
|
|
5
7
|
export function buildFunctionInputRejectedCandidates(codeAreasByPath) {
|
|
@@ -16,6 +18,22 @@ export function buildFunctionInputRejectedCandidates(codeAreasByPath) {
|
|
|
16
18
|
id: `${INPUT_REJECTED_RECORD_ID_PREFIX}${path}`
|
|
17
19
|
})));
|
|
18
20
|
}
|
|
21
|
+
export function functionMetricsFindingIdentity(candidate) {
|
|
22
|
+
const { functionName, metric, path, startLine } = candidate.data;
|
|
23
|
+
return Object.freeze({ functionName, metric, path, startLine });
|
|
24
|
+
}
|
|
25
|
+
export function functionMetricsWaiverIdentity(waiver) {
|
|
26
|
+
const identity = resolveFunctionMetricsFindingIdentity(waiver.identity);
|
|
27
|
+
if (identity === undefined) {
|
|
28
|
+
throw new TypeError("functionMetrics waiver identity must retain a valid metric subject");
|
|
29
|
+
}
|
|
30
|
+
return identity;
|
|
31
|
+
}
|
|
32
|
+
/** 为一项未使用或过宽 waiver 构造 Check-owned audit Record。 */
|
|
33
|
+
export function functionMetricsWaiverAuditRecord(audit) {
|
|
34
|
+
const identity = functionMetricsWaiverIdentity(audit.waiver);
|
|
35
|
+
return buildHashedFindingWaiverAuditRecord(identity, audit);
|
|
36
|
+
}
|
|
19
37
|
/** 为每个超过 matching-area 最严格阈值的 metric 构造 supplemental fact。 */
|
|
20
38
|
export function buildFunctionRecordCandidates(analysis, areas) {
|
|
21
39
|
const areasByPath = indexAreasByPath(areas);
|
|
@@ -56,7 +74,7 @@ function metricEvaluations(instance, policyContext, matchingAreas) {
|
|
|
56
74
|
const complexityEvaluation = complexityMetricEvaluation(instance, policyContext, matchingAreas);
|
|
57
75
|
if (complexityEvaluation !== null)
|
|
58
76
|
evaluations.push(complexityEvaluation);
|
|
59
|
-
evaluations.push(codeLinesMetricEvaluation(instance, policyContext, matchingAreas), parameterMetricEvaluation(instance, policyContext, matchingAreas));
|
|
77
|
+
evaluations.push(codeLinesMetricEvaluation(instance, policyContext, matchingAreas), nestingDepthMetricEvaluation(instance, policyContext, matchingAreas), parameterMetricEvaluation(instance, policyContext, matchingAreas));
|
|
60
78
|
return evaluations;
|
|
61
79
|
}
|
|
62
80
|
function sharedMetricEvaluation(instance, policyContext) {
|
|
@@ -75,11 +93,20 @@ function complexityMetricEvaluation(instance, policyContext, matchingAreas) {
|
|
|
75
93
|
return null;
|
|
76
94
|
return {
|
|
77
95
|
...sharedMetricEvaluation(instance, policyContext),
|
|
96
|
+
complexityContributors: instance.metric.complexityContributors,
|
|
78
97
|
limit: Math.min(...matchingAreas.map((area) => area.limits.cyclomaticComplexity.maximum)),
|
|
79
98
|
metric: "cyclomatic-complexity",
|
|
80
99
|
value
|
|
81
100
|
};
|
|
82
101
|
}
|
|
102
|
+
function nestingDepthMetricEvaluation(instance, policyContext, matchingAreas) {
|
|
103
|
+
return {
|
|
104
|
+
...sharedMetricEvaluation(instance, policyContext),
|
|
105
|
+
limit: Math.min(...matchingAreas.map((area) => area.limits.nestingDepth.maximum)),
|
|
106
|
+
metric: "nesting-depth",
|
|
107
|
+
value: instance.metric.nestingDepth.value
|
|
108
|
+
};
|
|
109
|
+
}
|
|
83
110
|
function codeLinesMetricEvaluation(instance, policyContext, matchingAreas) {
|
|
84
111
|
return {
|
|
85
112
|
...sharedMetricEvaluation(instance, policyContext),
|
|
@@ -104,6 +131,9 @@ function appendFindingCandidate(candidates, evaluation) {
|
|
|
104
131
|
data: Object.freeze({
|
|
105
132
|
blocking: evaluation.blocking,
|
|
106
133
|
codeAreas: evaluation.codeAreas,
|
|
134
|
+
...(evaluation.complexityContributors === undefined
|
|
135
|
+
? {}
|
|
136
|
+
: { complexityContributors: evaluation.complexityContributors }),
|
|
107
137
|
functionName: evaluation.functionName,
|
|
108
138
|
limit: evaluation.limit,
|
|
109
139
|
metric: evaluation.metric,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/records.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isStableFunctionName,\n type FunctionMetricAnalysis,\n type FunctionMetricInstance\n} from \"./analysis.ts\";\nimport { isBlockingFinding } from \"../code-quality-findings/policy.ts\";\nimport type { FunctionMetric, FunctionMetricsAreaInput } from \"./measurement-model.ts\";\nimport type { ResolvedFunctionMetricsLimits } from \"./options.ts\";\n\ntype FunctionMetricName = \"cyclomatic-complexity\" | \"function-code-density\" | \"parameter-count\";\nconst INPUT_REJECTED_RECORD_ID_PREFIX = \"/input-rejected/\";\n\n/** 一条超出函数 metric 上限的 supplemental Record data。 */\nexport type FunctionMetricsFindingRecordData = Readonly<{\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly functionName: string;\n readonly limit: number;\n readonly metric: FunctionMetricName;\n readonly path: string;\n readonly startLine: number;\n readonly value: number;\n}>;\n\n/** 一条已被 files policy 选中、但不受 functionMetrics 支持的输入 Finding。 */\nexport type FunctionMetricsInputRejectedRecordData = Readonly<{\n readonly blocking: false;\n readonly codeAreas: readonly string[];\n readonly kind: \"input-rejected\";\n readonly path: string;\n readonly reason: \"unsupported-file-type\";\n}>;\n\n/** functionMetrics 发布的 metric 或 input-rejection Record data。 */\nexport type FunctionMetricsRecordData =\n | FunctionMetricsFindingRecordData\n | FunctionMetricsInputRejectedRecordData;\n\nexport interface FunctionRecordCandidate {\n readonly data: FunctionMetricsFindingRecordData;\n readonly id: string;\n}\n\nexport interface FunctionInputRejectedCandidate {\n readonly data: FunctionMetricsInputRejectedRecordData;\n readonly id: string;\n}\n\n/** 为每个 rejected path 构造一条 area-aware、固定 non-blocking 的 Finding。 */\nexport function buildFunctionInputRejectedCandidates(\n codeAreasByPath: ReadonlyMap<string, readonly string[]>\n): readonly FunctionInputRejectedCandidate[] {\n return Object.freeze(\n [...codeAreasByPath]\n .sort(([left], [right]) => compareText(left, right))\n .map(([path, codeAreas]) =>\n Object.freeze({\n data: Object.freeze({\n blocking: false as const,\n codeAreas: Object.freeze(uniqueSorted(codeAreas)),\n kind: \"input-rejected\" as const,\n path,\n reason: \"unsupported-file-type\" as const\n }),\n id: `${INPUT_REJECTED_RECORD_ID_PREFIX}${path}`\n })\n )\n );\n}\n\ntype MatchingFunctionMetricAreas = readonly [\n FunctionMetricsAreaInput,\n ...FunctionMetricsAreaInput[]\n];\n\ninterface FunctionPolicyContext {\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly functionName: string;\n}\n\ninterface FunctionMetricEvaluation {\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly functionName: string;\n readonly limit: number;\n readonly metric: FunctionMetricName;\n readonly path: string;\n readonly startLine: number;\n readonly subject: string;\n readonly value: number;\n}\n\n/** 为每个超过 matching-area 最严格阈值的 metric 构造 supplemental fact。 */\nexport function buildFunctionRecordCandidates(\n analysis: FunctionMetricAnalysis,\n areas: readonly FunctionMetricsAreaInput[]\n): readonly FunctionRecordCandidate[] | undefined {\n const areasByPath = indexAreasByPath(areas);\n const candidates: FunctionRecordCandidate[] = [];\n for (const instance of analysis.instances) {\n const [firstArea, ...remainingAreas] = areasByPath.get(instance.metric.file) ?? [];\n if (firstArea === undefined) return undefined;\n const matchingAreas = [firstArea, ...remainingAreas] as const;\n const policyContext = resolveFunctionPolicyContext(instance, matchingAreas);\n for (const evaluation of metricEvaluations(instance, policyContext, matchingAreas)) {\n appendFindingCandidate(candidates, evaluation);\n }\n }\n candidates.sort((left, right) => compareText(left.id, right.id));\n return Object.freeze(candidates);\n}\n\nfunction indexAreasByPath(\n areas: readonly FunctionMetricsAreaInput[]\n): ReadonlyMap<string, readonly FunctionMetricsAreaInput[]> {\n const mutableAreas = new Map<string, FunctionMetricsAreaInput[]>();\n for (const area of areas) {\n for (const path of area.approvedExactPaths) {\n const matchingAreas = mutableAreas.get(path) ?? [];\n matchingAreas.push(area);\n mutableAreas.set(path, matchingAreas);\n }\n }\n return new Map(\n Array.from(mutableAreas, ([path, matchingAreas]) => [path, Object.freeze(matchingAreas)])\n );\n}\n\nfunction resolveFunctionPolicyContext(\n instance: FunctionMetricInstance,\n matchingAreas: MatchingFunctionMetricAreas\n): Readonly<FunctionPolicyContext> {\n return Object.freeze({\n blocking: isBlockingFinding(matchingAreas.map((area) => area.findingPolicy)),\n codeAreas: Object.freeze(uniqueSorted(matchingAreas.map((area) => area.codeArea))),\n functionName: isStableFunctionName(instance.metric.name) ? instance.metric.name : \"<anonymous>\"\n });\n}\n\nfunction metricEvaluations(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation[] {\n const evaluations: FunctionMetricEvaluation[] = [];\n const complexityEvaluation = complexityMetricEvaluation(instance, policyContext, matchingAreas);\n if (complexityEvaluation !== null) evaluations.push(complexityEvaluation);\n evaluations.push(\n codeLinesMetricEvaluation(instance, policyContext, matchingAreas),\n parameterMetricEvaluation(instance, policyContext, matchingAreas)\n );\n return evaluations;\n}\n\nfunction sharedMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext\n) {\n return {\n blocking: policyContext.blocking,\n codeAreas: policyContext.codeAreas,\n functionName: policyContext.functionName,\n path: instance.metric.file,\n startLine: instance.metric.startLine,\n subject: instance.semanticSubject\n } as const;\n}\n\nfunction complexityMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation | null {\n const value = instance.metric.cyclomaticComplexity.value;\n if (value === null) return null;\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(...matchingAreas.map((area) => area.limits.cyclomaticComplexity.maximum)),\n metric: \"cyclomatic-complexity\",\n value\n };\n}\n\nfunction codeLinesMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation {\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(\n ...matchingAreas.map((area) => functionCodeLineMaximum(instance.metric, area.limits))\n ),\n metric: \"function-code-density\",\n value: instance.metric.lines\n };\n}\n\nfunction parameterMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation {\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(...matchingAreas.map((area) => area.limits.parameters.maximum)),\n metric: \"parameter-count\",\n value: instance.metric.parameterCount\n };\n}\n\nfunction appendFindingCandidate(\n candidates: FunctionRecordCandidate[],\n evaluation: FunctionMetricEvaluation\n): void {\n if (evaluation.value <= evaluation.limit) return;\n candidates.push(\n Object.freeze({\n id: `${evaluation.subject}:${evaluation.metric}`,\n data: Object.freeze({\n blocking: evaluation.blocking,\n codeAreas: evaluation.codeAreas,\n functionName: evaluation.functionName,\n limit: evaluation.limit,\n metric: evaluation.metric,\n path: evaluation.path,\n startLine: evaluation.startLine,\n value: evaluation.value\n })\n })\n );\n}\n\nfunction functionCodeLineMaximum(\n metric: FunctionMetric,\n limits: ResolvedFunctionMetricsLimits\n): number {\n const allowance = limits.codeLines.lowComplexityAllowance;\n const complexity = metric.cyclomaticComplexity.value;\n return complexity !== null && complexity < allowance.cyclomaticComplexityBelow\n ? allowance.maximum\n : limits.codeLines.maximum;\n}\n\nfunction uniqueSorted(values: readonly string[]): string[] {\n return [...new Set(values)].sort(compareText);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"records.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/records.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isStableFunctionName,\n type FunctionMetricAnalysis,\n type FunctionMetricInstance\n} from \"./analysis.ts\";\nimport type { MaterializedFindingWaiver } from \"../../finding-waivers/reconciliation.ts\";\nimport { isBlockingFinding } from \"../code-quality-findings/policy.ts\";\nimport {\n buildHashedFindingWaiverAuditRecord,\n type FindingWaiverAuditRecordData,\n type FindingWaiverRecordAudit\n} from \"../code-quality-findings/finding-waiver-evidence.ts\";\nimport type { FunctionMetric, FunctionMetricsAreaInput } from \"./measurement-model.ts\";\nimport type {\n FunctionMetricsFindingIdentity,\n FunctionMetricsFindingMetric,\n ResolvedFunctionMetricsLimits\n} from \"./options.ts\";\nimport { resolveFunctionMetricsFindingIdentity } from \"./finding-waiver-identity.ts\";\n\nconst INPUT_REJECTED_RECORD_ID_PREFIX = \"/input-rejected/\";\n/** 一条超出函数 metric 上限的 supplemental Record data。 */\nexport type FunctionMetricsFindingRecordData = Readonly<{\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n /** Complete source-ordered CCN contributors; present only for CCN findings. */\n readonly complexityContributors?: readonly Readonly<{\n readonly line: number;\n readonly token: string;\n }>[];\n readonly functionName: string;\n readonly limit: number;\n readonly metric: FunctionMetricsFindingMetric;\n readonly path: string;\n readonly startLine: number;\n readonly value: number;\n /** 精确匹配 waiver 时保留理由,并令该 finding 不再参与 actionable settlement。 */\n readonly waiver?: Readonly<{ readonly reason: string }>;\n}>;\n\n/** 未使用或过宽 function-metrics waiver 的 supplemental audit Record data。 */\nexport type FunctionMetricsFindingWaiverAuditRecordData =\n FindingWaiverAuditRecordData<FunctionMetricsFindingIdentity>;\n\n/** 一条已被 files policy 选中、但不受 functionMetrics 支持的输入 Finding。 */\nexport type FunctionMetricsInputRejectedRecordData = Readonly<{\n readonly blocking: false;\n readonly codeAreas: readonly string[];\n readonly kind: \"input-rejected\";\n readonly path: string;\n readonly reason: \"unsupported-file-type\";\n}>;\n\n/** functionMetrics 发布的 metric、input-rejection 或 finding-waiver audit Record data。 */\nexport type FunctionMetricsRecordData =\n | FunctionMetricsFindingRecordData\n | FunctionMetricsInputRejectedRecordData\n | FunctionMetricsFindingWaiverAuditRecordData;\n\nexport interface FunctionRecordCandidate {\n readonly data: FunctionMetricsFindingRecordData;\n readonly id: string;\n}\n\nexport interface FunctionInputRejectedCandidate {\n readonly data: FunctionMetricsInputRejectedRecordData;\n readonly id: string;\n}\n\n/** 为每个 rejected path 构造一条 area-aware、固定 non-blocking 的 Finding。 */\nexport function buildFunctionInputRejectedCandidates(\n codeAreasByPath: ReadonlyMap<string, readonly string[]>\n): readonly FunctionInputRejectedCandidate[] {\n return Object.freeze(\n [...codeAreasByPath]\n .sort(([left], [right]) => compareText(left, right))\n .map(([path, codeAreas]) =>\n Object.freeze({\n data: Object.freeze({\n blocking: false as const,\n codeAreas: Object.freeze(uniqueSorted(codeAreas)),\n kind: \"input-rejected\" as const,\n path,\n reason: \"unsupported-file-type\" as const\n }),\n id: `${INPUT_REJECTED_RECORD_ID_PREFIX}${path}`\n })\n )\n );\n}\n\ntype MatchingFunctionMetricAreas = readonly [\n FunctionMetricsAreaInput,\n ...FunctionMetricsAreaInput[]\n];\n\ninterface FunctionPolicyContext {\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly functionName: string;\n}\n\ninterface FunctionMetricEvaluation {\n readonly blocking: boolean;\n readonly codeAreas: readonly string[];\n readonly complexityContributors?: FunctionMetric[\"complexityContributors\"];\n readonly functionName: string;\n readonly limit: number;\n readonly metric: FunctionMetricsFindingMetric;\n readonly path: string;\n readonly startLine: number;\n readonly subject: string;\n readonly value: number;\n}\n\nexport function functionMetricsFindingIdentity(\n candidate: FunctionRecordCandidate\n): FunctionMetricsFindingIdentity {\n const { functionName, metric, path, startLine } = candidate.data;\n return Object.freeze({ functionName, metric, path, startLine });\n}\n\nexport function functionMetricsWaiverIdentity(\n waiver: MaterializedFindingWaiver\n): FunctionMetricsFindingIdentity {\n const identity = resolveFunctionMetricsFindingIdentity(waiver.identity);\n if (identity === undefined) {\n throw new TypeError(\"functionMetrics waiver identity must retain a valid metric subject\");\n }\n return identity;\n}\n\n/** 为一项未使用或过宽 waiver 构造 Check-owned audit Record。 */\nexport function functionMetricsWaiverAuditRecord(audit: FindingWaiverRecordAudit): Readonly<{\n readonly data: FunctionMetricsFindingWaiverAuditRecordData;\n readonly id: string;\n}> {\n const identity = functionMetricsWaiverIdentity(audit.waiver);\n return buildHashedFindingWaiverAuditRecord(identity, audit);\n}\n\n/** 为每个超过 matching-area 最严格阈值的 metric 构造 supplemental fact。 */\nexport function buildFunctionRecordCandidates(\n analysis: FunctionMetricAnalysis,\n areas: readonly FunctionMetricsAreaInput[]\n): readonly FunctionRecordCandidate[] | undefined {\n const areasByPath = indexAreasByPath(areas);\n const candidates: FunctionRecordCandidate[] = [];\n for (const instance of analysis.instances) {\n const [firstArea, ...remainingAreas] = areasByPath.get(instance.metric.file) ?? [];\n if (firstArea === undefined) return undefined;\n const matchingAreas = [firstArea, ...remainingAreas] as const;\n const policyContext = resolveFunctionPolicyContext(instance, matchingAreas);\n for (const evaluation of metricEvaluations(instance, policyContext, matchingAreas)) {\n appendFindingCandidate(candidates, evaluation);\n }\n }\n candidates.sort((left, right) => compareText(left.id, right.id));\n return Object.freeze(candidates);\n}\n\nfunction indexAreasByPath(\n areas: readonly FunctionMetricsAreaInput[]\n): ReadonlyMap<string, readonly FunctionMetricsAreaInput[]> {\n const mutableAreas = new Map<string, FunctionMetricsAreaInput[]>();\n for (const area of areas) {\n for (const path of area.approvedExactPaths) {\n const matchingAreas = mutableAreas.get(path) ?? [];\n matchingAreas.push(area);\n mutableAreas.set(path, matchingAreas);\n }\n }\n return new Map(\n Array.from(mutableAreas, ([path, matchingAreas]) => [path, Object.freeze(matchingAreas)])\n );\n}\n\nfunction resolveFunctionPolicyContext(\n instance: FunctionMetricInstance,\n matchingAreas: MatchingFunctionMetricAreas\n): Readonly<FunctionPolicyContext> {\n return Object.freeze({\n blocking: isBlockingFinding(matchingAreas.map((area) => area.findingPolicy)),\n codeAreas: Object.freeze(uniqueSorted(matchingAreas.map((area) => area.codeArea))),\n functionName: isStableFunctionName(instance.metric.name) ? instance.metric.name : \"<anonymous>\"\n });\n}\n\nfunction metricEvaluations(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation[] {\n const evaluations: FunctionMetricEvaluation[] = [];\n const complexityEvaluation = complexityMetricEvaluation(instance, policyContext, matchingAreas);\n if (complexityEvaluation !== null) evaluations.push(complexityEvaluation);\n evaluations.push(\n codeLinesMetricEvaluation(instance, policyContext, matchingAreas),\n nestingDepthMetricEvaluation(instance, policyContext, matchingAreas),\n parameterMetricEvaluation(instance, policyContext, matchingAreas)\n );\n return evaluations;\n}\n\nfunction sharedMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext\n) {\n return {\n blocking: policyContext.blocking,\n codeAreas: policyContext.codeAreas,\n functionName: policyContext.functionName,\n path: instance.metric.file,\n startLine: instance.metric.startLine,\n subject: instance.semanticSubject\n } as const;\n}\n\nfunction complexityMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation | null {\n const value = instance.metric.cyclomaticComplexity.value;\n if (value === null) return null;\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n complexityContributors: instance.metric.complexityContributors,\n limit: Math.min(...matchingAreas.map((area) => area.limits.cyclomaticComplexity.maximum)),\n metric: \"cyclomatic-complexity\",\n value\n };\n}\n\nfunction nestingDepthMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation {\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(...matchingAreas.map((area) => area.limits.nestingDepth.maximum)),\n metric: \"nesting-depth\",\n value: instance.metric.nestingDepth.value\n };\n}\n\nfunction codeLinesMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation {\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(\n ...matchingAreas.map((area) => functionCodeLineMaximum(instance.metric, area.limits))\n ),\n metric: \"function-code-density\",\n value: instance.metric.lines\n };\n}\n\nfunction parameterMetricEvaluation(\n instance: FunctionMetricInstance,\n policyContext: FunctionPolicyContext,\n matchingAreas: MatchingFunctionMetricAreas\n): FunctionMetricEvaluation {\n return {\n ...sharedMetricEvaluation(instance, policyContext),\n limit: Math.min(...matchingAreas.map((area) => area.limits.parameters.maximum)),\n metric: \"parameter-count\",\n value: instance.metric.parameterCount\n };\n}\n\nfunction appendFindingCandidate(\n candidates: FunctionRecordCandidate[],\n evaluation: FunctionMetricEvaluation\n): void {\n if (evaluation.value <= evaluation.limit) return;\n candidates.push(\n Object.freeze({\n id: `${evaluation.subject}:${evaluation.metric}`,\n data: Object.freeze({\n blocking: evaluation.blocking,\n codeAreas: evaluation.codeAreas,\n ...(evaluation.complexityContributors === undefined\n ? {}\n : { complexityContributors: evaluation.complexityContributors }),\n functionName: evaluation.functionName,\n limit: evaluation.limit,\n metric: evaluation.metric,\n path: evaluation.path,\n startLine: evaluation.startLine,\n value: evaluation.value\n })\n })\n );\n}\n\nfunction functionCodeLineMaximum(\n metric: FunctionMetric,\n limits: ResolvedFunctionMetricsLimits\n): number {\n const allowance = limits.codeLines.lowComplexityAllowance;\n const complexity = metric.cyclomaticComplexity.value;\n return complexity !== null && complexity < allowance.cyclomaticComplexityBelow\n ? allowance.maximum\n : limits.codeLines.maximum;\n}\n\nfunction uniqueSorted(values: readonly string[]): string[] {\n return [...new Set(values)].sort(compareText);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
|
|
@@ -1,70 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"cs",
|
|
8
|
-
"cxx",
|
|
9
|
-
"erl",
|
|
10
|
-
"es",
|
|
11
|
-
"escript",
|
|
12
|
-
"f",
|
|
13
|
-
"f03",
|
|
14
|
-
"f08",
|
|
15
|
-
"f70",
|
|
16
|
-
"f90",
|
|
17
|
-
"f95",
|
|
18
|
-
"for",
|
|
19
|
-
"fpp",
|
|
20
|
-
"ftn",
|
|
21
|
-
"gd",
|
|
22
|
-
"go",
|
|
23
|
-
"h",
|
|
24
|
-
"hpp",
|
|
25
|
-
"hrl",
|
|
26
|
-
"java",
|
|
27
|
-
"js",
|
|
28
|
-
"jsx",
|
|
29
|
-
"kt",
|
|
30
|
-
"kts",
|
|
31
|
-
"lua",
|
|
32
|
-
"m",
|
|
33
|
-
"mjs",
|
|
34
|
-
"mm",
|
|
35
|
-
"pck",
|
|
36
|
-
"php",
|
|
37
|
-
"pkb",
|
|
38
|
-
"pks",
|
|
39
|
-
"pl",
|
|
40
|
-
"plb",
|
|
41
|
-
"pls",
|
|
42
|
-
"pm",
|
|
43
|
-
"py",
|
|
44
|
-
"r",
|
|
45
|
-
"rb",
|
|
46
|
-
"rs",
|
|
47
|
-
"scala",
|
|
48
|
-
"sol",
|
|
49
|
-
"sql",
|
|
50
|
-
"st",
|
|
51
|
-
"swift",
|
|
52
|
-
"ts",
|
|
53
|
-
"ttcn",
|
|
54
|
-
"ttcnpp",
|
|
55
|
-
"tsx",
|
|
56
|
-
"vue",
|
|
57
|
-
"zig"
|
|
58
|
-
]);
|
|
59
|
-
const LIZARD_SUPPORTED_FILE_EXTENSION_SET = new Set(LIZARD_SUPPORTED_FILE_EXTENSIONS);
|
|
60
|
-
/** functionMetrics 默认 files.include 使用的 case-insensitive extension globs。 */
|
|
61
|
-
export const LIZARD_SUPPORTED_FILE_GLOBS = Object.freeze(LIZARD_SUPPORTED_FILE_EXTENSIONS.map((extension) => `**/*.${caseInsensitiveExtensionPattern(extension)}`));
|
|
62
|
-
export function isLizardTarget(filePath) {
|
|
63
|
-
const extensionSeparator = filePath.lastIndexOf(".");
|
|
64
|
-
if (extensionSeparator < 0)
|
|
65
|
-
return false;
|
|
66
|
-
const extension = filePath.slice(extensionSeparator + 1).toLowerCase();
|
|
67
|
-
return LIZARD_SUPPORTED_FILE_EXTENSION_SET.has(extension);
|
|
1
|
+
import { FUNCTION_METRICS_SUPPORTED_FILE_EXTENSIONS, isFunctionMetricsAnalyzerSourceSupported } from "./analyzer-adapter.mjs";
|
|
2
|
+
/** functionMetrics default files.include uses the adapter's case-insensitive suffix capability. */
|
|
3
|
+
export const FUNCTION_METRICS_SUPPORTED_FILE_GLOBS = Object.freeze(FUNCTION_METRICS_SUPPORTED_FILE_EXTENSIONS.map((extension) => `**/*.${caseInsensitiveExtensionPattern(extension)}`));
|
|
4
|
+
/** Whether an exact project-relative path has a translated analyzer reader. */
|
|
5
|
+
export function isFunctionMetricsTarget(filePath) {
|
|
6
|
+
return isFunctionMetricsAnalyzerSourceSupported(filePath);
|
|
68
7
|
}
|
|
69
8
|
function caseInsensitiveExtensionPattern(extension) {
|
|
70
9
|
return extension
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/target-files.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"target-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/target-files.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0CAA0C,EAC1C,wCAAwC,EACzC,MAAM,uBAAuB,CAAC;AAE/B,mGAAmG;AACnG,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC,MAAM,CAChE,0CAA0C,CAAC,GAAG,CAC5C,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,+BAA+B,CAAC,SAAS,CAAC,EAAE,CACpE,CACF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,wCAAwC,CAAC,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,+BAA+B,CAAC,SAAiB;IACxD,OAAO,SAAS;SACb,KAAK,CAAC,EAAE,CAAC;SACT,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAClF;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC","sourcesContent":["import {\n FUNCTION_METRICS_SUPPORTED_FILE_EXTENSIONS,\n isFunctionMetricsAnalyzerSourceSupported\n} from \"./analyzer-adapter.ts\";\n\n/** functionMetrics default files.include uses the adapter's case-insensitive suffix capability. */\nexport const FUNCTION_METRICS_SUPPORTED_FILE_GLOBS = Object.freeze(\n FUNCTION_METRICS_SUPPORTED_FILE_EXTENSIONS.map(\n (extension) => `**/*.${caseInsensitiveExtensionPattern(extension)}`\n )\n);\n\n/** Whether an exact project-relative path has a translated analyzer reader. */\nexport function isFunctionMetricsTarget(filePath: string): boolean {\n return isFunctionMetricsAnalyzerSourceSupported(filePath);\n}\n\nfunction caseInsensitiveExtensionPattern(extension: string): string {\n return extension\n .split(\"\")\n .map((character) =>\n /[a-z]/u.test(character) ? `[${character}${character.toUpperCase()}]` : character\n )\n .join(\"\");\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/csv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAY,KAAK,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,IAAI;QACT,kBAAkB,EAAE,IAAI;QACxB,gBAAgB,EAAE,IAAI;QACtB,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC","sourcesContent":["import { parse } from \"csv-parse/sync\";\n\n/** Parses untrusted scanner CSV into a complete matrix of strings. */\nexport function parseCsvRows(csv: string): string[][] {\n const records: unknown = parse(csv, {\n bom: true,\n relax_column_count: true,\n skip_empty_lines: true,\n trim: true\n });\n if (!Array.isArray(records) || !records.every(isStringRow)) {\n throw new Error(\"CSV parser returned non-string rows\");\n }\n return records;\n}\n\nfunction isStringRow(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { processFailed, runProcessSync } from "./process
|
|
1
|
+
import { processFailed, runProcessSync } from "./process.mjs";
|
|
2
2
|
import { toSlashPath } from "./path.mjs";
|
|
3
3
|
export function runGit(options) {
|
|
4
4
|
return runProcessSync({ command: "git", ...options });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"git.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAaxC,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;SACzC,GAAG,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM;SACV,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC;QAC5B,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YACpE,CAAC,CAAC,OAAO,CAAC;IACd,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAsB;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,MAAM,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC;QACjE,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACtC,CAAC","sourcesContent":["import { processFailed, runProcessSync } from \"./process.ts\";\nimport type { ProcessResult, RunProcessSyncOptions } from \"./process.ts\";\nimport { toSlashPath } from \"./path.ts\";\n\nexport type RunGitOptions = Omit<RunProcessSyncOptions, \"command\">;\n\nexport type GitCommitOptions = {\n readonly cwd: string;\n readonly sha: string;\n};\n\ntype GitLogFieldOptions = GitCommitOptions & {\n readonly format: string;\n};\n\nexport function runGit(options: RunGitOptions): ProcessResult {\n return runProcessSync({ command: \"git\", ...options });\n}\n\nexport function gitHeadSha(cwd: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"HEAD\"], cwd });\n if (processFailed(result)) return null;\n return result.stdout.trim() || null;\n}\n\nexport function gitCommitDate(options: GitCommitOptions): string | null {\n return gitLogField({ format: \"%aI\", ...options });\n}\n\nexport function gitCommitTitle(options: GitCommitOptions): string | null {\n return gitLogField({ format: \"%s\", ...options });\n}\n\nexport function splitGitFileList(stdout: string): string[] {\n return stdout.trim().split(/\\r?\\n/).filter(Boolean).map(toSlashPath);\n}\n\nexport function splitNulDelimitedGitFileList(stdout: string): string[] {\n return stdout\n .split(\"\\0\")\n .filter((filePath) => filePath.length > 0)\n .map(toSlashPath);\n}\n\nexport function parseGitStatusPaths(stdout: string): string[] {\n return stdout\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .filter(Boolean)\n .map((line) => {\n const rawPath = line.slice(3).trim();\n const renameMarker = \" -> \";\n return rawPath.includes(renameMarker)\n ? rawPath.slice(rawPath.indexOf(renameMarker) + renameMarker.length)\n : rawPath;\n })\n .filter(Boolean)\n .map(toSlashPath);\n}\n\nfunction gitLogField({ format, ...options }: GitLogFieldOptions): string | null {\n const result = runGit({\n args: [\"log\", `--format=${format}`, \"--max-count=1\", options.sha],\n cwd: options.cwd\n });\n if (processFailed(result)) return null;\n return result.stdout.trim() || null;\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { processFailure, processFailureFromResult, processFailed } from "./process/failure.mjs";
|
|
2
|
+
export { PLAIN_TEXT_PROCESS_ENV, plainTextProcessEnv } from "./process/env.mjs";
|
|
3
|
+
export { runProcess, runProcessSync } from "./process/runner.mjs";
|
|
4
|
+
export { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from "./process/contract.mjs";
|
|
5
|
+
//# sourceMappingURL=process.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { processFailure, processFailureFromResult, processFailed } from \"./process/failure.ts\";\nexport { PLAIN_TEXT_PROCESS_ENV, plainTextProcessEnv } from \"./process/env.ts\";\nexport { runProcess, runProcessSync } from \"./process/runner.ts\";\nexport { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from \"./process/contract.ts\";\nexport type {\n ProcessFailure,\n ProcessResult,\n RunProcessOptions,\n RunProcessSyncOptions\n} from \"./process/contract.ts\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAsBnD,0CAA0C;AAC1C,MAAM,UAAU,6BAA6B,CAAC,IAAa;IACzD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,OAAO,eAAe,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/F,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe;QACf,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAa;IAC9C,OAAO,oBAAoB,CACzB,IAAI,EACJ;QACE,cAAc;QACd,qBAAqB;QACrB,qBAAqB;QACrB,YAAY;QACZ,iBAAiB;QACjB,oBAAoB;QACpB,aAAa;QACb,mBAAmB;KACpB,EACD,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAYD,SAAS,YAAY,CAAC,KAAwC;IAC5D,OAAO;QACL,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,YAAY,CAAC;QACxD,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACtE,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACtE,UAAU,EAAE,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;QACpD,kBAAkB,EAAE,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpE,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;QACtD,iBAAiB,EAAE,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC;KACnE,CAAC;AACJ,CAAC;AAYD,SAAS,wBAAwB,CAC/B,eAAwB,EACxB,MAAoB;IAEpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,CACL,MAAM,CAAC,YAAY;QACjB,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,iBAAiB;QACpF,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,UAAU;QAC9C,MAAM,CAAC,kBAAkB,IAAI,+BAA+B;QAC5D,eAAe,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,OAAO,CACL,MAAM,CAAC,YAAY,KAAK,SAAS;QACjC,MAAM,CAAC,mBAAmB,KAAK,SAAS;QACxC,MAAM,CAAC,mBAAmB,KAAK,SAAS;QACxC,MAAM,CAAC,UAAU,KAAK,SAAS;QAC/B,MAAM,CAAC,kBAAkB,KAAK,SAAS;QACvC,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,MAAM,CAAC,iBAAiB,KAAK,SAAS,CACvC,CAAC;AACJ,CAAC","sourcesContent":["import {\n exactFinalDataRecord,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\n/** 单次运行最多发布的 JSON Schema issue Record 数量。 */\nexport const MAX_REPORTED_JSON_SCHEMA_ISSUES = 100;\n\n/** `json-schema-validation` 在 passed/failed outcome 中发布的主数据。 */\nexport interface JsonSchemaValidationFinalData {\n /** Definition 中已声明的 binding 总数。 */\n readonly bindingCount: number;\n /** 因所引用 schema 存在 document 或 compile issue 而未验证 instance 的 binding 数。 */\n readonly blockedBindingCount: number;\n /** instance out-of-scope、document invalid 或不符合对应 schema 的 binding 数。 */\n readonly invalidBindingCount: number;\n /** schema document、compile、instance 与 keyword issue 的总数。 */\n readonly issueCount: number;\n /** 是否因发布上限而省略了一个或多个 issue Record。 */\n readonly issuesTruncated: boolean;\n /** 实际发布为 Record 的 issue 数。 */\n readonly reportedIssueCount: number;\n /** Definition 中声明的不同 schema identity 数。 */\n readonly schemaCount: number;\n /** input 符合对应 schema 的 binding 数。 */\n readonly validBindingCount: number;\n}\n\n/** 验证计数与截断不变量并脱离 canonical final data。 */\nexport function parseJsonSchemaValidationData(data: unknown): JsonSchemaValidationFinalData {\n const value = jsonSchemaFinalDataRecord(data);\n const counts = parsedCounts(value);\n const issuesTruncated = value.issuesTruncated;\n if (typeof issuesTruncated !== \"boolean\" || !validFinalDataInvariants(issuesTruncated, counts)) {\n throw invalidFinalData(\"jsonSchemaValidation\");\n }\n return Object.freeze({\n bindingCount: counts.bindingCount,\n blockedBindingCount: counts.blockedBindingCount,\n invalidBindingCount: counts.invalidBindingCount,\n issueCount: counts.issueCount,\n issuesTruncated,\n reportedIssueCount: counts.reportedIssueCount,\n schemaCount: counts.schemaCount,\n validBindingCount: counts.validBindingCount\n });\n}\n\nfunction jsonSchemaFinalDataRecord(data: unknown): Readonly<Record<string, unknown>> {\n return exactFinalDataRecord(\n data,\n [\n \"bindingCount\",\n \"blockedBindingCount\",\n \"invalidBindingCount\",\n \"issueCount\",\n \"issuesTruncated\",\n \"reportedIssueCount\",\n \"schemaCount\",\n \"validBindingCount\"\n ],\n \"jsonSchemaValidation\"\n );\n}\n\ninterface ParsedCounts {\n readonly bindingCount: number | undefined;\n readonly blockedBindingCount: number | undefined;\n readonly invalidBindingCount: number | undefined;\n readonly issueCount: number | undefined;\n readonly reportedIssueCount: number | undefined;\n readonly schemaCount: number | undefined;\n readonly validBindingCount: number | undefined;\n}\n\nfunction parsedCounts(value: Readonly<Record<string, unknown>>): ParsedCounts {\n return {\n bindingCount: nonNegativeSafeInteger(value.bindingCount),\n blockedBindingCount: nonNegativeSafeInteger(value.blockedBindingCount),\n invalidBindingCount: nonNegativeSafeInteger(value.invalidBindingCount),\n issueCount: nonNegativeSafeInteger(value.issueCount),\n reportedIssueCount: nonNegativeSafeInteger(value.reportedIssueCount),\n schemaCount: nonNegativeSafeInteger(value.schemaCount),\n validBindingCount: nonNegativeSafeInteger(value.validBindingCount)\n };\n}\n\ninterface CompleteCounts {\n readonly bindingCount: number;\n readonly blockedBindingCount: number;\n readonly invalidBindingCount: number;\n readonly issueCount: number;\n readonly reportedIssueCount: number;\n readonly schemaCount: number;\n readonly validBindingCount: number;\n}\n\nfunction validFinalDataInvariants(\n issuesTruncated: boolean,\n counts: ParsedCounts\n): counts is CompleteCounts {\n if (!allCountsDefined(counts)) return false;\n return (\n counts.bindingCount ===\n counts.blockedBindingCount + counts.invalidBindingCount + counts.validBindingCount &&\n counts.reportedIssueCount <= counts.issueCount &&\n counts.reportedIssueCount <= MAX_REPORTED_JSON_SCHEMA_ISSUES &&\n issuesTruncated === counts.issueCount > counts.reportedIssueCount\n );\n}\n\nfunction allCountsDefined(counts: ParsedCounts): counts is CompleteCounts {\n return (\n counts.bindingCount !== undefined &&\n counts.blockedBindingCount !== undefined &&\n counts.invalidBindingCount !== undefined &&\n counts.issueCount !== undefined &&\n counts.reportedIssueCount !== undefined &&\n counts.schemaCount !== undefined &&\n counts.validBindingCount !== undefined\n );\n}\n"]}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { snapshotClosedArray, snapshotClosedRecord, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
2
|
+
import { isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
|
|
2
3
|
import { validProjectFileSelection } from "../project-files/configuration.mjs";
|
|
3
|
-
function exactRecord(value, keys) {
|
|
4
|
-
const record = snapshotClosedRecord(value);
|
|
5
|
-
return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
|
|
6
|
-
}
|
|
7
|
-
function positiveSafeInteger(value) {
|
|
8
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
9
|
-
}
|
|
10
4
|
export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
11
|
-
const options =
|
|
5
|
+
const options = snapshotExactClosedRecord(candidateOptions, [
|
|
12
6
|
"files",
|
|
13
7
|
"maximumBytes",
|
|
14
8
|
"schemaIdentity",
|
|
@@ -18,7 +12,7 @@ export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
|
18
12
|
]);
|
|
19
13
|
if (options === undefined ||
|
|
20
14
|
!validProjectFileSelection(options.files) ||
|
|
21
|
-
!
|
|
15
|
+
!isPositiveSafeInteger(options.maximumBytes) ||
|
|
22
16
|
!validJsonSchemaIdentity(options.schemaIdentity) ||
|
|
23
17
|
!validJsonSchemaReferenceResolution(options.referenceResolution)) {
|
|
24
18
|
return false;
|
|
@@ -31,7 +25,7 @@ export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
|
31
25
|
validJsonSchemaBindings(bindings, declaredSchemaIds));
|
|
32
26
|
}
|
|
33
27
|
function validJsonSchemaIdentity(candidateIdentity) {
|
|
34
|
-
const identity =
|
|
28
|
+
const identity = snapshotExactClosedRecord(candidateIdentity, ["mode"]);
|
|
35
29
|
return (identity !== undefined &&
|
|
36
30
|
(identity.mode === "require-match" ||
|
|
37
31
|
identity.mode === "configuration-authoritative" ||
|
|
@@ -43,11 +37,11 @@ function validJsonSchemaReferenceResolution(candidateResolution) {
|
|
|
43
37
|
return false;
|
|
44
38
|
}
|
|
45
39
|
if (referenceResolution.mode === "offline") {
|
|
46
|
-
return
|
|
40
|
+
return snapshotExactClosedRecord(referenceResolution, ["mode"]) !== undefined;
|
|
47
41
|
}
|
|
48
42
|
if (referenceResolution.mode !== "allowlisted")
|
|
49
43
|
return false;
|
|
50
|
-
const allowlisted =
|
|
44
|
+
const allowlisted = snapshotExactClosedRecord(referenceResolution, ["mode", "sources"]);
|
|
51
45
|
const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);
|
|
52
46
|
return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);
|
|
53
47
|
}
|
|
@@ -84,10 +78,10 @@ function validatedReferenceSource(sourceCandidate) {
|
|
|
84
78
|
return httpsSource === undefined ? undefined : { kind: "https", ...httpsSource };
|
|
85
79
|
}
|
|
86
80
|
function validBundledSource(source) {
|
|
87
|
-
return
|
|
81
|
+
return snapshotExactClosedRecord(source, ["kind", "catalog"])?.catalog === "json-schema-2020-12";
|
|
88
82
|
}
|
|
89
83
|
function validatedHttpsSource(source) {
|
|
90
|
-
const httpsSource =
|
|
84
|
+
const httpsSource = snapshotExactClosedRecord(source, ["kind", "id", "origin", "pathPrefix"]);
|
|
91
85
|
if (httpsSource === undefined ||
|
|
92
86
|
!safeAbsoluteIdentifier(httpsSource.id) ||
|
|
93
87
|
!safeHttpsOrigin(httpsSource.origin) ||
|
|
@@ -100,7 +94,7 @@ function validatedSchemaRegistryIds(schemas) {
|
|
|
100
94
|
const declaredSchemaIds = new Set();
|
|
101
95
|
const schemaPaths = new Set();
|
|
102
96
|
for (const schemaCandidate of schemas) {
|
|
103
|
-
const schemaRecord =
|
|
97
|
+
const schemaRecord = snapshotExactClosedRecord(schemaCandidate, ["id", "path"]);
|
|
104
98
|
if (schemaRecord === undefined ||
|
|
105
99
|
!safeAbsoluteIdentifier(schemaRecord.id) ||
|
|
106
100
|
!normalizedProjectJsonPath(schemaRecord.path) ||
|
|
@@ -117,7 +111,11 @@ function validJsonSchemaBindings(bindings, declaredSchemaIds) {
|
|
|
117
111
|
const bindingIds = new Set();
|
|
118
112
|
const bindingTargets = new Set();
|
|
119
113
|
for (const bindingCandidate of bindings) {
|
|
120
|
-
const bindingRecord =
|
|
114
|
+
const bindingRecord = snapshotExactClosedRecord(bindingCandidate, [
|
|
115
|
+
"id",
|
|
116
|
+
"instancePath",
|
|
117
|
+
"schemaId"
|
|
118
|
+
]);
|
|
121
119
|
if (bindingRecord === undefined ||
|
|
122
120
|
!safeBindingId(bindingRecord.id) ||
|
|
123
121
|
!normalizedProjectJsonPath(bindingRecord.instancePath) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasExactPlainRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nexport function validJsonSchemaValidationOptions(\n candidateOptions: unknown\n): candidateOptions is ResolvedJsonSchemaValidationOptions {\n const options = exactRecord(candidateOptions, [\n \"files\",\n \"maximumBytes\",\n \"schemaIdentity\",\n \"referenceResolution\",\n \"schemas\",\n \"bindings\"\n ]);\n if (\n options === undefined ||\n !validProjectFileSelection(options.files) ||\n !positiveSafeInteger(options.maximumBytes) ||\n !validJsonSchemaIdentity(options.schemaIdentity) ||\n !validJsonSchemaReferenceResolution(options.referenceResolution)\n ) {\n return false;\n }\n\n const schemas = snapshotClosedArray(options.schemas);\n const bindings = snapshotClosedArray(options.bindings);\n const declaredSchemaIds = schemas === undefined ? undefined : validatedSchemaRegistryIds(schemas);\n return (\n bindings !== undefined &&\n declaredSchemaIds !== undefined &&\n validJsonSchemaBindings(bindings, declaredSchemaIds)\n );\n}\n\nfunction validJsonSchemaIdentity(candidateIdentity: unknown): boolean {\n const identity = exactRecord(candidateIdentity, [\"mode\"]);\n return (\n identity !== undefined &&\n (identity.mode === \"require-match\" ||\n identity.mode === \"configuration-authoritative\" ||\n identity.mode === \"document-authoritative\")\n );\n}\n\nfunction validJsonSchemaReferenceResolution(candidateResolution: unknown): boolean {\n const referenceResolution = snapshotClosedRecord(candidateResolution);\n if (referenceResolution === undefined || typeof referenceResolution.mode !== \"string\") {\n return false;\n }\n if (referenceResolution.mode === \"offline\") {\n return exactRecord(referenceResolution, [\"mode\"]) !== undefined;\n }\n if (referenceResolution.mode !== \"allowlisted\") return false;\n\n const allowlisted = exactRecord(referenceResolution, [\"mode\", \"sources\"]);\n const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);\n return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);\n}\n\nfunction validJsonSchemaReferenceSources(sources: readonly unknown[]): boolean {\n const sourceIds = new Set<string>();\n const sourceLocations = new Set<string>();\n let bundledCatalogCount = 0;\n for (const sourceCandidate of sources) {\n const source = validatedReferenceSource(sourceCandidate);\n if (source === undefined) return false;\n if (source.kind === \"bundled\") {\n bundledCatalogCount += 1;\n if (bundledCatalogCount > 1) return false;\n continue;\n }\n if (sourceIds.has(source.id) || sourceLocations.has(source.location)) return false;\n sourceIds.add(source.id);\n sourceLocations.add(source.location);\n }\n return true;\n}\n\nfunction validatedReferenceSource(sourceCandidate: unknown) {\n const source = snapshotClosedRecord(sourceCandidate);\n if (source === undefined || typeof source.kind !== \"string\") return undefined;\n if (source.kind === \"bundled\")\n return validBundledSource(source) ? { kind: \"bundled\" as const } : undefined;\n if (source.kind !== \"https\") return undefined;\n const httpsSource = validatedHttpsSource(source);\n return httpsSource === undefined ? undefined : { kind: \"https\" as const, ...httpsSource };\n}\n\nfunction validBundledSource(source: Readonly<Record<string, unknown>>): boolean {\n return exactRecord(source, [\"kind\", \"catalog\"])?.catalog === \"json-schema-2020-12\";\n}\n\nfunction validatedHttpsSource(source: Readonly<Record<string, unknown>>) {\n const httpsSource = exactRecord(source, [\"kind\", \"id\", \"origin\", \"pathPrefix\"]);\n if (\n httpsSource === undefined ||\n !safeAbsoluteIdentifier(httpsSource.id) ||\n !safeHttpsOrigin(httpsSource.origin) ||\n !safePathPrefix(httpsSource.pathPrefix)\n )\n return undefined;\n return { id: httpsSource.id, location: `${httpsSource.origin}\\n${httpsSource.pathPrefix}` };\n}\n\n/** Returns declared IDs only after the whole schema registry satisfies its closed authoring invariant. */\nfunction validatedSchemaRegistryIds(schemas: readonly unknown[]): ReadonlySet<string> | undefined {\n const declaredSchemaIds = new Set<string>();\n const schemaPaths = new Set<string>();\n for (const schemaCandidate of schemas) {\n const schemaRecord = exactRecord(schemaCandidate, [\"id\", \"path\"]);\n if (\n schemaRecord === undefined ||\n !safeAbsoluteIdentifier(schemaRecord.id) ||\n !normalizedProjectJsonPath(schemaRecord.path) ||\n declaredSchemaIds.has(schemaRecord.id) ||\n schemaPaths.has(schemaRecord.path)\n ) {\n return undefined;\n }\n declaredSchemaIds.add(schemaRecord.id);\n schemaPaths.add(schemaRecord.path);\n }\n return declaredSchemaIds;\n}\n\nfunction validJsonSchemaBindings(\n bindings: readonly unknown[],\n declaredSchemaIds: ReadonlySet<string>\n): boolean {\n const bindingIds = new Set<string>();\n const bindingTargets = new Set<string>();\n for (const bindingCandidate of bindings) {\n const bindingRecord = exactRecord(bindingCandidate, [\"id\", \"instancePath\", \"schemaId\"]);\n if (\n bindingRecord === undefined ||\n !safeBindingId(bindingRecord.id) ||\n !normalizedProjectJsonPath(bindingRecord.instancePath) ||\n typeof bindingRecord.schemaId !== \"string\" ||\n !declaredSchemaIds.has(bindingRecord.schemaId) ||\n bindingIds.has(bindingRecord.id)\n ) {\n return false;\n }\n const bindingTarget = `${bindingRecord.instancePath}\\n${bindingRecord.schemaId}`;\n if (bindingTargets.has(bindingTarget)) return false;\n bindingIds.add(bindingRecord.id);\n bindingTargets.add(bindingTarget);\n }\n return true;\n}\n\nfunction safeAbsoluteIdentifier(identifier: unknown): identifier is string {\n if (!boundedNonEmptyString(identifier, 256)) return false;\n try {\n const url = new URL(identifier);\n return safeIdentifierUrl(url, identifier);\n } catch {\n return false;\n }\n}\n\nfunction safeIdentifierUrl(url: URL, identifier: string): boolean {\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n}\n\nfunction safeHttpsOrigin(origin: unknown): origin is string {\n if (!boundedNonEmptyString(origin, 200)) return false;\n try {\n const url = new URL(origin);\n return safeHttpsOriginUrl(url, origin);\n } catch {\n return false;\n }\n}\n\nfunction safeHttpsOriginUrl(url: URL, origin: string): boolean {\n return (\n url.protocol === \"https:\" &&\n url.hostname.length > 0 &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.pathname === \"/\" &&\n url.origin === origin\n );\n}\n\nfunction safePathPrefix(pathPrefix: unknown): pathPrefix is string {\n if (!validPathPrefixSyntax(pathPrefix)) return false;\n const segments = pathPrefix.split(\"/\");\n return segments.every(\n (segment, index) => index === 0 || segment === \"\" || (segment !== \".\" && segment !== \"..\")\n );\n}\n\nfunction validPathPrefixSyntax(pathPrefix: unknown): pathPrefix is string {\n return (\n boundedNonEmptyString(pathPrefix, 256) &&\n pathPrefix.startsWith(\"/\") &&\n (pathPrefix === \"/\" || pathPrefix.endsWith(\"/\")) &&\n !pathPrefix.includes(\"\\\\\") &&\n !pathPrefix.includes(\"?\") &&\n !pathPrefix.includes(\"#\") &&\n !pathPrefix.includes(\"//\")\n );\n}\n\nfunction boundedNonEmptyString(value: unknown, maximumLength: number): value is string {\n return typeof value === \"string\" && value.length > 0 && value.length <= maximumLength;\n}\n\nfunction normalizedProjectJsonPath(projectPath: unknown): projectPath is string {\n if (\n typeof projectPath !== \"string\" ||\n projectPath.length === 0 ||\n projectPath.length > 512 ||\n !projectPath.endsWith(\".json\") ||\n projectPath.startsWith(\"/\") ||\n projectPath.includes(\"\\\\\") ||\n projectPath.includes(\"\\u0000\")\n ) {\n return false;\n }\n return projectPath\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\nfunction safeBindingId(bindingId: unknown): bindingId is string {\n return typeof bindingId === \"string\" && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u.test(bindingId);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n snapshotClosedArray,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { isPositiveSafeInteger } from \"../../data-boundary/value-shapes.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\n\nexport function validJsonSchemaValidationOptions(\n candidateOptions: unknown\n): candidateOptions is ResolvedJsonSchemaValidationOptions {\n const options = snapshotExactClosedRecord(candidateOptions, [\n \"files\",\n \"maximumBytes\",\n \"schemaIdentity\",\n \"referenceResolution\",\n \"schemas\",\n \"bindings\"\n ]);\n if (\n options === undefined ||\n !validProjectFileSelection(options.files) ||\n !isPositiveSafeInteger(options.maximumBytes) ||\n !validJsonSchemaIdentity(options.schemaIdentity) ||\n !validJsonSchemaReferenceResolution(options.referenceResolution)\n ) {\n return false;\n }\n\n const schemas = snapshotClosedArray(options.schemas);\n const bindings = snapshotClosedArray(options.bindings);\n const declaredSchemaIds = schemas === undefined ? undefined : validatedSchemaRegistryIds(schemas);\n return (\n bindings !== undefined &&\n declaredSchemaIds !== undefined &&\n validJsonSchemaBindings(bindings, declaredSchemaIds)\n );\n}\n\nfunction validJsonSchemaIdentity(candidateIdentity: unknown): boolean {\n const identity = snapshotExactClosedRecord(candidateIdentity, [\"mode\"]);\n return (\n identity !== undefined &&\n (identity.mode === \"require-match\" ||\n identity.mode === \"configuration-authoritative\" ||\n identity.mode === \"document-authoritative\")\n );\n}\n\nfunction validJsonSchemaReferenceResolution(candidateResolution: unknown): boolean {\n const referenceResolution = snapshotClosedRecord(candidateResolution);\n if (referenceResolution === undefined || typeof referenceResolution.mode !== \"string\") {\n return false;\n }\n if (referenceResolution.mode === \"offline\") {\n return snapshotExactClosedRecord(referenceResolution, [\"mode\"]) !== undefined;\n }\n if (referenceResolution.mode !== \"allowlisted\") return false;\n\n const allowlisted = snapshotExactClosedRecord(referenceResolution, [\"mode\", \"sources\"]);\n const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);\n return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);\n}\n\nfunction validJsonSchemaReferenceSources(sources: readonly unknown[]): boolean {\n const sourceIds = new Set<string>();\n const sourceLocations = new Set<string>();\n let bundledCatalogCount = 0;\n for (const sourceCandidate of sources) {\n const source = validatedReferenceSource(sourceCandidate);\n if (source === undefined) return false;\n if (source.kind === \"bundled\") {\n bundledCatalogCount += 1;\n if (bundledCatalogCount > 1) return false;\n continue;\n }\n if (sourceIds.has(source.id) || sourceLocations.has(source.location)) return false;\n sourceIds.add(source.id);\n sourceLocations.add(source.location);\n }\n return true;\n}\n\nfunction validatedReferenceSource(sourceCandidate: unknown) {\n const source = snapshotClosedRecord(sourceCandidate);\n if (source === undefined || typeof source.kind !== \"string\") return undefined;\n if (source.kind === \"bundled\")\n return validBundledSource(source) ? { kind: \"bundled\" as const } : undefined;\n if (source.kind !== \"https\") return undefined;\n const httpsSource = validatedHttpsSource(source);\n return httpsSource === undefined ? undefined : { kind: \"https\" as const, ...httpsSource };\n}\n\nfunction validBundledSource(source: Readonly<Record<string, unknown>>): boolean {\n return snapshotExactClosedRecord(source, [\"kind\", \"catalog\"])?.catalog === \"json-schema-2020-12\";\n}\n\nfunction validatedHttpsSource(source: Readonly<Record<string, unknown>>) {\n const httpsSource = snapshotExactClosedRecord(source, [\"kind\", \"id\", \"origin\", \"pathPrefix\"]);\n if (\n httpsSource === undefined ||\n !safeAbsoluteIdentifier(httpsSource.id) ||\n !safeHttpsOrigin(httpsSource.origin) ||\n !safePathPrefix(httpsSource.pathPrefix)\n )\n return undefined;\n return { id: httpsSource.id, location: `${httpsSource.origin}\\n${httpsSource.pathPrefix}` };\n}\n\n/** Returns declared IDs only after the whole schema registry satisfies its closed authoring invariant. */\nfunction validatedSchemaRegistryIds(schemas: readonly unknown[]): ReadonlySet<string> | undefined {\n const declaredSchemaIds = new Set<string>();\n const schemaPaths = new Set<string>();\n for (const schemaCandidate of schemas) {\n const schemaRecord = snapshotExactClosedRecord(schemaCandidate, [\"id\", \"path\"]);\n if (\n schemaRecord === undefined ||\n !safeAbsoluteIdentifier(schemaRecord.id) ||\n !normalizedProjectJsonPath(schemaRecord.path) ||\n declaredSchemaIds.has(schemaRecord.id) ||\n schemaPaths.has(schemaRecord.path)\n ) {\n return undefined;\n }\n declaredSchemaIds.add(schemaRecord.id);\n schemaPaths.add(schemaRecord.path);\n }\n return declaredSchemaIds;\n}\n\nfunction validJsonSchemaBindings(\n bindings: readonly unknown[],\n declaredSchemaIds: ReadonlySet<string>\n): boolean {\n const bindingIds = new Set<string>();\n const bindingTargets = new Set<string>();\n for (const bindingCandidate of bindings) {\n const bindingRecord = snapshotExactClosedRecord(bindingCandidate, [\n \"id\",\n \"instancePath\",\n \"schemaId\"\n ]);\n if (\n bindingRecord === undefined ||\n !safeBindingId(bindingRecord.id) ||\n !normalizedProjectJsonPath(bindingRecord.instancePath) ||\n typeof bindingRecord.schemaId !== \"string\" ||\n !declaredSchemaIds.has(bindingRecord.schemaId) ||\n bindingIds.has(bindingRecord.id)\n ) {\n return false;\n }\n const bindingTarget = `${bindingRecord.instancePath}\\n${bindingRecord.schemaId}`;\n if (bindingTargets.has(bindingTarget)) return false;\n bindingIds.add(bindingRecord.id);\n bindingTargets.add(bindingTarget);\n }\n return true;\n}\n\nfunction safeAbsoluteIdentifier(identifier: unknown): identifier is string {\n if (!boundedNonEmptyString(identifier, 256)) return false;\n try {\n const url = new URL(identifier);\n return safeIdentifierUrl(url, identifier);\n } catch {\n return false;\n }\n}\n\nfunction safeIdentifierUrl(url: URL, identifier: string): boolean {\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n}\n\nfunction safeHttpsOrigin(origin: unknown): origin is string {\n if (!boundedNonEmptyString(origin, 200)) return false;\n try {\n const url = new URL(origin);\n return safeHttpsOriginUrl(url, origin);\n } catch {\n return false;\n }\n}\n\nfunction safeHttpsOriginUrl(url: URL, origin: string): boolean {\n return (\n url.protocol === \"https:\" &&\n url.hostname.length > 0 &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.pathname === \"/\" &&\n url.origin === origin\n );\n}\n\nfunction safePathPrefix(pathPrefix: unknown): pathPrefix is string {\n if (!validPathPrefixSyntax(pathPrefix)) return false;\n const segments = pathPrefix.split(\"/\");\n return segments.every(\n (segment, index) => index === 0 || segment === \"\" || (segment !== \".\" && segment !== \"..\")\n );\n}\n\nfunction validPathPrefixSyntax(pathPrefix: unknown): pathPrefix is string {\n return (\n boundedNonEmptyString(pathPrefix, 256) &&\n pathPrefix.startsWith(\"/\") &&\n (pathPrefix === \"/\" || pathPrefix.endsWith(\"/\")) &&\n !pathPrefix.includes(\"\\\\\") &&\n !pathPrefix.includes(\"?\") &&\n !pathPrefix.includes(\"#\") &&\n !pathPrefix.includes(\"//\")\n );\n}\n\nfunction boundedNonEmptyString(value: unknown, maximumLength: number): value is string {\n return typeof value === \"string\" && value.length > 0 && value.length <= maximumLength;\n}\n\nfunction normalizedProjectJsonPath(projectPath: unknown): projectPath is string {\n if (\n typeof projectPath !== \"string\" ||\n projectPath.length === 0 ||\n projectPath.length > 512 ||\n !projectPath.endsWith(\".json\") ||\n projectPath.startsWith(\"/\") ||\n projectPath.includes(\"\\\\\") ||\n projectPath.includes(\"\\u0000\")\n ) {\n return false;\n }\n return projectPath\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\nfunction safeBindingId(bindingId: unknown): bindingId is string {\n return typeof bindingId === \"string\" && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u.test(bindingId);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\nexport type JsonSchemaIdentityMode =\n | \"require-match\"\n | \"configuration-authoritative\"\n | \"document-authoritative\";\n\nexport interface JsonSchemaIdentity {\n readonly mode: JsonSchemaIdentityMode;\n}\n\nexport type JsonSchemaReferenceSource =\n | Readonly<{ readonly kind: \"bundled\"; readonly catalog: \"json-schema-2020-12\" }>\n | Readonly<{\n readonly kind: \"https\";\n readonly id: string;\n readonly origin: string;\n readonly pathPrefix: string;\n }>;\n\nexport type JsonSchemaReferenceResolution =\n | Readonly<{ readonly mode: \"offline\" }>\n | Readonly<{\n readonly mode: \"allowlisted\";\n readonly sources: readonly JsonSchemaReferenceSource[];\n }>;\n\nexport interface RegisteredJsonSchema {\n readonly id: string;\n readonly path: string;\n}\n\nexport interface JsonSchemaInstanceBinding {\n readonly id: string;\n readonly instancePath: string;\n readonly schemaId: string;\n}\n\n/** `jsonSchemaValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonSchemaValidationOptions {\n /** schema/instance declarations 必须属于的 repository-file selection。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 每个 local schema/instance document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n /** 整个 Check 共用的 schema root identity 规则;不得按 schema 混用。 */\n readonly schemaIdentity?: JsonSchemaIdentity;\n /** 默认离线;额外 schema source 必须显式 allowlist。 */\n readonly referenceResolution?: JsonSchemaReferenceResolution;\n /** 显式注册的 schema resources;ID 是 binding 和 public fact 使用的安全 authoring identity。 */\n readonly schemas?: readonly RegisteredJsonSchema[];\n /** 明确把一个由本 Check file selection 批准的 instance path 绑定到已声明 schema。 */\n readonly bindings?: readonly JsonSchemaInstanceBinding[];\n}\n\n/** `json-schema-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonSchemaValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n readonly schemaIdentity: JsonSchemaIdentity;\n readonly referenceResolution: JsonSchemaReferenceResolution;\n readonly schemas: readonly RegisteredJsonSchema[];\n readonly bindings: readonly JsonSchemaInstanceBinding[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\n/** 已注册 schema 的 root `$id` 与配置 identity 之间的全 Check 统一规则。 */\nexport type JsonSchemaIdentityMode =\n /** root `$id` 必须等于 `schemas[].id`,该配置 ID 也是 engine identity。 */\n | \"require-match\"\n /** 配置 ID 是 engine identity;object schema 的 invocation-local compile copy 使用该 `$id`。 */\n | \"configuration-authoritative\"\n /** 安全的 root `$id` 是 engine identity;配置 ID 仍是 binding 与公开事实的标签。 */\n | \"document-authoritative\";\n\n/** 整个 Check 共用、不能按单个 schema 混用的 root schema identity policy。 */\nexport interface JsonSchemaIdentity {\n /** root `$id` 与配置 `schemas[].id` 的关系。 */\n readonly mode: JsonSchemaIdentityMode;\n}\n\n/** allowlisted 引用解析可读取的单一 Schema 来源及其固定边界。 */\nexport type JsonSchemaReferenceSource =\n /** Package 固定的 JSON Schema catalog;它不授权网络请求。 */\n | Readonly<{ readonly kind: \"bundled\"; readonly catalog: \"json-schema-2020-12\" }>\n | Readonly<{\n /** 只允许本 source 明确限定的 HTTPS reference scope。 */\n readonly kind: \"https\";\n /** 调用方为本 source 选择的安全稳定 identity,不是请求 URL。 */\n readonly id: string;\n /** 精确 HTTPS origin;不含 path、credentials、query 或 fragment。 */\n readonly origin: string;\n /** 已授权 URL path 的边界;从 `/` 开始,非 root prefix 必须以 `/` 结束。 */\n readonly pathPrefix: string;\n }>;\n\n/** 本次 Check 解析 local、bundled 与 allowlisted Schema 引用的封闭策略。 */\nexport type JsonSchemaReferenceResolution =\n /** 只使用 local schemas 和允许的 bundled catalog,不读取额外 HTTPS schema。 */\n | Readonly<{ readonly mode: \"offline\" }>\n | Readonly<{\n /** 只从 `sources` 的精确 scope 读取额外 schema;没有 implicit registry、headers 或 redirects。 */\n readonly mode: \"allowlisted\";\n /** 完整替换的明确 source 集合;每项决定自身可读取的 reference scope。 */\n readonly sources: readonly JsonSchemaReferenceSource[];\n }>;\n\n/** 调用方注册的一份 local schema resource;注册表不自动发现 schema。 */\nexport interface RegisteredJsonSchema {\n /** binding 与公开 facts 使用的安全 schema identity。 */\n readonly id: string;\n /** 已由 `files` selection 批准的 normalized project-relative `.json` path。 */\n readonly path: string;\n}\n\n/** 调用方将一个已批准 local JSON instance 明确绑定到已注册 schema 的关系。 */\nexport interface JsonSchemaInstanceBinding {\n /** 本次 Check 内唯一、用于公开 facts 的 binding identity。 */\n readonly id: string;\n /** 已由 `files` selection 批准的 normalized project-relative `.json` instance path。 */\n readonly instancePath: string;\n /** 必须引用 `schemas` 中已注册 schema 的 identity。 */\n readonly schemaId: string;\n}\n\n/** `jsonSchemaValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonSchemaValidationOptions {\n /** schema/instance declarations 必须属于的 repository-file selection。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 每个 local schema/instance document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n /** 整个 Check 共用的 schema root identity 规则;不得按 schema 混用。 */\n readonly schemaIdentity?: JsonSchemaIdentity;\n /** 默认离线;额外 schema source 必须显式 allowlist。 */\n readonly referenceResolution?: JsonSchemaReferenceResolution;\n /** 显式注册的 schema resources;ID 是 binding 和 public fact 使用的安全 authoring identity。 */\n readonly schemas?: readonly RegisteredJsonSchema[];\n /** 明确把一个由本 Check file selection 批准的 instance path 绑定到已声明 schema。 */\n readonly bindings?: readonly JsonSchemaInstanceBinding[];\n}\n\n/** `json-schema-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonSchemaValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n readonly schemaIdentity: JsonSchemaIdentity;\n readonly referenceResolution: JsonSchemaReferenceResolution;\n readonly schemas: readonly RegisteredJsonSchema[];\n readonly bindings: readonly JsonSchemaInstanceBinding[];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAgBlC,kEAAkE;AAClE,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,MAAM,KAAK,GAAG,oBAAoB,CAChC,IAAI,EACJ,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,CAAC,EAC9F,gBAAgB,CACjB,CAAC;IACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5E,IACE,gBAAgB,KAAK,SAAS;QAC9B,cAAc,KAAK,SAAS;QAC5B,gBAAgB,KAAK,SAAS;QAC9B,UAAU,KAAK,SAAS;QACxB,kBAAkB,KAAK,SAAS;QAChC,gBAAgB,KAAK,cAAc,GAAG,gBAAgB;QACtD,UAAU,KAAK,gBAAgB,GAAG,kBAAkB,EACpD,CAAC;QACD,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n exactFinalDataRecord,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\n/** `json-validation` 在 passed/failed outcome 中发布的主数据。 */\nexport interface JsonValidationFinalData {\n /** 已完成 JSON parse 判定的文件数,恒等于 validFileCount 与 invalidFileCount 之和。 */\n readonly scannedFileCount: number;\n /** 被 bounded strict-document boundary 接受为有效 JSON 的文件数。 */\n readonly validFileCount: number;\n /** 形成 `too-large`、encoding、syntax 或 duplicate-key document issue 的文件数。 */\n readonly invalidFileCount: number;\n /** 全部 invalid file 与 rejected input 的合计问题数。 */\n readonly issueCount: number;\n /** files policy 已选中、但因不是 lower-case `.json` path 而被拒绝的输入数。 */\n readonly rejectedInputCount: number;\n}\n\n/** 验证计数不变量并脱离一份 `json-validation` canonical final-data object。 */\nexport function parseJsonValidationData(data: unknown): JsonValidationFinalData {\n const value = exactFinalDataRecord(\n data,\n [\"scannedFileCount\", \"validFileCount\", \"invalidFileCount\", \"issueCount\", \"rejectedInputCount\"],\n \"jsonValidation\"\n );\n const scannedFileCount = nonNegativeSafeInteger(value.scannedFileCount);\n const validFileCount = nonNegativeSafeInteger(value.validFileCount);\n const invalidFileCount = nonNegativeSafeInteger(value.invalidFileCount);\n const issueCount = nonNegativeSafeInteger(value.issueCount);\n const rejectedInputCount = nonNegativeSafeInteger(value.rejectedInputCount);\n if (\n scannedFileCount === undefined ||\n validFileCount === undefined ||\n invalidFileCount === undefined ||\n issueCount === undefined ||\n rejectedInputCount === undefined ||\n scannedFileCount !== validFileCount + invalidFileCount ||\n issueCount !== invalidFileCount + rejectedInputCount\n ) {\n throw invalidFinalData(\"jsonValidation\");\n }\n return Object.freeze({\n scannedFileCount,\n validFileCount,\n invalidFileCount,\n issueCount,\n rejectedInputCount\n });\n}\n"]}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
2
|
+
import { isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
|
|
2
3
|
import { validProjectFileSelection } from "../project-files/configuration.mjs";
|
|
3
|
-
function exactRecord(value, keys) {
|
|
4
|
-
const record = snapshotClosedRecord(value);
|
|
5
|
-
return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
|
|
6
|
-
}
|
|
7
|
-
function positiveSafeInteger(value) {
|
|
8
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
9
|
-
}
|
|
10
4
|
export function validJsonValidationOptions(value) {
|
|
11
|
-
const options =
|
|
5
|
+
const options = snapshotExactClosedRecord(value, ["files", "maximumBytes"]);
|
|
12
6
|
return (options !== undefined &&
|
|
13
7
|
validProjectFileSelection(options.files) &&
|
|
14
|
-
|
|
8
|
+
isPositiveSafeInteger(options.maximumBytes));
|
|
15
9
|
}
|
|
16
10
|
//# sourceMappingURL=options-validation.mjs.map
|