@zxyycom/vibe-check 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -75
- package/dist/esm/check/check.mjs +4 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/flag-enablement.mjs +32 -0
- package/dist/esm/check/flag-enablement.mjs.map +1 -0
- package/dist/esm/check/handoff-provider-identity.mjs +18 -0
- package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +2 -2
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- package/dist/esm/check/project-changes.mjs +2 -0
- package/dist/esm/check/project-changes.mjs.map +1 -0
- package/dist/esm/check/project-context.mjs +2 -0
- package/dist/esm/check/project-context.mjs.map +1 -0
- package/dist/esm/check-settlement/fact-validation.mjs +17 -23
- package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
- package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
- package/dist/esm/check-settlement/reason-shape.mjs +12 -0
- package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
- package/dist/esm/check-settlement/record-store.mjs +14 -17
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/check-settlement/session.mjs +8 -2
- package/dist/esm/check-settlement/session.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-data.mjs +36 -7
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
- package/dist/esm/data-boundary/closed-values.mjs +43 -3
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
- package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
- package/dist/esm/data-boundary/project-path.mjs +19 -0
- package/dist/esm/data-boundary/project-path.mjs.map +1 -0
- package/dist/esm/data-boundary/value-shapes.mjs +9 -0
- package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
- package/dist/esm/index.mjs +16 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- package/dist/esm/package-checks/check-authoring.mjs +69 -0
- package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
- package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
- package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/contract.mjs +2 -0
- package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/execution.mjs +134 -0
- package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/options.mjs +284 -0
- package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
- package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/execution.mjs +11 -20
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
- package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
- package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
- package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
- package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
- package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/git.mjs +12 -1
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/path.mjs +1 -17
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process.mjs +5 -0
- package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
- package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/local-cache-options.mjs +28 -0
- package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -27
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +10 -3
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +12 -11
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +184 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +24 -20
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +12 -16
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
- package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs +188 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
- package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
- package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs +46 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs +56 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs +109 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs +55 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +22 -9
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
- package/dist/esm/project-definition/output-defaults.mjs +18 -1
- package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
- package/dist/esm/project-definition/output-validation.mjs +15 -15
- package/dist/esm/project-definition/output-validation.mjs.map +1 -1
- package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
- package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
- package/dist/esm/project-definition/project-changes.mjs +70 -0
- package/dist/esm/project-definition/project-changes.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +132 -16
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +62 -50
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
- package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
- package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
- package/dist/esm/project-run/aggregation.mjs +42 -57
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/changes/git.mjs +161 -0
- package/dist/esm/project-run/changes/git.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +37 -9
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
- package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/messages.mjs +5 -0
- package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/plan.mjs +9 -5
- package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
- package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/preparation.mjs +172 -0
- package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +44 -139
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
- package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +34 -39
- package/dist/esm/project-run/completion/completion.mjs.map +1 -0
- package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
- package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
- package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
- package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
- package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +79 -62
- package/dist/esm/project-run/controls/validation.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
- package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidate.mjs +65 -0
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidates.mjs +26 -0
- package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +83 -0
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
- package/dist/esm/project-run/invocation/execution.mjs +98 -0
- package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
- package/dist/esm/project-run/invocation/paths.mjs +77 -0
- package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
- package/dist/esm/project-run/invocation/progress.mjs +30 -0
- package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +82 -0
- package/dist/esm/project-run/invocation/run.mjs.map +1 -0
- package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
- package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
- package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
- package/dist/esm/project-run/outputs/status.mjs +105 -0
- package/dist/esm/project-run/outputs/status.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +3 -2
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -0
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs +1 -1
- package/dist/esm/project-run/run.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +171 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
- package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +167 -121
- package/docs/changelog.md +300 -0
- package/docs/checks/duplicate-detection.md +131 -60
- package/docs/checks/file-metrics.md +68 -46
- package/docs/checks/function-metrics.md +119 -163
- package/docs/checks/json-schema-validation.md +65 -37
- package/docs/checks/json-validation.md +59 -27
- package/docs/checks/maintenance-reminders.md +68 -32
- package/docs/checks/markdown-link-validation.md +104 -56
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +153 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/cache-results.md +63 -0
- package/docs/guides/callbacks.md +93 -0
- package/docs/guides/check-dependencies.md +152 -0
- package/docs/guides/collecting-project-files.md +59 -0
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +164 -0
- package/docs/guides/finding-waivers.md +87 -0
- package/docs/guides/learned-scheduling.md +83 -0
- package/docs/guides/presenting-findings.md +54 -0
- package/docs/guides/run-outputs.md +171 -0
- package/docs/guides/scheduling.md +208 -0
- package/docs/guides/simulating-admission.md +55 -0
- package/docs/output.md +13 -21
- package/licenses/Lizard-1.24.0-MIT.txt +30 -0
- package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
- package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
- package/licenses/analyzer-translations-NOTICE.md +24 -0
- package/licenses/lizard-1.24.0-provenance.json +957 -0
- package/package.json +19 -6
- package/src/check/check.ts +382 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +2 -2
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/fact-validation.ts +29 -39
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/outcome-normalization.ts +17 -35
- package/src/check-settlement/reason-shape.ts +20 -0
- package/src/check-settlement/record-store.ts +18 -15
- package/src/check-settlement/session.ts +12 -3
- package/src/data-boundary/canonical-data.ts +36 -9
- package/src/data-boundary/canonical-json.ts +18 -1
- package/src/data-boundary/closed-values.ts +54 -5
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/data-boundary/value-shapes.ts +12 -0
- package/src/index.ts +134 -5
- package/src/machine-output/v4/atomic-publication.ts +4 -17
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
- package/src/package-checks/code-quality-findings/policy.ts +23 -0
- package/src/package-checks/command-check/command-check.ts +152 -0
- package/src/package-checks/command-check/contract.ts +168 -0
- package/src/package-checks/command-check/execution.ts +211 -0
- package/src/package-checks/command-check/options.ts +331 -0
- package/src/package-checks/command-check/transcript.ts +35 -0
- package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
- package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
- package/src/package-checks/duplicate-detection/default-check.ts +38 -7
- package/src/package-checks/duplicate-detection/execution.ts +82 -24
- package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
- package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
- package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
- package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
- package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
- package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
- package/src/package-checks/duplicate-detection/options.ts +26 -3
- package/src/package-checks/duplicate-detection/records.ts +65 -12
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +17 -20
- package/src/package-checks/file-metrics/finding-messages.ts +29 -0
- package/src/package-checks/file-metrics/options-resolution.ts +19 -52
- package/src/package-checks/file-metrics/options-validation.ts +23 -32
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +11 -23
- package/src/package-checks/file-metrics/scc/availability.ts +2 -2
- package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
- package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
- package/src/package-checks/file-metrics/scc/parser.ts +4 -4
- package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
- package/src/package-checks/function-metrics/analysis.ts +81 -21
- package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
- package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
- package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
- package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
- package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
- package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
- package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
- package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
- package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
- package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
- package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
- package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
- package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
- package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
- package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
- package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
- package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
- package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
- package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
- package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
- package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
- package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
- package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
- package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
- package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
- package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
- package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
- package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
- package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
- package/src/package-checks/function-metrics/constructor.ts +32 -9
- package/src/package-checks/function-metrics/execution.ts +94 -41
- package/src/package-checks/function-metrics/finding-messages.ts +95 -0
- package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
- package/src/package-checks/function-metrics/measurement-model.ts +15 -1
- package/src/package-checks/function-metrics/measurement.ts +223 -36
- package/src/package-checks/function-metrics/options-resolution.ts +39 -75
- package/src/package-checks/function-metrics/options-validation.ts +30 -39
- package/src/package-checks/function-metrics/options.ts +32 -13
- package/src/package-checks/function-metrics/records.ts +73 -7
- package/src/package-checks/function-metrics/target-files.ts +10 -70
- package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
- package/src/package-checks/host-environment/git.ts +13 -2
- package/src/package-checks/host-environment/path.ts +1 -20
- package/src/package-checks/host-environment/process/contract.ts +17 -9
- package/src/package-checks/host-environment/process/result.ts +48 -20
- package/src/package-checks/host-environment/process/runner.ts +8 -4
- package/src/package-checks/host-environment/process.ts +10 -0
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/final-data.ts +8 -0
- package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
- package/src/package-checks/json-schema-validation/options.ts +27 -1
- package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
- package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
- package/src/package-checks/json-validation/default-check.ts +27 -6
- package/src/package-checks/json-validation/final-data.ts +5 -0
- package/src/package-checks/json-validation/options-validation.ts +4 -18
- package/src/package-checks/json-validation/options.ts +4 -1
- package/src/package-checks/local-cache-options.ts +40 -0
- package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
- package/src/package-checks/markdown-link-validation/default-check.ts +57 -8
- package/src/package-checks/markdown-link-validation/execution.ts +51 -57
- package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
- package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
- package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
- package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
- package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
- package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
- package/src/package-checks/markdown-link-validation/options.ts +15 -1
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
- package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
- package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
- package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
- package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
- package/src/package-checks/markdown-lint/adapter.ts +167 -0
- package/src/package-checks/markdown-lint/default-check.ts +92 -0
- package/src/package-checks/markdown-lint/execution.ts +266 -0
- package/src/package-checks/markdown-lint/final-data.ts +33 -0
- package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
- package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
- package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
- package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
- package/src/package-checks/markdown-lint/options-validation.ts +50 -0
- package/src/package-checks/markdown-lint/options.ts +82 -0
- package/src/package-checks/markdown-lint/records.ts +132 -0
- package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
- package/src/package-checks/project-files/collection.ts +39 -23
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +4 -15
- package/src/package-checks/project-files/gitlink-revision.ts +5 -7
- package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
- package/src/package-checks/project-files/public-collection.ts +92 -0
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
- package/src/package-checks/secret-detection/classification.ts +30 -0
- package/src/package-checks/secret-detection/default-check.ts +73 -0
- package/src/package-checks/secret-detection/execution.ts +247 -0
- package/src/package-checks/secret-detection/final-data.ts +57 -0
- package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
- package/src/package-checks/secret-detection/input-preparation.ts +290 -0
- package/src/package-checks/secret-detection/options-resolution.ts +65 -0
- package/src/package-checks/secret-detection/options-validation.ts +27 -0
- package/src/package-checks/secret-detection/options.ts +39 -0
- package/src/package-checks/secret-detection/records.ts +77 -0
- package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/package-tools/cache/cache-json-by-key.ts +300 -0
- package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
- package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
- package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
- package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
- package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
- package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
- package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
- package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
- package/src/package-tools/learned-critical-path/strategy.ts +302 -0
- package/src/project-definition/check-tree/authoring.ts +40 -234
- package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
- package/src/project-definition/check-tree/collection-authoring.ts +13 -0
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +21 -9
- package/src/project-definition/check-tree/resolution.ts +84 -28
- package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
- package/src/project-definition/declarative-snapshot.ts +94 -0
- package/src/project-definition/output-defaults.ts +32 -1
- package/src/project-definition/output-validation.ts +15 -15
- package/src/project-definition/progress-rendering-output.ts +121 -0
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +166 -19
- package/src/project-definition/project-definition.ts +177 -67
- package/src/project-definition/resource-unit-mapping.ts +25 -0
- package/src/project-definition/scheduler-policy.ts +556 -0
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
- package/src/project-run/admission-strategy-provider/provider.ts +45 -0
- package/src/project-run/aggregation.ts +52 -70
- package/src/project-run/changes/git.ts +206 -0
- package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
- package/src/project-run/check-execution/callback.ts +52 -9
- package/src/project-run/check-execution/console-capture.ts +262 -0
- package/src/project-run/check-execution/dependencies.ts +161 -10
- package/src/project-run/check-execution/execution-finalization.ts +103 -27
- package/src/project-run/check-execution/execution-settlement.ts +99 -32
- package/src/project-run/check-execution/flag-controls.ts +146 -0
- package/src/project-run/check-execution/lifecycle.ts +29 -0
- package/src/project-run/check-execution/messages.ts +8 -0
- package/src/project-run/check-execution/plan.ts +12 -8
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/preparation.ts +309 -0
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +92 -232
- package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
- package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
- package/src/project-run/check-execution/terminal-result.ts +108 -29
- package/src/project-run/{completion.ts → completion/completion.ts} +33 -59
- package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
- package/src/project-run/completion/result-resolver.ts +60 -0
- package/src/project-run/controls/contract.ts +22 -9
- package/src/project-run/controls/outputs-override-validation.ts +83 -60
- package/src/project-run/controls/validation-result.ts +17 -6
- package/src/project-run/controls/validation.ts +110 -68
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/logger.ts +132 -207
- package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
- package/src/project-run/invocation/candidate.ts +99 -0
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +120 -0
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/paths.ts +154 -0
- package/src/project-run/invocation/progress.ts +38 -0
- package/src/project-run/invocation/run.ts +144 -0
- package/src/project-run/invocation/scheduler.ts +82 -0
- package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
- package/src/project-run/outputs/status.ts +161 -0
- package/src/project-run/progress-rendering/presentation.ts +150 -36
- package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
- package/src/project-run/progress-rendering/renderer.ts +23 -6
- package/src/project-run/project-context.ts +10 -5
- package/src/project-run/result.ts +50 -4
- package/src/project-run/run.ts +7 -6
- package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +321 -0
- package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
- package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
- package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
- package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
- package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
- package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
- package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
- package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
- package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
- package/src/project-run/task-scheduler/execution-state.ts +97 -6
- package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
- package/src/project-run/task-scheduler/graph-validation.ts +77 -31
- package/src/project-run/task-scheduler/graph.ts +111 -3
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
- package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
- package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
- package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
- package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
- package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
- package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
- package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
- package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
- package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
- package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
- package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
- package/src/project-run/task-scheduler/scheduler.ts +233 -171
- package/types/check/check.d.ts +225 -69
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/inherited-collection.d.ts +1 -1
- package/types/check/project-changes.d.ts +13 -0
- package/types/check/project-context.d.ts +10 -0
- package/types/check-settlement/facts.d.ts +1 -1
- package/types/check-settlement/reason-shape.d.ts +5 -0
- package/types/check-settlement/record-store.d.ts +2 -2
- package/types/check-settlement/session.d.ts +3 -1
- package/types/data-boundary/canonical-data.d.ts +28 -5
- package/types/data-boundary/canonical-json.d.ts +18 -1
- package/types/data-boundary/closed-values.d.ts +24 -0
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/data-boundary/value-shapes.d.ts +3 -0
- package/types/index.d.ts +40 -9
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
- package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
- package/types/package-checks/command-check/command-check.d.ts +48 -0
- package/types/package-checks/command-check/contract.d.ts +108 -0
- package/types/package-checks/command-check/execution.d.ts +7 -0
- package/types/package-checks/command-check/options.d.ts +11 -0
- package/types/package-checks/command-check/transcript.d.ts +8 -0
- package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
- package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +21 -3
- package/types/package-checks/duplicate-detection/records.d.ts +20 -3
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +5 -10
- package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
- package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
- package/types/package-checks/function-metrics/analysis.d.ts +1 -1
- package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
- package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
- package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
- package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
- package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
- package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
- package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
- package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
- package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
- package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
- package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
- package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
- package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
- package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
- package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
- package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
- package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
- package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
- package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
- package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
- package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
- package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
- package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
- package/types/package-checks/function-metrics/constructor.d.ts +6 -3
- package/types/package-checks/function-metrics/execution.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
- package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
- package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
- package/types/package-checks/function-metrics/measurement.d.ts +22 -7
- package/types/package-checks/function-metrics/options.d.ts +26 -12
- package/types/package-checks/function-metrics/records.d.ts +24 -5
- package/types/package-checks/function-metrics/target-files.d.ts +4 -3
- package/types/package-checks/host-environment/csv.d.ts +2 -0
- package/types/package-checks/host-environment/git.d.ts +3 -1
- package/types/package-checks/host-environment/path.d.ts +1 -3
- package/types/package-checks/host-environment/process/contract.d.ts +17 -9
- package/types/package-checks/host-environment/process.d.ts +5 -0
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
- package/types/package-checks/json-schema-validation/options.d.ts +33 -4
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/final-data.d.ts +5 -0
- package/types/package-checks/json-validation/options.d.ts +2 -1
- package/types/package-checks/local-cache-options.d.ts +9 -0
- package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
- package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
- package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
- package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
- package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
- package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
- package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
- package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
- package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
- package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
- package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
- package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
- package/types/package-checks/markdown-lint/execution.d.ts +24 -0
- package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
- package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
- package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
- package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-lint/options.d.ts +65 -0
- package/types/package-checks/markdown-lint/records.d.ts +39 -0
- package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
- package/types/package-checks/project-files/public-collection.d.ts +16 -0
- package/types/package-checks/secret-detection/classification.d.ts +12 -0
- package/types/package-checks/secret-detection/default-check.d.ts +14 -0
- package/types/package-checks/secret-detection/execution.d.ts +14 -0
- package/types/package-checks/secret-detection/final-data.d.ts +15 -0
- package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
- package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
- package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
- package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
- package/types/package-checks/secret-detection/options.d.ts +33 -0
- package/types/package-checks/secret-detection/records.d.ts +35 -0
- package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
- package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
- package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
- package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
- package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
- package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
- package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
- package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
- package/types/project-definition/check-tree/authoring.d.ts +13 -14
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
- package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +13 -6
- package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
- package/types/project-definition/declarative-snapshot.d.ts +10 -0
- package/types/project-definition/output-defaults.d.ts +7 -0
- package/types/project-definition/output-validation.d.ts +2 -1
- package/types/project-definition/progress-rendering-output.d.ts +41 -0
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +49 -19
- package/types/project-definition/resource-unit-mapping.d.ts +4 -0
- package/types/project-definition/scheduler-policy.d.ts +497 -0
- package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
- package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
- package/types/project-run/aggregation.d.ts +8 -6
- package/types/project-run/changes/git.d.ts +14 -0
- package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/callback.d.ts +5 -1
- package/types/project-run/check-execution/console-capture.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +4 -1
- package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
- package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
- package/types/project-run/check-execution/flag-controls.d.ts +27 -0
- package/types/project-run/check-execution/lifecycle.d.ts +24 -0
- package/types/project-run/check-execution/messages.d.ts +2 -0
- package/types/project-run/check-execution/plan.d.ts +2 -3
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/preparation.d.ts +29 -0
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
- package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
- package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
- package/types/project-run/check-execution/terminal-result.d.ts +13 -1
- package/types/project-run/{completion.d.ts → completion/completion.d.ts} +7 -5
- package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
- package/types/project-run/completion/result-resolver.d.ts +4 -0
- package/types/project-run/controls/contract.d.ts +22 -9
- package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
- package/types/project-run/controls/validation-result.d.ts +12 -4
- package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
- package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
- package/types/project-run/invocation/candidate.d.ts +12 -0
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/paths.d.ts +40 -0
- package/types/project-run/invocation/progress.d.ts +11 -0
- package/types/project-run/invocation/run.d.ts +43 -0
- package/types/project-run/invocation/scheduler.d.ts +16 -0
- package/types/project-run/outputs/configuration.d.ts +3 -0
- package/types/project-run/outputs/status.d.ts +48 -0
- package/types/project-run/progress-rendering/presentation.d.ts +12 -7
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
- package/types/project-run/progress-rendering/renderer.d.ts +11 -3
- package/types/project-run/project-context.d.ts +5 -4
- package/types/project-run/result.d.ts +38 -4
- package/types/project-run/run.d.ts +6 -5
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
- package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
- package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
- package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
- package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
- package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
- package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
- package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
- package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
- package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
- package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
- package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
- package/types/project-run/task-scheduler/graph.d.ts +15 -0
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
- package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
- package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
- package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
- package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
- package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
- package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
- package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
- package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
- package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
- package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
- package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
- package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight.mjs +0 -186
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/completion.mjs.map +0 -1
- package/dist/esm/project-run/invocation-creation.mjs +0 -111
- package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
- package/dist/esm/project-run/invocation.mjs +0 -195
- package/dist/esm/project-run/invocation.mjs.map +0 -1
- package/dist/esm/project-run/machine-publication.mjs.map +0 -1
- package/dist/esm/project-run/output-configuration.mjs.map +0 -1
- package/dist/esm/project-run/output-status.mjs +0 -43
- package/dist/esm/project-run/output-status.mjs.map +0 -1
- package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
- package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
- package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
- package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
- package/src/package-checks/host-environment/process/command.ts +0 -21
- package/src/project-run/check-execution/preflight.ts +0 -321
- package/src/project-run/invocation-creation.ts +0 -160
- package/src/project-run/invocation.ts +0 -303
- package/src/project-run/output-status.ts +0 -69
- package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
- package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
- package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
- package/types/package-checks/host-environment/process/command.d.ts +0 -7
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- package/types/project-run/check-execution/preflight.d.ts +0 -27
- package/types/project-run/invocation.d.ts +0 -34
- package/types/project-run/output-configuration.d.ts +0 -3
- package/types/project-run/output-status.d.ts +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,uCAAuC,EACvC,2BAA2B,EAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,iCAAiC,EAElC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uCAAuC,EACvC,2BAA2B,EAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AA8B3E,MAAM,UAAU,oBAAoB,CAClC,OAAO,GAAgC,EAAE;IAMzC,MAAM,KAAK,GAAG,iCAAiC,CAC7C,OAAO,EACP,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,CAAC,EACzF,uCAAuC,CACxC,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,eAAe,GAAG,kCAAkC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,UAAU;QACnB,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,6BAA6B;QACxC,OAAO,EAAE,CAAC,eAAe,EAAE,EAAE,CAC3B,gCAAgC,CAAC,eAAe,CAAC;YAC/C,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YACxC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,2IAA2I;qBAC9I;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport {\n resolvePackageCheckAuthoringInput,\n type PackageCheckIdentityInput\n} from \"../check-authoring.ts\";\nimport {\n JSON_SCHEMA_VALIDATION_CHECK_DEFINITION,\n executeJsonSchemaValidation\n} from \"./json-schema-validation.ts\";\nimport { parseJsonSchemaValidationData } from \"./final-data.ts\";\nimport type {\n JsonSchemaValidationOptions,\n ResolvedJsonSchemaValidationOptions\n} from \"./options.ts\";\nimport { resolveJsonSchemaValidationOptions } from \"./options-resolution.ts\";\nimport { validJsonSchemaValidationOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的 file、identity、reference、schema 与 binding policy 构造 Check。\n *\n * @param options - 省略顶层字段和 file fields 使用 package defaults;显式数组是完整替换值。\n * @returns 固定 `json-schema-validation` identity、完整冻结 options、parser 与执行逻辑。\n * @throws {TypeError} input 不符合 closed authoring policy、identity 或 binding 不变量时抛出。\n */\nexport function jsonSchemaValidation(\n options?: JsonSchemaValidationOptions<\"json-schema-validation\">\n): TypedCheckWithOptions<\n \"json-schema-validation\",\n ResolvedJsonSchemaValidationOptions,\n typeof parseJsonSchemaValidationData\n>;\nexport function jsonSchemaValidation<const Id extends string>(\n options: JsonSchemaValidationOptions<Id> & PackageCheckIdentityInput<Id>\n): TypedCheckWithOptions<\n Id,\n ResolvedJsonSchemaValidationOptions,\n typeof parseJsonSchemaValidationData\n>;\nexport function jsonSchemaValidation(\n options: JsonSchemaValidationOptions\n): TypedCheckWithOptions<\n string,\n ResolvedJsonSchemaValidationOptions,\n typeof parseJsonSchemaValidationData\n>;\nexport function jsonSchemaValidation(\n options: JsonSchemaValidationOptions = {}\n): TypedCheckWithOptions<\n string,\n ResolvedJsonSchemaValidationOptions,\n typeof parseJsonSchemaValidationData\n> {\n const input = resolvePackageCheckAuthoringInput(\n options,\n [\"files\", \"maximumBytes\", \"schemaIdentity\", \"referenceResolution\", \"schemas\", \"bindings\"],\n JSON_SCHEMA_VALIDATION_CHECK_DEFINITION\n );\n if (input === undefined) {\n throw new TypeError(\"jsonSchemaValidation options must match the documented closed policy\");\n }\n const resolvedOptions = resolveJsonSchemaValidationOptions(input.domainOptions);\n if (resolvedOptions === undefined) {\n throw new TypeError(\"jsonSchemaValidation options must match the documented closed policy\");\n }\n return defineCheck({\n ...input.definition,\n execute: executeJsonSchemaValidation,\n parseData: parseJsonSchemaValidationData,\n prepare: (preparedOptions) =>\n validJsonSchemaValidationOptions(preparedOptions)\n ? { status: \"success\", preparedOptions }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"jsonSchemaValidation options are invalid; recreate the Check with jsonSchemaValidation(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAsBnD,0CAA0C;AAC1C,MAAM,UAAU,6BAA6B,CAAC,IAAa;IACzD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,OAAO,eAAe,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/F,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe;QACf,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAa;IAC9C,OAAO,oBAAoB,CACzB,IAAI,EACJ;QACE,cAAc;QACd,qBAAqB;QACrB,qBAAqB;QACrB,YAAY;QACZ,iBAAiB;QACjB,oBAAoB;QACpB,aAAa;QACb,mBAAmB;KACpB,EACD,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAYD,SAAS,YAAY,CAAC,KAAwC;IAC5D,OAAO;QACL,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,YAAY,CAAC;QACxD,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACtE,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACtE,UAAU,EAAE,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;QACpD,kBAAkB,EAAE,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpE,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;QACtD,iBAAiB,EAAE,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC;KACnE,CAAC;AACJ,CAAC;AAYD,SAAS,wBAAwB,CAC/B,eAAwB,EACxB,MAAoB;IAEpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,CACL,MAAM,CAAC,YAAY;QACjB,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,iBAAiB;QACpF,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,UAAU;QAC9C,MAAM,CAAC,kBAAkB,IAAI,+BAA+B;QAC5D,eAAe,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,OAAO,CACL,MAAM,CAAC,YAAY,KAAK,SAAS;QACjC,MAAM,CAAC,mBAAmB,KAAK,SAAS;QACxC,MAAM,CAAC,mBAAmB,KAAK,SAAS;QACxC,MAAM,CAAC,UAAU,KAAK,SAAS;QAC/B,MAAM,CAAC,kBAAkB,KAAK,SAAS;QACvC,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,MAAM,CAAC,iBAAiB,KAAK,SAAS,CACvC,CAAC;AACJ,CAAC","sourcesContent":["import {\n exactFinalDataRecord,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\n/** 单次运行最多发布的 JSON Schema issue Record 数量。 */\nexport const MAX_REPORTED_JSON_SCHEMA_ISSUES = 100;\n\n/** `json-schema-validation` 在 passed/failed outcome 中发布的主数据。 */\nexport interface JsonSchemaValidationFinalData {\n /** Definition 中已声明的 binding 总数。 */\n readonly bindingCount: number;\n /** 因所引用 schema 存在 document 或 compile issue 而未验证 instance 的 binding 数。 */\n readonly blockedBindingCount: number;\n /** instance out-of-scope、document invalid 或不符合对应 schema 的 binding 数。 */\n readonly invalidBindingCount: number;\n /** schema document、compile、instance 与 keyword issue 的总数。 */\n readonly issueCount: number;\n /** 是否因发布上限而省略了一个或多个 issue Record。 */\n readonly issuesTruncated: boolean;\n /** 实际发布为 Record 的 issue 数。 */\n readonly reportedIssueCount: number;\n /** Definition 中声明的不同 schema identity 数。 */\n readonly schemaCount: number;\n /** input 符合对应 schema 的 binding 数。 */\n readonly validBindingCount: number;\n}\n\n/** 验证计数与截断不变量并脱离 canonical final data。 */\nexport function parseJsonSchemaValidationData(data: unknown): JsonSchemaValidationFinalData {\n const value = jsonSchemaFinalDataRecord(data);\n const counts = parsedCounts(value);\n const issuesTruncated = value.issuesTruncated;\n if (typeof issuesTruncated !== \"boolean\" || !validFinalDataInvariants(issuesTruncated, counts)) {\n throw invalidFinalData(\"jsonSchemaValidation\");\n }\n return Object.freeze({\n bindingCount: counts.bindingCount,\n blockedBindingCount: counts.blockedBindingCount,\n invalidBindingCount: counts.invalidBindingCount,\n issueCount: counts.issueCount,\n issuesTruncated,\n reportedIssueCount: counts.reportedIssueCount,\n schemaCount: counts.schemaCount,\n validBindingCount: counts.validBindingCount\n });\n}\n\nfunction jsonSchemaFinalDataRecord(data: unknown): Readonly<Record<string, unknown>> {\n return exactFinalDataRecord(\n data,\n [\n \"bindingCount\",\n \"blockedBindingCount\",\n \"invalidBindingCount\",\n \"issueCount\",\n \"issuesTruncated\",\n \"reportedIssueCount\",\n \"schemaCount\",\n \"validBindingCount\"\n ],\n \"jsonSchemaValidation\"\n );\n}\n\ninterface ParsedCounts {\n readonly bindingCount: number | undefined;\n readonly blockedBindingCount: number | undefined;\n readonly invalidBindingCount: number | undefined;\n readonly issueCount: number | undefined;\n readonly reportedIssueCount: number | undefined;\n readonly schemaCount: number | undefined;\n readonly validBindingCount: number | undefined;\n}\n\nfunction parsedCounts(value: Readonly<Record<string, unknown>>): ParsedCounts {\n return {\n bindingCount: nonNegativeSafeInteger(value.bindingCount),\n blockedBindingCount: nonNegativeSafeInteger(value.blockedBindingCount),\n invalidBindingCount: nonNegativeSafeInteger(value.invalidBindingCount),\n issueCount: nonNegativeSafeInteger(value.issueCount),\n reportedIssueCount: nonNegativeSafeInteger(value.reportedIssueCount),\n schemaCount: nonNegativeSafeInteger(value.schemaCount),\n validBindingCount: nonNegativeSafeInteger(value.validBindingCount)\n };\n}\n\ninterface CompleteCounts {\n readonly bindingCount: number;\n readonly blockedBindingCount: number;\n readonly invalidBindingCount: number;\n readonly issueCount: number;\n readonly reportedIssueCount: number;\n readonly schemaCount: number;\n readonly validBindingCount: number;\n}\n\nfunction validFinalDataInvariants(\n issuesTruncated: boolean,\n counts: ParsedCounts\n): counts is CompleteCounts {\n if (!allCountsDefined(counts)) return false;\n return (\n counts.bindingCount ===\n counts.blockedBindingCount + counts.invalidBindingCount + counts.validBindingCount &&\n counts.reportedIssueCount <= counts.issueCount &&\n counts.reportedIssueCount <= MAX_REPORTED_JSON_SCHEMA_ISSUES &&\n issuesTruncated === counts.issueCount > counts.reportedIssueCount\n );\n}\n\nfunction allCountsDefined(counts: ParsedCounts): counts is CompleteCounts {\n return (\n counts.bindingCount !== undefined &&\n counts.blockedBindingCount !== undefined &&\n counts.invalidBindingCount !== undefined &&\n counts.issueCount !== undefined &&\n counts.reportedIssueCount !== undefined &&\n counts.schemaCount !== undefined &&\n counts.validBindingCount !== undefined\n );\n}\n"]}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { snapshotClosedArray, snapshotClosedRecord, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
2
|
+
import { isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
|
|
2
3
|
import { validProjectFileSelection } from "../project-files/configuration.mjs";
|
|
3
|
-
function exactRecord(value, keys) {
|
|
4
|
-
const record = snapshotClosedRecord(value);
|
|
5
|
-
return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
|
|
6
|
-
}
|
|
7
|
-
function positiveSafeInteger(value) {
|
|
8
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
9
|
-
}
|
|
10
4
|
export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
11
|
-
const options =
|
|
5
|
+
const options = snapshotExactClosedRecord(candidateOptions, [
|
|
12
6
|
"files",
|
|
13
7
|
"maximumBytes",
|
|
14
8
|
"schemaIdentity",
|
|
@@ -18,7 +12,7 @@ export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
|
18
12
|
]);
|
|
19
13
|
if (options === undefined ||
|
|
20
14
|
!validProjectFileSelection(options.files) ||
|
|
21
|
-
!
|
|
15
|
+
!isPositiveSafeInteger(options.maximumBytes) ||
|
|
22
16
|
!validJsonSchemaIdentity(options.schemaIdentity) ||
|
|
23
17
|
!validJsonSchemaReferenceResolution(options.referenceResolution)) {
|
|
24
18
|
return false;
|
|
@@ -31,7 +25,7 @@ export function validJsonSchemaValidationOptions(candidateOptions) {
|
|
|
31
25
|
validJsonSchemaBindings(bindings, declaredSchemaIds));
|
|
32
26
|
}
|
|
33
27
|
function validJsonSchemaIdentity(candidateIdentity) {
|
|
34
|
-
const identity =
|
|
28
|
+
const identity = snapshotExactClosedRecord(candidateIdentity, ["mode"]);
|
|
35
29
|
return (identity !== undefined &&
|
|
36
30
|
(identity.mode === "require-match" ||
|
|
37
31
|
identity.mode === "configuration-authoritative" ||
|
|
@@ -43,11 +37,11 @@ function validJsonSchemaReferenceResolution(candidateResolution) {
|
|
|
43
37
|
return false;
|
|
44
38
|
}
|
|
45
39
|
if (referenceResolution.mode === "offline") {
|
|
46
|
-
return
|
|
40
|
+
return snapshotExactClosedRecord(referenceResolution, ["mode"]) !== undefined;
|
|
47
41
|
}
|
|
48
42
|
if (referenceResolution.mode !== "allowlisted")
|
|
49
43
|
return false;
|
|
50
|
-
const allowlisted =
|
|
44
|
+
const allowlisted = snapshotExactClosedRecord(referenceResolution, ["mode", "sources"]);
|
|
51
45
|
const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);
|
|
52
46
|
return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);
|
|
53
47
|
}
|
|
@@ -84,10 +78,10 @@ function validatedReferenceSource(sourceCandidate) {
|
|
|
84
78
|
return httpsSource === undefined ? undefined : { kind: "https", ...httpsSource };
|
|
85
79
|
}
|
|
86
80
|
function validBundledSource(source) {
|
|
87
|
-
return
|
|
81
|
+
return snapshotExactClosedRecord(source, ["kind", "catalog"])?.catalog === "json-schema-2020-12";
|
|
88
82
|
}
|
|
89
83
|
function validatedHttpsSource(source) {
|
|
90
|
-
const httpsSource =
|
|
84
|
+
const httpsSource = snapshotExactClosedRecord(source, ["kind", "id", "origin", "pathPrefix"]);
|
|
91
85
|
if (httpsSource === undefined ||
|
|
92
86
|
!safeAbsoluteIdentifier(httpsSource.id) ||
|
|
93
87
|
!safeHttpsOrigin(httpsSource.origin) ||
|
|
@@ -100,7 +94,7 @@ function validatedSchemaRegistryIds(schemas) {
|
|
|
100
94
|
const declaredSchemaIds = new Set();
|
|
101
95
|
const schemaPaths = new Set();
|
|
102
96
|
for (const schemaCandidate of schemas) {
|
|
103
|
-
const schemaRecord =
|
|
97
|
+
const schemaRecord = snapshotExactClosedRecord(schemaCandidate, ["id", "path"]);
|
|
104
98
|
if (schemaRecord === undefined ||
|
|
105
99
|
!safeAbsoluteIdentifier(schemaRecord.id) ||
|
|
106
100
|
!normalizedProjectJsonPath(schemaRecord.path) ||
|
|
@@ -117,7 +111,11 @@ function validJsonSchemaBindings(bindings, declaredSchemaIds) {
|
|
|
117
111
|
const bindingIds = new Set();
|
|
118
112
|
const bindingTargets = new Set();
|
|
119
113
|
for (const bindingCandidate of bindings) {
|
|
120
|
-
const bindingRecord =
|
|
114
|
+
const bindingRecord = snapshotExactClosedRecord(bindingCandidate, [
|
|
115
|
+
"id",
|
|
116
|
+
"instancePath",
|
|
117
|
+
"schemaId"
|
|
118
|
+
]);
|
|
121
119
|
if (bindingRecord === undefined ||
|
|
122
120
|
!safeBindingId(bindingRecord.id) ||
|
|
123
121
|
!normalizedProjectJsonPath(bindingRecord.instancePath) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasExactPlainRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nexport function validJsonSchemaValidationOptions(\n candidateOptions: unknown\n): candidateOptions is ResolvedJsonSchemaValidationOptions {\n const options = exactRecord(candidateOptions, [\n \"files\",\n \"maximumBytes\",\n \"schemaIdentity\",\n \"referenceResolution\",\n \"schemas\",\n \"bindings\"\n ]);\n if (\n options === undefined ||\n !validProjectFileSelection(options.files) ||\n !positiveSafeInteger(options.maximumBytes) ||\n !validJsonSchemaIdentity(options.schemaIdentity) ||\n !validJsonSchemaReferenceResolution(options.referenceResolution)\n ) {\n return false;\n }\n\n const schemas = snapshotClosedArray(options.schemas);\n const bindings = snapshotClosedArray(options.bindings);\n const declaredSchemaIds = schemas === undefined ? undefined : validatedSchemaRegistryIds(schemas);\n return (\n bindings !== undefined &&\n declaredSchemaIds !== undefined &&\n validJsonSchemaBindings(bindings, declaredSchemaIds)\n );\n}\n\nfunction validJsonSchemaIdentity(candidateIdentity: unknown): boolean {\n const identity = exactRecord(candidateIdentity, [\"mode\"]);\n return (\n identity !== undefined &&\n (identity.mode === \"require-match\" ||\n identity.mode === \"configuration-authoritative\" ||\n identity.mode === \"document-authoritative\")\n );\n}\n\nfunction validJsonSchemaReferenceResolution(candidateResolution: unknown): boolean {\n const referenceResolution = snapshotClosedRecord(candidateResolution);\n if (referenceResolution === undefined || typeof referenceResolution.mode !== \"string\") {\n return false;\n }\n if (referenceResolution.mode === \"offline\") {\n return exactRecord(referenceResolution, [\"mode\"]) !== undefined;\n }\n if (referenceResolution.mode !== \"allowlisted\") return false;\n\n const allowlisted = exactRecord(referenceResolution, [\"mode\", \"sources\"]);\n const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);\n return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);\n}\n\nfunction validJsonSchemaReferenceSources(sources: readonly unknown[]): boolean {\n const sourceIds = new Set<string>();\n const sourceLocations = new Set<string>();\n let bundledCatalogCount = 0;\n for (const sourceCandidate of sources) {\n const source = validatedReferenceSource(sourceCandidate);\n if (source === undefined) return false;\n if (source.kind === \"bundled\") {\n bundledCatalogCount += 1;\n if (bundledCatalogCount > 1) return false;\n continue;\n }\n if (sourceIds.has(source.id) || sourceLocations.has(source.location)) return false;\n sourceIds.add(source.id);\n sourceLocations.add(source.location);\n }\n return true;\n}\n\nfunction validatedReferenceSource(sourceCandidate: unknown) {\n const source = snapshotClosedRecord(sourceCandidate);\n if (source === undefined || typeof source.kind !== \"string\") return undefined;\n if (source.kind === \"bundled\")\n return validBundledSource(source) ? { kind: \"bundled\" as const } : undefined;\n if (source.kind !== \"https\") return undefined;\n const httpsSource = validatedHttpsSource(source);\n return httpsSource === undefined ? undefined : { kind: \"https\" as const, ...httpsSource };\n}\n\nfunction validBundledSource(source: Readonly<Record<string, unknown>>): boolean {\n return exactRecord(source, [\"kind\", \"catalog\"])?.catalog === \"json-schema-2020-12\";\n}\n\nfunction validatedHttpsSource(source: Readonly<Record<string, unknown>>) {\n const httpsSource = exactRecord(source, [\"kind\", \"id\", \"origin\", \"pathPrefix\"]);\n if (\n httpsSource === undefined ||\n !safeAbsoluteIdentifier(httpsSource.id) ||\n !safeHttpsOrigin(httpsSource.origin) ||\n !safePathPrefix(httpsSource.pathPrefix)\n )\n return undefined;\n return { id: httpsSource.id, location: `${httpsSource.origin}\\n${httpsSource.pathPrefix}` };\n}\n\n/** Returns declared IDs only after the whole schema registry satisfies its closed authoring invariant. */\nfunction validatedSchemaRegistryIds(schemas: readonly unknown[]): ReadonlySet<string> | undefined {\n const declaredSchemaIds = new Set<string>();\n const schemaPaths = new Set<string>();\n for (const schemaCandidate of schemas) {\n const schemaRecord = exactRecord(schemaCandidate, [\"id\", \"path\"]);\n if (\n schemaRecord === undefined ||\n !safeAbsoluteIdentifier(schemaRecord.id) ||\n !normalizedProjectJsonPath(schemaRecord.path) ||\n declaredSchemaIds.has(schemaRecord.id) ||\n schemaPaths.has(schemaRecord.path)\n ) {\n return undefined;\n }\n declaredSchemaIds.add(schemaRecord.id);\n schemaPaths.add(schemaRecord.path);\n }\n return declaredSchemaIds;\n}\n\nfunction validJsonSchemaBindings(\n bindings: readonly unknown[],\n declaredSchemaIds: ReadonlySet<string>\n): boolean {\n const bindingIds = new Set<string>();\n const bindingTargets = new Set<string>();\n for (const bindingCandidate of bindings) {\n const bindingRecord = exactRecord(bindingCandidate, [\"id\", \"instancePath\", \"schemaId\"]);\n if (\n bindingRecord === undefined ||\n !safeBindingId(bindingRecord.id) ||\n !normalizedProjectJsonPath(bindingRecord.instancePath) ||\n typeof bindingRecord.schemaId !== \"string\" ||\n !declaredSchemaIds.has(bindingRecord.schemaId) ||\n bindingIds.has(bindingRecord.id)\n ) {\n return false;\n }\n const bindingTarget = `${bindingRecord.instancePath}\\n${bindingRecord.schemaId}`;\n if (bindingTargets.has(bindingTarget)) return false;\n bindingIds.add(bindingRecord.id);\n bindingTargets.add(bindingTarget);\n }\n return true;\n}\n\nfunction safeAbsoluteIdentifier(identifier: unknown): identifier is string {\n if (!boundedNonEmptyString(identifier, 256)) return false;\n try {\n const url = new URL(identifier);\n return safeIdentifierUrl(url, identifier);\n } catch {\n return false;\n }\n}\n\nfunction safeIdentifierUrl(url: URL, identifier: string): boolean {\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n}\n\nfunction safeHttpsOrigin(origin: unknown): origin is string {\n if (!boundedNonEmptyString(origin, 200)) return false;\n try {\n const url = new URL(origin);\n return safeHttpsOriginUrl(url, origin);\n } catch {\n return false;\n }\n}\n\nfunction safeHttpsOriginUrl(url: URL, origin: string): boolean {\n return (\n url.protocol === \"https:\" &&\n url.hostname.length > 0 &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.pathname === \"/\" &&\n url.origin === origin\n );\n}\n\nfunction safePathPrefix(pathPrefix: unknown): pathPrefix is string {\n if (!validPathPrefixSyntax(pathPrefix)) return false;\n const segments = pathPrefix.split(\"/\");\n return segments.every(\n (segment, index) => index === 0 || segment === \"\" || (segment !== \".\" && segment !== \"..\")\n );\n}\n\nfunction validPathPrefixSyntax(pathPrefix: unknown): pathPrefix is string {\n return (\n boundedNonEmptyString(pathPrefix, 256) &&\n pathPrefix.startsWith(\"/\") &&\n (pathPrefix === \"/\" || pathPrefix.endsWith(\"/\")) &&\n !pathPrefix.includes(\"\\\\\") &&\n !pathPrefix.includes(\"?\") &&\n !pathPrefix.includes(\"#\") &&\n !pathPrefix.includes(\"//\")\n );\n}\n\nfunction boundedNonEmptyString(value: unknown, maximumLength: number): value is string {\n return typeof value === \"string\" && value.length > 0 && value.length <= maximumLength;\n}\n\nfunction normalizedProjectJsonPath(projectPath: unknown): projectPath is string {\n if (\n typeof projectPath !== \"string\" ||\n projectPath.length === 0 ||\n projectPath.length > 512 ||\n !projectPath.endsWith(\".json\") ||\n projectPath.startsWith(\"/\") ||\n projectPath.includes(\"\\\\\") ||\n projectPath.includes(\"\\u0000\")\n ) {\n return false;\n }\n return projectPath\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\nfunction safeBindingId(bindingId: unknown): bindingId is string {\n return typeof bindingId === \"string\" && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u.test(bindingId);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,MAAM,UAAU,gCAAgC,CAC9C,gBAAyB;IAEzB,MAAM,OAAO,GAAG,yBAAyB,CAAC,gBAAgB,EAAE;QAC1D,OAAO;QACP,cAAc;QACd,gBAAgB;QAChB,qBAAqB;QACrB,SAAS;QACT,UAAU;KACX,CAAC,CAAC;IACH,IACE,OAAO,KAAK,SAAS;QACrB,CAAC,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC;QACzC,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC;QAC5C,CAAC,uBAAuB,CAAC,OAAO,CAAC,cAAc,CAAC;QAChD,CAAC,kCAAkC,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAChE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAClG,OAAO,CACL,QAAQ,KAAK,SAAS;QACtB,iBAAiB,KAAK,SAAS;QAC/B,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,iBAA0B;IACzD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,CACL,QAAQ,KAAK,SAAS;QACtB,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe;YAChC,QAAQ,CAAC,IAAI,KAAK,6BAA6B;YAC/C,QAAQ,CAAC,IAAI,KAAK,wBAAwB,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,mBAA4B;IACtE,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IACtE,IAAI,mBAAmB,KAAK,SAAS,IAAI,OAAO,mBAAmB,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,yBAAyB,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC;IAChF,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAE7D,MAAM,WAAW,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjG,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,+BAA+B,CAAC,OAAO,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,+BAA+B,CAAC,OAA2B;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,KAAK,MAAM,eAAe,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,mBAAmB,IAAI,CAAC,CAAC;YACzB,IAAI,mBAAmB,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACnF,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,eAAwB;IACxD,MAAM,MAAM,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9E,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAC3B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAyC;IACnE,OAAO,yBAAyB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,KAAK,qBAAqB,CAAC;AACnG,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAyC;IACrE,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9F,IACE,WAAW,KAAK,SAAS;QACzB,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;QACpC,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC;QAEvC,OAAO,SAAS,CAAC;IACnB,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;AAC9F,CAAC;AAED,0GAA0G;AAC1G,SAAS,0BAA0B,CAAC,OAA2B;IAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,eAAe,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,yBAAyB,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChF,IACE,YAAY,KAAK,SAAS;YAC1B,CAAC,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC;YAC7C,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAClC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAA4B,EAC5B,iBAAsC;IAEtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,gBAAgB,IAAI,QAAQ,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,yBAAyB,CAAC,gBAAgB,EAAE;YAChE,IAAI;YACJ,cAAc;YACd,UAAU;SACX,CAAC,CAAC;QACH,IACE,aAAa,KAAK,SAAS;YAC3B,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,CAAC,yBAAyB,CAAC,aAAa,CAAC,YAAY,CAAC;YACtD,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ;YAC1C,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC9C,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAChC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAG,GAAG,aAAa,CAAC,YAAY,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;QACjF,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACjC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAmB;IACjD,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAQ,EAAE,UAAkB;IACrD,OAAO,CACL,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;QACtD,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACrB,GAAG,CAAC,IAAI,KAAK,UAAU,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAQ,EAAE,MAAc;IAClD,OAAO,CACL,GAAG,CAAC,QAAQ,KAAK,QAAQ;QACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACrB,GAAG,CAAC,QAAQ,KAAK,GAAG;QACpB,GAAG,CAAC,MAAM,KAAK,MAAM,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,UAAmB;IACzC,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CACnB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,EAAE,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,CAC3F,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAmB;IAChD,OAAO,CACL,qBAAqB,CAAC,UAAU,EAAE,GAAG,CAAC;QACtC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1B,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,aAAqB;IAClE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC;AACxF,CAAC;AAED,SAAS,yBAAyB,CAAC,WAAoB;IACrD,IACE,OAAO,WAAW,KAAK,QAAQ;QAC/B,WAAW,CAAC,MAAM,KAAK,CAAC;QACxB,WAAW,CAAC,MAAM,GAAG,GAAG;QACxB,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9B,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3B,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1B,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,WAAW;SACf,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,aAAa,CAAC,SAAkB;IACvC,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,qCAAqC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChG,CAAC","sourcesContent":["import {\n snapshotClosedArray,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { isPositiveSafeInteger } from \"../../data-boundary/value-shapes.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\n\nexport function validJsonSchemaValidationOptions(\n candidateOptions: unknown\n): candidateOptions is ResolvedJsonSchemaValidationOptions {\n const options = snapshotExactClosedRecord(candidateOptions, [\n \"files\",\n \"maximumBytes\",\n \"schemaIdentity\",\n \"referenceResolution\",\n \"schemas\",\n \"bindings\"\n ]);\n if (\n options === undefined ||\n !validProjectFileSelection(options.files) ||\n !isPositiveSafeInteger(options.maximumBytes) ||\n !validJsonSchemaIdentity(options.schemaIdentity) ||\n !validJsonSchemaReferenceResolution(options.referenceResolution)\n ) {\n return false;\n }\n\n const schemas = snapshotClosedArray(options.schemas);\n const bindings = snapshotClosedArray(options.bindings);\n const declaredSchemaIds = schemas === undefined ? undefined : validatedSchemaRegistryIds(schemas);\n return (\n bindings !== undefined &&\n declaredSchemaIds !== undefined &&\n validJsonSchemaBindings(bindings, declaredSchemaIds)\n );\n}\n\nfunction validJsonSchemaIdentity(candidateIdentity: unknown): boolean {\n const identity = snapshotExactClosedRecord(candidateIdentity, [\"mode\"]);\n return (\n identity !== undefined &&\n (identity.mode === \"require-match\" ||\n identity.mode === \"configuration-authoritative\" ||\n identity.mode === \"document-authoritative\")\n );\n}\n\nfunction validJsonSchemaReferenceResolution(candidateResolution: unknown): boolean {\n const referenceResolution = snapshotClosedRecord(candidateResolution);\n if (referenceResolution === undefined || typeof referenceResolution.mode !== \"string\") {\n return false;\n }\n if (referenceResolution.mode === \"offline\") {\n return snapshotExactClosedRecord(referenceResolution, [\"mode\"]) !== undefined;\n }\n if (referenceResolution.mode !== \"allowlisted\") return false;\n\n const allowlisted = snapshotExactClosedRecord(referenceResolution, [\"mode\", \"sources\"]);\n const sources = allowlisted === undefined ? undefined : snapshotClosedArray(allowlisted.sources);\n return sources !== undefined && sources.length > 0 && validJsonSchemaReferenceSources(sources);\n}\n\nfunction validJsonSchemaReferenceSources(sources: readonly unknown[]): boolean {\n const sourceIds = new Set<string>();\n const sourceLocations = new Set<string>();\n let bundledCatalogCount = 0;\n for (const sourceCandidate of sources) {\n const source = validatedReferenceSource(sourceCandidate);\n if (source === undefined) return false;\n if (source.kind === \"bundled\") {\n bundledCatalogCount += 1;\n if (bundledCatalogCount > 1) return false;\n continue;\n }\n if (sourceIds.has(source.id) || sourceLocations.has(source.location)) return false;\n sourceIds.add(source.id);\n sourceLocations.add(source.location);\n }\n return true;\n}\n\nfunction validatedReferenceSource(sourceCandidate: unknown) {\n const source = snapshotClosedRecord(sourceCandidate);\n if (source === undefined || typeof source.kind !== \"string\") return undefined;\n if (source.kind === \"bundled\")\n return validBundledSource(source) ? { kind: \"bundled\" as const } : undefined;\n if (source.kind !== \"https\") return undefined;\n const httpsSource = validatedHttpsSource(source);\n return httpsSource === undefined ? undefined : { kind: \"https\" as const, ...httpsSource };\n}\n\nfunction validBundledSource(source: Readonly<Record<string, unknown>>): boolean {\n return snapshotExactClosedRecord(source, [\"kind\", \"catalog\"])?.catalog === \"json-schema-2020-12\";\n}\n\nfunction validatedHttpsSource(source: Readonly<Record<string, unknown>>) {\n const httpsSource = snapshotExactClosedRecord(source, [\"kind\", \"id\", \"origin\", \"pathPrefix\"]);\n if (\n httpsSource === undefined ||\n !safeAbsoluteIdentifier(httpsSource.id) ||\n !safeHttpsOrigin(httpsSource.origin) ||\n !safePathPrefix(httpsSource.pathPrefix)\n )\n return undefined;\n return { id: httpsSource.id, location: `${httpsSource.origin}\\n${httpsSource.pathPrefix}` };\n}\n\n/** Returns declared IDs only after the whole schema registry satisfies its closed authoring invariant. */\nfunction validatedSchemaRegistryIds(schemas: readonly unknown[]): ReadonlySet<string> | undefined {\n const declaredSchemaIds = new Set<string>();\n const schemaPaths = new Set<string>();\n for (const schemaCandidate of schemas) {\n const schemaRecord = snapshotExactClosedRecord(schemaCandidate, [\"id\", \"path\"]);\n if (\n schemaRecord === undefined ||\n !safeAbsoluteIdentifier(schemaRecord.id) ||\n !normalizedProjectJsonPath(schemaRecord.path) ||\n declaredSchemaIds.has(schemaRecord.id) ||\n schemaPaths.has(schemaRecord.path)\n ) {\n return undefined;\n }\n declaredSchemaIds.add(schemaRecord.id);\n schemaPaths.add(schemaRecord.path);\n }\n return declaredSchemaIds;\n}\n\nfunction validJsonSchemaBindings(\n bindings: readonly unknown[],\n declaredSchemaIds: ReadonlySet<string>\n): boolean {\n const bindingIds = new Set<string>();\n const bindingTargets = new Set<string>();\n for (const bindingCandidate of bindings) {\n const bindingRecord = snapshotExactClosedRecord(bindingCandidate, [\n \"id\",\n \"instancePath\",\n \"schemaId\"\n ]);\n if (\n bindingRecord === undefined ||\n !safeBindingId(bindingRecord.id) ||\n !normalizedProjectJsonPath(bindingRecord.instancePath) ||\n typeof bindingRecord.schemaId !== \"string\" ||\n !declaredSchemaIds.has(bindingRecord.schemaId) ||\n bindingIds.has(bindingRecord.id)\n ) {\n return false;\n }\n const bindingTarget = `${bindingRecord.instancePath}\\n${bindingRecord.schemaId}`;\n if (bindingTargets.has(bindingTarget)) return false;\n bindingIds.add(bindingRecord.id);\n bindingTargets.add(bindingTarget);\n }\n return true;\n}\n\nfunction safeAbsoluteIdentifier(identifier: unknown): identifier is string {\n if (!boundedNonEmptyString(identifier, 256)) return false;\n try {\n const url = new URL(identifier);\n return safeIdentifierUrl(url, identifier);\n } catch {\n return false;\n }\n}\n\nfunction safeIdentifierUrl(url: URL, identifier: string): boolean {\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n}\n\nfunction safeHttpsOrigin(origin: unknown): origin is string {\n if (!boundedNonEmptyString(origin, 200)) return false;\n try {\n const url = new URL(origin);\n return safeHttpsOriginUrl(url, origin);\n } catch {\n return false;\n }\n}\n\nfunction safeHttpsOriginUrl(url: URL, origin: string): boolean {\n return (\n url.protocol === \"https:\" &&\n url.hostname.length > 0 &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.pathname === \"/\" &&\n url.origin === origin\n );\n}\n\nfunction safePathPrefix(pathPrefix: unknown): pathPrefix is string {\n if (!validPathPrefixSyntax(pathPrefix)) return false;\n const segments = pathPrefix.split(\"/\");\n return segments.every(\n (segment, index) => index === 0 || segment === \"\" || (segment !== \".\" && segment !== \"..\")\n );\n}\n\nfunction validPathPrefixSyntax(pathPrefix: unknown): pathPrefix is string {\n return (\n boundedNonEmptyString(pathPrefix, 256) &&\n pathPrefix.startsWith(\"/\") &&\n (pathPrefix === \"/\" || pathPrefix.endsWith(\"/\")) &&\n !pathPrefix.includes(\"\\\\\") &&\n !pathPrefix.includes(\"?\") &&\n !pathPrefix.includes(\"#\") &&\n !pathPrefix.includes(\"//\")\n );\n}\n\nfunction boundedNonEmptyString(value: unknown, maximumLength: number): value is string {\n return typeof value === \"string\" && value.length > 0 && value.length <= maximumLength;\n}\n\nfunction normalizedProjectJsonPath(projectPath: unknown): projectPath is string {\n if (\n typeof projectPath !== \"string\" ||\n projectPath.length === 0 ||\n projectPath.length > 512 ||\n !projectPath.endsWith(\".json\") ||\n projectPath.startsWith(\"/\") ||\n projectPath.includes(\"\\\\\") ||\n projectPath.includes(\"\\u0000\")\n ) {\n return false;\n }\n return projectPath\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\nfunction safeBindingId(bindingId: unknown): bindingId is string {\n return typeof bindingId === \"string\" && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u.test(bindingId);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\nexport type JsonSchemaIdentityMode =\n | \"require-match\"\n | \"configuration-authoritative\"\n | \"document-authoritative\";\n\nexport interface JsonSchemaIdentity {\n readonly mode: JsonSchemaIdentityMode;\n}\n\nexport type JsonSchemaReferenceSource =\n | Readonly<{ readonly kind: \"bundled\"; readonly catalog: \"json-schema-2020-12\" }>\n | Readonly<{\n readonly kind: \"https\";\n readonly id: string;\n readonly origin: string;\n readonly pathPrefix: string;\n }>;\n\nexport type JsonSchemaReferenceResolution =\n | Readonly<{ readonly mode: \"offline\" }>\n | Readonly<{\n readonly mode: \"allowlisted\";\n readonly sources: readonly JsonSchemaReferenceSource[];\n }>;\n\nexport interface RegisteredJsonSchema {\n readonly id: string;\n readonly path: string;\n}\n\nexport interface JsonSchemaInstanceBinding {\n readonly id: string;\n readonly instancePath: string;\n readonly schemaId: string;\n}\n\n/** `jsonSchemaValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonSchemaValidationOptions {\n /** schema/instance declarations 必须属于的 repository-file selection。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 每个 local schema/instance document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n /** 整个 Check 共用的 schema root identity 规则;不得按 schema 混用。 */\n readonly schemaIdentity?: JsonSchemaIdentity;\n /** 默认离线;额外 schema source 必须显式 allowlist。 */\n readonly referenceResolution?: JsonSchemaReferenceResolution;\n /** 显式注册的 schema resources;ID 是 binding 和 public fact 使用的安全 authoring identity。 */\n readonly schemas?: readonly RegisteredJsonSchema[];\n /** 明确把一个由本 Check file selection 批准的 instance path 绑定到已声明 schema。 */\n readonly bindings?: readonly JsonSchemaInstanceBinding[];\n}\n\n/** `json-schema-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonSchemaValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n readonly schemaIdentity: JsonSchemaIdentity;\n readonly referenceResolution: JsonSchemaReferenceResolution;\n readonly schemas: readonly RegisteredJsonSchema[];\n readonly bindings: readonly JsonSchemaInstanceBinding[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageCheckAuthoringOptions } from \"../check-authoring.ts\";\nimport type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\n/** 已注册 schema 的 root `$id` 与配置 identity 之间的全 Check 统一规则。 */\nexport type JsonSchemaIdentityMode =\n /** root `$id` 必须等于 `schemas[].id`,该配置 ID 也是 engine identity。 */\n | \"require-match\"\n /** 配置 ID 是 engine identity;object schema 的 invocation-local compile copy 使用该 `$id`。 */\n | \"configuration-authoritative\"\n /** 安全的 root `$id` 是 engine identity;配置 ID 仍是 binding 与公开事实的标签。 */\n | \"document-authoritative\";\n\n/** 整个 Check 共用、不能按单个 schema 混用的 root schema identity policy。 */\nexport interface JsonSchemaIdentity {\n /** root `$id` 与配置 `schemas[].id` 的关系。 */\n readonly mode: JsonSchemaIdentityMode;\n}\n\n/** allowlisted 引用解析可读取的单一 Schema 来源及其固定边界。 */\nexport type JsonSchemaReferenceSource =\n /** Package 固定的 JSON Schema catalog;它不授权网络请求。 */\n | Readonly<{ readonly kind: \"bundled\"; readonly catalog: \"json-schema-2020-12\" }>\n | Readonly<{\n /** 只允许本 source 明确限定的 HTTPS reference scope。 */\n readonly kind: \"https\";\n /** 调用方为本 source 选择的安全稳定 identity,不是请求 URL。 */\n readonly id: string;\n /** 精确 HTTPS origin;不含 path、credentials、query 或 fragment。 */\n readonly origin: string;\n /** 已授权 URL path 的边界;从 `/` 开始,非 root prefix 必须以 `/` 结束。 */\n readonly pathPrefix: string;\n }>;\n\n/** 本次 Check 解析 local、bundled 与 allowlisted Schema 引用的封闭策略。 */\nexport type JsonSchemaReferenceResolution =\n /** 只使用 local schemas 和允许的 bundled catalog,不读取额外 HTTPS schema。 */\n | Readonly<{ readonly mode: \"offline\" }>\n | Readonly<{\n /** 只从 `sources` 的精确 scope 读取额外 schema;没有 implicit registry、headers 或 redirects。 */\n readonly mode: \"allowlisted\";\n /** 完整替换的明确 source 集合;每项决定自身可读取的 reference scope。 */\n readonly sources: readonly JsonSchemaReferenceSource[];\n }>;\n\n/** 调用方注册的一份 local schema resource;注册表不自动发现 schema。 */\nexport interface RegisteredJsonSchema {\n /** binding 与公开 facts 使用的安全 schema identity。 */\n readonly id: string;\n /** 已由 `files` selection 批准的 normalized project-relative `.json` path。 */\n readonly path: string;\n}\n\n/** 调用方将一个已批准 local JSON instance 明确绑定到已注册 schema 的关系。 */\nexport interface JsonSchemaInstanceBinding {\n /** 本次 Check 内唯一、用于公开 facts 的 binding identity。 */\n readonly id: string;\n /** 已由 `files` selection 批准的 normalized project-relative `.json` instance path。 */\n readonly instancePath: string;\n /** 必须引用 `schemas` 中已注册 schema 的 identity。 */\n readonly schemaId: string;\n}\n\n/** `jsonSchemaValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonSchemaValidationOptions<\n Id extends string = string\n> extends PackageCheckAuthoringOptions<Id> {\n /** schema/instance declarations 必须属于的 repository-file selection。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 每个 local schema/instance document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n /** 整个 Check 共用的 schema root identity 规则;不得按 schema 混用。 */\n readonly schemaIdentity?: JsonSchemaIdentity;\n /** 默认离线;额外 schema source 必须显式 allowlist。 */\n readonly referenceResolution?: JsonSchemaReferenceResolution;\n /** 显式注册的 schema resources;ID 是 binding 和 public fact 使用的安全 authoring identity。 */\n readonly schemas?: readonly RegisteredJsonSchema[];\n /** 明确把一个由本 Check file selection 批准的 instance path 绑定到已声明 schema。 */\n readonly bindings?: readonly JsonSchemaInstanceBinding[];\n}\n\n/** `json-schema-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonSchemaValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n readonly schemaIdentity: JsonSchemaIdentity;\n readonly referenceResolution: JsonSchemaReferenceResolution;\n readonly schemas: readonly RegisteredJsonSchema[];\n readonly bindings: readonly JsonSchemaInstanceBinding[];\n}\n"]}
|
|
@@ -43,9 +43,13 @@ export class ControlledReferenceResolver {
|
|
|
43
43
|
if (this.#resolverInput.signal.aborted)
|
|
44
44
|
throw new ReferenceTransportFailure();
|
|
45
45
|
const controller = new AbortController();
|
|
46
|
-
const abortForCaller = () =>
|
|
46
|
+
const abortForCaller = () => {
|
|
47
|
+
controller.abort();
|
|
48
|
+
};
|
|
47
49
|
this.#resolverInput.signal.addEventListener("abort", abortForCaller, { once: true });
|
|
48
|
-
const timeout = setTimeout(() =>
|
|
50
|
+
const timeout = setTimeout(() => {
|
|
51
|
+
controller.abort();
|
|
52
|
+
}, REMOTE_TIMEOUT_MS);
|
|
49
53
|
try {
|
|
50
54
|
return await this.loadWithController(referenceUri, controller);
|
|
51
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-resolver.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/reference-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnySchemaObject } from \"ajv\";\n\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\nimport type { SchemaCompileReason } from \"./schema-engine.ts\";\nimport { inspectSchemaPolicy, isJsonObject } from \"./schema-policy.ts\";\nimport { inspectStrictJsonBytes } from \"../json-document/strict-document.ts\";\nimport { normalizeRemoteReference, readBoundedResponse } from \"./remote-response.ts\";\n\ninterface ControlledResolverInput {\n readonly referenceResolution: ResolvedJsonSchemaValidationOptions[\"referenceResolution\"];\n readonly signal: AbortSignal;\n}\n\nconst MAX_REMOTE_RESPONSE_BYTES = 1_048_576;\nconst REMOTE_TIMEOUT_MS = 5_000;\n\nexport class ControlledReferenceResolver {\n readonly #cache = new Map<string, Promise<AnySchemaObject>>();\n #loadQueue: Promise<void> = Promise.resolve();\n readonly #allowedHttpsSources: readonly Readonly<{\n readonly origin: string;\n readonly pathPrefix: string;\n }>[];\n readonly #resolverInput: ControlledResolverInput;\n\n constructor(input: ControlledResolverInput) {\n this.#resolverInput = input;\n this.#allowedHttpsSources =\n input.referenceResolution.mode === \"allowlisted\"\n ? Object.freeze(\n input.referenceResolution.sources.flatMap((source) =>\n source.kind === \"https\"\n ? [Object.freeze({ origin: source.origin, pathPrefix: source.pathPrefix })]\n : []\n )\n )\n : Object.freeze([]);\n }\n\n load(referenceUri: string): Promise<AnySchemaObject> {\n let normalizedReferenceUri: string;\n try {\n normalizedReferenceUri = normalizeRemoteReference(referenceUri);\n } catch {\n return Promise.reject(new ReferenceResolutionFailure(\"unapproved-reference\"));\n }\n const cached = this.#cache.get(normalizedReferenceUri);\n if (cached !== undefined) return cached;\n const loading = this.queueLoad(normalizedReferenceUri);\n this.#cache.set(normalizedReferenceUri, loading);\n return loading;\n }\n\n private queueLoad(referenceUri: string): Promise<AnySchemaObject> {\n const loading = this.#loadQueue.then(\n () => this.loadUncached(referenceUri),\n () => this.loadUncached(referenceUri)\n );\n this.#loadQueue = loading.then(\n () => undefined,\n () => undefined\n );\n return loading;\n }\n\n private async loadUncached(referenceUri: string): Promise<AnySchemaObject> {\n if (!this.isAllowedReference(referenceUri))\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n if (this.#resolverInput.signal.aborted) throw new ReferenceTransportFailure();\n const controller = new AbortController();\n const abortForCaller = (): void => controller.abort();\n this.#resolverInput.signal.addEventListener(\"abort\", abortForCaller, { once: true });\n const timeout = setTimeout(() => controller.abort(), REMOTE_TIMEOUT_MS);\n try {\n return await this.loadWithController(referenceUri, controller);\n } catch (error) {\n if (\n error instanceof ReferenceResolutionFailure ||\n error instanceof ReferenceTransportFailure\n ) {\n throw error;\n }\n throw new ReferenceTransportFailure();\n } finally {\n clearTimeout(timeout);\n this.#resolverInput.signal.removeEventListener(\"abort\", abortForCaller);\n }\n }\n\n private async loadWithController(\n referenceUri: string,\n controller: AbortController\n ): Promise<AnySchemaObject> {\n const response = await fetchSchemaResponse(referenceUri, controller.signal);\n assertAllowedResponse(response);\n if (this.#resolverInput.signal.aborted) throw new ReferenceTransportFailure();\n const bytes = await readBoundedResponse(\n response,\n MAX_REMOTE_RESPONSE_BYTES,\n this.#resolverInput.signal\n );\n return schemaFromRemoteBytes(bytes, referenceUri);\n }\n\n private isAllowedReference(referenceUri: string): boolean {\n let url: URL;\n try {\n url = new URL(referenceUri);\n } catch {\n return false;\n }\n return this.#allowedHttpsSources.some(\n (source) =>\n url.origin === source.origin &&\n (source.pathPrefix === \"/\" || url.pathname.startsWith(source.pathPrefix))\n );\n }\n}\n\nasync function fetchSchemaResponse(referenceUri: string, signal: AbortSignal): Promise<Response> {\n if (typeof globalThis.fetch !== \"function\") throw new ReferenceTransportFailure();\n return globalThis.fetch(referenceUri, {\n credentials: \"omit\",\n method: \"GET\",\n redirect: \"manual\",\n signal\n });\n}\n\nfunction assertAllowedResponse(response: Response): void {\n if (response.redirected || (response.status >= 300 && response.status < 400)) {\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n }\n if (response.ok) return;\n if (response.status >= 500) throw new ReferenceTransportFailure();\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n}\n\nfunction schemaFromRemoteBytes(\n bytes: Uint8Array | \"too-large\",\n referenceUri: string\n): AnySchemaObject {\n if (bytes === \"too-large\") throw new ReferenceResolutionFailure(\"remote-document-invalid\");\n const document = inspectStrictJsonBytes(bytes);\n if (document.kind !== \"valid\" || !isJsonObject(document.jsonValue)) {\n throw new ReferenceResolutionFailure(\"remote-document-invalid\");\n }\n if (document.jsonValue.$id !== referenceUri) {\n throw new ReferenceResolutionFailure(\"remote-schema-id-mismatch\");\n }\n const referenceReason = inspectSchemaPolicy(document.jsonValue);\n if (referenceReason !== undefined) throw new ReferenceResolutionFailure(referenceReason);\n return document.jsonValue;\n}\n\nexport class ReferenceResolutionFailure extends Error {\n readonly reason: SchemaCompileReason;\n\n constructor(reason: SchemaCompileReason) {\n super(reason);\n this.reason = reason;\n }\n}\n\nexport class ReferenceTransportFailure extends Error {}\n"]}
|
|
1
|
+
{"version":3,"file":"reference-resolver.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/reference-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnySchemaObject } from \"ajv\";\n\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\nimport type { SchemaCompileReason } from \"./schema-engine.ts\";\nimport { inspectSchemaPolicy, isJsonObject } from \"./schema-policy.ts\";\nimport { inspectStrictJsonBytes } from \"../json-document/strict-document.ts\";\nimport { normalizeRemoteReference, readBoundedResponse } from \"./remote-response.ts\";\n\ninterface ControlledResolverInput {\n readonly referenceResolution: ResolvedJsonSchemaValidationOptions[\"referenceResolution\"];\n readonly signal: AbortSignal;\n}\n\nconst MAX_REMOTE_RESPONSE_BYTES = 1_048_576;\nconst REMOTE_TIMEOUT_MS = 5_000;\n\nexport class ControlledReferenceResolver {\n readonly #cache = new Map<string, Promise<AnySchemaObject>>();\n #loadQueue: Promise<void> = Promise.resolve();\n readonly #allowedHttpsSources: readonly Readonly<{\n readonly origin: string;\n readonly pathPrefix: string;\n }>[];\n readonly #resolverInput: ControlledResolverInput;\n\n constructor(input: ControlledResolverInput) {\n this.#resolverInput = input;\n this.#allowedHttpsSources =\n input.referenceResolution.mode === \"allowlisted\"\n ? Object.freeze(\n input.referenceResolution.sources.flatMap((source) =>\n source.kind === \"https\"\n ? [Object.freeze({ origin: source.origin, pathPrefix: source.pathPrefix })]\n : []\n )\n )\n : Object.freeze([]);\n }\n\n load(referenceUri: string): Promise<AnySchemaObject> {\n let normalizedReferenceUri: string;\n try {\n normalizedReferenceUri = normalizeRemoteReference(referenceUri);\n } catch {\n return Promise.reject(new ReferenceResolutionFailure(\"unapproved-reference\"));\n }\n const cached = this.#cache.get(normalizedReferenceUri);\n if (cached !== undefined) return cached;\n const loading = this.queueLoad(normalizedReferenceUri);\n this.#cache.set(normalizedReferenceUri, loading);\n return loading;\n }\n\n private queueLoad(referenceUri: string): Promise<AnySchemaObject> {\n const loading = this.#loadQueue.then(\n () => this.loadUncached(referenceUri),\n () => this.loadUncached(referenceUri)\n );\n this.#loadQueue = loading.then(\n () => undefined,\n () => undefined\n );\n return loading;\n }\n\n private async loadUncached(referenceUri: string): Promise<AnySchemaObject> {\n if (!this.isAllowedReference(referenceUri))\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n if (this.#resolverInput.signal.aborted) throw new ReferenceTransportFailure();\n const controller = new AbortController();\n const abortForCaller = (): void => {\n controller.abort();\n };\n this.#resolverInput.signal.addEventListener(\"abort\", abortForCaller, { once: true });\n const timeout = setTimeout(() => {\n controller.abort();\n }, REMOTE_TIMEOUT_MS);\n try {\n return await this.loadWithController(referenceUri, controller);\n } catch (error) {\n if (\n error instanceof ReferenceResolutionFailure ||\n error instanceof ReferenceTransportFailure\n ) {\n throw error;\n }\n throw new ReferenceTransportFailure();\n } finally {\n clearTimeout(timeout);\n this.#resolverInput.signal.removeEventListener(\"abort\", abortForCaller);\n }\n }\n\n private async loadWithController(\n referenceUri: string,\n controller: AbortController\n ): Promise<AnySchemaObject> {\n const response = await fetchSchemaResponse(referenceUri, controller.signal);\n assertAllowedResponse(response);\n if (this.#resolverInput.signal.aborted) throw new ReferenceTransportFailure();\n const bytes = await readBoundedResponse(\n response,\n MAX_REMOTE_RESPONSE_BYTES,\n this.#resolverInput.signal\n );\n return schemaFromRemoteBytes(bytes, referenceUri);\n }\n\n private isAllowedReference(referenceUri: string): boolean {\n let url: URL;\n try {\n url = new URL(referenceUri);\n } catch {\n return false;\n }\n return this.#allowedHttpsSources.some(\n (source) =>\n url.origin === source.origin &&\n (source.pathPrefix === \"/\" || url.pathname.startsWith(source.pathPrefix))\n );\n }\n}\n\nasync function fetchSchemaResponse(referenceUri: string, signal: AbortSignal): Promise<Response> {\n if (typeof globalThis.fetch !== \"function\") throw new ReferenceTransportFailure();\n return globalThis.fetch(referenceUri, {\n credentials: \"omit\",\n method: \"GET\",\n redirect: \"manual\",\n signal\n });\n}\n\nfunction assertAllowedResponse(response: Response): void {\n if (response.redirected || (response.status >= 300 && response.status < 400)) {\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n }\n if (response.ok) return;\n if (response.status >= 500) throw new ReferenceTransportFailure();\n throw new ReferenceResolutionFailure(\"unapproved-reference\");\n}\n\nfunction schemaFromRemoteBytes(\n bytes: Uint8Array | \"too-large\",\n referenceUri: string\n): AnySchemaObject {\n if (bytes === \"too-large\") throw new ReferenceResolutionFailure(\"remote-document-invalid\");\n const document = inspectStrictJsonBytes(bytes);\n if (document.kind !== \"valid\" || !isJsonObject(document.jsonValue)) {\n throw new ReferenceResolutionFailure(\"remote-document-invalid\");\n }\n if (document.jsonValue.$id !== referenceUri) {\n throw new ReferenceResolutionFailure(\"remote-schema-id-mismatch\");\n }\n const referenceReason = inspectSchemaPolicy(document.jsonValue);\n if (referenceReason !== undefined) throw new ReferenceResolutionFailure(referenceReason);\n return document.jsonValue;\n}\n\nexport class ReferenceResolutionFailure extends Error {\n readonly reason: SchemaCompileReason;\n\n constructor(reason: SchemaCompileReason) {\n super(reason);\n this.reason = reason;\n }\n}\n\nexport class ReferenceTransportFailure extends Error {}\n"]}
|
|
@@ -90,8 +90,11 @@ function inspectDirectSchemaPolicy(schemaObject) {
|
|
|
90
90
|
return "invalid-schema";
|
|
91
91
|
if (hasUnsupportedReferenceKeyword(schemaObject))
|
|
92
92
|
return "unsupported-reference";
|
|
93
|
-
if (Object.hasOwn(schemaObject, "$id")
|
|
94
|
-
|
|
93
|
+
if (Object.hasOwn(schemaObject, "$id")) {
|
|
94
|
+
const identifier = schemaObject.$id;
|
|
95
|
+
if (identifier === undefined || !permittedNestedIdentifier(identifier)) {
|
|
96
|
+
return "unsupported-reference";
|
|
97
|
+
}
|
|
95
98
|
}
|
|
96
99
|
return hasInvalidReferenceValue(schemaObject) ? "unsupported-reference" : undefined;
|
|
97
100
|
}
|
|
@@ -99,7 +102,12 @@ function hasUnsupportedReferenceKeyword(schemaObject) {
|
|
|
99
102
|
return Object.hasOwn(schemaObject, "$dynamicRef") || Object.hasOwn(schemaObject, "$recursiveRef");
|
|
100
103
|
}
|
|
101
104
|
function hasInvalidReferenceValue(schemaObject) {
|
|
102
|
-
return ["$ref", "$schema"].some((key) =>
|
|
105
|
+
return ["$ref", "$schema"].some((key) => {
|
|
106
|
+
if (!Object.hasOwn(schemaObject, key))
|
|
107
|
+
return false;
|
|
108
|
+
const reference = schemaObject[key];
|
|
109
|
+
return reference === undefined || !permittedReference(reference);
|
|
110
|
+
});
|
|
103
111
|
}
|
|
104
112
|
function inspectNestedSchemaPolicies(schemaObject) {
|
|
105
113
|
for (const [keyword, keywordValue] of Object.entries(schemaObject)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-policy.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/schema-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnySchema } from \"ajv\";\n\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\nimport type { LoadedSchema, SchemaCompileReason } from \"./schema-engine.ts\";\nimport type { StrictJsonValue } from \"../json-document/strict-document.ts\";\n\nexport interface PreparedSchema {\n readonly authoringId: string;\n readonly engineId: string;\n readonly engineSchema: AnySchema;\n}\n\nexport function prepareSchema(\n loadedSchema: LoadedSchema,\n mode: ResolvedJsonSchemaValidationOptions[\"schemaIdentity\"][\"mode\"]\n): PreparedSchema | SchemaCompileReason {\n if (mode === \"configuration-authoritative\") {\n const documentValue = withConfigurationIdentity(loadedSchema.documentValue, loadedSchema.id);\n const engineSchema = toAjvSchema(documentValue);\n if (engineSchema === undefined) return \"invalid-schema\";\n const referenceReason = inspectSchemaPolicy(documentValue);\n if (referenceReason !== undefined) return referenceReason;\n return Object.freeze({\n authoringId: loadedSchema.id,\n engineId: loadedSchema.id,\n engineSchema\n });\n }\n\n if (!isJsonObject(loadedSchema.documentValue)) return \"missing-schema-id\";\n const documentId = loadedSchema.documentValue.$id;\n if (typeof documentId !== \"string\") return \"missing-schema-id\";\n if (!safeSchemaIdentifier(documentId)) return \"invalid-document-id\";\n if (mode === \"require-match\" && documentId !== loadedSchema.id) return \"schema-id-mismatch\";\n const referenceReason = inspectSchemaPolicy(loadedSchema.documentValue);\n if (referenceReason !== undefined) return referenceReason;\n return Object.freeze({\n authoringId: loadedSchema.id,\n engineId: documentId,\n engineSchema: loadedSchema.documentValue\n });\n}\n\nexport function rejectDuplicateEngineIds(\n preparedSchemas: Map<string, PreparedSchema>,\n failures: Map<string, SchemaCompileReason>\n): void {\n const byEngineId = new Map<string, string[]>();\n for (const preparedSchema of preparedSchemas.values()) {\n const authoringIds = byEngineId.get(preparedSchema.engineId) ?? [];\n authoringIds.push(preparedSchema.authoringId);\n byEngineId.set(preparedSchema.engineId, authoringIds);\n }\n for (const authoringIds of byEngineId.values()) {\n if (authoringIds.length < 2) continue;\n for (const authoringId of authoringIds) {\n preparedSchemas.delete(authoringId);\n failures.set(authoringId, \"duplicate-engine-id\");\n }\n }\n}\n\nfunction withConfigurationIdentity(\n documentValue: StrictJsonValue,\n configuredSchemaId: string\n): StrictJsonValue {\n if (!isJsonObject(documentValue)) return documentValue;\n const copy: Record<string, StrictJsonValue> = {};\n Object.setPrototypeOf(copy, null);\n for (const [key, nested] of Object.entries(documentValue)) {\n Object.defineProperty(copy, key, {\n configurable: false,\n enumerable: true,\n value: key === \"$id\" ? configuredSchemaId : nested,\n writable: false\n });\n }\n if (!Object.hasOwn(copy, \"$id\")) {\n Object.defineProperty(copy, \"$id\", {\n configurable: false,\n enumerable: true,\n value: configuredSchemaId,\n writable: false\n });\n }\n return Object.freeze(copy);\n}\n\n/**\n * Inspects only JSON Schema-bearing locations. Annotation payloads and property names are data, not keywords,\n * so they must not be mistaken for `$ref`, `$dynamicRef`, or an Ajv extension.\n */\nexport function inspectSchemaPolicy(schemaValue: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(schemaValue)) return undefined;\n return inspectSchemaObject(schemaValue);\n}\n\nfunction inspectSchemaObject(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n const directReason = inspectDirectSchemaPolicy(schemaObject);\n if (directReason !== undefined) return directReason;\n return inspectNestedSchemaPolicies(schemaObject);\n}\n\nfunction inspectDirectSchemaPolicy(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n if (Object.hasOwn(schemaObject, \"$async\")) return \"invalid-schema\";\n if (hasUnsupportedReferenceKeyword(schemaObject)) return \"unsupported-reference\";\n if (Object.hasOwn(schemaObject, \"$id\") && !permittedNestedIdentifier(schemaObject.$id)) {\n return \"unsupported-reference\";\n }\n return hasInvalidReferenceValue(schemaObject) ? \"unsupported-reference\" : undefined;\n}\n\nfunction hasUnsupportedReferenceKeyword(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): boolean {\n return Object.hasOwn(schemaObject, \"$dynamicRef\") || Object.hasOwn(schemaObject, \"$recursiveRef\");\n}\n\nfunction hasInvalidReferenceValue(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): boolean {\n return [\"$ref\", \"$schema\"].some(\n (key) => Object.hasOwn(schemaObject, key) && !permittedReference(schemaObject[key])\n );\n}\n\nfunction inspectNestedSchemaPolicies(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n for (const [keyword, keywordValue] of Object.entries(schemaObject)) {\n const reason = inspectNestedSchemaPolicy(keyword, keywordValue);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectNestedSchemaPolicy(\n keyword: string,\n keywordValue: StrictJsonValue\n): SchemaCompileReason | undefined {\n if (SCHEMA_MAP_KEYWORDS.has(keyword)) return inspectSchemaMap(keywordValue);\n if (SCHEMA_VALUE_KEYWORDS.has(keyword)) return inspectSchemaValue(keywordValue);\n if (SCHEMA_ARRAY_KEYWORDS.has(keyword)) return inspectSchemaArray(keywordValue);\n if (keyword === \"dependencies\") return inspectLegacyDependencies(keywordValue);\n return undefined;\n}\n\nfunction inspectSchemaMap(schemaMap: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(schemaMap)) return undefined;\n for (const nestedSchema of Object.values(schemaMap)) {\n const reason = inspectSchemaValue(nestedSchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectSchemaValue(candidateSchema: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(candidateSchema)) return undefined;\n return inspectSchemaObject(candidateSchema);\n}\n\nfunction inspectSchemaArray(schemaArray: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isStrictJsonArray(schemaArray)) return undefined;\n for (const nestedSchema of schemaArray) {\n const reason = inspectSchemaValue(nestedSchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectLegacyDependencies(\n dependencyMap: StrictJsonValue\n): SchemaCompileReason | undefined {\n if (!isJsonObject(dependencyMap)) return undefined;\n for (const dependencySchema of Object.values(dependencyMap)) {\n const reason = inspectSchemaValue(dependencySchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nconst SCHEMA_MAP_KEYWORDS: ReadonlySet<string> = new Set([\n \"$defs\",\n \"definitions\",\n \"dependentSchemas\",\n \"patternProperties\",\n \"properties\"\n]);\n\nconst SCHEMA_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalItems\",\n \"additionalProperties\",\n \"contains\",\n \"contentSchema\",\n \"else\",\n \"if\",\n \"items\",\n \"not\",\n \"propertyNames\",\n \"then\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\"\n]);\n\nconst SCHEMA_ARRAY_KEYWORDS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"anyOf\",\n \"oneOf\",\n \"prefixItems\"\n]);\n\nfunction permittedReference(referenceValue: StrictJsonValue): boolean {\n if (typeof referenceValue !== \"string\") return false;\n if (referenceValue.startsWith(\"#\")) return true;\n try {\n const url = new URL(referenceValue);\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0\n );\n } catch {\n return false;\n }\n}\n\nfunction permittedNestedIdentifier(identifierValue: StrictJsonValue): boolean {\n return (\n typeof identifierValue === \"string\" &&\n (identifierValue.startsWith(\"#\") || safeSchemaIdentifier(identifierValue))\n );\n}\n\nfunction safeSchemaIdentifier(identifier: string): boolean {\n try {\n const url = new URL(identifier);\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n } catch {\n return false;\n }\n}\n\nexport function isJsonObject(\n candidateValue: StrictJsonValue\n): candidateValue is Readonly<Record<string, StrictJsonValue>> {\n return (\n typeof candidateValue === \"object\" &&\n candidateValue !== null &&\n !isStrictJsonArray(candidateValue)\n );\n}\n\nfunction isStrictJsonArray(\n candidateValue: StrictJsonValue\n): candidateValue is readonly StrictJsonValue[] {\n return Array.isArray(candidateValue);\n}\n\nfunction toAjvSchema(documentValue: StrictJsonValue): AnySchema | undefined {\n if (typeof documentValue === \"boolean\") return documentValue;\n if (!isJsonObject(documentValue)) return undefined;\n return documentValue;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"schema-policy.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-schema-validation/schema-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnySchema } from \"ajv\";\n\nimport type { ResolvedJsonSchemaValidationOptions } from \"./options.ts\";\nimport type { LoadedSchema, SchemaCompileReason } from \"./schema-engine.ts\";\nimport type { StrictJsonValue } from \"../json-document/strict-document.ts\";\n\nexport interface PreparedSchema {\n readonly authoringId: string;\n readonly engineId: string;\n readonly engineSchema: AnySchema;\n}\n\nexport function prepareSchema(\n loadedSchema: LoadedSchema,\n mode: ResolvedJsonSchemaValidationOptions[\"schemaIdentity\"][\"mode\"]\n): PreparedSchema | SchemaCompileReason {\n if (mode === \"configuration-authoritative\") {\n const documentValue = withConfigurationIdentity(loadedSchema.documentValue, loadedSchema.id);\n const engineSchema = toAjvSchema(documentValue);\n if (engineSchema === undefined) return \"invalid-schema\";\n const referenceReason = inspectSchemaPolicy(documentValue);\n if (referenceReason !== undefined) return referenceReason;\n return Object.freeze({\n authoringId: loadedSchema.id,\n engineId: loadedSchema.id,\n engineSchema\n });\n }\n\n if (!isJsonObject(loadedSchema.documentValue)) return \"missing-schema-id\";\n const documentId = loadedSchema.documentValue.$id;\n if (typeof documentId !== \"string\") return \"missing-schema-id\";\n if (!safeSchemaIdentifier(documentId)) return \"invalid-document-id\";\n if (mode === \"require-match\" && documentId !== loadedSchema.id) return \"schema-id-mismatch\";\n const referenceReason = inspectSchemaPolicy(loadedSchema.documentValue);\n if (referenceReason !== undefined) return referenceReason;\n return Object.freeze({\n authoringId: loadedSchema.id,\n engineId: documentId,\n engineSchema: loadedSchema.documentValue\n });\n}\n\nexport function rejectDuplicateEngineIds(\n preparedSchemas: Map<string, PreparedSchema>,\n failures: Map<string, SchemaCompileReason>\n): void {\n const byEngineId = new Map<string, string[]>();\n for (const preparedSchema of preparedSchemas.values()) {\n const authoringIds = byEngineId.get(preparedSchema.engineId) ?? [];\n authoringIds.push(preparedSchema.authoringId);\n byEngineId.set(preparedSchema.engineId, authoringIds);\n }\n for (const authoringIds of byEngineId.values()) {\n if (authoringIds.length < 2) continue;\n for (const authoringId of authoringIds) {\n preparedSchemas.delete(authoringId);\n failures.set(authoringId, \"duplicate-engine-id\");\n }\n }\n}\n\nfunction withConfigurationIdentity(\n documentValue: StrictJsonValue,\n configuredSchemaId: string\n): StrictJsonValue {\n if (!isJsonObject(documentValue)) return documentValue;\n const copy: Record<string, StrictJsonValue> = {};\n Object.setPrototypeOf(copy, null);\n for (const [key, nested] of Object.entries(documentValue)) {\n Object.defineProperty(copy, key, {\n configurable: false,\n enumerable: true,\n value: key === \"$id\" ? configuredSchemaId : nested,\n writable: false\n });\n }\n if (!Object.hasOwn(copy, \"$id\")) {\n Object.defineProperty(copy, \"$id\", {\n configurable: false,\n enumerable: true,\n value: configuredSchemaId,\n writable: false\n });\n }\n return Object.freeze(copy);\n}\n\n/**\n * Inspects only JSON Schema-bearing locations. Annotation payloads and property names are data, not keywords,\n * so they must not be mistaken for `$ref`, `$dynamicRef`, or an Ajv extension.\n */\nexport function inspectSchemaPolicy(schemaValue: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(schemaValue)) return undefined;\n return inspectSchemaObject(schemaValue);\n}\n\nfunction inspectSchemaObject(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n const directReason = inspectDirectSchemaPolicy(schemaObject);\n if (directReason !== undefined) return directReason;\n return inspectNestedSchemaPolicies(schemaObject);\n}\n\nfunction inspectDirectSchemaPolicy(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n if (Object.hasOwn(schemaObject, \"$async\")) return \"invalid-schema\";\n if (hasUnsupportedReferenceKeyword(schemaObject)) return \"unsupported-reference\";\n if (Object.hasOwn(schemaObject, \"$id\")) {\n const identifier = schemaObject.$id;\n if (identifier === undefined || !permittedNestedIdentifier(identifier)) {\n return \"unsupported-reference\";\n }\n }\n return hasInvalidReferenceValue(schemaObject) ? \"unsupported-reference\" : undefined;\n}\n\nfunction hasUnsupportedReferenceKeyword(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): boolean {\n return Object.hasOwn(schemaObject, \"$dynamicRef\") || Object.hasOwn(schemaObject, \"$recursiveRef\");\n}\n\nfunction hasInvalidReferenceValue(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): boolean {\n return [\"$ref\", \"$schema\"].some((key) => {\n if (!Object.hasOwn(schemaObject, key)) return false;\n const reference = schemaObject[key];\n return reference === undefined || !permittedReference(reference);\n });\n}\n\nfunction inspectNestedSchemaPolicies(\n schemaObject: Readonly<Record<string, StrictJsonValue>>\n): SchemaCompileReason | undefined {\n for (const [keyword, keywordValue] of Object.entries(schemaObject)) {\n const reason = inspectNestedSchemaPolicy(keyword, keywordValue);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectNestedSchemaPolicy(\n keyword: string,\n keywordValue: StrictJsonValue\n): SchemaCompileReason | undefined {\n if (SCHEMA_MAP_KEYWORDS.has(keyword)) return inspectSchemaMap(keywordValue);\n if (SCHEMA_VALUE_KEYWORDS.has(keyword)) return inspectSchemaValue(keywordValue);\n if (SCHEMA_ARRAY_KEYWORDS.has(keyword)) return inspectSchemaArray(keywordValue);\n if (keyword === \"dependencies\") return inspectLegacyDependencies(keywordValue);\n return undefined;\n}\n\nfunction inspectSchemaMap(schemaMap: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(schemaMap)) return undefined;\n for (const nestedSchema of Object.values(schemaMap)) {\n const reason = inspectSchemaValue(nestedSchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectSchemaValue(candidateSchema: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isJsonObject(candidateSchema)) return undefined;\n return inspectSchemaObject(candidateSchema);\n}\n\nfunction inspectSchemaArray(schemaArray: StrictJsonValue): SchemaCompileReason | undefined {\n if (!isStrictJsonArray(schemaArray)) return undefined;\n for (const nestedSchema of schemaArray) {\n const reason = inspectSchemaValue(nestedSchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nfunction inspectLegacyDependencies(\n dependencyMap: StrictJsonValue\n): SchemaCompileReason | undefined {\n if (!isJsonObject(dependencyMap)) return undefined;\n for (const dependencySchema of Object.values(dependencyMap)) {\n const reason = inspectSchemaValue(dependencySchema);\n if (reason !== undefined) return reason;\n }\n return undefined;\n}\n\nconst SCHEMA_MAP_KEYWORDS: ReadonlySet<string> = new Set([\n \"$defs\",\n \"definitions\",\n \"dependentSchemas\",\n \"patternProperties\",\n \"properties\"\n]);\n\nconst SCHEMA_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalItems\",\n \"additionalProperties\",\n \"contains\",\n \"contentSchema\",\n \"else\",\n \"if\",\n \"items\",\n \"not\",\n \"propertyNames\",\n \"then\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\"\n]);\n\nconst SCHEMA_ARRAY_KEYWORDS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"anyOf\",\n \"oneOf\",\n \"prefixItems\"\n]);\n\nfunction permittedReference(referenceValue: StrictJsonValue): boolean {\n if (typeof referenceValue !== \"string\") return false;\n if (referenceValue.startsWith(\"#\")) return true;\n try {\n const url = new URL(referenceValue);\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0\n );\n } catch {\n return false;\n }\n}\n\nfunction permittedNestedIdentifier(identifierValue: StrictJsonValue): boolean {\n return (\n typeof identifierValue === \"string\" &&\n (identifierValue.startsWith(\"#\") || safeSchemaIdentifier(identifierValue))\n );\n}\n\nfunction safeSchemaIdentifier(identifier: string): boolean {\n try {\n const url = new URL(identifier);\n return (\n (url.protocol === \"https:\" || url.protocol === \"urn:\") &&\n url.username.length === 0 &&\n url.password.length === 0 &&\n url.search.length === 0 &&\n url.hash.length === 0 &&\n url.href === identifier\n );\n } catch {\n return false;\n }\n}\n\nexport function isJsonObject(\n candidateValue: StrictJsonValue\n): candidateValue is Readonly<Record<string, StrictJsonValue>> {\n return (\n typeof candidateValue === \"object\" &&\n candidateValue !== null &&\n !isStrictJsonArray(candidateValue)\n );\n}\n\nfunction isStrictJsonArray(\n candidateValue: StrictJsonValue\n): candidateValue is readonly StrictJsonValue[] {\n return Array.isArray(candidateValue);\n}\n\nfunction toAjvSchema(documentValue: StrictJsonValue): AnySchema | undefined {\n if (typeof documentValue === \"boolean\") return documentValue;\n if (!isJsonObject(documentValue)) return undefined;\n return documentValue;\n}\n"]}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
import { defineCheck } from "../../check/check.mjs";
|
|
2
|
+
import { resolvePackageCheckAuthoringInput } from "../check-authoring.mjs";
|
|
2
3
|
import { JSON_VALIDATION_CHECK_DEFINITION, executeJsonValidation } from "./json-validation.mjs";
|
|
3
4
|
import { parseJsonValidationData } from "./final-data.mjs";
|
|
4
5
|
import { resolveJsonValidationOptions } from "./options-resolution.mjs";
|
|
5
6
|
import { validJsonValidationOptions } from "./options-validation.mjs";
|
|
6
|
-
/**
|
|
7
|
-
* 使用可省略的文件范围与 byte limit 构造严格 JSON document Check。
|
|
8
|
-
*
|
|
9
|
-
* @param options - 省略字段由 package 补齐;显式 files 数组作为对应字段的完整替换值。
|
|
10
|
-
* @returns 固定 `json-validation` identity、完整冻结 options、final-data parser 与执行逻辑。
|
|
11
|
-
* @throws {TypeError} input 含未知字段、非法文件选择或非法 byte limit 时抛出。
|
|
12
|
-
*/
|
|
13
7
|
export function jsonValidation(options = {}) {
|
|
14
|
-
const
|
|
8
|
+
const input = resolvePackageCheckAuthoringInput(options, ["files", "maximumBytes"], JSON_VALIDATION_CHECK_DEFINITION);
|
|
9
|
+
if (input === undefined) {
|
|
10
|
+
throw new TypeError("jsonValidation options must match the documented closed policy");
|
|
11
|
+
}
|
|
12
|
+
const resolvedOptions = resolveJsonValidationOptions(input.domainOptions);
|
|
15
13
|
if (resolvedOptions === undefined) {
|
|
16
14
|
throw new TypeError("jsonValidation options must match the documented closed policy");
|
|
17
15
|
}
|
|
18
16
|
return defineCheck({
|
|
19
|
-
...
|
|
20
|
-
|
|
17
|
+
...input.definition,
|
|
18
|
+
execute: executeJsonValidation,
|
|
21
19
|
parseData: parseJsonValidationData,
|
|
22
|
-
|
|
20
|
+
prepare: (preparedOptions) => validJsonValidationOptions(preparedOptions)
|
|
23
21
|
? { status: "success", preparedOptions }
|
|
24
22
|
: {
|
|
25
23
|
status: "failure",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,iCAAiC,EAElC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAsBrE,MAAM,UAAU,cAAc,CAC5B,OAAO,GAA0B,EAAE;IAEnC,MAAM,KAAK,GAAG,iCAAiC,CAC7C,OAAO,EACP,CAAC,OAAO,EAAE,cAAc,CAAC,EACzB,gCAAgC,CACjC,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,eAAe,GAAG,4BAA4B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,UAAU;QACnB,OAAO,EAAE,qBAAqB;QAC9B,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,CAAC,eAAe,EAAE,EAAE,CAC3B,0BAA0B,CAAC,eAAe,CAAC;YACzC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YACxC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,+HAA+H;qBAClI;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport {\n resolvePackageCheckAuthoringInput,\n type PackageCheckIdentityInput\n} from \"../check-authoring.ts\";\nimport { JSON_VALIDATION_CHECK_DEFINITION, executeJsonValidation } from \"./json-validation.ts\";\nimport { parseJsonValidationData } from \"./final-data.ts\";\nimport type { JsonValidationOptions, ResolvedJsonValidationOptions } from \"./options.ts\";\nimport { resolveJsonValidationOptions } from \"./options-resolution.ts\";\nimport { validJsonValidationOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的文件范围与 byte limit 构造严格 JSON document Check。\n *\n * @param options - 省略字段由 package 补齐;显式 files 数组作为对应字段的完整替换值。\n * @returns 固定 `json-validation` identity、完整冻结 options、final-data parser 与执行逻辑。\n * @throws {TypeError} input 含未知字段、非法文件选择或非法 byte limit 时抛出。\n */\nexport function jsonValidation(\n options?: JsonValidationOptions<\"json-validation\">\n): TypedCheckWithOptions<\n \"json-validation\",\n ResolvedJsonValidationOptions,\n typeof parseJsonValidationData\n>;\nexport function jsonValidation<const Id extends string>(\n options: JsonValidationOptions<Id> & PackageCheckIdentityInput<Id>\n): TypedCheckWithOptions<Id, ResolvedJsonValidationOptions, typeof parseJsonValidationData>;\nexport function jsonValidation(\n options: JsonValidationOptions\n): TypedCheckWithOptions<string, ResolvedJsonValidationOptions, typeof parseJsonValidationData>;\nexport function jsonValidation(\n options: JsonValidationOptions = {}\n): TypedCheckWithOptions<string, ResolvedJsonValidationOptions, typeof parseJsonValidationData> {\n const input = resolvePackageCheckAuthoringInput(\n options,\n [\"files\", \"maximumBytes\"],\n JSON_VALIDATION_CHECK_DEFINITION\n );\n if (input === undefined) {\n throw new TypeError(\"jsonValidation options must match the documented closed policy\");\n }\n const resolvedOptions = resolveJsonValidationOptions(input.domainOptions);\n if (resolvedOptions === undefined) {\n throw new TypeError(\"jsonValidation options must match the documented closed policy\");\n }\n return defineCheck({\n ...input.definition,\n execute: executeJsonValidation,\n parseData: parseJsonValidationData,\n prepare: (preparedOptions) =>\n validJsonValidationOptions(preparedOptions)\n ? { status: \"success\", preparedOptions }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"jsonValidation options are invalid; recreate the Check with jsonValidation(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAgBlC,kEAAkE;AAClE,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,MAAM,KAAK,GAAG,oBAAoB,CAChC,IAAI,EACJ,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,CAAC,EAC9F,gBAAgB,CACjB,CAAC;IACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5E,IACE,gBAAgB,KAAK,SAAS;QAC9B,cAAc,KAAK,SAAS;QAC5B,gBAAgB,KAAK,SAAS;QAC9B,UAAU,KAAK,SAAS;QACxB,kBAAkB,KAAK,SAAS;QAChC,gBAAgB,KAAK,cAAc,GAAG,gBAAgB;QACtD,UAAU,KAAK,gBAAgB,GAAG,kBAAkB,EACpD,CAAC;QACD,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n exactFinalDataRecord,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\n/** `json-validation` 在 passed/failed outcome 中发布的主数据。 */\nexport interface JsonValidationFinalData {\n /** 已完成 JSON parse 判定的文件数,恒等于 validFileCount 与 invalidFileCount 之和。 */\n readonly scannedFileCount: number;\n /** 被 bounded strict-document boundary 接受为有效 JSON 的文件数。 */\n readonly validFileCount: number;\n /** 形成 `too-large`、encoding、syntax 或 duplicate-key document issue 的文件数。 */\n readonly invalidFileCount: number;\n /** 全部 invalid file 与 rejected input 的合计问题数。 */\n readonly issueCount: number;\n /** files policy 已选中、但因不是 lower-case `.json` path 而被拒绝的输入数。 */\n readonly rejectedInputCount: number;\n}\n\n/** 验证计数不变量并脱离一份 `json-validation` canonical final-data object。 */\nexport function parseJsonValidationData(data: unknown): JsonValidationFinalData {\n const value = exactFinalDataRecord(\n data,\n [\"scannedFileCount\", \"validFileCount\", \"invalidFileCount\", \"issueCount\", \"rejectedInputCount\"],\n \"jsonValidation\"\n );\n const scannedFileCount = nonNegativeSafeInteger(value.scannedFileCount);\n const validFileCount = nonNegativeSafeInteger(value.validFileCount);\n const invalidFileCount = nonNegativeSafeInteger(value.invalidFileCount);\n const issueCount = nonNegativeSafeInteger(value.issueCount);\n const rejectedInputCount = nonNegativeSafeInteger(value.rejectedInputCount);\n if (\n scannedFileCount === undefined ||\n validFileCount === undefined ||\n invalidFileCount === undefined ||\n issueCount === undefined ||\n rejectedInputCount === undefined ||\n scannedFileCount !== validFileCount + invalidFileCount ||\n issueCount !== invalidFileCount + rejectedInputCount\n ) {\n throw invalidFinalData(\"jsonValidation\");\n }\n return Object.freeze({\n scannedFileCount,\n validFileCount,\n invalidFileCount,\n issueCount,\n rejectedInputCount\n });\n}\n"]}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
2
|
+
import { isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
|
|
2
3
|
import { validProjectFileSelection } from "../project-files/configuration.mjs";
|
|
3
|
-
function exactRecord(value, keys) {
|
|
4
|
-
const record = snapshotClosedRecord(value);
|
|
5
|
-
return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
|
|
6
|
-
}
|
|
7
|
-
function positiveSafeInteger(value) {
|
|
8
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
9
|
-
}
|
|
10
4
|
export function validJsonValidationOptions(value) {
|
|
11
|
-
const options =
|
|
5
|
+
const options = snapshotExactClosedRecord(value, ["files", "maximumBytes"]);
|
|
12
6
|
return (options !== undefined &&
|
|
13
7
|
validProjectFileSelection(options.files) &&
|
|
14
|
-
|
|
8
|
+
isPositiveSafeInteger(options.maximumBytes));
|
|
15
9
|
}
|
|
16
10
|
//# sourceMappingURL=options-validation.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options-validation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5E,OAAO,CACL,OAAO,KAAK,SAAS;QACrB,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAC5C,CAAC;AACJ,CAAC","sourcesContent":["import { snapshotExactClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport { isPositiveSafeInteger } from \"../../data-boundary/value-shapes.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonValidationOptions } from \"./options.ts\";\n\nexport function validJsonValidationOptions(value: unknown): value is ResolvedJsonValidationOptions {\n const options = snapshotExactClosedRecord(value, [\"files\", \"maximumBytes\"]);\n return (\n options !== undefined &&\n validProjectFileSelection(options.files) &&\n isPositiveSafeInteger(options.maximumBytes)\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\n/** `jsonValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonValidationOptions {\n /** 参与本 Check 的 repository-file selection;省略字段使用 package defaults。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 单个 JSON document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n}\n\n/** `json-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { PackageCheckAuthoringOptions } from \"../check-authoring.ts\";\nimport type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\n/** `jsonValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonValidationOptions<\n Id extends string = string\n> extends PackageCheckAuthoringOptions<Id> {\n /** 参与本 Check 的 repository-file selection;省略字段使用 package defaults。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 单个 JSON document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n}\n\n/** `json-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { hasExactPlainRecordKeys, snapshotClosedRecord, snapshotExactClosedRecord } from "../data-boundary/closed-values.mjs";
|
|
3
|
+
export function resolveOptionalLocalCacheOptions(value) {
|
|
4
|
+
if (value === undefined)
|
|
5
|
+
return Object.freeze({ enabled: false });
|
|
6
|
+
const cache = snapshotClosedRecord(value);
|
|
7
|
+
if (cache === undefined)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (hasExactPlainRecordKeys(cache, ["enabled"]) && cache.enabled === false)
|
|
10
|
+
return Object.freeze({ enabled: false });
|
|
11
|
+
if (hasExactPlainRecordKeys(cache, ["enabled", "directory"]) &&
|
|
12
|
+
cache.enabled === true &&
|
|
13
|
+
typeof cache.directory === "string")
|
|
14
|
+
return Object.freeze({ enabled: true, directory: cache.directory });
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
export function validLocalCacheOptions(value) {
|
|
18
|
+
const disabled = snapshotExactClosedRecord(value, ["enabled"]);
|
|
19
|
+
if (disabled?.enabled === false)
|
|
20
|
+
return true;
|
|
21
|
+
const enabled = snapshotExactClosedRecord(value, ["enabled", "directory"]);
|
|
22
|
+
return (enabled?.enabled === true &&
|
|
23
|
+
typeof enabled.directory === "string" &&
|
|
24
|
+
enabled.directory.length > 0 &&
|
|
25
|
+
!enabled.directory.includes("\0") &&
|
|
26
|
+
isAbsolute(enabled.directory));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=local-cache-options.mjs.map
|