@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,9 +1,10 @@
|
|
|
1
1
|
import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
|
|
2
2
|
import { validateCheckDescriptor } from "../check/descriptor-validation.mjs";
|
|
3
|
-
import { snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
3
|
+
import { hasExactPlainRecordKeys, hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
4
|
+
import { isClosedCheckReason } from "./reason-shape.mjs";
|
|
4
5
|
export function validateCoreSnapshot(value) {
|
|
5
6
|
const snapshot = snapshotClosedRecord(value);
|
|
6
|
-
if (snapshot === undefined || !
|
|
7
|
+
if (snapshot === undefined || !hasExactPlainRecordKeys(snapshot, ["checks", "records"])) {
|
|
7
8
|
return invalid("$", "Core snapshot must contain only checks and records");
|
|
8
9
|
}
|
|
9
10
|
const checksInput = snapshotClosedArray(snapshot.checks);
|
|
@@ -42,7 +43,8 @@ function validateChecks(values) {
|
|
|
42
43
|
let previousCheckId;
|
|
43
44
|
for (const [index, value] of values.entries()) {
|
|
44
45
|
const check = snapshotClosedRecord(value);
|
|
45
|
-
if (check === undefined ||
|
|
46
|
+
if (check === undefined ||
|
|
47
|
+
!hasExactPlainRecordKeys(check, ["checkId", "displayName", "outcome"])) {
|
|
46
48
|
return invalid(`$.checks[${index}]`, "Core Check must be closed");
|
|
47
49
|
}
|
|
48
50
|
const definition = validateCheckDescriptor({
|
|
@@ -95,7 +97,7 @@ function validateRecords(values, checks) {
|
|
|
95
97
|
}
|
|
96
98
|
function validateRecordRow(value, index, ownerIds) {
|
|
97
99
|
const record = snapshotClosedRecord(value);
|
|
98
|
-
if (record === undefined || !
|
|
100
|
+
if (record === undefined || !hasExactPlainRecordKeys(record, ["checkId", "id", "data"]))
|
|
99
101
|
return invalid(`$.records[${index}]`, "Core Record must be closed");
|
|
100
102
|
if (typeof record.checkId !== "string" ||
|
|
101
103
|
!ownerIds.has(record.checkId) ||
|
|
@@ -123,7 +125,7 @@ function validateOutcome(value, path) {
|
|
|
123
125
|
}
|
|
124
126
|
function validateFinalOutcome(outcome, path) {
|
|
125
127
|
if (outcome.status === "passed" || outcome.status === "failed") {
|
|
126
|
-
if (!
|
|
128
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "data"]))
|
|
127
129
|
return invalid(path, "Final outcome is not closed");
|
|
128
130
|
const data = canonicalizeJsonObject(outcome.data);
|
|
129
131
|
return data === undefined
|
|
@@ -133,7 +135,10 @@ function validateFinalOutcome(outcome, path) {
|
|
|
133
135
|
return invalid(`${path}.status`, "Unknown Check outcome status");
|
|
134
136
|
}
|
|
135
137
|
function validateNotApplicableOutcome(outcome, path) {
|
|
136
|
-
if (!
|
|
138
|
+
if (!hasRequiredAndOptionalRecordKeys(outcome, {
|
|
139
|
+
optional: ["reason"],
|
|
140
|
+
required: ["status"]
|
|
141
|
+
}))
|
|
137
142
|
return invalid(path, "Not-applicable outcome is not closed");
|
|
138
143
|
const reason = validateReason(outcome.reason, false);
|
|
139
144
|
return reason === null
|
|
@@ -141,7 +146,7 @@ function validateNotApplicableOutcome(outcome, path) {
|
|
|
141
146
|
: accepted(Object.freeze(reason === undefined ? { status: "not-applicable" } : { status: "not-applicable", reason }));
|
|
142
147
|
}
|
|
143
148
|
function validateUnavailableOutcome(outcome, path) {
|
|
144
|
-
if (!
|
|
149
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "reason"]))
|
|
145
150
|
return invalid(path, "Unavailable outcome is not closed");
|
|
146
151
|
const reason = validateReason(outcome.reason, true);
|
|
147
152
|
return reason === null || reason === undefined
|
|
@@ -152,9 +157,12 @@ function validateReason(value, allowCheckIds) {
|
|
|
152
157
|
if (value === undefined)
|
|
153
158
|
return undefined;
|
|
154
159
|
const reason = snapshotClosedRecord(value);
|
|
155
|
-
if (!
|
|
160
|
+
if (!isClosedCheckReason(reason, allowCheckIds))
|
|
156
161
|
return null;
|
|
157
|
-
if (!
|
|
162
|
+
if (!hasRequiredAndOptionalRecordKeys(reason, {
|
|
163
|
+
optional: allowCheckIds ? ["checkIds"] : [],
|
|
164
|
+
required: ["code"]
|
|
165
|
+
}))
|
|
158
166
|
return null;
|
|
159
167
|
if (!Object.hasOwn(reason, "checkIds"))
|
|
160
168
|
return Object.freeze({ code: reason.code });
|
|
@@ -163,12 +171,6 @@ function validateReason(value, allowCheckIds) {
|
|
|
163
171
|
return null;
|
|
164
172
|
return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });
|
|
165
173
|
}
|
|
166
|
-
function isClosedReason(value, allowCheckIds) {
|
|
167
|
-
return (value !== undefined &&
|
|
168
|
-
typeof value.code === "string" &&
|
|
169
|
-
value.code.length > 0 &&
|
|
170
|
-
hasOptionalKeys(value, ["code"], allowCheckIds ? ["checkIds"] : []));
|
|
171
|
-
}
|
|
172
174
|
function normalizedReasonCheckIds(value, allowCheckIds) {
|
|
173
175
|
const checkIds = snapshotClosedArray(value);
|
|
174
176
|
if (!allowCheckIds ||
|
|
@@ -184,14 +186,6 @@ function normalizedReasonCheckIds(value, allowCheckIds) {
|
|
|
184
186
|
}
|
|
185
187
|
return Object.freeze(normalizedCheckIds);
|
|
186
188
|
}
|
|
187
|
-
function hasExactKeys(value, keys) {
|
|
188
|
-
return (Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key)));
|
|
189
|
-
}
|
|
190
|
-
function hasOptionalKeys(value, required, optional) {
|
|
191
|
-
const supported = new Set([...required, ...optional]);
|
|
192
|
-
return (required.every((key) => Object.hasOwn(value, key)) &&
|
|
193
|
-
Object.keys(value).every((key) => supported.has(key)));
|
|
194
|
-
}
|
|
195
189
|
function accepted(value) {
|
|
196
190
|
return Object.freeze({ ok: true, value });
|
|
197
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact-validation.mjs","sourceRoot":"","sources":["../../../src/check-settlement/fact-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport type { CoreCheck, CoreRecord, CoreSnapshot } from \"./facts.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport interface ValidationIssue {\n readonly path: string;\n readonly code:\n | \"duplicate\"\n | \"identity-mismatch\"\n | \"invalid-value\"\n | \"missing-field\"\n | \"unknown-field\";\n readonly message: string;\n}\n\nexport type ValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly [ValidationIssue, ...ValidationIssue[]] }\n>;\n\nexport function validateCoreSnapshot(value: unknown): ValidationResult<CoreSnapshot> {\n const snapshot = snapshotClosedRecord(value);\n if (snapshot === undefined || !hasExactKeys(snapshot, [\"checks\", \"records\"])) {\n return invalid(\"$\", \"Core snapshot must contain only checks and records\");\n }\n const checksInput = snapshotClosedArray(snapshot.checks);\n const recordsInput = snapshotClosedArray(snapshot.records);\n if (checksInput === undefined || recordsInput === undefined) {\n return invalid(\"$\", \"Core snapshot entities must be dense arrays\");\n }\n const checks = validateChecks(checksInput);\n if (!checks.ok) return checks;\n const reasonReferences = validateReasonReferences(checks.value);\n if (!reasonReferences.ok) return reasonReferences;\n const records = validateRecords(recordsInput, checks.value);\n if (!records.ok) return records;\n return accepted(Object.freeze({ checks: checks.value, records: records.value }));\n}\n\nfunction validateReasonReferences(checks: readonly CoreCheck[]): ValidationResult<void> {\n const knownCheckIds = new Set(checks.map((check) => check.checkId));\n for (const [index, check] of checks.entries()) {\n if (check.outcome.status !== \"unavailable\" || check.outcome.reason.checkIds === undefined)\n continue;\n const seen = new Set<string>();\n for (const checkId of check.outcome.reason.checkIds) {\n if (!knownCheckIds.has(checkId) || seen.has(checkId))\n return invalid(\n `$.checks[${index}].outcome.reason.checkIds`,\n \"Unavailable reason references are invalid\"\n );\n seen.add(checkId);\n }\n }\n return accepted(undefined);\n}\n\nfunction validateChecks(values: readonly unknown[]): ValidationResult<readonly CoreCheck[]> {\n const checks: CoreCheck[] = [];\n const checkIds = new Set<string>();\n let previousCheckId: string | undefined;\n for (const [index, value] of values.entries()) {\n const check = snapshotClosedRecord(value);\n if (check === undefined || !hasExactKeys(check, [\"checkId\", \"displayName\", \"outcome\"])) {\n return invalid(`$.checks[${index}]`, \"Core Check must be closed\");\n }\n const definition = validateCheckDescriptor({\n checkId: check.checkId,\n displayName: check.displayName\n });\n if (!definition.ok) return definition;\n if (checkIds.has(definition.value.checkId)) {\n return invalid(`$.checks[${index}].checkId`, \"Duplicate Core Check checkId\", \"duplicate\");\n }\n if (\n previousCheckId !== undefined &&\n compareText(previousCheckId, definition.value.checkId) >= 0\n ) {\n return invalid(`$.checks[${index}].checkId`, \"Core Checks must be sorted by checkId\");\n }\n const outcome = validateOutcome(check.outcome, `$.checks[${index}].outcome`);\n if (!outcome.ok) return outcome;\n checks.push(Object.freeze({ ...definition.value, outcome: outcome.value }));\n checkIds.add(definition.value.checkId);\n previousCheckId = definition.value.checkId;\n }\n return accepted(Object.freeze(checks));\n}\n\nfunction validateRecords(\n values: readonly unknown[],\n checks: readonly CoreCheck[]\n): ValidationResult<readonly CoreRecord[]> {\n const ownerIds = new Set(checks.map((check) => check.checkId));\n const recordIdsByCheckId = new Map<string, Set<string>>();\n const records: CoreRecord[] = [];\n let previous: Readonly<{ readonly checkId: string; readonly id: string }> | undefined;\n for (const [index, value] of values.entries()) {\n const record = validateRecordRow(value, index, ownerIds);\n if (!record.ok) return record;\n const current = record.value;\n const ids = recordIdsByCheckId.get(current.checkId) ?? new Set<string>();\n if (ids.has(current.id)) {\n return invalid(`$.records[${index}].id`, \"Duplicate Check-local Record id\", \"duplicate\");\n }\n if (\n previous !== undefined &&\n (compareText(previous.checkId, current.checkId) > 0 ||\n (previous.checkId === current.checkId && compareText(previous.id, current.id) >= 0))\n ) {\n return invalid(`$.records[${index}]`, \"Core Records must be sorted by checkId then id\");\n }\n ids.add(current.id);\n recordIdsByCheckId.set(current.checkId, ids);\n records.push(current);\n previous = { checkId: current.checkId, id: current.id };\n }\n return accepted(Object.freeze(records));\n}\n\nfunction validateRecordRow(\n value: unknown,\n index: number,\n ownerIds: ReadonlySet<string>\n): ValidationResult<CoreRecord> {\n const record = snapshotClosedRecord(value);\n if (record === undefined || !hasExactKeys(record, [\"checkId\", \"id\", \"data\"]))\n return invalid(`$.records[${index}]`, \"Core Record must be closed\");\n if (\n typeof record.checkId !== \"string\" ||\n !ownerIds.has(record.checkId) ||\n typeof record.id !== \"string\" ||\n record.id.length === 0\n ) {\n return invalid(`$.records[${index}]`, \"Core Record identity is invalid\", \"identity-mismatch\");\n }\n const data = canonicalizeJsonObject(record.data);\n return data === undefined\n ? invalid(`$.records[${index}].data`, \"Core Record data is invalid\")\n : accepted(Object.freeze({ checkId: record.checkId, id: record.id, data }));\n}\n\nfunction validateOutcome(value: unknown, path: string): ValidationResult<CheckOutcome> {\n const outcome = snapshotClosedRecord(value);\n if (outcome === undefined || typeof outcome.status !== \"string\") {\n return invalid(path, \"Check outcome is invalid\");\n }\n if (outcome.status === \"passed\" || outcome.status === \"failed\")\n return validateFinalOutcome(outcome, path);\n if (outcome.status === \"not-applicable\") return validateNotApplicableOutcome(outcome, path);\n if (outcome.status === \"unavailable\") return validateUnavailableOutcome(outcome, path);\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateFinalOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n if (!hasExactKeys(outcome, [\"status\", \"data\"]))\n return invalid(path, \"Final outcome is not closed\");\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined\n ? invalid(`${path}.data`, \"Final data is invalid\")\n : accepted(Object.freeze({ status: outcome.status, data }));\n }\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasOptionalKeys(outcome, [\"status\"], [\"reason\"]))\n return invalid(path, \"Not-applicable outcome is not closed\");\n const reason = validateReason(outcome.reason, false);\n return reason === null\n ? invalid(`${path}.reason`, \"Not-applicable reason is invalid\")\n : accepted(\n Object.freeze(\n reason === undefined ? { status: \"not-applicable\" } : { status: \"not-applicable\", reason }\n )\n );\n}\n\nfunction validateUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasExactKeys(outcome, [\"status\", \"reason\"]))\n return invalid(path, \"Unavailable outcome is not closed\");\n const reason = validateReason(outcome.reason, true);\n return reason === null || reason === undefined\n ? invalid(`${path}.reason`, \"Unavailable reason is invalid\")\n : accepted(Object.freeze({ status: \"unavailable\", reason }));\n}\n\nfunction validateReason(\n value: unknown,\n allowCheckIds: boolean\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | null | undefined {\n if (value === undefined) return undefined;\n const reason = snapshotClosedRecord(value);\n if (!isClosedReason(reason, allowCheckIds)) return null;\n if (!hasOptionalKeys(reason, [\"code\"], allowCheckIds ? [\"checkIds\"] : [])) return null;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const normalizedCheckIds = normalizedReasonCheckIds(reason.checkIds, allowCheckIds);\n if (normalizedCheckIds === undefined) return null;\n return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });\n}\n\nfunction isClosedReason(\n value: Readonly<Record<string, unknown>> | undefined,\n allowCheckIds: boolean\n): value is Readonly<Record<string, unknown>> & Readonly<{ readonly code: string }> {\n return (\n value !== undefined &&\n typeof value.code === \"string\" &&\n value.code.length > 0 &&\n hasOptionalKeys(value, [\"code\"], allowCheckIds ? [\"checkIds\"] : [])\n );\n}\n\nfunction normalizedReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean\n): readonly string[] | undefined {\n const checkIds = snapshotClosedArray(value);\n if (\n !allowCheckIds ||\n checkIds === undefined ||\n checkIds.length === 0 ||\n checkIds.some((checkId) => typeof checkId !== \"string\" || !isSettlementCheckReference(checkId))\n )\n return undefined;\n const normalizedCheckIds: string[] = [];\n for (const checkId of checkIds) {\n if (typeof checkId !== \"string\") return undefined;\n normalizedCheckIds.push(checkId);\n }\n return Object.freeze(normalizedCheckIds);\n}\n\nfunction hasExactKeys(value: Readonly<Record<string, unknown>>, keys: readonly string[]): boolean {\n return (\n Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n );\n}\n\nfunction hasOptionalKeys(\n value: Readonly<Record<string, unknown>>,\n required: readonly string[],\n optional: readonly string[]\n): boolean {\n const supported = new Set([...required, ...optional]);\n return (\n required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supported.has(key))\n );\n}\n\nfunction accepted<T>(value: T): ValidationResult<T> {\n return Object.freeze({ ok: true, value });\n}\n\nfunction invalid(\n path: string,\n message: string,\n code: ValidationIssue[\"code\"] = \"invalid-value\"\n): ValidationResult<never> {\n const issue = Object.freeze({ path, code, message }) satisfies ValidationIssue;\n const issues: readonly [ValidationIssue, ...ValidationIssue[]] = [issue];\n return Object.freeze({\n ok: false,\n issues: Object.freeze(issues)\n });\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction isSettlementCheckReference(value: string): boolean {\n return value.length > 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fact-validation.mjs","sourceRoot":"","sources":["../../../src/check-settlement/fact-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport type { CoreCheck, CoreRecord, CoreSnapshot } from \"./facts.ts\";\nimport {\n hasExactPlainRecordKeys,\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../data-boundary/closed-values.ts\";\nimport { isClosedCheckReason } from \"./reason-shape.ts\";\n\nexport interface ValidationIssue {\n readonly path: string;\n readonly code:\n | \"duplicate\"\n | \"identity-mismatch\"\n | \"invalid-value\"\n | \"missing-field\"\n | \"unknown-field\";\n readonly message: string;\n}\n\nexport type ValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly [ValidationIssue, ...ValidationIssue[]] }\n>;\n\nexport function validateCoreSnapshot(value: unknown): ValidationResult<CoreSnapshot> {\n const snapshot = snapshotClosedRecord(value);\n if (snapshot === undefined || !hasExactPlainRecordKeys(snapshot, [\"checks\", \"records\"])) {\n return invalid(\"$\", \"Core snapshot must contain only checks and records\");\n }\n const checksInput = snapshotClosedArray(snapshot.checks);\n const recordsInput = snapshotClosedArray(snapshot.records);\n if (checksInput === undefined || recordsInput === undefined) {\n return invalid(\"$\", \"Core snapshot entities must be dense arrays\");\n }\n const checks = validateChecks(checksInput);\n if (!checks.ok) return checks;\n const reasonReferences = validateReasonReferences(checks.value);\n if (!reasonReferences.ok) return reasonReferences;\n const records = validateRecords(recordsInput, checks.value);\n if (!records.ok) return records;\n return accepted(Object.freeze({ checks: checks.value, records: records.value }));\n}\n\nfunction validateReasonReferences(checks: readonly CoreCheck[]): ValidationResult<void> {\n const knownCheckIds = new Set(checks.map((check) => check.checkId));\n for (const [index, check] of checks.entries()) {\n if (check.outcome.status !== \"unavailable\" || check.outcome.reason.checkIds === undefined)\n continue;\n const seen = new Set<string>();\n for (const checkId of check.outcome.reason.checkIds) {\n if (!knownCheckIds.has(checkId) || seen.has(checkId))\n return invalid(\n `$.checks[${index}].outcome.reason.checkIds`,\n \"Unavailable reason references are invalid\"\n );\n seen.add(checkId);\n }\n }\n return accepted(undefined);\n}\n\nfunction validateChecks(values: readonly unknown[]): ValidationResult<readonly CoreCheck[]> {\n const checks: CoreCheck[] = [];\n const checkIds = new Set<string>();\n let previousCheckId: string | undefined;\n for (const [index, value] of values.entries()) {\n const check = snapshotClosedRecord(value);\n if (\n check === undefined ||\n !hasExactPlainRecordKeys(check, [\"checkId\", \"displayName\", \"outcome\"])\n ) {\n return invalid(`$.checks[${index}]`, \"Core Check must be closed\");\n }\n const definition = validateCheckDescriptor({\n checkId: check.checkId,\n displayName: check.displayName\n });\n if (!definition.ok) return definition;\n if (checkIds.has(definition.value.checkId)) {\n return invalid(`$.checks[${index}].checkId`, \"Duplicate Core Check checkId\", \"duplicate\");\n }\n if (\n previousCheckId !== undefined &&\n compareText(previousCheckId, definition.value.checkId) >= 0\n ) {\n return invalid(`$.checks[${index}].checkId`, \"Core Checks must be sorted by checkId\");\n }\n const outcome = validateOutcome(check.outcome, `$.checks[${index}].outcome`);\n if (!outcome.ok) return outcome;\n checks.push(Object.freeze({ ...definition.value, outcome: outcome.value }));\n checkIds.add(definition.value.checkId);\n previousCheckId = definition.value.checkId;\n }\n return accepted(Object.freeze(checks));\n}\n\nfunction validateRecords(\n values: readonly unknown[],\n checks: readonly CoreCheck[]\n): ValidationResult<readonly CoreRecord[]> {\n const ownerIds = new Set(checks.map((check) => check.checkId));\n const recordIdsByCheckId = new Map<string, Set<string>>();\n const records: CoreRecord[] = [];\n let previous: Readonly<{ readonly checkId: string; readonly id: string }> | undefined;\n for (const [index, value] of values.entries()) {\n const record = validateRecordRow(value, index, ownerIds);\n if (!record.ok) return record;\n const current = record.value;\n const ids = recordIdsByCheckId.get(current.checkId) ?? new Set<string>();\n if (ids.has(current.id)) {\n return invalid(`$.records[${index}].id`, \"Duplicate Check-local Record id\", \"duplicate\");\n }\n if (\n previous !== undefined &&\n (compareText(previous.checkId, current.checkId) > 0 ||\n (previous.checkId === current.checkId && compareText(previous.id, current.id) >= 0))\n ) {\n return invalid(`$.records[${index}]`, \"Core Records must be sorted by checkId then id\");\n }\n ids.add(current.id);\n recordIdsByCheckId.set(current.checkId, ids);\n records.push(current);\n previous = { checkId: current.checkId, id: current.id };\n }\n return accepted(Object.freeze(records));\n}\n\nfunction validateRecordRow(\n value: unknown,\n index: number,\n ownerIds: ReadonlySet<string>\n): ValidationResult<CoreRecord> {\n const record = snapshotClosedRecord(value);\n if (record === undefined || !hasExactPlainRecordKeys(record, [\"checkId\", \"id\", \"data\"]))\n return invalid(`$.records[${index}]`, \"Core Record must be closed\");\n if (\n typeof record.checkId !== \"string\" ||\n !ownerIds.has(record.checkId) ||\n typeof record.id !== \"string\" ||\n record.id.length === 0\n ) {\n return invalid(`$.records[${index}]`, \"Core Record identity is invalid\", \"identity-mismatch\");\n }\n const data = canonicalizeJsonObject(record.data);\n return data === undefined\n ? invalid(`$.records[${index}].data`, \"Core Record data is invalid\")\n : accepted(Object.freeze({ checkId: record.checkId, id: record.id, data }));\n}\n\nfunction validateOutcome(value: unknown, path: string): ValidationResult<CheckOutcome> {\n const outcome = snapshotClosedRecord(value);\n if (outcome === undefined || typeof outcome.status !== \"string\") {\n return invalid(path, \"Check outcome is invalid\");\n }\n if (outcome.status === \"passed\" || outcome.status === \"failed\")\n return validateFinalOutcome(outcome, path);\n if (outcome.status === \"not-applicable\") return validateNotApplicableOutcome(outcome, path);\n if (outcome.status === \"unavailable\") return validateUnavailableOutcome(outcome, path);\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateFinalOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"data\"]))\n return invalid(path, \"Final outcome is not closed\");\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined\n ? invalid(`${path}.data`, \"Final data is invalid\")\n : accepted(Object.freeze({ status: outcome.status, data }));\n }\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (\n !hasRequiredAndOptionalRecordKeys(outcome, {\n optional: [\"reason\"],\n required: [\"status\"]\n })\n )\n return invalid(path, \"Not-applicable outcome is not closed\");\n const reason = validateReason(outcome.reason, false);\n return reason === null\n ? invalid(`${path}.reason`, \"Not-applicable reason is invalid\")\n : accepted(\n Object.freeze(\n reason === undefined ? { status: \"not-applicable\" } : { status: \"not-applicable\", reason }\n )\n );\n}\n\nfunction validateUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"reason\"]))\n return invalid(path, \"Unavailable outcome is not closed\");\n const reason = validateReason(outcome.reason, true);\n return reason === null || reason === undefined\n ? invalid(`${path}.reason`, \"Unavailable reason is invalid\")\n : accepted(Object.freeze({ status: \"unavailable\", reason }));\n}\n\nfunction validateReason(\n value: unknown,\n allowCheckIds: boolean\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | null | undefined {\n if (value === undefined) return undefined;\n const reason = snapshotClosedRecord(value);\n if (!isClosedCheckReason(reason, allowCheckIds)) return null;\n if (\n !hasRequiredAndOptionalRecordKeys(reason, {\n optional: allowCheckIds ? [\"checkIds\"] : [],\n required: [\"code\"]\n })\n )\n return null;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const normalizedCheckIds = normalizedReasonCheckIds(reason.checkIds, allowCheckIds);\n if (normalizedCheckIds === undefined) return null;\n return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });\n}\n\nfunction normalizedReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean\n): readonly string[] | undefined {\n const checkIds = snapshotClosedArray(value);\n if (\n !allowCheckIds ||\n checkIds === undefined ||\n checkIds.length === 0 ||\n checkIds.some((checkId) => typeof checkId !== \"string\" || !isSettlementCheckReference(checkId))\n )\n return undefined;\n const normalizedCheckIds: string[] = [];\n for (const checkId of checkIds) {\n if (typeof checkId !== \"string\") return undefined;\n normalizedCheckIds.push(checkId);\n }\n return Object.freeze(normalizedCheckIds);\n}\n\nfunction accepted<T>(value: T): ValidationResult<T> {\n return Object.freeze({ ok: true, value });\n}\n\nfunction invalid(\n path: string,\n message: string,\n code: ValidationIssue[\"code\"] = \"invalid-value\"\n): ValidationResult<never> {\n const issue = Object.freeze({ path, code, message }) satisfies ValidationIssue;\n const issues: readonly [ValidationIssue, ...ValidationIssue[]] = [issue];\n return Object.freeze({\n ok: false,\n issues: Object.freeze(issues)\n });\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction isSettlementCheckReference(value: string): boolean {\n return value.length > 0;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
|
|
2
|
-
import { snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
2
|
+
import { hasExactPlainRecordKeys, hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
3
|
+
import { isClosedCheckReason } from "./reason-shape.mjs";
|
|
3
4
|
/** Normalizes one live Check terminal value before the settlement session commits it. */
|
|
4
5
|
export function normalizeCheckOutcome(input) {
|
|
5
6
|
const outcome = snapshotClosedRecord(input.value);
|
|
@@ -19,13 +20,16 @@ export function normalizeCheckOutcome(input) {
|
|
|
19
20
|
function normalizeFinalOutcome(outcome) {
|
|
20
21
|
if (outcome.status !== "passed" && outcome.status !== "failed")
|
|
21
22
|
return undefined;
|
|
22
|
-
if (!
|
|
23
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "data"]))
|
|
23
24
|
return undefined;
|
|
24
25
|
const data = canonicalizeJsonObject(outcome.data);
|
|
25
26
|
return data === undefined ? undefined : Object.freeze({ status: outcome.status, data });
|
|
26
27
|
}
|
|
27
28
|
function normalizeNotApplicableOutcome(outcome, knownCheckIds) {
|
|
28
|
-
if (!
|
|
29
|
+
if (!hasRequiredAndOptionalRecordKeys(outcome, {
|
|
30
|
+
optional: ["reason"],
|
|
31
|
+
required: ["status"]
|
|
32
|
+
}))
|
|
29
33
|
return undefined;
|
|
30
34
|
if (outcome.reason === undefined)
|
|
31
35
|
return Object.freeze({ status: "not-applicable" });
|
|
@@ -33,26 +37,20 @@ function normalizeNotApplicableOutcome(outcome, knownCheckIds) {
|
|
|
33
37
|
return reason === undefined ? undefined : Object.freeze({ status: "not-applicable", reason });
|
|
34
38
|
}
|
|
35
39
|
function normalizeUnavailableOutcome(outcome, productOutcome, knownCheckIds) {
|
|
36
|
-
if (!
|
|
40
|
+
if (!hasExactPlainRecordKeys(outcome, ["status", "reason"]))
|
|
37
41
|
return undefined;
|
|
38
42
|
const reason = normalizeReason(outcome.reason, productOutcome, knownCheckIds);
|
|
39
43
|
return reason === undefined ? undefined : Object.freeze({ status: "unavailable", reason });
|
|
40
44
|
}
|
|
41
45
|
function normalizeReason(value, allowCheckIds, knownCheckIds) {
|
|
42
46
|
const reason = snapshotClosedRecord(value);
|
|
43
|
-
if (!
|
|
47
|
+
if (!isClosedCheckReason(reason, allowCheckIds))
|
|
44
48
|
return undefined;
|
|
45
49
|
if (!Object.hasOwn(reason, "checkIds"))
|
|
46
50
|
return Object.freeze({ code: reason.code });
|
|
47
51
|
const checkIds = normalizedSessionReasonCheckIds(reason.checkIds, allowCheckIds, knownCheckIds);
|
|
48
52
|
return checkIds === undefined ? undefined : Object.freeze({ code: reason.code, checkIds });
|
|
49
53
|
}
|
|
50
|
-
function isClosedSessionReason(value, allowCheckIds) {
|
|
51
|
-
return (value !== undefined &&
|
|
52
|
-
typeof value.code === "string" &&
|
|
53
|
-
value.code.length > 0 &&
|
|
54
|
-
hasOptionalKeys(value, ["code"], allowCheckIds ? ["checkIds"] : []));
|
|
55
|
-
}
|
|
56
54
|
function normalizedSessionReasonCheckIds(value, allowCheckIds, knownCheckIds) {
|
|
57
55
|
const rawCheckIds = snapshotClosedArray(value);
|
|
58
56
|
if (!allowCheckIds || rawCheckIds === undefined || rawCheckIds.length === 0)
|
|
@@ -69,12 +67,4 @@ function normalizedSessionReasonCheckIds(value, allowCheckIds, knownCheckIds) {
|
|
|
69
67
|
}
|
|
70
68
|
return Object.freeze(checkIds);
|
|
71
69
|
}
|
|
72
|
-
function hasExactKeys(value, keys) {
|
|
73
|
-
return (Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key)));
|
|
74
|
-
}
|
|
75
|
-
function hasOptionalKeys(value, required, optional) {
|
|
76
|
-
const supported = new Set([...required, ...optional]);
|
|
77
|
-
return (required.every((key) => Object.hasOwn(value, key)) &&
|
|
78
|
-
Object.keys(value).every((key) => supported.has(key)));
|
|
79
|
-
}
|
|
80
70
|
//# sourceMappingURL=outcome-normalization.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome-normalization.mjs","sourceRoot":"","sources":["../../../src/check-settlement/outcome-normalization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,
|
|
1
|
+
{"version":3,"file":"outcome-normalization.mjs","sourceRoot":"","sources":["../../../src/check-settlement/outcome-normalization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckOutcome } from \"../check/check.ts\";\nimport { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport {\n hasExactPlainRecordKeys,\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../data-boundary/closed-values.ts\";\nimport { isClosedCheckReason } from \"./reason-shape.ts\";\n\ninterface OutcomeNormalizationInput {\n readonly knownCheckIds: ReadonlySet<string>;\n readonly productOutcome: boolean;\n readonly value: unknown;\n}\n\n/** Normalizes one live Check terminal value before the settlement session commits it. */\nexport function normalizeCheckOutcome(input: OutcomeNormalizationInput): CheckOutcome | undefined {\n const outcome = snapshotClosedRecord(input.value);\n if (outcome === undefined || typeof outcome.status !== \"string\") return undefined;\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return normalizeFinalOutcome(outcome);\n }\n if (outcome.status === \"not-applicable\") {\n return normalizeNotApplicableOutcome(outcome, input.knownCheckIds);\n }\n if (outcome.status === \"unavailable\") {\n return normalizeUnavailableOutcome(outcome, input.productOutcome, input.knownCheckIds);\n }\n return undefined;\n}\n\nfunction normalizeFinalOutcome(\n outcome: Readonly<Record<string, unknown>>\n): CheckOutcome | undefined {\n if (outcome.status !== \"passed\" && outcome.status !== \"failed\") return undefined;\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"data\"])) return undefined;\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined ? undefined : Object.freeze({ status: outcome.status, data });\n}\n\nfunction normalizeNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (\n !hasRequiredAndOptionalRecordKeys(outcome, {\n optional: [\"reason\"],\n required: [\"status\"]\n })\n )\n return undefined;\n if (outcome.reason === undefined) return Object.freeze({ status: \"not-applicable\" });\n const reason = normalizeReason(outcome.reason, false, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"not-applicable\", reason });\n}\n\nfunction normalizeUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n productOutcome: boolean,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"reason\"])) return undefined;\n const reason = normalizeReason(outcome.reason, productOutcome, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"unavailable\", reason });\n}\n\nfunction normalizeReason(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | undefined {\n const reason = snapshotClosedRecord(value);\n if (!isClosedCheckReason(reason, allowCheckIds)) return undefined;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const checkIds = normalizedSessionReasonCheckIds(reason.checkIds, allowCheckIds, knownCheckIds);\n return checkIds === undefined ? undefined : Object.freeze({ code: reason.code, checkIds });\n}\n\nfunction normalizedSessionReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): readonly string[] | undefined {\n const rawCheckIds = snapshotClosedArray(value);\n if (!allowCheckIds || rawCheckIds === undefined || rawCheckIds.length === 0) return undefined;\n const checkIds: string[] = [];\n for (const checkId of rawCheckIds) {\n if (\n typeof checkId !== \"string\" ||\n checkId.length === 0 ||\n !knownCheckIds.has(checkId) ||\n checkIds.includes(checkId)\n ) {\n return undefined;\n }\n checkIds.push(checkId);\n }\n return Object.freeze(checkIds);\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { hasRequiredAndOptionalRecordKeys } from "../data-boundary/closed-values.mjs";
|
|
2
|
+
/** Recognizes the shared closed reason shape before owner-specific ID validation. */
|
|
3
|
+
export function isClosedCheckReason(value, allowCheckIds) {
|
|
4
|
+
return (value !== undefined &&
|
|
5
|
+
typeof value.code === "string" &&
|
|
6
|
+
value.code.length > 0 &&
|
|
7
|
+
hasRequiredAndOptionalRecordKeys(value, {
|
|
8
|
+
optional: allowCheckIds ? ["checkIds"] : [],
|
|
9
|
+
required: ["code"]
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=reason-shape.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reason-shape.mjs","sourceRoot":"","sources":["../../../src/check-settlement/reason-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAKrF,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CACjC,KAAoD,EACpD,aAAsB;IAEtB,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACrB,gCAAgC,CAAC,KAAK,EAAE;YACtC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3C,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { hasRequiredAndOptionalRecordKeys } from \"../data-boundary/closed-values.ts\";\n\nexport type ClosedCheckReason = Readonly<Record<string, unknown>> &\n Readonly<{ readonly code: string }>;\n\n/** Recognizes the shared closed reason shape before owner-specific ID validation. */\nexport function isClosedCheckReason(\n value: Readonly<Record<string, unknown>> | undefined,\n allowCheckIds: boolean\n): value is ClosedCheckReason {\n return (\n value !== undefined &&\n typeof value.code === \"string\" &&\n value.code.length > 0 &&\n hasRequiredAndOptionalRecordKeys(value, {\n optional: allowCheckIds ? [\"checkIds\"] : [],\n required: [\"code\"]\n })\n );\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
|
|
2
2
|
import { snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
3
|
-
|
|
3
|
+
const EMPTY_RECORDS = Object.freeze([]);
|
|
4
|
+
/** Holds Check-local supplemental Records without inventing a composite string identity. */
|
|
4
5
|
export class CoreRecordStore {
|
|
5
6
|
#recordsByCheckId = new Map();
|
|
6
7
|
report(slot, rawIdentity, rawData) {
|
|
@@ -8,31 +9,27 @@ export class CoreRecordStore {
|
|
|
8
9
|
const data = canonicalizeJsonObject(rawData);
|
|
9
10
|
if (id === undefined || data === undefined)
|
|
10
11
|
return this.#reject(slot, "record-invalid");
|
|
11
|
-
if (slot.recordIds.has(id))
|
|
12
|
-
return this.#reject(slot, "record-conflict");
|
|
13
|
-
const record = Object.freeze({ checkId: slot.checkId, id, data });
|
|
14
12
|
let records = this.#recordsByCheckId.get(slot.checkId);
|
|
13
|
+
if (records?.has(id))
|
|
14
|
+
return this.#reject(slot, "record-conflict");
|
|
15
15
|
if (records === undefined) {
|
|
16
16
|
records = new Map();
|
|
17
17
|
this.#recordsByCheckId.set(slot.checkId, records);
|
|
18
18
|
}
|
|
19
|
+
const record = Object.freeze({ checkId: slot.checkId, id, data });
|
|
19
20
|
records.set(id, record);
|
|
20
|
-
slot.recordIds.add(id);
|
|
21
21
|
return "committed";
|
|
22
22
|
}
|
|
23
|
+
recordsForCheckInCanonicalOrder(checkId) {
|
|
24
|
+
const recordsById = this.#recordsByCheckId.get(checkId);
|
|
25
|
+
if (recordsById === undefined)
|
|
26
|
+
return EMPTY_RECORDS;
|
|
27
|
+
return Object.freeze([...recordsById.values()].sort((left, right) => compareText(left.id, right.id)));
|
|
28
|
+
}
|
|
23
29
|
recordsInCanonicalOrder() {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (byId === undefined)
|
|
28
|
-
continue;
|
|
29
|
-
for (const id of [...byId.keys()].sort(compareText)) {
|
|
30
|
-
const record = byId.get(id);
|
|
31
|
-
if (record !== undefined)
|
|
32
|
-
records.push(record);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return Object.freeze(records);
|
|
30
|
+
return Object.freeze([...this.#recordsByCheckId.keys()]
|
|
31
|
+
.sort(compareText)
|
|
32
|
+
.flatMap((checkId) => this.recordsForCheckInCanonicalOrder(checkId)));
|
|
36
33
|
}
|
|
37
34
|
#reject(slot, diagnostic) {
|
|
38
35
|
slot.diagnostics.add(diagnostic);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-store.mjs","sourceRoot":"","sources":["../../../src/check-settlement/record-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"record-store.mjs","sourceRoot":"","sources":["../../../src/check-settlement/record-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CoreRecord } from \"./facts.ts\";\nimport { snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport type RecordSubmissionResult = \"committed\" | \"rejected\";\n\nconst EMPTY_RECORDS: readonly CoreRecord[] = Object.freeze([]);\nexport type RecordDiagnostic = \"record-conflict\" | \"record-invalid\";\n\nexport interface CoreRecordSlot {\n readonly checkId: string;\n readonly diagnostics: Set<RecordDiagnostic>;\n}\n\n/** Holds Check-local supplemental Records without inventing a composite string identity. */\nexport class CoreRecordStore {\n readonly #recordsByCheckId = new Map<string, Map<string, CoreRecord>>();\n\n public report(\n slot: CoreRecordSlot,\n rawIdentity: unknown,\n rawData: unknown\n ): RecordSubmissionResult {\n const id = recordId(rawIdentity);\n const data = canonicalizeJsonObject(rawData);\n if (id === undefined || data === undefined) return this.#reject(slot, \"record-invalid\");\n\n let records = this.#recordsByCheckId.get(slot.checkId);\n if (records?.has(id)) return this.#reject(slot, \"record-conflict\");\n if (records === undefined) {\n records = new Map<string, CoreRecord>();\n this.#recordsByCheckId.set(slot.checkId, records);\n }\n const record: CoreRecord = Object.freeze({ checkId: slot.checkId, id, data });\n records.set(id, record);\n return \"committed\";\n }\n\n public recordsForCheckInCanonicalOrder(checkId: string): readonly CoreRecord[] {\n const recordsById = this.#recordsByCheckId.get(checkId);\n if (recordsById === undefined) return EMPTY_RECORDS;\n return Object.freeze(\n [...recordsById.values()].sort((left, right) => compareText(left.id, right.id))\n );\n }\n\n public recordsInCanonicalOrder(): readonly CoreRecord[] {\n return Object.freeze(\n [...this.#recordsByCheckId.keys()]\n .sort(compareText)\n .flatMap((checkId) => this.recordsForCheckInCanonicalOrder(checkId))\n );\n }\n\n #reject(slot: CoreRecordSlot, diagnostic: RecordDiagnostic): \"rejected\" {\n slot.diagnostics.add(diagnostic);\n return \"rejected\";\n }\n}\n\nfunction recordId(value: unknown): string | undefined {\n const identity = snapshotClosedRecord(value);\n return identity !== undefined &&\n Object.keys(identity).length === 1 &&\n Object.hasOwn(identity, \"id\") &&\n typeof identity.id === \"string\" &&\n identity.id.length > 0\n ? identity.id\n : undefined;\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"]}
|
|
@@ -36,8 +36,7 @@ function createSlots(registrations) {
|
|
|
36
36
|
checkId: definition.value.checkId,
|
|
37
37
|
definition: definition.value,
|
|
38
38
|
diagnostics: new Set(),
|
|
39
|
-
lifecycle: { kind: "registered" }
|
|
40
|
-
recordIds: new Set()
|
|
39
|
+
lifecycle: { kind: "registered" }
|
|
41
40
|
});
|
|
42
41
|
}
|
|
43
42
|
return slots.sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));
|
|
@@ -74,6 +73,13 @@ class CoreCheckSessionImpl {
|
|
|
74
73
|
}
|
|
75
74
|
return slot.lifecycle.outcome;
|
|
76
75
|
}
|
|
76
|
+
readSettledCheckRecords(checkId) {
|
|
77
|
+
const slot = this.#slotFor(checkId);
|
|
78
|
+
if (slot.lifecycle.kind !== "settled") {
|
|
79
|
+
coreInvariant("Core settled Check Records are not available");
|
|
80
|
+
}
|
|
81
|
+
return this.#recordStore.recordsForCheckInCanonicalOrder(checkId);
|
|
82
|
+
}
|
|
77
83
|
closeUnresolvedAsCancelled() {
|
|
78
84
|
if (this.#snapshot !== undefined) {
|
|
79
85
|
coreInvariant("Cancelled closure cannot mutate a frozen Core snapshot");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.mjs","sourceRoot":"","sources":["../../../src/check-settlement/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport {\n CoreRecordStore,\n type CoreRecordSlot,\n type RecordDiagnostic,\n type RecordSubmissionResult\n} from \"./record-store.ts\";\nimport type { CoreCheck, CoreSnapshot } from \"./facts.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport { normalizeCheckOutcome } from \"./outcome-normalization.ts\";\n\nexport type { RecordSubmissionResult } from \"./record-store.ts\";\n\nexport interface CoreCheckRegistration {\n readonly definition: CheckDescriptor;\n}\n\n/** Internal Record port bound to one currently executing Check. */\nexport interface RecordSink {\n report(identity: unknown, data: unknown): RecordSubmissionResult;\n}\n\n/** Only the Product Task adapter receives this Core lifecycle capability. */\nexport interface TrustedCheckScope {\n readonly records: RecordSink;\n /** Core is the only author-result validation/canonicalization boundary. */\n readonly settle: (outcome: unknown) => AuthorCheckSettlement;\n /** Private Product lifecycle outcomes may include contained prerequisite IDs. */\n readonly settleProduct: (outcome: CheckOutcome) => CheckOutcome;\n}\n\n/** Core's private marker for an author result that survived every settlement guard. */\nexport interface AuthorCheckSettlement {\n readonly authorResultAccepted: boolean;\n readonly outcome: CheckOutcome;\n}\n\nexport interface CoreCheckSession {\n openCheckScope(checkId: string): TrustedCheckScope;\n readSettledCheckOutcome(checkId: string): CheckOutcome;\n closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[];\n freeze(): CoreSnapshot;\n}\n\n/** Product-private cancellation facts emitted at the exact Core closure boundary. */\nexport interface CancelledCheckClosure {\n readonly checkId: string;\n readonly outcome: CheckOutcome;\n}\n\n/** A trusted integration bug is fatal to the invocation, not a Check outcome. */\nexport class CoreInvariantFailure extends Error {\n public constructor(message: string) {\n super(message);\n this.name = \"CoreInvariantFailure\";\n }\n}\n\ntype CoreSlotLifecycle = Readonly<\n | { readonly kind: \"registered\" }\n | { readonly kind: \"open\" }\n | { readonly kind: \"settled\"; readonly outcome: CheckOutcome }\n>;\n\ninterface CoreSlot extends CoreRecordSlot {\n readonly definition: CheckDescriptor;\n lifecycle: CoreSlotLifecycle;\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction coreInvariant(message: string): never {\n throw new CoreInvariantFailure(message);\n}\n\nfunction createSlots(registrations: readonly CoreCheckRegistration[]): CoreSlot[] {\n const slots: CoreSlot[] = [];\n const checkIds = new Set<string>();\n for (const registration of registrations) {\n if (registration === null || typeof registration !== \"object\") {\n coreInvariant(\"Core Check registration is invalid\");\n }\n const definition = validateCheckDescriptor(registration.definition);\n if (!definition.ok) coreInvariant(\"Core Check registration definition is invalid\");\n if (checkIds.has(definition.value.checkId)) {\n coreInvariant(\"Core Check registration has a duplicate checkId\");\n }\n checkIds.add(definition.value.checkId);\n slots.push({\n checkId: definition.value.checkId,\n definition: definition.value,\n diagnostics: new Set(),\n lifecycle: { kind: \"registered\" },\n recordIds: new Set()\n });\n }\n return slots.sort((left, right) =>\n compareText(left.definition.checkId, right.definition.checkId)\n );\n}\n\nclass CoreCheckSessionImpl implements CoreCheckSession {\n readonly #slots: CoreSlot[];\n readonly #recordStore = new CoreRecordStore();\n #snapshot: CoreSnapshot | undefined;\n\n public constructor(registrations: readonly CoreCheckRegistration[]) {\n this.#slots = createSlots(registrations);\n }\n\n public openCheckScope(checkId: string): TrustedCheckScope {\n const slot = this.#slotFor(checkId);\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"registered\") {\n coreInvariant(\"Core Check scope is not available\");\n }\n slot.lifecycle = Object.freeze({ kind: \"open\" });\n return Object.freeze({\n records: Object.freeze({\n report: (identity: unknown, data: unknown): RecordSubmissionResult => {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") return \"rejected\";\n return this.#recordStore.report(slot, identity, data);\n }\n }),\n settle: (outcome: unknown): AuthorCheckSettlement => this.#settleAuthorSlot(slot, outcome),\n settleProduct: (outcome: CheckOutcome): CheckOutcome => this.#settleSlot(slot, outcome, true)\n });\n }\n\n public readSettledCheckOutcome(checkId: string): CheckOutcome {\n const slot = this.#slotFor(checkId);\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core settled Check is not available\");\n }\n return slot.lifecycle.outcome;\n }\n\n public closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[] {\n if (this.#snapshot !== undefined) {\n coreInvariant(\"Cancelled closure cannot mutate a frozen Core snapshot\");\n }\n const closures: CancelledCheckClosure[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n const outcome = this.#commitTerminal(\n slot,\n Object.freeze({ status: \"unavailable\", reason: { code: \"execution-cancelled\" } }),\n true\n );\n closures.push(Object.freeze({ checkId: slot.checkId, outcome }));\n }\n }\n return Object.freeze(closures);\n }\n\n public freeze(): CoreSnapshot {\n if (this.#snapshot !== undefined) return this.#snapshot;\n const checks: CoreCheck[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n return coreInvariant(\"Core snapshot cannot freeze before every Check slot closes\");\n }\n checks.push(coreCheckFor(slot));\n }\n this.#snapshot = Object.freeze({\n checks: Object.freeze(checks),\n records: this.#recordStore.recordsInCanonicalOrder()\n });\n return this.#snapshot;\n }\n\n #slotFor(checkId: string): CoreSlot {\n if (typeof checkId !== \"string\") coreInvariant(\"Core Check scope requires a checkId\");\n const slot = this.#slots.find((candidate) => candidate.definition.checkId === checkId);\n return slot ?? coreInvariant(\"Core Check scope does not own this checkId\");\n }\n\n #checkIds(): ReadonlySet<string> {\n return new Set(this.#slots.map((candidate) => candidate.checkId));\n }\n\n #settleSlot(slot: CoreSlot, outcome: unknown, productOutcome: boolean): CheckOutcome {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n return this.#commitTerminal(slot, outcome, productOutcome);\n }\n\n #settleAuthorSlot(slot: CoreSlot, terminal: unknown): AuthorCheckSettlement {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const normalized =\n diagnostic === undefined\n ? normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome: false,\n value: terminal\n })\n : undefined;\n const outcome = normalized ?? unavailable(diagnostic ?? \"invalid-execution-result\");\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return Object.freeze({\n authorResultAccepted: diagnostic === undefined && normalized !== undefined,\n outcome\n });\n }\n\n #commitTerminal(slot: CoreSlot, terminal: unknown, productOutcome = false): CheckOutcome {\n if (slot.lifecycle.kind === \"settled\") {\n coreInvariant(\"Core Check terminal closure is duplicate\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const outcome =\n diagnostic === undefined\n ? (normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome,\n value: terminal\n }) ?? unavailable(\"invalid-execution-result\"))\n : unavailable(diagnostic);\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return outcome;\n }\n}\n\nfunction terminalDiagnostic(slot: CoreSlot): RecordDiagnostic | undefined {\n if (slot.diagnostics.has(\"record-conflict\")) return \"record-conflict\";\n if (slot.diagnostics.has(\"record-invalid\")) return \"record-invalid\";\n return undefined;\n}\n\nfunction coreCheckFor(slot: CoreSlot): CoreCheck {\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core Check fact requires a settled slot\");\n }\n return Object.freeze({\n checkId: slot.definition.checkId,\n displayName: slot.definition.displayName,\n outcome: slot.lifecycle.outcome\n });\n}\n\nfunction unavailable(code: string): CheckOutcome {\n return Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) });\n}\n\nexport function createCoreCheckSession(\n registrations: readonly CoreCheckRegistration[]\n): CoreCheckSession {\n return new CoreCheckSessionImpl(registrations);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session.mjs","sourceRoot":"","sources":["../../../src/check-settlement/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport {\n CoreRecordStore,\n type CoreRecordSlot,\n type RecordDiagnostic,\n type RecordSubmissionResult\n} from \"./record-store.ts\";\nimport type { CoreCheck, CoreRecord, CoreSnapshot } from \"./facts.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport { normalizeCheckOutcome } from \"./outcome-normalization.ts\";\n\nexport type { RecordSubmissionResult } from \"./record-store.ts\";\n\nexport interface CoreCheckRegistration {\n readonly definition: CheckDescriptor;\n}\n\n/** Internal Record port bound to one currently executing Check. */\nexport interface RecordSink {\n report(identity: unknown, data: unknown): RecordSubmissionResult;\n}\n\n/** Only the Product Task adapter receives this Core lifecycle capability. */\nexport interface TrustedCheckScope {\n readonly records: RecordSink;\n /** Core is the only author-result validation/canonicalization boundary. */\n readonly settle: (outcome: unknown) => AuthorCheckSettlement;\n /** Private Product lifecycle outcomes may include contained prerequisite IDs. */\n readonly settleProduct: (outcome: CheckOutcome) => CheckOutcome;\n}\n\n/** Core's private marker for an author result that survived every settlement guard. */\nexport interface AuthorCheckSettlement {\n readonly authorResultAccepted: boolean;\n readonly outcome: CheckOutcome;\n}\n\nexport interface CoreCheckSession {\n openCheckScope(checkId: string): TrustedCheckScope;\n readSettledCheckOutcome(checkId: string): CheckOutcome;\n /** Product-private readback used only after this Check's terminal settlement. */\n readSettledCheckRecords(checkId: string): readonly CoreRecord[];\n closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[];\n freeze(): CoreSnapshot;\n}\n\n/** Product-private cancellation facts emitted at the exact Core closure boundary. */\nexport interface CancelledCheckClosure {\n readonly checkId: string;\n readonly outcome: CheckOutcome;\n}\n\n/** A trusted integration bug is fatal to the invocation, not a Check outcome. */\nexport class CoreInvariantFailure extends Error {\n public constructor(message: string) {\n super(message);\n this.name = \"CoreInvariantFailure\";\n }\n}\n\ntype CoreSlotLifecycle = Readonly<\n | { readonly kind: \"registered\" }\n | { readonly kind: \"open\" }\n | { readonly kind: \"settled\"; readonly outcome: CheckOutcome }\n>;\n\ninterface CoreSlot extends CoreRecordSlot {\n readonly definition: CheckDescriptor;\n lifecycle: CoreSlotLifecycle;\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction coreInvariant(message: string): never {\n throw new CoreInvariantFailure(message);\n}\n\nfunction createSlots(registrations: readonly CoreCheckRegistration[]): CoreSlot[] {\n const slots: CoreSlot[] = [];\n const checkIds = new Set<string>();\n for (const registration of registrations) {\n if (registration === null || typeof registration !== \"object\") {\n coreInvariant(\"Core Check registration is invalid\");\n }\n const definition = validateCheckDescriptor(registration.definition);\n if (!definition.ok) coreInvariant(\"Core Check registration definition is invalid\");\n if (checkIds.has(definition.value.checkId)) {\n coreInvariant(\"Core Check registration has a duplicate checkId\");\n }\n checkIds.add(definition.value.checkId);\n slots.push({\n checkId: definition.value.checkId,\n definition: definition.value,\n diagnostics: new Set(),\n lifecycle: { kind: \"registered\" }\n });\n }\n return slots.sort((left, right) =>\n compareText(left.definition.checkId, right.definition.checkId)\n );\n}\n\nclass CoreCheckSessionImpl implements CoreCheckSession {\n readonly #slots: CoreSlot[];\n readonly #recordStore = new CoreRecordStore();\n #snapshot: CoreSnapshot | undefined;\n\n public constructor(registrations: readonly CoreCheckRegistration[]) {\n this.#slots = createSlots(registrations);\n }\n\n public openCheckScope(checkId: string): TrustedCheckScope {\n const slot = this.#slotFor(checkId);\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"registered\") {\n coreInvariant(\"Core Check scope is not available\");\n }\n slot.lifecycle = Object.freeze({ kind: \"open\" });\n return Object.freeze({\n records: Object.freeze({\n report: (identity: unknown, data: unknown): RecordSubmissionResult => {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") return \"rejected\";\n return this.#recordStore.report(slot, identity, data);\n }\n }),\n settle: (outcome: unknown): AuthorCheckSettlement => this.#settleAuthorSlot(slot, outcome),\n settleProduct: (outcome: CheckOutcome): CheckOutcome => this.#settleSlot(slot, outcome, true)\n });\n }\n\n public readSettledCheckOutcome(checkId: string): CheckOutcome {\n const slot = this.#slotFor(checkId);\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core settled Check is not available\");\n }\n return slot.lifecycle.outcome;\n }\n\n public readSettledCheckRecords(checkId: string): readonly CoreRecord[] {\n const slot = this.#slotFor(checkId);\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core settled Check Records are not available\");\n }\n return this.#recordStore.recordsForCheckInCanonicalOrder(checkId);\n }\n\n public closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[] {\n if (this.#snapshot !== undefined) {\n coreInvariant(\"Cancelled closure cannot mutate a frozen Core snapshot\");\n }\n const closures: CancelledCheckClosure[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n const outcome = this.#commitTerminal(\n slot,\n Object.freeze({ status: \"unavailable\", reason: { code: \"execution-cancelled\" } }),\n true\n );\n closures.push(Object.freeze({ checkId: slot.checkId, outcome }));\n }\n }\n return Object.freeze(closures);\n }\n\n public freeze(): CoreSnapshot {\n if (this.#snapshot !== undefined) return this.#snapshot;\n const checks: CoreCheck[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n return coreInvariant(\"Core snapshot cannot freeze before every Check slot closes\");\n }\n checks.push(coreCheckFor(slot));\n }\n this.#snapshot = Object.freeze({\n checks: Object.freeze(checks),\n records: this.#recordStore.recordsInCanonicalOrder()\n });\n return this.#snapshot;\n }\n\n #slotFor(checkId: string): CoreSlot {\n if (typeof checkId !== \"string\") coreInvariant(\"Core Check scope requires a checkId\");\n const slot = this.#slots.find((candidate) => candidate.definition.checkId === checkId);\n return slot ?? coreInvariant(\"Core Check scope does not own this checkId\");\n }\n\n #checkIds(): ReadonlySet<string> {\n return new Set(this.#slots.map((candidate) => candidate.checkId));\n }\n\n #settleSlot(slot: CoreSlot, outcome: unknown, productOutcome: boolean): CheckOutcome {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n return this.#commitTerminal(slot, outcome, productOutcome);\n }\n\n #settleAuthorSlot(slot: CoreSlot, terminal: unknown): AuthorCheckSettlement {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const normalized =\n diagnostic === undefined\n ? normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome: false,\n value: terminal\n })\n : undefined;\n const outcome = normalized ?? unavailable(diagnostic ?? \"invalid-execution-result\");\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return Object.freeze({\n authorResultAccepted: diagnostic === undefined && normalized !== undefined,\n outcome\n });\n }\n\n #commitTerminal(slot: CoreSlot, terminal: unknown, productOutcome = false): CheckOutcome {\n if (slot.lifecycle.kind === \"settled\") {\n coreInvariant(\"Core Check terminal closure is duplicate\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const outcome =\n diagnostic === undefined\n ? (normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome,\n value: terminal\n }) ?? unavailable(\"invalid-execution-result\"))\n : unavailable(diagnostic);\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return outcome;\n }\n}\n\nfunction terminalDiagnostic(slot: CoreSlot): RecordDiagnostic | undefined {\n if (slot.diagnostics.has(\"record-conflict\")) return \"record-conflict\";\n if (slot.diagnostics.has(\"record-invalid\")) return \"record-invalid\";\n return undefined;\n}\n\nfunction coreCheckFor(slot: CoreSlot): CoreCheck {\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core Check fact requires a settled slot\");\n }\n return Object.freeze({\n checkId: slot.definition.checkId,\n displayName: slot.definition.displayName,\n outcome: slot.lifecycle.outcome\n });\n}\n\nfunction unavailable(code: string): CheckOutcome {\n return Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) });\n}\n\nexport function createCoreCheckSession(\n registrations: readonly CoreCheckRegistration[]\n): CoreCheckSession {\n return new CoreCheckSessionImpl(registrations);\n}\n"]}
|
|
@@ -53,6 +53,11 @@ export function snapshotClosedRecord(value) {
|
|
|
53
53
|
return undefined;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
+
/** Snapshots a closed plain record only when it has exactly the declared own keys. */
|
|
57
|
+
export function snapshotExactClosedRecord(value, keys) {
|
|
58
|
+
const record = snapshotClosedRecord(value);
|
|
59
|
+
return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
|
|
60
|
+
}
|
|
56
61
|
function closedArrayLength(shape) {
|
|
57
62
|
const descriptor = shape.descriptors.length;
|
|
58
63
|
if (typeof descriptor?.value !== "number" || descriptor.enumerable !== false)
|
|
@@ -95,4 +100,15 @@ export function hasRequiredAndOptionalRecordKeys(value, keys) {
|
|
|
95
100
|
return (keys.required.every((key) => Object.hasOwn(value, key)) &&
|
|
96
101
|
Object.keys(value).every((key) => supportedKeys.has(key)));
|
|
97
102
|
}
|
|
103
|
+
/** Snapshots an authoring record whose keys are limited to one required/optional policy. */
|
|
104
|
+
export function snapshotClosedPolicyRecord(value, keys) {
|
|
105
|
+
const record = snapshotClosedRecord(value);
|
|
106
|
+
return record !== undefined &&
|
|
107
|
+
hasRequiredAndOptionalRecordKeys(record, {
|
|
108
|
+
optional: keys.optional ?? [],
|
|
109
|
+
required: keys.required ?? []
|
|
110
|
+
})
|
|
111
|
+
? record
|
|
112
|
+
: undefined;
|
|
113
|
+
}
|
|
98
114
|
//# sourceMappingURL=closed-values.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closed-values.mjs","sourceRoot":"","sources":["../../../src/data-boundary/closed-values.ts"],"names":[],"mappings":"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","sourcesContent":["interface OwnDataShape {\n readonly descriptors: Readonly<Record<string, PropertyDescriptor>>;\n readonly keys: readonly string[];\n}\n\nfunction ownDataShape(value: object): OwnDataShape | undefined {\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n const ownKeys = Reflect.ownKeys(descriptors);\n const keys: string[] = [];\n for (const key of ownKeys) {\n if (typeof key !== \"string\") return undefined;\n keys.push(key);\n }\n if (\n keys.some((key) => {\n const descriptor = descriptors[key];\n return descriptor.get !== undefined || descriptor.set !== undefined;\n })\n )\n return undefined;\n return { descriptors, keys };\n}\n\nexport function snapshotPlainRecord(value: unknown): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return undefined;\n }\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n if (\n Object.values(descriptors).some(\n (descriptor) => descriptor.get !== undefined || descriptor.set !== undefined\n )\n ) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(descriptors)\n .filter(([, descriptor]) => descriptor.enumerable === true)\n .map(([key, descriptor]) => [key, descriptor.value as unknown])\n );\n } catch {\n return undefined;\n }\n}\n\nexport function snapshotClosedRecord(\n value: unknown\n): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return undefined;\n const shape = ownDataShape(value);\n if (\n shape === undefined ||\n shape.keys.some((key) => shape.descriptors[key].enumerable !== true)\n ) {\n return undefined;\n }\n return Object.freeze(\n Object.fromEntries(shape.keys.map((key) => [key, shape.descriptors[key].value as unknown]))\n );\n } catch {\n return undefined;\n }\n}\n\nfunction closedArrayLength(shape: OwnDataShape): number | undefined {\n const descriptor = shape.descriptors.length;\n if (typeof descriptor?.value !== \"number\" || descriptor.enumerable !== false) return undefined;\n const length = descriptor.value;\n return Number.isSafeInteger(length) && length >= 0 && shape.keys.length === length + 1\n ? length\n : undefined;\n}\n\nfunction closedArrayItems(shape: OwnDataShape, length: number): readonly unknown[] | undefined {\n const items: unknown[] = [];\n for (let index = 0; index < length; index += 1) {\n const descriptor = shape.descriptors[String(index)];\n if (descriptor === undefined || descriptor.enumerable !== true) return undefined;\n items.push(descriptor.value as unknown);\n }\n return Object.freeze(items);\n}\n\nexport function snapshotClosedArray(value: unknown): readonly unknown[] | undefined {\n try {\n if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype) return undefined;\n const shape = ownDataShape(value);\n if (shape === undefined) return undefined;\n const length = closedArrayLength(shape);\n return length === undefined ? undefined : closedArrayItems(shape, length);\n } catch {\n return undefined;\n }\n}\n\nexport function hasExactPlainRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: readonly string[]\n): boolean {\n const actualKeys = Object.keys(value);\n return actualKeys.length === keys.length && actualKeys.every((key) => keys.includes(key));\n}\n\nexport function hasRequiredAndOptionalRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: Readonly<{\n readonly optional: readonly string[];\n readonly required: readonly string[];\n }>\n): boolean {\n const supportedKeys = new Set([...keys.required, ...keys.optional]);\n return (\n keys.required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supportedKeys.has(key))\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"closed-values.mjs","sourceRoot":"","sources":["../../../src/data-boundary/closed-values.ts"],"names":[],"mappings":"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","sourcesContent":["interface OwnDataShape {\n readonly descriptors: Readonly<Record<string, PropertyDescriptor>>;\n readonly keys: readonly string[];\n}\n\nfunction ownDataShape(value: object): OwnDataShape | undefined {\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n const ownKeys = Reflect.ownKeys(descriptors);\n const keys: string[] = [];\n for (const key of ownKeys) {\n if (typeof key !== \"string\") return undefined;\n keys.push(key);\n }\n if (\n keys.some((key) => {\n const descriptor = descriptors[key];\n return descriptor.get !== undefined || descriptor.set !== undefined;\n })\n )\n return undefined;\n return { descriptors, keys };\n}\n\nexport function snapshotPlainRecord(value: unknown): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return undefined;\n }\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n if (\n Object.values(descriptors).some(\n (descriptor) => descriptor.get !== undefined || descriptor.set !== undefined\n )\n ) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(descriptors)\n .filter(([, descriptor]) => descriptor.enumerable === true)\n .map(([key, descriptor]) => [key, descriptor.value as unknown])\n );\n } catch {\n return undefined;\n }\n}\n\nexport function snapshotClosedRecord(\n value: unknown\n): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return undefined;\n const shape = ownDataShape(value);\n if (\n shape === undefined ||\n shape.keys.some((key) => shape.descriptors[key].enumerable !== true)\n ) {\n return undefined;\n }\n return Object.freeze(\n Object.fromEntries(shape.keys.map((key) => [key, shape.descriptors[key].value as unknown]))\n );\n } catch {\n return undefined;\n }\n}\n\n/** Snapshots a closed plain record only when it has exactly the declared own keys. */\nexport function snapshotExactClosedRecord(\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 closedArrayLength(shape: OwnDataShape): number | undefined {\n const descriptor = shape.descriptors.length;\n if (typeof descriptor?.value !== \"number\" || descriptor.enumerable !== false) return undefined;\n const length = descriptor.value;\n return Number.isSafeInteger(length) && length >= 0 && shape.keys.length === length + 1\n ? length\n : undefined;\n}\n\nfunction closedArrayItems(shape: OwnDataShape, length: number): readonly unknown[] | undefined {\n const items: unknown[] = [];\n for (let index = 0; index < length; index += 1) {\n const descriptor = shape.descriptors[String(index)];\n if (descriptor === undefined || descriptor.enumerable !== true) return undefined;\n items.push(descriptor.value as unknown);\n }\n return Object.freeze(items);\n}\n\nexport function snapshotClosedArray(value: unknown): readonly unknown[] | undefined {\n try {\n if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype) return undefined;\n const shape = ownDataShape(value);\n if (shape === undefined) return undefined;\n const length = closedArrayLength(shape);\n return length === undefined ? undefined : closedArrayItems(shape, length);\n } catch {\n return undefined;\n }\n}\n\nexport function hasExactPlainRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: readonly string[]\n): boolean {\n const actualKeys = Object.keys(value);\n return actualKeys.length === keys.length && actualKeys.every((key) => keys.includes(key));\n}\n\nexport function hasRequiredAndOptionalRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: Readonly<{\n readonly optional: readonly string[];\n readonly required: readonly string[];\n }>\n): boolean {\n const supportedKeys = new Set([...keys.required, ...keys.optional]);\n return (\n keys.required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supportedKeys.has(key))\n );\n}\n\nexport interface ClosedPolicyRecordKeys {\n readonly optional?: readonly string[];\n readonly required?: readonly string[];\n}\n\n/** Snapshots an authoring record whose keys are limited to one required/optional policy. */\nexport function snapshotClosedPolicyRecord(\n value: unknown,\n keys: ClosedPolicyRecordKeys\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined &&\n hasRequiredAndOptionalRecordKeys(record, {\n optional: keys.optional ?? [],\n required: keys.required ?? []\n })\n ? record\n : undefined;\n}\n"]}
|